dolibarr  20.0.0-beta
line.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2003 Xavier DUTOIT <doli@sydesy.com>
4  * Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
5  * Copyright (C) 2004 Christophe Combelles <ccomb@free.fr>
6  * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
7  * Copyright (C) 2015-2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
8  * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
9  * Copyright (C) 2016 Marcos García <marcosgdf@gmail.com>
10  * Copyright (C) 2018-2024 Frédéric France <frederic.france@free.fr>
11  * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
12  * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation; either version 3 of the License, or
17  * (at your option) any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program. If not, see <https://www.gnu.org/licenses/>.
26  */
27 
34 // Load Dolibarr environment
35 require '../../main.inc.php';
36 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
37 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
38 require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
39 require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
40 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
41 
42 // Load translation files required by the page
43 $langs->loadLangs(array('banks', 'categories', 'compta', 'bills', 'other'));
44 if (isModEnabled('member')) {
45  $langs->load("members");
46 }
47 if (isModEnabled('don')) {
48  $langs->load("donations");
49 }
50 if (isModEnabled('loan')) {
51  $langs->load("loan");
52 }
53 if (isModEnabled('salaries')) {
54  $langs->load("salaries");
55 }
56 
57 
58 $id = GETPOSTINT('rowid');
59 $rowid = GETPOSTINT('rowid');
60 $accountoldid = GETPOSTINT('account'); // GETPOST('account') is old account id
61 $accountid = GETPOSTINT('accountid'); // GETPOST('accountid') is new account id
62 $ref = GETPOST('ref', 'alpha');
63 $action = GETPOST('action', 'aZ09');
64 $confirm = GETPOST('confirm', 'alpha');
65 $orig_account = GETPOST("orig_account");
66 $backtopage = GETPOST('backtopage', 'alpha');
67 $cancel = GETPOST('cancel', 'alpha');
68 
69 // Security check
70 $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
71 $fieldtype = (!empty($ref) ? 'ref' : 'rowid');
72 $socid = 0;
73 if ($user->socid) {
74  $socid = $user->socid;
75 }
76 
77 $result = restrictedArea($user, 'banque', $accountoldid, 'bank_account');
78 if (!$user->hasRight('banque', 'lire') && !$user->hasRight('banque', 'consolidate')) {
80 }
81 
82 $hookmanager->initHooks(array('bankline'));
83 $object = new AccountLine($db);
84 $extrafields = new ExtraFields($db);
85 $extrafields->fetch_name_optionals_label($object->element);
86 
87 /*
88  * Actions
89  */
90 
91 $parameters = array('socid' => $socid);
92 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
93 if ($reshook < 0) {
94  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
95 }
96 if ($cancel) {
97  if ($backtopage) {
98  header("Location: ".$backtopage);
99  exit;
100  }
101 }
102 
103 
104 if ($user->hasRight('banque', 'consolidate') && $action == 'donext') {
105  $al = new AccountLine($db);
106  $al->dateo_next(GETPOSTINT("rowid"));
107 } elseif ($user->hasRight('banque', 'consolidate') && $action == 'doprev') {
108  $al = new AccountLine($db);
109  $al->dateo_previous(GETPOSTINT("rowid"));
110 } elseif ($user->hasRight('banque', 'consolidate') && $action == 'dvnext') {
111  $al = new AccountLine($db);
112  $al->datev_next(GETPOSTINT("rowid"));
113 } elseif ($user->hasRight('banque', 'consolidate') && $action == 'dvprev') {
114  $al = new AccountLine($db);
115  $al->datev_previous(GETPOSTINT("rowid"));
116 }
117 
118 if ($action == 'confirm_delete_categ' && $confirm == "yes" && $user->hasRight('banque', 'modifier')) {
119  $cat1 = GETPOSTINT("cat1");
120  if (!empty($rowid) && !empty($cat1)) {
121  $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_class WHERE lineid = ".((int) $rowid)." AND fk_categ = ".((int) $cat1);
122  if (!$db->query($sql)) {
123  dol_print_error($db);
124  }
125  } else {
126  setEventMessages($langs->trans("MissingIds"), null, 'errors');
127  }
128 }
129 
130 if ($user->hasRight('banque', 'modifier') && $action == "update") {
131  $error = 0;
132 
133  $result = $object->fetch($rowid);
134  if ($result <= 0) {
135  dol_syslog('Failed to read bank line with id '.$rowid, LOG_WARNING); // This happens due to old bug that has set fk_account to null.
136  $object->id = $rowid;
137  }
138 
139  $acsource = new Account($db);
140  $acsource->fetch($accountoldid);
141 
142  $actarget = new Account($db);
143  if (GETPOSTINT('accountid') > 0 && !$object->rappro && !$object->getVentilExportCompta()) { // We ask to change bank account
144  $actarget->fetch(GETPOSTINT('accountid'));
145  } else {
146  $actarget->fetch($accountoldid);
147  }
148 
149  if (!($actarget->id > 0)) {
150  setEventMessages($langs->trans("ErrorFailedToLoadBankAccount"), null, 'errors');
151  $error++;
152  }
153  if ($actarget->type == Account::TYPE_CASH && GETPOST('value', 'alpha') != 'LIQ') {
154  setEventMessages($langs->trans("ErrorCashAccountAcceptsOnlyCashMoney"), null, 'errors');
155  $error++;
156  }
157 
158  if (!$error) {
159  $db->begin();
160 
161  $amount = price2num(GETPOST('amount'));
162  $dateop = dol_mktime(12, 0, 0, GETPOST("dateomonth"), GETPOST("dateoday"), GETPOST("dateoyear"));
163  $dateval = dol_mktime(12, 0, 0, GETPOST("datevmonth"), GETPOST("datevday"), GETPOST("datevyear"));
164  $sql = "UPDATE ".MAIN_DB_PREFIX."bank";
165  $sql .= " SET ";
166  // Always opened
167  if (GETPOSTISSET('value')) {
168  $sql .= " fk_type='".$db->escape(GETPOST('value'))."',";
169  }
170  if (GETPOSTISSET('num_chq')) {
171  $sql .= " num_chq='".$db->escape(GETPOST("num_chq"))."',";
172  }
173  if (GETPOSTISSET('banque')) {
174  $sql .= " banque='".$db->escape(GETPOST("banque"))."',";
175  }
176  if (GETPOSTISSET('emetteur')) {
177  $sql .= " emetteur='".$db->escape(GETPOST("emetteur"))."',";
178  }
179  // Blocked when conciliated
180  if (!$object->rappro) {
181  if (GETPOSTISSET('label')) {
182  $sql .= " label = '".$db->escape(GETPOST("label"))."',";
183  }
184  if (GETPOSTISSET('amount')) {
185  $sql .= " amount= '".$db->escape($amount)."',";
186  }
187  if (GETPOSTISSET('dateomonth')) {
188  $sql .= " dateo = '".$db->idate($dateop)."',";
189  }
190  if (GETPOSTISSET('datevmonth')) {
191  $sql .= " datev = '".$db->idate($dateval)."',";
192  }
193  }
194  $sql .= " fk_account = ".((int) $actarget->id);
195  $sql .= " WHERE rowid = ".((int) $object->id);
196 
197  $result = $db->query($sql);
198  if (!$result) {
199  $error++;
200  }
201 
202  if (!$error) {
203  $arrayofcategs = GETPOST('custcats', 'array');
204  $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_class WHERE lineid = ".((int) $rowid);
205  if (!$db->query($sql)) {
206  $error++;
207  dol_print_error($db);
208  }
209  if (count($arrayofcategs)) {
210  foreach ($arrayofcategs as $val) {
211  $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_class (lineid, fk_categ) VALUES (".((int) $rowid).", ".((int) $val).")";
212  if (!$db->query($sql)) {
213  $error++;
214  dol_print_error($db);
215  }
216  }
217  // $arrayselected will be loaded after in page output
218  }
219  }
220 
221  if (!$error) {
222  $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
223  $object->insertExtraFields();
224  }
225 
226  if (!$error) {
227  setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
228  $db->commit();
229  } else {
230  $db->rollback();
231  dol_print_error($db);
232  }
233  }
234 }
235 
236 // Reconcile
237 if ($user->hasRight('banque', 'consolidate') && ($action == 'num_releve' || $action == 'setreconcile')) {
238  $num_rel = trim(GETPOST("num_rel"));
239  $rappro = GETPOST('reconciled') ? 1 : 0;
240 
241  // Check parameters
242  if ($rappro && empty($num_rel)) {
243  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("AccountStatement")), null, 'errors');
244  $error++;
245  }
246 
247  if (!$error) {
248  $db->begin();
249  $object->fetch($rowid);
250  $oldNum_rel = $object->num_releve;
251  $id = $object->fk_account;
252 
253  $sql = "UPDATE ".MAIN_DB_PREFIX."bank";
254  $sql .= " SET num_releve = ".($num_rel ? "'".$db->escape($num_rel)."'" : "null");
255  if (empty($num_rel)) {
256  $sql .= ", rappro = 0";
257  } else {
258  $sql .= ", rappro = ".((int) $rappro);
259  }
260  $sql .= " WHERE rowid = ".((int) $rowid);
261 
262  $updatePathFile = true;
263  $update_dir = true;
264 
265  dol_syslog("line.php update bank line to set the new bank receipt number", LOG_DEBUG);
266 
267  $result = $db->query($sql);
268 
269  // We must not rename the directory of the bank receipt when we change 1 line of bank receipt. Other lines may share the same old ref.
270  // Renaming can be done when we rename globally a bank receipt but not when changing 1 line from one receipt into another one.
271  /*
272  if ($result) {
273  if ($oldNum_rel) {
274  if ($num_rel) {
275  $oldfilepath = dol_sanitizePathName("bank/".((int) $id)."/statement/".$oldNum_rel);
276  $filepath = dol_sanitizePathName("bank/".((int) $id)."/statement/".$num_rel);
277 
278  $sql = "UPDATE ".MAIN_DB_PREFIX."ecm_files";
279  $sql .= " SET filepath = '".$db->escape($filepath)."'";
280  $sql .= " WHERE filepath = '".$db->escape($oldfilepath)."'";
281  $updatePathFile = $db->query($sql);
282 
283  $srcdir = dol_sanitizePathName(DOL_DATA_ROOT."/bank/".((int) $id)."/statement/".$oldNum_rel);
284  $destdir = dol_sanitizePathName(DOL_DATA_ROOT."/bank/".((int) $id)."/statement/".$num_rel);
285 
286  if (dol_is_dir($srcdir)) {
287  $update_dir = dol_move_dir($srcdir, $destdir, 1);
288  }
289  }
290  }
291  }
292  */
293 
294  if ($result && $updatePathFile && $update_dir) {
295  setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
296  $db->commit();
297  } else {
298  $langs->load("errors");
299  setEventMessages($langs->trans("ErrorFailToRenameDir", $oldfilepath, $filepath), null, 'mesgs');
300  $db->rollback();
301  }
302  }
303 }
304 
305 
306 
307 /*
308  * View
309  */
310 
311 $form = new Form($db);
312 
313 llxHeader('', $langs->trans("BankTransaction"));
314 
315 $arrayselected = array();
316 
317 $c = new Categorie($db);
318 $cats = $c->containing($rowid, Categorie::TYPE_BANK_LINE);
319 if (is_array($cats)) {
320  foreach ($cats as $cat) {
321  $arrayselected[] = $cat->id;
322  }
323 }
324 
325 $head = bankline_prepare_head($rowid);
326 
327 
328 $sql = "SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro,";
329 $sql .= " b.num_releve, b.fk_user_author, b.num_chq, b.fk_type, b.fk_account, b.fk_bordereau as receiptid,";
330 $sql .= " b.emetteur,b.banque";
331 $sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
332 $sql .= " WHERE rowid=".((int) $rowid);
333 $sql .= " ORDER BY dateo ASC";
334 $result = $db->query($sql);
335 if ($result) {
336  $i = 0;
337  $total = 0;
338  if ($db->num_rows($result)) {
339  $objp = $db->fetch_object($result);
340 
341  $total = $total + $objp->amount;
342 
343  $acct = new Account($db);
344  $acct->fetch($objp->fk_account);
345  $account = $acct->id;
346 
347  $bankline = new AccountLine($db);
348  $bankline->fetch($rowid, $ref);
349 
350  $links = $acct->get_url($rowid);
351  $bankline->load_previous_next_ref('', 'rowid');
352 
353  // Confirmations
354  if ($action == 'delete_categ') {
355  print $form->formconfirm($_SERVER['PHP_SELF']."?rowid=".urlencode((string) ($rowid))."&cat1=".urlencode((string) (GETPOSTINT("fk_categ")))."&orig_account=".urlencode((string) ($orig_account)), $langs->trans("RemoveFromRubrique"), $langs->trans("RemoveFromRubriqueConfirm"), "confirm_delete_categ", '', 'yes', 1);
356  }
357 
358  print '<form name="update" method="POST" action="'.$_SERVER['PHP_SELF'].'?rowid='.$rowid.'">';
359  print '<input type="hidden" name="token" value="'.newToken().'">';
360  print '<input type="hidden" name="action" value="update">';
361  print '<input type="hidden" name="orig_account" value="'.$orig_account.'">';
362  print '<input type="hidden" name="account" value="'.$acct->id.'">';
363 
364  print dol_get_fiche_head($head, 'bankline', $langs->trans('LineRecord'), 0, 'accountline', 0);
365 
366  $linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/bankentries_list.php?restore_lastsearch_values=1'.(GETPOSTINT('account', 1) ? '&id='.GETPOSTINT('account', 1) : '').'">'.$langs->trans("BackToList").'</a>';
367 
368 
369  dol_banner_tab($bankline, 'rowid', $linkback);
370 
371  print '<div class="fichecenter2">';
372 
373  print '<div class="underbanner clearboth"></div>';
374  print '<table class="border centpercent tableforfield">';
375 
376  $i++;
377 
378  // Bank account
379  print '<tr><td class="titlefieldcreate">'.$langs->trans("BankAccount").'</td>';
380  print '<td>';
381  // $objp->fk_account may be not > 0 if data was lost by an old bug. In such a case, we let a chance to user to fix it.
382  if (($objp->rappro || $bankline->getVentilExportCompta()) && $objp->fk_account > 0) {
383  print $acct->getNomUrl(1, 'transactions', 'reflabel');
384  } else {
385  print img_picto('', 'bank_account', 'class="paddingright"');
386  print $form->select_comptes($acct->id, 'accountid', 0, '', ($acct->id > 0 ? $acct->id : 1), '', 0, '', 1);
387  }
388  print '</td>';
389  print '</tr>';
390 
391  // Show links of bank transactions
392  if (count($links)) {
393  print '<tr><td class="tdtop">'.$langs->trans("Links").'</td>';
394  print '<td>';
395  foreach ($links as $key => $val) {
396  if ($key) {
397  print '<br>';
398  }
399  if ($links[$key]['type'] == 'payment') {
400  require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
401  $paymenttmp = new Paiement($db);
402  $paymenttmp->fetch($links[$key]['url_id']);
403  $paymenttmp->ref = $langs->trans("Payment").' '.$paymenttmp->ref;
404  /*print '<a href="'.DOL_URL_ROOT.'/compta/paiement/card.php?id='.$links[$key]['url_id'].'">';
405  print img_object($langs->trans('Payment'),'payment').' ';
406  print $langs->trans("Payment");
407  print '</a>';*/
408  print $paymenttmp->getNomUrl(1);
409  } elseif ($links[$key]['type'] == 'payment_supplier') {
410  require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php';
411  $paymenttmp = new PaiementFourn($db);
412  $paymenttmp->fetch($links[$key]['url_id']);
413  $paymenttmp->ref = $langs->trans("Payment").' '.$paymenttmp->ref;
414  /*print '<a href="'.DOL_URL_ROOT.'/fourn/paiement/card.php?id='.$links[$key]['url_id'].'">';
415  print img_object($langs->trans('Payment'),'payment').' ';
416  print $langs->trans("Payment");
417  print '</a>';*/
418  print $paymenttmp->getNomUrl(1);
419  } elseif ($links[$key]['type'] == 'company') {
420  $societe = new Societe($db);
421  $societe->fetch($links[$key]['url_id']);
422  print $societe->getNomUrl(1);
423  } elseif ($links[$key]['type'] == 'sc') {
424  print '<a href="'.DOL_URL_ROOT.'/compta/sociales/card.php?id='.$links[$key]['url_id'].'">';
425  print img_object($langs->trans('SocialContribution'), 'bill').' ';
426  print $langs->trans("SocialContribution").($links[$key]['label'] ? ' - '.$links[$key]['label'] : '');
427  print '</a>';
428  } elseif ($links[$key]['type'] == 'vat') {
429  print '<a href="'.DOL_URL_ROOT.'/compta/tva/card.php?id='.$links[$key]['url_id'].'">';
430  print img_object($langs->trans('VATDeclaration'), 'bill').' ';
431  print $langs->trans("VATDeclaration").($links[$key]['label'] ? '&nbsp;'.$links[$key]['label'] : '');
432  print '</a>';
433  } elseif ($links[$key]['type'] == 'salary') {
434  print '<a href="'.DOL_URL_ROOT.'/salaries/card.php?id='.$links[$key]['url_id'].'">';
435  print img_object($langs->trans('Salary'), 'bill').' ';
436  print $langs->trans("Salary").($links[$key]['label'] ? ' - '.$links[$key]['label'] : '');
437  print '</a>';
438  } elseif ($links[$key]['type'] == 'payment_sc') {
439  print '<a href="'.DOL_URL_ROOT.'/compta/payment_sc/card.php?id='.$links[$key]['url_id'].'">';
440  print img_object($langs->trans('Payment'), 'payment').' ';
441  print $langs->trans("SocialContributionPayment");
442  print '</a>';
443  } elseif ($links[$key]['type'] == 'payment_vat') {
444  print '<a href="'.DOL_URL_ROOT.'/compta/payment_vat/card.php?id='.$links[$key]['url_id'].'">';
445  print img_object($langs->trans('VATPayment'), 'payment').' ';
446  print $langs->trans("VATPayment");
447  print '</a>';
448  } elseif ($links[$key]['type'] == 'payment_salary') {
449  print '<a href="'.DOL_URL_ROOT.'/salaries/payment_salary/card.php?id='.$links[$key]['url_id'].'">';
450  print img_object($langs->trans('PaymentSalary'), 'payment').' ';
451  print $langs->trans("SalaryPayment");
452  print '</a>';
453  } elseif ($links[$key]['type'] == 'payment_loan') {
454  print '<a href="'.DOL_URL_ROOT.'/loan/payment/card.php?id='.$links[$key]['url_id'].'">';
455  print img_object($langs->trans('LoanPayment'), 'payment').' ';
456  print $langs->trans("PaymentLoan");
457  print '</a>';
458  } elseif ($links[$key]['type'] == 'loan') {
459  print '<a href="'.DOL_URL_ROOT.'/loan/card.php?id='.$links[$key]['url_id'].'">';
460  print img_object($langs->trans('Loan'), 'bill').' ';
461  print $langs->trans("Loan");
462  print '</a>';
463  } elseif ($links[$key]['type'] == 'member') {
464  print '<a href="'.DOL_URL_ROOT.'/adherents/card.php?rowid='.$links[$key]['url_id'].'">';
465  print img_object($langs->trans('Member'), 'user').' ';
466  print $links[$key]['label'];
467  print '</a>';
468  } elseif ($links[$key]['type'] == 'payment_donation') {
469  print '<a href="'.DOL_URL_ROOT.'/don/payment/card.php?id='.$links[$key]['url_id'].'">';
470  print img_object($langs->trans('Donation'), 'payment').' ';
471  print $langs->trans("DonationPayment");
472  print '</a>';
473  } elseif ($links[$key]['type'] == 'banktransfert') { // transfer between 1 local account and another local account
474  print '<a href="'.DOL_URL_ROOT.'/compta/bank/line.php?rowid='.$links[$key]['url_id'].'">';
475  print img_object($langs->trans('Transaction'), 'payment').' ';
476  print $langs->trans("TransactionOnTheOtherAccount");
477  print '</a>';
478  } elseif ($links[$key]['type'] == 'user') {
479  print '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$links[$key]['url_id'].'">';
480  print img_object($langs->trans('User'), 'user').' ';
481  print $langs->trans("User");
482  print '</a>';
483  } elseif ($links[$key]['type'] == 'payment_various') {
484  print '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/card.php?id='.$links[$key]['url_id'].'">';
485  print img_object($langs->trans('VariousPayment'), 'payment').' ';
486  print $langs->trans("VariousPayment");
487  print '</a>';
488  } else {
489  // Example type = 'direct-debit', or 'credit-transfer', ....
490  print '<a href="'.$links[$key]['url'].$links[$key]['url_id'].'">';
491  print img_object('', 'generic').' ';
492  print $links[$key]['label'];
493  print '</a>';
494  }
495  }
496  print '</td></tr>';
497  }
498 
499  // Type of payment / Number
500  print "<tr><td>".$langs->trans("Type")." / ".$langs->trans("Numero");
501  print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
502  print "</td>";
503  if ($user->hasRight('banque', 'modifier') || $user->hasRight('banque', 'consolidate')) {
504  print '<td>';
505  $form->select_types_paiements($objp->fk_type, "value", '', 2);
506  print '<input type="text" class="flat" name="num_chq" value="'.(empty($objp->num_chq) ? '' : $objp->num_chq).'">';
507  if ($objp->receiptid) {
508  include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
509  $receipt = new RemiseCheque($db);
510  $receipt->fetch($objp->receiptid);
511  print ' &nbsp; &nbsp; '.$langs->trans("CheckReceipt").': '.$receipt->getNomUrl(2);
512  }
513  print '</td>';
514  } else {
515  print '<td>'.$objp->fk_type.' '.dol_escape_htmltag($objp->num_chq).'</td>';
516  }
517  print "</tr>";
518 
519  // Transmitter
520  print "<tr><td>".$langs->trans("CheckTransmitter");
521  print ' <em>('.$langs->trans("ChequeMaker").')</em>';
522  print "</td>";
523  if ($user->hasRight('banque', 'modifier') || $user->hasRight('banque', 'consolidate')) {
524  print '<td>';
525  print '<input type="text" class="flat minwidth200" name="emetteur" value="'.(empty($objp->emetteur) ? '' : dol_escape_htmltag($objp->emetteur)).'">';
526  print '</td>';
527  } else {
528  print '<td>'.$objp->emetteur.'</td>';
529  }
530  print "</tr>";
531 
532  // Bank of cheque
533  print "<tr><td>".$langs->trans("Bank");
534  print ' <em>('.$langs->trans("ChequeBank").')</em>';
535  print "</td>";
536  if ($user->hasRight('banque', 'modifier') || $user->hasRight('banque', 'consolidate')) {
537  print '<td>';
538  print '<input type="text" class="flat minwidth200" name="banque" value="'.(empty($objp->banque) ? '' : dol_escape_htmltag($objp->banque)).'">';
539  print '</td>';
540  } else {
541  print '<td>'.dol_escape_htmltag($objp->banque).'</td>';
542  }
543  print "</tr>";
544 
545  // Date ope
546  print '<tr><td>'.$langs->trans("DateOperation").'</td>';
547  if ($user->hasRight('banque', 'modifier') || $user->hasRight('banque', 'consolidate')) {
548  print '<td>';
549  print $form->selectDate($db->jdate($objp->do), 'dateo', 0, 0, 0, 'update', 1, 0, $objp->rappro);
550  if (!$objp->rappro) {
551  print ' &nbsp; ';
552  print '<a class="ajaxforbankoperationchange" href="'.$_SERVER['PHP_SELF'].'?action=doprev&id='.$objp->fk_account.'&rowid='.$objp->rowid.'&token='.newToken().'">';
553  print img_edit_remove()."</a> ";
554  print '<a class="ajaxforbankoperationchange" href="'.$_SERVER['PHP_SELF'].'?action=donext&id='.$objp->fk_account.'&rowid='.$objp->rowid.'&token='.newToken().'">';
555  print img_edit_add()."</a>";
556  }
557  print '</td>';
558  } else {
559  print '<td>';
560  print dol_print_date($db->jdate($objp->do), "day");
561  print '</td>';
562  }
563  print '</tr>';
564 
565  // Value date
566  print "<tr><td>".$langs->trans("DateValue")."</td>";
567  if ($user->hasRight('banque', 'modifier') || $user->hasRight('banque', 'consolidate')) {
568  print '<td>';
569  print $form->selectDate($db->jdate($objp->dv), 'datev', 0, 0, 0, 'update', 1, 0, $objp->rappro);
570  if (!$objp->rappro) {
571  print ' &nbsp; ';
572  print '<a class="ajaxforbankoperationchange" href="'.$_SERVER['PHP_SELF'].'?action=dvprev&id='.$objp->fk_account.'&rowid='.$objp->rowid.'&token='.newToken().'">';
573  print img_edit_remove()."</a> ";
574  print '<a class="ajaxforbankoperationchange" href="'.$_SERVER['PHP_SELF'].'?action=dvnext&id='.$objp->fk_account.'&rowid='.$objp->rowid.'&token='.newToken().'">';
575  print img_edit_add()."</a>";
576  }
577  print '</td>';
578  } else {
579  print '<td>';
580  print dol_print_date($db->jdate($objp->dv), "day");
581  print '</td>';
582  }
583  print "</tr>";
584 
585  // Description
586  $reg = array();
587  print "<tr><td>".$langs->trans("Label")."</td>";
588  if ($user->hasRight('banque', 'modifier') || $user->hasRight('banque', 'consolidate')) {
589  print '<td>';
590  print '<input name="label" class="flat minwidth300" '.($objp->rappro ? ' disabled' : '').' value="';
591  if (preg_match('/^\‍((.*)\‍)$/i', $objp->label, $reg)) {
592  // Label generique car entre parentheses. On l'affiche en le traduisant
593  print $langs->trans($reg[1]);
594  } else {
595  print dol_escape_htmltag($objp->label);
596  }
597  print '">';
598  print '</td>';
599  } else {
600  print '<td>';
601  if (preg_match('/^\‍((.*)\‍)$/i', $objp->label, $reg)) {
602  // Label generique car entre parentheses. On l'affiche en le traduisant
603  print $langs->trans($reg[1]);
604  } else {
605  print dol_escape_htmltag($objp->label);
606  }
607  print '</td>';
608  }
609  print '</tr>';
610 
611  // Amount
612  print "<tr><td>".$langs->trans("Amount")."</td>";
613  if ($user->hasRight('banque', 'modifier')) {
614  print '<td>';
615  print '<input name="amount" class="flat maxwidth100" '.($objp->rappro ? ' disabled' : '').' value="'.price($objp->amount).'"> '.$langs->trans("Currency".$acct->currency_code);
616  print '</td>';
617  } else {
618  print '<td>';
619  print price($objp->amount);
620  print '</td>';
621  }
622  print "</tr>";
623 
624  // Categories
625  if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) {
626  $langs->load('categories');
627 
628  // Bank line
629  print '<tr><td class="toptd">'.$form->editfieldkey('RubriquesTransactions', 'custcats', '', $object, 0).'</td><td>';
630  $cate_arbo = $form->select_all_categories(Categorie::TYPE_BANK_LINE, null, 'parent', null, null, 1);
631 
632  $arrayselected = array();
633 
634  $c = new Categorie($db);
635  $cats = $c->containing($bankline->id, Categorie::TYPE_BANK_LINE);
636  if (is_array($cats)) {
637  foreach ($cats as $cat) {
638  $arrayselected[] = $cat->id;
639  }
640  }
641  print img_picto('', 'category', 'class="paddingright"').$form->multiselectarray('custcats', $cate_arbo, $arrayselected, null, null, null, null, "90%");
642  print "</td></tr>";
643  }
644 
645  // Other attributes
646  $parameters = array();
647  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $bankline, $action); // Note that $action and $object may have been modified by hook
648  print $hookmanager->resPrint;
649  if (empty($reshook)) {
650  print $bankline->showOptionals($extrafields, ($objp->rappro ? 'view' : 'create'), $parameters);
651  }
652  print "</table>";
653 
654  // Code to adjust value date with plus and less picto using an Ajax call instead of a full reload of page
655  /* Not yet ready. We must manage inline replacement of input date field
656  $urlajax = DOL_URL_ROOT.'/core/ajax/bankconciliate.php?token='.currentToken();
657  print '
658  <script type="text/javascript">
659  $(function() {
660  $("a.ajaxforbankoperationchange").each(function(){
661  var current = $(this);
662  current.click(function()
663  {
664  var url = "'.$urlajax.'&"+current.attr("href").split("?")[1];
665  $.get(url, function(data)
666  {
667  console.log(url)
668  console.log(data)
669  current.parent().prev().replaceWith(data);
670  });
671  return false;
672  });
673  });
674  });
675  </script>
676  ';
677  */
678  print '</div>';
679 
680  print dol_get_fiche_end();
681 
682 
683  print '<div class="center"><input type="submit" class="button" value="'.$langs->trans("Update").'"></div><br>';
684 
685  print "</form>";
686 
687 
688 
689  // Releve rappro
690  if ($acct->canBeConciliated() > 0) { // Si compte rapprochable
691  print load_fiche_titre($langs->trans("Reconciliation"), '', 'bank_account');
692  print '<hr>'."\n";
693 
694  print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'?rowid='.$objp->rowid.'">';
695  print '<input type="hidden" name="token" value="'.newToken().'">';
696  print '<input type="hidden" name="action" value="setreconcile">';
697  print '<input type="hidden" name="orig_account" value="'.$orig_account.'">';
698  print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
699 
700  print '<div class="fichecenter">';
701 
702  print '<table class="border centpercent">';
703 
704  print '<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans("AccountStatement"), $langs->trans("InputReceiptNumber"))."</td>";
705  if ($user->hasRight('banque', 'consolidate')) {
706  print '<td>';
707  if ($objp->rappro) {
708  print '<input name="num_rel_bis" id="num_rel_bis" class="flat" type="text" value="'.$objp->num_releve.'"'.($objp->rappro ? ' disabled' : '').'>';
709  print '<input name="num_rel" id="num_rel" class="flat" type="hidden" value="'.$objp->num_releve.'">';
710  } else {
711  print '<input name="num_rel" id="num_rel" class="flat" value="'.$objp->num_releve.'"'.($objp->rappro ? ' disabled' : '').'>';
712  }
713  if ($objp->num_releve) {
714  print ' &nbsp; <a href="'.DOL_URL_ROOT.'/compta/bank/releve.php?num='.$objp->num_releve.'&account='.$acct->id.'">('.$langs->trans("AccountStatement").' '.$objp->num_releve.')</a>';
715  }
716  print '</td>';
717  } else {
718  print '<td>'.$objp->num_releve.'</td>';
719  }
720  print '</tr>';
721 
722  print '<tr><td><label for="reconciled">'.$langs->trans("BankLineConciliated").'</label></td>';
723  if ($user->hasRight('banque', 'consolidate')) {
724  print '<td>';
725  print '<input type="checkbox" id="reconciled" name="reconciled" class="flat" '.(GETPOSTISSET("reconciled") ? (GETPOST("reconciled") ? ' checked="checked"' : '') : ($objp->rappro ? ' checked="checked"' : '')).'">';
726 
727  print '
728  <script type="text/javascript">
729  jQuery(document).ready(function() {
730  $("#reconciled").click(function(){
731  console.log("We click on checkbox reconciled "+$("#reconciled").prop("checked"));
732  if ($("#reconciled").prop("checked") == false) {
733  console.log("we remove disabled");
734  jQuery("#num_rel_bis").removeAttr("disabled");
735  jQuery("#num_rel").removeAttr("disabled");
736  jQuery("#num_rel_bis").attr("type", "hidden");
737  jQuery("#num_rel").attr("type", "text");
738  jQuery("#num_rel_bis").hide();
739  jQuery("#num_rel").show();
740  } else {
741 
742  }
743  });
744  });
745  </script>
746  ';
747 
748  print '</td>';
749  } else {
750  print '<td>'.yn($objp->rappro).'</td>';
751  }
752  print '</tr>';
753  print '</table>';
754 
755  print '</div>';
756 
757  print '<div class="center">';
758 
759  print '<input type="submit" class="button" value="'.$langs->trans("Update").'">';
760  if ($backtopage) {
761  print ' &nbsp; ';
762  print '<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans("Cancel").'">';
763  }
764  print '</div>';
765 
766  print '</form>';
767  }
768  }
769 
770  $db->free($result);
771 } else {
772  dol_print_error($db);
773 }
774 
775 // End of page
776 llxFooter();
777 $db->close();
if($user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition: card.php:58
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 bank accounts.
const TYPE_CASH
Cash account.
Class to manage bank transaction lines.
Class to manage categories.
Class to manage standard extra fields.
Class to manage generation of HTML components Only common components must be here.
Class to manage payments for supplier invoices.
Class to manage payments of customer invoices.
Class to manage cheque delivery receipts.
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...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (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.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
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.
img_edit_add($titlealt='default', $other='')
Show logo +.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
img_edit_remove($titlealt='default', $other='')
Show logo -.
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...
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.