dolibarr  17.0.4
factures.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2005-2017 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <https://www.gnu.org/licenses/>.
19  */
20 
27 // Load Dolibarr environment
28 require '../../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/lib/prelevement.lib.php';
30 require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
31 require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
34 
35 // Load translation files required by the page
36 $langs->loadLangs(array('banks', 'categories', 'bills', 'companies', 'withdrawals'));
37 
38 // Get supervariables
39 $id = GETPOST('id', 'int');
40 $ref = GETPOST('ref', 'alpha');
41 $socid = GETPOST('socid', 'int');
42 $type = GETPOST('type', 'aZ09');
43 
44 // Load variable for pagination
45 $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
46 $sortfield = GETPOST('sortfield', 'aZ09comma');
47 $sortorder = GETPOST('sortorder', 'aZ09comma');
48 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
49 if (empty($page) || $page == -1) {
50  $page = 0;
51 } // If $page is not defined, or '' or -1
52 $offset = $limit * $page;
53 $pageprev = $page - 1;
54 $pagenext = $page + 1;
55 if (!$sortfield) {
56  $sortfield = 'p.ref';
57 }
58 if (!$sortorder) {
59  $sortorder = 'DESC';
60 }
61 
62 $object = new BonPrelevement($db);
63 
64 // Load object
65 include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals
66 
67 $hookmanager->initHooks(array('directdebitprevcard', 'globalcard', 'directdebitprevlist'));
68 
69 // Security check
70 if ($user->socid > 0) {
72 }
73 
74 $type = $object->type;
75 if ($type == 'bank-transfer') {
76  $result = restrictedArea($user, 'paymentbybanktransfer', '', '', '');
77 } else {
78  $result = restrictedArea($user, 'prelevement', '', '', 'bons');
79 }
80 
81 
82 /*
83  * View
84  */
85 
86 $invoicetmp = new Facture($db);
87 $thirdpartytmp = new Societe($db);
88 
89 llxHeader('', $langs->trans("WithdrawalsReceipts"));
90 
91 if ($id > 0 || $ref) {
92  if ($object->fetch($id, $ref) >= 0) {
93  $head = prelevement_prepare_head($object);
94  print dol_get_fiche_head($head, 'invoices', $langs->trans("WithdrawalsReceipts"), -1, 'payment');
95 
96  $linkback = '<a href="'.DOL_URL_ROOT.'/compta/prelevement/orders_list.php?restore_lastsearch_values=1'.($object->type != 'bank-transfer' ? '' : '&type=bank-transfer').'">'.$langs->trans("BackToList").'</a>';
97 
98  dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref');
99 
100  print '<div class="fichecenter">';
101  print '<div class="underbanner clearboth"></div>';
102  print '<table class="border centpercent tableforfield">'."\n";
103 
104  //print '<tr><td class="titlefieldcreate">'.$langs->trans("Ref").'</td><td>'.$object->getNomUrl(1).'</td></tr>';
105  print '<tr><td class="titlefieldcreate">'.$langs->trans("Date").'</td><td>'.dol_print_date($object->datec, 'day').'</td></tr>';
106  print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount).'</span></td></tr>';
107 
108  if (!empty($object->date_trans)) {
109  $muser = new User($db);
110  $muser->fetch($object->user_trans);
111 
112  print '<tr><td>'.$langs->trans("TransData").'</td><td>';
113  print dol_print_date($object->date_trans, 'day');
114  print ' &nbsp; <span class="opacitymedium">'.$langs->trans("By").'</span> '.$muser->getNomUrl(-1).'</td></tr>';
115  print '<tr><td>'.$langs->trans("TransMetod").'</td><td>';
116  print $object->methodes_trans[$object->method_trans];
117  print '</td></tr>';
118  }
119  if (!empty($object->date_credit)) {
120  print '<tr><td>'.$langs->trans('CreditDate').'</td><td>';
121  print dol_print_date($object->date_credit, 'day');
122  print '</td></tr>';
123  }
124 
125  print '</table>';
126 
127  print '<br>';
128 
129  print '<div class="underbanner clearboth"></div>';
130  print '<table class="border centpercent tableforfield">';
131 
132  $acc = new Account($db);
133  $result = $acc->fetch(($object->type == 'bank-transfer' ? $conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT : $conf->global->PRELEVEMENT_ID_BANKACCOUNT));
134 
135  print '<tr><td class="titlefieldcreate">';
136  $labelofbankfield = "BankToReceiveWithdraw";
137  if ($object->type == 'bank-transfer') {
138  $labelofbankfield = 'BankToPayCreditTransfer';
139  }
140  print $langs->trans($labelofbankfield);
141  print '</td>';
142 
143  print '<td>';
144  if ($acc->id > 0) {
145  print $acc->getNomUrl(1);
146  }
147  print '</td>';
148  print '</tr>';
149 
150  print '<tr><td class="titlefieldcreate">';
151  $labelfororderfield = 'WithdrawalFile';
152  if ($object->type == 'bank-transfer') {
153  $labelfororderfield = 'CreditTransferFile';
154  }
155  print $langs->trans($labelfororderfield).'</td><td>';
156  $relativepath = 'receipts/'.$object->ref.'.xml';
157  $modulepart = 'prelevement';
158  if ($object->type == 'bank-transfer') {
159  $modulepart = 'paymentbybanktransfer';
160  }
161  print '<a data-ajax="false" href="'.DOL_URL_ROOT.'/document.php?type=text/plain&amp;modulepart='.$modulepart.'&amp;file='.urlencode($relativepath).'">'.$relativepath;
162  print img_picto('', 'download', 'class="paddingleft"');
163  print '</a>';
164  print '</td></tr></table>';
165 
166  print '</div>';
167 
168  print dol_get_fiche_end();
169  } else {
170  dol_print_error($db);
171  }
172 }
173 
174 
175 // List of invoices
176 $sql = "SELECT pf.rowid, p.type,";
177 $sql .= " f.rowid as facid, f.ref as ref, f.total_ttc,";
178 $sql .= " s.rowid as socid, s.nom as name, pl.statut, pl.amount as amount_requested";
179 $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p";
180 $sql .= ", ".MAIN_DB_PREFIX."prelevement_lignes as pl";
181 $sql .= ", ".MAIN_DB_PREFIX."prelevement as pf";
182 if ($object->type != 'bank-transfer') {
183  $sql .= ", ".MAIN_DB_PREFIX."facture as f";
184 } else {
185  $sql .= ", ".MAIN_DB_PREFIX."facture_fourn as f";
186 }
187 $sql .= ", ".MAIN_DB_PREFIX."societe as s";
188 $sql .= " WHERE pf.fk_prelevement_lignes = pl.rowid";
189 $sql .= " AND pl.fk_prelevement_bons = p.rowid";
190 $sql .= " AND f.fk_soc = s.rowid";
191 if ($object->type != 'bank-transfer') {
192  $sql .= " AND pf.fk_facture = f.rowid";
193 } else {
194  $sql .= " AND pf.fk_facture_fourn = f.rowid";
195 }
196 if ($object->type != 'bank-transfer') {
197  $sql .= " AND f.entity IN (".getEntity('invoice').")";
198 } else {
199  $sql .= " AND f.entity IN (".getEntity('supplier_invoice').")";
200 }
201 if ($object->id > 0) {
202  $sql .= " AND p.rowid = ".((int) $object->id);
203 }
204 if ($socid) {
205  $sql .= " AND s.rowid = ".((int) $socid);
206 }
207 $sql .= $db->order($sortfield, $sortorder);
208 
209 // Count total nb of records
210 $nbtotalofrecords = '';
211 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
212  $resql = $db->query($sql);
213  $nbtotalofrecords = $db->num_rows($resql);
214  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
215  $page = 0;
216  $offset = 0;
217  }
218 }
219 
220 $sql .= $db->plimit($limit + 1, $offset);
221 
222 $resql = $db->query($sql);
223 if ($resql) {
224  $num = $db->num_rows($resql);
225  $i = 0;
226 
227  if ($limit > 0 && $limit != $conf->liste_limit) {
228  $param.='&limit='.urlencode($limit);
229  }
230  $param = "&id=".urlencode($id);
231 
232  // Lines of title fields
233  print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
234  if ($optioncss != '') {
235  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
236  }
237  print '<input type="hidden" name="token" value="'.newToken().'">';
238  print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
239  print '<input type="hidden" name="action" value="list">';
240  print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
241  print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
242  print '<input type="hidden" name="page" value="'.$page.'">';
243  print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
244  print '<input type="hidden" name="id" value="'.$id.'">';
245 
246  $massactionbutton = '';
247 
248  print_barre_liste($langs->trans("Invoices"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, '', '', $limit);
249 
250  print"\n<!-- debut table -->\n";
251  print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
252  print '<table class="liste centpercent">';
253  print '<tr class="liste_titre">';
254  print_liste_field_titre("Bill", $_SERVER["PHP_SELF"], "p.ref", '', $param, '', $sortfield, $sortorder);
255  print_liste_field_titre("ThirdParty", $_SERVER["PHP_SELF"], "s.nom", '', $param, '', $sortfield, $sortorder);
256  print_liste_field_titre("AmountInvoice", $_SERVER["PHP_SELF"], "f.total_ttc", "", $param, 'class="right"', $sortfield, $sortorder);
257  print_liste_field_titre("AmountRequested", $_SERVER["PHP_SELF"], "pl.amount", "", $param, 'class="right"', $sortfield, $sortorder);
258  print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "", "", $param, 'align="center"', $sortfield, $sortorder);
260  print "</tr>\n";
261 
262  $totalinvoices = 0;
263  $totalamount_requested = 0;
264 
265  $invoicetmpcustomer = new Facture($db);
266  $invoicetmpsupplier = new FactureFournisseur($db);
267 
268  while ($i < min($num, $limit)) {
269  $obj = $db->fetch_object($resql);
270 
271  if ($obj->type == 'bank-transfer') {
272  $invoicetmp = $invoicetmpsupplier;
273  } else {
274  $invoicetmp = $invoicetmpcustomer;
275  }
276  $invoicetmp->fetch($obj->facid);
277 
278  $thirdpartytmp->fetch($obj->socid);
279 
280  print '<tr class="oddeven">';
281 
282  print "<td>";
283  print $invoicetmp->getNomUrl(1);
284  print "</td>\n";
285 
286  print '<td>';
287  print $thirdpartytmp->getNomUrl(1);
288  print "</td>\n";
289 
290  // Amount of invoice
291  print '<td class="right"><span class="amount">'.price($obj->total_ttc)."</span></td>\n";
292 
293  // Amount requested
294  print '<td class="right"><span class="amount">'.price($obj->amount_requested)."</span></td>\n";
295 
296  // Status of requests
297  print '<td class="center">';
298 
299  if ($obj->statut == 0) {
300  print '-';
301  } elseif ($obj->statut == 2) {
302  if ($obj->type == 'bank-transfer') {
303  print $langs->trans("StatusDebited");
304  } else {
305  print $langs->trans("StatusCredited");
306  }
307  } elseif ($obj->statut == 3) {
308  print '<b>'.$langs->trans("StatusRefused").'</b>';
309  }
310 
311  print "</td>";
312 
313  print "<td></td>";
314 
315  print "</tr>\n";
316 
317  $totalinvoices += $obj->total_ttc;
318  $totalamount_requested += $obj->amount_requested;
319 
320  $i++;
321  }
322 
323  if ($num > 0) {
324  print '<tr class="liste_total">';
325  print '<td>'.$langs->trans("Total").'</td>';
326  print '<td>&nbsp;</td>';
327  print '<td class="right">';
328  print "</td>\n";
329  print '<td class="right">';
330  // If the page show all record (no pagination) and total does not match total of file, we show a warning. Should not happen.
331  if (($nbtotalofrecords <= $num) && $totalamount_requested != $object->amount) {
332  print img_warning("AmountOfFileDiffersFromSumOfInvoices");
333  }
334  print price($totalamount_requested);
335  print "</td>\n";
336  print '<td>&nbsp;</td>';
337  print '<td>&nbsp;</td>';
338  print "</tr>\n";
339  }
340 
341  print "</table>";
342  print '</div>';
343 
344  $db->free($result);
345 } else {
346  dol_print_error($db);
347 }
348 
349 // End of page
350 llxFooter();
351 $db->close();
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage bank accounts.
Class to manage withdrawal receipts.
Class to manage suppliers invoices.
Class to manage invoices.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
Definition: user.class.php:47
if(isModEnabled('facture') &&!empty($user->rights->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') &&!empty($user->rights->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)) $resql
Social contributions to pay.
Definition: index.php:745
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
prelevement_prepare_head(BonPrelevement $object)
Prepare array with list of tabs.
$nbtotalofrecords
Count total nb of records.
Definition: list.php:329
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.