dolibarr 20.0.0
accounting-files.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2019 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2017 Pierre-Henry Favre <support@atm-consulting.fr>
5 * Copyright (C) 2020 Maxime DEMAREST <maxime@indelog.fr>
6 * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
7 * Copyright (C) 2022-2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
8 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
30if ((array_key_exists('action', $_GET) && $_GET['action'] == 'dl') || (array_key_exists('action', $_POST) && $_POST['action'] == 'dl')) { // To not replace token when downloading file. Keep $_GET and $_POST here
31 if (!defined('NOTOKENRENEWAL')) {
32 define('NOTOKENRENEWAL', '1');
33 }
34}
35
36// Load Dolibarr environment
37require '../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
39require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
40require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
41require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
42require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
43require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php';
44require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
45require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
46require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
47require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
48require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
49require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php';
50require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
51require_once DOL_DOCUMENT_ROOT.'/loan/class/paymentloan.class.php';
52
53if (isModEnabled('project')) {
54 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
55 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
56}
57
58// Constant to define payment sens
59const PAY_DEBIT = 0;
60const PAY_CREDIT = 1;
61
62$langs->loadLangs(array("accountancy", "bills", "companies", "salaries", "compta", "trips", "banks", "loan"));
63
64$date_start = GETPOST('date_start', 'alpha');
65$date_startDay = GETPOSTINT('date_startday');
66$date_startMonth = GETPOSTINT('date_startmonth');
67$date_startYear = GETPOSTINT('date_startyear');
68$date_start = dol_mktime(0, 0, 0, $date_startMonth, $date_startDay, $date_startYear, 'tzuserrel');
69$date_stop = GETPOST('date_stop', 'alpha');
70$date_stopDay = GETPOSTINT('date_stopday');
71$date_stopMonth = GETPOSTINT('date_stopmonth');
72$date_stopYear = GETPOSTINT('date_stopyear');
73$date_stop = dol_mktime(23, 59, 59, $date_stopMonth, $date_stopDay, $date_stopYear, 'tzuserrel');
74$action = GETPOST('action', 'aZ09');
75$projectid = GETPOSTINT('projectid');
76
77// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
78$hookmanager->initHooks(array('comptafileslist', 'globallist'));
79
80// Load variable for pagination
81$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
82$sortfield = GETPOST('sortfield', 'aZ09comma');
83$sortorder = GETPOST('sortorder', 'aZ09comma');
84$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
85if (empty($page) || $page == -1) {
86 $page = 0;
87} // If $page is not defined, or '' or -1
88$offset = $limit * $page;
89$pageprev = $page - 1;
90$pagenext = $page + 1;
91if (!$sortfield) {
92 $sortfield = "date,item"; // Set here default search field
93}
94if (!$sortorder) {
95 $sortorder = "DESC";
96}
97
98
99$arrayfields = array(
100 'type' => array('label' => "Type", 'checked' => 1),
101 'date' => array('label' => "Date", 'checked' => 1),
102 'date_due' => array('label' => "DateDue", 'checked' => 1),
103 'ref' => array('label' => "Ref", 'checked' => 1),
104 'documents' => array('label' => "Documents", 'checked' => 1),
105 'paid' => array('label' => "Paid", 'checked' => 1),
106 'total_ht' => array('label' => "TotalHT", 'checked' => 1),
107 'total_ttc' => array('label' => "TotalTTC", 'checked' => 1),
108 'total_vat' => array('label' => "TotalVAT", 'checked' => 1),
109 //...
110);
111
112// Security check
113if (!isModEnabled('comptabilite') && !isModEnabled('accounting')) {
115}
116if ($user->socid > 0) {
118}
119
120// Define $arrayofentities if multientity is set.
121$arrayofentities = array();
122if (isModEnabled('multicompany') && is_object($mc)) {
123 $arrayofentities = $mc->getEntitiesList();
124}
125
126$entity = (GETPOSTISSET('entity') ? GETPOSTINT('entity') : (GETPOSTISSET('search_entity') ? GETPOSTINT('search_entity') : $conf->entity));
127if (isModEnabled('multicompany') && is_object($mc)) {
128 if (empty($entity) && getDolGlobalString('MULTICOMPANY_ALLOW_EXPORT_ACCOUNTING_DOC_FOR_ALL_ENTITIES')) {
129 $entity = '0,'.implode(',', array_keys($arrayofentities));
130 }
131}
132if (empty($entity)) {
133 $entity = $conf->entity;
134}
135
136$error = 0;
137
138$listofchoices = array(
139 'selectinvoices' => array('label' => 'Invoices', 'picto' => 'bill', 'lang' => 'bills', 'enabled' => isModEnabled('invoice'), 'perms' => $user->hasRight('facture', 'lire')),
140 'selectsupplierinvoices' => array('label' => 'BillsSuppliers', 'picto' => 'supplier_invoice', 'lang' => 'bills', 'enabled' => isModEnabled('supplier_invoice'), 'perms' => $user->hasRight('fournisseur', 'facture', 'lire')),
141 'selectexpensereports' => array('label' => 'ExpenseReports', 'picto' => 'expensereport', 'lang' => 'trips', 'enabled' => isModEnabled('expensereport'), 'perms' => $user->hasRight('expensereport', 'lire')),
142 'selectdonations' => array('label' => 'Donations', 'picto' => 'donation', 'lang' => 'donation', 'enabled' => isModEnabled('don'), 'perms' => $user->hasRight('don', 'lire')),
143 'selectsocialcontributions' => array('label' => 'SocialContributions', 'picto' => 'bill', 'enabled' => isModEnabled('tax'), 'perms' => $user->hasRight('tax', 'charges', 'lire')),
144 'selectpaymentsofsalaries' => array('label' => 'SalariesPayments', 'picto' => 'salary', 'lang' => 'salaries', 'enabled' => isModEnabled('salaries'), 'perms' => $user->hasRight('salaries', 'read')),
145 'selectvariouspayment' => array('label' => 'VariousPayment', 'picto' => 'payment', 'enabled' => isModEnabled('bank'), 'perms' => $user->hasRight('banque', 'lire')),
146 'selectloanspayment' => array('label' => 'PaymentLoan','picto' => 'loan', 'enabled' => isModEnabled('don'), 'perms' => $user->hasRight('loan', 'read')),
147);
148
149
150
151/*
152 * Actions
153 */
154
155
156//$parameters = array('socid' => $id);
157//$reshook = $hookmanager->executeHooks('doActions', $parameters, $object); // Note that $object may have been modified by some hooks
158//if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
159
160$filesarray = array();
161
162'@phan-var-force array<string,array{id:string,entity:string,date:string,date_due:string,paid:float|int,amount_ht:float|int,amount_ttc:float|int,amount_vat:float|int,amount_localtax1:float|int,amount_localtax2:float|int,amount_revenuestamp:float|int,ref:string,fk:string,item:string,thirdparty_name:string,thirdparty_code:string,country_code:string,vatnum:string,sens:string,currency:string,line?:string,name?:string,files?:mixed}> $filesarray';
163
164$result = false;
165if (($action == 'searchfiles' || $action == 'dl')) {
166 if (empty($date_start)) {
167 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DateStart")), null, 'errors');
168 $error++;
169 }
170 if (empty($date_stop)) {
171 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DateEnd")), null, 'errors');
172 $error++;
173 }
174
175 if (!$error) {
176 $sql = '';
177
178 $wheretail = " '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'";
179
180 // Customer invoices
181 if (GETPOST('selectinvoices') && !empty($listofchoices['selectinvoices']['perms'])) {
182 if (!empty($sql)) {
183 $sql .= " UNION ALL";
184 }
185 $sql .= "SELECT t.rowid as id, t.entity, t.ref, t.paye as paid, t.total_ht, t.total_ttc, t.total_tva as total_vat,";
186 $sql .= " t.localtax1, t.localtax2, t.revenuestamp,";
187 $sql .= " t.multicurrency_code as currency, t.fk_soc, t.datef as date, t.date_lim_reglement as date_due, 'Invoice' as item, s.nom as thirdparty_name, s.code_client as thirdparty_code, c.code as country_code, s.tva_intra as vatnum, ".PAY_CREDIT." as sens";
188 $sql .= " FROM ".MAIN_DB_PREFIX."facture as t LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = t.fk_soc LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = s.fk_pays";
189 $sql .= " WHERE datef between ".$wheretail;
190 $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')';
191 $sql .= " AND t.fk_statut <> ".Facture::STATUS_DRAFT;
192 if (!empty($projectid)) {
193 $sql .= " AND fk_projet = ".((int) $projectid);
194 }
195 }
196 // Vendor invoices
197 if (GETPOST('selectsupplierinvoices') && !empty($listofchoices['selectsupplierinvoices']['perms'])) {
198 if (!empty($sql)) {
199 $sql .= " UNION ALL";
200 }
201 $sql .= " SELECT t.rowid as id, t.entity, t.ref, t.paye as paid, t.total_ht, t.total_ttc, t.total_tva as total_vat,";
202 $sql .= " t.localtax1, t.localtax2, 0 as revenuestamp,";
203 $sql .= " t.multicurrency_code as currency, t.fk_soc, t.datef as date, t.date_lim_reglement as date_due, 'SupplierInvoice' as item, s.nom as thirdparty_name, s.code_fournisseur as thirdparty_code, c.code as country_code, s.tva_intra as vatnum, ".PAY_DEBIT." as sens";
204 $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as t LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = t.fk_soc LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = s.fk_pays";
205 $sql .= " WHERE datef between ".$wheretail;
206 $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')';
207 $sql .= " AND t.fk_statut <> ".FactureFournisseur::STATUS_DRAFT;
208 if (!empty($projectid)) {
209 $sql .= " AND fk_projet = ".((int) $projectid);
210 }
211 }
212 // Expense reports
213 if (GETPOST('selectexpensereports') && !empty($listofchoices['selectexpensereports']['perms'])) {
214 if (!empty($sql)) {
215 $sql .= " UNION ALL";
216 }
217 // if project filter is used on an expense report,
218 // show only total_ht/total_tva/total_ttc of the line considered by the project
219 if (!empty($projectid)) {
220 $sql .= " SELECT t.rowid as id, t.entity, t.ref, t.paid, SUM(td.total_ht) as total_ht, SUM(td.total_ttc) as total_ttc, SUM(td.total_tva) as total_vat,";
221 $sql .= " 0 as localtax1, 0 as localtax2, 0 as revenuestamp,";
222 $sql .= " td.multicurrency_code as currency, t.fk_user_author as fk_soc, t.date_fin as date, t.date_fin as date_due, 'ExpenseReport' as item, CONCAT(CONCAT(u.lastname, ' '), u.firstname) as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum, " . PAY_DEBIT . " as sens";
223 $sql .= " FROM " . MAIN_DB_PREFIX . "expensereport as t";
224 $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "expensereport_det as td ON t.rowid = td.fk_expensereport";
225 $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "user as u ON u.rowid = t.fk_user_author";
226 $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as c ON c.rowid = u.fk_country";
227 $sql .= " WHERE date_fin between " . $wheretail;
228 $sql .= " AND t.entity IN (" . $db->sanitize($entity == 1 ? '0,1' : $entity) . ')';
229 $sql .= " AND t.fk_statut <> " . ExpenseReport::STATUS_DRAFT;
230 $sql .= " AND fk_projet = ".((int) $projectid);
231 } else {
232 $sql .= " SELECT t.rowid as id, t.entity, t.ref, t.paid, t.total_ht, t.total_ttc, t.total_tva as total_vat,";
233 $sql .= " 0 as localtax1, 0 as localtax2, 0 as revenuestamp,";
234 $sql .= " t.multicurrency_code as currency, t.fk_user_author as fk_soc, t.date_fin as date, t.date_fin as date_due, 'ExpenseReport' as item, CONCAT(CONCAT(u.lastname, ' '), u.firstname) as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum, " . PAY_DEBIT . " as sens";
235 $sql .= " FROM " . MAIN_DB_PREFIX . "expensereport as t LEFT JOIN " . MAIN_DB_PREFIX . "user as u ON u.rowid = t.fk_user_author LEFT JOIN " . MAIN_DB_PREFIX . "c_country as c ON c.rowid = u.fk_country";
236 $sql .= " WHERE date_fin between " . $wheretail;
237 $sql .= " AND t.entity IN (" . $db->sanitize($entity == 1 ? '0,1' : $entity) . ')';
238 $sql .= " AND t.fk_statut <> " . ExpenseReport::STATUS_DRAFT;
239 }
240 }
241 // Donations
242 if (GETPOST('selectdonations') && !empty($listofchoices['selectdonations']['perms'])) {
243 if (!empty($sql)) {
244 $sql .= " UNION ALL";
245 }
246 $sql .= " SELECT t.rowid as id, t.entity, t.ref, paid, amount as total_ht, amount as total_ttc, 0 as total_vat,";
247 $sql .= " 0 as localtax1, 0 as localtax2, 0 as revenuestamp,";
248 $sql .= " '".$db->escape($conf->currency)."' as currency, 0 as fk_soc, t.datedon as date, t.datedon as date_due, 'Donation' as item, t.societe as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum, ".PAY_CREDIT." as sens";
249 $sql .= " FROM ".MAIN_DB_PREFIX."don as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = t.fk_country";
250 $sql .= " WHERE datedon between ".$wheretail;
251 $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')';
252 $sql .= " AND t.fk_statut <> ".Don::STATUS_DRAFT;
253 if (!empty($projectid)) {
254 $sql .= " AND fk_projet = ".((int) $projectid);
255 }
256 }
257 // Payments of salaries
258 if (GETPOST('selectpaymentsofsalaries') && !empty($listofchoices['selectpaymentsofsalaries']['perms'])) {
259 if (!empty($sql)) {
260 $sql .= " UNION ALL";
261 }
262 $sql .= " SELECT t.rowid as id, t.entity, t.label as ref, 1 as paid, amount as total_ht, amount as total_ttc, 0 as total_vat,";
263 $sql .= " 0 as localtax1, 0 as localtax2, 0 as revenuestamp,";
264 $sql .= " '".$db->escape($conf->currency)."' as currency, t.fk_user as fk_soc, t.datep as date, t.dateep as date_due, 'SalaryPayment' as item, CONCAT(CONCAT(u.lastname, ' '), u.firstname) as thirdparty_name, '' as thirdparty_code, c.code as country_code, '' as vatnum, ".PAY_DEBIT." as sens";
265 $sql .= " FROM ".MAIN_DB_PREFIX."payment_salary as t LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = t.fk_user LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON c.rowid = u.fk_country";
266 $sql .= " WHERE datep between ".$wheretail;
267 $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')';
268 //$sql.=" AND fk_statut <> ".PaymentSalary::STATUS_DRAFT;
269 if (!empty($projectid)) {
270 $sql .= " AND fk_projet = ".((int) $projectid);
271 }
272 }
273 // Social contributions
274 if (GETPOST('selectsocialcontributions') && !empty($listofchoices['selectsocialcontributions']['perms'])) {
275 if (!empty($sql)) {
276 $sql .= " UNION ALL";
277 }
278 $sql .= " SELECT t.rowid as id, t.entity, t.libelle as ref, t.paye as paid, t.amount as total_ht, t.amount as total_ttc, 0 as total_vat,";
279 $sql .= " 0 as localtax1, 0 as localtax2, 0 as revenuestamp,";
280 $sql .= " '".$db->escape($conf->currency)."' as currency, 0 as fk_soc, t.date_ech as date, t.periode as date_due, 'SocialContributions' as item, '' as thirdparty_name, '' as thirdparty_code, '' as country_code, '' as vatnum, ".PAY_DEBIT." as sens";
281 $sql .= " FROM ".MAIN_DB_PREFIX."chargesociales as t";
282 $sql .= " WHERE t.date_ech between ".$wheretail;
283 $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')';
284 //$sql.=" AND fk_statut <> ".ChargeSociales::STATUS_UNPAID;
285 if (!empty($projectid)) {
286 $sql .= " AND fk_projet = ".((int) $projectid);
287 }
288 }
289 // Various payments
290 if (GETPOST('selectvariouspayment') && !empty($listofchoices['selectvariouspayment']['perms'])) {
291 if (!empty($sql)) {
292 $sql .= " UNION ALL";
293 }
294 $sql .= " SELECT t.rowid as id, t.entity, t.ref, 1 as paid, t.amount as total_ht, t.amount as total_ttc, 0 as total_vat,";
295 $sql .= " 0 as localtax1, 0 as localtax2, 0 as revenuestamp,";
296 $sql .= " '".$db->escape($conf->currency)."' as currency, 0 as fk_soc, t.datep as date, t.datep as date_due, 'VariousPayment' as item, '' as thirdparty_name, '' as thirdparty_code, '' as country_code, '' as vatnum, sens";
297 $sql .= " FROM ".MAIN_DB_PREFIX."payment_various as t";
298 $sql .= " WHERE datep between ".$wheretail;
299 $sql .= " AND t.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')';
300 if (!empty($projectid)) {
301 $sql .= " AND fk_projet = ".((int) $projectid);
302 }
303 }
304 // Loan payments
305 if (GETPOST('selectloanspayment') && !empty($listofchoices['selectloanspayment']['perms']) && empty($projectid)) {
306 if (!empty($sql)) {
307 $sql .= " UNION ALL";
308 }
309 $sql .= " SELECT t.rowid as id, l.entity, l.label as ref, 1 as paid, (t.amount_capital+t.amount_insurance+t.amount_interest) as total_ht, (t.amount_capital+t.amount_insurance+t.amount_interest) as total_ttc, 0 as total_vat,";
310 $sql .= " 0 as localtax1, 0 as localtax2, 0 as revenuestamp,";
311 $sql .= " '".$db->escape($conf->currency)."' as currency, 0 as fk_soc, t.datep as date, t.datep as date_due, 'LoanPayment' as item, '' as thirdparty_name, '' as thirdparty_code, '' as country_code, '' as vatnum, ".PAY_DEBIT." as sens";
312 $sql .= " FROM ".MAIN_DB_PREFIX."payment_loan as t LEFT JOIN ".MAIN_DB_PREFIX."loan as l ON l.rowid = t.fk_loan";
313 $sql .= " WHERE datep between ".$wheretail;
314 $sql .= " AND l.entity IN (".$db->sanitize($entity == 1 ? '0,1' : $entity).')';
315 }
316
317 if ($sql) {
318 $sql .= $db->order($sortfield, $sortorder);
319 //print $sql;
320
321 $resd = $db->query($sql);
322 $files = array();
323 $link = '';
324
325 if ($resd) {
326 $numd = $db->num_rows($resd);
327
328 $tmpinvoice = new Facture($db);
329 $tmpinvoicesupplier = new FactureFournisseur($db);
330 $tmpdonation = new Don($db);
331
332 $upload_dir = '';
333 $i = 0;
334 while ($i < $numd) {
335 $objd = $db->fetch_object($resd);
336
337 switch ($objd->item) {
338 case "Invoice":
339 $subdir = '';
340 $subdir .= ($subdir ? '/' : '').dol_sanitizeFileName($objd->ref);
341 $upload_dir = $conf->facture->dir_output.'/'.$subdir;
342 $link = "document.php?modulepart=facture&file=".str_replace('/', '%2F', $subdir).'%2F';
343 $modulepart = "facture";
344 break;
345 case "SupplierInvoice":
346 $tmpinvoicesupplier->fetch($objd->id);
347 $subdir = get_exdir($tmpinvoicesupplier->id, 2, 0, 1, $tmpinvoicesupplier, 'invoice_supplier'); // TODO Use first file
348 $subdir .= ($subdir ? '/' : '').dol_sanitizeFileName($objd->ref);
349 $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir;
350 $link = "document.php?modulepart=facture_fournisseur&file=".str_replace('/', '%2F', $subdir).'%2F';
351 $modulepart = "facture_fournisseur";
352 break;
353 case "ExpenseReport":
354 $subdir = '';
355 $subdir .= ($subdir ? '/' : '').dol_sanitizeFileName($objd->ref);
356 $upload_dir = $conf->expensereport->dir_output.'/'.$subdir;
357 $link = "document.php?modulepart=expensereport&file=".str_replace('/', '%2F', $subdir).'%2F';
358 $modulepart = "expensereport";
359 break;
360 case "SalaryPayment":
361 $subdir = '';
362 $subdir .= ($subdir ? '/' : '').dol_sanitizeFileName($objd->id);
363 $upload_dir = $conf->salaries->dir_output.'/'.$subdir;
364 $link = "document.php?modulepart=salaries&file=".str_replace('/', '%2F', $subdir).'%2F';
365 $modulepart = "salaries";
366 break;
367 case "Donation":
368 $tmpdonation->fetch($objp->id);
369 $subdir = get_exdir(0, 0, 0, 0, $tmpdonation, 'donation');
370 $subdir .= ($subdir ? '/' : '').dol_sanitizeFileName($objd->id);
371 $upload_dir = $conf->don->dir_output.'/'.$subdir;
372 $link = "document.php?modulepart=don&file=".str_replace('/', '%2F', $subdir).'%2F';
373 $modulepart = "don";
374 break;
375 case "SocialContributions":
376 $subdir = '';
377 $subdir .= ($subdir ? '/' : '').dol_sanitizeFileName($objd->id);
378 $upload_dir = $conf->tax->dir_output.'/'.$subdir;
379 $link = "document.php?modulepart=tax&file=".str_replace('/', '%2F', $subdir).'%2F';
380 $modulepart = "tax";
381 break;
382 case "VariousPayment":
383 $subdir = '';
384 $subdir .= ($subdir ? '/' : '').dol_sanitizeFileName($objd->id);
385 $upload_dir = $conf->bank->dir_output.'/'.$subdir;
386 $link = "document.php?modulepart=banque&file=".str_replace('/', '%2F', $subdir).'%2F';
387 $modulepart = "banque";
388 break;
389 case "LoanPayment":
390 // Loan payment has no linked file
391 $subdir = '';
392 $upload_dir = $conf->loan->dir_output.'/'.$subdir;
393 $link = "";
394 $modulepart = "";
395 break;
396 default:
397 $subdir = '';
398 $upload_dir = '';
399 $link = '';
400 break;
401 }
402
403 if (!empty($upload_dir)) {
404 $result = true;
405
406 $files = dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview.*\.png)$', '', SORT_ASC, 1);
407 //var_dump($upload_dir);
408 //var_dump($files);
409 if (count($files) < 1) {
410 $nofile = array();
411 $nofile['id'] = $objd->id;
412 $nofile['entity'] = $objd->entity;
413 $nofile['date'] = $db->jdate($objd->date);
414 $nofile['date_due'] = $db->jdate($objd->date_due);
415 $nofile['paid'] = $objd->paid;
416 $nofile['amount_ht'] = $objd->total_ht;
417 $nofile['amount_ttc'] = $objd->total_ttc;
418 $nofile['amount_vat'] = $objd->total_vat;
419 $nofile['amount_localtax1'] = $objd->localtax1;
420 $nofile['amount_localtax2'] = $objd->localtax2;
421 $nofile['amount_revenuestamp'] = $objd->revenuestamp;
422 $nofile['ref'] = ($objd->ref ? $objd->ref : $objd->id);
423 $nofile['fk'] = $objd->fk_soc;
424 $nofile['item'] = $objd->item;
425 $nofile['thirdparty_name'] = $objd->thirdparty_name;
426 $nofile['thirdparty_code'] = $objd->thirdparty_code;
427 $nofile['country_code'] = $objd->country_code;
428 $nofile['vatnum'] = $objd->vatnum;
429 $nofile['sens'] = $objd->sens;
430 $nofile['currency'] = $objd->currency;
431 $nofile['link'] = '';
432 $nofile['name'] = '';
433
434
435 $filesarray[$nofile['item'].'_'.$nofile['id']] = $nofile;
436 } else {
437 foreach ($files as $key => $file) {
438 $file['id'] = $objd->id;
439 $file['entity'] = $objd->entity;
440 $file['date'] = $db->jdate($objd->date);
441 $file['date_due'] = $db->jdate($objd->date_due);
442 $file['paid'] = $objd->paid;
443 $file['amount_ht'] = $objd->total_ht;
444 $file['amount_ttc'] = $objd->total_ttc;
445 $file['amount_vat'] = $objd->total_vat;
446 $file['amount_localtax1'] = $objd->localtax1;
447 $file['amount_localtax2'] = $objd->localtax2;
448 $file['amount_revenuestamp'] = $objd->revenuestamp;
449 $file['ref'] = ($objd->ref ? $objd->ref : $objd->id);
450 $file['fk'] = $objd->fk_soc;
451 $file['item'] = $objd->item;
452 $file['thirdparty_name'] = $objd->thirdparty_name;
453 $file['thirdparty_code'] = $objd->thirdparty_code;
454 $file['country_code'] = $objd->country_code;
455 $file['vatnum'] = $objd->vatnum;
456 $file['sens'] = $objd->sens;
457 $file['currency'] = $objd->currency;
458
459 // Save record into array (only the first time it is found)
460 if (empty($filesarray[$file['item'].'_'.$file['id']])) {
461 $filesarray[$file['item'].'_'.$file['id']] = $file;
462 }
463
464 // Add or concat file
465 if (empty($filesarray[$file['item'].'_'.$file['id']]['files'])) {
466 $filesarray[$file['item'].'_'.$file['id']]['files'] = array();
467 }
468 $filesarray[$file['item'].'_'.$file['id']]['files'][] = array(
469 'link' => $link.urlencode($file['name']),
470 'name' => $file['name'],
471 'ref' => $file['ref'],
472 'fullname' => $file['fullname'],
473 'relpath' => '/'.$file['name'],
474 'relpathnamelang' => $langs->trans($file['item']).'/'.$file['name'],
475 'modulepart' => $modulepart,
476 'subdir' => $subdir,
477 'currency' => $file['currency']
478 );
479 //var_dump($file['item'].'_'.$file['id']);
480 //var_dump($filesarray[$file['item'].'_'.$file['id']]['files']);
481 }
482 }
483 }
484
485 $i++;
486 }
487 } else {
488 dol_print_error($db);
489 }
490
491 $db->free($resd);
492 } else {
493 setEventMessages($langs->trans("ErrorSelectAtLeastOne"), null, 'errors');
494 $error++;
495 }
496 }
497}
498
499
500/*
501 *ZIP creation
502 */
503
504$dirfortmpfile = (!empty($conf->accounting->dir_temp) ? $conf->accounting->dir_temp : $conf->comptabilite->dir_temp);
505if (empty($dirfortmpfile)) {
506 setEventMessages($langs->trans("ErrorNoAccountingModuleEnabled"), null, 'errors');
507 $error++;
508}
509
510
511if ($result && $action == "dl" && !$error) {
512 if (!extension_loaded('zip')) {
513 setEventMessages('PHPZIPExtentionNotLoaded', null, 'errors');
514 } else {
515 dol_mkdir($dirfortmpfile);
516
517 $log = $langs->transnoentitiesnoconv("Type");
518 if (isModEnabled('multicompany') && is_object($mc)) {
519 $log .= ','.$langs->transnoentitiesnoconv("Entity");
520 }
521 $log .= ','.$langs->transnoentitiesnoconv("Date");
522 $log .= ','.$langs->transnoentitiesnoconv("DateDue");
523 $log .= ','.$langs->transnoentitiesnoconv("Ref");
524 $log .= ','.$langs->transnoentitiesnoconv("TotalHT");
525 $log .= ','.$langs->transnoentitiesnoconv("TotalTTC");
526 $log .= ','.$langs->transnoentitiesnoconv("TotalVAT");
527 $log .= ','.$langs->transcountrynoentities("TotalLT1", $mysoc->country_code);
528 $log .= ','.$langs->transcountrynoentities("TotalLT2", $mysoc->country_code);
529 $log .= ','.$langs->transnoentitiesnoconv("RevenueStamp");
530 $log .= ','.$langs->transnoentitiesnoconv("Paid");
531 $log .= ','.$langs->transnoentitiesnoconv("Document");
532 $log .= ','.$langs->transnoentitiesnoconv("ItemID");
533 $log .= ','.$langs->transnoentitiesnoconv("ThirdParty");
534 $log .= ','.$langs->transnoentitiesnoconv("Code");
535 $log .= ','.$langs->transnoentitiesnoconv("Country");
536 $log .= ','.$langs->transnoentitiesnoconv("VATIntra");
537 $log .= ','.$langs->transnoentitiesnoconv("Sens")."\n";
538 $zipname = $dirfortmpfile.'/'.dol_print_date($date_start, 'dayrfc', 'tzuserrel')."-".dol_print_date($date_stop, 'dayrfc', 'tzuserrel');
539 if (!empty($projectid)) {
540 $project = new Project($db);
541 $project->fetch($projectid);
542 if ($project->ref) {
543 $zipname .= '_'.$project->ref;
544 }
545 }
546 $zipname .= '_export.zip';
547
548 dol_delete_file($zipname);
549
550 $zip = new ZipArchive();
551 $res = $zip->open($zipname, ZipArchive::OVERWRITE | ZipArchive::CREATE);
552 if ($res) {
553 foreach ($filesarray as $key => $file) {
554 if (!empty($file['files'])) {
555 foreach ($file['files'] as $filecursor) {
556 if (file_exists($filecursor["fullname"])) {
557 $zip->addFile($filecursor["fullname"], $filecursor["relpathnamelang"]);
558 }
559 }
560 }
561
562 $log .= '"'.$langs->transnoentitiesnoconv($file['item']).'"';
563 if (isModEnabled('multicompany') && is_object($mc)) {
564 $log .= ',"'.(empty($arrayofentities[$file['entity']]) ? $file['entity'] : $arrayofentities[$file['entity']]).'"';
565 }
566 $log .= ','.dol_print_date($file['date'], 'dayrfc');
567 $log .= ','.dol_print_date($file['date_due'], 'dayrfc');
568 $log .= ',"'.$file['ref'].'"';
569 $log .= ','.$file['amount_ht'];
570 $log .= ','.$file['amount_ttc'];
571 $log .= ','.$file['amount_vat'];
572 $log .= ','.$file['amount_localtax1'];
573 $log .= ','.$file['amount_localtax2'];
574 $log .= ','.$file['amount_revenuestamp'];
575 $log .= ','.$file['paid'];
576 $log .= ',"'.$file["name"].'"';
577 $log .= ','.$file['fk'];
578 $log .= ',"'.$file['thirdparty_name'].'"';
579 $log .= ',"'.$file['thirdparty_code'].'"';
580 $log .= ',"'.$file['country_code'].'"';
581 $log .= ',"'.$file['vatnum'].'"';
582 $log .= ',"'.$file['sens'].'"';
583 $log .= "\n";
584 }
585 $zip->addFromString('transactions.csv', $log);
586 $zip->close();
587
588 // Then download the zipped file.
589 header('Content-Type: application/zip');
590 header('Content-disposition: attachment; filename='.basename($zipname));
591 header('Content-Length: '.filesize($zipname));
592 readfile($zipname);
593
594 dol_delete_file($zipname);
595
596 exit();
597 } else {
598 setEventMessages($langs->trans("FailedToOpenFile", $zipname), null, 'errors');
599 }
600 }
601}
602
603
604/*
605 * View
606 */
607
608$form = new Form($db);
609$formfile = new FormFile($db);
610$userstatic = new User($db);
611$invoice = new Facture($db);
612$supplier_invoice = new FactureFournisseur($db);
613$expensereport = new ExpenseReport($db);
614$don = new Don($db);
615$salary_payment = new PaymentSalary($db);
616$charge_sociales = new ChargeSociales($db);
617$various_payment = new PaymentVarious($db);
618$payment_loan = new PaymentLoan($db);
619
620$title = $langs->trans("ComptaFiles").' - '.$langs->trans("List");
621$help_url = '';
622
623llxHeader('', $title, $help_url);
624
625$h = 0;
626$head = array();
627$head[$h][0] = $_SERVER["PHP_SELF"];
628$head[$h][1] = $langs->trans("AccountantFiles");
629$head[$h][2] = 'AccountancyFiles';
630
631print dol_get_fiche_head($head, 'AccountancyFiles');
632
633
634print '<form name="searchfiles" action="?action=searchfiles" method="POST">'."\n";
635print '<input type="hidden" name="token" value="'.newToken().'">';
636
637print '<span class="opacitymedium">'.$langs->trans("ExportAccountingSourceDocHelp");
638if (isModEnabled('accounting')) {
639 print ' '.$langs->trans("ExportAccountingSourceDocHelp2", $langs->transnoentitiesnoconv("Accounting"), $langs->transnoentitiesnoconv("Journals"));
640}
641print '</span><br>';
642print '<br>';
643
644print $langs->trans("ReportPeriod").': ';
645print $form->selectDate($date_start, 'date_start', 0, 0, 0, "", 1, 1, 0, '', '', '', '', 1, '', '', 'tzuserrel');
646print ' - ';
647print $form->selectDate($date_stop, 'date_stop', 0, 0, 0, "", 1, 1, 0, '', '', '', '', 1, '', '', 'tzuserrel');
648print "\n";
649
650// Export is for current company only
651$socid = 0;
652if (isModEnabled('multicompany') && is_object($mc)) {
653 $mc->getInfo($conf->entity);
654 print ' &nbsp; <span class="marginleftonly marginrightonly'.(!getDolGlobalString('MULTICOMPANY_ALLOW_EXPORT_ACCOUNTING_DOC_FOR_ALL_ENTITIES') ? ' opacitymedium' : '').'">'.$langs->trans("Entity").' : ';
655 if (getDolGlobalString('MULTICOMPANY_ALLOW_EXPORT_ACCOUNTING_DOC_FOR_ALL_ENTITIES')) {
656 $socid = $mc->id;
657 print $mc->select_entities(GETPOSTISSET('search_entity') ? GETPOSTINT('search_entity') : $mc->id, 'search_entity', '', false, false, false, false, true);
658 } else {
659 print $mc->label;
660 }
661 print "</span>\n";
662}
663
664print '<br>';
665
666// Project filter
667if (isModEnabled('project')) {
668 $formproject = new FormProjets($db);
669 $langs->load('projects');
670 print '<span class="marginrightonly">'.$langs->trans('Project').":</span>";
671 print img_picto('', 'project').$formproject->select_projects(($socid > 0 ? $socid : -1), $projectid, 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 1, 0, '');
672 print '<span class="classfortooltip" style="padding: 0px; padding: 0px; padding-right: 3px !important;" title="'.$langs->trans('ExportAccountingProjectHelp').'"><span class="fas fa-info-circle em088 opacityhigh" style=" vertical-align: middle; cursor: help"></span></span>';
673 print '<br>';
674}
675
676$i = 0;
677foreach ($listofchoices as $choice => $val) {
678 if (empty($val['enabled'])) {
679 continue; // list not qualified
680 }
681 $disabled = '';
682 if (empty($val['perms'])) {
683 $disabled = ' disabled';
684 }
685 $checked = (((!GETPOSTISSET('search') && $action != 'searchfiles') || GETPOST($choice)) ? ' checked="checked"' : '');
686 print '<div class="inline-block marginrightonlylarge paddingright margintoponly"><input type="checkbox" id="'.$choice.'" name="'.$choice.'" value="1"'.$checked.$disabled.'><label for="'.$choice.'"> ';
687 print img_picto($langs->trans($val['label']), $val['picto'], 'class=""').' '.$langs->trans($val['label']);
688 print '</label></div>';
689 $i++;
690}
691
692print '<input type="submit" class="button small" name="search" value="'.$langs->trans("Search").'">';
693
694print '</form>'."\n";
695
696print dol_get_fiche_end();
697
698$param = '';
699if (!empty($date_start) && !empty($date_stop)) {
700 $param .= '&date_startday='.GETPOSTINT('date_startday');
701 $param .= '&date_startmonth='.GETPOSTINT('date_startmonth');
702 $param .= '&date_startyear='.GETPOSTINT('date_startyear');
703 $param .= '&date_stopday='.GETPOSTINT('date_stopday');
704 $param .= '&date_stopmonth='.GETPOSTINT('date_stopmonth');
705 $param .= '&date_stopyear='.GETPOSTINT('date_stopyear');
706 foreach ($listofchoices as $choice => $val) {
707 if (GETPOSTINT($choice)) {
708 $param .= '&'.$choice.'=1';
709 }
710 }
711
712 $TData = dol_sort_array($filesarray, $sortfield, $sortorder);
713 '@phan-var-force array<string,array{id:string,entity:string,date:string,date_due:string,paid:float|int,amount_ht:float|int,amount_ttc:float|int,amount_vat:float|int,amount_localtax1:float|int,amount_localtax2:float|int,amount_revenuestamp:float|int,ref:string,fk:string,item:string,thirdparty_name:string,thirdparty_code:string,country_code:string,vatnum:string,sens:string,currency:string,line?:string,name?:string,files?:mixed}> $TData';
714
715
716 $filename = dol_print_date($date_start, 'dayrfc', 'tzuserrel')."-".dol_print_date($date_stop, 'dayrfc', 'tzuserrel').'_export.zip';
717
718 echo dol_print_date($date_start, 'day', 'tzuserrel')." - ".dol_print_date($date_stop, 'day', 'tzuserrel');
719
720 print '<a class="marginleftonly small'.(empty($TData) ? ' butActionRefused' : ' butAction').'" href="'.$_SERVER["PHP_SELF"].'?action=dl&token='.currentToken().'&projectid='.((int) $projectid).'&output=file&file='.urlencode($filename).$param.'"';
721 if (empty($TData)) {
722 print " disabled";
723 }
724 print '>'."\n";
725 print $langs->trans("Download");
726 print '</a><br>';
727
728 $param .= '&action=searchfiles';
729
730 /*
731 print '<input type="hidden" name="token" value="'.currentToken().'">';
732 print '<input type="hidden" name="date_startday" value="'.GETPOST('date_startday', 'int').'" />';
733 print '<input type="hidden" name="date_startmonth" value="'.GETPOST('date_startmonth', 'int').'" />';
734 print '<input type="hidden" name="date_startyear" value="'.GETPOST('date_startyear', 'int').'" />';
735 print '<input type="hidden" name="date_stopday" value="'.GETPOST('date_stopday', 'int').'" />';
736 print '<input type="hidden" name="date_stopmonth" value="'.GETPOST('date_stopmonth', 'int').'" />';
737 print '<input type="hidden" name="date_stopyear" value="'.GETPOST('date_stopyear', 'int').'" />';
738 foreach ($listofchoices as $choice => $val) {
739 print '<input type="hidden" name="'.$choice.'" value="'.GETPOST($choice).'">';
740 }
741
742 print '<input class="butAction butDownload small marginleftonly" type="submit" value="'.$langs->trans("Download").'"';
743 if (empty($TData)) {
744 print " disabled";
745 }
746 print '/>';
747 print '</form>'."\n";
748 */
749
750 print '<br>';
751
752 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
753 print '<table class="noborder centpercent">';
754 print '<tr class="liste_titre">';
755 print_liste_field_titre($arrayfields['type']['label'], $_SERVER["PHP_SELF"], "item", "", $param, '', $sortfield, $sortorder, 'nowrap ');
756 print_liste_field_titre($arrayfields['date']['label'], $_SERVER["PHP_SELF"], "date", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
757 print_liste_field_titre($arrayfields['date_due']['label'], $_SERVER["PHP_SELF"], "date_due", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
758 print_liste_field_titre($arrayfields['ref']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'nowraponall ');
759 print '<th>'.$langs->trans("Document").'</th>';
760 print '<th>'.$langs->trans("Paid").'</th>';
761 print '<th class="right">'.$langs->trans("TotalHT").(isModEnabled('multicurrency') ? ' ('.$langs->getCurrencySymbol($conf->currency).')' : '').'</th>';
762 print '<th class="right">'.$langs->trans("TotalTTC").(isModEnabled('multicurrency') ? ' ('.$langs->getCurrencySymbol($conf->currency).')' : '').'</th>';
763 print '<th class="right">'.$langs->trans("TotalVAT").(isModEnabled('multicurrency') ? ' ('.$langs->getCurrencySymbol($conf->currency).')' : '').'</th>';
764
765 print '<th>'.$langs->trans("ThirdParty").'</th>';
766 print '<th class="center">'.$langs->trans("Code").'</th>';
767 print '<th class="center">'.$langs->trans("Country").'</th>';
768 print '<th class="center">'.$langs->trans("VATIntra").'</th>';
769 if (isModEnabled('multicurrency')) {
770 print '<th class="center">'.$langs->trans("Currency").'</th>';
771 }
772 print '</tr>';
773
774 if (empty($TData)) {
775 print '<tr class="oddeven"><td colspan="13"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td>';
776 if (isModEnabled('multicurrency')) {
777 print '<td></td>';
778 }
779 print '</tr>';
780 } else {
781 // Sort array by date ASC to calculate balance
782
783 $totalET_debit = 0;
784 $totalIT_debit = 0;
785 $totalVAT_debit = 0;
786 $totalET_credit = 0;
787 $totalIT_credit = 0;
788 $totalVAT_credit = 0;
789
790 // Display array
791 foreach ($TData as $data) {
792 $html_class = '';
793 //if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture'];
794 //elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement'];
795 print '<tr class="oddeven '.$html_class.'">';
796
797 // Type
798 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($langs->trans($data['item'])).'">'.$langs->trans($data['item']).'</td>';
799
800 // Date
801 print '<td class="center">';
802 print dol_print_date($data['date'], 'day');
803 print "</td>\n";
804
805 // Date due
806 print '<td class="center">';
807 print dol_print_date($data['date_due'], 'day');
808 print "</td>\n";
809
810 // Ref
811 print '<td class="nowraponall tdoverflowmax150">';
812
813 if ($data['item'] == 'Invoice') {
814 $invoice->id = $data['id'];
815 $invoice->ref = $data['ref'];
816 $invoice->total_ht = $data['amount_ht'];
817 $invoice->total_ttc = $data['amount_ttc'];
818 $invoice->total_tva = $data['amount_vat'];
819 $invoice->total_localtax1 = $data['amount_localtax1'];
820 $invoice->total_localtax2 = $data['amount_localtax2'];
821 $invoice->revenuestamp = $data['amount_revenuestamp'];
822 $invoice->multicurrency_code = $data['currency'];
823 print $invoice->getNomUrl(1, '', 0, 0, '', 0, 0, 0);
824 } elseif ($data['item'] == 'SupplierInvoice') {
825 $supplier_invoice->id = $data['id'];
826 $supplier_invoice->ref = $data['ref'];
827 $supplier_invoice->total_ht = $data['amount_ht'];
828 $supplier_invoice->total_ttc = $data['amount_ttc'];
829 $supplier_invoice->total_tva = $data['amount_vat'];
830 $supplier_invoice->total_localtax1 = $data['amount_localtax1'];
831 $supplier_invoice->total_localtax2 = $data['amount_localtax2'];
832 $supplier_invoice->revenuestamp = $data['amount_revenuestamp'];
833 $supplier_invoice->multicurrency_code = $data['currency'];
834 print $supplier_invoice->getNomUrl(1, '', 0, 0, '', 0, 0, 0);
835 } elseif ($data['item'] == 'ExpenseReport') {
836 $expensereport->id = $data['id'];
837 $expensereport->ref = $data['ref'];
838 print $expensereport->getNomUrl(1, 0, 0, '', 0, 0);
839 } elseif ($data['item'] == 'SalaryPayment') {
840 $salary_payment->id = $data['id'];
841 $salary_payment->ref = $data['ref'];
842 print $salary_payment->getNomUrl(1);
843 } elseif ($data['item'] == 'Donation') {
844 $don->id = $data['id'];
845 $don->ref = $data['ref'];
846 print $don->getNomUrl(1, 0, '', 0);
847 } elseif ($data['item'] == 'SocialContributions') {
848 $charge_sociales->id = $data['id'];
849 $charge_sociales->ref = $data['ref'];
850 print $charge_sociales->getNomUrl(1, 0, 0, 0, 0);
851 } elseif ($data['item'] == 'VariousPayment') {
852 $various_payment->id = $data['id'];
853 $various_payment->ref = $data['ref'];
854 print $various_payment->getNomUrl(1, '', 0, 0);
855 } elseif ($data['item'] == 'LoanPayment') {
856 $payment_loan->id = $data['id'];
857 $payment_loan->ref = $data['ref'];
858 print $payment_loan->getNomUrl(1, 0, 0, '', 0);
859 } else {
860 print $data['ref'];
861 }
862 print '</td>';
863
864 // File link
865 print '<td class="tdoverflowmax150">';
866 if (!empty($data['files'])) {
867 foreach ($data['files'] as $id => $filecursor) {
868 $tmppreview = $formfile->showPreview($filecursor, $filecursor['modulepart'], $filecursor['subdir'].'/'.$filecursor['name'], 0);
869 if ($tmppreview) {
870 print $tmppreview;
871 }
872 $filename = ($filecursor['name'] ? $filecursor['name'] : $filecursor['ref']);
873 print '<a href='.DOL_URL_ROOT.'/'.$filecursor['link'].' target="_blank" rel="noopener noreferrer" title="'.dol_escape_htmltag($filename).'">';
874 if (empty($tmppreview)) {
875 print img_picto('', 'generic', '', false, 0, 0, '', 'pictonopreview pictofixedwidth paddingright');
876 }
877 print $filename;
878 print '</a><br>';
879 }
880 }
881 print "</td>\n";
882
883 // Paid
884 print '<td class="center">'.($data['paid'] ? yn($data['paid']) : '').'</td>';
885
886 // Total WOT
887 print '<td class="right"><span class="amount">'.price(price2num($data['sens'] ? $data['amount_ht'] : -$data['amount_ht'], 'MT'))."</span></td>\n";
888 // Total INCT
889 print '<td class="right"><span class="amount">';
890 $tooltip = $langs->trans("TotalVAT").' : '.price(price2num($data['sens'] ? $data['amount_vat'] : -$data['amount_vat'], 'MT'));
891 if (!empty($data['amount_localtax1'])) {
892 $tooltip .= '<br>'.$langs->transcountrynoentities("TotalLT1", $mysoc->country_code).' : '.price(price2num($data['sens'] ? $data['amount_localtax1'] : -$data['amount_localtax1'], 'MT'));
893 }
894 if (!empty($data['amount_localtax2'])) {
895 $tooltip .= '<br>'.$langs->transcountrynoentities("TotalLT2", $mysoc->country_code).' : '.price(price2num($data['sens'] ? $data['amount_localtax2'] : -$data['amount_localtax2'], 'MT'));
896 }
897 if (!empty($data['amount_revenuestamp'])) {
898 $tooltip .= '<br>'.$langs->trans("RevenueStamp").' : '.price(price2num($data['sens'] ? $data['amount_revenuestamp'] : -$data['amount_revenuestamp'], 'MT'));
899 }
900 print '<span class="classfortooltip" title="'.dol_escape_htmltag($tooltip).'">'.price(price2num($data['sens'] ? $data['amount_ttc'] : -$data['amount_ttc'], 'MT')).'</span>';
901 print "</span></td>\n";
902 // Total VAT
903 print '<td class="right"><span class="amount">'.price(price2num($data['sens'] ? $data['amount_vat'] : -$data['amount_vat'], 'MT'))."</span></td>\n";
904
905 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($data['thirdparty_name']).'">'.dol_escape_htmltag($data['thirdparty_name'])."</td>\n";
906
907 print '<td class="center">'.$data['thirdparty_code']."</td>\n";
908
909 print '<td class="center">'.$data['country_code']."</td>\n";
910
911 // VAT number
912 print '<td class="tdoverflowmax150 right" title="'.dol_escape_htmltag($data['vatnum']).'">'.dol_escape_htmltag($data['vatnum'])."</td>\n";
913
914 if ($data['sens']) {
915 $totalET_credit += $data['amount_ht'];
916 $totalIT_credit += $data['amount_ttc'];
917 $totalVAT_credit += $data['amount_vat'];
918 } else {
919 $totalET_debit -= $data['amount_ht'];
920 $totalIT_debit -= $data['amount_ttc'];
921 $totalVAT_debit -= $data['amount_vat'];
922 }
923
924 if (isModEnabled('multicurrency')) {
925 print '<td class="center">'.$data['currency']."</td>\n";
926 }
927
928 print "</tr>\n";
929 }
930
931 // Total credits
932 print '<tr class="liste_total">';
933 print '<td colspan="6" class="right">'.$langs->trans('Total').' '.$langs->trans('Income').'</td>';
934 print '<td class="right">'.price(price2num($totalET_credit, 'MT')).'</td>';
935 print '<td class="right">'.price(price2num($totalIT_credit, 'MT')).'</td>';
936 print '<td class="right">'.price(price2num($totalVAT_credit, 'MT')).'</td>';
937 print '<td colspan="4"></td>';
938 if (isModEnabled('multicurrency')) {
939 print '<td></td>';
940 }
941 print "</tr>\n";
942 // Total debits
943 print '<tr class="liste_total">';
944 print '<td colspan="6" class="right">'.$langs->trans('Total').' '.$langs->trans('Outcome').'</td>';
945 print '<td class="right">'.price(price2num($totalET_debit, 'MT')).'</td>';
946 print '<td class="right">'.price(price2num($totalIT_debit, 'MT')).'</td>';
947 print '<td class="right">'.price(price2num($totalVAT_debit, 'MT')).'</td>';
948 print '<td colspan="4"></td>';
949 if (isModEnabled('multicurrency')) {
950 print '<td></td>';
951 }
952 print "</tr>\n";
953 // Balance
954 print '<tr class="liste_total">';
955 print '<td colspan="6" class="right">'.$langs->trans('Total').'</td>';
956 print '<td class="right">'.price(price2num($totalET_credit + $totalET_debit, 'MT')).'</td>';
957 print '<td class="right">'.price(price2num($totalIT_credit + $totalIT_debit, 'MT')).'</td>';
958 print '<td class="right">'.price(price2num($totalVAT_credit + $totalVAT_debit, 'MT')).'</td>';
959 print '<td colspan="4"></td>';
960 if (isModEnabled('multicurrency')) {
961 print '<td></td>';
962 }
963 print "</tr>\n";
964 }
965
966 print "</table>";
967 print '</div>';
968}
969
970
971llxFooter();
972$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:55
llxFooter()
Empty footer.
Definition wrapper.php:69
Class for managing the social charges.
Class to manage donations.
Definition don.class.php:41
Class to manage Trips and Expenses.
const STATUS_DRAFT
Draft status.
Class to manage suppliers invoices.
Class to manage invoices.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage building of HTML components.
Class to manage payments of loans.
Class to manage payments of salaries.
Class to manage various payments.
Class to manage projects.
Class to manage Dolibarr users.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_dir_list($utf8_path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
Definition files.lib.php:63
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...
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
currentToken()
Return the value of token currently saved into session with name 'token'.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
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.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
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.