dolibarr  17.0.4
card.php
Go to the documentation of this file.
1 <?php
2 use Stripe\BankAccount;
3 
4 /* Copyright (C) 2014-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
5  * Copyright (C) 2015 Frederic France <frederic.france@free.fr>
6  * Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
7  * Copyright (C) 2020 Maxime DEMAREST <maxime@indelog.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  */
22 
29 // Load Dolibarr environment
30 require '../main.inc.php';
31 require_once DOL_DOCUMENT_ROOT.'/loan/class/loan.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/loan.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
34 if (isModEnabled('accounting')) {
35  require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
36 }
37 if (isModEnabled('accounting')) {
38  require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
39 }
40 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
41 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
42 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
43 
44 // Load translation files required by the page
45 $langs->loadLangs(array("compta", "bills", "loan"));
46 
47 $id = GETPOST('id', 'int');
48 $action = GETPOST('action', 'aZ09');
49 $confirm = GETPOST('confirm');
50 $cancel = GETPOST('cancel', 'alpha');
51 
52 $projectid = GETPOST('projectid', 'int');
53 
54 // Security check
55 $socid = GETPOST('socid', 'int');
56 if ($user->socid) {
57  $socid = $user->socid;
58 }
59 $result = restrictedArea($user, 'loan', $id, '', '');
60 
61 $object = new Loan($db);
62 
63 $hookmanager->initHooks(array('loancard', 'globalcard'));
64 
65 $error = 0;
66 
67 
68 /*
69  * Actions
70  */
71 
72 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
73 if ($reshook < 0) {
74  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
75 }
76 if (empty($reshook)) {
77  // Classify paid
78  if ($action == 'confirm_paid' && $confirm == 'yes' && $user->rights->loan->write) {
79  $object->fetch($id);
80  $result = $object->setPaid($user);
81  if ($result > 0) {
82  setEventMessages($langs->trans('LoanPaid'), null, 'mesgs');
83  } else {
84  setEventMessages($loan->error, null, 'errors');
85  }
86  }
87 
88  // Delete loan
89  if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->loan->write) {
90  $object->fetch($id);
91  $result = $object->delete($user);
92  if ($result > 0) {
93  setEventMessages($langs->trans('LoanDeleted'), null, 'mesgs');
94  header("Location: list.php");
95  exit;
96  } else {
97  setEventMessages($loan->error, null, 'errors');
98  }
99  }
100 
101  // Add loan
102  if ($action == 'add' && $user->rights->loan->write) {
103  if (!$cancel) {
104  $datestart = dol_mktime(12, 0, 0, GETPOST('startmonth', 'int'), GETPOST('startday', 'int'), GETPOST('startyear', 'int'));
105  $dateend = dol_mktime(12, 0, 0, GETPOST('endmonth', 'int'), GETPOST('endday', 'int'), GETPOST('endyear', 'int'));
106  $capital = price2num(GETPOST('capital'));
107  $rate = price2num(GETPOST('rate'));
108 
109  if (!$capital) {
110  $error++; $action = 'create';
111  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("LoanCapital")), null, 'errors');
112  }
113  if (!$datestart) {
114  $error++; $action = 'create';
115  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("DateStart")), null, 'errors');
116  }
117  if (!$dateend) {
118  $error++; $action = 'create';
119  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("DateEnd")), null, 'errors');
120  }
121  if ($rate == '') {
122  $error++; $action = 'create';
123  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Rate")), null, 'errors');
124  }
125 
126  if (!$error) {
127  $object->label = GETPOST('label');
128  $object->fk_bank = GETPOST('accountid');
129  $object->capital = $capital;
130  $object->datestart = $datestart;
131  $object->dateend = $dateend;
132  $object->nbterm = GETPOST('nbterm');
133  $object->rate = $rate;
134  $object->note_private = GETPOST('note_private', 'restricthtml');
135  $object->note_public = GETPOST('note_public', 'restricthtml');
136  $object->fk_project = GETPOST('projectid', 'int');
137  $object->insurance_amount = GETPOST('insurance_amount', 'int');
138 
139  $accountancy_account_capital = GETPOST('accountancy_account_capital');
140  $accountancy_account_insurance = GETPOST('accountancy_account_insurance');
141  $accountancy_account_interest = GETPOST('accountancy_account_interest');
142 
143  if ($accountancy_account_capital <= 0) {
144  $object->account_capital = '';
145  } else {
146  $object->account_capital = $accountancy_account_capital;
147  }
148  if ($accountancy_account_insurance <= 0) {
149  $object->account_insurance = '';
150  } else {
151  $object->account_insurance = $accountancy_account_insurance;
152  }
153  if ($accountancy_account_interest <= 0) {
154  $object->account_interest = '';
155  } else {
156  $object->account_interest = $accountancy_account_interest;
157  }
158 
159  $id = $object->create($user);
160  if ($id <= 0) {
161  $error++;
162  setEventMessages($object->error, $object->errors, 'errors');
163  $action = 'create';
164  }
165  }
166  } else {
167  header("Location: list.php");
168  exit();
169  }
170  } elseif ($action == 'update' && $user->rights->loan->write) {
171  // Update record
172  if (!$cancel) {
173  $result = $object->fetch($id);
174 
175  $datestart = dol_mktime(12, 0, 0, GETPOST('startmonth', 'int'), GETPOST('startday', 'int'), GETPOST('startyear', 'int'));
176  $dateend = dol_mktime(12, 0, 0, GETPOST('endmonth', 'int'), GETPOST('endday', 'int'), GETPOST('endyear', 'int'));
177  $capital = price2num(GETPOST('capital'));
178 
179  if (!$capital) {
180  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("LoanCapital")), null, 'errors');
181  $action = 'edit';
182  } else {
183  $object->datestart = $datestart;
184  $object->dateend = $dateend;
185  $object->capital = $capital;
186  $object->nbterm = GETPOST("nbterm", 'int');
187  $object->rate = price2num(GETPOST("rate", 'alpha'));
188  $object->insurance_amount = price2num(GETPOST('insurance_amount', 'int'));
189 
190  $accountancy_account_capital = GETPOST('accountancy_account_capital');
191  $accountancy_account_insurance = GETPOST('accountancy_account_insurance');
192  $accountancy_account_interest = GETPOST('accountancy_account_interest');
193 
194  if ($accountancy_account_capital <= 0) {
195  $object->account_capital = '';
196  } else {
197  $object->account_capital = $accountancy_account_capital;
198  }
199  if ($accountancy_account_insurance <= 0) {
200  $object->account_insurance = '';
201  } else {
202  $object->account_insurance = $accountancy_account_insurance;
203  }
204  if ($accountancy_account_interest <= 0) {
205  $object->account_interest = '';
206  } else {
207  $object->account_interest = $accountancy_account_interest;
208  }
209  }
210 
211  $result = $object->update($user);
212 
213  if ($result > 0) {
214  header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
215  exit;
216  } else {
217  $error++;
218  setEventMessages($object->error, $object->errors, 'errors');
219  }
220  } else {
221  header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
222  exit;
223  }
224  }
225 
226  // Link to a project
227  if ($action == 'classin' && $user->rights->loan->write) {
228  $object->fetch($id);
229  $result = $object->setProject($projectid);
230  if ($result < 0) {
231  setEventMessages($object->error, $object->errors, 'errors');
232  }
233  }
234 
235  if ($action == 'setlabel' && $user->rights->loan->write) {
236  $object->fetch($id);
237  $result = $object->setValueFrom('label', GETPOST('label'), '', '', 'text', '', $user, 'LOAN_MODIFY');
238  if ($result < 0) {
239  setEventMessages($object->error, $object->errors, 'errors');
240  }
241  }
242 }
243 
244 
245 /*
246  * View
247  */
248 
249 $form = new Form($db);
250 $formproject = new FormProjets($db);
251 if (isModEnabled('accounting')) {
252  $formaccounting = new FormAccounting($db);
253 }
254 
255 $title = $langs->trans("Loan").' - '.$langs->trans("Card");
256 $help_url = 'EN:Module_Loan|FR:Module_Emprunt';
257 llxHeader("", $title, $help_url);
258 
259 
260 // Create mode
261 if ($action == 'create') {
262  //WYSIWYG Editor
263  require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
264 
265  print load_fiche_titre($langs->trans("NewLoan"), '', 'money-bill-alt');
266 
267  $datec = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
268 
269  print '<form name="loan" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
270  print '<input type="hidden" name="token" value="'.newToken().'">';
271  print '<input type="hidden" name="action" value="add">';
272 
273  print dol_get_fiche_head();
274 
275  print '<table class="border centpercent">';
276 
277  // Label
278  print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("Label").'</td><td><input name="label" class="minwidth300" maxlength="255" value="'.dol_escape_htmltag(GETPOST('label')).'" autofocus="autofocus"></td></tr>';
279 
280  // Bank account
281  if (isModEnabled("banque")) {
282  print '<tr><td class="fieldrequired">'.$langs->trans("Account").'</td><td>';
283  $form->select_comptes(GETPOST("accountid"), "accountid", 0, "courant=1", 1); // Show list of bank account with courant
284  print '</td></tr>';
285  } else {
286  print '<tr><td>'.$langs->trans("Account").'</td><td>';
287  print $langs->trans("NoBankAccountDefined");
288  print '</td></tr>';
289  }
290 
291  // Capital
292  print '<tr><td class="fieldrequired">'.$langs->trans("LoanCapital").'</td><td><input name="capital" size="10" value="'.dol_escape_htmltag(GETPOST("capital")).'"></td></tr>';
293 
294  // Date Start
295  print "<tr>";
296  print '<td class="fieldrequired">'.$langs->trans("DateStart").'</td><td>';
297  print $form->selectDate($datestart ? $datestart : -1, 'start', '', '', '', 'add', 1, 1);
298  print '</td></tr>';
299 
300  // Date End
301  print "<tr>";
302  print '<td class="fieldrequired">'.$langs->trans("DateEnd").'</td><td>';
303  print $form->selectDate($dateend ? $dateend : -1, 'end', '', '', '', 'add', 1, 1);
304  print '</td></tr>';
305 
306  // Number of terms
307  print '<tr><td class="fieldrequired">'.$langs->trans("Nbterms").'</td><td><input name="nbterm" size="5" value="'.dol_escape_htmltag(GETPOST('nbterm')).'"></td></tr>';
308 
309  // Rate
310  print '<tr><td class="fieldrequired">'.$langs->trans("Rate").'</td><td><input name="rate" size="5" value="'.dol_escape_htmltag(GETPOST("rate")).'"> %</td></tr>';
311 
312  // Insurance amount
313  print '<tr><td>'.$langs->trans("Insurance").'</td><td><input name="insurance_amount" size="10" value="'.dol_escape_htmltag(GETPOST("insurance_amount")).'" placeholder="'.$langs->trans('Amount').'"></td></tr>';
314 
315  // Project
316  if (isModEnabled('project')) {
317  $formproject = new FormProjets($db);
318 
319  // Projet associe
320  $langs->loadLangs(array("projects"));
321 
322  print '<tr><td>'.$langs->trans("Project").'</td><td>';
323 
324  $numproject = $formproject->select_projects(-1, $projectid, 'projectid', 16, 0, 1, 1);
325 
326  print '</td></tr>';
327  }
328 
329  // Note Private
330  print '<tr>';
331  print '<td class="tdtop">'.$langs->trans('NotePrivate').'</td>';
332  print '<td>';
333 
334  $doleditor = new DolEditor('note_private', GETPOST('note_private', 'alpha'), '', 160, 'dolibarr_notes', 'In', false, true, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_6, '90%');
335  print $doleditor->Create(1);
336 
337  print '</td></tr>';
338 
339  // Note Public
340  print '<tr>';
341  print '<td class="tdtop">'.$langs->trans('NotePublic').'</td>';
342  print '<td>';
343  $doleditor = new DolEditor('note_public', GETPOST('note_public', 'alpha'), '', 160, 'dolibarr_notes', 'In', false, true, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_6, '90%');
344  print $doleditor->Create(1);
345  print '</td></tr>';
346 
347  // Accountancy
348  if (isModEnabled('accounting')) {
349  // Accountancy_account_capital
350  print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("LoanAccountancyCapitalCode").'</td>';
351  print '<td>';
352  print $formaccounting->select_account(GETPOST('accountancy_account_capital') ?GETPOST('accountancy_account_capital') : $conf->global->LOAN_ACCOUNTING_ACCOUNT_CAPITAL, 'accountancy_account_capital', 1, '', 1, 1);
353  print '</td></tr>';
354 
355  // Accountancy_account_insurance
356  print '<tr><td class="fieldrequired">'.$langs->trans("LoanAccountancyInsuranceCode").'</td>';
357  print '<td>';
358  print $formaccounting->select_account(GETPOST('accountancy_account_insurance') ?GETPOST('accountancy_account_insurance') : $conf->global->LOAN_ACCOUNTING_ACCOUNT_INSURANCE, 'accountancy_account_insurance', 1, '', 1, 1);
359  print '</td></tr>';
360 
361  // Accountancy_account_interest
362  print '<tr><td class="fieldrequired">'.$langs->trans("LoanAccountancyInterestCode").'</td>';
363  print '<td>';
364  print $formaccounting->select_account(GETPOST('accountancy_account_interest') ?GETPOST('accountancy_account_interest') : $conf->global->LOAN_ACCOUNTING_ACCOUNT_INTEREST, 'accountancy_account_interest', 1, '', 1, 1);
365  print '</td></tr>';
366  } else // For external software
367  {
368  // Accountancy_account_capital
369  print '<tr><td class="titlefieldcreate">'.$langs->trans("LoanAccountancyCapitalCode").'</td>';
370  print '<td><input name="accountancy_account_capital" size="16" value="'.$object->accountancy_account_capital.'">';
371  print '</td></tr>';
372 
373  // Accountancy_account_insurance
374  print '<tr><td>'.$langs->trans("LoanAccountancyInsuranceCode").'</td>';
375  print '<td><input name="accountancy_account_insurance" size="16" value="'.$object->accountancy_account_insurance.'">';
376  print '</td></tr>';
377 
378  // Accountancy_account_interest
379  print '<tr><td>'.$langs->trans("LoanAccountancyInterestCode").'</td>';
380  print '<td><input name="accountancy_account_interest" size="16" value="'.$object->accountancy_account_interest.'">';
381  print '</td></tr>';
382  }
383  print '</table>';
384 
385  print dol_get_fiche_end();
386 
387  print $form->buttonsSaveCancel("Add");
388 
389  print '</form>';
390 }
391 
392 // View
393 if ($id > 0) {
394  $object = new Loan($db);
395  $result = $object->fetch($id);
396 
397  if ($result > 0) {
398  $head = loan_prepare_head($object);
399 
400  $totalpaid = $object->getSumPayment();
401 
402  // Confirm for loan
403  if ($action == 'paid') {
404  $text = $langs->trans('ConfirmPayLoan');
405  print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PayLoan'), $text, "confirm_paid", '', '', 2);
406  }
407 
408  if ($action == 'delete') {
409  $text = $langs->trans('ConfirmDeleteLoan');
410  print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteLoan'), $text, 'confirm_delete', '', '', 2);
411  }
412 
413  if ($action == 'edit') {
414  print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
415  print '<input type="hidden" name="token" value="'.newToken().'">';
416  print '<input type="hidden" name="action" value="update">';
417  print '<input type="hidden" name="id" value="'.$id.'">';
418  }
419 
420  print dol_get_fiche_head($head, 'card', $langs->trans("Loan"), -1, 'bill');
421 
422  // Loan card
423 
424  $linkback = '<a href="'.DOL_URL_ROOT.'/loan/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
425 
426  $morehtmlref = '<div class="refidno">';
427  // Ref loan
428  $morehtmlref .= $form->editfieldkey("Label", 'label', $object->label, $object, $user->rights->loan->write, 'string', '', 0, 1);
429  $morehtmlref .= $form->editfieldval("Label", 'label', $object->label, $object, $user->rights->loan->write, 'string', '', null, null, '', 1);
430  // Project
431  if (isModEnabled('project')) {
432  $langs->loadLangs(array("projects"));
433  $morehtmlref .= '<br>'.$langs->trans('Project').' ';
434  if ($user->rights->loan->write) {
435  if ($action != 'classify') {
436  $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> : ';
437  }
438  if ($action == 'classify') {
439  //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
440  $morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
441  $morehtmlref .= '<input type="hidden" name="action" value="classin">';
442  $morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
443  $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
444  $morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
445  $morehtmlref .= '</form>';
446  } else {
447  $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
448  }
449  } else {
450  if (!empty($object->fk_project)) {
451  $proj = new Project($db);
452  $proj->fetch($object->fk_project);
453  $morehtmlref .= ' : '.$proj->getNomUrl(1);
454  if ($proj->title) {
455  $morehtmlref .= ' - '.$proj->title;
456  }
457  } else {
458  $morehtmlref .= '';
459  }
460  }
461  }
462  $morehtmlref .= '</div>';
463 
464  $object->totalpaid = $totalpaid; // To give a chance to dol_banner_tab to use already paid amount to show correct status
465 
466  dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
467 
468  print '<div class="fichecenter">';
469  print '<div class="fichehalfleft">';
470  print '<div class="underbanner clearboth"></div>';
471 
472  print '<table class="border centpercent tableforfield">';
473 
474  // Capital
475  if ($action == 'edit') {
476  print '<tr><td class="fieldrequired titlefield">'.$langs->trans("LoanCapital").'</td><td>';
477  print '<input name="capital" size="10" value="'.$object->capital.'"></td></tr>';
478  print '</td></tr>';
479  } else {
480  print '<tr><td class="titlefield">'.$langs->trans("LoanCapital").'</td><td><span class="amount">'.price($object->capital, 0, $outputlangs, 1, -1, -1, $conf->currency).'</span></td></tr>';
481  }
482 
483  // Insurance
484  if ($action == 'edit') {
485  print '<tr><td class="titlefield">'.$langs->trans("Insurance").'</td><td>';
486  print '<input name="insurance_amount" size="10" value="'.$object->insurance_amount.'"></td></tr>';
487  print '</td></tr>';
488  } else {
489  print '<tr><td class="titlefield">'.$langs->trans("Insurance").'</td><td><span class="amount">'.price($object->insurance_amount, 0, $outputlangs, 1, -1, -1, $conf->currency).'</span></td></tr>';
490  }
491 
492  // Date start
493  print '<tr><td>'.$langs->trans("DateStart")."</td>";
494  print "<td>";
495  if ($action == 'edit') {
496  print $form->selectDate($object->datestart, 'start', 0, 0, 0, 'update', 1, 0);
497  } else {
498  print dol_print_date($object->datestart, "day");
499  }
500  print "</td></tr>";
501 
502  // Date end
503  print '<tr><td>'.$langs->trans("DateEnd")."</td>";
504  print "<td>";
505  if ($action == 'edit') {
506  print $form->selectDate($object->dateend, 'end', 0, 0, 0, 'update', 1, 0);
507  } else {
508  print dol_print_date($object->dateend, "day");
509  }
510  print "</td></tr>";
511 
512  // Nbterms
513  print '<tr><td>'.$langs->trans("Nbterms").'</td>';
514  print '<td>';
515  if ($action == 'edit') {
516  print '<input name="nbterm" size="4" value="'.$object->nbterm.'">';
517  } else {
518  print $object->nbterm;
519  }
520  print '</td></tr>';
521 
522  // Rate
523  print '<tr><td>'.$langs->trans("Rate").'</td>';
524  print '<td>';
525  if ($action == 'edit') {
526  print '<input name="rate" size="4" value="'.$object->rate.'">%';
527  } else {
528  print price($object->rate).'%';
529  }
530  print '</td></tr>';
531 
532  // Accountancy account capital
533  print '<tr>';
534  if ($action == 'edit') {
535  print '<td class="nowrap fieldrequired">';
536  print $langs->trans("LoanAccountancyCapitalCode");
537  print '</td><td>';
538 
539  if (isModEnabled('accounting')) {
540  print $formaccounting->select_account($object->account_capital, 'accountancy_account_capital', 1, '', 1, 1);
541  } else {
542  print '<input name="accountancy_account_capital" size="16" value="'.$object->account_capital.'">';
543  }
544  print '</td>';
545  } else {
546  print '<td class="nowrap">';
547  print $langs->trans("LoanAccountancyCapitalCode");
548  print '</td><td>';
549 
550  if (isModEnabled('accounting')) {
551  $accountingaccount = new AccountingAccount($db);
552  $accountingaccount->fetch('', $object->account_capital, 1);
553 
554  print $accountingaccount->getNomUrl(0, 1, 1, '', 1);
555  } else {
556  print $object->account_capital;
557  }
558 
559  print '</td>';
560  }
561  print '</tr>';
562 
563  // Accountancy account insurance
564  print '<tr>';
565  if ($action == 'edit') {
566  print '<td class="nowrap fieldrequired">';
567  print $langs->trans("LoanAccountancyInsuranceCode");
568  print '</td><td>';
569 
570  if (isModEnabled('accounting')) {
571  print $formaccounting->select_account($object->account_insurance, 'accountancy_account_insurance', 1, '', 1, 1);
572  } else {
573  print '<input name="accountancy_account_insurance" size="16" value="'.$object->account_insurance.'">';
574  }
575  print '</td>';
576  } else {
577  print '<td class="nowrap">';
578  print $langs->trans("LoanAccountancyInsuranceCode");
579  print '</td><td>';
580 
581  if (isModEnabled('accounting')) {
582  $accountingaccount = new AccountingAccount($db);
583  $accountingaccount->fetch('', $object->account_insurance, 1);
584 
585  print $accountingaccount->getNomUrl(0, 1, 1, '', 1);
586  } else {
587  print $object->account_insurance;
588  }
589 
590  print '</td>';
591  }
592  print '</tr>';
593 
594  // Accountancy account interest
595  print '<tr>';
596  if ($action == 'edit') {
597  print '<td class="nowrap fieldrequired">';
598  print $langs->trans("LoanAccountancyInterestCode");
599  print '</td><td>';
600 
601  if (isModEnabled('accounting')) {
602  print $formaccounting->select_account($object->account_interest, 'accountancy_account_interest', 1, '', 1, 1);
603  } else {
604  print '<input name="accountancy_account_interest" size="16" value="'.$object->account_interest.'">';
605  }
606  print '</td>';
607  } else {
608  print '<td class="nowrap">';
609  print $langs->trans("LoanAccountancyInterestCode");
610  print '</td><td>';
611 
612  if (isModEnabled('accounting')) {
613  $accountingaccount = new AccountingAccount($db);
614  $accountingaccount->fetch('', $object->account_interest, 1);
615 
616  print $accountingaccount->getNomUrl(0, 1, 1, '', 1);
617  } else {
618  print $object->account_interest;
619  }
620 
621  print '</td>';
622  }
623  print '</tr>';
624 
625  // Other attributes
626  $parameters = array();
627  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
628  print $hookmanager->resPrint;
629 
630  print '</table>';
631 
632  print '</div>';
633  print '<div class="fichehalfright">';
634 
635  /*
636  * Payments
637  */
638  $sql = "SELECT p.rowid, p.num_payment, p.datep as dp,";
639  $sql .= " p.amount_capital, p.amount_insurance, p.amount_interest,";
640  $sql .= " b.fk_account,";
641  $sql .= " c.libelle as paiement_type";
642  $sql .= " FROM ".MAIN_DB_PREFIX."payment_loan as p";
643  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank as b ON p.fk_bank = b.rowid";
644  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as c ON p.fk_typepayment = c.id,";
645  $sql .= " ".MAIN_DB_PREFIX."loan as l";
646  $sql .= " WHERE p.fk_loan = ".((int) $id);
647  $sql .= " AND p.fk_loan = l.rowid";
648  $sql .= " AND l.entity IN ( ".getEntity('loan').")";
649  $sql .= " ORDER BY dp DESC";
650 
651  //print $sql;
652  $resql = $db->query($sql);
653  if ($resql) {
654  $num = $db->num_rows($resql);
655  $i = 0;
656  $total_insurance = 0;
657  $total_interest = 0;
658  $total_capital = 0;
659 
660  print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
661  print '<table class="noborder paymenttable">';
662  print '<tr class="liste_titre">';
663  print '<td>'.$langs->trans("RefPayment").'</td>';
664  print '<td>'.$langs->trans("Date").'</td>';
665  print '<td>'.$langs->trans("Type").'</td>';
666  print '<td>'.$langs->trans("BankAccount").'</td>';
667  print '<td class="right">'.$langs->trans("Insurance").'</td>';
668  print '<td class="right">'.$langs->trans("Interest").'</td>';
669  print '<td class="right">'.$langs->trans("LoanCapital").'</td>';
670  print '</tr>';
671 
672  $conf->cache['bankaccount'] = array();
673 
674  while ($i < $num) {
675  $objp = $db->fetch_object($resql);
676 
677  print '<tr class="oddeven">';
678  print '<td><a href="'.DOL_URL_ROOT.'/loan/payment/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"), "payment").' '.$objp->rowid.'</a></td>';
679  print '<td>'.dol_print_date($db->jdate($objp->dp), 'day')."</td>\n";
680  print "<td>".$objp->paiement_type.' '.$objp->num_payment."</td>\n";
681  print "<td>";
682  if (!empty($conf->cache['bankaccount'][$objp->fk_account])) {
683  $tmpbank = $conf->cache['bankaccount'][$objp->fk_account];
684  } else {
685  $tmpbank = new Account($db);
686  $tmpbank->fetch($objp->fk_account);
687  $conf->cache['bankaccount'][$objp->fk_account] = $tmpbank;
688  }
689  print $tmpbank->getNomUrl(1);
690  print "</td>\n";
691  print '<td class="nowrap right"><span class="amount">'.price($objp->amount_insurance, 0, $outputlangs, 1, -1, -1, $conf->currency)."</span></td>\n";
692  print '<td class="nowrap right"><span class="amount">'.price($objp->amount_interest, 0, $outputlangs, 1, -1, -1, $conf->currency)."</span></td>\n";
693  print '<td class="nowrap right"><span class="amount">'.price($objp->amount_capital, 0, $outputlangs, 1, -1, -1, $conf->currency)."</span></td>\n";
694  print "</tr>";
695  $total_capital += $objp->amount_capital;
696  $i++;
697  }
698 
699  $totalpaid = $total_capital;
700 
701  if ($object->paid == 0 || $object->paid == 2) {
702  print '<tr><td colspan="6" class="right">'.$langs->trans("AlreadyPaid").' :</td><td class="nowrap right">'.price($totalpaid, 0, $langs, 0, -1, -1, $conf->currency).'</td></tr>';
703  print '<tr><td colspan="6" class="right">'.$langs->trans("AmountExpected").' :</td><td class="nowrap right">'.price($object->capital, 0, $outputlangs, 1, -1, -1, $conf->currency).'</td></tr>';
704 
705  $staytopay = $object->capital - $totalpaid;
706 
707  print '<tr><td colspan="6" class="right">'.$langs->trans("RemainderToPay").' :</td>';
708  print '<td class="nowrap right'.($staytopay ? ' amountremaintopay' : ' amountpaymentcomplete').'">';
709  print price($staytopay, 0, $langs, 0, -1, -1, $conf->currency);
710  print '</td></tr>';
711  }
712  print "</table>";
713  print '</div>';
714 
715  $db->free($resql);
716  } else {
717  dol_print_error($db);
718  }
719 
720  print '</div>';
721  print '</div>';
722 
723  print '<div class="clearboth"></div>';
724 
725  print dol_get_fiche_end();
726 
727  if ($action == 'edit') {
728  print $form->buttonsSaveCancel();
729 
730  print '</form>';
731  }
732 
733  /*
734  * Buttons actions
735  */
736  if ($action != 'edit') {
737  $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
738  if (empty($reshook)) {
739  print '<div class="tabsAction">';
740 
741  // Edit
742  if (($object->paid == 0 || $object->paid == 2) && $user->rights->loan->write) {
743  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/loan/card.php?id='.$object->id.'&action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a></div>';
744  }
745 
746  // Emit payment
747  if (($object->paid == 0 || $object->paid == 2) && ((price2num($object->capital) > 0 && round($staytopay) < 0) || (price2num($object->capital) > 0 && round($staytopay) > 0)) && $user->rights->loan->write) {
748  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/loan/payment/payment.php?id='.$object->id.'&action=create&token='.newToken().'">'.$langs->trans("DoPayment").'</a></div>';
749  }
750 
751  // Classify 'paid'
752  if (($object->paid == 0 || $object->paid == 2) && round($staytopay) <= 0 && $user->rights->loan->write) {
753  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/loan/card.php?id='.$object->id.'&action=paid&token='.newToken().'">'.$langs->trans("ClassifyPaid").'</a></div>';
754  }
755 
756  // Delete
757  if (($object->paid == 0 || $object->paid == 2) && $user->rights->loan->delete) {
758  print '<div class="inline-block divButAction"><a class="butActionDelete" href="'.DOL_URL_ROOT.'/loan/card.php?id='.$object->id.'&action=delete&token='.newToken().'">'.$langs->trans("Delete").'</a></div>';
759  }
760 
761  print "</div>";
762  }
763  }
764  } else {
765  // Loan not found
766  dol_print_error('', $object->error);
767  }
768 }
769 
770 // End of page
771 llxFooter();
772 $db->close();
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
Definition: agenda.php:118
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage bank accounts.
Class to manage accounting accounts.
Class to manage a WYSIWYG editor.
Class to manage generation of HTML components for accounting management.
Class to manage generation of HTML components Only common components must be here.
Class to manage building of HTML components.
Loan.
Definition: loan.class.php:31
Class to manage projects.
$parameters
Actions.
Definition: card.php:79
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
Definition: index.php:745
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
loan_prepare_head($object)
Prepare array with list of tabs.
Definition: loan.lib.php:33
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.