* Copyright (C) 2014 Ferran Marcet * Copyright (C) 2018-2025 Frédéric France * Copyright (C) 2024 MDW * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/compta/localtax/clients.php * \ingroup tax * \brief Third parties localtax report */ // Load Dolibarr environment require '../../main.inc.php'; /** * @var Conf $conf * @var DoliDB $db * @var HookManager $hookmanager * @var Societe $mysoc * @var Translate $langs * @var User $user */ require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/localtax/class/localtax.class.php'; // Load translation files required by the page $langs->loadLangs(array("other", "compta", "banks", "bills", "companies", "product", "trips", "admin")); include DOL_DOCUMENT_ROOT.'/compta/tva/initdatesforvat.inc.php'; /** * @var int $date_start * @var int $date_end * @var int $date_start_month * @var int $date_start_year * @var int $date_start_day * @var int $date_end_month * @var int $date_end_year * @var int $date_end_day * @var int $year_current */ ' @phan-var-force int $date_start @phan-var-force int $date_end @phan-var-force int $date_start_month @phan-var-force int $date_start_year @phan-var-force int $date_start_day @phan-var-force int $date_end_month @phan-var-force int $date_end_year @phan-var-force int $date_end_day @phan-var-force int $year_current '; $local = GETPOSTINT('localTaxType'); $min = price2num(GETPOST("min", "alpha")); if (empty($min)) { $min = 0; } // Define modetax (0 or 1) // 0=normal, 1=option vat for services is on debit, 2=option on payments for products $modetax = getDolGlobalInt('TAX_MODE'); if (GETPOSTISSET("modetax")) { $modetax = GETPOSTINT("modetax"); } if (empty($modetax)) { $modetax = 0; } // Security check $socid = GETPOSTINT('socid'); if ($user->socid) { $socid = $user->socid; } // Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context $hookmanager->initHooks(['customerlocaltaxlist']); $result = restrictedArea($user, 'tax', '', '', 'charges'); if (empty($local)) { accessforbidden('Parameter localTaxType is missing'); } $builddate = dol_now(); $calc = 0; $calcmode = "Unknown"; $find = ''; $replace = ''; $period = ''; /* * View */ $form = new Form($db); $company_static = new Societe($db); $morequerystring = ''; $listofparams = array('date_startmonth', 'date_startyear', 'date_startday', 'date_endmonth', 'date_endyear', 'date_endday'); foreach ($listofparams as $param) { if (GETPOST($param) != '') { $morequerystring .= ($morequerystring ? '&' : '').$param.'='.GETPOST($param); } } $name = $langs->transcountry($local == 1 ? "LT1ReportByCustomers" : "LT2ReportByCustomers", $mysoc->country_code); llxHeader('', $name, '', '', 0, 0, '', '', $morequerystring); $fsearch = ''; $fsearch .= ''; $fsearch .= ''; $fsearch .= ''; $fsearch .= $langs->trans("SalesTurnoverMinimum").': '; $fsearch .= ''; // Show report header $calc = getDolGlobalString('MAIN_INFO_LOCALTAX_CALC').$local; $description = ''; if ($calc == 0 || $calc == 1) { // Calculate on invoice for goods and services $calcmode = $calc == 0 ? $langs->trans("CalcModeLT".$local) : $langs->trans("CalcModeLT".$local."Rec"); $calcmode .= ' ('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')'; $period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0); if (isModEnabled('comptabilite')) { $description .= '
'.$langs->trans("WarningDepositsNotIncluded"); } $description .= $fsearch; $description .= ' ('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')'; $elementcust = $langs->trans("CustomersInvoices"); $productcust = $langs->trans("Description"); $amountcust = $langs->trans("AmountHT"); $elementsup = $langs->trans("SuppliersInvoices"); $productsup = $langs->trans("Description"); $amountsup = $langs->trans("AmountHT"); } if ($calc == 2) { // Invoice for goods, payment for services $calcmode = $langs->trans("CalcModeLT2Debt"); $calcmode .= ' ('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')'; $period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0); if (isModEnabled('comptabilite')) { $description .= '
'.$langs->trans("WarningDepositsNotIncluded"); } $description .= $fsearch; $description .= '('.$langs->trans("TaxModuleSetupToModifyRulesLT", DOL_URL_ROOT.'/admin/company.php').')'; $elementcust = $langs->trans("CustomersInvoices"); $productcust = $langs->trans("Description"); $amountcust = $langs->trans("AmountHT"); $elementsup = $langs->trans("SuppliersInvoices"); $productsup = $langs->trans("Description"); $amountsup = $langs->trans("AmountHT"); } // Set period $period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0); $builddate = dol_now(); $periodlink = ''; $exportlink = ''; report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode); $vatcust = $langs->transcountry($local == 1 ? "LT1" : "LT2", $mysoc->country_code); $vatsup = $langs->transcountry($local == 1 ? "LT1" : "LT2", $mysoc->country_code); // VAT Received print '
'; print ''; $x_coll_sum = 0; // Initialize value $x_paye_sum = 0; // Initialize value // IRPF that the customer has retained me if ($calc == 0 || $calc == 2) { print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; $coll_list = tax_by_thirdparty('localtax'.$local, $db, 0, $date_start, $date_end, $modetax, 'sell'); $action = "tvaclient"; $object = &$coll_list; $parameters["mode"] = $modetax; $parameters["start"] = $date_start; $parameters["end"] = $date_end; $parameters["direction"] = 'sell'; $parameters["type"] = 'localtax'.$local; // Initialize a technical object to manage hooks of expenses. Note that conf->hooks_modules contains array array $hookmanager->initHooks(array('externalbalance')); $reshook = $hookmanager->executeHooks('addVatLine', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if (is_array($coll_list)) { $total = 0; $totalamount = 0; $i = 1; foreach ($coll_list as $coll_key => $coll_obj) { if (($min == 0 || ($min > 0 && $coll_obj['totalht'] > $min)) && ($local == 1 ? $coll_obj['localtax1'] : $coll_obj['localtax2']) != 0) { $company_static->fetch($coll_key); $intra = str_replace($find, $replace, $company_static->tva_intra); print ''; print '"; print ''; $find = array(' ', '.'); $replace = array('', ''); print ''; print ''; print ''; $totalamount += $coll_obj['totalht']; $total += ($local == 1 ? $coll_obj['localtax1'] : $coll_obj['localtax2']); print "\n"; $i++; } } $x_coll_sum = $total; print ''; print ''; print ''; print ''; } else { $langs->load("errors"); if ($coll_list == -1) { print ''; } elseif ($coll_list == -2) { print ''; } else { print ''; } } } // IRPF I retained my supplier if ($calc == 0 || $calc == 1) { print ''; print '"; print '"; print ''; print ''; print ''; print "\n"; $company_static = new Societe($db); $coll_list = tax_by_thirdparty('localtax'.$local, $db, 0, $date_start, $date_end, $modetax, 'buy'); $parameters["direction"] = 'buy'; $parameters["type"] = 'localtax'.$local; $reshook = $hookmanager->executeHooks('addVatLine', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if (is_array($coll_list)) { $total = 0; $totalamount = 0; $i = 1; foreach ($coll_list as $coll_key => $coll_obj) { if (($min == 0 || ($min > 0 && $coll_obj['totalht'] > $min)) && ($local == 1 ? $coll_obj['localtax1'] : $coll_obj['localtax2']) != 0) { $company_static->fetch($coll_key); $intra = str_replace($find, $replace, $company_static->tva_intra); print ''; print '"; print ''; $find = array(' ', '.'); $replace = array('', ''); print '"; print ''; print ''; $totalamount += $coll_obj['totalht']; $total += ($local == 1 ? $coll_obj['localtax1'] : $coll_obj['localtax2']); print "\n"; $i++; } } $x_paye_sum = $total; print ''; print ''; print ''; print ''; } else { $langs->load("errors"); if ($coll_list == -1) { print ''; } elseif ($coll_list == -2) { print ''; } else { print ''; } } } if ($calc == 0) { // Total to pay print ''; $diff = $x_coll_sum - $x_paye_sum; print ''; print ''; print '\n"; print "\n"; } print '
'.$langs->trans("Num").''.$langs->trans("Customer").''.$langs->trans("VATIntraShort").''.$langs->trans("TotalHT").''.$vatcust.'
'.$i."'.$company_static->getNomUrl(1).''.$intra.''.price($coll_obj['totalht']).''.price($local == 1 ? $coll_obj['localtax1'] : $coll_obj['localtax2']).'
'.$langs->trans("Total").':'.price($totalamount).''.price($total).'
'.$langs->trans("ErrorNoAccountancyModuleLoaded").'
'.$langs->trans("FeatureNotYetAvailable").'
'.$langs->trans("Error").'
'.$langs->trans("Num")."'.$langs->trans("Supplier")."'.$langs->trans("VATIntraShort").''.$langs->trans("TotalHT").''.$vatsup.'
'.$i."'.$company_static->getNomUrl(1).''.$intra."'.price($coll_obj['totalht']).''.price($local == 1 ? $coll_obj['localtax1'] : $coll_obj['localtax2']).'
'.$langs->trans("Total").':'.price($totalamount).''.price($total).'
'.$langs->trans("ErrorNoAccountancyModuleLoaded").'
'.$langs->trans("FeatureNotYetAvailable").'
'.$langs->trans("Error").'
'.$langs->trans("TotalToPay").''.price(price2num($diff, 'MT'))."
'; print '
'; // End of page llxFooter(); $db->close();