34 require
'../../main.inc.php';
35 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
37 require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
38 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
41 $langs->loadLangs(array(
'banks',
'categories',
'compta',
'bills',
'other'));
43 $langs->load(
"members");
46 $langs->load(
"donations");
52 $langs->load(
"salaries");
57 $rowid =
GETPOST(
"rowid",
'int');
58 $accountoldid =
GETPOST(
'account',
'int');
59 $accountid =
GETPOST(
'accountid',
'int');
61 $action =
GETPOST(
'action',
'aZ09');
62 $confirm =
GETPOST(
'confirm',
'alpha');
63 $orig_account =
GETPOST(
"orig_account");
64 $backtopage =
GETPOST(
'backtopage',
'alpha');
65 $cancel =
GETPOST(
'cancel',
'alpha');
68 $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref :
''));
69 $fieldtype = (!empty($ref) ?
'ref' :
'rowid');
72 $socid = $user->socid;
75 $result =
restrictedArea($user,
'banque', $accountoldid,
'bank_account');
76 if (empty($user->rights->banque->lire) && empty($user->rights->banque->consolidate)) {
80 $hookmanager->initHooks(array(
'bankline'));
83 $extrafields->fetch_name_optionals_label($object->element);
89 $parameters = array(
'socid' => $socid);
90 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
96 header(
"Location: ".$backtopage);
102 if ($user->rights->banque->consolidate && $action ==
'donext') {
104 $al->dateo_next(
GETPOST(
"rowid",
'int'));
105 } elseif ($user->rights->banque->consolidate && $action ==
'doprev') {
107 $al->dateo_previous(
GETPOST(
"rowid",
'int'));
108 } elseif ($user->rights->banque->consolidate && $action ==
'dvnext') {
110 $al->datev_next(
GETPOST(
"rowid",
'int'));
111 } elseif ($user->rights->banque->consolidate && $action ==
'dvprev') {
113 $al->datev_previous(
GETPOST(
"rowid",
'int'));
116 if ($action ==
'confirm_delete_categ' && $confirm ==
"yes" && $user->rights->banque->modifier) {
117 $cat1 =
GETPOST(
"cat1",
'int');
118 if (!empty($rowid) && !empty($cat1)) {
119 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"bank_class WHERE lineid = ".((int) $rowid).
" AND fk_categ = ".((int) $cat1);
120 if (!$db->query($sql)) {
128 if ($user->rights->banque->modifier && $action ==
"update") {
131 $result = $object->fetch($rowid);
133 dol_syslog(
'Failed to read bank line with id '.$rowid, LOG_WARNING);
134 $object->id = $rowid;
138 $acsource->fetch($accountoldid);
141 if (
GETPOST(
'accountid',
'int') > 0 && !$object->rappro && !$object->getVentilExportCompta()) {
142 $actarget->fetch(
GETPOST(
'accountid',
'int'));
144 $actarget->fetch($accountoldid);
147 if (!($actarget->id > 0)) {
148 setEventMessages($langs->trans(
"ErrorFailedToLoadBankAccount"),
null,
'errors');
152 setEventMessages($langs->trans(
"ErrorCashAccountAcceptsOnlyCashMoney"),
null,
'errors');
162 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"bank";
166 $sql .=
" fk_type='".$db->escape(
GETPOST(
'value')).
"',";
169 $sql .=
" num_chq='".$db->escape(
GETPOST(
"num_chq")).
"',";
172 $sql .=
" banque='".$db->escape(
GETPOST(
"banque")).
"',";
175 $sql .=
" emetteur='".$db->escape(
GETPOST(
"emetteur")).
"',";
178 if (!$object->rappro) {
180 $sql .=
" label = '".$db->escape(
GETPOST(
"label")).
"',";
183 $sql .=
" amount= '".$db->escape($amount).
"',";
186 $sql .=
" dateo = '".$db->idate($dateop).
"',";
189 $sql .=
" datev = '".$db->idate($dateval).
"',";
192 $sql .=
" fk_account = ".((int) $actarget->id);
193 $sql .=
" WHERE rowid = ".((int) $object->id);
195 $result = $db->query($sql);
201 $arrayofcategs =
GETPOST(
'custcats',
'array');
202 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"bank_class WHERE lineid = ".((int) $rowid);
203 if (!$db->query($sql)) {
207 if (count($arrayofcategs)) {
208 foreach ($arrayofcategs as $val) {
209 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_class (lineid, fk_categ) VALUES (".((int) $rowid).
", ".((int) $val).
")";
210 if (!$db->query($sql)) {
220 $extrafields->setOptionalsFromPost(
null, $object,
'@GETPOSTISSET');
221 $object->insertExtraFields();
235 if ($user->rights->banque->consolidate && ($action ==
'num_releve' || $action ==
'setreconcile')) {
236 $num_rel = trim(
GETPOST(
"num_rel"));
237 $rappro =
GETPOST(
'reconciled') ? 1 : 0;
240 if ($rappro && empty($num_rel)) {
241 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"AccountStatement")),
null,
'errors');
248 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"bank";
249 $sql .=
" SET num_releve = ".($num_rel ?
"'".$db->escape($num_rel).
"'" :
"null");
250 if (empty($num_rel)) {
251 $sql .=
", rappro = 0";
253 $sql .=
", rappro = ".((int) $rappro);
255 $sql .=
" WHERE rowid = ".((int) $rowid);
258 $result = $db->query($sql);
277 llxHeader(
'', $langs->trans(
"BankTransaction"));
279 $arrayselected = array();
282 $cats = $c->containing($rowid, Categorie::TYPE_BANK_LINE);
283 if (is_array($cats)) {
284 foreach ($cats as $cat) {
285 $arrayselected[] = $cat->id;
289 $head = bankline_prepare_head($rowid);
292 $sql =
"SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro,";
293 $sql .=
" b.num_releve, b.fk_user_author, b.num_chq, b.fk_type, b.fk_account, b.fk_bordereau as receiptid,";
294 $sql .=
" b.emetteur,b.banque";
295 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as b";
296 $sql .=
" WHERE rowid=".((int) $rowid);
297 $sql .=
" ORDER BY dateo ASC";
298 $result = $db->query($sql);
302 if ($db->num_rows($result)) {
303 $objp = $db->fetch_object($result);
305 $total = $total + $objp->amount;
308 $acct->fetch($objp->fk_account);
309 $account = $acct->id;
312 $bankline->fetch($rowid, $ref);
314 $links = $acct->get_url($rowid);
315 $bankline->load_previous_next_ref(
'',
'rowid');
318 if ($action ==
'delete_categ') {
319 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);
322 print
'<form name="update" method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?rowid='.$rowid.
'">';
323 print
'<input type="hidden" name="token" value="'.newToken().
'">';
324 print
'<input type="hidden" name="action" value="update">';
325 print
'<input type="hidden" name="orig_account" value="'.$orig_account.
'">';
326 print
'<input type="hidden" name="account" value="'.$acct->id.
'">';
328 print
dol_get_fiche_head($head,
'bankline', $langs->trans(
'LineRecord'), 0,
'accountline', 0);
330 $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>';
335 print
'<div class="fichecenter2">';
337 print
'<div class="underbanner clearboth"></div>';
338 print
'<table class="border centpercent tableforfield">';
343 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Account").
'</td>';
346 if (($objp->rappro || $bankline->getVentilExportCompta()) && $objp->fk_account > 0) {
347 print $acct->getNomUrl(1,
'transactions',
'reflabel');
349 print
img_picto(
'',
'bank_account',
'class="paddingright"');
350 print
$form->select_comptes($acct->id,
'accountid', 0,
'', ($acct->id > 0 ? $acct->id : 1),
'', 0,
'', 1);
357 print
'<tr><td class="tdtop">'.$langs->trans(
"Links").
'</td>';
359 foreach ($links as $key => $val) {
363 if ($links[$key][
'type'] ==
'payment') {
364 require_once DOL_DOCUMENT_ROOT.
'/compta/paiement/class/paiement.class.php';
366 $paymenttmp->fetch($links[$key][
'url_id']);
367 $paymenttmp->ref = $langs->trans(
"Payment").
' '.$paymenttmp->ref;
372 print $paymenttmp->getNomUrl(1);
373 } elseif ($links[$key][
'type'] ==
'payment_supplier') {
374 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/paiementfourn.class.php';
376 $paymenttmp->fetch($links[$key][
'url_id']);
377 $paymenttmp->ref = $langs->trans(
"Payment").
' '.$paymenttmp->ref;
382 print $paymenttmp->getNomUrl(1);
383 } elseif ($links[$key][
'type'] ==
'company') {
385 $societe->fetch($links[$key][
'url_id']);
386 print $societe->getNomUrl(1);
387 } elseif ($links[$key][
'type'] ==
'sc') {
388 print
'<a href="'.DOL_URL_ROOT.
'/compta/sociales/card.php?id='.$links[$key][
'url_id'].
'">';
389 print
img_object($langs->trans(
'SocialContribution'),
'bill').
' ';
390 print $langs->trans(
"SocialContribution").($links[$key][
'label'] ?
' - '.$links[$key][
'label'] :
'');
392 } elseif ($links[$key][
'type'] ==
'vat') {
393 print
'<a href="'.DOL_URL_ROOT.
'/compta/tva/card.php?id='.$links[$key][
'url_id'].
'">';
394 print
img_object($langs->trans(
'VATDeclaration'),
'bill').
' ';
395 print $langs->trans(
"VATDeclaration").($links[$key][
'label'] ?
' '.$links[$key][
'label'] :
'');
397 } elseif ($links[$key][
'type'] ==
'salary') {
398 print
'<a href="'.DOL_URL_ROOT.
'/salaries/card.php?id='.$links[$key][
'url_id'].
'">';
399 print
img_object($langs->trans(
'Salary'),
'bill').
' ';
400 print $langs->trans(
"Salary").($links[$key][
'label'] ?
' - '.$links[$key][
'label'] :
'');
402 } elseif ($links[$key][
'type'] ==
'payment_sc') {
403 print
'<a href="'.DOL_URL_ROOT.
'/compta/payment_sc/card.php?id='.$links[$key][
'url_id'].
'">';
404 print
img_object($langs->trans(
'Payment'),
'payment').
' ';
405 print $langs->trans(
"SocialContributionPayment");
407 } elseif ($links[$key][
'type'] ==
'payment_vat') {
408 print
'<a href="'.DOL_URL_ROOT.
'/compta/payment_vat/card.php?id='.$links[$key][
'url_id'].
'">';
409 print
img_object($langs->trans(
'VATPayment'),
'payment').
' ';
410 print $langs->trans(
"VATPayment");
412 } elseif ($links[$key][
'type'] ==
'payment_salary') {
413 print
'<a href="'.DOL_URL_ROOT.
'/salaries/payment_salary/card.php?id='.$links[$key][
'url_id'].
'">';
414 print
img_object($langs->trans(
'PaymentSalary'),
'payment').
' ';
415 print $langs->trans(
"SalaryPayment");
417 } elseif ($links[$key][
'type'] ==
'payment_loan') {
418 print
'<a href="'.DOL_URL_ROOT.
'/loan/payment/card.php?id='.$links[$key][
'url_id'].
'">';
419 print
img_object($langs->trans(
'LoanPayment'),
'payment').
' ';
420 print $langs->trans(
"PaymentLoan");
422 } elseif ($links[$key][
'type'] ==
'loan') {
423 print
'<a href="'.DOL_URL_ROOT.
'/loan/card.php?id='.$links[$key][
'url_id'].
'">';
424 print
img_object($langs->trans(
'Loan'),
'bill').
' ';
425 print $langs->trans(
"Loan");
427 } elseif ($links[$key][
'type'] ==
'member') {
428 print
'<a href="'.DOL_URL_ROOT.
'/adherents/card.php?rowid='.$links[$key][
'url_id'].
'">';
429 print
img_object($langs->trans(
'Member'),
'user').
' ';
430 print $links[$key][
'label'];
432 } elseif ($links[$key][
'type'] ==
'payment_donation') {
433 print
'<a href="'.DOL_URL_ROOT.
'/don/payment/card.php?id='.$links[$key][
'url_id'].
'">';
434 print
img_object($langs->trans(
'Donation'),
'payment').
' ';
435 print $langs->trans(
"DonationPayment");
437 } elseif ($links[$key][
'type'] ==
'banktransfert') {
438 print
'<a href="'.DOL_URL_ROOT.
'/compta/bank/line.php?rowid='.$links[$key][
'url_id'].
'">';
439 print
img_object($langs->trans(
'Transaction'),
'payment').
' ';
440 print $langs->trans(
"TransactionOnTheOtherAccount");
442 } elseif ($links[$key][
'type'] ==
'user') {
443 print
'<a href="'.DOL_URL_ROOT.
'/user/card.php?id='.$links[$key][
'url_id'].
'">';
444 print
img_object($langs->trans(
'User'),
'user').
' ';
445 print $langs->trans(
"User");
447 } elseif ($links[$key][
'type'] ==
'payment_various') {
448 print
'<a href="'.DOL_URL_ROOT.
'/compta/bank/various_payment/card.php?id='.$links[$key][
'url_id'].
'">';
449 print
img_object($langs->trans(
'VariousPayment'),
'payment').
' ';
450 print $langs->trans(
"VariousPayment");
453 print
'<a href="'.$links[$key][
'url'].$links[$key][
'url_id'].
'">';
455 print $links[$key][
'label'];
466 print
"<tr><td>".$langs->trans(
"Type").
" / ".$langs->trans(
"Numero");
467 print
' <em>('.$langs->trans(
"ChequeOrTransferNumber").
')</em>';
469 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
471 $form->select_types_paiements($objp->fk_type,
"value",
'', 2);
472 print
'<input type="text" class="flat" name="num_chq" value="'.(empty($objp->num_chq) ?
'' : $objp->num_chq).
'">';
473 if ($objp->receiptid) {
474 include_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
476 $receipt->fetch($objp->receiptid);
477 print
' '.$langs->trans(
"CheckReceipt").
': '.$receipt->getNomUrl(2);
486 print
"<tr><td>".$langs->trans(
"CheckTransmitter");
487 print
' <em>('.$langs->trans(
"ChequeMaker").
')</em>';
489 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
491 print
'<input type="text" class="flat minwidth200" name="emetteur" value="'.(empty($objp->emetteur) ?
'' :
dol_escape_htmltag($objp->emetteur)).
'">';
494 print
'<td>'.$objp->emetteur.
'</td>';
499 print
"<tr><td>".$langs->trans(
"Bank");
500 print
' <em>('.$langs->trans(
"ChequeBank").
')</em>';
502 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
504 print
'<input type="text" class="flat minwidth200" name="banque" value="'.(empty($objp->banque) ?
'' :
dol_escape_htmltag($objp->banque)).
'">';
507 print
'<td>'.dol_escape_htmltag($objp->banque).
'</td>';
512 print
'<tr><td>'.$langs->trans(
"DateOperation").
'</td>';
513 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
515 print
$form->selectDate($db->jdate($objp->do),
'dateo',
'',
'',
'',
'update', 1, 0, $objp->rappro);
516 if (!$objp->rappro) {
518 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=doprev&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
520 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=donext&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
532 print
"<tr><td>".$langs->trans(
"DateValue").
"</td>";
533 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
535 print
$form->selectDate($db->jdate($objp->dv),
'datev',
'',
'',
'',
'update', 1, 0, $objp->rappro);
536 if (!$objp->rappro) {
538 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=dvprev&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
540 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=dvnext&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
553 print
"<tr><td>".$langs->trans(
"Label").
"</td>";
554 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
556 print
'<input name="label" class="flat minwidth300" '.($objp->rappro ?
' disabled' :
'').
' value="';
557 if (preg_match(
'/^\((.*)\)$/i', $objp->label, $reg)) {
559 print $langs->trans($reg[1]);
567 if (preg_match(
'/^\((.*)\)$/i', $objp->label, $reg)) {
569 print $langs->trans($reg[1]);
578 print
"<tr><td>".$langs->trans(
"Amount").
"</td>";
579 if ($user->rights->banque->modifier) {
581 print
'<input name="amount" class="flat maxwidth100" '.($objp->rappro ?
' disabled' :
'').
' value="'.
price($objp->amount).
'"> '.$langs->trans(
"Currency".$acct->currency_code);
585 print
price($objp->amount);
591 if (
isModEnabled(
'categorie') && !empty($user->rights->categorie->lire)) {
592 $langs->load(
'categories');
595 print
'<tr><td class="toptd">'.$form->editfieldkey(
'RubriquesTransactions',
'custcats',
'', $object, 0).
'</td><td>';
596 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_BANK_LINE,
null,
'parent',
null,
null, 1);
598 $arrayselected = array();
601 $cats = $c->containing($bankline->id, Categorie::TYPE_BANK_LINE);
602 if (is_array($cats)) {
603 foreach ($cats as $cat) {
604 $arrayselected[] = $cat->id;
607 print
img_picto(
'',
'category',
'class="paddingright"').$form->multiselectarray(
'custcats', $cate_arbo, $arrayselected,
null,
null,
null,
null,
"90%");
612 $parameters = array();
613 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $bankline, $action);
614 print $hookmanager->resPrint;
615 if (empty($reshook)) {
616 print $bankline->showOptionals($extrafields, ($objp->rappro ?
'view' :
'create'), $parameters);
649 print
'<div class="center"><input type="submit" class="button" value="'.$langs->trans(
"Update").
'"></div><br>';
656 if ($acct->canBeConciliated() > 0) {
657 print
load_fiche_titre($langs->trans(
"Reconciliation"),
'',
'bank_account');
660 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?rowid='.$objp->rowid.
'">';
661 print
'<input type="hidden" name="token" value="'.newToken().
'">';
662 print
'<input type="hidden" name="action" value="setreconcile">';
663 print
'<input type="hidden" name="orig_account" value="'.$orig_account.
'">';
664 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
666 print
'<div class="fichecenter">';
668 print
'<table class="border centpercent">';
670 print
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"AccountStatement"), $langs->trans(
"InputReceiptNumber")).
"</td>";
671 if ($user->rights->banque->consolidate) {
674 print
'<input name="num_rel_bis" id="num_rel_bis" class="flat" type="text" value="'.$objp->num_releve.
'"'.($objp->rappro ?
' disabled' :
'').
'>';
675 print
'<input name="num_rel" id="num_rel" class="flat" type="hidden" value="'.$objp->num_releve.
'">';
677 print
'<input name="num_rel" id="num_rel" class="flat" value="'.$objp->num_releve.
'"'.($objp->rappro ?
' disabled' :
'').
'>';
679 if ($objp->num_releve) {
680 print
' <a href="'.DOL_URL_ROOT.
'/compta/bank/releve.php?num='.$objp->num_releve.
'&account='.$acct->id.
'">('.$langs->trans(
"AccountStatement").
' '.$objp->num_releve.
')</a>';
684 print
'<td>'.$objp->num_releve.
'</td>';
688 print
'<tr><td><label for="reconciled">'.$langs->trans(
"BankLineConciliated").
'</label></td>';
689 if ($user->rights->banque->consolidate) {
691 print
'<input type="checkbox" id="reconciled" name="reconciled" class="flat" '.(GETPOSTISSET(
"reconciled") ? (
GETPOST(
"reconciled") ?
' checked="checked"' :
'') : ($objp->rappro ?
' checked="checked"' :
'')).
'">';
694 <script type="text/javascript">
695 jQuery(document).ready(function() {
696 $("#reconciled").click(function(){
697 console.log("We click on checkbox reconciled "+$("#reconciled").prop("checked"));
698 if ($("#reconciled").prop("checked") == false) {
699 console.log("we remove disabled");
700 jQuery("#num_rel_bis").removeAttr("disabled");
701 jQuery("#num_rel").removeAttr("disabled");
702 jQuery("#num_rel_bis").attr("type", "hidden");
703 jQuery("#num_rel").attr("type", "text");
704 jQuery("#num_rel_bis").hide();
705 jQuery("#num_rel").show();
716 print
'<td>'.yn($objp->rappro).
'</td>';
723 print
'<div class="center">';
725 print
'<input type="submit" class="button" value="'.$langs->trans(
"Update").
'">';
728 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';