Correct lot of bugs

This commit is contained in:
aspangaro 2014-11-10 06:08:50 +01:00
parent 9c3fa5a9eb
commit 3042bf4dc2
11 changed files with 306 additions and 231 deletions

View File

@ -33,13 +33,15 @@ $langs->load("loan");
$id=GETPOST('id','int');
$action=GETPOST('action');
$confirm=GETPOST('confirm');
$cancel=GETPOST('cancel');
$cancel=GETPOST('cancel','alpha');
// Security check
$socid = GETPOST('socid','int');
if ($user->societe_id) $socid=$user->societe_id;
$result = restrictedArea($user, 'loan', $id, '','');
$object = new Loan($db);
/*
* Actions
*/
@ -47,7 +49,6 @@ $result = restrictedArea($user, 'loan', $id, '','');
// Classify paid
if ($action == 'confirm_paid' && $confirm == 'yes')
{
$object = new Loan($db);
$object->fetch($id);
$result = $object->set_paid($user);
}
@ -55,7 +56,6 @@ if ($action == 'confirm_paid' && $confirm == 'yes')
// Delete loan
if ($action == 'confirm_delete' && $confirm == 'yes')
{
$object = new Loan($db);
$object->fetch($id);
$result=$object->delete($user);
if ($result > 0)
@ -72,86 +72,88 @@ if ($action == 'confirm_delete' && $confirm == 'yes')
// Add loan
if ($action == 'add' && $user->rights->loan->write)
{
$datestart=@dol_mktime(12,0,0, $_POST["startmonth"], $_POST["startday"], $_POST["startyear"]);
$dateend=@dol_mktime(12,0,0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]);
if (! $datestart)
if (! $cancel)
{
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateStart")), 'errors');
$action = 'create';
}
elseif (! $dateend)
{
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateEnd")), 'errors');
$action = 'create';
}
elseif (! $_POST["capital"])
{
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Capital")), 'errors');
$action = 'create';
}
else
{
$object = new Loan($db);
$object->label = $_POST["label"];
$object->fk_bank = $_POST["accountid"];
$object->capital = $_POST["capital"];
$object->datestart = $datestart;
$object->dateend = $dateend;
$object->nbterm = $_POST["nbterm"];
$object->rate = $_POST["rate"];
$datestart=@dol_mktime(12,0,0, $_POST["startmonth"], $_POST["startday"], $_POST["startyear"]);
$dateend=@dol_mktime(12,0,0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]);
$object->account_capital = $_POST["accountancy_account_capital"];
$object->account_insurance = $_POST["accountancy_account_insurance"];
$object->account_interest = $_POST["accountancy_account_interest"];
$id=$object->create($user);
if ($id <= 0)
if (! $datestart)
{
setEventMessage($object->error, 'errors');
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateStart")), 'errors');
$action = 'create';
}
}
}
if ($action == 'update' && ! $cancel && $user->rights->loan->write)
{
$datestart=dol_mktime(12,0,0, $GETPOST("startmonth"), $GETPOST("startday"), $GETPOST("startyear"));
$dateend=dol_mktime(12,0,0, $GETPOST("endmonth"), $GETPOST("endday"), $GETPOST("endyear"));
if (! $datestart)
{
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateStart")), 'errors');
$action = 'edit';
}
elseif (! $dateend)
{
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateEnd")), 'errors');
$action = 'edit';
}
else
{
$object = new Loan($db);
if ($object->fetch($id))
elseif (! $dateend)
{
$object->label = $GETPOST("label");
$object->datestart = $datestart;
$object->dateend = $dateend;
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("DateEnd")), 'errors');
$action = 'create';
}
if ($object->update($id, $user) > 0)
elseif (! $_POST["capital"])
{
$action = '';
setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentities("Capital")), 'errors');
$action = 'create';
}
else
{
$action = 'edit';
setEventMessage($object->error, 'errors');
$object->label = $_POST["label"];
$object->fk_bank = $_POST["accountid"];
$object->capital = $_POST["capital"];
$object->datestart = $datestart;
$object->dateend = $dateend;
$object->nbterm = $_POST["nbterm"];
$object->rate = $_POST["rate"];
$object->account_capital = $_POST["accountancy_account_capital"];
$object->account_insurance = $_POST["accountancy_account_insurance"];
$object->account_interest = $_POST["accountancy_account_interest"];
$id=$object->create($user);
if ($id <= 0)
{
setEventMessage($object->error, 'errors');
}
}
}
else
{
header("Location: index.php");
exit();
}
}
// Update record
else if ($action == 'update' && $user->rights->loan->write)
{
if (! $cancel)
{
$result = $object->fetch($id);
if ($object->fetch($id))
{
$object->label = GETPOST("label");
$object->datestart = dol_mktime(12, 0, 0, GETPOST('startmonth','int'), GETPOST('startday','int'), GETPOST('startyear','int'));
$object->dateend = dol_mktime(12, 0, 0, GETPOST('endmonth','int'), GETPOST('endday','int'), GETPOST('endyear','int'));
$object->nbterm = GETPOST("nbterm");
$object->rate = GETPOST("rate");
}
$result = $object->update($user);
if ($result > 0)
{
header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
exit;
}
else
{
setEventMessage($object->error, 'errors');
}
}
else
{
header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
exit;
}
}
/*
* View
@ -212,10 +214,10 @@ if ($action == 'create')
print '</td></tr>';
// Number of terms
print '<tr><td class="fieldrequired">'.$langs->trans("Nbterms").'</td><td><input name="nbterm" size="4" value="' . GETPOST('nbterm') . '"></td></tr>';
print '<tr><td class="fieldrequired">'.$langs->trans("Nbterms").'</td><td><input name="nbterm" size="5" value="' . GETPOST('nbterm') . '"></td></tr>';
// Rate
print '<tr><td class="fieldrequired">'.$langs->trans("Rate").'</td><td><input name="rate" size="10" value="' . GETPOST("rate") . '"></td></tr>';
print '<tr><td class="fieldrequired">'.$langs->trans("Rate").'</td><td><input name="rate" size="5" value="' . GETPOST("rate") . '"> %</td></tr>';
// Note
print '<tr>';
@ -273,7 +275,6 @@ if ($action == 'create')
// View
if ($id > 0)
{
$object = new Loan($db);
$result = $object->fetch($id);
if ($result > 0)
@ -297,8 +298,10 @@ if ($id > 0)
if ($action == 'edit')
{
print '<form name="loan" action="' . $_SERVER["PHP_SELF"] . '?id=$object->id&amp;action=update" method="POST">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<form name="update" action="' . $_SERVER["PHP_SELF"] . '" method="POST">' . "\n";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="update">';
print '<input type="hidden" name="id" value="'.$id.'">';
}
print '<table class="border" width="100%">';
@ -353,7 +356,7 @@ if ($id > 0)
print '<tr><td>'.$langs->trans("Nbterms").'</td><td>'.$object->nbterm.'</td></tr>';
// Rate
print '<tr><td>'.$langs->trans("Rate").'</td><td>'.$object->rate.'</td></tr>';
print '<tr><td>'.$langs->trans("Rate").'</td><td>'.$object->rate.' %</td></tr>';
// Status
print '<tr><td>'.$langs->trans("Status").'</td><td>'.$object->getLibStatut(4, $totalpaye).'</td></tr>';
@ -378,8 +381,9 @@ if ($id > 0)
/*
* Payments
*/
$sql = "SELECT p.rowid, p.num_payment, datep as dp, p.amount,";
$sql.= "c.libelle as paiement_type";
$sql = "SELECT p.rowid, p.num_payment, datep as dp,";
$sql.= " p.amount_capital, p.amount_insurance, p.amount_interest,";
$sql.= " c.libelle as paiement_type";
$sql.= " FROM ".MAIN_DB_PREFIX."payment_loan as p";
$sql.= ", ".MAIN_DB_PREFIX."c_paiement as c ";
$sql.= ", ".MAIN_DB_PREFIX."loan as l";
@ -400,7 +404,9 @@ if ($id > 0)
print '<td>'.$langs->trans("RefPayment").'</td>';
print '<td>'.$langs->trans("Date").'</td>';
print '<td>'.$langs->trans("Type").'</td>';
print '<td align="right">'.$langs->trans("Amount").'</td>';
print '<td align="center" colspan="2">'.$langs->trans("Insurance").'</td>';
print '<td align="center" colspan="2">'.$langs->trans("Interest").'</td>';
print '<td align="center" colspan="2">'.$langs->trans("Capital").'</td>';
print '<td>&nbsp;</td>';
print '</tr>';
@ -413,21 +419,23 @@ if ($id > 0)
print '<a href="'.DOL_URL_ROOT.'/compta/loan/payment/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"),"payment").' '.$objp->rowid.'</a></td>';
print '<td>'.dol_print_date($db->jdate($objp->dp),'day')."</td>\n";
print "<td>".$objp->paiement_type.' '.$objp->num_payment."</td>\n";
print '<td align="right">'.price($objp->amount)."</td><td>&nbsp;".$langs->trans("Currency".$conf->currency)."</td>\n";
print '<td align="right">'.price($objp->amount_insurance)."</td><td>&nbsp;".$langs->trans("Currency".$conf->currency)."</td>\n";
print '<td align="right">'.price($objp->amount_interest)."</td><td>&nbsp;".$langs->trans("Currency".$conf->currency)."</td>\n";
print '<td align="right">'.price($objp->amount_capital)."</td><td>&nbsp;".$langs->trans("Currency".$conf->currency)."</td>\n";
print "</tr>";
$totalpaid += $objp->amount;
$totalpaid += $objp->amount_capital;
$i++;
}
if ($object->paid == 0)
{
print "<tr><td colspan=\"3\" align=\"right\">".$langs->trans("AlreadyPaid")." :</td><td align=\"right\"><b>".price($totalpaid)."</b></td><td>&nbsp;".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
print "<tr><td colspan=\"3\" align=\"right\">".$langs->trans("AmountExpected")." :</td><td align=\"right\" bgcolor=\"#d0d0d0\">".price($object->capital)."</td><td bgcolor=\"#d0d0d0\">&nbsp;".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
print '<tr><td colspan="7" align="right">'.$langs->trans("AlreadyPaid").' :</td><td align="right"><b>'.price($totalpaid).'</b></td><td>&nbsp;'.$langs->trans("Currency".$conf->currency).'</td></tr>';
print '<tr><td colspan="7" align="right">'.$langs->trans("AmountExpected").' :</td><td align="right" bgcolor="#d0d0d0">'.price($object->capital).'</td><td bgcolor="#d0d0d0">&nbsp;'.$langs->trans("Currency".$conf->currency).'</td></tr>';
$staytopay = $object->capital - $totalpaid;
print "<tr><td colspan=\"3\" align=\"right\">".$langs->trans("RemainderToPay")." :</td>";
print "<td align=\"right\" bgcolor=\"#f0f0f0\"><b>".price($staytopay)."</b></td><td bgcolor=\"#f0f0f0\">&nbsp;".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
print '<tr><td colspan="7" align="right">'.$langs->trans("RemainderToPay").' :</td>';
print '<td align="right" bgcolor="#f0f0f0"><b>'.price($staytopay).'</b></td><td bgcolor="#f0f0f0">&nbsp;'.$langs->trans("Currency".$conf->currency).'</td></tr>';
}
print "</table>";
$db->free($resql);
@ -444,7 +452,7 @@ if ($id > 0)
*/
if ($action != 'edit')
{
print "<div class=\"tabsAction\">\n";
print '<div class="tabsAction">';
// Edit
if ($user->rights->loan->write)

View File

@ -263,8 +263,8 @@ class Loan extends CommonObject
/**
* Update loan
*
* @param User $user Utilisateur qui modifie
* @return int <0 si erreur, >0 si ok
* @param User $user User who modified
* @return int <0 if error, >0 if ok
*/
function update($user)
{
@ -273,7 +273,8 @@ class Loan extends CommonObject
$sql = "UPDATE ".MAIN_DB_PREFIX."loan";
$sql.= " SET label='".$this->db->escape($this->label)."',";
$sql.= " datestart='".$this->db->idate($this->datestart)."',";
$sql.= " dateend='".$this->db->idate($this->dateend)."'";
$sql.= " dateend='".$this->db->idate($this->dateend)."',";
$sql.= " fk_user_modif = ".$user->id;
$sql.= " WHERE rowid=".$this->id;
dol_syslog(get_class($this)."::update", LOG_DEBUG);
@ -379,7 +380,7 @@ class Loan extends CommonObject
* @param int $maxlen Label max length
* @return string Chaine with URL
*/
function getNameUrl($withpicto=0,$maxlen=0)
function getLinkUrl($withpicto=0,$maxlen=0)
{
global $langs;
@ -432,40 +433,43 @@ class Loan extends CommonObject
* @param int $id Id of record
* @return void
*/
function info($id)
{
$sql = "SELECT l.rowid, l.tms as datem, l.fk_user_author as user_author, l.datec as datec";
$sql.= " FROM ".MAIN_DB_PREFIX."loan as l";
$sql.= " WHERE l.rowid = ".$id;
function info($id)
{
$sql = 'SELECT l.rowid, l.datec, l.fk_user_author, l.fk_user_modif,';
$sql.= ' l.tms';
$sql.= ' FROM '.MAIN_DB_PREFIX.'loan as l';
$sql.= ' WHERE l.rowid = '.$id;
dol_syslog(get_class($this)."::info", LOG_DEBUG);
$result=$this->db->query($sql);
if ($result)
{
if ($this->db->num_rows($result))
{
$obj = $this->db->fetch_object($result);
$this->id = $obj->rowid;
if ($obj->user_author) {
$cuser = new User($this->db);
$cuser->fetch($obj->user_author);
$this->user_creation = $cuser;
}
$this->date_creation = $this->db->jdate($obj->datec);
$this->date_modification = $this->db->jdate($obj->datem);
}
$this->db->free($result);
}
else
{
dol_print_error($this->db);
}
}
}
dol_syslog(get_class($this).'::info', LOG_DEBUG);
$result = $this->db->query($sql);
if ($result)
{
if ($this->db->num_rows($result))
{
$obj = $this->db->fetch_object($result);
$this->id = $obj->rowid;
if ($obj->fk_user_author)
{
$cuser = new User($this->db);
$cuser->fetch($obj->fk_user_author);
$this->user_creation = $cuser;
}
if ($obj->fk_user_modif)
{
$muser = new User($this->db);
$muser->fetch($obj->fk_user_modif);
$this->user_modification = $muser;
}
$this->date_creation = $this->db->jdate($obj->datec);
if (empty($obj->fk_user_modif)) $obj->tms = "";
$this->date_modification = $this->db->jdate($obj->tms);
}
$this->db->free($result);
}
else
{
dol_print_error($this->db);
}
}
}

View File

@ -39,8 +39,10 @@ class PaymentLoan extends CommonObject
var $datec='';
var $tms='';
var $datep='';
var $amount; // Total amount of payment
var $amounts=array(); // Array of amounts
var $amount_capital; // Total amount of payment
var $amount_insurance;
var $amount_interest;
var $fk_typepayment;
var $num_payment;
var $note;
@ -82,7 +84,9 @@ class PaymentLoan extends CommonObject
// Clean parameters
if (isset($this->fk_loan)) $this->fk_loan = trim($this->fk_loan);
if (isset($this->amount)) $this->amount = trim($this->amount);
if (isset($this->amount_capital)) $this->amount_capital = trim($this->amount_capital);
if (isset($this->amount_insurance)) $this->amount_insurance = trim($this->amount_insurance);
if (isset($this->amount_interest)) $this->amount_interest = trim($this->amount_interest);
if (isset($this->fk_typepayment)) $this->fk_typepayment = trim($this->fk_typepayment);
if (isset($this->num_payment)) $this->num_payment = trim($this->num_payment);
if (isset($this->note)) $this->note = trim($this->note);
@ -107,7 +111,7 @@ class PaymentLoan extends CommonObject
if ($totalamount != 0)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."payment_loan (fk_loan, datec, datep, amount,";
$sql = "INSERT INTO ".MAIN_DB_PREFIX."payment_loan (fk_loan, datec, datep, amount_capital, amount_insurance, amount_interest,";
$sql.= " fk_typepayment, num_payment, note, fk_user_creat, fk_bank)";
$sql.= " VALUES ($this->chid, '".$this->db->idate($now)."',";
$sql.= " '".$this->db->idate($this->datepaid)."',";
@ -130,7 +134,7 @@ class PaymentLoan extends CommonObject
if ($totalamount != 0 && ! $error)
{
$this->amount=$totalamount;
$this->amount_capital=$totalamount;
$this->total=$totalamount; // deprecated
$this->db->commit();
return $this->id;
@ -158,7 +162,9 @@ class PaymentLoan extends CommonObject
$sql.= " t.datec,";
$sql.= " t.tms,";
$sql.= " t.datep,";
$sql.= " t.amount,";
$sql.= " t.amount_capital,";
$sql.= " t.amount_insurance,";
$sql.= " t.amount_interest,";
$sql.= " t.fk_typepayment,";
$sql.= " t.num_payment,";
$sql.= " t.note,";
@ -186,7 +192,9 @@ class PaymentLoan extends CommonObject
$this->datec = $this->db->jdate($obj->datec);
$this->tms = $this->db->jdate($obj->tms);
$this->datep = $this->db->jdate($obj->datep);
$this->amount = $obj->amount;
$this->amount_capital = $obj->amount_capital;
$this->amount_insurance = $obj->amount_insurance;
$this->amount_interest = $obj->amount_interest;
$this->fk_typepayment = $obj->fk_typepayment;
$this->num_payment = $obj->num_payment;
$this->note = $obj->note;
@ -225,9 +233,10 @@ class PaymentLoan extends CommonObject
$error=0;
// Clean parameters
if (isset($this->fk_loan)) $this->fk_loan=trim($this->fk_loan);
if (isset($this->amount)) $this->amount=trim($this->amount);
if (isset($this->amount_capital)) $this->amount_capital=trim($this->amount_capital);
if (isset($this->amount_insurance)) $this->amount_insurance=trim($this->amount_insurance);
if (isset($this->amount_interest)) $this->amount_interest=trim($this->amount_interest);
if (isset($this->fk_typepayment)) $this->fk_typepayment=trim($this->fk_typepayment);
if (isset($this->num_payment)) $this->num_payment=trim($this->num_payment);
if (isset($this->note)) $this->note=trim($this->note);
@ -245,7 +254,9 @@ class PaymentLoan extends CommonObject
$sql.= " datec=".(dol_strlen($this->datec)!=0 ? "'".$this->db->idate($this->datec)."'" : 'null').",";
$sql.= " tms=".(dol_strlen($this->tms)!=0 ? "'".$this->db->idate($this->tms)."'" : 'null').",";
$sql.= " datep=".(dol_strlen($this->datep)!=0 ? "'".$this->db->idate($this->datep)."'" : 'null').",";
$sql.= " amount=".(isset($this->amount)?$this->amount:"null").",";
$sql.= " amount_capital=".(isset($this->amount_capital)?$this->amount_capital:"null").",";
$sql.= " amount_insurance=".(isset($this->amount_insurance)?$this->amount_insurance:"null").",";
$sql.= " amount_interest=".(isset($this->amount_interest)?$this->amount_interest:"null").",";
$sql.= " fk_typepayment=".(isset($this->fk_typepayment)?$this->fk_typepayment:"null").",";
$sql.= " num_payment=".(isset($this->num_payment)?"'".$this->db->escape($this->num_payment)."'":"null").",";
$sql.= " note=".(isset($this->note)?"'".$this->db->escape($this->note)."'":"null").",";

View File

@ -47,6 +47,7 @@ $limit = $conf->liste_limit;
$search_ref=GETPOST('search_ref','int');
$search_label=GETPOST('search_label','alpha');
$search_amount=GETPOST('search_amount','alpha');
$filtre=GETPOST("filtre");
if (GETPOST("button_removefilter"))
@ -60,36 +61,37 @@ if (GETPOST("button_removefilter"))
* View
*/
$loan = new Loan($db);
$loan_static = new Loan($db);
llxHeader();
$sql = "SELECT l.rowid, l.label, l.capital, l.datestart, l.dateend,";
$sql.= " SUM(pl.amount) as alreadypayed";
$sql.= " FROM ".MAIN_DB_PREFIX."loan as l,";
$sql.= " ".MAIN_DB_PREFIX."payment_loan as pl";
$sql.= " WHERE pl.fk_loan = l.rowid";
$sql.= " AND l.entity = ".$conf->entity;
if (GETPOST("search_ref")) $sql.=" AND (l.rowid = ".$db->escape($search_ref).")";
if (GETPOST("search_label")) $sql.=" AND l.label LIKE '%".$db->escape($search_label)."%'";
$sql.= " SUM(pl.amount_capital) as alreadypayed";
$sql.= " FROM ".MAIN_DB_PREFIX."loan as l LEFT JOIN ".MAIN_DB_PREFIX."payment_loan AS pl";
$sql.= " ON l.rowid = pl.fk_loan";
$sql.= " WHERE l.entity = ".$conf->entity;
if ($search_amount) $sql.=" AND l.capital='".$db->escape(price2num(trim($search_amount)))."'";
if ($search_ref) $sql.=" AND l.rowid = ".$db->escape($search_ref);
if ($search_label) $sql.=" AND l.label LIKE '%".$db->escape($search_label)."%'";
if ($filtre) {
$filtre=str_replace(":","=",$filtre);
$sql .= " AND ".$filtre;
}
$sql.= " GROUP BY l.rowid, l.label, l.capital, l.datestart, l.dateend";
$sql.= $db->order($sortfield,$sortorder);
$sql.= $db->plimit($limit + 1, $offset);
$sql.= $db->plimit($limit+1, $offset);
//print $sql;
$resql=$db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
$i = 0;
$var=true;
print_fiche_titre($langs->trans("Loans"));
$i = 0;
print '<form method="get" action="'.$_SERVER["PHP_SELF"].'">'."\n";
print '<form method="GET" action="'.$_SERVER["PHP_SELF"].'">'."\n";
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"l.rowid","",$param,"",$sortfield,$sortorder);
@ -101,9 +103,9 @@ if ($resql)
// Filters lines
print '<tr class="liste_titre">';
print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre"><input type="text" class="flat" size="8" name="search_label" value="'.GETPOST("search_label").'"></td>';
print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre"><input class="flat" size="4" type="text" name="search_ref" value="'.$search_ref.'"></td>';
print '<td class="liste_titre"><input class="flat" size="12" type="text" name="search_label" value="'.$search_label.'"></td>';
print '<td class="liste_titre" align="right" ><input class="flat" size="8" type="text" name="search_amount" value="'.$search_amount.'"></td>';
print '<td class="liste_titre">&nbsp;</td>';
print '<td align="right" class="liste_titre">';
print '<input type="image" class="liste_titre" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" name="button_search" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
@ -111,19 +113,15 @@ if ($resql)
print '</td>';
print '</tr>';
$var=true;
while ($i < min($num,$limit))
{
$obj = $db->fetch_object($resql);
$var = !$var;
print "<tr ".$bc[$var].">";
// Ref
print '<td width="60">';
$loan->id = $obj->id;
print $loan->getNameUrl(1,'20');
print '</td>';
print '<td><a href="card.php?id='.$obj->rowid.'">'.img_object($langs->trans("ShowLoan"),"label").' '.$obj->rowid.'</a></td>';
// Label
print '<td>'.dol_trunc($obj->label,42).'</td>';
@ -134,7 +132,7 @@ if ($resql)
// Date start
print '<td width="110" align="center">'.dol_print_date($db->jdate($obj->datestart), 'day').'</td>';
print '<td align="right" class="nowrap">'.$loan->LibStatut($obj->paid,5,$obj->alreadypayed).'</a></td>';
print '<td align="right" class="nowrap">'.$loan_static->LibStatut($obj->paid,5,$obj->alreadypayed).'</a></td>';
print "</tr>\n";

View File

@ -118,7 +118,6 @@ if ($action == 'confirm_valide' && $confirm == 'yes' && $user->rights->loan->wri
llxHeader();
$loan = new Loan($db);
$form = new Form($db);
$h=0;
@ -168,7 +167,9 @@ print '<tr><td valign="top">'.$langs->trans('Mode').'</td><td colspan="3">'.$lan
print '<tr><td valign="top">'.$langs->trans('Number').'</td><td colspan="3">'.$payment->num_payment.'</td></tr>';
// Amount
print '<tr><td valign="top">'.$langs->trans('Amount').'</td><td colspan="3">'.price($payment->amount, 0, $outputlangs, 1, -1, -1, $conf->currency).'</td></tr>';
print '<tr><td valign="top">'.$langs->trans('Capital').'</td><td colspan="3">'.price($payment->amount_capital, 0, $outputlangs, 1, -1, -1, $conf->currency).'</td></tr>';
print '<tr><td valign="top">'.$langs->trans('Insurance').'</td><td colspan="3">'.price($payment->amount_insurance, 0, $outputlangs, 1, -1, -1, $conf->currency).'</td></tr>';
print '<tr><td valign="top">'.$langs->trans('Interest').'</td><td colspan="3">'.price($payment->amount_interest, 0, $outputlangs, 1, -1, -1, $conf->currency).'</td></tr>';
// Note
print '<tr><td valign="top">'.$langs->trans('Note').'</td><td colspan="3">'.nl2br($payment->note).'</td></tr>';
@ -198,7 +199,7 @@ print '</table>';
*/
$disable_delete = 0;
$sql = 'SELECT l.rowid as id, l.label, l.paid, l.capital as capital, pl.amount';
$sql = 'SELECT l.rowid as id, l.label, l.paid, l.capital as capital, pl.amount_capital, pl.amount_insurance, pl.amount_interest';
$sql.= ' FROM '.MAIN_DB_PREFIX.'payment_loan as pl,'.MAIN_DB_PREFIX.'loan as l';
$sql.= ' WHERE pl.fk_loan = l.rowid';
$sql.= ' AND l.entity = '.$conf->entity;
@ -234,22 +235,22 @@ if ($resql)
// Ref
print '<td>';
$loan->fetch($objp->id);
print $loan->getNameUrl(1);
print $loan->getLinkUrl(1);
print "</td>\n";
// Label
print '<td>'.$objp->label.'</td>';
// Expected to pay
print '<td align="right">'.price($objp->capital).'</td>';
// Status
print '<td align="center">'.$loan->getLibStatut(4,$objp->amount).'</td>';
print '<td align="center">'.$loan->getLibStatut(4,$objp->amount_capital).'</td>';
// Amount payed
print '<td align="right">'.price($objp->amount).'</td>';
print '<td align="right">'.price($objp->amount_capital).'</td>';
print "</tr>\n";
if ($objp->paye == 1) // If at least one invoice is paid, disable delete
if ($objp->paid == 1) // If at least one invoice is paid, disable delete
{
$disable_delete = 1;
}
$total = $total + $objp->amount;
$total = $total + $objp->amount_capital;
$i++;
}
}
@ -267,7 +268,7 @@ print '</div>';
/*
* Boutons Actions
* Actions buttons
*/
print '<div class="tabsAction">';

View File

@ -29,9 +29,10 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
$langs->load("bills");
$langs->load("loan");
$chid=GETPOST("id");
$chid=GETPOST('id','int');
$action=GETPOST('action');
$amounts = array();
$cancel=GETPOST('cancel','alpha');
// Security check
$socid=0;
@ -47,7 +48,7 @@ if ($action == 'add_payment')
{
$error=0;
if ($_POST["cancel"])
if ($cancel)
{
$loc = DOL_URL_ROOT.'/compta/loan/card.php?id='.$chid;
header("Location: ".$loc);
@ -98,12 +99,15 @@ if ($action == 'add_payment')
// Create a line of payments
$payment = new PaymentLoan($db);
$payment->chid = $chid;
$payment->datepaid = $datepaid;
$payment->amounts = $amounts; // Tableau de montant
$payment->paymenttype = $_POST["paymenttype"];
$payment->num_payment = $_POST["num_payment"];
$payment->note = $_POST["note"];
$payment->chid = $chid;
$payment->datepaid = $datepaid;
$payment->amounts = $amounts; // Tableau de montant
$payment->amount_capital = $_POST["amount_capital"];
$payment->amount_insurance = $_POST["amount_insurance"];
$payment->amount_interest = $_POST["amount_interest"];
$payment->paymenttype = $_POST["paymenttype"];
$payment->num_payment = $_POST["num_payment"];
$payment->note = $_POST["note"];
if (! $error)
{
@ -177,12 +181,12 @@ if ($_GET["action"] == 'create')
print '<table cellspacing="0" class="border" width="100%" cellpadding="2">';
print "<tr class=\"liste_titre\"><td colspan=\"3\">".$langs->trans("Loan")."</td>";
print '<tr class="liste_titre"><td colspan="3">'.$langs->trans("Loan").'</td>';
print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td colspan="2"><a href="'.DOL_URL_ROOT.'/compta/loan/card.php?id='.$chid.'">'.$chid.'</a></td></tr>';
print '<tr><td>'.$langs->trans("DateStart")."</td><td colspan=\"2\">".dol_print_date($loan->datestart,'day')."</td></tr>\n";
print '<tr><td>'.$langs->trans("DateStart").'</td><td colspan="2">'.dol_print_date($loan->datestart,'day')."</td></tr>\n";
print '<tr><td>'.$langs->trans("Label").'</td><td colspan="2">'.$loan->label."</td></tr>\n";
print '<tr><td>'.$langs->trans("Amount")."</td><td colspan=\"2\">".price($loan->capital,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
print '<tr><td>'.$langs->trans("Amount").'</td><td colspan="2">'.price($loan->capital,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
$sql = "SELECT sum(p.amount) as total";
$sql.= " FROM ".MAIN_DB_PREFIX."payment_loan as p";
@ -204,7 +208,7 @@ if ($_GET["action"] == 'create')
print '<table cellspacing="0" class="border" width="100%" cellpadding="2">';
print '<tr class="liste_titre">';
print "<td colspan=\"3\">".$langs->trans("Payment").'</td>';
print '<td colspan="3">'.$langs->trans("Payment").'</td>';
print '</tr>';
print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("Date").'</td><td colspan="2">';
@ -249,10 +253,10 @@ if ($_GET["action"] == 'create')
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
print '<td align="left">'.$langs->trans("DateDue").'</td>';
print '<td align="right">'.$langs->trans("Amount").'</td>';
print '<td align="right">'.$langs->trans("Capital").'</td>';
print '<td align="right">'.$langs->trans("AlreadyPaid").'</td>';
print '<td align="right">'.$langs->trans("RemainderToPay").'</td>';
print '<td align="center">'.$langs->trans("Amount").'</td>';
print '<td align="right">'.$langs->trans("Amount").'</td>';
print "</tr>\n";
$var=True;
@ -269,24 +273,44 @@ if ($_GET["action"] == 'create')
if ($objp->datestart > 0)
{
print "<td align=\"left\">".dol_print_date($objp->datestart,'day')."</td>\n";
print '<td align="left" valign="center">'.dol_print_date($objp->datestart,'day').'</td>';
}
else
{
print "<td align=\"center\"><b>!!!</b></td>\n";
print '<td align="center" valign="center"><b>!!!</b></td>';
}
print '<td align="right">'.price($objp->capital)."</td>";
print '<td align="right" valign="center">'.price($objp->capital)."</td>";
print '<td align="right">'.price($sumpaid)."</td>";
print '<td align="right" valign="center">'.price($sumpaid)."</td>";
print '<td align="right">'.price($objp->capital - $sumpaid)."</td>";
print '<td align="right" valign="center">'.price($objp->capital - $sumpaid)."</td>";
print '<td align="center">';
print '<td align="right">';
if ($sumpaid < $objp->capital)
{
$namef = "amount_".$objp->id;
print '<input type="text" size="8" name="'.$namef.'">';
$namec = "amount_capital_".$objp->id;
print $langs->trans("Capital") .': <input type="text" size="8" name="'.$namec.'">';
}
else
{
print '-';
}
print '<br>';
if ($sumpaid < $objp->capital)
{
$namea = "amount_insurance_".$objp->id;
print $langs->trans("Insurance") .': <input type="text" size="8" name="'.$namea.'">';
}
else
{
print '-';
}
print '<br>';
if ($sumpaid < $objp->capital)
{
$namei = "amount_interest_".$objp->id;
print $langs->trans("Interest") .': <input type="text" size="8" name="'.$namei.'">';
}
else
{
@ -305,9 +329,9 @@ if ($_GET["action"] == 'create')
// Print total
print "<tr ".$bc[!$var].">";
print '<td colspan="2" align="left">'.$langs->trans("Total").':</td>';
print "<td align=\"right\"><b>".price($total_ttc)."</b></td>";
print "<td align=\"right\"><b>".price($totalrecu)."</b></td>";
print "<td align=\"right\"><b>".price($total_ttc - $totalrecu)."</b></td>";
print '<td align="right"><b>"'.price($total_ttc).'"</b></td>';
print '<td align="right"><b>"'.price($totalrecu).'"</b></td>';
print '<td align="right"><b>"'.price($total_ttc - $totalrecu).'"</b></td>';
print '<td align="center">&nbsp;</td>';
print "</tr>\n";
}

View File

@ -1099,48 +1099,6 @@ CREATE TABLE llx_usergroup_extrafields (
ALTER TABLE llx_usergroup_extrafields ADD INDEX idx_usergroup_extrafields (fk_object);
-- Loan
create table llx_loan
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 1 NOT NULL,
datec datetime,
tms timestamp,
label varchar(80) NOT NULL,
fk_bank integer,
capital real default 0 NOT NULL,
datestart date,
dateend date,
nbterm real,
rate double NOT NULL,
note text,
capital_position real default 0,
date_position date,
paid smallint default 0 NOT NULL,
accountancy_account_capital varchar(32),
accountancy_account_insurance varchar(32),
accountancy_account_interest varchar(32),
fk_user_author integer DEFAULT NULL,
fk_user_modif integer DEFAULT NULL,
active tinyint DEFAULT 1 NOT NULL
)ENGINE=innodb;
create table llx_payment_loan
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
fk_loan integer,
datec datetime,
tms timestamp,
datep datetime,
amount real DEFAULT 0,
fk_typepayment integer NOT NULL,
num_payment varchar(50),
note text,
fk_bank integer NOT NULL,
fk_user_creat integer,
fk_user_modif integer
)ENGINE=innodb;
ALTER TABLE llx_contrat ADD COLUMN model_pdf varchar(255) DEFAULT NULL AFTER note_public;
ALTER TABLE llx_c_country ADD COLUMN favorite tinyint DEFAULT 0 AFTER active;

View File

@ -0,0 +1,63 @@
--
-- Be carefull to requests order.
-- This file must be loaded by calling /install/index.php page
-- when current version is 3.8.0 or higher.
--
-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new;
-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol;
-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60);
-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname;
-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60);
-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name;
-- To restrict request to Mysql version x.y use -- VMYSQLx.y
-- To restrict request to Pgsql version x.y use -- VPGSQLx.y
-- To make pk to be auto increment (mysql): VMYSQL4.3 ALTER TABLE llx_c_shipment_mode CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT;
-- To make pk to be auto increment (postgres): VPGSQL8.2 NOT POSSIBLE. MUST DELETE/CREATE TABLE
-- To set a field as NULL: VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL;
-- To set a field as default NULL: VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL;
-- -- VPGSQL8.2 DELETE FROM llx_usergroup_user WHERE fk_user NOT IN (SELECT rowid from llx_user);
-- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
-- Loan
create table llx_loan
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
entity integer DEFAULT 1 NOT NULL,
datec datetime,
tms timestamp,
label varchar(80) NOT NULL,
fk_bank integer,
capital real default 0 NOT NULL,
datestart date,
dateend date,
nbterm real,
rate double NOT NULL,
note text,
capital_position real default 0,
date_position date,
paid smallint default 0 NOT NULL,
accountancy_account_capital varchar(32),
accountancy_account_insurance varchar(32),
accountancy_account_interest varchar(32),
fk_user_author integer DEFAULT NULL,
fk_user_modif integer DEFAULT NULL,
active tinyint DEFAULT 1 NOT NULL
)ENGINE=innodb;
create table llx_payment_loan
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
fk_loan integer,
datec datetime,
tms timestamp,
datep datetime,
amount_capital real DEFAULT 0,
amount_insurance real DEFAULT 0,
amount_interest real DEFAULT 0,
fk_typepayment integer NOT NULL,
num_payment varchar(50),
note text,
fk_bank integer NOT NULL,
fk_user_creat integer,
fk_user_modif integer
)ENGINE=innodb;

View File

@ -23,7 +23,9 @@ create table llx_payment_loan
datec datetime, -- creation date
tms timestamp,
datep datetime, -- payment date
amount real DEFAULT 0,
amount_capital real DEFAULT 0,
amount_insurance real DEFAULT 0,
amount_interest real DEFAULT 0,
fk_typepayment integer NOT NULL,
num_payment varchar(50),
note text,

View File

@ -5,10 +5,13 @@ NewLoan=New Loan
ShowLoan=Show Loan
PaymentLoan=Loan payment
Capital=Capital
Insurance=Insurance
Interest=Interest
Nbterms=Number of terms
LoanAccountancyCapitalCode=Accountancy code capital
LoanAccountancyInsuranceCode=Accountancy code insurance
LoanAccountancyInterestCode=Accountancy code interest
LoanPayment=Loan payment
ConfirmDeleteLoan=Confirm deleting this loan
ConfirmPayLoan=Confirm classify paid this loan
ErrorLoanCapital=<font color=red>Loan amount</font> has to be numeric and greater than zero.

View File

@ -5,10 +5,13 @@ NewLoan=Nouvel emprunt
ShowLoan=Voir emprunt
PaymentLoan=Règlement d'emprunt
Capital=Capital
Insurance=Assurance
Interest=Intérêt
Nbterms=Nombre d'échéances
LoanAccountancyCapitalCode=Compte comptable capital
LoanAccountancyInsuranceCode=Compte comptable assurance
LoanAccountancyInterestCode=Compte comptable intérêts
LoanPayment=Règlement emprunt
ConfirmDeleteLoan=Confirmation de supression de cet emprunt
ConfirmPayLoan=Confirmation que cet emprunt est classé comme payé
ErrorLoanCapital=<font color=red>Le capital de l'emprunt</font> doit être au format numérique et supérieur à zéro.