* Copyright (C) 2018 Alexandre Spangaro * Copyright (C) 2020 Maxime DEMAREST * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/loan/schedule.php * \ingroup loan * \brief Schedule card */ // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/loan.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/loan.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/loanschedule.class.php'; require_once DOL_DOCUMENT_ROOT.'/loan/class/paymentloan.class.php'; $loanid = GETPOST('loanid', 'int'); $action = GETPOST('action', 'aZ09'); // Security check $socid = 0; if (GETPOSTISSET('socid')) { $socid = GETPOST('socid', 'int'); } if ($user->socid) { $socid = $user->socid; } if (empty($user->rights->loan->calc)) { accessforbidden(); } // Load translation files required by the page $langs->loadLangs(array("compta", "bills", "loan")); $object = new Loan($db); $object->fetch($loanid); $echeances = new LoanSchedule($db); $echeances->fetchAll($object->id); if ($object->paid > 0 && count($echeances->lines) == 0) { $pay_without_schedule = 1; } /* * Actions */ if ($action == 'createecheancier' && empty($pay_without_schedule)) { $db->begin(); $i = 1; while ($i < $object->nbterm + 1) { $date = GETPOST('hi_date'.$i, 'int'); $mens = price2num(GETPOST('mens'.$i)); $int = price2num(GETPOST('hi_interets'.$i)); $insurance = price2num(GETPOST('hi_insurance'.$i)); $new_echeance = new LoanSchedule($db); $new_echeance->fk_loan = $object->id; $new_echeance->datec = dol_now(); $new_echeance->tms = dol_now(); $new_echeance->datep = $date; $new_echeance->amount_capital = $mens - $int; $new_echeance->amount_insurance = $insurance; $new_echeance->amount_interest = $int; $new_echeance->fk_typepayment = 3; $new_echeance->fk_bank = 0; $new_echeance->fk_user_creat = $user->id; $new_echeance->fk_user_modif = $user->id; $result = $new_echeance->create($user); if ($result < 0) { setEventMessages($new_echeance->error, $echeance->errors, 'errors'); $db->rollback(); unset($echeances->lines); break; } $echeances->lines[] = $new_echeance; $i++; } if ($result > 0) { $db->commit(); } } if ($action == 'updateecheancier' && empty($pay_without_schedule)) { $db->begin(); $i = 1; while ($i < $object->nbterm + 1) { $mens = price2num(GETPOST('mens'.$i)); $int = price2num(GETPOST('hi_interets'.$i)); $id = GETPOST('hi_rowid'.$i); $insurance = price2num(GETPOST('hi_insurance'.$i)); $new_echeance = new LoanSchedule($db); $new_echeance->fetch($id); $new_echeance->tms = dol_now(); $new_echeance->amount_capital = $mens - $int; $new_echeance->amount_insurance = $insurance; $new_echeance->amount_interest = $int; $new_echeance->fk_user_modif = $user->id; $result = $new_echeance->update($user, 0); if ($result < 0) { setEventMessages(null, $new_echeance->errors, 'errors'); $db->rollback(); $echeances->fetchAll($object->id); break; } $echeances->lines[$i - 1] = $new_echeance; $i++; } if ($result > 0) { $db->commit(); } } /* * View */ $title = $langs->trans("Loan").' - '.$langs->trans("Card"); $help_url = 'EN:Module_Loan|FR:Module_Emprunt'; llxHeader("", $title, $help_url); $head = loan_prepare_head($object); print dol_get_fiche_head($head, 'FinancialCommitment', $langs->trans("Loan"), -1, 'bill'); $linkback = ''.$langs->trans("BackToList").''; $morehtmlref = '
'; // Ref loan $morehtmlref .= $form->editfieldkey("Label", 'label', $object->label, $object, 0, 'string', '', 0, 1); $morehtmlref .= $form->editfieldval("Label", 'label', $object->label, $object, 0, 'string', '', null, null, '', 1); // Project if (!empty($conf->project->enabled)) { $langs->loadLangs(array("projects")); $morehtmlref .= '
'.$langs->trans('Project').' : '; if ($user->rights->loan->write) { if ($action != 'classify') { //$morehtmlref .= ''.img_edit($langs->transnoentitiesnoconv('SetProject')).' : '; if ($action == 'classify') { //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); $morehtmlref .= '
'; $morehtmlref .= ''; $morehtmlref .= ''; $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); $morehtmlref .= ''; $morehtmlref .= '
'; } else { $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300'); } } } else { if (!empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); $morehtmlref .= ' : '.$proj->getNomUrl(1); if ($proj->title) { $morehtmlref .= ' - '.$proj->title; } } else { $morehtmlref .= ''; } } } $morehtmlref .= '
'; $morehtmlright = ''; dol_banner_tab($object, 'loanid', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright); ?> '.$langs->trans('CantUseScheduleWithLoanStartedToPaid').''."\n"; } print '
'; print ''; print ''; if (count($echeances->lines) > 0) { print ''; } else { print ''; } //print_fiche_titre($langs->trans("FinancialCommitment")); print '
'; print '
'; print ''; $colspan = 6; if (count($echeances->lines) > 0) { $colspan++; } print ''; print ''; print ''; print ''; print ''; print ''; if (count($echeances->lines) > 0) { print ''; } print ''."\n"; if ($object->nbterm > 0 && count($echeances->lines) == 0) { $i = 1; $capital = $object->capital; $insurance = $object->insurance_amount / $object->nbterm; $insurance = price2num($insurance, 'MT'); $regulInsurance = price2num($object->insurance_amount - ($insurance * $object->nbterm)); while ($i < $object->nbterm + 1) { $mens = price2num($echeances->calcMonthlyPayments($capital, $object->rate / 100, $object->nbterm - $i + 1), 'MT'); $int = ($capital * ($object->rate / 12)) / 100; $int = price2num($int, 'MT'); $insu = ($insurance + (($i == 1) ? $regulInsurance : 0)); $cap_rest = price2num($capital - ($mens - $int), 'MT'); print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''."\n"; $i++; $capital = $cap_rest; } } elseif (count($echeances->lines) > 0) { $i = 1; $capital = $object->capital; $insurance = $object->insurance_amount / $object->nbterm; $insurance = price2num($insurance, 'MT'); $regulInsurance = price2num($object->insurance_amount - ($insurance * $object->nbterm)); $printed = false; foreach ($echeances->lines as $line) { $mens = $line->amount_capital + $line->amount_interest; $int = $line->amount_interest; $insu = ($insurance + (($i == 1) ? $regulInsurance : 0)); $cap_rest = price2num($capital - ($mens - $int), 'MT'); print ''; print ''; print ''; print ''; print ''; if (empty($line->fk_bank)) { print ''; } else { print ''; } print ''; print ''; print ''."\n"; $i++; $capital = $cap_rest; } } print '
'.$langs->trans("Term").''.$langs->trans("Date").''.$langs->trans("Insurance"); print ''.$langs->trans("InterestAmount").''.$langs->trans("Amount").''.$langs->trans("CapitalRemain"); print '
('.price($object->capital, 0, '', 1, -1, -1, $conf->currency).')'; print ''; print '
'.$langs->trans('DoPayment').'
'.$i.''.dol_print_date(dol_time_plus_duree($object->datestart, $i - 1, 'm'), 'day').''.price($insurance + (($i == 1) ? $regulInsurance : 0), 0, '', 1, -1, -1, $conf->currency).''.price($int, 0, '', 1, -1, -1, $conf->currency).''.price($cap_rest).'
'.$i.''.dol_print_date($line->datep, 'day').''.price($insu, 0, '', 1, -1, -1, $conf->currency).''.price($int, 0, '', 1, -1, -1, $conf->currency).''.price($mens, 0, '', 1, -1, -1, $conf->currency).''.price($cap_rest, 0, '', 1, -1, -1, $conf->currency).''; if (!empty($line->fk_bank)) { print $langs->trans('Paid'); if (!empty($line->fk_payment_loan)) { print ' ('.img_object($langs->trans("Payment"), "payment").' '.$line->fk_payment_loan.')'; } } elseif (!$printed) { print ''.$langs->trans('DoPayment').''; $printed = true; } print '
'; print '
'; print '
'; if (count($echeances->lines) == 0) { $label = $langs->trans("Create"); } else { $label = $langs->trans("Save"); } print '
'; print '
'; // End of page llxFooter(); $db->close();