dolibarr  19.0.0-dev
facture_fournisseur.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
6  * Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
28 // Load Dolibarr environment
29 require '../../main.inc.php';
30 require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
31 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
34 
35 // Load translation files required by the page
36 $langs->loadLangs(array('companies', 'bills', 'products', 'companies', 'supplier_proposal'));
37 
38 $id = GETPOST('id', 'int');
39 $ref = GETPOST('ref', 'alpha');
40 
41 // Security check
42 $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
43 $fieldtype = (!empty($ref) ? 'ref' : 'rowid');
44 $socid = '';
45 if (!empty($user->socid)) {
46  $socid = $user->socid;
47 }
48 
49 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
50 $hookmanager->initHooks(array('productstatssupplierinvoice'));
51 
52 // Load variable for pagination
53 $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
54 $sortfield = GETPOST('sortfield', 'aZ09comma');
55 $sortorder = GETPOST('sortorder', 'aZ09comma');
56 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
57 if (empty($page) || $page == -1) {
58  $page = 0;
59 } // If $page is not defined, or '' or -1
60 $offset = $limit * $page;
61 $pageprev = $page - 1;
62 $pagenext = $page + 1;
63 if (!$sortorder) {
64  $sortorder = "DESC";
65 }
66 if (!$sortfield) {
67  $sortfield = "f.datef";
68 }
69 $search_month = GETPOST('search_month', 'int');
70 $search_year = GETPOST('search_year', 'int');
71 
72 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
73  $search_month = '';
74  $search_year = '';
75 }
76 
77 $result = restrictedArea($user, 'produit|service', $fieldvalue, 'product&product', '', '', $fieldtype);
78 
79 
80 /*
81  * View
82  */
83 
84 $supplierinvoicestatic = new FactureFournisseur($db);
85 $societestatic = new Societe($db);
86 
87 $form = new Form($db);
88 $formother = new FormOther($db);
89 
90 if ($id > 0 || !empty($ref)) {
91  $product = new Product($db);
92  $result = $product->fetch($id, $ref);
93 
94  $object = $product;
95 
96  $parameters = array('id' => $id);
97  $reshook = $hookmanager->executeHooks('doActions', $parameters, $product, $action); // Note that $action and $object may have been modified by some hooks
98  if ($reshook < 0) {
99  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
100  }
101 
102  llxHeader("", "", $langs->trans("CardProduct".$product->type));
103 
104  if ($result > 0) {
105  $head = product_prepare_head($product);
106  $titre = $langs->trans("CardProduct".$product->type);
107  $picto = ($product->type == Product::TYPE_SERVICE ? 'service' : 'product');
108  print dol_get_fiche_head($head, 'referers', $titre, -1, $picto);
109 
110  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $product, $action); // Note that $action and $object may have been modified by hook
111  print $hookmanager->resPrint;
112  if ($reshook < 0) {
113  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
114  }
115 
116  $linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
117 
118  $shownav = 1;
119  if ($user->socid && !in_array('product', explode(',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) {
120  $shownav = 0;
121  }
122 
123  dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
124 
125  print '<div class="fichecenter">';
126 
127  print '<div class="underbanner clearboth"></div>';
128  print '<table class="border tableforfield" width="100%">';
129 
130  $nboflines = show_stats_for_company($product, $socid);
131 
132  print "</table>";
133 
134  print '</div>';
135  print '<div class="clearboth"></div>';
136 
137  print dol_get_fiche_end();
138 
139 
140  if ($user->hasRight('fournisseur', 'facture', 'lire')) {
141  $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client, d.rowid, d.total_ht as line_total_ht,";
142  $sql .= " f.rowid as facid, f.ref, f.ref_supplier, f.datef, f.libelle as label, f.total_ht, f.total_ttc, f.total_tva, f.paye, f.fk_statut as statut, d.qty";
143  if (empty($user->rights->societe->client->voir) && !$socid) {
144  $sql .= ", sc.fk_soc, sc.fk_user ";
145  }
146  $sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
147  $sql .= ", ".MAIN_DB_PREFIX."facture_fourn as f";
148  $sql .= ", ".MAIN_DB_PREFIX."facture_fourn_det as d";
149  if (empty($user->rights->societe->client->voir) && !$socid) {
150  $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
151  }
152  $sql .= " WHERE f.fk_soc = s.rowid";
153  $sql .= " AND f.entity IN (".getEntity('facture_fourn').")";
154  $sql .= " AND d.fk_facture_fourn = f.rowid";
155  $sql .= " AND d.fk_product = ".((int) $product->id);
156  if (!empty($search_month)) {
157  $sql .= ' AND MONTH(f.datef) IN ('.$db->sanitize($search_month).')';
158  }
159  if (!empty($search_year)) {
160  $sql .= ' AND YEAR(f.datef) IN ('.$db->sanitize($search_year).')';
161  }
162  if (empty($user->rights->societe->client->voir) && !$socid) {
163  $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
164  }
165  if ($socid) {
166  $sql .= " AND f.fk_soc = ".((int) $socid);
167  }
168  $sql .= " ORDER BY $sortfield $sortorder ";
169 
170  // Calcul total qty and amount for global if full scan list
171  $total_ht = 0;
172  $total_qty = 0;
173 
174  // Count total nb of records
175  $totalofrecords = '';
176  if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
177  $result = $db->query($sql);
178  $totalofrecords = $db->num_rows($result);
179  }
180 
181  $sql .= $db->plimit($limit + 1, $offset);
182 
183  $result = $db->query($sql);
184  if ($result) {
185  $num = $db->num_rows($result);
186 
187  $option .= '&id='.$product->id;
188 
189  if ($limit > 0 && $limit != $conf->liste_limit) {
190  $option .= '&limit='.((int) $limit);
191  }
192  if (!empty($search_month)) {
193  $option .= '&search_month='.urlencode($search_month);
194  }
195  if (!empty($search_year)) {
196  $option .= '&search_year='.urlencode($search_year);
197  }
198 
199  print '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$product->id.'" name="search_form">'."\n";
200  print '<input type="hidden" name="token" value="'.newToken().'">';
201  if (!empty($sortfield)) {
202  print '<input type="hidden" name="sortfield" value="'.$sortfield.'"/>';
203  }
204  if (!empty($sortorder)) {
205  print '<input type="hidden" name="sortorder" value="'.$sortorder.'"/>';
206  }
207 
208  print_barre_liste($langs->trans("SuppliersInvoices"), $page, $_SERVER["PHP_SELF"], $option, $sortfield, $sortorder, '', $num, $totalofrecords, '', 0, '', '', $limit, 0, 0, 1);
209 
210  if (!empty($page)) {
211  $option .= '&page='.urlencode($page);
212  }
213 
214  print '<div class="liste_titre liste_titre_bydiv centpercent">';
215  print '<div class="divsearchfield">';
216  print $langs->trans('Period').' ('.$langs->trans("DateInvoice").') - ';
217  print $langs->trans('Month').':<input class="flat" type="text" size="4" name="search_month" value="'.$search_month.'"> ';
218  print $langs->trans('Year').':'.$formother->selectyear($search_year ? $search_year : - 1, 'search_year', 1, 20, 5);
219  print '<div style="vertical-align: middle; display: inline-block">';
220  print '<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"), 'search.png', '', '', 1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
221  print '<input type="image" class="liste_titre" name="button_removefilter" src="'.img_picto($langs->trans("Search"), 'searchclear.png', '', '', 1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
222  print '</div>';
223  print '</div>';
224  print '</div>';
225 
226  $i = 0;
227  print '<div class="div-table-responsive">';
228  print '<table class="tagtable liste listwithfilterbefore" width="100%">';
229  print '<tr class="liste_titre">';
230  print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "s.rowid", "", $option, '', $sortfield, $sortorder);
231  print_liste_field_titre("Company", $_SERVER["PHP_SELF"], "s.nom", "", $option, '', $sortfield, $sortorder);
232  print_liste_field_titre("SupplierCode", $_SERVER["PHP_SELF"], "s.code_client", "", $option, '', $sortfield, $sortorder);
233  print_liste_field_titre("DateInvoice", $_SERVER["PHP_SELF"], "f.datef", "", $option, 'align="center"', $sortfield, $sortorder);
234  print_liste_field_titre("Qty", $_SERVER["PHP_SELF"], "d.qty", "", $option, 'align="center"', $sortfield, $sortorder);
235  print_liste_field_titre("AmountHT", $_SERVER["PHP_SELF"], "d.total_ht", "", $option, 'align="right"', $sortfield, $sortorder);
236  print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "f.paye,f.fk_statut", "", $option, 'align="right"', $sortfield, $sortorder);
237  print "</tr>\n";
238 
239  if ($num > 0) {
240  while ($i < min($num, $limit)) {
241  $objp = $db->fetch_object($result);
242 
243  $total_ht += $objp->line_total_ht;
244  $total_qty += $objp->qty;
245 
246  $supplierinvoicestatic->id = $objp->facid;
247  $supplierinvoicestatic->ref = $objp->ref;
248  $supplierinvoicestatic->ref_supplier = $objp->ref_supplier;
249  $supplierinvoicestatic->libelle = $objp->label;
250  $supplierinvoicestatic->label = $objp->label;
251  $supplierinvoicestatic->total_ht = $objp->total_ht;
252  $supplierinvoicestatic->total_ttc = $objp->total_ttc;
253  $supplierinvoicestatic->total_tva = $objp->total_tva;
254 
255  $societestatic->fetch($objp->socid);
256 
257  print '<tr class="oddeven">';
258  print '<td>';
259  print $supplierinvoicestatic->getNomUrl(1);
260  print "</td>\n";
261  print '<td>'.$societestatic->getNomUrl(1).'</td>';
262  print "<td>".$objp->code_client."</td>\n";
263  print '<td class="center">';
264  print dol_print_date($db->jdate($objp->datef), 'dayhour')."</td>";
265  print '<td class="center">'.$objp->qty."</td>\n";
266  print '<td align="right">'.price($objp->line_total_ht)."</td>\n";
267  print '<td align="right">'.$supplierinvoicestatic->LibStatut($objp->paye, $objp->statut, 5).'</td>';
268  print "</tr>\n";
269  $i++;
270  }
271  }
272  print '<tr class="liste_total">';
273  if ($num < $limit) {
274  print '<td class="left">'.$langs->trans("Total").'</td>';
275  } else {
276  print '<td class="left">'.$langs->trans("Totalforthispage").'</td>';
277  }
278  print '<td colspan="3"></td>';
279  print '<td class="center">'.$total_qty.'</td>';
280  print '<td align="right">'.price($total_ht).'</td>';
281  print '<td></td>';
282  print "</table>";
283  print '</div>';
284  print '</form>';
285  } else {
286  dol_print_error($db);
287  }
288  $db->free($result);
289  }
290  }
291 } else {
292  dol_print_error();
293 }
294 
295 // End of page
296 llxFooter();
297 $db->close();
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage suppliers invoices.
Class to manage generation of HTML components Only common components must be here.
Classe permettant la generation de composants html autre Only common components are here.
Class to manage products or services.
const TYPE_SERVICE
Service.
Class to manage third parties objects (customers, suppliers, prospects...)
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
product_prepare_head($object)
Prepare array with list of tabs.
Definition: product.lib.php:36
show_stats_for_company($product, $socid)
Show stats for company.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.