card.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. <?php
  2. /* Copyright (C) 2014-2017 Alexandre Spangaro <aspangaro@zendsi.com>
  3. * Copyright (C) 2015 Frederic France <frederic.france@free.fr>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /**
  19. * \file htdocs/loan/card.php
  20. * \ingroup loan
  21. * \brief Loan card
  22. */
  23. require '../main.inc.php';
  24. require_once DOL_DOCUMENT_ROOT.'/loan/class/loan.class.php';
  25. require_once DOL_DOCUMENT_ROOT.'/core/lib/loan.lib.php';
  26. require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
  27. if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
  28. if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
  29. require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
  30. require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
  31. $langs->load("compta");
  32. $langs->load("bills");
  33. $langs->load("loan");
  34. $id=GETPOST('id','int');
  35. $action=GETPOST('action','aZ09');
  36. $confirm=GETPOST('confirm');
  37. $cancel=GETPOST('cancel','alpha');
  38. // Security check
  39. $socid = GETPOST('socid','int');
  40. if ($user->societe_id) $socid=$user->societe_id;
  41. $result = restrictedArea($user, 'loan', $id, '','');
  42. $object = new Loan($db);
  43. $hookmanager->initHooks(array('loancard','globalcard'));
  44. /*
  45. * Actions
  46. */
  47. $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
  48. if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
  49. if (empty($reshook))
  50. {
  51. // Classify paid
  52. if ($action == 'confirm_paid' && $confirm == 'yes')
  53. {
  54. $object->fetch($id);
  55. $result = $object->set_paid($user);
  56. if ($result > 0)
  57. {
  58. setEventMessages($langs->trans('LoanPaid'), null, 'mesgs');
  59. }
  60. else
  61. {
  62. setEventMessages($loan->error, null, 'errors');
  63. }
  64. }
  65. // Delete loan
  66. if ($action == 'confirm_delete' && $confirm == 'yes')
  67. {
  68. $object->fetch($id);
  69. $result=$object->delete($user);
  70. if ($result > 0)
  71. {
  72. setEventMessages($langs->trans('LoanDeleted'), null, 'mesgs');
  73. header("Location: index.php");
  74. exit;
  75. }
  76. else
  77. {
  78. setEventMessages($loan->error, null, 'errors');
  79. }
  80. }
  81. // Add loan
  82. if ($action == 'add' && $user->rights->loan->write)
  83. {
  84. if (! $cancel)
  85. {
  86. $datestart = dol_mktime(12, 0, 0, GETPOST('startmonth','int'), GETPOST('startday','int'), GETPOST('startyear','int'));
  87. $dateend = dol_mktime(12, 0, 0, GETPOST('endmonth','int'), GETPOST('endday','int'), GETPOST('endyear','int'));
  88. $capital = price2num(GETPOST('capital'));
  89. $rate = GETPOST('rate');
  90. if (! $capital)
  91. {
  92. $error++; $action = 'create';
  93. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("LoanCapital")), null, 'errors');
  94. }
  95. if (! $datestart)
  96. {
  97. $error++; $action = 'create';
  98. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("DateStart")), null, 'errors');
  99. }
  100. if (! $dateend)
  101. {
  102. $error++; $action = 'create';
  103. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("DateEnd")), null, 'errors');
  104. }
  105. if ($rate == '')
  106. {
  107. $error++; $action = 'create';
  108. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Rate")), null, 'errors');
  109. }
  110. if (! $error)
  111. {
  112. $object->label = GETPOST('label');
  113. $object->fk_bank = GETPOST('accountid');
  114. $object->capital = $capital;
  115. $object->datestart = $datestart;
  116. $object->dateend = $dateend;
  117. $object->nbterm = GETPOST('nbterm');
  118. $object->rate = $rate;
  119. $object->note_private = GETPOST('note_private');
  120. $object->note_public = GETPOST('note_public');
  121. $object->fk_project = GETPOST('fk_project');
  122. $accountancy_account_capital = GETPOST('accountancy_account_capital');
  123. $accountancy_account_insurance = GETPOST('accountancy_account_insurance');
  124. $accountancy_account_interest = GETPOST('accountancy_account_interest');
  125. if ($accountancy_account_capital <= 0) { $object->account_capital = ''; } else { $object->account_capital = $accountancy_account_capital; }
  126. if ($accountancy_account_insurance <= 0) { $object->account_insurance = ''; } else { $object->account_insurance = $accountancy_account_insurance; }
  127. if ($accountancy_account_interest <= 0) { $object->account_interest = ''; } else { $object->account_interest = $accountancy_account_interest; }
  128. $id=$object->create($user);
  129. if ($id <= 0)
  130. {
  131. $error++;
  132. setEventMessages($object->error, $object->errors, 'errors');
  133. $action = 'create';
  134. }
  135. }
  136. }
  137. else
  138. {
  139. header("Location: index.php");
  140. exit();
  141. }
  142. }
  143. // Update record
  144. else if ($action == 'update' && $user->rights->loan->write)
  145. {
  146. if (! $cancel)
  147. {
  148. $result = $object->fetch($id);
  149. $datestart = dol_mktime(12, 0, 0, GETPOST('startmonth','int'), GETPOST('startday','int'), GETPOST('startyear','int'));
  150. $dateend = dol_mktime(12, 0, 0, GETPOST('endmonth','int'), GETPOST('endday','int'), GETPOST('endyear','int'));
  151. $capital = price2num(GETPOST('capital'));
  152. if (! $capital)
  153. {
  154. setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("LoanCapital")), null, 'errors');
  155. $action = 'edit';
  156. }
  157. else
  158. {
  159. $object->datestart = $datestart;
  160. $object->dateend = $dateend;
  161. $object->capital = $capital;
  162. $object->nbterm = GETPOST("nbterm");
  163. $object->rate = GETPOST("rate");
  164. $accountancy_account_capital = GETPOST('accountancy_account_capital');
  165. $accountancy_account_insurance = GETPOST('accountancy_account_insurance');
  166. $accountancy_account_interest = GETPOST('accountancy_account_interest');
  167. if ($accountancy_account_capital <= 0) { $object->account_capital = ''; } else { $object->account_capital = $accountancy_account_capital; }
  168. if ($accountancy_account_insurance <= 0) { $object->account_insurance = ''; } else { $object->account_insurance = $accountancy_account_insurance; }
  169. if ($accountancy_account_interest <= 0) { $object->account_interest = ''; } else { $object->account_interest = $accountancy_account_interest; }
  170. }
  171. $result = $object->update($user);
  172. if ($result > 0)
  173. {
  174. header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
  175. exit;
  176. }
  177. else
  178. {
  179. setEventMessages($object->error, $object->errors, 'errors');
  180. }
  181. }
  182. else
  183. {
  184. header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
  185. exit;
  186. }
  187. }
  188. // Link to a project
  189. if ($action == 'classin' && $user->rights->loan->write)
  190. {
  191. $object->fetch($id);
  192. $result = $object->setProject(GETPOST('projectid'));
  193. if ($result < 0)
  194. setEventMessages($object->error, $object->errors, 'errors');
  195. }
  196. if ($action == 'setlabel' && $user->rights->loan->write)
  197. {
  198. $object->fetch($id);
  199. $result = $object->setValueFrom('label', GETPOST('label'), '', '', 'text', '', $user, 'LOAN_MODIFY');
  200. if ($result < 0)
  201. setEventMessages($object->error, $object->errors, 'errors');
  202. }
  203. }
  204. /*
  205. * View
  206. */
  207. $form = new Form($db);
  208. $formproject = new FormProjets($db);
  209. if (! empty($conf->accounting->enabled)) $formaccounting = New FormAccounting($db);
  210. $title = $langs->trans("Loan") . ' - ' . $langs->trans("Card");
  211. $help_url = 'EN:Module_Loan|FR:Module_Emprunt';
  212. llxHeader("",$title,$help_url);
  213. // Create mode
  214. if ($action == 'create')
  215. {
  216. //WYSIWYG Editor
  217. require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
  218. print load_fiche_titre($langs->trans("NewLoan"), '', 'title_accountancy.png');
  219. $datec = dol_mktime(12, 0, 0, GETPOST('remonth','int'), GETPOST('reday','int'), GETPOST('reyear','int'));
  220. print '<form name="loan" action="' . $_SERVER["PHP_SELF"] . '" method="POST">' . "\n";
  221. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  222. print '<input type="hidden" name="action" value="add">';
  223. dol_fiche_head();
  224. print '<table class="border" width="100%">';
  225. // Label
  226. print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("Label").'</td><td><input name="label" size="40" maxlength="255" value="'.dol_escape_htmltag(GETPOST('label')).'"></td></tr>';
  227. // Bank account
  228. if (! empty($conf->banque->enabled))
  229. {
  230. print '<tr><td class="fieldrequired">'.$langs->trans("Account").'</td><td>';
  231. $form->select_comptes(GETPOST("accountid"),"accountid",0,"courant=1",1); // Show list of bank account with courant
  232. print '</td></tr>';
  233. }
  234. else
  235. {
  236. print '<tr><td>'.$langs->trans("Account").'</td><td>';
  237. print $langs->trans("NoBankAccountDefined");
  238. print '</td></tr>';
  239. }
  240. // Capital
  241. print '<tr><td class="fieldrequired">'.$langs->trans("LoanCapital").'</td><td><input name="capital" size="10" value="' . dol_escape_htmltag(GETPOST("capital")) . '"></td></tr>';
  242. // Date Start
  243. print "<tr>";
  244. print '<td class="fieldrequired">'.$langs->trans("DateStart").'</td><td>';
  245. print $form->select_date($datestart?$datestart:-1,'start','','','','add',1,1,1);
  246. print '</td></tr>';
  247. // Date End
  248. print "<tr>";
  249. print '<td class="fieldrequired">'.$langs->trans("DateEnd").'</td><td>';
  250. print $form->select_date($dateend?$dateend:-1,'end','','','','add',1,1,1);
  251. print '</td></tr>';
  252. // Number of terms
  253. print '<tr><td class="fieldrequired">'.$langs->trans("Nbterms").'</td><td><input name="nbterm" size="5" value="' . dol_escape_htmltag(GETPOST('nbterm')) . '"></td></tr>';
  254. // Rate
  255. print '<tr><td class="fieldrequired">'.$langs->trans("Rate").'</td><td><input name="rate" size="5" value="' . dol_escape_htmltag(GETPOST("rate")) . '"> %</td></tr>';
  256. // Project
  257. if (! empty($conf->projet->enabled))
  258. {
  259. $formproject=new FormProjets($db);
  260. // Projet associe
  261. $langs->load("projects");
  262. print '<tr><td>'.$langs->trans("Project").'</td><td>';
  263. $numproject=$formproject->select_projects(-1,GETPOST("fk_project"),'fk_project',16,0,1,1);
  264. print '</td></tr>';
  265. }
  266. // Note Private
  267. print '<tr>';
  268. print '<td class="tdtop">'.$langs->trans('NotePrivate').'</td>';
  269. print '<td>';
  270. $doleditor = new DolEditor('note_private', GETPOST('note_private', 'alpha'), '', 160, 'dolibarr_notes', 'In', false, true, true, ROWS_6, '90%');
  271. print $doleditor->Create(1);
  272. print '</td></tr>';
  273. // Note Public
  274. print '<tr>';
  275. print '<td class="tdtop">'.$langs->trans('NotePublic').'</td>';
  276. print '<td>';
  277. $doleditor = new DolEditor('note_public', GETPOST('note_public', 'alpha'), '', 160, 'dolibarr_notes', 'In', false, true, true, ROWS_6, '90%');
  278. print $doleditor->Create(1);
  279. print '</td></tr>';
  280. // Accountancy
  281. if (! empty($conf->accounting->enabled))
  282. {
  283. // Accountancy_account_capital
  284. print '<tr><td class="titlefieldcreate">'.$langs->trans("LoanAccountancyCapitalCode").'</td>';
  285. print '<td>';
  286. print $formaccounting->select_account($object->accountancy_account_capital, 'accountancy_account_capital', 1, '', 0, 1);
  287. print '</td></tr>';
  288. // Accountancy_account_insurance
  289. print '<tr><td>'.$langs->trans("LoanAccountancyInsuranceCode").'</td>';
  290. print '<td>';
  291. print $formaccounting->select_account($object->accountancy_account_insurance, 'accountancy_account_insurance', 1, '', 0, 1);
  292. print '</td></tr>';
  293. // Accountancy_account_interest
  294. print '<tr><td>'.$langs->trans("LoanAccountancyInterestCode").'</td>';
  295. print '<td>';
  296. print $formaccounting->select_account($object->accountancy_account_interest, 'accountancy_account_interest', 1, '', 0, 1);
  297. print '</td></tr>';
  298. }
  299. else // For external software
  300. {
  301. // Accountancy_account_capital
  302. print '<tr><td class="titlefieldcreate">'.$langs->trans("LoanAccountancyCapitalCode").'</td>';
  303. print '<td><input name="accountancy_account_capital" size="16" value="'.$object->accountancy_account_capital.'">';
  304. print '</td></tr>';
  305. // Accountancy_account_insurance
  306. print '<tr><td>'.$langs->trans("LoanAccountancyInsuranceCode").'</td>';
  307. print '<td><input name="accountancy_account_insurance" size="16" value="'.$object->accountancy_account_insurance.'">';
  308. print '</td></tr>';
  309. // Accountancy_account_interest
  310. print '<tr><td>'.$langs->trans("LoanAccountancyInterestCode").'</td>';
  311. print '<td><input name="accountancy_account_interest" size="16" value="'.$object->accountancy_account_interest.'">';
  312. print '</td></tr>';
  313. }
  314. print '</table>';
  315. dol_fiche_end();
  316. print '<div class="center">';
  317. print '<input type="submit" class="button" value="'.$langs->trans("Add").'">';
  318. print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  319. print '<input type="button" class="button" value="' . $langs->trans("Cancel") . '" onClick="javascript:history.go(-1)">';
  320. print '</div>';
  321. print '</form>';
  322. }
  323. // View
  324. if ($id > 0)
  325. {
  326. $object = new Loan($db);
  327. $result = $object->fetch($id);
  328. if ($result > 0)
  329. {
  330. $head=loan_prepare_head($object);
  331. $totalpaid = $object->getSumPayment();
  332. // Confirm for loan
  333. if ($action == 'paid')
  334. {
  335. $text=$langs->trans('ConfirmPayLoan');
  336. print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id,$langs->trans('PayLoan'),$text,"confirm_paid",'','',2);
  337. }
  338. if ($action == 'delete')
  339. {
  340. $text=$langs->trans('ConfirmDeleteLoan');
  341. print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('DeleteLoan'),$text,'confirm_delete','','',2);
  342. }
  343. if ($action == 'edit')
  344. {
  345. print '<form name="update" action="' . $_SERVER["PHP_SELF"] . '" method="POST">' . "\n";
  346. print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  347. print '<input type="hidden" name="action" value="update">';
  348. print '<input type="hidden" name="id" value="'.$id.'">';
  349. }
  350. dol_fiche_head($head, 'card', $langs->trans("Loan"), 0, 'bill');
  351. // Loan card
  352. $linkback = '<a href="' . DOL_URL_ROOT . '/loan/index.php">' . $langs->trans("BackToList") . '</a>';
  353. $morehtmlref='<div class="refidno">';
  354. // Ref loan
  355. $morehtmlref.=$form->editfieldkey("Label", 'label', $object->label, $object, $user->rights->loan->write, 'string', '', 0, 1);
  356. $morehtmlref.=$form->editfieldval("Label", 'label', $object->label, $object, $user->rights->loan->write, 'string', '', null, null, '', 1);
  357. // Project
  358. if (! empty($conf->projet->enabled))
  359. {
  360. $langs->load("projects");
  361. $morehtmlref.='<br>'.$langs->trans('Project') . ' ';
  362. if ($user->rights->commande->creer)
  363. {
  364. if ($action != 'classify')
  365. $morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
  366. if ($action == 'classify') {
  367. //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
  368. $morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
  369. $morehtmlref.='<input type="hidden" name="action" value="classin">';
  370. $morehtmlref.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
  371. $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
  372. $morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
  373. $morehtmlref.='</form>';
  374. } else {
  375. $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);
  376. }
  377. } else {
  378. if (! empty($object->fk_project)) {
  379. $proj = new Project($db);
  380. $proj->fetch($object->fk_project);
  381. $morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';
  382. $morehtmlref.=$proj->ref;
  383. $morehtmlref.='</a>';
  384. } else {
  385. $morehtmlref.='';
  386. }
  387. }
  388. }
  389. $morehtmlref.='</div>';
  390. $object->totalpaid = $totalpaid; // To give a chance to dol_banner_tab to use already paid amount to show correct status
  391. dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
  392. print '<div class="fichecenter">';
  393. print '<div class="fichehalfleft">';
  394. print '<div class="underbanner clearboth"></div>';
  395. print '<table class="border" width="100%">';
  396. // Capital
  397. if ($action == 'edit')
  398. {
  399. print '<tr><td class="fieldrequired titlefield">'.$langs->trans("LoanCapital").'</td><td>';
  400. print '<input name="capital" size="10" value="' . $object->capital . '"></td></tr>';
  401. print '</td></tr>';
  402. }
  403. else
  404. {
  405. print '<tr><td class="titlefield">'.$langs->trans("LoanCapital").'</td><td>'.price($object->capital,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
  406. }
  407. // Date start
  408. print '<tr><td>'.$langs->trans("DateStart")."</td>";
  409. print "<td>";
  410. if ($action == 'edit')
  411. {
  412. print $form->select_date($object->datestart, 'start', 0, 0, 0, 'update', 1, 0, 1);
  413. }
  414. else
  415. {
  416. print dol_print_date($object->datestart,"day");
  417. }
  418. print "</td></tr>";
  419. // Date end
  420. print '<tr><td>'.$langs->trans("DateEnd")."</td>";
  421. print "<td>";
  422. if ($action == 'edit')
  423. {
  424. print $form->select_date($object->dateend, 'end', 0, 0, 0, 'update', 1, 0, 1);
  425. }
  426. else
  427. {
  428. print dol_print_date($object->dateend,"day");
  429. }
  430. print "</td></tr>";
  431. // Nbterms
  432. print '<tr><td>'.$langs->trans("Nbterms").'</td>';
  433. print '<td>';
  434. if ($action == 'edit')
  435. {
  436. print '<input name="nbterm" size="4" value="' . $object->nbterm . '">';
  437. }
  438. else
  439. {
  440. print $object->nbterm;
  441. }
  442. print '</td></tr>';
  443. // Rate
  444. print '<tr><td>'.$langs->trans("Rate").'</td>';
  445. print '<td>';
  446. if ($action == 'edit')
  447. {
  448. print '<input name="rate" size="4" value="' . $object->rate . '">%';
  449. }
  450. else
  451. {
  452. print $object->rate . '%';
  453. }
  454. print '</td></tr>';
  455. // Accountancy account capital
  456. print '<tr><td class="nowrap">';
  457. print $langs->trans("LoanAccountancyCapitalCode");
  458. print '</td><td>';
  459. if ($action == 'edit')
  460. {
  461. if (! empty($conf->accounting->enabled))
  462. {
  463. print $formaccounting->select_account($object->account_capital, 'accountancy_account_capital', 1, '', 0, 1);
  464. }
  465. else
  466. {
  467. print '<input name="accountancy_account_capital" size="16" value="'.$object->account_capital.'">';
  468. }
  469. }
  470. else
  471. {
  472. if (! empty($conf->accounting->enabled)) {
  473. print length_accountg($object->account_capital);
  474. } else {
  475. print $object->account_capital;
  476. }
  477. }
  478. print '</td></tr>';
  479. // Accountancy account insurance
  480. print '<tr><td class="nowrap">';
  481. print $langs->trans("LoanAccountancyInsuranceCode");
  482. print '</td><td>';
  483. if ($action == 'edit')
  484. {
  485. if (! empty($conf->accounting->enabled))
  486. {
  487. print $formaccounting->select_account($object->account_insurance, 'accountancy_account_insurance', 1, '', 0, 1);
  488. }
  489. else
  490. {
  491. print '<input name="accountancy_account_insurance" size="16" value="'.$object->account_insurance.'">';
  492. }
  493. }
  494. else
  495. {
  496. if (! empty($conf->accounting->enabled)) {
  497. print length_accountg($object->account_insurance);
  498. } else {
  499. print $object->account_insurance;
  500. }
  501. }
  502. print '</td></tr>';
  503. // Accountancy account interest
  504. print '<tr><td class="nowrap">';
  505. print $langs->trans("LoanAccountancyInterestCode");
  506. print '</td><td>';
  507. if ($action == 'edit')
  508. {
  509. if (! empty($conf->accounting->enabled))
  510. {
  511. print $formaccounting->select_account($object->account_interest, 'accountancy_account_interest', 1, '', 0, 1);
  512. }
  513. else
  514. {
  515. print '<input name="accountancy_account_interest" size="16" value="'.$object->account_interest.'">';
  516. }
  517. }
  518. else
  519. {
  520. if (! empty($conf->accounting->enabled)) {
  521. print length_accountg($object->account_interest);
  522. } else {
  523. print $object->account_interest;
  524. }
  525. }
  526. print '</td></tr>';
  527. print '</table>';
  528. print '</div>';
  529. print '<div class="fichehalfright">';
  530. print '<div class="ficheaddleft">';
  531. /*
  532. * Payments
  533. */
  534. $sql = "SELECT p.rowid, p.num_payment, datep as dp,";
  535. $sql.= " p.amount_capital, p.amount_insurance, p.amount_interest,";
  536. $sql.= " c.libelle as paiement_type";
  537. $sql.= " FROM ".MAIN_DB_PREFIX."payment_loan as p";
  538. $sql.= ", ".MAIN_DB_PREFIX."c_paiement as c ";
  539. $sql.= ", ".MAIN_DB_PREFIX."loan as l";
  540. $sql.= " WHERE p.fk_loan = ".$id;
  541. $sql.= " AND p.fk_loan = l.rowid";
  542. $sql.= " AND l.entity = ".$conf->entity;
  543. $sql.= " AND p.fk_typepayment = c.id";
  544. $sql.= " ORDER BY dp DESC";
  545. //print $sql;
  546. $resql = $db->query($sql);
  547. if ($resql)
  548. {
  549. $num = $db->num_rows($resql);
  550. $i = 0;
  551. $total_insurance = 0;
  552. $total_interest = 0;
  553. $total_capital = 0;
  554. print '<table class="noborder paymenttable">';
  555. print '<tr class="liste_titre">';
  556. print '<td>'.$langs->trans("RefPayment").'</td>';
  557. print '<td>'.$langs->trans("Date").'</td>';
  558. print '<td>'.$langs->trans("Type").'</td>';
  559. print '<td align="right">'.$langs->trans("Insurance").'</td>';
  560. print '<td align="right">'.$langs->trans("Interest").'</td>';
  561. print '<td align="right">'.$langs->trans("LoanCapital").'</td>';
  562. print '</tr>';
  563. $var=True;
  564. while ($i < $num)
  565. {
  566. $objp = $db->fetch_object($resql);
  567. print '<tr class="oddeven">';
  568. print '<td><a href="'.DOL_URL_ROOT.'/loan/payment/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"),"payment").' '.$objp->rowid.'</a></td>';
  569. print '<td>'.dol_print_date($db->jdate($objp->dp),'day')."</td>\n";
  570. print "<td>".$objp->paiement_type.' '.$objp->num_payment."</td>\n";
  571. print '<td align="right">'.price($objp->amount_insurance, 0, $langs, 0, 0, -1, $conf->currency)."</td>\n";
  572. print '<td align="right">'.price($objp->amount_interest, 0, $langs, 0, 0, -1, $conf->currency)."</td>\n";
  573. print '<td align="right">'.price($objp->amount_capital, 0, $langs, 0, 0, -1, $conf->currency)."</td>\n";
  574. print "</tr>";
  575. $total_capital += $objp->amount_capital;
  576. $i++;
  577. }
  578. $totalpaid = $total_capital;
  579. if ($object->paid == 0)
  580. {
  581. print '<tr><td colspan="5" align="right">'.$langs->trans("AlreadyPaid").' :</td><td align="right">'.price($totalpaid, 0, $langs, 0, 0, -1, $conf->currency).'</td></tr>';
  582. print '<tr><td colspan="5" align="right">'.$langs->trans("AmountExpected").' :</td><td align="right">'.price($object->capital,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
  583. $staytopay = $object->capital - $totalpaid;
  584. print '<tr><td colspan="5" align="right">'.$langs->trans("RemainderToPay").' :</td>';
  585. print '<td align="right"><b>'.price($staytopay, 0, $langs, 0, 0, -1, $conf->currency).'</b></td></tr>';
  586. }
  587. print "</table>";
  588. $db->free($resql);
  589. }
  590. else
  591. {
  592. dol_print_error($db);
  593. }
  594. print '</div>';
  595. print '</div>';
  596. print '</div>';
  597. print '<div class="clearboth"></div>';
  598. dol_fiche_end();
  599. if ($action == 'edit')
  600. {
  601. print '<div class="center">';
  602. print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
  603. print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  604. print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
  605. print '</div>';
  606. }
  607. if ($action == 'edit') print "</form>\n";
  608. /*
  609. * Buttons actions
  610. */
  611. if ($action != 'edit')
  612. {
  613. $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
  614. if (empty($reshook))
  615. {
  616. print '<div class="tabsAction">';
  617. // Edit
  618. if ($user->rights->loan->write)
  619. {
  620. print '<a class="butAction" href="'.DOL_URL_ROOT.'/loan/card.php?id='.$object->id.'&amp;action=edit">'.$langs->trans("Modify").'</a>';
  621. }
  622. // Emit payment
  623. if ($object->paid == 0 && ((price2num($object->capital) > 0 && round($staytopay) < 0) || (price2num($object->capital) > 0 && round($staytopay) > 0)) && $user->rights->loan->write)
  624. {
  625. print '<a class="butAction" href="'.DOL_URL_ROOT.'/loan/payment/payment.php?id='.$object->id.'&amp;action=create">'.$langs->trans("DoPayment").'</a>';
  626. }
  627. // Classify 'paid'
  628. if ($object->paid == 0 && round($staytopay) <=0 && $user->rights->loan->write)
  629. {
  630. print '<a class="butAction" href="'.DOL_URL_ROOT.'/loan/card.php?id='.$object->id.'&amp;action=paid">'.$langs->trans("ClassifyPaid").'</a>';
  631. }
  632. // Delete
  633. if ($user->rights->loan->delete)
  634. {
  635. print '<a class="butActionDelete" href="'.DOL_URL_ROOT.'/loan/card.php?id='.$object->id.'&amp;action=delete">'.$langs->trans("Delete").'</a>';
  636. }
  637. print "</div>";
  638. }
  639. }
  640. }
  641. else
  642. {
  643. // Loan not found
  644. dol_print_error('',$object->error);
  645. }
  646. }
  647. llxFooter();
  648. $db->close();