dolibarr  16.0.5
clients.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2011-2014 Juanjo Menent <jmenent@2byte.es>
3  * Copyright (C) 2014 Ferran Marcet <fmarcet@2byte.es>
4  * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <https://www.gnu.org/licenses/>.
18  */
19 
26 require '../../main.inc.php';
27 require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
28 require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
30 require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
31 require_once DOL_DOCUMENT_ROOT.'/compta/localtax/class/localtax.class.php';
32 
33 // Load translation files required by the page
34 $langs->loadLangs(array("other", "compta", "banks", "bills", "companies", "product", "trips", "admin"));
35 
36 $local = GETPOST('localTaxType', 'int');
37 
38 // Date range
39 $year = GETPOST("year", "int");
40 if (empty($year)) {
41  $year_current = strftime("%Y", dol_now());
42  $year_start = $year_current;
43 } else {
44  $year_current = $year;
45  $year_start = $year;
46 }
47 $date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"));
48 $date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"));
49 // Quarter
50 if (empty($date_start) || empty($date_end)) { // We define date_start and date_end
51  $q = GETPOST("q");
52  if (empty($q)) {
53  if (GETPOST("month")) {
54  $date_start = dol_get_first_day($year_start, GETPOST("month"), false);
55  $date_end = dol_get_last_day($year_start, GETPOST("month"), false);
56  } else {
57  $date_start = dol_get_first_day($year_start, empty($conf->global->SOCIETE_FISCAL_MONTH_START) ? 1 : $conf->global->SOCIETE_FISCAL_MONTH_START, false);
58  if (empty($conf->global->MAIN_INFO_VAT_RETURN) || $conf->global->MAIN_INFO_VAT_RETURN == 2) {
59  $date_end = dol_time_plus_duree($date_start, 3, 'm') - 1;
60  } elseif ($conf->global->MAIN_INFO_VAT_RETURN == 3) {
61  $date_end = dol_time_plus_duree($date_start, 1, 'y') - 1;
62  } elseif ($conf->global->MAIN_INFO_VAT_RETURN == 1) {
63  $date_end = dol_time_plus_duree($date_start, 1, 'm') - 1;
64  }
65  }
66  } else {
67  if ($q == 1) {
68  $date_start = dol_get_first_day($year_start, 1, false);
69  $date_end = dol_get_last_day($year_start, 3, false);
70  }
71  if ($q == 2) {
72  $date_start = dol_get_first_day($year_start, 4, false);
73  $date_end = dol_get_last_day($year_start, 6, false);
74  }
75  if ($q == 3) {
76  $date_start = dol_get_first_day($year_start, 7, false);
77  $date_end = dol_get_last_day($year_start, 9, false);
78  }
79  if ($q == 4) {
80  $date_start = dol_get_first_day($year_start, 10, false);
81  $date_end = dol_get_last_day($year_start, 12, false);
82  }
83  }
84 }
85 
86 $min = price2num(GETPOST("min", "alpha"));
87 if (empty($min)) {
88  $min = 0;
89 }
90 
91 // Define modetax (0 or 1)
92 // 0=normal, 1=option vat for services is on debit, 2=option on payments for products
93 $modetax = $conf->global->TAX_MODE;
94 if (GETPOSTISSET("modetax")) {
95  $modetax = GETPOST("modetax", 'int');
96 }
97 if (empty($modetax)) {
98  $modetax = 0;
99 }
100 
101 // Security check
102 $socid = GETPOST('socid', 'int');
103 if ($user->socid) {
104  $socid = $user->socid;
105 }
106 $result = restrictedArea($user, 'tax', '', '', 'charges');
107 
108 if (empty($local)) {
109  accessforbidden('Parameter localTaxType is missing');
110  exit;
111 }
112 
113 
114 $calc = 0;
115 /*
116  * View
117  */
118 
119 $form = new Form($db);
120 $company_static = new Societe($db);
121 
122 $morequerystring = '';
123 $listofparams = array('date_startmonth', 'date_startyear', 'date_startday', 'date_endmonth', 'date_endyear', 'date_endday');
124 foreach ($listofparams as $param) {
125  if (GETPOST($param) != '') {
126  $morequerystring .= ($morequerystring ? '&' : '').$param.'='.GETPOST($param);
127  }
128 }
129 
130 llxHeader('', '', '', '', 0, 0, '', '', $morequerystring);
131 
132 
133 $name = $langs->transcountry($local == 1 ? "LT1ReportByCustomers" : "LT2ReportByCustomers", $mysoc->country_code);
134 
135 $fsearch = '<!-- hidden fields for form -->';
136 $fsearch .= '<input type="hidden" name="token" value="'.newToken().'">';
137 $fsearch .= '<input type="hidden" name="modetax" value="'.$modetax.'">';
138 $fsearch .= '<input type="hidden" name="localTaxType" value="'.$local.'">';
139 $fsearch .= $langs->trans("SalesTurnoverMinimum").': ';
140 $fsearch .= '<input type="text" name="min" id="min" value="'.$min.'" size="6">';
141 
142 $calc = $conf->global->MAIN_INFO_LOCALTAX_CALC.$local;
143 // Affiche en-tete du rapport
144 if ($calc == 0 || $calc == 1) { // Calculate on invoice for goods and services
145  $calcmode = $calc == 0 ? $langs->trans("CalcModeLT".$local) : $langs->trans("CalcModeLT".$local."Rec");
146  $calcmode .= ' <span class="opacitymedium">('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')</span>';
147  $period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
148  if (!empty($conf->global->MAIN_MODULE_COMPTABILITE)) {
149  $description .= '<br>'.$langs->trans("WarningDepositsNotIncluded");
150  }
151  $description .= $fsearch;
152  $description .= ' <span class="opacitymedium">('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')</span>';
153  $builddate = dol_now();
154 
155  $elementcust = $langs->trans("CustomersInvoices");
156  $productcust = $langs->trans("Description");
157  $amountcust = $langs->trans("AmountHT");
158  $elementsup = $langs->trans("SuppliersInvoices");
159  $productsup = $langs->trans("Description");
160  $amountsup = $langs->trans("AmountHT");
161 }
162 if ($calc == 2) { // Invoice for goods, payment for services
163  $calcmode = $langs->trans("CalcModeLT2Debt");
164  $calcmode .= ' <span class="opacitymedium">('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')</span>';
165  $period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
166  if (!empty($conf->global->MAIN_MODULE_COMPTABILITE)) {
167  $description .= '<br>'.$langs->trans("WarningDepositsNotIncluded");
168  }
169  $description .= $fsearch;
170  $description .= '<span class="opacitymedium">('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')</span>';
171  $builddate = dol_now();
172 
173  $elementcust = $langs->trans("CustomersInvoices");
174  $productcust = $langs->trans("Description");
175  $amountcust = $langs->trans("AmountHT");
176  $elementsup = $langs->trans("SuppliersInvoices");
177  $productsup = $langs->trans("Description");
178  $amountsup = $langs->trans("AmountHT");
179 }
180 report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode);
181 
182 
183 $vatcust = $langs->transcountry($local == 1 ? "LT1" : "LT2", $mysoc->country_code);
184 $vatsup = $langs->transcountry($local == 1 ? "LT1" : "LT2", $mysoc->country_code);
185 
186 print '<div class="div-table-responsive">';
187 print '<table class="noborder centpercent">';
188 
189 // IRPF that the customer has retained me
190 if ($calc == 0 || $calc == 2) {
191  print '<tr class="liste_titre">';
192  print '<td class="left">'.$langs->trans("Num").'</td>';
193  print '<td class="left">'.$langs->trans("Customer").'</td>';
194  print '<td>'.$langs->transcountry("ProfId1", $mysoc->country_code).'</td>';
195  print '<td class="right">'.$langs->trans("TotalHT").'</td>';
196  print '<td class="right">'.$vatcust.'</td>';
197  print "</tr>\n";
198 
199  $coll_list = tax_by_thirdparty('localtax'.$local, $db, 0, $date_start, $date_end, $modetax, 'sell');
200 
201  $action = "tvaclient";
202  $object = &$coll_list;
203  $parameters["mode"] = $modetax;
204  $parameters["start"] = $date_start;
205  $parameters["end"] = $date_end;
206  $parameters["direction"] = 'sell';
207  $parameters["type"] = 'localtax'.$local;
208 
209  // Initialize technical object to manage hooks of expenses. Note that conf->hooks_modules contains array array
210  $hookmanager->initHooks(array('externalbalance'));
211  $reshook = $hookmanager->executeHooks('addVatLine', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
212 
213  if (is_array($coll_list)) {
214  $total = 0;
215  $totalamount = 0;
216  $i = 1;
217  foreach ($coll_list as $coll) {
218  if (($min == 0 || ($min > 0 && $coll->amount > $min)) && ($local == 1 ? $coll->localtax1 : $coll->localtax2) != 0) {
219  $intra = str_replace($find, $replace, $coll->tva_intra);
220  if (empty($intra)) {
221  if ($coll->assuj == '1') {
222  $intra = $langs->trans('Unknown');
223  } else {
224  $intra = '';
225  }
226  }
227  print '<tr class="oddeven">';
228  print '<td class="nowrap">'.$i."</td>";
229  $company_static->id = $coll->socid;
230  $company_static->name = $coll->name;
231  print '<td class="nowrap">'.$company_static->getNomUrl(1).'</td>';
232  $find = array(' ', '.');
233  $replace = array('', '');
234  print '<td class="nowrap">'.$intra.'</td>';
235  print '<td class="nowrap right">'.price($coll->amount).'</td>';
236  print '<td class="nowrap right">'.price($local == 1 ? $coll->localtax1 : $coll->localtax2).'</td>';
237  $totalamount = $totalamount + $coll->amount;
238  $total = $total + ($local == 1 ? $coll->localtax1 : $coll->localtax2);
239  print "</tr>\n";
240  $i++;
241  }
242  }
243  $x_coll_sum = $total;
244 
245  print '<tr class="liste_total"><td class="right" colspan="3">'.$langs->trans("Total").':</td>';
246  print '<td class="nowrap right">'.price($totalamount).'</td>';
247  print '<td class="nowrap right">'.price($total).'</td>';
248  print '</tr>';
249  } else {
250  $langs->load("errors");
251  if ($coll_list == -1) {
252  print '<tr><td colspan="5">'.$langs->trans("ErrorNoAccountancyModuleLoaded").'</td></tr>';
253  } elseif ($coll_list == -2) {
254  print '<tr><td colspan="5">'.$langs->trans("FeatureNotYetAvailable").'</td></tr>';
255  } else {
256  print '<tr><td colspan="5">'.$langs->trans("Error").'</td></tr>';
257  }
258  }
259 }
260 
261 // IRPF I retained my supplier
262 if ($calc == 0 || $calc == 1) {
263  print '<tr class="liste_titre">';
264  print '<td class="left">'.$langs->trans("Num")."</td>";
265  print '<td class="left">'.$langs->trans("Supplier")."</td>";
266  print '<td>'.$langs->transcountry("ProfId1", $mysoc->country_code).'</td>';
267  print '<td class="right">'.$langs->trans("TotalHT").'</td>';
268  print '<td class="right">'.$vatsup.'</td>';
269  print "</tr>\n";
270 
271  $company_static = new Societe($db);
272 
273  $coll_list = tax_by_thirdparty('localtax'.$local, $db, 0, $date_start, $date_end, $modetax, 'buy');
274  $parameters["direction"] = 'buy';
275  $parameters["type"] = 'localtax'.$local;
276 
277  $reshook = $hookmanager->executeHooks('addVatLine', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
278  if (is_array($coll_list)) {
279  $total = 0;
280  $totalamount = 0;
281  $i = 1;
282  foreach ($coll_list as $coll) {
283  if (($min == 0 || ($min > 0 && $coll->amount > $min)) && ($local == 1 ? $coll->localtax1 : $coll->localtax2) != 0) {
284  $intra = str_replace($find, $replace, $coll->tva_intra);
285  if (empty($intra)) {
286  if ($coll->assuj == '1') {
287  $intra = $langs->trans('Unknown');
288  } else {
289  $intra = '';
290  }
291  }
292  print '<tr class="oddeven">';
293  print '<td class="nowrap">'.$i."</td>";
294  $company_static->id = $coll->socid;
295  $company_static->name = $coll->name;
296  print '<td class="nowrap">'.$company_static->getNomUrl(1).'</td>';
297  $find = array(' ', '.');
298  $replace = array('', '');
299  print '<td class="nowrap">'.$intra."</td>";
300  print '<td class="nowrap right">'.price($coll->amount).'</td>';
301  print '<td class="nowrap right">'.price($local == 1 ? $coll->localtax1 : $coll->localtax2).'</td>';
302  $totalamount = $totalamount + $coll->amount;
303  $total = $total + ($local == 1 ? $coll->localtax1 : $coll->localtax2);
304  print "</tr>\n";
305  $i++;
306  }
307  }
308  $x_paye_sum = $total;
309 
310  print '<tr class="liste_total"><td class="right" colspan="3">'.$langs->trans("Total").':</td>';
311  print '<td class="nowrap right">'.price($totalamount).'</td>';
312  print '<td class="nowrap right">'.price($total).'</td>';
313  print '</tr>';
314  } else {
315  $langs->load("errors");
316  if ($coll_list == -1) {
317  print '<tr><td colspan="5">'.$langs->trans("ErrorNoAccountancyModuleLoaded").'</td></tr>';
318  } elseif ($coll_list == -2) {
319  print '<tr><td colspan="5">'.$langs->trans("FeatureNotYetAvailable").'</td></tr>';
320  } else {
321  print '<tr><td colspan="5">'.$langs->trans("Error").'</td></tr>';
322  }
323  }
324 }
325 
326 if ($calc == 0) {
327  // Total to pay
328  print '<tr><td colspan="5"></td></tr>';
329 
330  $diff = $x_coll_sum - $x_paye_sum;
331  print '<tr class="liste_total">';
332  print '<td class="liste_total" colspan="4">'.$langs->trans("TotalToPay").($q ? ', '.$langs->trans("Quadri").' '.$q : '').'</td>';
333  print '<td class="liste_total nowrap right"><b>'.price(price2num($diff, 'MT'))."</b></td>\n";
334  print "</tr>\n";
335 }
336 
337 print '</table>';
338 print '</div>';
339 
340 
341 // End of page
342 llxFooter();
343 $db->close();
Societe
Class to manage third parties objects (customers, suppliers, prospects...)
Definition: societe.class.php:48
restrictedArea
restrictedArea($user, $features, $objectid=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.
Definition: security.lib.php:234
llxFooter
llxFooter()
Empty footer.
Definition: wrapper.php:73
GETPOST
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
Definition: functions.lib.php:484
$form
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:142
price2num
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
Definition: functions.lib.php:5661
dol_get_first_day
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
Definition: date.lib.php:551
tax_by_thirdparty
tax_by_thirdparty($type, $db, $y, $date_start, $date_end, $modetax, $direction, $m=0, $q=0)
Look for collectable VAT clients in the chosen year (and month)
Definition: tax.lib.php:112
dol_get_last_day
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition: date.lib.php:570
dol_time_plus_duree
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
Definition: date.lib.php:121
GETPOSTISSET
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
Definition: functions.lib.php:386
Form
Class to manage generation of HTML components Only common components must be here.
Definition: html.form.class.php:52
dol_now
dol_now($mode='auto')
Return date for now.
Definition: functions.lib.php:2845
accessforbidden
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
Definition: security.lib.php:933
dol_mktime
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...
Definition: functions.lib.php:2757
report_header
report_header($reportname, $notused, $period, $periodlink, $description, $builddate, $exportlink='', $moreparam=array(), $calcmode='', $varlink='')
Show header of a report.
Definition: report.lib.php:41
llxHeader
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOCSRFCHECK')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:59