Skip to content

Commit

Permalink
Fix : duedate was not auto calculated + move calculation function to …
Browse files Browse the repository at this point in the history
…common invoice class
  • Loading branch information
atm-maxime committed Jun 14, 2014
1 parent bada082 commit 19a3194
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 69 deletions.
69 changes: 0 additions & 69 deletions htdocs/compta/facture/class/facture.class.php
Expand Up @@ -1406,75 +1406,6 @@ function delete($rowid=0, $notrigger=0, $idwarehouse=-1)
}
}


/**
* Renvoi une date limite de reglement de facture en fonction des
* conditions de reglements de la facture et date de facturation
*
* @param string $cond_reglement Condition of payment (code or id) to use. If 0, we use current condition.
* @return date Date limite de reglement si ok, <0 si ko
*/
function calculate_date_lim_reglement($cond_reglement=0)
{
if (! $cond_reglement) $cond_reglement=$this->cond_reglement_code;
if (! $cond_reglement) $cond_reglement=$this->cond_reglement_id;

$cdr_nbjour=0; $cdr_fdm=0; $cdr_decalage=0;

$sqltemp = 'SELECT c.fdm,c.nbjour,c.decalage';
$sqltemp.= ' FROM '.MAIN_DB_PREFIX.'c_payment_term as c';
if (is_numeric($cond_reglement)) $sqltemp.= " WHERE c.rowid=".$cond_reglement;
else $sqltemp.= " WHERE c.code='".$this->db->escape($cond_reglement)."'";

dol_syslog(get_class($this).'::calculate_date_lim_reglement sql='.$sqltemp);
$resqltemp=$this->db->query($sqltemp);
if ($resqltemp)
{
if ($this->db->num_rows($resqltemp))
{
$obj = $this->db->fetch_object($resqltemp);
$cdr_nbjour = $obj->nbjour;
$cdr_fdm = $obj->fdm;
$cdr_decalage = $obj->decalage;
}
}
else
{
$this->error=$this->db->error();
return -1;
}
$this->db->free($resqltemp);

/* Definition de la date limite */

// 1 : ajout du nombre de jours
$datelim = $this->date + ($cdr_nbjour * 3600 * 24);

// 2 : application de la regle "fin de mois"
if ($cdr_fdm)
{
$mois=date('m', $datelim);
$annee=date('Y', $datelim);
if ($mois == 12)
{
$mois = 1;
$annee += 1;
}
else
{
$mois += 1;
}
// On se deplace au debut du mois suivant, et on retire un jour
$datelim=dol_mktime(12,0,0,$mois,1,$annee);
$datelim -= (3600 * 24);
}

// 3 : application du decalage
$datelim += ($cdr_decalage * 3600 * 24);

return $datelim;
}

/**
* Tag la facture comme paye completement (si close_code non renseigne) => this->fk_statut=2, this->paye=1
* ou partiellement (si close_code renseigne) + appel trigger BILL_PAYED => this->fk_statut=2, this->paye stay 0
Expand Down
68 changes: 68 additions & 0 deletions htdocs/core/class/commoninvoice.class.php
Expand Up @@ -288,6 +288,74 @@ function LibStatut($paye,$status,$mode=0,$alreadypaid=-1,$type=0)
}
}
}

/**
* Renvoi une date limite de reglement de facture en fonction des
* conditions de reglements de la facture et date de facturation
*
* @param string $cond_reglement Condition of payment (code or id) to use. If 0, we use current condition.
* @return date Date limite de reglement si ok, <0 si ko
*/
function calculate_date_lim_reglement($cond_reglement=0)
{
if (! $cond_reglement) $cond_reglement=$this->cond_reglement_code;
if (! $cond_reglement) $cond_reglement=$this->cond_reglement_id;

$cdr_nbjour=0; $cdr_fdm=0; $cdr_decalage=0;

$sqltemp = 'SELECT c.fdm,c.nbjour,c.decalage';
$sqltemp.= ' FROM '.MAIN_DB_PREFIX.'c_payment_term as c';
if (is_numeric($cond_reglement)) $sqltemp.= " WHERE c.rowid=".$cond_reglement;
else $sqltemp.= " WHERE c.code='".$this->db->escape($cond_reglement)."'";

dol_syslog(get_class($this).'::calculate_date_lim_reglement sql='.$sqltemp);
$resqltemp=$this->db->query($sqltemp);
if ($resqltemp)
{
if ($this->db->num_rows($resqltemp))
{
$obj = $this->db->fetch_object($resqltemp);
$cdr_nbjour = $obj->nbjour;
$cdr_fdm = $obj->fdm;
$cdr_decalage = $obj->decalage;
}
}
else
{
$this->error=$this->db->error();
return -1;
}
$this->db->free($resqltemp);

/* Definition de la date limite */

// 1 : ajout du nombre de jours
$datelim = $this->date + ($cdr_nbjour * 3600 * 24);

// 2 : application de la regle "fin de mois"
if ($cdr_fdm)
{
$mois=date('m', $datelim);
$annee=date('Y', $datelim);
if ($mois == 12)
{
$mois = 1;
$annee += 1;
}
else
{
$mois += 1;
}
// On se deplace au debut du mois suivant, et on retire un jour
$datelim=dol_mktime(12,0,0,$mois,1,$annee);
$datelim -= (3600 * 24);
}

// 3 : application du decalage
$datelim += ($cdr_decalage * 3600 * 24);

return $datelim;
}
}

/**
Expand Down
3 changes: 3 additions & 0 deletions htdocs/fourn/facture/fiche.php
Expand Up @@ -300,6 +300,9 @@
$object->cond_reglement_id = GETPOST('cond_reglement_id');
$object->mode_reglement_id = GETPOST('mode_reglement_id');
$object->fk_project = ($tmpproject > 0) ? $tmpproject : null;

// Auto calculation of date due if not filled by user
if(empty($object->date_echeance)) $object->date_echeance = $object->calculate_date_lim_reglement();

// If creation from another object of another module
if ($_POST['origin'] && $_POST['originid'])
Expand Down

0 comments on commit 19a3194

Please sign in to comment.