dolibarr 21.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
28require '../../main.inc.php';
29require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
30require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
31require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
32require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
33require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
34require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
37require_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");
72if (empty($page) || $page < 0) {
73 $page = 0;
74}
75$offset = $limit * $page;
76$pageprev = $page - 1;
77$pagenext = $page + 1;
78if (!$sortfield) {
79 $sortfield = "f.datef, f.ref, fd.rowid";
80}
81if (!$sortorder) {
82 if (getDolGlobalInt('ACCOUNTING_LIST_SORT_VENTILATION_DONE') > 0) {
83 $sortorder = "DESC";
84 } else {
85 $sortorder = "ASC";
86 }
87}
88
89// Security check
90if (!isModEnabled('accounting')) {
92}
93if ($user->socid > 0) {
95}
96if (!$user->hasRight('accounting', 'bind', 'write')) {
98}
99
100
101$formaccounting = new FormAccounting($db);
102
103
104/*
105 * Actions
106 */
107
108// Purge search criteria
109if (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
131if (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
164if (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
180llxHeader('', $langs->trans("CustomersVentilation").' - '.$langs->trans("Dispatched"), $help_url, '', 0, 0, '', '', '', 'mod-accountancy accountancy-customer page-lines');
181
182print '<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,";
205if (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,";
213if (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";
227if (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";
233if (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";
240if (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
246if ($search_societe) {
247 $sql .= natural_search('s.nom', $search_societe);
248}
249if ($search_lineid) {
250 $sql .= natural_search("fd.rowid", $search_lineid, 1);
251}
252if (strlen(trim($search_invoice))) {
253 $sql .= natural_search("f.ref", $search_invoice);
254}
255if (strlen(trim($search_ref))) {
256 $sql .= natural_search("p.ref", $search_ref);
257}
258if (strlen(trim($search_label))) {
259 $sql .= natural_search("p.label", $search_label);
260}
261if (strlen(trim($search_desc))) {
262 $sql .= natural_search("fd.description", $search_desc);
263}
264if (strlen(trim($search_amount))) {
265 $sql .= natural_search("fd.total_ht", $search_amount, 1);
266}
267if (strlen(trim($search_account))) {
268 $sql .= natural_search("aa.account_number", $search_account);
269}
270if (strlen(trim($search_vat))) {
271 $sql .= natural_search("fd.tva_tx", price2num($search_vat), 1);
272}
273if ($search_date_start) {
274 $sql .= " AND f.datef >= '".$db->idate($search_date_start)."'";
275}
276if ($search_date_end) {
277 $sql .= " AND f.datef <= '".$db->idate($search_date_end)."'";
278}
279if (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}
300if (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 = '';
308if (!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
319dol_syslog("/accountancy/customer/lines.php", LOG_DEBUG);
320$result = $db->query($sql);
321if ($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").'<br><span class="opacitymedium small">'.$langs->trans("DescVentilDoneCustomer").'</span>', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit, 0, 0, 1);
391
392 print '<br>'.$langs->trans("ChangeAccount").' <div class="inline-block paddingbottom marginbottomonly">';
393 print $formaccounting->select_account($account_parent, 'account_parent', 2, array(), 0, 0, 'maxwidth300 maxwidthonsmartphone valignmiddle');
394 print '<input type="submit" class="button small smallpaddingimp valignmiddle" value="'.$langs->trans("ChangeBinding").'"/></div>';
395
396 $moreforfilter = '';
397
398 print '<div class="div-table-responsive">';
399 print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
400
401 print '<tr class="liste_titre_filter">';
402 print '<td class="liste_titre"><input type="text" class="flat maxwidth40" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).'"></td>';
403 print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).'"></td>';
404 print '<td class="liste_titre center">';
405 print '<div class="nowrapfordate">';
406 print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
407 print '</div>';
408 print '<div class="nowrapfordate">';
409 print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
410 print '</div>';
411 print '</td>';
412 print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).'"></td>';
413 //print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="' . dol_escape_htmltag($search_label) . '"></td>';
414 print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_desc" value="'.dol_escape_htmltag($search_desc).'"></td>';
415 print '<td class="liste_titre right"><input type="text" class="right flat maxwidth50" name="search_amount" value="'.dol_escape_htmltag($search_amount).'"></td>';
416 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>';
417 print '<td class="liste_titre"><input type="text" class="flat maxwidth75imp" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>';
418 print '<td class="liste_titre">';
419 print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth150', 'code2', 1, 0, 1);
420 //print '<input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '">';
421 print '</td>';
422 print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="'.dol_escape_htmltag($search_tvaintra).'"></td>';
423 print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_account" value="'.dol_escape_htmltag($search_account).'"></td>';
424 print '<td class="liste_titre center">';
425 $searchpicto = $form->showFilterButtons();
426 print $searchpicto;
427 print "</td></tr>\n";
428
429 print '<tr class="liste_titre">';
430 print_liste_field_titre("LineId", $_SERVER["PHP_SELF"], "fd.rowid", "", $param, '', $sortfield, $sortorder);
431 print_liste_field_titre("Invoice", $_SERVER["PHP_SELF"], "f.ref", "", $param, '', $sortfield, $sortorder);
432 print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "f.datef, f.ref, fd.rowid", "", $param, '', $sortfield, $sortorder, 'center ');
433 print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder);
434 //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder);
435 print_liste_field_titre("ProductDescription", $_SERVER["PHP_SELF"], "fd.description", "", $param, '', $sortfield, $sortorder);
436 print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "fd.total_ht", "", $param, '', $sortfield, $sortorder, 'right ');
437 print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "fd.tva_tx", "", $param, '', $sortfield, $sortorder, 'right ');
438 print_liste_field_titre("ThirdParty", $_SERVER["PHP_SELF"], "s.nom", "", $param, '', $sortfield, $sortorder);
439 print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder);
440 print_liste_field_titre("VATIntra", $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder);
441 print_liste_field_titre("AccountAccounting", $_SERVER["PHP_SELF"], "aa.account_number", "", $param, '', $sortfield, $sortorder);
442 $checkpicto = $form->showCheckAddButtons();
443 print_liste_field_titre($checkpicto, '', '', '', '', '', '', '', 'center ');
444 print "</tr>\n";
445
446 $thirdpartystatic = new Societe($db);
447 $facturestatic = new Facture($db);
448 $productstatic = new Product($db);
449 $accountingaccountstatic = new AccountingAccount($db);
450
451 $i = 0;
452 while ($i < min($num_lines, $limit)) {
453 $objp = $db->fetch_object($result);
454
455 $facturestatic->ref = $objp->ref;
456 $facturestatic->id = $objp->facid;
457 $facturestatic->type = $objp->ftype;
458
459 $thirdpartystatic->id = $objp->socid;
460 $thirdpartystatic->name = $objp->name;
461 $thirdpartystatic->client = $objp->client;
462 $thirdpartystatic->fournisseur = $objp->fournisseur;
463 $thirdpartystatic->code_client = $objp->code_client;
464 $thirdpartystatic->code_compta_client = $objp->code_compta_client;
465 $thirdpartystatic->code_fournisseur = $objp->code_fournisseur;
466 $thirdpartystatic->code_compta_fournisseur = $objp->code_compta_fournisseur;
467 $thirdpartystatic->email = $objp->email;
468 $thirdpartystatic->country_code = $objp->country_code;
469
470 $productstatic->ref = $objp->product_ref;
471 $productstatic->id = $objp->product_id;
472 $productstatic->label = $objp->product_label;
473 $productstatic->type = $objp->line_type;
474 $productstatic->status = $objp->tosell;
475 $productstatic->status_buy = $objp->tobuy;
476 $productstatic->accountancy_code_sell = $objp->accountancy_code_sell;
477 $productstatic->accountancy_code_sell_intra = $objp->accountancy_code_sell_intra;
478 $productstatic->accountancy_code_sell_export = $objp->accountancy_code_sell_export;
479
480 $accountingaccountstatic->rowid = $objp->fk_compte;
481 $accountingaccountstatic->label = $objp->label_account;
482 $accountingaccountstatic->labelshort = $objp->labelshort_account;
483 $accountingaccountstatic->account_number = $objp->account_number;
484
485 print '<tr class="oddeven">';
486
487 // Line id
488 print '<td>'.$objp->rowid.'</td>';
489
490 // Ref Invoice
491 print '<td class="nowraponall tdoverflowmax125">'.$facturestatic->getNomUrl(1).'</td>';
492
493 // Date invoice
494 print '<td class="center">'.dol_print_date($db->jdate($objp->datef), 'day').'</td>';
495
496 // Ref Product
497 print '<td class="tdoverflowmax100">';
498 if ($productstatic->id > 0) {
499 print $productstatic->getNomUrl(1);
500 } else {
501 print '&nbsp;';
502 }
503 //if ($productstatic->id > 0 && $objp->product_label) {
504 print '<br>';
505 //}
506 if ($objp->product_label) {
507 print '<span class="opacitymedium">'.$objp->product_label.'</span>';
508 } else {
509 print '&nbsp;';
510 }
511 print '</td>';
512
513 $text = dolGetFirstLineOfText(dol_string_nohtmltag($objp->description, 1));
514 print '<td class="tdoverflowmax200 small" title="'.dol_escape_htmltag($text).'">';
515 $trunclength = getDolGlobalInt('ACCOUNTING_LENGTH_DESCRIPTION', 32);
516 print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->description);
517 print '</td>';
518
519 // Amount
520 print '<td class="right nowraponall amount">';
521
522 // Create a compensation rate for old situation invoice feature.
523 $situation_ratio = 1;
524 if (getDolGlobalInt('INVOICE_USE_SITUATION') == 1) {
525 if ($objp->situation_cycle_ref) {
526 // Avoid divide by 0
527 if ($objp->situation_percent == 0) {
528 $situation_ratio = 0;
529 } else {
530 $line = new FactureLigne($db);
531 $line->fetch($objp->rowid);
532
533 // Situation invoices handling
534 $prev_progress = $line->get_prev_progress($objp->facid);
535
536 $situation_ratio = ($objp->situation_percent - $prev_progress) / $objp->situation_percent;
537 }
538 }
539 print price($objp->total_ht * $situation_ratio);
540 } else {
541 print price($objp->total_ht);
542 }
543 print '</td>';
544
545 // Vat rate
546 print '<td class="right">'.vatrate($objp->tva_tx.($objp->vat_src_code ? ' ('.$objp->vat_src_code.')' : '')).'</td>';
547
548 // Thirdparty
549 print '<td class="tdoverflowmax100">'.$thirdpartystatic->getNomUrl(1, 'customer').'</td>';
550
551 // Country
552 print '<td>';
553 if ($objp->country_code) {
554 print $langs->trans("Country".$objp->country_code).' ('.$objp->country_code.')';
555 }
556 print '</td>';
557
558 print '<td class="tdoverflowmax80" title="'.dol_escape_htmltag($objp->tva_intra).'">'.dol_escape_htmltag($objp->tva_intra).'</td>';
559
560 print '<td class="tdoverflowmax200" title="'.dol_escape_htmltag($accountingaccountstatic->label).'">';
561 print '<a class="editfielda" href="./card.php?id='.$objp->rowid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($param ? '?'.$param : '')).'">';
562 print img_edit();
563 print '</a> ';
564 print $accountingaccountstatic->getNomUrl(0, 1, 1, '', 1);
565 print '</td>';
566
567 print '<td class="center"><input type="checkbox" class="checkforaction" name="changeaccount[]" value="'.$objp->rowid.'"/></td>';
568
569 print '</tr>';
570 $i++;
571 }
572 if ($num_lines == 0) {
573 print '<tr><td colspan="12"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
574 }
575
576 print '</table>';
577 print "</div>";
578
579 if ($nbtotalofrecords > $limit) {
580 print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num_lines, $nbtotalofrecords, '', 0, '', '', $limit, 1);
581 }
582
583 print '</form>';
584} else {
585 print $db->lasterror();
586}
587
588// End of page
589llxFooter();
590$db->close();
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).
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
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...
llxFooter()
Footer empty.
Definition document.php:107
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...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
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.
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.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.