dolibarr 18.0.6
quadri_detail.php
1<?php
2/* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
4 * Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
5 * Copyright (C) 2006-2007 Yannick Warnier <ywarnier@beeznest.org>
6 * Copyright (C) 2014-2016 Juanjo Menent <jmenent@2byte.es>
7 * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
28global $mysoc;
29
30// Load Dolibarr environment
31require '../../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
33require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
36require_once DOL_DOCUMENT_ROOT.'/compta/localtax/class/localtax.class.php';
37require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
38require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
39require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
40require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
41require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php';
42require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
43require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class.php';
44
45// Load translation files required by the page
46$langs->loadLangs(array("other", "compta", "banks", "bills", "companies", "product", "trips", "admin"));
47
48$local = GETPOST('localTaxType', 'int');
49// Date range
50$year = GETPOST("year", "int");
51if (empty($year)) {
52 $year_current = dol_print_date(dol_now('gmt'), "%Y", 'gmt');
53 $year_start = $year_current;
54} else {
55 $year_current = $year;
56 $year_start = $year;
57}
58$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"));
59$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"));
60// Quarter
61if (empty($date_start) || empty($date_end)) { // We define date_start and date_end
62 $q = GETPOST("q", "int");
63 if (empty($q)) {
64 if (GETPOST("month", "int")) {
65 $date_start = dol_get_first_day($year_start, GETPOST("month", "int"), false);
66 $date_end = dol_get_last_day($year_start, GETPOST("month", "int"), false);
67 } else {
68 $date_start = dol_get_first_day($year_start, empty($conf->global->SOCIETE_FISCAL_MONTH_START) ? 1 : $conf->global->SOCIETE_FISCAL_MONTH_START, false);
69 if (empty($conf->global->MAIN_INFO_VAT_RETURN) || $conf->global->MAIN_INFO_VAT_RETURN == 2) {
70 $date_end = dol_time_plus_duree($date_start, 3, 'm') - 1;
71 } elseif ($conf->global->MAIN_INFO_VAT_RETURN == 3) {
72 $date_end = dol_time_plus_duree($date_start, 1, 'y') - 1;
73 } elseif ($conf->global->MAIN_INFO_VAT_RETURN == 1) {
74 $date_end = dol_time_plus_duree($date_start, 1, 'm') - 1;
75 }
76 }
77 } else {
78 if ($q == 1) {
79 $date_start = dol_get_first_day($year_start, 1, false);
80 $date_end = dol_get_last_day($year_start, 3, false);
81 }
82 if ($q == 2) {
83 $date_start = dol_get_first_day($year_start, 4, false);
84 $date_end = dol_get_last_day($year_start, 6, false);
85 }
86 if ($q == 3) {
87 $date_start = dol_get_first_day($year_start, 7, false);
88 $date_end = dol_get_last_day($year_start, 9, false);
89 }
90 if ($q == 4) {
91 $date_start = dol_get_first_day($year_start, 10, false);
92 $date_end = dol_get_last_day($year_start, 12, false);
93 }
94 }
95}
96
97$min = price2num(GETPOST("min", "alpha"));
98if (empty($min)) {
99 $min = 0;
100}
101
102// Define modetax (0 or 1)
103// 0=normal, 1=option vat for services is on debit, 2=option on payments for products
104//$modetax = $conf->global->TAX_MODE;
105$calc = getDolGlobalString('MAIN_INFO_LOCALTAX_CALC').$local;
106$modetax = getDolGlobalInt('TAX_MODE');
107if (GETPOSTISSET("modetax")) {
108 $modetax = GETPOST("modetax", 'int');
109}
110if (empty($modetax)) {
111 $modetax = 0;
112}
113
114// Security check
115$socid = GETPOST('socid', 'int');
116if ($user->socid) {
117 $socid = $user->socid;
118}
119$result = restrictedArea($user, 'tax', '', '', 'charges');
120
121if (empty($local)) {
122 accessforbidden('Parameter localTaxType is missing');
123 exit;
124}
125
126
127
128/*
129 * View
130 */
131
132$form = new Form($db);
133$company_static = new Societe($db);
134$invoice_customer = new Facture($db);
135$invoice_supplier = new FactureFournisseur($db);
136$expensereport = new ExpenseReport($db);
137$product_static = new Product($db);
138$payment_static = new Paiement($db);
139$paymentfourn_static = new PaiementFourn($db);
140$paymentexpensereport_static = new PaymentExpenseReport($db);
141
142$morequerystring = '';
143$listofparams = array('date_startmonth', 'date_startyear', 'date_startday', 'date_endmonth', 'date_endyear', 'date_endday');
144foreach ($listofparams as $param) {
145 if (GETPOST($param) != '') {
146 $morequerystring .= ($morequerystring ? '&' : '').$param.'='.GETPOST($param);
147 }
148}
149
150llxHeader('', $langs->trans("LocalTaxReport"), '', '', 0, 0, '', '', $morequerystring);
151
152$fsearch = '<!-- hidden fields for form -->';
153$fsearch .= '<input type="hidden" name="token" value="'.newToken().'">';
154$fsearch .= '<input type="hidden" name="modetax" value="'.$modetax.'">';
155$fsearch .= '<input type="hidden" name="localTaxType" value="'.$local.'">';
156
157$name = $langs->transcountry($local == 1 ? "LT1ReportByQuarters" : "LT2ReportByQuarters", $mysoc->country_code);
158$calcmode = '';
159if ($modetax == 0) {
160 $calcmode = $langs->trans('OptionVATDefault');
161}
162if ($modetax == 1) {
163 $calcmode = $langs->trans('OptionVATDebitOption');
164}
165if ($modetax == 2) {
166 $calcmode = $langs->trans('OptionPaymentForProductAndServices');
167}
168$calcmode .= ' <span class="opacitymedium">('.$langs->trans("TaxModuleSetupToModifyRules", DOL_URL_ROOT.'/admin/taxes.php').')</span>';
169// Set period
170$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
171$prevyear = $year_start;
172$q=0;
173$prevquarter = $q;
174if ($prevquarter > 1) {
175 $prevquarter--;
176} else {
177 $prevquarter = 4;
178 $prevyear--;
179}
180$nextyear = $year_start;
181$nextquarter = $q;
182if ($nextquarter < 4) {
183 $nextquarter++;
184} else {
185 $nextquarter = 1;
186 $nextyear++;
187}
188$description = $fsearch;
189$builddate = dol_now();
190
191/*if (getDolGlobalString('TAX_MODE_SELL_PRODUCT') == 'invoice') $description.=$langs->trans("RulesVATDueProducts");
192if (getDolGlobalString('TAX_MODE_SELL_PRODUCT') == 'payment') $description.=$langs->trans("RulesVATInProducts");
193if (getDolGlobalString('TAX_MODE_SELL_SERVICE') == 'invoice') $description.='<br>'.$langs->trans("RulesVATDueServices");
194if (getDolGlobalString('TAX_MODE_SELL_SERVICE') == 'payment') $description.='<br>'.$langs->trans("RulesVATInServices");
195if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
196 $description.='<br>'.$langs->trans("DepositsAreNotIncluded");
197}
198if (! empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
199 $description.='<br>'.$langs->trans("SupplierDepositsAreNotIncluded");
200}
201*/
202if (!empty($conf->global->MAIN_MODULE_ACCOUNTING)) {
203 $description .= $langs->trans("ThisIsAnEstimatedValue");
204}
205
206// Customers invoices
207$elementcust = $langs->trans("CustomersInvoices");
208$productcust = $langs->trans("ProductOrService");
209$amountcust = $langs->trans("AmountHT");
210$vatcust = $langs->trans("VATReceived");
211$namecust = $langs->trans("Name");
212if ($mysoc->tva_assuj) {
213 $vatcust .= ' ('.$langs->trans("StatusToPay").')';
214}
215
216// Suppliers invoices
217$elementsup = $langs->trans("SuppliersInvoices");
218$productsup = $productcust;
219$amountsup = $amountcust;
220$vatsup = $langs->trans("VATPaid");
221$namesup = $namecust;
222if ($mysoc->tva_assuj) {
223 $vatsup .= ' ('.$langs->trans("ToGetBack").')';
224}
225
226$periodlink = '';
227$exportlink = '';
228
229report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode);
230
231if ($local == 1) {
232 $vatcust = $langs->transcountry("LT1", $mysoc->country_code);
233 $vatsup = $langs->transcountry("LT1", $mysoc->country_code);
234 $vatexpensereport = $langs->transcountry("LT1", $mysoc->country_code);
235} else {
236 $vatcust = $langs->transcountry("LT2", $mysoc->country_code);
237 $vatsup = $langs->transcountry("LT2", $mysoc->country_code);
238 $vatexpensereport = $langs->transcountry("LT2", $mysoc->country_code);
239}
240
241// VAT Received and paid
242print '<div class="div-table-responsive">';
243echo '<table class="noborder centpercent">';
244
245$y = $year_current;
246$total = 0;
247$i = 0;
248$columns = 4;
249
250// Load arrays of datas
251$x_coll = tax_by_rate('localtax'.$local, $db, 0, 0, $date_start, $date_end, $modetax, 'sell');
252$x_paye = tax_by_rate('localtax'.$local, $db, 0, 0, $date_start, $date_end, $modetax, 'buy');
253
254if (!is_array($x_coll) || !is_array($x_paye)) {
255 $langs->load("errors");
256 if ($x_coll == -1) {
257 print '<tr><td colspan="'.$columns.'">'.$langs->trans("ErrorNoAccountancyModuleLoaded").'</td></tr>';
258 } elseif ($x_coll == -2) {
259 print '<tr><td colspan="'.$columns.'">'.$langs->trans("FeatureNotYetAvailable").'</td></tr>';
260 } else {
261 print '<tr><td colspan="'.$columns.'">'.$langs->trans("Error").'</td></tr>';
262 }
263} else {
264 $x_both = array();
265
266 //now, from these two arrays, get another array with one rate per line
267 foreach (array_keys($x_coll) as $my_coll_rate) {
268 $x_both[$my_coll_rate]['coll']['totalht'] = $x_coll[$my_coll_rate]['totalht'];
269 $x_both[$my_coll_rate]['coll']['localtax'.$local] = $x_coll[$my_coll_rate]['localtax'.$local];
270 $x_both[$my_coll_rate]['paye']['totalht'] = 0;
271 $x_both[$my_coll_rate]['paye']['localtax'.$local] = 0;
272 $x_both[$my_coll_rate]['coll']['links'] = '';
273 $x_both[$my_coll_rate]['coll']['detail'] = array();
274 foreach ($x_coll[$my_coll_rate]['facid'] as $id => $dummy) {
275 $invoice_customer->id = $x_coll[$my_coll_rate]['facid'][$id];
276 $invoice_customer->ref = $x_coll[$my_coll_rate]['facnum'][$id];
277 $invoice_customer->type = $x_coll[$my_coll_rate]['type'][$id];
278 $company_static->fetch($x_coll[$my_coll_rate]['company_id'][$id]);
279 $x_both[$my_coll_rate]['coll']['detail'][] = array(
280 'id' =>$x_coll[$my_coll_rate]['facid'][$id],
281 'descr' =>$x_coll[$my_coll_rate]['descr'][$id],
282 'pid' =>$x_coll[$my_coll_rate]['pid'][$id],
283 'pref' =>$x_coll[$my_coll_rate]['pref'][$id],
284 'ptype' =>$x_coll[$my_coll_rate]['ptype'][$id],
285 'payment_id'=>$x_coll[$my_coll_rate]['payment_id'][$id],
286 'payment_amount'=>$x_coll[$my_coll_rate]['payment_amount'][$id],
287 'ftotal_ttc'=>$x_coll[$my_coll_rate]['ftotal_ttc'][$id],
288 'dtotal_ttc'=>$x_coll[$my_coll_rate]['dtotal_ttc'][$id],
289 'dtype' =>$x_coll[$my_coll_rate]['dtype'][$id],
290 'datef' =>$x_coll[$my_coll_rate]['datef'][$id],
291 'datep' =>$x_coll[$my_coll_rate]['datep'][$id],
292 'company_link'=>$company_static->getNomUrl(1, '', 20),
293 'ddate_start'=>$x_coll[$my_coll_rate]['ddate_start'][$id],
294 'ddate_end' =>$x_coll[$my_coll_rate]['ddate_end'][$id],
295 'totalht' =>$x_coll[$my_coll_rate]['totalht_list'][$id],
296 'localtax1'=> $x_coll[$my_coll_rate]['localtax1_list'][$id],
297 'localtax2'=> $x_coll[$my_coll_rate]['localtax2_list'][$id],
298 'vat' =>$x_coll[$my_coll_rate]['vat_list'][$id],
299 'link' =>$invoice_customer->getNomUrl(1, '', 12)
300 );
301 }
302 }
303 // tva paid
304 foreach (array_keys($x_paye) as $my_paye_rate) {
305 $x_both[$my_paye_rate]['paye']['totalht'] = $x_paye[$my_paye_rate]['totalht'];
306 $x_both[$my_paye_rate]['paye']['vat'] = $x_paye[$my_paye_rate]['vat'];
307 if (!isset($x_both[$my_paye_rate]['coll']['totalht'])) {
308 $x_both[$my_paye_rate]['coll']['totalht'] = 0;
309 $x_both[$my_paye_rate]['coll']['vat'] = 0;
310 }
311 $x_both[$my_paye_rate]['paye']['links'] = '';
312 $x_both[$my_paye_rate]['paye']['detail'] = array();
313
314 foreach ($x_paye[$my_paye_rate]['facid'] as $id => $dummy) {
315 $invoice_supplier->id = $x_paye[$my_paye_rate]['facid'][$id];
316 $invoice_supplier->ref = $x_paye[$my_paye_rate]['facnum'][$id];
317 $invoice_supplier->type = $x_paye[$my_paye_rate]['type'][$id];
318 $x_both[$my_paye_rate]['paye']['detail'][] = array(
319 'id' =>$x_paye[$my_paye_rate]['facid'][$id],
320 'descr' =>$x_paye[$my_paye_rate]['descr'][$id],
321 'pid' =>$x_paye[$my_paye_rate]['pid'][$id],
322 'pref' =>$x_paye[$my_paye_rate]['pref'][$id],
323 'ptype' =>$x_paye[$my_paye_rate]['ptype'][$id],
324 'payment_id'=>$x_paye[$my_paye_rate]['payment_id'][$id],
325 'payment_amount'=>$x_paye[$my_paye_rate]['payment_amount'][$id],
326 'ftotal_ttc'=>price2num($x_paye[$my_paye_rate]['ftotal_ttc'][$id]),
327 'dtotal_ttc'=>price2num($x_paye[$my_paye_rate]['dtotal_ttc'][$id]),
328 'dtype' =>$x_paye[$my_paye_rate]['dtype'][$id],
329 'datef' =>$x_paye[$my_paye_rate]['datef'][$id],
330 'datep' =>$x_paye[$my_paye_rate]['datep'][$id],
331 'company_link'=>$company_static->getNomUrl(1, '', 20),
332 'ddate_start'=>$x_paye[$my_paye_rate]['ddate_start'][$id],
333 'ddate_end' =>$x_paye[$my_paye_rate]['ddate_end'][$id],
334 'totalht' =>price2num($x_paye[$my_paye_rate]['totalht_list'][$id]),
335 'localtax1'=> $x_paye[$my_paye_rate]['localtax1_list'][$id],
336 'localtax2'=> $x_paye[$my_paye_rate]['localtax2_list'][$id],
337 'vat' =>$x_paye[$my_paye_rate]['vat_list'][$id],
338 'link' =>$invoice_supplier->getNomUrl(1, '', 12)
339 );
340 }
341 }
342 //now we have an array (x_both) indexed by rates for coll and paye
343
344 //print table headers for this quadri - incomes first
345
346 $x_coll_sum = 0;
347 $x_coll_ht = 0;
348 $x_paye_sum = 0;
349 $x_paye_ht = 0;
350
351 $span = $columns - 1;
352 if ($modetax != 2) {
353 $span += 1;
354 }
355 if ($modetax != 1) {
356 $span += 1;
357 }
358
359 // Customers invoices
360 print '<tr class="liste_titre">';
361 print '<td class="left">'.$elementcust.'</td>';
362 print '<td class="left">'.$productcust.'</td>';
363 if ($modetax != 2) {
364 print '<td class="right">'.$amountcust.'</td>';
365 }
366 if ($modetax != 1) {
367 print '<td class="right">'.$langs->trans("Payment").' ('.$langs->trans("PercentOfInvoice").')</td>';
368 }
369 print '<td class="right">'.$langs->trans("BI").'</td>';
370 print '<td class="right">'.$vatcust.'</td>';
371 print '</tr>';
372
373
374 $LT = 0;
375 $sameLT = false;
376 foreach (array_keys($x_coll) as $rate) {
377 $subtot_coll_total_ht = 0;
378 $subtot_coll_vat = 0;
379
380 if (is_array($x_both[$rate]['coll']['detail'])) {
381 // VAT Rate
382 if ($rate != 0) {
383 print "<tr>";
384 print '<td class="tax_rate">'.$langs->trans("Rate").': '.vatrate($rate).'%</td><td colspan="'.$span.'"></td>';
385 print '</tr>'."\n";
386 }
387 foreach ($x_both[$rate]['coll']['detail'] as $index => $fields) {
388 if (($local == 1 && $fields['localtax1'] != 0) || ($local == 2 && $fields['localtax2'] != 0)) {
389 // Define type
390 $type = ($fields['dtype'] ? $fields['dtype'] : $fields['ptype']);
391 // Try to enhance type detection using date_start and date_end for free lines where type
392 // was not saved.
393 if (!empty($fields['ddate_start'])) {
394 $type = 1;
395 }
396 if (!empty($fields['ddate_end'])) {
397 $type = 1;
398 }
399
400
401 print '<tr class="oddeven">';
402
403 // Ref
404 print '<td class="nowrap left">'.$fields['link'].'</td>';
405
406 // Description
407 print '<td class="left">';
408 if ($fields['pid']) {
409 $product_static->id = $fields['pid'];
410 $product_static->ref = $fields['pref'];
411 $product_static->type = $fields['ptype'];
412 print $product_static->getNomUrl(1);
413 if (dol_string_nohtmltag($fields['descr'])) {
414 print ' - '.dol_trunc(dol_string_nohtmltag($fields['descr']), 16);
415 }
416 } else {
417 if ($type) {
418 $text = img_object($langs->trans('Service'), 'service');
419 } else {
420 $text = img_object($langs->trans('Product'), 'product');
421 }
422 if (preg_match('/^\‍((.*)\‍)$/', $fields['descr'], $reg)) {
423 if ($reg[1] == 'DEPOSIT') {
424 $fields['descr'] = $langs->transnoentitiesnoconv('Deposit');
425 } elseif ($reg[1] == 'CREDIT_NOTE') {
426 $fields['descr'] = $langs->transnoentitiesnoconv('CreditNote');
427 } else {
428 $fields['descr'] = $langs->transnoentitiesnoconv($reg[1]);
429 }
430 }
431 print $text.' '.dol_trunc(dol_string_nohtmltag($fields['descr']), 16);
432
433 // Show range
434 print_date_range($fields['ddate_start'], $fields['ddate_end']);
435 }
436 print '</td>';
437
438 // Total HT
439 if ($modetax != 2) {
440 print '<td class="nowrap right">';
441 print price($fields['totalht']);
442 if (price2num($fields['ftotal_ttc'])) {
443 $ratiolineinvoice = ($fields['dtotal_ttc'] / $fields['ftotal_ttc']);
444 }
445 print '</td>';
446 }
447
448 // Payment
449 $ratiopaymentinvoice = 1;
450 if ($modetax != 1) {
451 if (isset($fields['payment_amount']) && $fields['ftotal_ttc']) {
452 $ratiopaymentinvoice = ($fields['payment_amount'] / $fields['ftotal_ttc']);
453 }
454 print '<td class="nowrap right">';
455 if ($fields['payment_amount'] && $fields['ftotal_ttc']) {
456 $payment_static->id = $fields['payment_id'];
457 print $payment_static->getNomUrl(2);
458 }
459 if ($type == 0) {
460 print $langs->trans("NotUsedForGoods");
461 } else {
462 print price($fields['payment_amount']);
463 if (isset($fields['payment_amount'])) {
464 print ' ('.round($ratiopaymentinvoice * 100, 2).'%)';
465 }
466 }
467 print '</td>';
468 }
469
470 // Total collected
471 print '<td class="nowrap right">';
472 $temp_ht = $fields['totalht'];
473 if ($type == 1) {
474 $temp_ht = $fields['totalht'] * $ratiopaymentinvoice;
475 }
476 print price(price2num($temp_ht, 'MT'));
477 print '</td>';
478
479 // Localtax
480 print '<td class="nowrap right">';
481 $temp_vat = $local == 1 ? $fields['localtax1'] : $fields['localtax2'];
482 print price(price2num($temp_vat, 'MT'));
483 //print price($fields['vat']);
484 print '</td>';
485 print '</tr>';
486
487 $subtot_coll_total_ht += $temp_ht;
488 $subtot_coll_vat += $temp_vat;
489 $x_coll_sum += $temp_vat;
490 }
491 }
492 }
493
494 // Total customers for this vat rate
495 print '<tr class="liste_total">';
496 print '<td></td>';
497 print '<td class="right">'.$langs->trans("Total").':</td>';
498 if ($modetax != 1) {
499 print '<td class="nowrap right">&nbsp;</td>';
500 print '<td class="right">&nbsp;</td>';
501 }
502 print '<td class="right"><span class="amount">'.price(price2num($subtot_coll_total_ht, 'MT')).'</span></td>';
503 print '<td class="nowrap right"><span class="amount">'.price(price2num($subtot_coll_vat, 'MT')).'</span></td>';
504 print '</tr>';
505 }
506
507 if (count($x_coll) == 0) { // Show a total ine if nothing shown
508 print '<tr class="liste_total">';
509 print '<td>&nbsp;</td>';
510 print '<td class="right">'.$langs->trans("Total").':</td>';
511 if ($modetax == 0) {
512 print '<td class="nowrap right">&nbsp;</td>';
513 print '<td class="right">&nbsp;</td>';
514 }
515 print '<td class="right"><span class="amount">'.price(price2num(0, 'MT')).'</span></td>';
516 print '<td class="nowrap right"><span class="amount">'.price(price2num(0, 'MT')).'</span></td>';
517 print '</tr>';
518 }
519
520 // Blank line
521 print '<tr><td colspan="'.($span + 1).'">&nbsp;</td></tr>';
522 //print '</table>';
523 $diff = $x_coll_sum;
524
525 //echo '<table class="noborder centpercent">';
526 //print table headers for this quadri - expenses now
527 print '<tr class="liste_titre">';
528 print '<td class="left">'.$elementsup.'</td>';
529 print '<td class="left">'.$productsup.'</td>';
530 if ($modetax != 1) {
531 print '<td class="right">'.$amountsup.'</td>';
532 print '<td class="right">'.$langs->trans("Payment").' ('.$langs->trans("PercentOfInvoice").')</td>';
533 }
534 print '<td class="right">'.$langs->trans("BI").'</td>';
535 print '<td class="right">'.$vatsup.'</td>';
536 print '</tr>'."\n";
537
538 foreach (array_keys($x_paye) as $rate) {
539 $subtot_paye_total_ht = 0;
540 $subtot_paye_vat = 0;
541
542 if (is_array($x_both[$rate]['paye']['detail'])) {
543 if ($rate != 0) {
544 print "<tr>";
545 print '<td class="tax_rate">'.$langs->trans("Rate").': '.vatrate($rate).'%</td><td colspan="'.$span.'"></td>';
546 print '</tr>'."\n";
547 }
548 foreach ($x_both[$rate]['paye']['detail'] as $index => $fields) {
549 if (($local == 1 && $fields['localtax1'] != 0) || ($local == 2 && $fields['localtax2'] != 0)) {
550 // Define type
551 $type = ($fields['dtype'] ? $fields['dtype'] : $fields['ptype']);
552 // Try to enhance type detection using date_start and date_end for free lines where type
553 // was not saved.
554 if (!empty($fields['ddate_start'])) {
555 $type = 1;
556 }
557 if (!empty($fields['ddate_end'])) {
558 $type = 1;
559 }
560
561
562 print '<tr class="oddeven">';
563
564 // Ref
565 print '<td class="nowrap left">'.$fields['link'].'</td>';
566
567 // Description
568 print '<td class="left">';
569 if ($fields['pid']) {
570 $product_static->id = $fields['pid'];
571 $product_static->ref = $fields['pref'];
572 $product_static->type = $fields['ptype'];
573 print $product_static->getNomUrl(1);
574 if (dol_string_nohtmltag($fields['descr'])) {
575 print ' - '.dol_trunc(dol_string_nohtmltag($fields['descr']), 16);
576 }
577 } else {
578 if ($type) {
579 $text = img_object($langs->trans('Service'), 'service');
580 } else {
581 $text = img_object($langs->trans('Product'), 'product');
582 }
583 print $text.' '.dol_trunc(dol_string_nohtmltag($fields['descr']), 16);
584
585 // Show range
586 print_date_range($fields['ddate_start'], $fields['ddate_end']);
587 }
588 print '</td>';
589
590 // Total HT
591 if ($modetax != 2) {
592 print '<td class="nowrap right">';
593 print price($fields['totalht']);
594 if (price2num($fields['ftotal_ttc'])) {
595 //print $fields['dtotal_ttc']."/".$fields['ftotal_ttc']." - ";
596 $ratiolineinvoice = ($fields['dtotal_ttc'] / $fields['ftotal_ttc']);
597 //print ' ('.round($ratiolineinvoice*100,2).'%)';
598 }
599 print '</td>';
600 }
601
602 // Payment
603 $ratiopaymentinvoice = 1;
604 if ($modetax != 1) {
605 print '<td class="nowrap right">';
606 if (isset($fields['payment_amount']) && $fields['ftotal_ttc']) {
607 $ratiopaymentinvoice = ($fields['payment_amount'] / $fields['ftotal_ttc']);
608 }
609 if ($fields['payment_amount'] && $fields['ftotal_ttc']) {
610 $paymentfourn_static->id = $fields['payment_id'];
611 print $paymentfourn_static->getNomUrl(2);
612 }
613 if ($type == 0) {
614 print $langs->trans("NA");
615 } else {
616 print price(price2num($fields['payment_amount'], 'MT'));
617 if (isset($fields['payment_amount'])) {
618 print ' ('.round($ratiopaymentinvoice * 100, 2).'%)';
619 }
620 }
621 print '</td>';
622 }
623
624 // VAT paid
625 print '<td class="nowrap right">';
626 $temp_ht = $fields['totalht'] * $ratiopaymentinvoice;
627 print price(price2num($temp_ht, 'MT'), 1);
628 print '</td>';
629
630 // Localtax
631 print '<td class="nowrap right">';
632 $temp_vat = ($local == 1 ? $fields['localtax1'] : $fields['localtax2']) * $ratiopaymentinvoice;
633 print price(price2num($temp_vat, 'MT'), 1);
634 //print price($fields['vat']);
635 print '</td>';
636 print '</tr>';
637
638 $subtot_paye_total_ht += $temp_ht;
639 $subtot_paye_vat += $temp_vat;
640 $x_paye_sum += $temp_vat;
641 }
642 }
643 }
644
645 // Total suppliers for this vat rate
646 print '<tr class="liste_total">';
647 print '<td>&nbsp;</td>';
648 print '<td class="right">'.$langs->trans("Total").':</td>';
649 if ($modetax != 1) {
650 print '<td class="nowrap right">&nbsp;</td>';
651 print '<td class="right">&nbsp;</td>';
652 }
653 print '<td class="right"><span class="amount">'.price(price2num($subtot_paye_total_ht, 'MT')).'</span></td>';
654 print '<td class="nowrap right"><span class="amount">'.price(price2num($subtot_paye_vat, 'MT')).'</span></td>';
655 print '</tr>';
656 }
657
658 if (count($x_paye) == 0) { // Show a total line if nothing shown
659 print '<tr class="liste_total">';
660 print '<td>&nbsp;</td>';
661 print '<td class="right">'.$langs->trans("Total").':</td>';
662 if ($modetax != 1) {
663 print '<td class="nowrap right">&nbsp;</td>';
664 print '<td class="right">&nbsp;</td>';
665 }
666 print '<td class="right"><span class="amount">'.price(price2num(0, 'MT')).'</span></td>';
667 print '<td class="nowrap right"><span class="amount">'.price(price2num(0, 'MT')).'</span></td>';
668 print '</tr>';
669 }
670
671 // Total to pay
672 $diff = $x_coll_sum - $x_paye_sum;
673 print '<tr class="liste_total">';
674 print '<td class="liste_total" colspan="'.$span.'">'.$langs->trans("TotalToPay").($q ? ', '.$langs->trans("Quadri").' '.$q : '').'</td>';
675 print '<td class="liste_total nowrap right"><b>'.price(price2num($diff, 'MT'))."</b></td>\n";
676 print "</tr>\n";
677
678 $i++;
679}
680
681print '</table>';
682print '</div>';
683
684// End of page
685llxFooter();
686$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 Trips and Expenses.
Class to manage suppliers invoices.
Class to manage invoices.
Class to manage generation of HTML components Only common components must be here.
Class to manage payments for supplier invoices.
Class to manage payments of customer invoices.
Class to manage payments of expense report.
Class to manage products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
Definition date.lib.php:577
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
Definition date.lib.php:122
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition date.lib.php:596
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formated for view output Used into pdf and HTML pages.
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 '.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
print_date_range($date_start, $date_end, $format='', $outputlangs='')
Format output for start and end date.
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 dolibarr global constant string value.
report_header($reportname, $notused, $period, $periodlink, $description, $builddate, $exportlink='', $moreparam=array(), $calcmode='', $varlink='')
Show header of a report.
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.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
tax_by_rate($type, $db, $y, $q, $date_start, $date_end, $modetax, $direction, $m=0)
Gets Tax to collect for the given year (and given quarter or month) The function gets the Tax in spli...
Definition tax.lib.php:701