33 require
'../../main.inc.php';
34 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
35 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
39 $langs->loadLangs(array(
'banks',
'categories',
'compta',
'bills',
'other'));
41 $langs->load(
"members");
44 $langs->load(
"donations");
50 $langs->load(
"salaries");
55 $rowid =
GETPOST(
"rowid",
'int');
56 $accountoldid =
GETPOST(
'account',
'int');
57 $accountid =
GETPOST(
'accountid',
'int');
59 $action =
GETPOST(
'action',
'aZ09');
60 $confirm =
GETPOST(
'confirm',
'alpha');
61 $orig_account =
GETPOST(
"orig_account");
62 $backtopage =
GETPOST(
'backtopage',
'alpha');
63 $cancel =
GETPOST(
'cancel',
'alpha');
66 $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref :
''));
67 $fieldtype = (!empty($ref) ?
'ref' :
'rowid');
70 $socid = $user->socid;
73 $result =
restrictedArea($user,
'banque', $accountoldid,
'bank_account');
74 if (empty($user->rights->banque->lire) && empty($user->rights->banque->consolidate)) {
78 $hookmanager->initHooks(array(
'bankline'));
85 $parameters = array(
'socid' => $socid);
86 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
92 header(
"Location: ".$backtopage);
98 if ($user->rights->banque->consolidate && $action ==
'donext') {
100 $al->dateo_next(
GETPOST(
"rowid",
'int'));
101 } elseif ($user->rights->banque->consolidate && $action ==
'doprev') {
103 $al->dateo_previous(
GETPOST(
"rowid",
'int'));
104 } elseif ($user->rights->banque->consolidate && $action ==
'dvnext') {
106 $al->datev_next(
GETPOST(
"rowid",
'int'));
107 } elseif ($user->rights->banque->consolidate && $action ==
'dvprev') {
109 $al->datev_previous(
GETPOST(
"rowid",
'int'));
112 if ($action ==
'confirm_delete_categ' && $confirm ==
"yes" && $user->rights->banque->modifier) {
113 $cat1 =
GETPOST(
"cat1",
'int');
114 if (!empty($rowid) && !empty($cat1)) {
115 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"bank_class WHERE lineid = ".((int) $rowid).
" AND fk_categ = ".((int) $cat1);
116 if (!$db->query($sql)) {
124 if ($user->rights->banque->modifier && $action ==
"update") {
128 $result = $acline->fetch($rowid);
130 dol_syslog(
'Failed to read bank line with id '.$rowid, LOG_WARNING);
131 $acline->id = $rowid;
135 $acsource->fetch($accountoldid);
138 if (
GETPOST(
'accountid',
'int') > 0 && !$acline->rappro && !$acline->getVentilExportCompta()) {
139 $actarget->fetch(
GETPOST(
'accountid',
'int'));
141 $actarget->fetch($accountoldid);
144 if (!($actarget->id > 0)) {
145 setEventMessages($langs->trans(
"ErrorFailedToLoadBankAccount"),
null,
'errors');
149 setEventMessages($langs->trans(
"ErrorCashAccountAcceptsOnlyCashMoney"),
null,
'errors');
159 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"bank";
163 $sql .=
" fk_type='".$db->escape(
GETPOST(
'value')).
"',";
166 $sql .=
" num_chq='".$db->escape(
GETPOST(
"num_chq")).
"',";
169 $sql .=
" banque='".$db->escape(
GETPOST(
"banque")).
"',";
172 $sql .=
" emetteur='".$db->escape(
GETPOST(
"emetteur")).
"',";
175 if (!$acline->rappro) {
177 $sql .=
" label = '".$db->escape(
GETPOST(
"label")).
"',";
180 $sql .=
" amount= '".$db->escape($amount).
"',";
183 $sql .=
" dateo = '".$db->idate($dateop).
"',";
186 $sql .=
" datev = '".$db->idate($dateval).
"',";
189 $sql .=
" fk_account = ".((int) $actarget->id);
190 $sql .=
" WHERE rowid = ".((int) $acline->id);
192 $result = $db->query($sql);
198 $arrayofcategs =
GETPOST(
'custcats',
'array');
199 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"bank_class WHERE lineid = ".((int) $rowid);
200 if (!$db->query($sql)) {
204 if (count($arrayofcategs)) {
205 foreach ($arrayofcategs as $val) {
206 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_class (lineid, fk_categ) VALUES (".((int) $rowid).
", ".((int) $val).
")";
207 if (!$db->query($sql)) {
227 if ($user->rights->banque->consolidate && ($action ==
'num_releve' || $action ==
'setreconcile')) {
228 $num_rel = trim(
GETPOST(
"num_rel"));
229 $rappro =
GETPOST(
'reconciled') ? 1 : 0;
232 if ($rappro && empty($num_rel)) {
233 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"AccountStatement")),
null,
'errors');
240 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"bank";
241 $sql .=
" SET num_releve = ".($num_rel ?
"'".$db->escape($num_rel).
"'" :
"null");
242 if (empty($num_rel)) {
243 $sql .=
", rappro = 0";
245 $sql .=
", rappro = ".((int) $rappro);
247 $sql .=
" WHERE rowid = ".((int) $rowid);
250 $result = $db->query($sql);
269 llxHeader(
'', $langs->trans(
"BankTransaction"));
271 $arrayselected = array();
274 $cats = $c->containing($rowid, Categorie::TYPE_BANK_LINE);
275 if (is_array($cats)) {
276 foreach ($cats as $cat) {
277 $arrayselected[] = $cat->id;
281 $head = bankline_prepare_head($rowid);
284 $sql =
"SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro,";
285 $sql .=
" b.num_releve, b.fk_user_author, b.num_chq, b.fk_type, b.fk_account, b.fk_bordereau as receiptid,";
286 $sql .=
" b.emetteur,b.banque";
287 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as b";
288 $sql .=
" WHERE rowid=".((int) $rowid);
289 $sql .=
" ORDER BY dateo ASC";
290 $result = $db->query($sql);
294 if ($db->num_rows($result)) {
295 $objp = $db->fetch_object($result);
297 $total = $total + $objp->amount;
300 $acct->fetch($objp->fk_account);
301 $account = $acct->id;
304 $bankline->fetch($rowid, $ref);
306 $links = $acct->get_url($rowid);
307 $bankline->load_previous_next_ref(
'',
'rowid');
310 if ($action ==
'delete_categ') {
311 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);
314 print
'<form name="update" method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?rowid='.$rowid.
'">';
315 print
'<input type="hidden" name="token" value="'.newToken().
'">';
316 print
'<input type="hidden" name="action" value="update">';
317 print
'<input type="hidden" name="orig_account" value="'.$orig_account.
'">';
318 print
'<input type="hidden" name="account" value="'.$acct->id.
'">';
320 print
dol_get_fiche_head($head,
'bankline', $langs->trans(
'LineRecord'), 0,
'accountline', 0);
322 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/bank/bankentries_list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
327 print
'<div class="fichecenter2">';
329 print
'<div class="underbanner clearboth"></div>';
330 print
'<table class="border centpercent tableforfield">';
335 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Account").
'</td>';
338 if (($objp->rappro || $bankline->getVentilExportCompta()) && $objp->fk_account > 0) {
339 print $acct->getNomUrl(1,
'transactions',
'reflabel');
341 print
img_picto(
'',
'bank_account',
'class="paddingright"');
342 print
$form->select_comptes($acct->id,
'accountid', 0,
'', ($acct->id > 0 ? $acct->id : 1),
'', 0,
'', 1);
349 print
'<tr><td class="tdtop">'.$langs->trans(
"Links").
'</td>';
351 foreach ($links as $key => $val) {
355 if ($links[$key][
'type'] ==
'payment') {
356 require_once DOL_DOCUMENT_ROOT.
'/compta/paiement/class/paiement.class.php';
358 $paymenttmp->fetch($links[$key][
'url_id']);
359 $paymenttmp->ref = $langs->trans(
"Payment").
' '.$paymenttmp->ref;
364 print $paymenttmp->getNomUrl(1);
365 } elseif ($links[$key][
'type'] ==
'payment_supplier') {
366 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/paiementfourn.class.php';
368 $paymenttmp->fetch($links[$key][
'url_id']);
369 $paymenttmp->ref = $langs->trans(
"Payment").
' '.$paymenttmp->ref;
374 print $paymenttmp->getNomUrl(1);
375 } elseif ($links[$key][
'type'] ==
'company') {
377 $societe->fetch($links[$key][
'url_id']);
378 print $societe->getNomUrl(1);
379 } elseif ($links[$key][
'type'] ==
'sc') {
380 print
'<a href="'.DOL_URL_ROOT.
'/compta/sociales/card.php?id='.$links[$key][
'url_id'].
'">';
381 print
img_object($langs->trans(
'SocialContribution'),
'bill').
' ';
382 print $langs->trans(
"SocialContribution").($links[$key][
'label'] ?
' - '.$links[$key][
'label'] :
'');
384 } elseif ($links[$key][
'type'] ==
'vat') {
385 print
'<a href="'.DOL_URL_ROOT.
'/compta/tva/card.php?id='.$links[$key][
'url_id'].
'">';
386 print
img_object($langs->trans(
'VATDeclaration'),
'bill').
' ';
387 print $langs->trans(
"VATDeclaration").($links[$key][
'label'] ?
' '.$links[$key][
'label'] :
'');
389 } elseif ($links[$key][
'type'] ==
'salary') {
390 print
'<a href="'.DOL_URL_ROOT.
'/salaries/card.php?id='.$links[$key][
'url_id'].
'">';
391 print
img_object($langs->trans(
'Salary'),
'bill').
' ';
392 print $langs->trans(
"Salary").($links[$key][
'label'] ?
' - '.$links[$key][
'label'] :
'');
394 } elseif ($links[$key][
'type'] ==
'payment_sc') {
395 print
'<a href="'.DOL_URL_ROOT.
'/compta/payment_sc/card.php?id='.$links[$key][
'url_id'].
'">';
396 print
img_object($langs->trans(
'Payment'),
'payment').
' ';
397 print $langs->trans(
"SocialContributionPayment");
399 } elseif ($links[$key][
'type'] ==
'payment_vat') {
400 print
'<a href="'.DOL_URL_ROOT.
'/compta/payment_vat/card.php?id='.$links[$key][
'url_id'].
'">';
401 print
img_object($langs->trans(
'VATPayment'),
'payment').
' ';
402 print $langs->trans(
"VATPayment");
404 } elseif ($links[$key][
'type'] ==
'payment_salary') {
405 print
'<a href="'.DOL_URL_ROOT.
'/salaries/payment_salary/card.php?id='.$links[$key][
'url_id'].
'">';
406 print
img_object($langs->trans(
'PaymentSalary'),
'payment').
' ';
407 print $langs->trans(
"SalaryPayment");
409 } elseif ($links[$key][
'type'] ==
'payment_loan') {
410 print
'<a href="'.DOL_URL_ROOT.
'/loan/payment/card.php?id='.$links[$key][
'url_id'].
'">';
411 print
img_object($langs->trans(
'LoanPayment'),
'payment').
' ';
412 print $langs->trans(
"PaymentLoan");
414 } elseif ($links[$key][
'type'] ==
'loan') {
415 print
'<a href="'.DOL_URL_ROOT.
'/loan/card.php?id='.$links[$key][
'url_id'].
'">';
416 print
img_object($langs->trans(
'Loan'),
'bill').
' ';
417 print $langs->trans(
"Loan");
419 } elseif ($links[$key][
'type'] ==
'member') {
420 print
'<a href="'.DOL_URL_ROOT.
'/adherents/card.php?rowid='.$links[$key][
'url_id'].
'">';
421 print
img_object($langs->trans(
'Member'),
'user').
' ';
422 print $links[$key][
'label'];
424 } elseif ($links[$key][
'type'] ==
'payment_donation') {
425 print
'<a href="'.DOL_URL_ROOT.
'/don/payment/card.php?id='.$links[$key][
'url_id'].
'">';
426 print
img_object($langs->trans(
'Donation'),
'payment').
' ';
427 print $langs->trans(
"DonationPayment");
429 } elseif ($links[$key][
'type'] ==
'banktransfert') {
430 print
'<a href="'.DOL_URL_ROOT.
'/compta/bank/line.php?rowid='.$links[$key][
'url_id'].
'">';
431 print
img_object($langs->trans(
'Transaction'),
'payment').
' ';
432 print $langs->trans(
"TransactionOnTheOtherAccount");
434 } elseif ($links[$key][
'type'] ==
'user') {
435 print
'<a href="'.DOL_URL_ROOT.
'/user/card.php?id='.$links[$key][
'url_id'].
'">';
436 print
img_object($langs->trans(
'User'),
'user').
' ';
437 print $langs->trans(
"User");
439 } elseif ($links[$key][
'type'] ==
'payment_various') {
440 print
'<a href="'.DOL_URL_ROOT.
'/compta/bank/various_payment/card.php?id='.$links[$key][
'url_id'].
'">';
441 print
img_object($langs->trans(
'VariousPayment'),
'payment').
' ';
442 print $langs->trans(
"VariousPayment");
445 print
'<a href="'.$links[$key][
'url'].$links[$key][
'url_id'].
'">';
447 print $links[$key][
'label'];
458 print
"<tr><td>".$langs->trans(
"Type").
" / ".$langs->trans(
"Numero");
459 print
' <em>('.$langs->trans(
"ChequeOrTransferNumber").
')</em>';
461 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
463 $form->select_types_paiements($objp->fk_type,
"value",
'', 2);
464 print
'<input type="text" class="flat" name="num_chq" value="'.(empty($objp->num_chq) ?
'' : $objp->num_chq).
'">';
465 if ($objp->receiptid) {
466 include_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
468 $receipt->fetch($objp->receiptid);
469 print
' '.$langs->trans(
"CheckReceipt").
': '.$receipt->getNomUrl(2);
478 print
"<tr><td>".$langs->trans(
"CheckTransmitter");
479 print
' <em>('.$langs->trans(
"ChequeMaker").
')</em>';
481 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
483 print
'<input type="text" class="flat minwidth200" name="emetteur" value="'.(empty($objp->emetteur) ?
'' :
dol_escape_htmltag($objp->emetteur)).
'">';
486 print
'<td>'.$objp->emetteur.
'</td>';
491 print
"<tr><td>".$langs->trans(
"Bank");
492 print
' <em>('.$langs->trans(
"ChequeBank").
')</em>';
494 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
496 print
'<input type="text" class="flat minwidth200" name="banque" value="'.(empty($objp->banque) ?
'' :
dol_escape_htmltag($objp->banque)).
'">';
499 print
'<td>'.dol_escape_htmltag($objp->banque).
'</td>';
504 print
'<tr><td>'.$langs->trans(
"DateOperation").
'</td>';
505 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
507 print
$form->selectDate($db->jdate($objp->do),
'dateo',
'',
'',
'',
'update', 1, 0, $objp->rappro);
508 if (!$objp->rappro) {
510 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=doprev&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
512 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=donext&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
524 print
"<tr><td>".$langs->trans(
"DateValue").
"</td>";
525 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
527 print
$form->selectDate($db->jdate($objp->dv),
'datev',
'',
'',
'',
'update', 1, 0, $objp->rappro);
528 if (!$objp->rappro) {
530 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=dvprev&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
532 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=dvnext&id='.$objp->fk_account.
'&rowid='.$objp->rowid.
'&token='.
newToken().
'">';
545 print
"<tr><td>".$langs->trans(
"Label").
"</td>";
546 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
548 print
'<input name="label" class="flat minwidth300" '.($objp->rappro ?
' disabled' :
'').
' value="';
549 if (preg_match(
'/^\((.*)\)$/i', $objp->label, $reg)) {
551 print $langs->trans($reg[1]);
559 if (preg_match(
'/^\((.*)\)$/i', $objp->label, $reg)) {
561 print $langs->trans($reg[1]);
570 print
"<tr><td>".$langs->trans(
"Amount").
"</td>";
571 if ($user->rights->banque->modifier) {
573 print
'<input name="amount" class="flat maxwidth100" '.($objp->rappro ?
' disabled' :
'').
' value="'.
price($objp->amount).
'"> '.$langs->trans(
"Currency".$acct->currency_code);
577 print
price($objp->amount);
583 if (
isModEnabled(
'categorie') && !empty($user->rights->categorie->lire)) {
584 $langs->load(
'categories');
587 print
'<tr><td class="toptd">'.$form->editfieldkey(
'RubriquesTransactions',
'custcats',
'', $object, 0).
'</td><td>';
588 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_BANK_LINE,
null,
'parent',
null,
null, 1);
590 $arrayselected = array();
593 $cats = $c->containing($bankline->id, Categorie::TYPE_BANK_LINE);
594 if (is_array($cats)) {
595 foreach ($cats as $cat) {
596 $arrayselected[] = $cat->id;
599 print
img_picto(
'',
'category',
'class="paddingright"').$form->multiselectarray(
'custcats', $cate_arbo, $arrayselected,
null,
null,
null,
null,
"90%");
634 print
'<div class="center"><input type="submit" class="button" value="'.$langs->trans(
"Update").
'"></div><br>';
641 if ($acct->canBeConciliated() > 0) {
642 print
load_fiche_titre($langs->trans(
"Reconciliation"),
'',
'bank_account');
645 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?rowid='.$objp->rowid.
'">';
646 print
'<input type="hidden" name="token" value="'.newToken().
'">';
647 print
'<input type="hidden" name="action" value="setreconcile">';
648 print
'<input type="hidden" name="orig_account" value="'.$orig_account.
'">';
649 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
651 print
'<div class="fichecenter">';
653 print
'<table class="border centpercent">';
655 print
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"AccountStatement"), $langs->trans(
"InputReceiptNumber")).
"</td>";
656 if ($user->rights->banque->consolidate) {
659 print
'<input name="num_rel_bis" class="flat" value="'.$objp->num_releve.
'"'.($objp->rappro ?
' disabled' :
'').
'>';
660 print
'<input name="num_rel" type="hidden" value="'.$objp->num_releve.
'">';
662 print
'<input name="num_rel" class="flat" value="'.$objp->num_releve.
'"'.($objp->rappro ?
' disabled' :
'').
'>';
664 if ($objp->num_releve) {
665 print
' (<a href="'.DOL_URL_ROOT.
'/compta/bank/releve.php?num='.$objp->num_releve.
'&account='.$acct->id.
'">'.$langs->trans(
"AccountStatement").
' '.$objp->num_releve.
')</a>';
669 print
'<td>'.$objp->num_releve.
'</td>';
673 print
'<tr><td><label for="reconciled">'.$langs->trans(
"BankLineConciliated").
'</label></td>';
674 if ($user->rights->banque->consolidate) {
676 print
'<input type="checkbox" id="reconciled" name="reconciled" class="flat" '.(GETPOSTISSET(
"reconciled") ? (
GETPOST(
"reconciled") ?
' checked="checked"' :
'') : ($objp->rappro ?
' checked="checked"' :
'')).
'">';
679 print
'<td>'.yn($objp->rappro).
'</td>';
686 print
'<div class="center">';
688 print
'<input type="submit" class="button" value="'.$langs->trans(
"Update").
'">';
691 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';