dolibarr  20.0.0-beta
line.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2005-2012 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2010-2013 Juanjo Menent <jmenent@2byte.es>
6  * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
28 // Load Dolibarr environment
29 require '../../main.inc.php';
30 require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
31 require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
35 
36 // Load translation files required by the page
37 $langs->loadlangs(array('banks', 'categories', 'bills', 'companies', 'withdrawals'));
38 
39 // Get supervariables
40 $action = GETPOST('action', 'aZ09');
41 $id = GETPOSTINT('id');
42 $socid = GETPOSTINT('socid');
43 
44 $type = GETPOST('type', 'aZ09');
45 
46 $limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
47 $sortorder = GETPOST('sortorder', 'aZ09comma');
48 $sortfield = GETPOST('sortfield', 'aZ09comma');
49 $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
50 if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
51  // If $page is not defined, or '' or -1 or if we click on clear filters
52  $page = 0;
53 }
54 $offset = $limit * $page;
55 $pageprev = $page - 1;
56 $pagenext = $page + 1;
57 
58 if ($sortorder == "") {
59  $sortorder = "DESC";
60 }
61 if ($sortfield == "") {
62  $sortfield = "pl.fk_soc";
63 }
64 
65 
66 if ($type == 'bank-transfer') {
67  $result = restrictedArea($user, 'paymentbybanktransfer', '', '', '');
68 } else {
69  $result = restrictedArea($user, 'prelevement', '', '', 'bons');
70 }
71 
72 if ($type == 'bank-transfer') {
73  $permissiontoadd = $user->hasRight('paymentbybanktransfer', 'create');
74 } else {
75  $permissiontoadd = $user->hasRight('prelevement', 'bons', 'creer');
76 }
77 
78 $error = 0;
79 
80 
81 /*
82  * Actions
83  */
84 
85 if ($action == 'confirm_rejet' && $permissiontoadd) {
86  if (GETPOST("confirm") == 'yes') {
87  if (GETPOSTINT('remonth')) {
88  $daterej = dol_mktime(0, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear'));
89  }
90 
91  if (empty($daterej)) {
92  $error++;
93  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors');
94  } elseif ($daterej > dol_now()) {
95  $error++;
96  $langs->load("error");
97  setEventMessages($langs->transnoentities("ErrorDateMustBeBeforeToday"), null, 'errors');
98  }
99 
100  if (GETPOST('motif', 'alpha') == 0) {
101  $error++;
102  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("RefusedReason")), null, 'errors');
103  }
104 
105  if (!$error) {
106  $lipre = new LignePrelevement($db);
107 
108  if ($lipre->fetch($id) == 0) {
109  $rej = new RejetPrelevement($db, $user, $type);
110 
111  $result = $rej->create($user, $id, GETPOSTINT('motif'), $daterej, $lipre->bon_rowid, GETPOSTINT('facturer'));
112 
113  if ($result > 0) {
114  header("Location: line.php?id=".urlencode((string) ($id)).'&type='.urlencode((string) ($type)));
115  exit;
116  }
117  }
118  } else {
119  $action = "rejet";
120  }
121  } else {
122  header("Location: line.php?id=".urlencode((string) ($id)).'&type='.urlencode((string) ($type)));
123  exit;
124  }
125 }
126 
127 
128 /*
129  * View
130  */
131 
132 $form = new Form($db);
133 
134 if ($type == 'bank-transfer') {
135  require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
136  $invoicestatic = new FactureFournisseur($db);
137 } else {
138  require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
139  $invoicestatic = new Facture($db);
140 }
141 
142 $title = $langs->trans("WithdrawalsLine");
143 if ($type == 'bank-transfer') {
144  $title = $langs->trans("CreditTransferLine");
145 }
146 
147 llxHeader('', $title);
148 
149 $head = array();
150 
151 $h = 0;
152 $head[$h][0] = DOL_URL_ROOT.'/compta/prelevement/line.php?id='.((int) $id).'&type='.urlencode($type);
153 $head[$h][1] = $title;
154 $hselected = $h;
155 $h++;
156 
157 if ($id) {
158  $lipre = new LignePrelevement($db);
159 
160  if ($lipre->fetch($id) >= 0) {
161  $bon = new BonPrelevement($db);
162  $bon->fetch($lipre->bon_rowid);
163 
164  print dol_get_fiche_head($head, $hselected, $title, -1, 'payment');
165 
166  print '<table class="border centpercent tableforfield">';
167 
168  print '<tr><td class="titlefield">'.$langs->trans("Ref").'</td><td>';
169  print $id.'</td></tr>';
170 
171  print '<tr><td class="titlefield">'.$langs->trans("WithdrawalsReceipts").'</td><td>';
172  print $bon->getNomUrl(1).'</td></tr>';
173 
174  print '<tr><td>'.$langs->trans("Date").'</td><td>'.dol_print_date($bon->datec, 'day').'</td></tr>';
175 
176  print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($lipre->amount).'</span></td></tr>';
177 
178  print '<tr><td>'.$langs->trans("Status").'</td><td>'.$lipre->LibStatut($lipre->statut, 1).'</td></tr>';
179 
180  if ($lipre->statut == 3) {
181  $rej = new RejetPrelevement($db, $user, $type);
182  $resf = $rej->fetch($lipre->id);
183  if ($resf == 0) {
184  print '<tr><td>'.$langs->trans("RefusedReason").'</td><td>'.$rej->motif.'</td></tr>';
185 
186  print '<tr><td>'.$langs->trans("RefusedData").'</td><td>';
187  if ($rej->date_rejet == 0) {
188  /* Historique pour certaines install */
189  print $langs->trans("Unknown");
190  } else {
191  print dol_print_date($rej->date_rejet, 'day');
192  }
193  print '</td></tr>';
194 
195  print '<tr><td>'.$langs->trans("RefusedInvoicing").'</td><td>'.$rej->invoicing.'</td></tr>';
196  } else {
197  print '<tr><td>'.$resf.'</td></tr>';
198  }
199  }
200 
201  print '</table>';
202  print dol_get_fiche_end();
203  } else {
204  dol_print_error($db);
205  }
206 
207  // Form to record a reject
208  if ($action == 'rejet' && $user->hasRight('prelevement', 'bons', 'credit')) {
209  $soc = new Societe($db);
210  $soc->fetch($lipre->socid);
211 
212  $rej = new RejetPrelevement($db, $user, $type);
213 
214  print '<form name="confirm_rejet" method="post" action="'.DOL_URL_ROOT.'/compta/prelevement/line.php?id='.$id.'">';
215  print '<input type="hidden" name="token" value="'.newToken().'">';
216  print '<input type="hidden" name="action" value="confirm_rejet">';
217  print '<input type="hidden" name="type" value="'.$type.'">';
218 
219  print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
220  print '<table class="noborder centpercent">';
221 
222  print '<tr class="liste_titre">';
223  print '<td>'.$langs->trans("WithdrawalRefused").'</td>';
224  print '<td></td>';
225  print '</tr>';
226 
227  //Select yes/no
228  print '<tr><td class="valid">'.$langs->trans("WithdrawalRefusedConfirm").' '.$soc->name.' ?</td>';
229  print '<td class="valid">';
230  print $form->selectyesno("confirm", 1, 0);
231  print '</td></tr>';
232 
233  //Date
234  print '<tr><td class="fieldrequired valid">'.$langs->trans("RefusedData").'</td>';
235  print '<td class="valid">';
236  print $form->selectDate('', '', 0, 0, 0, "confirm_rejet");
237  print '</td></tr>';
238 
239  //Reason
240  print '<tr><td class="fieldrequired valid">'.$langs->trans("RefusedReason").'</td>';
241  print '<td class="valid">';
242  print $form->selectarray("motif", $rej->motifs, GETPOSTISSET('motif') ? GETPOSTINT('motif') : '');
243  print '</td></tr>';
244 
245  //Facturer
246  print '<tr><td class="fieldrequired valid">';
247  print $form->textwithpicto($langs->trans("RefusedInvoicing"), $langs->trans("DirectDebitRefusedInvoicingDesc"));
248  print '</td>';
249  print '<td class="valid">';
250  print $form->selectarray("facturer", $rej->labelsofinvoicing, GETPOSTISSET('facturer') ? GETPOSTINT('facturer') : '', 0);
251  print '</td></tr>';
252 
253  print '</table>';
254  print '</div>';
255 
256  //Confirm Button
257  print '<div class="center"><input type="submit" class="button button-save" value='.$langs->trans("Confirm").'></div>';
258  print '</form>';
259  }
260 
261  /*
262  * Action bar
263  */
264  print '<div class="tabsAction">';
265 
266  if ($action == '') {
267  if ($bon->statut == BonPrelevement::STATUS_CREDITED) {
268  if ($lipre->statut == 2) {
269  if ($user->hasRight('prelevement', 'bons', 'credit')) {
270  print '<a class="butActionDelete" href="line.php?action=rejet&type='.$type.'&id='.$lipre->id.'">'.$langs->trans("StandingOrderReject").'</a>';
271  } else {
272  print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotAllowed").'">'.$langs->trans("StandingOrderReject").'</a>';
273  }
274  }
275  } else {
276  print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotPossibleForThisStatusOfWithdrawReceiptORLine").'">'.$langs->trans("StandingOrderReject").'</a>';
277  }
278  }
279 
280  print '</div>';
281 
282  /*
283  * List of invoices
284  */
285  $sql = "SELECT pf.rowid";
286  $sql .= " ,f.rowid as facid, f.ref as ref, f.total_ttc, f.paye, f.fk_statut";
287  $sql .= " , s.rowid as socid, s.nom as name";
288 
289  $sqlfields = $sql; // $sql fields to remove for count total
290 
291  $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_bons as p";
292  $sql .= " , ".MAIN_DB_PREFIX."prelevement_lignes as pl";
293  $sql .= " , ".MAIN_DB_PREFIX."prelevement as pf";
294  if ($type == 'bank-transfer') {
295  $sql .= " , ".MAIN_DB_PREFIX."facture_fourn as f";
296  } else {
297  $sql .= " , ".MAIN_DB_PREFIX."facture as f";
298  }
299  $sql .= " , ".MAIN_DB_PREFIX."societe as s";
300  $sql .= " WHERE pf.fk_prelevement_lignes = pl.rowid";
301  $sql .= " AND pl.fk_prelevement_bons = p.rowid";
302  $sql .= " AND f.fk_soc = s.rowid";
303  if ($type == 'bank-transfer') {
304  $sql .= " AND pf.fk_facture_fourn = f.rowid";
305  } else {
306  $sql .= " AND pf.fk_facture = f.rowid";
307  }
308  $sql .= " AND f.entity IN (".getEntity('invoice').")";
309  $sql .= " AND pl.rowid = ".((int) $id);
310  if ($socid) {
311  $sql .= " AND s.rowid = ".((int) $socid);
312  }
313 
314  // Count total nb of records
315  $nbtotalofrecords = '';
316  if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
317  /* The fast and low memory method to get and count full list converts the sql into a sql count */
318  $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
319  $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
320  $resql = $db->query($sqlforcount);
321  if ($resql) {
322  $objforcount = $db->fetch_object($resql);
323  $nbtotalofrecords = $objforcount->nbtotalofrecords;
324  } else {
325  dol_print_error($db);
326  }
327 
328  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
329  $page = 0;
330  $offset = 0;
331  }
332  $db->free($resql);
333  }
334 
335  $result = $db->query($sql);
336 
337  $sql .= $db->order($sortfield, $sortorder);
338  $sql .= $db->plimit($conf->liste_limit + 1, $offset);
339 
340  $result = $db->query($sql);
341 
342  if ($result) {
343  $num = $db->num_rows($result);
344  $i = 0;
345 
346  $urladd = "&id=".urlencode((string) ($id));
347  $title = $langs->trans("Bills");
348  if ($type == 'bank-transfer') {
349  $title = $langs->trans("SupplierInvoices");
350  }
351 
352  print_barre_liste($title, $page, "factures.php", $urladd, $sortfield, $sortorder, '', $num, $nbtotalofrecords, '');
353 
354  print"\n<!-- debut table -->\n";
355  print '<table class="noborder" width="100%" cellpadding="4">';
356  print '<tr class="liste_titre">';
357  print '<td>'.$langs->trans("Invoice").'</td>';
358  print '<td>'.$langs->trans("ThirdParty").'</td>';
359  print '<td class="right">'.$langs->trans("Amount").'</td><td class="right">'.$langs->trans("Status").'</td>';
360  print '</tr>';
361 
362  $total = 0;
363 
364  while ($i < min($num, $conf->liste_limit)) {
365  $obj = $db->fetch_object($result);
366 
367  print '<tr class="oddeven"><td>';
368 
369  print '<a href="'.DOL_URL_ROOT.'/compta/facture/card.php?facid='.$obj->facid.'">';
370  print img_object($langs->trans("ShowBill"), "bill");
371  print '</a>&nbsp;';
372 
373  if ($type == 'bank-transfer') {
374  print '<a href="'.DOL_URL_ROOT.'/fourn/facture/card.php?facid='.$obj->facid.'">'.$obj->ref."</a></td>\n";
375  } else {
376  print '<a href="'.DOL_URL_ROOT.'/compta/facture/card.php?facid='.$obj->facid.'">'.$obj->ref."</a></td>\n";
377  }
378 
379  if ($type == 'bank-transfer') {
380  print '<td><a href="'.DOL_URL_ROOT.'/fourn/card.php?socid='.$obj->socid.'">';
381  } else {
382  print '<td><a href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$obj->socid.'">';
383  }
384  print img_object($langs->trans("ShowCompany"), "company").' '.$obj->name."</a></td>\n";
385 
386  print '<td class="right"><span class="amount">'.price($obj->total_ttc)."</span></td>\n";
387 
388  print '<td class="right">';
389  $invoicestatic->fetch($obj->facid);
390  print $invoicestatic->getLibStatut(5);
391  print "</td>\n";
392 
393  print "</tr>\n";
394 
395  $i++;
396  }
397 
398  print "</table>";
399 
400  $db->free($result);
401  } else {
402  dol_print_error($db);
403  }
404 }
405 
406 // End of page
407 llxFooter();
408 $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 to manage withdrawal receipts.
Class to manage suppliers invoices.
Class to manage invoices.
Class to manage generation of HTML components Only common components must be here.
Class to manage withdrawals.
Class to manage standing orders rejects.
Class to manage third parties objects (customers, suppliers, prospects...)
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('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') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
Definition: index.php:745
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_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
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_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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).
print_barre_liste($title, $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.
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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
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.