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