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