ligne.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. <?php
  2. /* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  3. * Copyright (C) 2003 Xavier DUTOIT <doli@sydesy.com>
  4. * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
  5. * Copyright (C) 2004 Christophe Combelles <ccomb@free.fr>
  6. * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
  7. * Copyright (C) 2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
  8. * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
  9. * Copyright (C) 2016 Marcos García <marcosgdf@gmail.com>
  10. *
  11. * This program is free software; you can redistribute it and/or modify
  12. * it under the terms of the GNU General Public License as published by
  13. * the Free Software Foundation; either version 3 of the License, or
  14. * (at your option) any later version.
  15. *
  16. * This program is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. * GNU General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU General Public License
  22. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  23. */
  24. /**
  25. * \file htdocs/compta/bank/ligne.php
  26. * \ingroup bank
  27. * \brief Page to edit a bank transaction record
  28. */
  29. require('../../main.inc.php');
  30. require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
  31. $langs->load("banks");
  32. $langs->load("categories");
  33. $langs->load("compta");
  34. $langs->load("bills");
  35. if (! empty($conf->adherent->enabled)) $langs->load("members");
  36. if (! empty($conf->don->enabled)) $langs->load("donations");
  37. if (! empty($conf->loan->enabled)) $langs->load("loan");
  38. if (! empty($conf->salaries->enabled)) $langs->load("salaries");
  39. $id = (GETPOST('id','int') ? GETPOST('id','int') : GETPOST('account','int'));
  40. $ref = GETPOST('ref','alpha');
  41. $action=GETPOST('action','alpha');
  42. $confirm=GETPOST('confirm','alpha');
  43. $rowid=GETPOST("rowid",'int');
  44. $orig_account=GETPOST("orig_account");
  45. // Security check
  46. $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref :''));
  47. $fieldtype = (! empty($ref) ? 'ref' :'rowid');
  48. if ($user->societe_id) $socid=$user->societe_id;
  49. $result=restrictedArea($user,'banque',$fieldvalue,'bank_account','','',$fieldtype);
  50. if (! $user->rights->banque->lire && ! $user->rights->banque->consolidate) accessforbidden();
  51. /*
  52. * Actions
  53. */
  54. if ($user->rights->banque->consolidate && $action == 'dvnext')
  55. {
  56. $al = new AccountLine($db);
  57. $al->datev_next($_GET["rowid"]);
  58. }
  59. if ($user->rights->banque->consolidate && $action == 'dvprev')
  60. {
  61. $al = new AccountLine($db);
  62. $al->datev_previous($_GET["rowid"]);
  63. }
  64. if ($action == 'confirm_delete_categ' && $confirm == "yes" && $user->rights->banque->modifier)
  65. {
  66. $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_class WHERE lineid = ".$rowid." AND fk_categ = ".GETPOST("cat1");
  67. if (! $db->query($sql))
  68. {
  69. dol_print_error($db);
  70. }
  71. }
  72. if ($user->rights->banque->modifier && $action == 'class')
  73. {
  74. $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_class WHERE lineid = ".$rowid." AND fk_categ = ".$_POST["cat1"];
  75. if (! $db->query($sql))
  76. {
  77. dol_print_error($db);
  78. }
  79. $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_class (lineid, fk_categ) VALUES (".$rowid.", ".$_POST["cat1"].")";
  80. if (! $db->query($sql))
  81. {
  82. dol_print_error($db);
  83. }
  84. }
  85. if ($user->rights->banque->modifier && $action == "update")
  86. {
  87. $error=0;
  88. $ac = new Account($db);
  89. $ac->fetch($id);
  90. if ($ac->courant == Account::TYPE_CASH && $_POST['value'] != 'LIQ')
  91. {
  92. setEventMessages($langs->trans("ErrorCashAccountAcceptsOnlyCashMoney"), null, 'errors');
  93. $error++;
  94. }
  95. if (! $error)
  96. {
  97. // Avant de modifier la date ou le montant, on controle si ce n'est pas encore rapproche
  98. $conciliated=0;
  99. $sql = "SELECT b.rappro FROM ".MAIN_DB_PREFIX."bank as b WHERE rowid=".$rowid;
  100. $result = $db->query($sql);
  101. if ($result)
  102. {
  103. $objp = $db->fetch_object($result);
  104. $conciliated=$objp->rappro;
  105. }
  106. $db->begin();
  107. $amount = price2num($_POST['amount']);
  108. $dateop = dol_mktime(12,0,0,$_POST["dateomonth"],$_POST["dateoday"],$_POST["dateoyear"]);
  109. $dateval= dol_mktime(12,0,0,$_POST["datevmonth"],$_POST["datevday"],$_POST["datevyear"]);
  110. $sql = "UPDATE ".MAIN_DB_PREFIX."bank";
  111. $sql.= " SET ";
  112. // Always opened
  113. if (isset($_POST['value'])) $sql.=" fk_type='".$db->escape($_POST['value'])."',";
  114. if (isset($_POST['num_chq'])) $sql.=" num_chq='".$db->escape($_POST["num_chq"])."',";
  115. if (isset($_POST['banque'])) $sql.=" banque='".$db->escape($_POST["banque"])."',";
  116. if (isset($_POST['emetteur'])) $sql.=" emetteur='".$db->escape($_POST["emetteur"])."',";
  117. // Blocked when conciliated
  118. if (! $conciliated)
  119. {
  120. if (isset($_POST['label'])) $sql.=" label='".$db->escape($_POST["label"])."',";
  121. if (isset($_POST['amount'])) $sql.=" amount='".$amount."',";
  122. if (isset($_POST['dateomonth'])) $sql.=" dateo = '".$db->idate($dateop)."',";
  123. if (isset($_POST['datevmonth'])) $sql.=" datev = '".$db->idate($dateval)."',";
  124. }
  125. $sql.= " fk_account = ".$id;
  126. $sql.= " WHERE rowid = ".$rowid;
  127. $result = $db->query($sql);
  128. if ($result)
  129. {
  130. setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
  131. $db->commit();
  132. }
  133. else
  134. {
  135. $db->rollback();
  136. dol_print_error($db);
  137. }
  138. }
  139. }
  140. // Reconcile
  141. if ($user->rights->banque->consolidate && ($action == 'num_releve' || $action == 'setreconcile'))
  142. {
  143. $num_rel=trim($_POST["num_rel"]);
  144. $rappro=$_POST['reconciled']?1:0;
  145. // Check parameters
  146. if ($rappro && empty($num_rel))
  147. {
  148. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("AccountStatement")), null, 'errors');
  149. $error++;
  150. }
  151. if (! $error)
  152. {
  153. $db->begin();
  154. $sql = "UPDATE ".MAIN_DB_PREFIX."bank";
  155. $sql.= " SET num_releve=".($num_rel?"'".$num_rel."'":"null");
  156. if (empty($num_rel)) $sql.= ", rappro = 0";
  157. else $sql.=", rappro = ".$rappro;
  158. $sql.= " WHERE rowid = ".$rowid;
  159. dol_syslog("ligne.php", LOG_DEBUG);
  160. $result = $db->query($sql);
  161. if ($result)
  162. {
  163. setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
  164. $db->commit();
  165. }
  166. else
  167. {
  168. $db->rollback();
  169. dol_print_error($db);
  170. }
  171. }
  172. }
  173. /*
  174. * View
  175. */
  176. $form = new Form($db);
  177. llxHeader();
  178. // Load bank groups
  179. require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/bankcateg.class.php';
  180. $bankcateg = new BankCateg($db);
  181. $options = array();
  182. foreach ($bankcateg->fetchAll() as $bankcategory) {
  183. $options[$bankcategory->id] = $bankcategory->label;
  184. }
  185. $var=false;
  186. $tabs = array(
  187. array(
  188. DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$rowid,
  189. $langs->trans('Card')
  190. ),
  191. array(
  192. DOL_URL_ROOT.'/compta/bank/info.php?rowid='.$rowid,
  193. $langs->trans('Info')
  194. )
  195. );
  196. dol_fiche_head($tabs, 0, $langs->trans('LineRecord'), 0, 'account');
  197. $sql = "SELECT b.rowid,b.dateo as do,b.datev as dv, b.amount, b.label, b.rappro,";
  198. $sql.= " b.num_releve, b.fk_user_author, b.num_chq, b.fk_type, b.fk_account, b.fk_bordereau as receiptid,";
  199. $sql.= " b.emetteur,b.banque";
  200. $sql.= " FROM ".MAIN_DB_PREFIX."bank as b";
  201. $sql.= " WHERE rowid=".$rowid;
  202. $sql.= " ORDER BY dateo ASC";
  203. $result = $db->query($sql);
  204. if ($result)
  205. {
  206. $i = 0; $total = 0;
  207. if ($db->num_rows($result))
  208. {
  209. $objp = $db->fetch_object($result);
  210. $total = $total + $objp->amount;
  211. $acct=new Account($db);
  212. $acct->fetch($objp->fk_account);
  213. $account = $acct->id;
  214. $bankline = new AccountLine($db);
  215. $bankline->fetch($rowid,$ref);
  216. $links=$acct->get_url($rowid);
  217. $bankline->load_previous_next_ref('','rowid');
  218. // Confirmations
  219. if ($action == 'delete_categ')
  220. {
  221. print $form->formconfirm($_SERVER['PHP_SELF']."?rowid=".$rowid."&cat1=".GETPOST("fk_categ")."&orig_account=".$orig_account, $langs->trans("RemoveFromRubrique"), $langs->trans("RemoveFromRubriqueConfirm"), "confirm_delete_categ", '', 'yes', 1);
  222. }
  223. print '<form name="update" method="POST" action="'.$_SERVER['PHP_SELF'].'?rowid='.$rowid.'">';
  224. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  225. print '<input type="hidden" name="action" value="update">';
  226. print '<input type="hidden" name="orig_account" value="'.$orig_account.'">';
  227. print '<input type="hidden" name="id" value="'.$acct->id.'">';
  228. print '<table class="border" width="100%">';
  229. $linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/search.php">'.$langs->trans("BackToList").'</a>';
  230. // Ref
  231. print '<tr><td width="20%">'.$langs->trans("Ref")."</td>";
  232. print '<td colspan="4">';
  233. print $form->showrefnav($bankline, 'rowid', $linkback, 1, 'rowid', 'rowid');
  234. print '</td>';
  235. print '</tr>';
  236. $i++;
  237. // Bank account
  238. print "<tr><td>".$langs->trans("Account")."</td>";
  239. print '<td colspan="4">';
  240. print $acct->getNomUrl(1,'transactions');
  241. print '</td>';
  242. print '</tr>';
  243. // Show links of bank transactions
  244. if (count($links))
  245. {
  246. print "<tr><td>".$langs->trans("Links")."</td>";
  247. print '<td colspan="4">';
  248. foreach($links as $key=>$val)
  249. {
  250. if ($key) print '<br>';
  251. if ($links[$key]['type']=='payment') {
  252. print '<a href="'.DOL_URL_ROOT.'/compta/paiement/card.php?id='.$links[$key]['url_id'].'">';
  253. print img_object($langs->trans('ShowPayment'),'payment').' ';
  254. print $langs->trans("Payment");
  255. print '</a>';
  256. }
  257. else if ($links[$key]['type']=='payment_supplier') {
  258. print '<a href="'.DOL_URL_ROOT.'/fourn/paiement/card.php?id='.$links[$key]['url_id'].'">';
  259. print img_object($langs->trans('ShowPayment'),'payment').' ';
  260. print $langs->trans("Payment");
  261. print '</a>';
  262. }
  263. else if ($links[$key]['type']=='company') {
  264. print '<a href="'.DOL_URL_ROOT.'/societe/soc.php?socid='.$links[$key]['url_id'].'">';
  265. //print img_object($langs->trans('ShowCompany'),'company').' ';
  266. $societe=new Societe($db);
  267. $societe->fetch($links[$key]['url_id']);
  268. //print $links[$key]['label'];
  269. print $societe->getNomUrl(1);
  270. print '</a>';
  271. }
  272. else if ($links[$key]['type']=='sc') {
  273. print '<a href="'.DOL_URL_ROOT.'/compta/sociales/charges.php?id='.$links[$key]['url_id'].'">';
  274. print img_object($langs->trans('ShowSocialContribution'),'bill').' ';
  275. print $langs->trans("SocialContribution").($links[$key]['label']?' - '.$links[$key]['label']:'');
  276. print '</a>';
  277. }
  278. else if ($links[$key]['type']=='payment_sc') {
  279. print '<a href="'.DOL_URL_ROOT.'/compta/payment_sc/card.php?id='.$links[$key]['url_id'].'">';
  280. print img_object($langs->trans('ShowPayment'),'payment').' ';
  281. print $langs->trans("SocialContributionPayment");
  282. print '</a>';
  283. }
  284. else if ($links[$key]['type']=='payment_vat') {
  285. print '<a href="'.DOL_URL_ROOT.'/compta/tva/card.php?id='.$links[$key]['url_id'].'">';
  286. print img_object($langs->trans('ShowVAT'),'payment').' ';
  287. print $langs->trans("VATPayment");
  288. print '</a>';
  289. }
  290. else if ($links[$key]['type']=='payment_salary') {
  291. print '<a href="'.DOL_URL_ROOT.'/compta/salaries/card.php?id='.$links[$key]['url_id'].'">';
  292. print img_object($langs->trans('ShowPaymentSalary'),'payment').' ';
  293. print $langs->trans("SalaryPayment");
  294. print '</a>';
  295. }
  296. else if ($links[$key]['type']=='payment_loan') {
  297. print '<a href="'.DOL_URL_ROOT.'/loan/payment/card.php?id='.$links[$key]['url_id'].'">';
  298. print img_object($langs->trans('ShowLoanPayment'),'payment').' ';
  299. print $langs->trans("PaymentLoan");
  300. print '</a>';
  301. }
  302. else if ($links[$key]['type']=='loan') {
  303. print '<a href="'.DOL_URL_ROOT.'/loan/card.php?id='.$links[$key]['url_id'].'">';
  304. print img_object($langs->trans('ShowLoan'),'bill').' ';
  305. print $langs->trans("Loan");
  306. print '</a>';
  307. }
  308. else if ($links[$key]['type']=='member') {
  309. print '<a href="'.DOL_URL_ROOT.'/adherents/card.php?rowid='.$links[$key]['url_id'].'">';
  310. print img_object($langs->trans('ShowMember'),'user').' ';
  311. print $links[$key]['label'];
  312. print '</a>';
  313. }
  314. else if ($links[$key]['type']=='payment_donation') {
  315. print '<a href="'.DOL_URL_ROOT.'/don/payment/card.php?id='.$links[$key]['url_id'].'">';
  316. print img_object($langs->trans('ShowDonation'),'payment').' ';
  317. print $langs->trans("DonationPayment");
  318. print '</a>';
  319. }
  320. else if ($links[$key]['type']=='banktransfert') {
  321. print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$links[$key]['url_id'].'">';
  322. print img_object($langs->trans('ShowTransaction'),'payment').' ';
  323. print $langs->trans("TransactionOnTheOtherAccount");
  324. print '</a>';
  325. }
  326. else if ($links[$key]['type']=='user') {
  327. print '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$links[$key]['url_id'].'">';
  328. print img_object($langs->trans('ShowUser'),'user').' ';
  329. print $langs->trans("User");
  330. print '</a>';
  331. }
  332. else {
  333. print '<a href="'.$links[$key]['url'].$links[$key]['url_id'].'">';
  334. print img_object('','generic').' ';
  335. print $links[$key]['label'];
  336. print '</a>';
  337. }
  338. }
  339. print '</td></tr>';
  340. }
  341. $rowspan=0;
  342. //$user->rights->banque->modifier=false;
  343. //$user->rights->banque->consolidate=true;
  344. // Type of payment / Number
  345. print "<tr><td>".$langs->trans("Type")." / ".$langs->trans("Numero");
  346. print "</td>";
  347. if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
  348. {
  349. print '<td colspan="3">';
  350. $form->select_types_paiements($objp->fk_type,"value",'',2);
  351. print '<input type="text" class="flat" name="num_chq" value="'.(empty($objp->num_chq) ? '' : $objp->num_chq).'">';
  352. if ($objp->receiptid)
  353. {
  354. include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
  355. $receipt=new RemiseCheque($db);
  356. $receipt->fetch($objp->receiptid);
  357. print ' &nbsp; &nbsp; '.$langs->trans("CheckReceipt").': '.$receipt->getNomUrl(2);
  358. }
  359. print '</td>';
  360. $rowspan=7;
  361. print '<td align="center" rowspan="'.$rowspan.'" width="20%"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
  362. print '</td>';
  363. }
  364. else
  365. {
  366. print '<td colspan="4">'.$objp->fk_type.' '.$objp->num_chq.'</td>';
  367. }
  368. print "</tr>";
  369. // Bank of cheque
  370. print "<tr><td>".$langs->trans("Bank")."</td>";
  371. if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
  372. {
  373. print '<td colspan="3">';
  374. print '<input type="text" class="flat" size="40" name="banque" value="'.(empty($objp->banque) ? '' : $objp->banque).'">';
  375. print '</td>';
  376. }
  377. else
  378. {
  379. print '<td colspan="'.($rowspan?'3':'4').'">'.$objp->banque.'</td>';
  380. }
  381. print "</tr>";
  382. // Transmitter
  383. print "<tr><td>".$langs->trans("CheckTransmitter")."</td>";
  384. if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
  385. {
  386. print '<td colspan="3">';
  387. print '<input type="text" class="flat" size="40" name="emetteur" value="'.(empty($objp->emetteur) ? '' : stripslashes($objp->emetteur)).'">';
  388. print '</td>';
  389. }
  390. else
  391. {
  392. print '<td colspan="'.($rowspan?'3':'4').'">'.$objp->emetteur.'</td>';
  393. }
  394. print "</tr>";
  395. // Date ope
  396. print '<tr><td>'.$langs->trans("DateOperation").'</td>';
  397. if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
  398. {
  399. print '<td colspan="3">';
  400. print $form->select_date($db->jdate($objp->do),'dateo','','','','update',1,0,1,$objp->rappro);
  401. print '</td>';
  402. }
  403. else
  404. {
  405. print '<td colspan="'.($rowspan?'3':'4').'">';
  406. print dol_print_date($db->jdate($objp->do),"day");
  407. print '</td>';
  408. }
  409. print '</tr>';
  410. // Value date
  411. print "<tr><td>".$langs->trans("DateValue")."</td>";
  412. if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
  413. {
  414. print '<td colspan="3">';
  415. print $form->select_date($db->jdate($objp->dv),'datev','','','','update',1,0,1,$objp->rappro);
  416. if (! $objp->rappro)
  417. {
  418. print ' &nbsp; ';
  419. print '<a href="'.$_SERVER['PHP_SELF'].'?action=dvprev&amp;id='.$id.'&amp;rowid='.$objp->rowid.'">';
  420. print img_edit_remove() . "</a> ";
  421. print '<a href="'.$_SERVER['PHP_SELF'].'?action=dvnext&amp;id='.$id.'&amp;rowid='.$objp->rowid.'">';
  422. print img_edit_add() ."</a>";
  423. }
  424. print '</td>';
  425. }
  426. else
  427. {
  428. print '<td colspan="'.($rowspan?'3':'4').'">';
  429. print dol_print_date($db->jdate($objp->dv),"day");
  430. print '</td>';
  431. }
  432. print "</tr>";
  433. // Description
  434. print "<tr><td>".$langs->trans("Label")."</td>";
  435. if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
  436. {
  437. print '<td colspan="3">';
  438. print '<input name="label" class="flat" '.($objp->rappro?' disabled':'').' value="';
  439. if (preg_match('/^\((.*)\)$/i',$objp->label,$reg))
  440. {
  441. // Label generique car entre parentheses. On l'affiche en le traduisant
  442. print $langs->trans($reg[1]);
  443. }
  444. else
  445. {
  446. print $objp->label;
  447. }
  448. print '" size="50">';
  449. print '</td>';
  450. }
  451. else
  452. {
  453. print '<td colspan="'.($rowspan?'3':'4').'">';
  454. if (preg_match('/^\((.*)\)$/i',$objp->label,$reg))
  455. {
  456. // Label generique car entre parentheses. On l'affiche en le traduisant
  457. print $langs->trans($reg[1]);
  458. }
  459. else
  460. {
  461. print $objp->label;
  462. }
  463. print '</td>';
  464. }
  465. print '</tr>';
  466. // Amount
  467. print "<tr><td>".$langs->trans("Amount")."</td>";
  468. if ($user->rights->banque->modifier)
  469. {
  470. print '<td colspan="3">';
  471. print '<input name="amount" class="flat" size="10" '.($objp->rappro?' disabled':'').' value="'.price($objp->amount).'"> '.$langs->trans("Currency".$acct->currency_code);
  472. print '</td>';
  473. }
  474. else
  475. {
  476. print '<td colspan="'.($rowspan?'3':'4').'">';
  477. print price($objp->amount);
  478. print '</td>';
  479. }
  480. print "</tr>";
  481. print "</table>";
  482. print "</form>";
  483. // Releve rappro
  484. if ($acct->canBeConciliated() > 0) // Si compte rapprochable
  485. {
  486. print '<br>'."\n";
  487. print load_fiche_titre($langs->trans("Reconciliation"), '', 'title_bank.png');
  488. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'?rowid='.$objp->rowid.'">';
  489. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  490. print '<input type="hidden" name="action" value="setreconcile">';
  491. print '<input type="hidden" name="orig_account" value="'.$orig_account.'">';
  492. print '<table class="border" width="100%">';
  493. print '<tr><td width="20%">'.$langs->trans("Conciliation")."</td>";
  494. if ($user->rights->banque->consolidate)
  495. {
  496. print '<td colspan="3">';
  497. if ($objp->rappro)
  498. {
  499. print $langs->trans("AccountStatement").' <input name="num_rel_bis" class="flat" value="'.$objp->num_releve.'"'.($objp->rappro?' disabled':'').'>';
  500. print '<input name="num_rel" type="hidden" value="'.$objp->num_releve.'">';
  501. }
  502. else
  503. {
  504. print $langs->trans("AccountStatement").' <input name="num_rel" class="flat" value="'.$objp->num_releve.'"'.($objp->rappro?' disabled':'').'>';
  505. }
  506. if ($objp->num_releve) print ' &nbsp; (<a href="'.DOL_URL_ROOT.'/compta/bank/releve.php?num='.$objp->num_releve.'&account='.$acct->id.'">'.$langs->trans("AccountStatement").' '.$objp->num_releve.')</a>';
  507. print '</td><td align="center" rowspan="2" width="20%"><input type="submit" class="button" value="'.$langs->trans("Update").'"></td>';
  508. }
  509. else
  510. {
  511. print '<td colspan="4">'.$objp->num_releve.'&nbsp;</td>';
  512. }
  513. print '</tr>';
  514. print "<tr><td>".$langs->trans("BankLineConciliated")."</td>";
  515. if ($user->rights->banque->consolidate)
  516. {
  517. print '<td colspan="3">';
  518. print '<input type="checkbox" name="reconciled" class="flat" '.(isset($_POST["reconciled"])?($_POST["reconciled"]?' checked="checked"':''):($objp->rappro?' checked="checked"':'')).'">';
  519. print '</td>';
  520. }
  521. else
  522. {
  523. print '<td colspan="4">'.yn($objp->rappro).'</td>';
  524. }
  525. print '</tr>';
  526. print '</table></form>';
  527. }
  528. }
  529. $db->free($result);
  530. }
  531. else dol_print_error($db);
  532. print '</div>';
  533. // List of bank categories
  534. print '<br>';
  535. print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'?rowid='.$rowid.'&amp;id='.$id.'">';
  536. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  537. print '<input type="hidden" name="action" value="class">';
  538. print '<input type="hidden" name="orig_account" value="'.$orig_account.'">';
  539. print '<table class="noborder" width="100%">';
  540. print '<tr class="liste_titre"><td>'.$langs->trans("Rubriques").'</td><td colspan="2">';
  541. if ($user->rights->banque->modifier)
  542. {
  543. print Form::selectarray('cat1', $options, '', 1).' ';
  544. print '<input type="submit" class="button" value="'.$langs->trans("Add").'"></td>';
  545. }
  546. print '</tr>';
  547. $sql = "SELECT c.label, c.rowid";
  548. $sql.= " FROM ".MAIN_DB_PREFIX."bank_class as a, ".MAIN_DB_PREFIX."bank_categ as c";
  549. $sql.= " WHERE a.lineid=".$rowid." AND a.fk_categ = c.rowid";
  550. $sql.= " ORDER BY c.label";
  551. $result = $db->query($sql);
  552. if ($result)
  553. {
  554. $var=True;
  555. $num = $db->num_rows($result);
  556. $i = 0; $total = 0;
  557. while ($i < $num)
  558. {
  559. $objp = $db->fetch_object($result);
  560. $var=!$var;
  561. print "<tr ".$bc[$var].">";
  562. print "<td>".$objp->label."</td>";
  563. print "<td align=\"center\"><a href=\"budget.php?bid=".$objp->rowid."\">".$langs->trans("ListBankTransactions")."</a></td>";
  564. if ($user->rights->banque->modifier)
  565. {
  566. print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=delete_categ&amp;rowid='.$rowid.'&amp;fk_categ='.$objp->rowid.'">'.img_delete($langs->trans("Remove")).'</a></td>';
  567. }
  568. print '</tr>';
  569. $i++;
  570. }
  571. $db->free($result);
  572. }
  573. print '</table></form>';
  574. llxFooter();
  575. $db->close();