dolibarr  20.0.0-alpha
lines.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com>
3  * Copyright (C) 2013-2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
4  * Copyright (C) 2014-2015 Ari Elbaz (elarifr) <github@accedinfo.com>
5  * Copyright (C) 2014-2016 Florian Henry <florian.henry@open-concept.pro>
6  * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
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 require '../../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
30 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
31 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
36 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
37 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
38 
39 // Load translation files required by the page
40 $langs->loadLangs(array("bills", "compta", "accountancy", "productbatch", "products"));
41 
42 $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
43 
44 $account_parent = GETPOST('account_parent');
45 $changeaccount = GETPOST('changeaccount');
46 // Search Getpost
47 $search_societe = GETPOST('search_societe', 'alpha');
48 $search_lineid = GETPOST('search_lineid', 'alpha');
49 $search_ref = GETPOST('search_ref', 'alpha');
50 $search_invoice = GETPOST('search_invoice', 'alpha');
51 $search_label = GETPOST('search_label', 'alpha');
52 $search_desc = GETPOST('search_desc', 'alpha');
53 $search_amount = GETPOST('search_amount', 'alpha');
54 $search_account = GETPOST('search_account', 'alpha');
55 $search_vat = GETPOST('search_vat', 'alpha');
56 $search_date_startday = GETPOSTINT('search_date_startday');
57 $search_date_startmonth = GETPOSTINT('search_date_startmonth');
58 $search_date_startyear = GETPOSTINT('search_date_startyear');
59 $search_date_endday = GETPOSTINT('search_date_endday');
60 $search_date_endmonth = GETPOSTINT('search_date_endmonth');
61 $search_date_endyear = GETPOSTINT('search_date_endyear');
62 $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver
63 $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
64 $search_country = GETPOST('search_country', 'aZ09');
65 $search_tvaintra = GETPOST('search_tvaintra', 'alpha');
66 
67 // Load variable for pagination
68 $limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : getDolGlobalString('ACCOUNTING_LIMIT_LIST_VENTILATION', $conf->liste_limit);
69 $sortfield = GETPOST('sortfield', 'aZ09comma');
70 $sortorder = GETPOST('sortorder', 'aZ09comma');
71 $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
72 if (empty($page) || $page < 0) {
73  $page = 0;
74 }
75 $offset = $limit * $page;
76 $pageprev = $page - 1;
77 $pagenext = $page + 1;
78 if (!$sortfield) {
79  $sortfield = "f.datef, f.ref, fd.rowid";
80 }
81 if (!$sortorder) {
82  if (getDolGlobalInt('ACCOUNTING_LIST_SORT_VENTILATION_DONE') > 0) {
83  $sortorder = "DESC";
84  } else {
85  $sortorder = "ASC";
86  }
87 }
88 
89 // Security check
90 if (!isModEnabled('accounting')) {
92 }
93 if ($user->socid > 0) {
95 }
96 if (!$user->hasRight('accounting', 'bind', 'write')) {
98 }
99 
100 
101 $formaccounting = new FormAccounting($db);
102 
103 
104 /*
105  * Actions
106  */
107 
108 // Purge search criteria
109 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
110  $search_societe = '';
111  $search_lineid = '';
112  $search_ref = '';
113  $search_invoice = '';
114  $search_label = '';
115  $search_desc = '';
116  $search_amount = '';
117  $search_account = '';
118  $search_vat = '';
119  $search_date_startday = '';
120  $search_date_startmonth = '';
121  $search_date_startyear = '';
122  $search_date_endday = '';
123  $search_date_endmonth = '';
124  $search_date_endyear = '';
125  $search_date_start = '';
126  $search_date_end = '';
127  $search_country = '';
128  $search_tvaintra = '';
129 }
130 
131 if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('accounting', 'bind', 'write')) {
132  $error = 0;
133 
134  if (!(GETPOSTINT('account_parent') >= 0)) {
135  $error++;
136  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Account")), null, 'errors');
137  }
138 
139  if (!$error) {
140  $db->begin();
141 
142  $sql1 = "UPDATE ".MAIN_DB_PREFIX."facturedet";
143  $sql1 .= " SET fk_code_ventilation = ".(GETPOSTINT('account_parent') > 0 ? GETPOSTINT('account_parent') : 0);
144  $sql1 .= ' WHERE rowid IN ('.$db->sanitize(implode(',', $changeaccount)).')';
145 
146  dol_syslog('accountancy/customer/lines.php::changeaccount sql= '.$sql1);
147  $resql1 = $db->query($sql1);
148  if (!$resql1) {
149  $error++;
150  setEventMessages($db->lasterror(), null, 'errors');
151  }
152  if (!$error) {
153  $db->commit();
154  setEventMessages($langs->trans("Save"), null, 'mesgs');
155  } else {
156  $db->rollback();
157  setEventMessages($db->lasterror(), null, 'errors');
158  }
159 
160  $account_parent = ''; // Protection to avoid to mass apply it a second time
161  }
162 }
163 
164 if (GETPOST('sortfield') == 'f.datef, f.ref, fd.rowid') {
165  $value = (GETPOST('sortorder') == 'asc,asc,asc' ? 0 : 1);
166  require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
167  $res = dolibarr_set_const($db, "ACCOUNTING_LIST_SORT_VENTILATION_DONE", $value, 'yesno', 0, '', $conf->entity);
168 }
169 
170 
171 /*
172  * View
173  */
174 
175 $form = new Form($db);
176 $formother = new FormOther($db);
177 
178 $help_url = 'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilit&eacute;_en_Partie_Double#Liaisons_comptables';
179 
180 llxHeader('', $langs->trans("CustomersVentilation").' - '.$langs->trans("Dispatched"), $help_url);
181 
182 print '<script type="text/javascript">
183  $(function () {
184  $(\'#select-all\').click(function(event) {
185  // Iterate each checkbox
186  $(\':checkbox\').each(function() {
187  this.checked = true;
188  });
189  });
190  $(\'#unselect-all\').click(function(event) {
191  // Iterate each checkbox
192  $(\':checkbox\').each(function() {
193  this.checked = false;
194  });
195  });
196  });
197  </script>';
198 
199 /*
200  * Customer Invoice lines
201  */
202 $sql = "SELECT f.rowid as facid, f.ref as ref, f.type as ftype, f.situation_cycle_ref, f.datef, f.ref_client,";
203 $sql .= " fd.rowid, fd.description, fd.product_type as line_type, fd.total_ht, fd.total_tva, fd.tva_tx, fd.vat_src_code, fd.total_ttc, fd.situation_percent,";
204 $sql .= " s.rowid as socid, s.nom as name, s.code_client,";
205 if (getDolGlobalString('MAIN_COMPANY_PERENTITY_SHARED')) {
206  $sql .= " spe.accountancy_code_customer as code_compta_client,";
207  $sql .= " spe.accountancy_code_supplier as code_compta_fournisseur,";
208 } else {
209  $sql .= " s.code_compta as code_compta_client,";
210  $sql .= " s.code_compta_fournisseur,";
211 }
212 $sql .= " p.rowid as product_id, p.fk_product_type as product_type, p.ref as product_ref, p.label as product_label, p.tobuy, p.tosell,";
213 if (getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED')) {
214  $sql .= " ppe.accountancy_code_sell, ppe.accountancy_code_sell_intra, ppe.accountancy_code_sell_export,";
215 } else {
216  $sql .= " p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export,";
217 }
218 $sql .= " aa.rowid as fk_compte, aa.account_number, aa.label as label_account, aa.labelshort as labelshort_account,";
219 $sql .= " fd.situation_percent,";
220 $sql .= " co.code as country_code, co.label as country,";
221 $sql .= " s.rowid as socid, s.nom as name, s.tva_intra, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur";
222 $parameters = array();
223 $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook
224 $sql .= $hookmanager->resPrint;
225 $sql .= " FROM ".MAIN_DB_PREFIX."facturedet as fd";
226 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = fd.fk_product";
227 if (getDolGlobalString('MAIN_PRODUCT_PERENTITY_SHARED')) {
228  $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_perentity as ppe ON ppe.fk_product = p.rowid AND ppe.entity = " . ((int) $conf->entity);
229 }
230 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."accounting_account as aa ON aa.rowid = fd.fk_code_ventilation";
231 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture as f ON f.rowid = fd.fk_facture";
232 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = f.fk_soc";
233 if (getDolGlobalString('MAIN_COMPANY_PERENTITY_SHARED')) {
234  $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = " . ((int) $conf->entity);
235 }
236 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as co ON co.rowid = s.fk_pays ";
237 $sql .= " WHERE fd.fk_code_ventilation > 0";
238 $sql .= " AND f.entity IN (".getEntity('invoice', 0).")"; // We don't share object for accountancy
239 $sql .= " AND f.fk_statut > 0";
240 if (getDolGlobalString('FACTURE_DEPOSITS_ARE_JUST_PAYMENTS')) {
241  $sql .= " AND f.type IN (".Facture::TYPE_STANDARD.",".Facture::TYPE_REPLACEMENT.",".Facture::TYPE_CREDIT_NOTE.",".Facture::TYPE_SITUATION.")";
242 } else {
243  $sql .= " AND f.type IN (".Facture::TYPE_STANDARD.",".Facture::TYPE_REPLACEMENT.",".Facture::TYPE_CREDIT_NOTE.",".Facture::TYPE_DEPOSIT.",".Facture::TYPE_SITUATION.")";
244 }
245 // Add search filter like
246 if ($search_societe) {
247  $sql .= natural_search('s.nom', $search_societe);
248 }
249 if ($search_lineid) {
250  $sql .= natural_search("fd.rowid", $search_lineid, 1);
251 }
252 if (strlen(trim($search_invoice))) {
253  $sql .= natural_search("f.ref", $search_invoice);
254 }
255 if (strlen(trim($search_ref))) {
256  $sql .= natural_search("p.ref", $search_ref);
257 }
258 if (strlen(trim($search_label))) {
259  $sql .= natural_search("p.label", $search_label);
260 }
261 if (strlen(trim($search_desc))) {
262  $sql .= natural_search("fd.description", $search_desc);
263 }
264 if (strlen(trim($search_amount))) {
265  $sql .= natural_search("fd.total_ht", $search_amount, 1);
266 }
267 if (strlen(trim($search_account))) {
268  $sql .= natural_search("aa.account_number", $search_account);
269 }
270 if (strlen(trim($search_vat))) {
271  $sql .= natural_search("fd.tva_tx", price2num($search_vat), 1);
272 }
273 if ($search_date_start) {
274  $sql .= " AND f.datef >= '".$db->idate($search_date_start)."'";
275 }
276 if ($search_date_end) {
277  $sql .= " AND f.datef <= '".$db->idate($search_date_end)."'";
278 }
279 if (strlen(trim($search_country))) {
280  $arrayofcode = getCountriesInEEC();
281  $country_code_in_EEC = $country_code_in_EEC_without_me = '';
282  foreach ($arrayofcode as $key => $value) {
283  $country_code_in_EEC .= ($country_code_in_EEC ? "," : "")."'".$value."'";
284  if ($value != $mysoc->country_code) {
285  $country_code_in_EEC_without_me .= ($country_code_in_EEC_without_me ? "," : "")."'".$value."'";
286  }
287  }
288  if ($search_country == 'special_allnotme') {
289  $sql .= " AND co.code <> '".$db->escape($mysoc->country_code)."'";
290  } elseif ($search_country == 'special_eec') {
291  $sql .= " AND co.code IN (".$db->sanitize($country_code_in_EEC, 1).")";
292  } elseif ($search_country == 'special_eecnotme') {
293  $sql .= " AND co.code IN (".$db->sanitize($country_code_in_EEC_without_me, 1).")";
294  } elseif ($search_country == 'special_noteec') {
295  $sql .= " AND co.code NOT IN (".$db->sanitize($country_code_in_EEC, 1).")";
296  } else {
297  $sql .= natural_search("co.code", $search_country);
298  }
299 }
300 if (strlen(trim($search_tvaintra))) {
301  $sql .= natural_search("s.tva_intra", $search_tvaintra);
302 }
303 $sql .= " AND f.entity IN (".getEntity('invoice', 0).")"; // We don't share object for accountancy
304 $sql .= $db->order($sortfield, $sortorder);
305 
306 // Count total nb of records
307 $nbtotalofrecords = '';
308 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
309  $result = $db->query($sql);
310  $nbtotalofrecords = $db->num_rows($result);
311  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
312  $page = 0;
313  $offset = 0;
314  }
315 }
316 
317 $sql .= $db->plimit($limit + 1, $offset);
318 
319 dol_syslog("/accountancy/customer/lines.php", LOG_DEBUG);
320 $result = $db->query($sql);
321 if ($result) {
322  $num_lines = $db->num_rows($result);
323  $i = 0;
324 
325  $param = '';
326  if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
327  $param .= '&contextpage='.urlencode($contextpage);
328  }
329  if ($limit > 0 && $limit != $conf->liste_limit) {
330  $param .= '&limit='.((int) $limit);
331  }
332  if ($search_societe) {
333  $param .= "&search_societe=".urlencode($search_societe);
334  }
335  if ($search_invoice) {
336  $param .= "&search_invoice=".urlencode($search_invoice);
337  }
338  if ($search_ref) {
339  $param .= "&search_ref=".urlencode($search_ref);
340  }
341  if ($search_label) {
342  $param .= "&search_label=".urlencode($search_label);
343  }
344  if ($search_desc) {
345  $param .= "&search_desc=".urlencode($search_desc);
346  }
347  if ($search_account) {
348  $param .= "&search_account=".urlencode($search_account);
349  }
350  if ($search_vat) {
351  $param .= "&search_vat=".urlencode($search_vat);
352  }
353  if ($search_date_startday) {
354  $param .= '&search_date_startday='.urlencode((string) ($search_date_startday));
355  }
356  if ($search_date_startmonth) {
357  $param .= '&search_date_startmonth='.urlencode((string) ($search_date_startmonth));
358  }
359  if ($search_date_startyear) {
360  $param .= '&search_date_startyear='.urlencode((string) ($search_date_startyear));
361  }
362  if ($search_date_endday) {
363  $param .= '&search_date_endday='.urlencode((string) ($search_date_endday));
364  }
365  if ($search_date_endmonth) {
366  $param .= '&search_date_endmonth='.urlencode((string) ($search_date_endmonth));
367  }
368  if ($search_date_endyear) {
369  $param .= '&search_date_endyear='.urlencode((string) ($search_date_endyear));
370  }
371  if ($search_country) {
372  $param .= "&search_country=".urlencode($search_country);
373  }
374  if ($search_tvaintra) {
375  $param .= "&search_tvaintra=".urlencode($search_tvaintra);
376  }
377 
378  print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
379  print '<input type="hidden" name="action" value="ventil">';
380  if ($optioncss != '') {
381  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
382  }
383  print '<input type="hidden" name="token" value="'.newToken().'">';
384  print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
385  print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
386  print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
387  print '<input type="hidden" name="page" value="'.$page.'">';
388 
389  // @phan-suppress-next-line PhanPluginSuspiciousParamOrder
390  print_barre_liste($langs->trans("InvoiceLinesDone"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit);
391  print '<span class="opacitymedium">'.$langs->trans("DescVentilDoneCustomer").'</span><br>';
392 
393  print '<br><div class="inline-block divButAction paddingbottom">'.$langs->trans("ChangeAccount").' ';
394  print $formaccounting->select_account($account_parent, 'account_parent', 2, array(), 0, 0, 'maxwidth300 maxwidthonsmartphone valignmiddle');
395  print '<input type="submit" class="button small smallpaddingimp valignmiddle" value="'.$langs->trans("ChangeBinding").'"/></div>';
396 
397  $moreforfilter = '';
398 
399  print '<div class="div-table-responsive">';
400  print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
401 
402  print '<tr class="liste_titre_filter">';
403  print '<td class="liste_titre"><input type="text" class="flat maxwidth40" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).'"></td>';
404  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).'"></td>';
405  print '<td class="liste_titre center">';
406  print '<div class="nowrapfordate">';
407  print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
408  print '</div>';
409  print '<div class="nowrapfordate">';
410  print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
411  print '</div>';
412  print '</td>';
413  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).'"></td>';
414  //print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="' . dol_escape_htmltag($search_label) . '"></td>';
415  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_desc" value="'.dol_escape_htmltag($search_desc).'"></td>';
416  print '<td class="liste_titre right"><input type="text" class="right flat maxwidth50" name="search_amount" value="'.dol_escape_htmltag($search_amount).'"></td>';
417  print '<td class="liste_titre right"><input type="text" class="right flat maxwidth50" placeholder="%" name="search_vat" size="1" value="'.dol_escape_htmltag($search_vat).'"></td>';
418  print '<td class="liste_titre"><input type="text" class="flat maxwidth75imp" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>';
419  print '<td class="liste_titre">';
420  print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth150', 'code2', 1, 0, 1);
421  //print '<input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '">';
422  print '</td>';
423  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="'.dol_escape_htmltag($search_tvaintra).'"></td>';
424  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_account" value="'.dol_escape_htmltag($search_account).'"></td>';
425  print '<td class="liste_titre center">';
426  $searchpicto = $form->showFilterButtons();
427  print $searchpicto;
428  print "</td></tr>\n";
429 
430  print '<tr class="liste_titre">';
431  print_liste_field_titre("LineId", $_SERVER["PHP_SELF"], "fd.rowid", "", $param, '', $sortfield, $sortorder);
432  print_liste_field_titre("Invoice", $_SERVER["PHP_SELF"], "f.ref", "", $param, '', $sortfield, $sortorder);
433  print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "f.datef, f.ref, fd.rowid", "", $param, '', $sortfield, $sortorder, 'center ');
434  print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder);
435  //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder);
436  print_liste_field_titre("ProductDescription", $_SERVER["PHP_SELF"], "fd.description", "", $param, '', $sortfield, $sortorder);
437  print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "fd.total_ht", "", $param, '', $sortfield, $sortorder, 'right ');
438  print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "fd.tva_tx", "", $param, '', $sortfield, $sortorder, 'right ');
439  print_liste_field_titre("ThirdParty", $_SERVER["PHP_SELF"], "s.nom", "", $param, '', $sortfield, $sortorder);
440  print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder);
441  print_liste_field_titre("VATIntra", $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder);
442  print_liste_field_titre("AccountAccounting", $_SERVER["PHP_SELF"], "aa.account_number", "", $param, '', $sortfield, $sortorder);
443  $checkpicto = $form->showCheckAddButtons();
444  print_liste_field_titre($checkpicto, '', '', '', '', '', '', '', 'center ');
445  print "</tr>\n";
446 
447  $thirdpartystatic = new Societe($db);
448  $facturestatic = new Facture($db);
449  $productstatic = new Product($db);
450  $accountingaccountstatic = new AccountingAccount($db);
451 
452  $i = 0;
453  while ($i < min($num_lines, $limit)) {
454  $objp = $db->fetch_object($result);
455 
456  $facturestatic->ref = $objp->ref;
457  $facturestatic->id = $objp->facid;
458  $facturestatic->type = $objp->ftype;
459 
460  $thirdpartystatic->id = $objp->socid;
461  $thirdpartystatic->name = $objp->name;
462  $thirdpartystatic->client = $objp->client;
463  $thirdpartystatic->fournisseur = $objp->fournisseur;
464  $thirdpartystatic->code_client = $objp->code_client;
465  $thirdpartystatic->code_compta_client = $objp->code_compta_client;
466  $thirdpartystatic->code_fournisseur = $objp->code_fournisseur;
467  $thirdpartystatic->code_compta_fournisseur = $objp->code_compta_fournisseur;
468  $thirdpartystatic->email = $objp->email;
469  $thirdpartystatic->country_code = $objp->country_code;
470 
471  $productstatic->ref = $objp->product_ref;
472  $productstatic->id = $objp->product_id;
473  $productstatic->label = $objp->product_label;
474  $productstatic->type = $objp->line_type;
475  $productstatic->status = $objp->tosell;
476  $productstatic->status_buy = $objp->tobuy;
477  $productstatic->accountancy_code_sell = $objp->accountancy_code_sell;
478  $productstatic->accountancy_code_sell_intra = $objp->accountancy_code_sell_intra;
479  $productstatic->accountancy_code_sell_export = $objp->accountancy_code_sell_export;
480 
481  $accountingaccountstatic->rowid = $objp->fk_compte;
482  $accountingaccountstatic->label = $objp->label_account;
483  $accountingaccountstatic->labelshort = $objp->labelshort_account;
484  $accountingaccountstatic->account_number = $objp->account_number;
485 
486  print '<tr class="oddeven">';
487 
488  // Line id
489  print '<td>'.$objp->rowid.'</td>';
490 
491  // Ref Invoice
492  print '<td class="nowraponall">'.$facturestatic->getNomUrl(1).'</td>';
493 
494  // Date invoice
495  print '<td class="center">'.dol_print_date($db->jdate($objp->datef), 'day').'</td>';
496 
497  // Ref Product
498  print '<td class="tdoverflowmax100">';
499  if ($productstatic->id > 0) {
500  print $productstatic->getNomUrl(1);
501  }
502  if ($productstatic->id > 0 && $objp->product_label) {
503  print '<br>';
504  }
505  if ($objp->product_label) {
506  print '<span class="opacitymedium">'.$objp->product_label.'</span>';
507  }
508  print '</td>';
509 
510  $text = dolGetFirstLineOfText(dol_string_nohtmltag($objp->description, 1));
511  print '<td class="tdoverflowmax200 small" title="'.dol_escape_htmltag($text).'">';
512  $trunclength = getDolGlobalInt('ACCOUNTING_LENGTH_DESCRIPTION', 32);
513  print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description);
514  print '</td>';
515 
516  // Amount
517  print '<td class="right nowraponall amount">';
518 
519  // Create a compensation rate for old situation invoice feature.
520  $situation_ratio = 1;
521  if (getDolGlobalInt('INVOICE_USE_SITUATION') == 1) {
522  if ($objp->situation_cycle_ref) {
523  // Avoid divide by 0
524  if ($objp->situation_percent == 0) {
525  $situation_ratio = 0;
526  } else {
527  $line = new FactureLigne($db);
528  $line->fetch($objp->rowid);
529 
530  // Situation invoices handling
531  $prev_progress = $line->get_prev_progress($objp->facid);
532 
533  $situation_ratio = ($objp->situation_percent - $prev_progress) / $objp->situation_percent;
534  }
535  }
536  print price($objp->total_ht * $situation_ratio);
537  } else {
538  print price($objp->total_ht);
539  }
540  print '</td>';
541 
542  // Vat rate
543  print '<td class="right">'.vatrate($objp->tva_tx.($objp->vat_src_code ? ' ('.$objp->vat_src_code.')' : '')).'</td>';
544 
545  // Thirdparty
546  print '<td class="tdoverflowmax100">'.$thirdpartystatic->getNomUrl(1, 'customer').'</td>';
547 
548  // Country
549  print '<td>';
550  if ($objp->country_code) {
551  print $langs->trans("Country".$objp->country_code).' ('.$objp->country_code.')';
552  }
553  print '</td>';
554 
555  print '<td class="tdoverflowmax80" title="'.dol_escape_htmltag($objp->tva_intra).'">'.dol_escape_htmltag($objp->tva_intra).'</td>';
556 
557  print '<td class="tdoverflowmax200" title="'.dol_escape_htmltag($accountingaccountstatic->label).'">';
558  print '<a class="editfielda" href="./card.php?id='.$objp->rowid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($param ? '?'.$param : '')).'">';
559  print img_edit();
560  print '</a> ';
561  print $accountingaccountstatic->getNomUrl(0, 1, 1, '', 1);
562  print '</td>';
563 
564  print '<td class="center"><input type="checkbox" class="checkforaction" name="changeaccount[]" value="'.$objp->rowid.'"/></td>';
565 
566  print '</tr>';
567  $i++;
568  }
569  if ($num_lines == 0) {
570  print '<tr><td colspan="12"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
571  }
572 
573  print '</table>';
574  print "</div>";
575 
576  if ($nbtotalofrecords > $limit) {
577  print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num_lines, $nbtotalofrecords, '', 0, '', '', $limit, 1);
578  }
579 
580  print '</form>';
581 } else {
582  print $db->lasterror();
583 }
584 
585 // End of page
586 llxFooter();
587 $db->close();
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
Definition: agenda.php:118
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
Definition: admin.lib.php:655
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 accounting accounts.
Class to manage invoices.
const TYPE_REPLACEMENT
Replacement invoice.
const TYPE_SITUATION
Situation invoice.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
Class to manage invoice lines.
Class to manage generation of HTML components for accounting management.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation de composants html autre Only common components are here.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
getCountriesInEEC()
Return list of countries that are inside the EEC (European Economic Community) Note: Try to keep this...
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('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') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
Definition: index.php:744
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dolGetFirstLineOfText($text, $nboflines=1, $charset='UTF-8')
Return first line of text.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a 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.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
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...
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.