dolibarr 19.0.3
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
29require '../../main.inc.php';
30require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
31require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
32require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
33require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
34require_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 = GETPOST('id', 'int');
42$socid = GETPOST('socid', 'int');
43
44$type = GETPOST('type', 'aZ09');
45
46$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
47$sortorder = GETPOST('sortorder', 'aZ09comma');
48$sortfield = GETPOST('sortfield', 'aZ09comma');
49$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
50if (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
58if ($sortorder == "") {
59 $sortorder = "DESC";
60}
61if ($sortfield == "") {
62 $sortfield = "pl.fk_soc";
63}
64
65
66if ($type == 'bank-transfer') {
67 $result = restrictedArea($user, 'paymentbybanktransfer', '', '', '');
68} else {
69 $result = restrictedArea($user, 'prelevement', '', '', 'bons');
70}
71
72if ($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
85if ($action == 'confirm_rejet' && $permissiontoadd) {
86 if (GETPOST("confirm") == 'yes') {
87 if (GETPOST('remonth', 'int')) {
88 $daterej = dol_mktime(0, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
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, GETPOST('motif', 'alpha'), $daterej, $lipre->bon_rowid, GETPOST('facturer', 'int'));
112
113 if ($result > 0) {
114 header("Location: line.php?id=".urlencode($id).'&type='.urlencode($type));
115 exit;
116 }
117 }
118 } else {
119 $action = "rejet";
120 }
121 } else {
122 header("Location: line.php?id=".urlencode($id).'&type='.urlencode($type));
123 exit;
124 }
125}
126
127
128/*
129 * View
130 */
131
132$form = new Form($db);
133
134if ($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");
143if ($type == 'bank-transfer') {
144 $title = $langs->trans("CreditTransferLine");
145}
146
147llxHeader('', $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
157if ($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 dont 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('', '', '', '', '', "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') ? GETPOST('motif', 'int') : '');
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') ? GETPOST('facturer', 'int') : '', 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($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
407llxFooter();
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...)
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...
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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
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).
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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.
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.
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.