dolibarr  x.y.z
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 ($object->date_trans <> 0) {
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 ($object->date_credit <> 0) {
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($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  print '<td>';
143  if ($acc->id > 0) {
144  print $acc->getNomUrl(1);
145  }
146  print '</td>';
147  print '</tr>';
148 
149  print '<tr><td class="titlefieldcreate">';
150  $labelfororderfield = 'WithdrawalFile';
151  if ($object->type == 'bank-transfer') {
152  $labelfororderfield = 'CreditTransferFile';
153  }
154  print $langs->trans($labelfororderfield).'</td><td>';
155  $relativepath = 'receipts/'.$object->ref.'.xml';
156  $modulepart = 'prelevement';
157  if ($object->type == 'bank-transfer') {
158  $modulepart = 'paymentbybanktransfer';
159  }
160  print '<a data-ajax="false" href="'.DOL_URL_ROOT.'/document.php?type=text/plain&amp;modulepart='.$modulepart.'&amp;file='.urlencode($relativepath).'">'.$relativepath;
161  print img_picto('', 'download', 'class="paddingleft"');
162  print '</a>';
163  print '</td></tr></table>';
164 
165  print '</div>';
166 
167  print dol_get_fiche_end();
168  } else {
169  dol_print_error($db);
170  }
171 }
172 
173 
174 // List of invoices
175 $sql = "SELECT pf.rowid, p.type,";
176 $sql .= " f.rowid as facid, f.ref as ref, f.total_ttc,";
177 $sql .= " s.rowid as socid, s.nom as name, pl.statut, pl.amount as amount_requested";
178 $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p";
179 $sql .= ", ".MAIN_DB_PREFIX."prelevement_lignes as pl";
180 $sql .= ", ".MAIN_DB_PREFIX."prelevement as pf";
181 if ($object->type != 'bank-transfer') {
182  $sql .= ", ".MAIN_DB_PREFIX."facture as f";
183 } else {
184  $sql .= ", ".MAIN_DB_PREFIX."facture_fourn as f";
185 }
186 $sql .= ", ".MAIN_DB_PREFIX."societe as s";
187 $sql .= " WHERE pf.fk_prelevement_lignes = pl.rowid";
188 $sql .= " AND pl.fk_prelevement_bons = p.rowid";
189 $sql .= " AND f.fk_soc = s.rowid";
190 if ($object->type != 'bank-transfer') {
191  $sql .= " AND pf.fk_facture = f.rowid";
192 } else {
193  $sql .= " AND pf.fk_facture_fourn = f.rowid";
194 }
195 if ($object->type != 'bank-transfer') {
196  $sql .= " AND f.entity IN (".getEntity('invoice').")";
197 } else {
198  $sql .= " AND f.entity IN (".getEntity('supplier_invoice').")";
199 }
200 if ($object->id > 0) {
201  $sql .= " AND p.rowid = ".((int) $object->id);
202 }
203 if ($socid) {
204  $sql .= " AND s.rowid = ".((int) $socid);
205 }
206 $sql .= $db->order($sortfield, $sortorder);
207 
208 // Count total nb of records
209 $nbtotalofrecords = '';
210 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
211  $resql = $db->query($sql);
212  $nbtotalofrecords = $db->num_rows($resql);
213  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
214  $page = 0;
215  $offset = 0;
216  }
217 }
218 
219 $sql .= $db->plimit($limit + 1, $offset);
220 
221 $resql = $db->query($sql);
222 if ($resql) {
223  $num = $db->num_rows($resql);
224  $i = 0;
225 
226  if ($limit > 0 && $limit != $conf->liste_limit) {
227  $param.='&limit='.urlencode($limit);
228  }
229  $param = "&id=".urlencode($id);
230 
231  // Lines of title fields
232  print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
233  if ($optioncss != '') {
234  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
235  }
236  print '<input type="hidden" name="token" value="'.newToken().'">';
237  print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
238  print '<input type="hidden" name="action" value="list">';
239  print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
240  print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
241  print '<input type="hidden" name="page" value="'.$page.'">';
242  print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
243  print '<input type="hidden" name="id" value="'.$id.'">';
244 
245  $massactionbutton = '';
246 
247  print_barre_liste($langs->trans("Invoices"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, '', '', $limit);
248 
249  print"\n<!-- debut table -->\n";
250  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
251  print '<table class="liste centpercent">';
252  print '<tr class="liste_titre">';
253  print_liste_field_titre("Bill", $_SERVER["PHP_SELF"], "p.ref", '', $param, '', $sortfield, $sortorder);
254  print_liste_field_titre("ThirdParty", $_SERVER["PHP_SELF"], "s.nom", '', $param, '', $sortfield, $sortorder);
255  print_liste_field_titre("AmountInvoice", $_SERVER["PHP_SELF"], "f.total_ttc", "", $param, 'class="right"', $sortfield, $sortorder);
256  print_liste_field_titre("AmountRequested", $_SERVER["PHP_SELF"], "pl.amount", "", $param, 'class="right"', $sortfield, $sortorder);
257  print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "", "", $param, 'align="center"', $sortfield, $sortorder);
259  print "</tr>\n";
260 
261  $totalinvoices = 0;
262  $totalamount_requested = 0;
263 
264  $invoicetmpcustomer = new Facture($db);
265  $invoicetmpsupplier = new FactureFournisseur($db);
266 
267  while ($i < min($num, $limit)) {
268  $obj = $db->fetch_object($resql);
269 
270  if ($obj->type == 'bank-transfer') {
271  $invoicetmp = $invoicetmpsupplier;
272  } else {
273  $invoicetmp = $invoicetmpcustomer;
274  }
275  $invoicetmp->fetch($obj->facid);
276 
277  $thirdpartytmp->fetch($obj->socid);
278 
279  print '<tr class="oddeven">';
280 
281  print "<td>";
282  print $invoicetmp->getNomUrl(1);
283  print "</td>\n";
284 
285  print '<td>';
286  print $thirdpartytmp->getNomUrl(1);
287  print "</td>\n";
288 
289  // Amount of invoice
290  print '<td class="right"><span class="amount">'.price($obj->total_ttc)."</span></td>\n";
291 
292  // Amount requested
293  print '<td class="right"><span class="amount">'.price($obj->amount_requested)."</span></td>\n";
294 
295  // Status of requests
296  print '<td class="center">';
297 
298  if ($obj->statut == 0) {
299  print '-';
300  } elseif ($obj->statut == 2) {
301  if ($obj->type == 'bank-transfer') {
302  print $langs->trans("StatusDebited");
303  } else {
304  print $langs->trans("StatusCredited");
305  }
306  } elseif ($obj->statut == 3) {
307  print '<b>'.$langs->trans("StatusRefused").'</b>';
308  }
309 
310  print "</td>";
311 
312  print "<td></td>";
313 
314  print "</tr>\n";
315 
316  $totalinvoices += $obj->total_ttc;
317  $totalamount_requested += $obj->amount_requested;
318 
319  $i++;
320  }
321 
322  if ($num > 0) {
323  print '<tr class="liste_total">';
324  print '<td>'.$langs->trans("Total").'</td>';
325  print '<td>&nbsp;</td>';
326  print '<td class="right">';
327  //if ($totalinvoices != $object->amount) print img_warning("AmountOfFileDiffersFromSumOfInvoices"); // It is normal to have total that differs. For an amount of invoice of 100, request to pay may be 50 only.
328  if ($totalamount_requested != $object->amount) {
329  print img_warning("AmountOfFileDiffersFromSumOfInvoices");
330  }
331  print "</td>\n";
332  print '<td class="right">';
333  print price($totalamount_requested);
334  print "</td>\n";
335  print '<td>&nbsp;</td>';
336  print '<td>&nbsp;</td>';
337  print "</tr>\n";
338  }
339 
340  print "</table>";
341  print '</div>';
342 
343  $db->free($result);
344 } else {
345  dol_print_error($db);
346 }
347 
348 // End of page
349 llxFooter();
350 $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:45
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.