35 require
'../../main.inc.php';
37 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/lib/bank.lib.php';
41 require_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
43 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/bankcateg.class.php';
45 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
46 require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
47 require_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/paymentvat.class.php';
48 require_once DOL_DOCUMENT_ROOT.
'/compta/paiement/class/paiement.class.php';
49 require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/paymentsocialcontribution.class.php';
50 require_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
51 require_once DOL_DOCUMENT_ROOT.
'/salaries/class/paymentsalary.class.php';
52 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/paymentvarious.class.php';
53 require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
54 require_once DOL_DOCUMENT_ROOT.
'/don/class/don.class.php';
55 require_once DOL_DOCUMENT_ROOT.
'/don/class/paymentdonation.class.php';
56 require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/paymentexpensereport.class.php';
57 require_once DOL_DOCUMENT_ROOT.
'/loan/class/loan.class.php';
58 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/paiementfourn.class.php';
59 require_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
62 $langs->loadLangs(array(
"banks",
"bills",
"categories",
"companies",
"margins",
"salaries",
"loan",
"donations",
"trips",
"members",
"compta",
"accountancy"));
66 $action =
GETPOST(
'action',
'aZ09');
67 $cancel =
GETPOST(
'cancel',
'alpha');
68 $confirm =
GETPOST(
'confirm',
'alpha');
69 $contextpage =
'banktransactionlist'.(empty($object->ref) ?
'' :
'-'.$object->id);
70 $massaction =
GETPOST(
'massaction',
'alpha');
71 $optioncss =
GETPOST(
'optioncss',
'aZ09');
74 $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref :
''));
75 $fieldtype = (!empty($ref) ?
'ref' :
'rowid');
78 $socid = $user->socid;
80 $result =
restrictedArea($user,
'banque', $fieldvalue,
'bank_account&bank_account',
'',
'', $fieldtype);
83 $socid = $user->socid;
89 $search_debit =
GETPOST(
"search_debit",
'alpha');
90 $search_credit =
GETPOST(
"search_credit",
'alpha');
91 $search_type =
GETPOST(
"search_type",
'alpha');
92 $search_account =
GETPOST(
"search_account",
'int') ?
GETPOST(
"search_account",
'int') :
GETPOST(
"account",
'int');
93 $search_accountancy_code =
GETPOST(
'search_accountancy_code',
'alpha') ?
GETPOST(
'search_accountancy_code',
'alpha') :
GETPOST(
'accountancy_code',
'alpha');
95 $search_ref =
GETPOST(
'search_ref',
'alpha');
96 $search_description =
GETPOST(
"search_description",
'alpha');
97 $search_dt_start =
dol_mktime(0, 0, 0,
GETPOST(
'search_start_dtmonth',
'int'),
GETPOST(
'search_start_dtday',
'int'),
GETPOST(
'search_start_dtyear',
'int'));
99 $search_dv_start =
dol_mktime(0, 0, 0,
GETPOST(
'search_start_dvmonth',
'int'),
GETPOST(
'search_start_dvday',
'int'),
GETPOST(
'search_start_dvyear',
'int'));
101 $search_thirdparty_user =
GETPOST(
"search_thirdparty",
'alpha') ?
GETPOST(
"search_thirdparty",
'alpha') :
GETPOST(
"thirdparty",
'alpha');
102 $search_req_nb =
GETPOST(
"req_nb",
'alpha');
103 $search_num_releve =
GETPOST(
"search_num_releve",
'alpha');
104 $search_conciliated =
GETPOST(
"search_conciliated",
'int');
105 $search_fk_bordereau =
GETPOST(
"search_fk_bordereau",
'int');
106 $optioncss =
GETPOST(
'optioncss',
'alpha');
107 $toselect =
GETPOST(
'toselect',
'array');
108 $num_releve =
GETPOST(
"num_releve",
"alpha");
109 if (empty($dateop)) {
113 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
114 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
115 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
117 $pageplusone =
GETPOST(
"pageplusone",
'int');
119 $page = $pageplusone - 1;
121 if (empty($page) || $page == -1) {
124 $offset = $limit * $page;
125 $pageprev = $page - 1;
126 $pagenext = $page + 1;
128 $sortorder =
'desc,desc,desc';
131 $sortfield =
'b.datev,b.dateo,b.rowid';
135 if ($id > 0 || !empty($ref)) {
136 $result = $object->fetch($id, $ref);
137 $search_account = $object->id;
139 if (!($object->id > 0)) {
140 $langs->load(
"errors");
141 print($langs->trans(
'ErrorRecordNotFound'));
146 $mode_balance_ok =
false;
148 if (($sortfield ==
'b.datev' || $sortfield ==
'b.datev,b.dateo,b.rowid')) {
149 $sortfield =
'b.datev,b.dateo,b.rowid';
150 if ($id > 0 || !empty($ref) || $search_account > 0) {
151 $mode_balance_ok =
true;
156 $hookmanager->initHooks(array(
'banktransactionlist', $contextpage));
160 $extrafields->fetch_name_optionals_label(
'banktransaction');
161 $search_array_options = $extrafields->getOptionalsFromPost(
'banktransaction',
'',
'search_');
163 $arrayfields = array(
164 'b.rowid'=>array(
'label'=>$langs->trans(
"Ref"),
'checked'=>1,
'position'=>10),
165 'b.label'=>array(
'label'=>$langs->trans(
"Description"),
'checked'=>1,
'position'=>20),
166 'b.dateo'=>array(
'label'=>$langs->trans(
"DateOperationShort"),
'checked'=>1,
'position'=>30),
167 'b.datev'=>array(
'label'=>$langs->trans(
"DateValueShort"),
'checked'=>1,
'position'=>40),
168 'type'=>array(
'label'=>$langs->trans(
"Type"),
'checked'=>1,
'position'=>50),
169 'b.num_chq'=>array(
'label'=>$langs->trans(
"Numero"),
'checked'=>1,
'position'=>60),
170 'bu.label'=>array(
'label'=>$langs->trans(
"ThirdParty").
'/'.$langs->trans(
"User"),
'checked'=>1,
'position'=>70),
171 'ba.ref'=>array(
'label'=>$langs->trans(
"BankAccount"),
'checked'=>(($id > 0 || !empty($ref)) ? 0 : 1),
'position'=>80),
172 'b.debit'=>array(
'label'=>$langs->trans(
"Debit"),
'checked'=>1,
'position'=>90),
173 'b.credit'=>array(
'label'=>$langs->trans(
"Credit"),
'checked'=>1,
'position'=>100),
174 'balancebefore'=>array(
'label'=>$langs->trans(
"BalanceBefore"),
'checked'=>0,
'position'=>110),
175 'balance'=>array(
'label'=>$langs->trans(
"Balance"),
'checked'=>1,
'position'=>120),
176 'b.num_releve'=>array(
'label'=>$langs->trans(
"AccountStatement"),
'checked'=>1,
'position'=>130),
177 'b.conciliated'=>array(
'label'=>$langs->trans(
"BankLineReconciled"),
'enabled'=> $object->rappro,
'checked'=>($action ==
'reconcile' ? 1 : 0),
'position'=>140),
178 'b.fk_bordereau'=>array(
'label'=>$langs->trans(
"ChequeNumber"),
'checked'=>0,
'position'=>150),
181 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_array_fields.tpl.php';
190 if (
GETPOST(
'cancel',
'alpha')) {
194 if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
198 $parameters = array();
199 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
204 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
206 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
207 $search_dt_start =
'';
209 $search_dv_start =
'';
217 $search_description =
'';
218 $search_thirdparty_user =
'';
219 $search_num_releve =
'';
220 $search_conciliated =
'';
221 $search_fk_bordereau =
'';
224 $search_account =
"";
225 if ($id > 0 || !empty($ref)) {
226 $search_account = $object->id;
230 if (empty($reshook)) {
231 $objectclass =
'Account';
232 $objectlabel =
'BankTransaction';
233 $permissiontoread = !empty($user->rights->banque->lire);
234 $permissiontodelete = !empty($user->rights->banque->modifier);
235 $uploaddir = $conf->bank->dir_output;
236 include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
239 $rowids =
GETPOST(
'rowid',
'array');
242 if ((
GETPOST(
'confirm_savestatement',
'alpha') ||
GETPOST(
'confirm_reconcile',
'alpha'))
243 && (
GETPOST(
"num_releve",
"alpha") || !empty($rowids))
244 && !empty($user->rights->banque->consolidate)
249 $num_releve =
GETPOST(
"num_releve",
"alpha");
254 $rowids =
GETPOST(
'rowid',
'array');
256 if (!empty($rowids) && is_array($rowids)) {
257 foreach ($rowids as $row) {
259 $result = $bankline->fetch($row);
260 $bankline->num_releve = $num_releve;
261 $result = $bankline->update_conciliation($user,
GETPOST(
"cat"),
GETPOST(
'confirm_reconcile',
'alpha') ? 1 : 0);
271 $langs->load(
"errors");
276 $langs->load(
"errors");
277 setEventMessages($langs->trans(
"ErrorPleaseTypeBankTransactionReportName"),
null,
'errors');
281 $param =
'action=reconcile&contextpage=banktransactionlist&id='.((int) $id).
'&search_account='.((int) $id);
283 $param .=
'&page='.urlencode($page);
286 $param .=
'&offset='.urlencode($offset);
289 $param .=
'&limit='.urlencode($limit);
291 if ($search_conciliated !=
'' && $search_conciliated !=
'-1') {
292 $param .=
'&search_conciliated='.urlencode($search_conciliated);
294 if ($search_thirdparty_user) {
295 $param .=
'&search_thirdparty='.urlencode($search_thirdparty_user);
297 if ($search_num_releve) {
298 $param .=
'&search_num_releve='.urlencode($search_num_releve);
300 if ($search_description) {
301 $param .=
'&search_description='.urlencode($search_description);
304 $param .=
'&search_start_dtmonth='.GETPOST(
'search_start_dtmonth',
'int').
'&search_start_dtday='.
GETPOST(
'search_start_dtday',
'int').
'&search_start_dtyear='.
GETPOST(
'search_start_dtyear',
'int');
307 $param .=
'&search_end_dtmonth='.GETPOST(
'search_end_dtmonth',
'int').
'&search_end_dtday='.
GETPOST(
'search_end_dtday',
'int').
'&search_end_dtyear='.
GETPOST(
'search_end_dtyear',
'int');
310 $param .=
'&search_start_dvmonth='.GETPOST(
'search_start_dvmonth',
'int').
'&search_start_dvday='.
GETPOST(
'search_start_dvday',
'int').
'&search_start_dvyear='.
GETPOST(
'search_start_dvyear',
'int');
313 $param .=
'&search_end_dvmonth='.GETPOST(
'search_end_dvmonth',
'int').
'&search_end_dvday='.
GETPOST(
'search_end_dvday',
'int').
'&search_end_dvyear='.
GETPOST(
'search_end_dvyear',
'int');
316 $param .=
'&search_type='.urlencode($search_type);
319 $param .=
'&search_debit='.urlencode($search_debit);
321 if ($search_credit) {
322 $param .=
'&search_credit='.urlencode($search_credit);
324 $param .=
'&sortfield='.urlencode($sortfield).
'&sortorder='.urlencode($sortorder);
325 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?'.$param);
331 if (
GETPOST(
'save') && !$cancel && !empty($user->rights->banque->modifier)) {
340 $operation =
GETPOST(
"operation",
'alpha');
341 $num_chq =
GETPOST(
"num_chq",
'alpha');
342 $label =
GETPOST(
"label",
'alpha');
343 $cat1 =
GETPOST(
"cat1",
'alpha');
345 $bankaccountid = $id;
346 if (
GETPOST(
'add_account',
'int') > 0) {
347 $bankaccountid =
GETPOST(
'add_account',
'int');
351 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
355 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
359 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Label")),
null,
'errors');
363 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
365 if (!($bankaccountid > 0)) {
367 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"BankAccount")),
null,
'errors');
375 if (!$error && !empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT)) {
377 $objecttmp->fetch($bankaccountid);
378 $insertid = $objecttmp->addline($dateop, $operation, $label, $amount, $num_chq, ($cat1 > 0 ? $cat1 : 0), $user,
'',
'', $search_accountancy_code);
381 header(
"Location: ".$_SERVER[
'PHP_SELF'].($id ?
"?id=".$id :
''));
391 if ($action ==
'confirm_delete' && $confirm ==
'yes' && !empty($user->rights->banque->modifier)) {
393 $result = $accline->fetch(
GETPOST(
"rowid",
"int"));
394 $result = $accline->delete($user);
410 $companystatic =
new Societe($db);
411 $bankaccountstatic =
new Account($db);
412 $userstatic=
new User($db);
415 $societestatic =
new Societe($db);
416 $userstatic =
new User($db);
418 $loanstatic =
new Loan($db);
420 $donstatic =
new Don($db);
429 $bankstatic =
new Account($db);
437 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
438 $param .=
'&contextpage='.urlencode($contextpage);
440 if ($limit > 0 && $limit != $conf->liste_limit) {
441 $param .=
'&limit='.urlencode($limit);
444 $param .=
'&id='.urlencode($id);
447 $param .=
'&ref='.urlencode($ref);
449 if (!empty($search_ref)) {
450 $param .=
'&search_ref='.urlencode($search_ref);
452 if (!empty($search_description)) {
453 $param .=
'&search_description='.urlencode($search_description);
455 if (!empty($search_type)) {
456 $param .=
'&type='.urlencode($search_type);
458 if (!empty($search_thirdparty_user)) {
459 $param .=
'&search_thirdparty='.urlencode($search_thirdparty_user);
461 if (!empty($search_debit)) {
462 $param .=
'&search_debit='.urlencode($search_debit);
464 if (!empty($search_credit)) {
465 $param .=
'&search_credit='.urlencode($search_credit);
467 if ($search_account > 0) {
468 $param .=
'&search_account='.urlencode($search_account);
470 if (!empty($search_num_releve)) {
471 $param .=
'&search_num_releve='.urlencode($search_num_releve);
473 if ($search_conciliated !=
'' && $search_conciliated !=
'-1') {
474 $param .=
'&search_conciliated='.urlencode($search_conciliated);
476 if ($search_fk_bordereau > 0) {
477 $param .=
'$&search_fk_bordereau='.urlencode($search_fk_bordereau);
479 if ($search_bid > 0) {
480 $param .=
'&search_bid='.urlencode($search_bid);
483 $param .=
'&search_start_dtmonth='.GETPOST(
'search_start_dtmonth',
'int').
'&search_start_dtday='.
GETPOST(
'search_start_dtday',
'int').
'&search_start_dtyear='.
GETPOST(
'search_start_dtyear',
'int');
486 $param .=
'&search_end_dtmonth='.GETPOST(
'search_end_dtmonth',
'int').
'&search_end_dtday='.
GETPOST(
'search_end_dtday',
'int').
'&search_end_dtyear='.
GETPOST(
'search_end_dtyear',
'int');
489 $param .=
'&search_start_dvmonth='.GETPOST(
'search_start_dvmonth',
'int').
'&search_start_dvday='.
GETPOST(
'search_start_dvday',
'int').
'&search_start_dvyear='.
GETPOST(
'search_start_dvyear',
'int');
492 $param .=
'&search_end_dvmonth='.GETPOST(
'search_end_dvmonth',
'int').
'&search_end_dvday='.
GETPOST(
'search_end_dvday',
'int').
'&search_end_dvyear='.
GETPOST(
'search_end_dvyear',
'int');
494 if ($search_req_nb) {
495 $param .=
'&req_nb='.urlencode($search_req_nb);
497 if (
GETPOST(
"search_thirdparty",
'int')) {
498 $param .=
'&thirdparty='.urlencode(
GETPOST(
"search_thirdparty",
'int'));
500 if ($optioncss !=
'') {
501 $param .=
'&optioncss='.urlencode($optioncss);
503 if ($action ==
'reconcile') {
504 $param .=
'&action=reconcile';
512 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
516 $buttonreconcile =
'';
519 if ($id > 0 || !empty($ref)) {
520 $title = $object->ref.
' - '.$langs->trans(
"Transactions");
522 $title = $langs->trans(
"BankTransactions");
529 if ($id > 0 || !empty($ref)) {
531 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/bankcateg.class.php';
534 foreach ($bankcateg->fetchAll() as $bankcategory) {
535 $options[$bankcategory->id] = $bankcategory->label;
540 print
dol_get_fiche_head($head,
'journal', $langs->trans(
"FinancialAccount"), 0,
'account');
542 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/bank/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
544 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref,
'', 0,
'',
'', 1);
553 if ($action !=
'reconcile') {
554 if ($object->canBeConciliated() > 0) {
555 $allowautomaticconciliation =
false;
556 $titletoconciliatemanual = $langs->trans(
"Conciliate");
557 $titletoconciliateauto = $langs->trans(
"Conciliate");
558 if ($allowautomaticconciliation) {
559 $titletoconciliatemanual .=
' ('.$langs->trans(
"Manual").
')';
560 $titletoconciliateauto .=
' ('.$langs->trans(
"Auto").
')';
564 if ($user->rights->banque->consolidate) {
566 $newparam = preg_replace(
'/search_conciliated=\d+/i',
'', $newparam);
567 $buttonreconcile =
'<a class="butAction" style="margin-bottom: 5px !important; margin-top: 5px !important" href="'.DOL_URL_ROOT.
'/compta/bank/bankentries_list.php?action=reconcile&sortfield=b.datev,b.dateo,b.rowid&sortorder=asc,asc,asc&search_conciliated=0'.$newparam.
'">'.$titletoconciliatemanual.
'</a>';
569 $buttonreconcile =
'<a class="butActionRefused" style="margin-bottom: 5px !important; margin-top: 5px !important" title="'.$langs->trans(
"NotEnoughPermissions").
'" href="#">'.$titletoconciliatemanual.
'</a>';
572 if ($allowautomaticconciliation) {
574 if ($user->rights->banque->consolidate) {
576 $newparam = preg_replace(
'/search_conciliated=\d+/i',
'', $newparam);
577 $buttonreconcile .=
' <a class="butAction" style="margin-bottom: 5px !important; margin-top: 5px !important" href="'.DOL_URL_ROOT.
'/compta/bank/bankentries_list.php?action=reconcile&sortfield=b.datev,b.dateo,b.rowid&sortorder=asc,asc,asc&search_conciliated=0'.$newparam.
'">'.$titletoconciliateauto.
'</a>';
579 $buttonreconcile .=
' <a class="butActionRefused" style="margin-bottom: 5px !important; margin-top: 5px !important" title="'.$langs->trans(
"NotEnoughPermissions").
'" href="#">'.$titletoconciliateauto.
'</a>';
586 $sql =
"SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro as conciliated, b.num_releve, b.num_chq,";
587 $sql .=
" b.fk_account, b.fk_type, b.fk_bordereau,";
588 $sql .=
" ba.rowid as bankid, ba.ref as bankref";
590 if (!empty($extrafields->attributes[$object->table_element][
'label'])) {
591 foreach ($extrafields->attributes[$object->table_element][
'label'] as $key => $val) {
592 $sql .= ($extrafields->attributes[$object->table_element][
'type'][$key] !=
'separate' ?
", ef.".$key.
" as options_".$key :
'');
596 $parameters = array();
597 $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
598 $sql .= $hookmanager->resPrint;
600 if ($search_bid > 0) {
601 $sql .= MAIN_DB_PREFIX.
"bank_class as l,";
603 $sql .=
" ".MAIN_DB_PREFIX.
"bank_account as ba,";
604 $sql .=
" ".MAIN_DB_PREFIX.
"bank as b";
605 if (!empty($extrafields->attributes[$object->table_element][
'label']) && is_array($extrafields->attributes[$object->table_element][
'label']) && count($extrafields->attributes[$object->table_element][
'label'])) {
606 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element.
"_extrafields as ef on (b.rowid = ef.fk_object)";
608 $sql .=
" WHERE b.fk_account = ba.rowid";
609 $sql .=
" AND ba.entity IN (".getEntity(
'bank_account').
")";
610 if ($search_account > 0) {
611 $sql .=
" AND b.fk_account = ".((int) $search_account);
615 $sql .=
" AND b.dateo >= '".$db->idate($search_dt_start).
"'";
618 $sql .=
" AND b.dateo <= '".$db->idate($search_dt_end).
"'";
622 $sql .=
" AND b.datev >= '".$db->idate($search_dv_start).
"'";
625 $sql .=
" AND b.datev <= '".$db->idate($search_dv_end).
"'";
630 if ($search_req_nb) {
633 if ($search_num_releve) {
636 if ($search_conciliated !=
'' && $search_conciliated !=
'-1') {
637 $sql .=
" AND b.rappro = ".((int) $search_conciliated);
639 if ($search_fk_bordereau > 0) {
640 $sql .=
" AND b.fk_bordereau = " . ((int) $search_fk_bordereau);
642 if ($search_thirdparty_user) {
643 $sql.=
" AND (b.rowid IN ";
644 $sql.=
" ( SELECT bu.fk_bank FROM ".MAIN_DB_PREFIX.
"bank_url AS bu";
645 $sql.=
" JOIN ".MAIN_DB_PREFIX.
"bank AS b2 ON b2.rowid = bu.fk_bank";
646 $sql.=
" JOIN ".MAIN_DB_PREFIX.
"user AS subUser ON (bu.type = 'user' AND bu.url_id = subUser.rowid)";
647 $sql.=
" WHERE ".
natural_search(array(
"subUser.firstname",
"subUser.lastname"), $search_thirdparty_user,
'', 1).
")";
649 $sql.=
" OR b.rowid IN ";
650 $sql.=
" ( SELECT bu.fk_bank FROM ".MAIN_DB_PREFIX.
"bank_url AS bu";
651 $sql.=
" JOIN ".MAIN_DB_PREFIX.
"bank AS b2 ON b2.rowid = bu.fk_bank";
652 $sql.=
" JOIN ".MAIN_DB_PREFIX.
"societe AS subSoc ON (bu.type = 'company' AND bu.url_id = subSoc.rowid)";
653 $sql.=
" WHERE ".
natural_search(array(
"subSoc.nom"), $search_thirdparty_user,
'', 1);
656 if ($search_description) {
657 $search_description_to_use = $search_description;
658 $arrayoffixedlabels = array(
660 'CustomerInvoicePayment',
'CustomerInvoicePaymentBack',
661 'SupplierInvoicePayment',
'SupplierInvoicePaymentBack',
663 'ExpenseReportPayment',
664 'SocialContributionPayment',
665 'SubscriptionPayment',
668 foreach ($arrayoffixedlabels as $keyforlabel) {
669 $translatedlabel = $langs->transnoentitiesnoconv($keyforlabel);
670 if (preg_match(
'/'.$search_description.
'/i', $translatedlabel)) {
671 $search_description_to_use .=
"|".$keyforlabel;
677 if ($search_bid > 0) {
678 $sql .=
" AND b.rowid = l.lineid AND l.fk_categ = ".((int) $search_bid);
680 if (!empty($search_type)) {
681 $sql .=
" AND b.fk_type = '".$db->escape($search_type).
"'";
686 $sql .=
' AND b.amount <= 0';
688 if ($search_credit) {
690 $sql .=
' AND b.amount >= 0';
693 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
696 $parameters = array();
697 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
698 $sql .= $hookmanager->resPrint;
700 $sql .= $db->order($sortfield, $sortorder);
704 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
705 $result = $db->query(
$sql);
710 if (($id > 0 || !empty($ref)) && ((
string) $page ==
'')) {
713 $page = ($nbtotalofpages - 1);
714 $offset = $limit * $page;
719 if ($page >= $nbtotalofpages) {
721 $page = ($nbtotalofpages - 1);
722 $offset = $limit * $page;
730 if (empty($search_account)) {
731 $mode_balance_ok =
false;
734 if (!empty($search_ref)) {
735 $mode_balance_ok =
false;
737 if (!empty($search_description)) {
738 $mode_balance_ok =
false;
740 if (!empty($search_type)) {
741 $mode_balance_ok =
false;
743 if (!empty($search_debit)) {
744 $mode_balance_ok =
false;
746 if (!empty($search_credit)) {
747 $mode_balance_ok =
false;
749 if (!empty($search_thirdparty_user)) {
750 $mode_balance_ok =
false;
752 if ($search_conciliated !=
'' && $search_conciliated !=
'-1') {
753 $mode_balance_ok =
false;
755 if (!empty($search_num_releve)) {
756 $mode_balance_ok =
false;
758 if (!empty($search_fk_bordereau)) {
759 $mode_balance_ok =
false;
762 $sql .= $db->plimit($limit + 1, $offset);
764 dol_syslog(
'compta/bank/bankentries_list.php', LOG_DEBUG);
765 $resql = $db->query(
$sql);
767 $num = $db->num_rows($resql);
769 $arrayofselected = (!empty($toselect) && is_array($toselect)) ? $toselect : array();
772 $arrayofmassactions = array(
777 if (in_array($massaction, array(
'presend',
'predelete'))) {
778 $arrayofmassactions = array();
780 $massactionbutton =
$form->selectMassAction(
'', $arrayofmassactions);
783 if ($action ==
'delete') {
784 $text = $langs->trans(
'ConfirmDeleteTransaction');
785 print
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&rowid='.
GETPOST(
"rowid",
'int'), $langs->trans(
'DeleteTransaction'), $text,
'confirm_delete',
null,
'', 1);
789 print
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'" name="search_form">'.
"\n";
790 if ($optioncss !=
'') {
791 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
793 print
'<input type="hidden" name="token" value="'.newToken().
'">';
794 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
795 print
'<input type="hidden" name="action" value="'.($action !=
'delete' ? $action :
'search').
'">';
797 print
'<input type="hidden" name="view" value="'.dol_escape_htmltag($view).
'">';
799 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
800 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
801 print
'<input type="hidden" name="page" value="'.$page.
'">';
802 print
'<input type="hidden" name="id" value="'.$id.
'">';
803 print
'<input type="hidden" name="ref" value="'.$ref.
'">';
805 print
'<input type="hidden" name="bid" value="'.GETPOST(
"bid",
'int').
'">';
809 if ($user->rights->banque->consolidate && $action ==
'reconcile') {
810 print
'<div class="valignmiddle inline-block" style="padding-right: 20px;">';
811 print
'<strong>'.$langs->trans(
"InputReceiptNumber").
'</strong>: ';
812 print
'<input class="flat" id="num_releve" name="num_releve" type="text" value="'.(GETPOST(
'num_releve') ?
GETPOST(
'num_releve') :
'').
'" size="10">';
814 if (is_array($options) && count($options)) {
815 print $langs->trans(
"EventualyAddCategory").
': ';
818 print
'<br><div style="margin-top: 5px;"><span class="opacitymedium">'.$langs->trans(
"ThenCheckLinesAndConciliate").
'</span> ';
819 print
'<input class="button" name="confirm_savestatement" type="submit" value="'.$langs->trans(
"SaveStatementOnly").
'">';
820 print
' '.$langs->trans(
"or").
' ';
821 print
'<input class="button" name="confirm_reconcile" type="submit" value="'.$langs->trans(
"Conciliate").
'">';
822 print
' '.$langs->trans(
"or").
' ';
823 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
829 $sql =
"SELECT DISTINCT num_releve FROM ".MAIN_DB_PREFIX.
"bank";
830 $sql .=
" WHERE fk_account = ".((int) $object->id).
" AND num_releve IS NOT NULL";
831 $sql .= $db->order(
"num_releve",
"DESC");
832 $sql .= $db->plimit($nbmax + 1);
834 print $langs->trans(
"LastAccountStatements").
' : ';
835 $resqlr = $db->query(
$sql);
837 $numr = $db->num_rows($resqlr);
840 while (($i < $numr) && ($i < $nbmax)) {
841 $objr = $db->fetch_object($resqlr);
843 $last_releve = $objr->num_releve;
847 $liste =
'<a href="'.DOL_URL_ROOT.
'/compta/bank/releve.php?account='.$id.
'&num='.$objr->num_releve.
'">'.$objr->num_releve.
'</a> '.$liste;
849 if ($numr >= $nbmax) {
850 $liste =
"... ".$liste;
854 print
'<b>'.$langs->trans(
"None").
'</b>';
861 if (!empty($conf->global->BANK_REPORT_LAST_NUM_RELEVE)) {
863 <script type="text/javascript">
864 $("#num_releve").val("' . $last_releve.
'");
872 if (!empty($user->rights->banque->modifier) && $action ==
'addline' && !empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT)) {
875 print
'<table class="noborder centpercent">';
877 print
'<tr class="liste_titre">';
878 print
'<td>'.$langs->trans(
"Description").
'</td>';
879 print
'<td>'.$langs->trans(
"Date").
'</td>';
880 print
'<td> </td>';
881 print
'<td>'.$langs->trans(
"Type").
'</td>';
882 print
'<td>'.$langs->trans(
"Numero").
'</td>';
883 print
'<td class=right>'.$langs->trans(
"BankAccount").
'</td>';
884 print
'<td class=right>'.$langs->trans(
"Debit").
'</td>';
885 print
'<td class=right>'.$langs->trans(
"Credit").
'</td>';
892 print
'<td align="center"> </td>';
897 print
'<input name="label" class="flat minwidth200" type="text" value="'.GETPOST(
"label",
"alpha").
'">';
898 if (is_array($options) && count($options)) {
899 print
'<br>'.$langs->trans(
"Rubrique").
': ';
903 print
'<td class="nowrap">';
904 print
$form->selectDate(empty($dateop) ?-1 : $dateop,
'op', 0, 0, 0,
'transaction');
906 print
'<td> </td>';
907 print
'<td class="nowrap">';
911 print
'<input name="num_chq" class="flat" type="text" size="4" value="'.GETPOST(
"num_chq",
"alpha").
'">';
915 print
'<td class=right>';
916 $form->select_comptes(
GETPOST(
'add_account',
'int') ?
GETPOST(
'add_account',
'int') : $search_account,
'add_account', 0,
'', 1, ($id > 0 || !empty($ref) ?
' disabled="disabled"' :
''));
919 print
'<td class="right"><input name="adddebit" class="flat" type="text" size="4" value="'.GETPOST(
"adddebit",
"alpha").
'"></td>';
920 print
'<td class="right"><input name="addcredit" class="flat" type="text" size="4" value="'.GETPOST(
"addcredit",
"alpha").
'"></td>';
927 print
'<td class="center">';
928 print
'<input type="submit" name="save" class="button buttongen marginbottomonly button-add" value="'.$langs->trans(
"Add").
'"><br>';
929 print
'<input type="submit" name="cancel" class="button buttongen marginbottomonly button-cancel" value="'.$langs->trans(
"Cancel").
'">';
937 $urlajax = DOL_URL_ROOT.
'/core/ajax/bankconciliate.php?token='.
currentToken();
939 <script type="text/javascript">
941 $("a.ajaxforbankoperationchange").each(function(){
942 var current = $(this);
943 current.click(function()
945 var url = "'.$urlajax.
'&"+current.attr("href").split("?")[1];
946 $.get(url, function(data)
950 current.parent().parent().find(".spanforajaxedit").replaceWith(data);
965 if ($action !=
'addline' && $action !=
'reconcile') {
966 if (empty($conf->global->BANK_DISABLE_DIRECT_INPUT)) {
967 if (empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT)) {
968 $newcardbutton =
dolGetButtonTitle($langs->trans(
'AddBankRecord'),
'',
'fa fa-plus-circle', DOL_URL_ROOT.
'/compta/bank/various_payment/card.php?action=create&accountid='.urlencode($search_account).
'&backtopage='.urlencode($_SERVER[
'PHP_SELF'].
'?id='.urlencode($search_account)),
'', $user->rights->banque->modifier);
971 $newcardbutton =
dolGetButtonTitle($langs->trans(
'AddBankRecord'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?action=addline&token='.
newToken().
'&page='.$page.$param,
'', $user->rights->banque->modifier);
974 $newcardbutton =
dolGetButtonTitle($langs->trans(
'AddBankRecord'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?action=addline&token='.
newToken().
'&page='.$page.$param,
'', -1);
986 if ($action !=
'addline' && $action !=
'reconcile') {
987 $morehtml .= $buttonreconcile;
990 $morehtml .=
'<!-- Add New button -->'.$newcardbutton;
992 $picto =
'bank_account';
993 if ($id > 0 || !empty($ref)) {
997 print_barre_liste($langs->trans(
"BankTransactions"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num,
$nbtotalofrecords, $picto, 0, $morehtml,
'', $limit, 0, 0, 1);
1001 $param .=
'&page='.urlencode($page);
1004 $moreforfilter =
'';
1006 $moreforfilter .=
'<div class="divsearchfield">';
1007 $moreforfilter .= $langs->trans(
'DateOperationShort');
1008 $moreforfilter .= ($conf->browser->layout ==
'phone' ?
'<br>' :
' ');
1009 $moreforfilter .=
'<div class="nowrap inline-block">';
1010 $moreforfilter .=
$form->selectDate($search_dt_start,
'search_start_dt', 0, 0, 1,
"search_form", 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
1011 $moreforfilter .=
'</div>';
1012 $moreforfilter .= ($conf->browser->layout ==
'phone' ?
'' :
' ');
1013 $moreforfilter .=
'<div class="nowrap inline-block">';
1014 $moreforfilter .=
$form->selectDate($search_dt_end,
'search_end_dt', 0, 0, 1,
"search_form", 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
1015 $moreforfilter .=
'</div>';
1016 $moreforfilter .=
'</div>';
1018 $moreforfilter .=
'<div class="divsearchfield">';
1019 $moreforfilter .= $langs->trans(
'DateValueShort');
1020 $moreforfilter .= ($conf->browser->layout ==
'phone' ?
'<br>' :
' ');
1021 $moreforfilter .=
'<div class="nowrap inline-block">';
1022 $moreforfilter .=
$form->selectDate($search_dv_start,
'search_start_dv', 0, 0, 1,
"search_form", 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
1023 $moreforfilter .=
'</div>';
1024 $moreforfilter .= ($conf->browser->layout ==
'phone' ?
'' :
' ');
1025 $moreforfilter .=
'<div class="nowrap inline-block">';
1026 $moreforfilter .=
$form->selectDate($search_dv_end,
'search_end_dv', 0, 0, 1,
"search_form", 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
1027 $moreforfilter .=
'</div>';
1028 $moreforfilter .=
'</div>';
1032 if (
isModEnabled(
'categorie') && !empty($user->rights->categorie->lire)) {
1033 $langs->load(
'categories');
1036 $moreforfilter .=
'<div class="divsearchfield">';
1037 $tmptitle = $langs->trans(
'RubriquesTransactions');
1038 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_BANK_LINE, $search_bid,
'parent',
null,
null, 1);
1039 $moreforfilter .=
img_picto($tmptitle,
'category',
'class="pictofixedwidth"').$form->selectarray(
'search_bid', $cate_arbo, $search_bid, $tmptitle, 0, 0,
'', 0, 0, 0,
'',
'', 1);
1040 $moreforfilter .=
'</div>';
1044 $parameters = array();
1045 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters);
1046 if (empty($reshook)) {
1047 $moreforfilter .= $hookmanager->resPrint;
1049 $moreforfilter = $hookmanager->resPrint;
1052 if ($moreforfilter) {
1053 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
1054 print $moreforfilter;
1055 print
'</div>'.
"\n";
1058 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
1059 $selectedfields =
$form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage);
1061 if ($action ==
'reconcile') {
1062 $arrayfields[
'b.num_releve'][
'checked'] = 1;
1065 print
'<div class="div-table-responsive">';
1066 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
1069 print
'<tr class="liste_titre_filter">';
1070 if (!empty($arrayfields[
'b.rowid'][
'checked'])) {
1071 print
'<td class="liste_titre">';
1072 print
'<input type="text" class="flat" name="search_ref" size="2" value="'.dol_escape_htmltag($search_ref).
'">';
1075 if (!empty($arrayfields[
'b.label'][
'checked'])) {
1076 print
'<td class="liste_titre">';
1077 print
'<input type="text" class="flat maxwidth100" name="search_description" value="'.dol_escape_htmltag($search_description).
'">';
1080 if (!empty($arrayfields[
'b.dateo'][
'checked'])) {
1081 print
'<td class="liste_titre"> </td>';
1083 if (!empty($arrayfields[
'b.datev'][
'checked'])) {
1084 print
'<td class="liste_titre"> </td>';
1086 if (!empty($arrayfields[
'type'][
'checked'])) {
1087 print
'<td class="liste_titre" align="center">';
1088 print
$form->select_types_paiements(empty($search_type) ?
'' : $search_type,
'search_type',
'', 2, 1, 1, 0, 1,
'maxwidth100', 1);
1092 if (!empty($arrayfields[
'b.num_chq'][
'checked'])) {
1093 print
'<td class="liste_titre" align="center"><input type="text" class="flat" name="req_nb" value="'.dol_escape_htmltag($search_req_nb).
'" size="2"></td>';
1096 if (!empty($arrayfields[
'bu.label'][
'checked'])) {
1097 print
'<td class="liste_titre"><input type="text" class="flat maxwidth75" name="search_thirdparty" value="'.dol_escape_htmltag($search_thirdparty_user).
'"></td>';
1100 if (!empty($arrayfields[
'ba.ref'][
'checked'])) {
1101 print
'<td class="liste_titre">';
1102 $form->select_comptes($search_account,
'search_account', 0,
'', 1, ($id > 0 || !empty($ref) ?
' disabled="disabled"' :
''), 0,
'maxwidth100');
1106 if (!empty($arrayfields[
'b.debit'][
'checked'])) {
1107 print
'<td class="liste_titre right">';
1108 print
'<input type="text" class="flat width50" name="search_debit" value="'.dol_escape_htmltag($search_debit).
'">';
1112 if (!empty($arrayfields[
'b.credit'][
'checked'])) {
1113 print
'<td class="liste_titre right">';
1114 print
'<input type="text" class="flat width50" name="search_credit" value="'.dol_escape_htmltag($search_credit).
'">';
1118 if (!empty($arrayfields[
'balancebefore'][
'checked'])) {
1119 print
'<td class="liste_titre right">';
1120 $htmltext = $langs->trans(
"BalanceVisibilityDependsOnSortAndFilters", $langs->transnoentitiesnoconv(
"DateValue"));
1121 print
$form->textwithpicto(
'', $htmltext, 1);
1125 if (!empty($arrayfields[
'balance'][
'checked'])) {
1126 print
'<td class="liste_titre right">';
1127 $htmltext = $langs->trans(
"BalanceVisibilityDependsOnSortAndFilters", $langs->transnoentitiesnoconv(
"DateValue"));
1128 print
$form->textwithpicto(
'', $htmltext, 1);
1132 if (!empty($arrayfields[
'b.num_releve'][
'checked'])) {
1133 print
'<td class="liste_titre" align="center"><input type="text" class="flat" name="search_num_releve" value="'.dol_escape_htmltag($search_num_releve).
'" size="3"></td>';
1136 if (!empty($arrayfields[
'b.conciliated'][
'checked'])) {
1137 print
'<td class="liste_titre center parentonrightofpage">';
1138 print
$form->selectyesno(
'search_conciliated', $search_conciliated, 1,
false, 1, 1,
'search_status onrightofpage maxwidth75');
1142 if (!empty($arrayfields[
'b.fk_bordereau'][
'checked'])) {
1143 print
'<td class="liste_titre" align="center"><input type="text" class="flat" name="search_fk_bordereau" value="'.dol_escape_htmltag($search_fk_bordereau).
'" size="3"></td>';
1147 print
'<td class="liste_titre" align="middle">';
1148 $searchpicto =
$form->showFilterAndCheckAddButtons($massactionbutton ? 1 : 0,
'checkforselect', 1);
1154 print
'<tr class="liste_titre">';
1155 if (!empty($arrayfields[
'b.rowid'][
'checked'])) {
1156 print_liste_field_titre($arrayfields[
'b.rowid'][
'label'], $_SERVER[
'PHP_SELF'],
'b.rowid',
'', $param,
'', $sortfield, $sortorder);
1158 if (!empty($arrayfields[
'b.label'][
'checked'])) {
1159 print_liste_field_titre($arrayfields[
'b.label'][
'label'], $_SERVER[
'PHP_SELF'],
'b.label',
'', $param,
'', $sortfield, $sortorder);
1161 if (!empty($arrayfields[
'b.dateo'][
'checked'])) {
1162 print_liste_field_titre($arrayfields[
'b.dateo'][
'label'], $_SERVER[
'PHP_SELF'],
'b.dateo',
'', $param,
'', $sortfield, $sortorder,
"center ");
1164 if (!empty($arrayfields[
'b.datev'][
'checked'])) {
1165 print_liste_field_titre($arrayfields[
'b.datev'][
'label'], $_SERVER[
'PHP_SELF'],
'b.datev,b.dateo,b.rowid',
'', $param,
'align="center"', $sortfield, $sortorder);
1167 if (!empty($arrayfields[
'type'][
'checked'])) {
1168 print_liste_field_titre($arrayfields[
'type'][
'label'], $_SERVER[
'PHP_SELF'],
'',
'', $param,
'align="center"', $sortfield, $sortorder);
1170 if (!empty($arrayfields[
'b.num_chq'][
'checked'])) {
1171 print_liste_field_titre($arrayfields[
'b.num_chq'][
'label'], $_SERVER[
'PHP_SELF'],
'b.num_chq',
'', $param,
'', $sortfield, $sortorder,
"center ");
1173 if (!empty($arrayfields[
'bu.label'][
'checked'])) {
1174 print_liste_field_titre($arrayfields[
'bu.label'][
'label'], $_SERVER[
'PHP_SELF'],
'',
'', $param,
'', $sortfield, $sortorder);
1176 if (!empty($arrayfields[
'ba.ref'][
'checked'])) {
1177 print_liste_field_titre($arrayfields[
'ba.ref'][
'label'], $_SERVER[
'PHP_SELF'],
'ba.ref',
'', $param,
'', $sortfield, $sortorder);
1179 if (!empty($arrayfields[
'b.debit'][
'checked'])) {
1180 print_liste_field_titre($arrayfields[
'b.debit'][
'label'], $_SERVER[
'PHP_SELF'],
'b.amount',
'', $param,
'', $sortfield, $sortorder,
"right ");
1182 if (!empty($arrayfields[
'b.credit'][
'checked'])) {
1183 print_liste_field_titre($arrayfields[
'b.credit'][
'label'], $_SERVER[
'PHP_SELF'],
'b.amount',
'', $param,
'', $sortfield, $sortorder,
"right ");
1185 if (!empty($arrayfields[
'balancebefore'][
'checked'])) {
1186 print_liste_field_titre($arrayfields[
'balancebefore'][
'label'], $_SERVER[
'PHP_SELF'],
'',
'', $param,
'', $sortfield, $sortorder,
"right ");
1188 if (!empty($arrayfields[
'balance'][
'checked'])) {
1189 print_liste_field_titre($arrayfields[
'balance'][
'label'], $_SERVER[
'PHP_SELF'],
'',
'', $param,
'', $sortfield, $sortorder,
"right ");
1191 if (!empty($arrayfields[
'b.num_releve'][
'checked'])) {
1192 print_liste_field_titre($arrayfields[
'b.num_releve'][
'label'], $_SERVER[
'PHP_SELF'],
'b.num_releve',
'', $param,
'', $sortfield, $sortorder,
"center ");
1194 if (!empty($arrayfields[
'b.conciliated'][
'checked'])) {
1195 print_liste_field_titre($arrayfields[
'b.conciliated'][
'label'], $_SERVER[
'PHP_SELF'],
'b.rappro',
'', $param,
'', $sortfield, $sortorder,
"center ");
1197 if (!empty($arrayfields[
'b.fk_bordereau'][
'checked'])) {
1198 print_liste_field_titre($arrayfields[
'b.fk_bordereau'][
'label'], $_SERVER[
'PHP_SELF'],
'b.fk_bordereau',
'', $param,
'', $sortfield, $sortorder,
"center ");
1202 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
1204 $parameters = array(
'arrayfields'=>$arrayfields,
'param'=>$param,
'sortfield'=>$sortfield,
'sortorder'=>$sortorder);
1205 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
1206 print $hookmanager->resPrint;
1208 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'align="center"', $sortfield, $sortorder,
'maxwidthsearch ');
1213 $balancecalculated =
false;
1214 $posconciliatecol = 0;
1215 $cachebankaccount = array();
1220 while ($i < min($num, $limit)) {
1221 $objp = $db->fetch_object($resql);
1222 $links = $bankaccountstatic->get_url($objp->rowid);
1225 if (!$balancecalculated && (!empty($arrayfields[
'balancebefore'][
'checked']) || !empty($arrayfields[
'balance'][
'checked'])) && ($mode_balance_ok || $search_conciliated ===
'0')) {
1226 if (!$search_account) {
1227 dol_print_error(
'',
'account is not defined but $mode_balance_ok is true');
1234 $sqlforbalance =
'SELECT SUM(b.amount) as previoustotal';
1235 $sqlforbalance .=
" FROM ";
1236 $sqlforbalance .=
" ".MAIN_DB_PREFIX.
"bank_account as ba,";
1237 $sqlforbalance .=
" ".MAIN_DB_PREFIX.
"bank as b";
1238 $sqlforbalance .=
" WHERE b.fk_account = ba.rowid";
1239 $sqlforbalance .=
" AND ba.entity IN (".getEntity(
'bank_account').
")";
1240 $sqlforbalance .=
" AND b.fk_account = ".((int) $search_account);
1241 $sqlforbalance .=
" AND (b.datev < '".$db->idate($db->jdate($objp->dv)).
"' OR (b.datev = '".$db->idate($db->jdate($objp->dv)).
"' AND (b.dateo < '".$db->idate($db->jdate($objp->do)).
"' OR (b.dateo = '".$db->idate($db->jdate($objp->do)).
"' AND b.rowid < ".$objp->rowid.
"))))";
1242 $resqlforbalance = $db->query($sqlforbalance);
1244 if ($resqlforbalance) {
1245 $objforbalance = $db->fetch_object($resqlforbalance);
1246 if ($objforbalance) {
1248 if ($sortfield ==
'b.datev,b.dateo,b.rowid' && ($sortorder ==
'desc' || $sortorder ==
'desc,desc' || $sortorder ==
'desc,desc,desc')) {
1249 $balancebefore = $objforbalance->previoustotal + ($sign * $objp->amount);
1252 $balance = $objforbalance->previoustotal;
1259 $balancecalculated =
true;
1262 if ($user->rights->banque->consolidate && $action ==
'reconcile') {
1263 $tmpnbfieldbeforebalance = 0;
1264 $tmpnbfieldafterbalance = 0;
1265 $balancefieldfound = 0;
1266 foreach ($arrayfields as $key => $val) {
1267 if ($key ==
'balancebefore' || $key ==
'balance') {
1268 $balancefieldfound++;
1271 if (!empty($arrayfields[$key][
'checked'])) {
1272 if (!$balancefieldfound) {
1273 $tmpnbfieldbeforebalance++;
1275 $tmpnbfieldafterbalance++;
1280 $element =
'banktransaction';
1281 if (!empty($extrafields->attributes[$element][
'label']) && is_array($extrafields->attributes[$element][
'label']) && count($extrafields->attributes[$element][
'label'])) {
1282 foreach ($extrafields->attributes[$element][
'label'] as $key => $val) {
1283 if (!empty($arrayfields[
"ef.".$key][
'checked'])) {
1284 if (!empty($arrayfields[$key][
'checked'])) {
1285 if (!$balancefieldfound) {
1286 $tmpnbfieldbeforebalance++;
1288 $tmpnbfieldafterbalance++;
1295 print
'<tr class="oddeven trforbreak">';
1296 if ($tmpnbfieldbeforebalance) {
1297 print
'<td colspan="'.$tmpnbfieldbeforebalance.
'">';
1302 if (!empty($arrayfields[
'balancebefore'][
'checked'])) {
1303 print
'<td class="right">';
1304 if ($search_conciliated !==
'0') {
1309 if (!empty($arrayfields[
'balance'][
'checked'])) {
1310 print
'<td class="right">';
1311 if ($search_conciliated !==
'0') {
1316 if (!empty($arrayfields[
'b.num_releve'][
'checked'])) {
1317 print
'<td class="center">';
1318 print
'<input type="checkbox" id="selectAll" title="'.dol_escape_htmltag($langs->trans(
"SelectAll")).
'" />';
1319 print
' <script type="text/javascript">
1320 $("input#selectAll").change(function() {
1321 $("input[type=checkbox][name^=rowid]").prop("checked", $(this).is(":checked"));
1326 print
'<td colspan="'.($tmpnbfieldafterbalance + 1).
'">';
1333 if ($sortfield ==
'b.datev,b.dateo,b.rowid' && ($sortorder ==
'desc' || $sortorder ==
'desc,desc' || $sortorder ==
'desc,desc,desc')) {
1334 $balance =
price2num($balancebefore,
'MT');
1335 $balancebefore =
price2num($balancebefore - ($sign * $objp->amount),
'MT');
1337 $balancebefore =
price2num($balance,
'MT');
1338 $balance =
price2num($balance + ($sign * $objp->amount),
'MT');
1341 if (empty($cachebankaccount[$objp->bankid])) {
1342 $bankaccounttmp =
new Account($db);
1343 $bankaccounttmp->fetch($objp->bankid);
1344 $cachebankaccount[$objp->bankid] = $bankaccounttmp;
1345 $bankaccount = $bankaccounttmp;
1347 $bankaccount = $cachebankaccount[$objp->bankid];
1350 if (empty($conf->global->BANK_COLORIZE_MOVEMENT)) {
1351 $backgroundcolor =
"class='oddeven'";
1353 if ($objp->amount < 0) {
1355 $backgroundcolor =
'style="background: '.$color.
';"';
1358 $backgroundcolor =
'style="background: '.$color.
';"';
1362 $banklinestatic->id = $objp->rowid;
1363 $banklinestatic->ref = $objp->rowid;
1365 print
'<tr class="oddeven" '.$backgroundcolor.
'>';
1368 if (!empty($arrayfields[
'b.rowid'][
'checked'])) {
1369 print
'<td class="nowrap left">';
1370 print $banklinestatic->getNomUrl(1);
1373 $totalarray[
'nbfield']++;
1378 if (!empty($arrayfields[
'b.label'][
'checked'])) {
1382 preg_match(
'/\((.+)\)/i', $objp->label, $reg);
1383 if (!empty($reg[1]) && $langs->trans($reg[1]) != $reg[1]) {
1384 $labeltoshow = $langs->trans($reg[1]);
1386 if ($objp->label ==
'(payment_salary)') {
1387 $labeltoshow = $langs->trans(
"SalaryPayment");
1390 $titletoshow = $objp->label;
1395 print
'<td class="tdoverflowmax250"'.($titletoshow ?
' title="'.dol_escape_htmltag($titletoshow).
'"' :
'').
'>';
1398 $cachebankaccount = array();
1399 foreach ($links as $key => $val) {
1400 print
'<!-- '.$links[$key][
'type'].
' -->';
1401 if ($links[$key][
'type'] ==
'withdraw') {
1402 $banktransferstatic->id = $links[$key][
'url_id'];
1403 $banktransferstatic->ref = $links[$key][
'label'];
1404 print $banktransferstatic->getNomUrl(0).
' ';
1405 } elseif ($links[$key][
'type'] ==
'payment') {
1406 $paymentstatic->id = $links[$key][
'url_id'];
1407 $paymentstatic->ref = $links[$key][
'url_id'];
1408 $paymentstatic->date = $db->jdate($objp->do);
1409 print $paymentstatic->getNomUrl(2).
' ';
1410 } elseif ($links[$key][
'type'] ==
'payment_supplier') {
1411 $paymentsupplierstatic->id = $links[$key][
'url_id'];
1412 $paymentsupplierstatic->ref = $links[$key][
'url_id'];
1413 print $paymentsupplierstatic->getNomUrl(2).
' ';
1414 } elseif ($links[$key][
'type'] ==
'payment_sc') {
1415 $paymentscstatic->id = $links[$key][
'url_id'];
1416 $paymentscstatic->ref = $links[$key][
'url_id'];
1417 $paymentscstatic->label = $links[$key][
'label'];
1418 print $paymentscstatic->getNomUrl(2).
' ';
1419 } elseif ($links[$key][
'type'] ==
'payment_vat') {
1420 $paymentvatstatic->id = $links[$key][
'url_id'];
1421 $paymentvatstatic->ref = $links[$key][
'url_id'];
1422 print $paymentvatstatic->getNomUrl(2).
' ';
1423 } elseif ($links[$key][
'type'] ==
'payment_salary') {
1424 $paymentsalstatic->id = $links[$key][
'url_id'];
1425 $paymentsalstatic->ref = $links[$key][
'url_id'];
1426 $paymentsalstatic->label = $links[$key][
'label'];
1427 print $paymentsalstatic->getNomUrl(2).
' ';
1428 } elseif ($links[$key][
'type'] ==
'payment_loan') {
1429 print
'<a href="'.DOL_URL_ROOT.
'/loan/payment/card.php?id='.$links[$key][
'url_id'].
'">';
1430 print
' '.img_object($langs->trans(
'ShowPayment'),
'payment').
' ';
1432 } elseif ($links[$key][
'type'] ==
'payment_donation') {
1433 $paymentdonationstatic->id = $links[$key][
'url_id'];
1434 $paymentdonationstatic->ref = $links[$key][
'url_id'];
1435 print $paymentdonationstatic->getNomUrl(2).
' ';
1436 } elseif ($links[$key][
'type'] ==
'payment_expensereport') {
1437 $paymentexpensereportstatic->id = $links[$key][
'url_id'];
1438 $paymentexpensereportstatic->ref = $links[$key][
'url_id'];
1439 print $paymentexpensereportstatic->getNomUrl(2).
' ';
1440 } elseif ($links[$key][
'type'] ==
'payment_various') {
1441 $paymentvariousstatic->id = $links[$key][
'url_id'];
1442 $paymentvariousstatic->ref = $links[$key][
'url_id'];
1443 print $paymentvariousstatic->getNomUrl(2).
' ';
1444 } elseif ($links[$key][
'type'] ==
'banktransfert') {
1446 if ($objp->amount > 0) {
1447 $banklinestatic->fetch($links[$key][
'url_id']);
1448 $bankstatic->id = $banklinestatic->fk_account;
1449 $bankstatic->label = $banklinestatic->bank_account_ref;
1450 print $langs->trans(
"TransferFrom").
' ';
1451 print $bankstatic->getNomUrl(1,
'transactions');
1452 print
' '.$langs->trans(
"toward").
' ';
1453 $bankstatic->id = $objp->bankid;
1454 $bankstatic->label = $objp->bankref;
1455 print $bankstatic->getNomUrl(1,
'');
1458 $bankstatic->id = $objp->bankid;
1459 $bankstatic->label = $objp->bankref;
1460 print $langs->trans(
"TransferFrom").
' ';
1461 print $bankstatic->getNomUrl(1,
'');
1462 print
' '.$langs->trans(
"toward").
' ';
1463 $banklinestatic->fetch($links[$key][
'url_id']);
1464 $bankstatic->id = $banklinestatic->fk_account;
1465 $bankstatic->label = $banklinestatic->bank_account_ref;
1466 print $bankstatic->getNomUrl(1,
'transactions');
1470 } elseif ($links[$key][
'type'] ==
'company') {
1471 } elseif ($links[$key][
'type'] ==
'user') {
1472 } elseif ($links[$key][
'type'] ==
'member') {
1473 } elseif ($links[$key][
'type'] ==
'sc') {
1474 } elseif ($links[$key][
'type'] ==
'vat') {
1475 } elseif ($links[$key][
'type'] ==
'salary') {
1479 print
'<a href="'.$links[$key][
'url'].$links[$key][
'url_id'].
'">';
1480 if (preg_match(
'/^\((.*)\)$/i', $links[$key][
'label'], $reg)) {
1482 if ($reg[1] ==
'paiement') {
1483 $reg[1] =
'Payment';
1485 print $langs->trans($reg[1]);
1487 print $links[$key][
'label'];
1489 print
'</a>'.($labeltoshow ?
' - ' :
'');
1497 $totalarray[
'nbfield']++;
1502 if (!empty($arrayfields[
'b.dateo'][
'checked'])) {
1503 print
'<td align="center" class="nowrap">';
1504 print
'<span class="spanforajaxedit" id="dateoperation_'.$objp->rowid.
'">'.
dol_print_date($db->jdate($objp->do),
"day").
"</span>";
1506 print
'<span class="inline-block">';
1507 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=doprev&account='.$objp->bankid.
'&rowid='.$objp->rowid.
'">';
1509 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=donext&account='.$objp->bankid.
'&rowid='.$objp->rowid.
'">';
1514 $totalarray[
'nbfield']++;
1519 if (!empty($arrayfields[
'b.datev'][
'checked'])) {
1520 print
'<td align="center" class="nowrap">';
1521 print
'<span class="spanforajaxedit" id="datevalue_'.$objp->rowid.
'">'.
dol_print_date($db->jdate($objp->dv),
"day").
"</span>";
1523 print
'<span class="inline-block">';
1524 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=dvprev&account='.$objp->bankid.
'&rowid='.$objp->rowid.
'">';
1526 print
'<a class="ajaxforbankoperationchange" href="'.$_SERVER[
'PHP_SELF'].
'?action=dvnext&account='.$objp->bankid.
'&rowid='.$objp->rowid.
'">';
1531 $totalarray[
'nbfield']++;
1536 if (!empty($arrayfields[
'type'][
'checked'])) {
1537 print
'<td class="tdoverflowmax100 center">';
1538 $labeltype = ($langs->trans(
"PaymentTypeShort".$objp->fk_type) !=
"PaymentTypeShort".$objp->fk_type) ? $langs->trans(
"PaymentTypeShort".$objp->fk_type) : $langs->getLabelFromKey($db, $objp->fk_type,
'c_paiement',
'code',
'libelle',
'', 1);
1539 if ($labeltype ==
'SOLD') {
1546 $totalarray[
'nbfield']++;
1551 if (!empty($arrayfields[
'b.num_chq'][
'checked'])) {
1552 print
'<td class="nowrap" align="center">'.($objp->num_chq ?
dol_escape_htmltag($objp->num_chq) :
"").
"</td>\n";
1554 $totalarray[
'nbfield']++;
1559 if (!empty($arrayfields[
'bu.label'][
'checked'])) {
1560 print
'<td class="tdoverflowmax150">';
1562 $companylinked_id = 0;
1567 foreach ($links as $key => $value) {
1568 if ($links[$key][
'type'] ==
'payment_sc') {
1569 $type_link =
'payment_sc';
1571 if ($links[$key][
'type'] ==
'payment_salary') {
1572 $type_link =
'payment_salary';
1575 if ($links[$key][
'type'] ==
'company') {
1576 $companylinked_id = $links[$key][
'url_id'];
1578 if ($links[$key][
'type'] ==
'user') {
1579 $userlinked_id = $links[$key][
'url_id'];
1583 if ($companylinked_id) {
1585 $companystatic->fetch($companylinked_id);
1586 print $companystatic->getNomUrl(1);
1587 } elseif ($userlinked_id &&
1588 (($type_link ==
'payment_salary' && !empty($user->rights->salaries->read))
1589 || ($type_link ==
'payment_sc' && !empty($user->rights->tax->charges->lire)))) {
1591 if (!empty($conf->cache[
'user'][$userlinked_id])) {
1592 $tmpuser = $conf->cache[
'user'][$userlinked_id];
1594 $tmpuser =
new User($db);
1595 $tmpuser->fetch($userlinked_id);
1596 $conf->cache[
'user'][$userlinked_id] = $tmpuser;
1598 print $tmpuser->getNomUrl(1);
1605 $totalarray[
'nbfield']++;
1610 if (!empty($arrayfields[
'ba.ref'][
'checked'])) {
1611 print
'<td class="nowrap">';
1612 print $bankaccount->getNomUrl(1);
1615 $totalarray[
'nbfield']++;
1620 if (!empty($arrayfields[
'b.debit'][
'checked'])) {
1621 print
'<td class="nowrap right"><span class="amount">';
1622 if ($objp->amount < 0) {
1623 print
price($objp->amount * -1);
1624 $totalarray[
'totaldeb'] += $objp->amount;
1626 print
"</span></td>\n";
1628 $totalarray[
'nbfield']++;
1631 $totalarray[
'totaldebfield'] = $totalarray[
'nbfield'];
1636 if (!empty($arrayfields[
'b.credit'][
'checked'])) {
1637 print
'<td class="nowrap right"><span class="amount">';
1638 if ($objp->amount > 0) {
1639 print
price($objp->amount);
1640 $totalarray[
'totalcred'] += $objp->amount;
1642 print
"</span></td>\n";
1644 $totalarray[
'nbfield']++;
1647 $totalarray[
'totalcredfield'] = $totalarray[
'nbfield'];
1652 if (!empty($arrayfields[
'balancebefore'][
'checked'])) {
1653 if ($mode_balance_ok) {
1654 if ($balancebefore >= 0) {
1655 print
'<td class="nowrap right"> '.price($balancebefore).
'</td>';
1657 print
'<td class="error nowrap right"> '.price($balancebefore).
'</td>';
1660 print
'<td class="right">-</td>';
1663 $totalarray[
'nbfield']++;
1668 if (!empty($arrayfields[
'balance'][
'checked'])) {
1669 if ($mode_balance_ok) {
1670 if ($balance >= 0) {
1671 print
'<td class="nowrap right"> '.price($balance).
'</td>';
1673 print
'<td class="error nowrap right"> '.price($balance).
'</td>';
1676 print
'<td class="right">-</td>';
1679 $totalarray[
'nbfield']++;
1683 if (!empty($arrayfields[
'b.num_releve'][
'checked'])) {
1684 print
'<td class="nowraponall" align="center">';
1686 if ($bankaccount->canBeConciliated() > 0) {
1687 if ($objp->num_releve) {
1688 print
'<a href="releve.php?num='.urlencode($objp->num_releve).
'&account='.urlencode($objp->bankid).
'&save_lastsearch_values=1">'.
dol_escape_htmltag($objp->num_releve).
'</a>';
1690 if (!$objp->conciliated && $action ==
'reconcile') {
1691 if ($objp->num_releve) {
1694 print
'<input class="flat" name="rowid['.$objp->rowid.
']" type="checkbox" value="'.$objp->rowid.
'" size="1"'.(!empty($_POST[
'rowid'][$objp->rowid]) ?
' checked' :
'').
'>';
1699 $totalarray[
'nbfield']++;
1700 $posconciliatecol = $totalarray[
'nbfield'];
1704 if (!empty($arrayfields[
'b.conciliated'][
'checked'])) {
1705 print
'<td class="nowraponall" align="center">';
1706 print
yn($objp->conciliated);
1709 $totalarray[
'nbfield']++;
1713 if (!empty($arrayfields[
'b.fk_bordereau'][
'checked'])) {
1714 $bordereaustatic->fetch($objp->fk_bordereau);
1715 print
'<td class="nowraponall" align="center">';
1716 print $bordereaustatic->getNomUrl();
1719 $totalarray[
'nbfield']++;
1724 print
'<td class="nowraponall" align="center">';
1726 if ($objp->conciliated && $bankaccount->canBeConciliated() > 0) {
1727 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/compta/bank/line.php?save_lastsearch_values=1&rowid='.$objp->rowid.($object->id > 0 ?
'&account='.$object->id :
'').
'&page='.$page.
'">';
1731 if ($user->rights->banque->modifier || $user->rights->banque->consolidate) {
1732 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/compta/bank/line.php?save_lastsearch_values=1&rowid='.$objp->rowid.($object->id > 0 ?
'&account='.$object->id :
'').
'&page='.$page.
'">';
1736 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/compta/bank/line.php?save_lastsearch_values=1&rowid='.$objp->rowid.($object->id > 0 ?
'&account='.$object->id :
'').
'&page='.$page.
'">';
1740 if ($bankaccount->canBeConciliated() > 0 && empty($objp->conciliated)) {
1741 if ($db->jdate($objp->dv) < ($now - $conf->bank->rappro->warning_delay)) {
1742 print
' '.img_warning($langs->trans(
"ReconciliationLate"));
1745 if ($user->rights->banque->modifier) {
1746 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?action=delete&token='.
newToken().
'&rowid='.$objp->rowid.
'&page='.$page.$param.($sortfield ?
'&sortfield='.$sortfield :
'').($sortorder ?
'&sortorder='.$sortorder :
'').
'">';
1747 print
img_delete(
'',
'class="marginleftonly"');
1753 if ($massactionbutton || $massaction) {
1755 if (in_array($obj->rowid, $arrayofselected)) {
1758 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect marginleftonly" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1762 $totalarray[
'nbfield']++;
1771 if (isset($totalarray[
'totaldebfield']) || isset($totalarray[
'totalcredfield'])) {
1772 print
'<tr class="liste_total">';
1774 while ($i < $totalarray[
'nbfield']) {
1777 if ($num < $limit && empty($offset)) {
1778 print
'<td class="left">'.$langs->trans(
"Total").
'</td>';
1780 print
'<td class="left tdoverflowmax50" title="'.$langs->trans(
"Totalforthispage").
'">'.$langs->trans(
"Totalforthispage").
'</td>';
1782 } elseif ($totalarray[
'totaldebfield'] == $i) {
1783 print
'<td class="right"><span class="amount">'.price(-1 * $totalarray[
'totaldeb']).
'</span></td>';
1784 } elseif ($totalarray[
'totalcredfield'] == $i) {
1785 print
'<td class="right"><span class="amount">'.price($totalarray[
'totalcred']).
'</span></td>';
1786 } elseif ($i == $posconciliatecol) {
1787 print
'<td class="center">';
1788 if ($user->rights->banque->consolidate && $action ==
'reconcile') {
1789 print
'<input class="button" name="confirm_reconcile" type="submit" value="'.$langs->trans(
"Conciliate").
'">';
1802 foreach ($arrayfields as $key => $val) {
1803 if (!empty($val[
'checked'])) {
1807 print
'<tr><td colspan="'.($colspan + 1).
'" class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</td></tr>';