Merge pull request #5821 from aspangaro/5.0-p20
Update fournisseur.facture.class.php
This commit is contained in:
commit
80daf76ac1
@ -6,10 +6,11 @@
|
|||||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
* Copyright (C) 2010-2015 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2010-2015 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com>
|
* Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com>
|
||||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2014-2016 Marcos García <marcosgdf@gmail.com>
|
* Copyright (C) 2014-2016 Marcos García <marcosgdf@gmail.com>
|
||||||
* Copyright (C) 2015 Bahfir Abbes <bafbes@gmail.com>
|
* Copyright (C) 2015 Bahfir Abbes <bafbes@gmail.com>
|
||||||
* Copyright (C) 2015 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2015 Ferran Marcet <fmarcet@2byte.es>
|
||||||
|
* Copyright (C) 2016 Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -127,7 +128,55 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
public $multicurrency_total_ht;
|
public $multicurrency_total_ht;
|
||||||
public $multicurrency_total_tva;
|
public $multicurrency_total_tva;
|
||||||
public $multicurrency_total_ttc;
|
public $multicurrency_total_ttc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard invoice
|
||||||
|
*/
|
||||||
|
const TYPE_STANDARD = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replacement invoice
|
||||||
|
*/
|
||||||
|
const TYPE_REPLACEMENT = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credit note invoice
|
||||||
|
*/
|
||||||
|
const TYPE_CREDIT_NOTE = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deposit invoice
|
||||||
|
*/
|
||||||
|
const TYPE_DEPOSIT = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draft
|
||||||
|
*/
|
||||||
|
const STATUS_DRAFT = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validated (need to be paid)
|
||||||
|
*/
|
||||||
|
const STATUS_VALIDATED = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classified paid.
|
||||||
|
* If paid partially, $this->close_code can be:
|
||||||
|
* - CLOSECODE_DISCOUNTVAT
|
||||||
|
* - CLOSECODE_BADDEBT
|
||||||
|
* If paid completelly, this->close_code will be null
|
||||||
|
*/
|
||||||
|
const STATUS_CLOSED = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classified abandoned and no payment done.
|
||||||
|
* $this->close_code can be:
|
||||||
|
* - CLOSECODE_BADDEBT
|
||||||
|
* - CLOSECODE_ABANDONED
|
||||||
|
* - CLOSECODE_REPLACED
|
||||||
|
*/
|
||||||
|
const STATUS_ABANDONED = 3;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
@ -165,6 +214,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
if (isset($this->ref_supplier)) $this->ref_supplier=trim($this->ref_supplier);
|
if (isset($this->ref_supplier)) $this->ref_supplier=trim($this->ref_supplier);
|
||||||
|
if (empty($this->type)) $this->type = self::TYPE_STANDARD;
|
||||||
if (empty($this->date)) $this->date=$now;
|
if (empty($this->date)) $this->date=$now;
|
||||||
|
|
||||||
$socid = $this->socid;
|
$socid = $this->socid;
|
||||||
@ -191,6 +241,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$sql.= "ref";
|
$sql.= "ref";
|
||||||
$sql.= ", ref_supplier";
|
$sql.= ", ref_supplier";
|
||||||
$sql.= ", entity";
|
$sql.= ", entity";
|
||||||
|
$sql.= ", type";
|
||||||
$sql.= ", libelle";
|
$sql.= ", libelle";
|
||||||
$sql.= ", fk_soc";
|
$sql.= ", fk_soc";
|
||||||
$sql.= ", datec";
|
$sql.= ", datec";
|
||||||
@ -212,6 +263,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$sql.= "'(PROV)'";
|
$sql.= "'(PROV)'";
|
||||||
$sql.= ", '".$this->db->escape($this->ref_supplier)."'";
|
$sql.= ", '".$this->db->escape($this->ref_supplier)."'";
|
||||||
$sql.= ", ".$conf->entity;
|
$sql.= ", ".$conf->entity;
|
||||||
|
$sql.= ", '".$this->db->escape($this->type)."'";
|
||||||
$sql.= ", '".$this->db->escape($this->libelle)."'";
|
$sql.= ", '".$this->db->escape($this->libelle)."'";
|
||||||
$sql.= ", ".$this->socid;
|
$sql.= ", ".$this->socid;
|
||||||
$sql.= ", '".$this->db->idate($now)."'";
|
$sql.= ", '".$this->db->idate($now)."'";
|
||||||
@ -620,6 +672,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$error=0;
|
$error=0;
|
||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
|
if (empty($this->type)) $this->type= self::TYPE_STANDARD;
|
||||||
if (isset($this->ref)) $this->ref=trim($this->ref);
|
if (isset($this->ref)) $this->ref=trim($this->ref);
|
||||||
if (isset($this->ref_supplier)) $this->ref_supplier=trim($this->ref_supplier);
|
if (isset($this->ref_supplier)) $this->ref_supplier=trim($this->ref_supplier);
|
||||||
if (isset($this->entity)) $this->entity=trim($this->entity);
|
if (isset($this->entity)) $this->entity=trim($this->entity);
|
||||||
@ -1527,6 +1580,101 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoi liste des factures remplacables
|
||||||
|
* Statut validee ou abandonnee pour raison autre + non payee + aucun paiement + pas deja remplacee
|
||||||
|
*
|
||||||
|
* @param int $socid Id societe
|
||||||
|
* @return array Tableau des factures ('id'=>id, 'ref'=>ref, 'status'=>status, 'paymentornot'=>0/1)
|
||||||
|
*/
|
||||||
|
function list_replacable_supplier_invoices($socid=0)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$return = array();
|
||||||
|
|
||||||
|
$sql = "SELECT f.rowid as rowid, f.ref, f.fk_statut,";
|
||||||
|
$sql.= " ff.rowid as rowidnext";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
|
||||||
|
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON f.rowid = pf.fk_facturefourn";
|
||||||
|
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn as ff ON f.rowid = ff.fk_facture_source";
|
||||||
|
$sql.= " WHERE (f.fk_statut = ".self::STATUS_VALIDATED." OR (f.fk_statut = ".self::STATUS_ABANDONED." AND f.close_code = '".self::CLOSECODE_ABANDONED."'))";
|
||||||
|
$sql.= " AND f.entity = ".$conf->entity;
|
||||||
|
$sql.= " AND f.paye = 0"; // Pas classee payee completement
|
||||||
|
$sql.= " AND pf.fk_paiementfourn IS NULL"; // Aucun paiement deja fait
|
||||||
|
$sql.= " AND ff.fk_statut IS NULL"; // Renvoi vrai si pas facture de remplacement
|
||||||
|
if ($socid > 0) $sql.=" AND f.fk_soc = ".$socid;
|
||||||
|
$sql.= " ORDER BY f.ref";
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::list_replacable_supplier_invoices", LOG_DEBUG);
|
||||||
|
$resql=$this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
while ($obj=$this->db->fetch_object($resql))
|
||||||
|
{
|
||||||
|
$return[$obj->rowid]=array( 'id' => $obj->rowid,
|
||||||
|
'ref' => $obj->ref,
|
||||||
|
'status' => $obj->fk_statut);
|
||||||
|
}
|
||||||
|
//print_r($return);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error=$this->db->error();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoi liste des factures qualifiables pour correction par avoir
|
||||||
|
* Les factures qui respectent les regles suivantes sont retournees:
|
||||||
|
* (validee + paiement en cours) ou classee (payee completement ou payee partiellement) + pas deja remplacee + pas deja avoir
|
||||||
|
*
|
||||||
|
* @param int $socid Id societe
|
||||||
|
* @return array Tableau des factures ($id => array('ref'=>,'paymentornot'=>,'status'=>,'paye'=>)
|
||||||
|
*/
|
||||||
|
function list_qualified_avoir_supplier_invoices($socid=0)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$return = array();
|
||||||
|
|
||||||
|
$sql = "SELECT f.rowid as rowid, f.ref, f.fk_statut, f.type, f.paye, pf.fk_paiementfourn";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
|
||||||
|
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON f.rowid = pf.fk_facturefourn";
|
||||||
|
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn as ff ON (f.rowid = ff.fk_facture_source AND ff.type=".self::TYPE_REPLACEMENT.")";
|
||||||
|
$sql.= " WHERE f.entity = ".$conf->entity;
|
||||||
|
$sql.= " AND f.fk_statut in (".self::STATUS_VALIDATED.",".self::STATUS_CLOSED.")";
|
||||||
|
$sql.= " AND ff.type IS NULL"; // Renvoi vrai si pas facture de remplacement
|
||||||
|
$sql.= " AND f.type != ".self::TYPE_CREDIT_NOTE; // Type non 2 si facture non avoir
|
||||||
|
if ($socid > 0) $sql.=" AND f.fk_soc = ".$socid;
|
||||||
|
$sql.= " ORDER BY f.ref";
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::list_qualified_avoir_supplier_invoices", LOG_DEBUG);
|
||||||
|
$resql=$this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
while ($obj=$this->db->fetch_object($resql))
|
||||||
|
{
|
||||||
|
$qualified=0;
|
||||||
|
if ($obj->fk_statut == self::STATUS_VALIDATED) $qualified=1;
|
||||||
|
if ($obj->fk_statut == self::STATUS_CLOSED) $qualified=1;
|
||||||
|
if ($qualified)
|
||||||
|
{
|
||||||
|
$paymentornot=($obj->fk_paiementfourn?1:0);
|
||||||
|
$return[$obj->rowid]=array('ref'=>$obj->ref,'status'=>$obj->fk_statut,'type'=>$obj->type,'paye'=>$obj->paye,'paymentornot'=>$paymentornot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error=$this->db->error();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load indicators for dashboard (this->nbtodo and this->nbtodolate)
|
* Load indicators for dashboard (this->nbtodo and this->nbtodolate)
|
||||||
@ -1588,15 +1736,28 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
* Return clicable name (with picto eventually)
|
* Return clicable name (with picto eventually)
|
||||||
*
|
*
|
||||||
* @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto
|
* @param int $withpicto 0=No picto, 1=Include picto into link, 2=Only picto
|
||||||
* @param string $option Sur quoi pointe le lien
|
* @param string $option Where point the link
|
||||||
* @param int $max Max length of shown ref
|
* @param int $max Max length of shown ref
|
||||||
* @return string Chaine avec URL
|
* @param int $short 1=Return just URL
|
||||||
|
* @param string $moretitle Add more text to title tooltip
|
||||||
|
* @return string String with URL
|
||||||
*/
|
*/
|
||||||
public function getNomUrl($withpicto=0,$option='',$max=0)
|
public function getNomUrl($withpicto=0,$option='',$max=0,$short=0,$moretitle='')
|
||||||
{
|
{
|
||||||
global $langs, $conf;
|
global $langs, $conf;
|
||||||
|
|
||||||
$result='';
|
$result='';
|
||||||
|
|
||||||
|
if ($option == 'document') $url = DOL_URL_ROOT.'/fourn/facture/document.php?facid='.$this->id;
|
||||||
|
else $url = DOL_URL_ROOT.'/fourn/facture/card.php?facid='.$this->id;
|
||||||
|
|
||||||
|
if ($short) return $url;
|
||||||
|
|
||||||
|
$picto='bill';
|
||||||
|
if ($this->type == self::TYPE_REPLACEMENT) $picto.='r'; // Replacement invoice
|
||||||
|
if ($this->type == self::TYPE_CREDIT_NOTE) $picto.='a'; // Credit note
|
||||||
|
if ($this->type == self::TYPE_DEPOSIT) $picto.='d'; // Deposit invoice
|
||||||
|
|
||||||
$label = '<u>' . $langs->trans("ShowSupplierInvoice") . '</u>';
|
$label = '<u>' . $langs->trans("ShowSupplierInvoice") . '</u>';
|
||||||
if (! empty($this->ref))
|
if (! empty($this->ref))
|
||||||
$label .= '<br><b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
|
$label .= '<br><b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
|
||||||
@ -1608,23 +1769,19 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
$label.= '<br><b>' . $langs->trans('VAT') . ':</b> ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency);
|
$label.= '<br><b>' . $langs->trans('VAT') . ':</b> ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency);
|
||||||
if (! empty($this->total_ttc))
|
if (! empty($this->total_ttc))
|
||||||
$label.= '<br><b>' . $langs->trans('AmountTTC') . ':</b> ' . price($this->total_ttc, 0, $langs, 0, -1, -1, $conf->currency);
|
$label.= '<br><b>' . $langs->trans('AmountTTC') . ':</b> ' . price($this->total_ttc, 0, $langs, 0, -1, -1, $conf->currency);
|
||||||
|
if ($this->type == self::TYPE_REPLACEMENT) $label=$langs->transnoentitiesnoconv("ShowInvoiceReplace").': '.$this->ref;
|
||||||
if ($option == 'document')
|
if ($this->type == self::TYPE_CREDIT_NOTE) $label=$langs->transnoentitiesnoconv("ShowInvoiceAvoir").': '.$this->ref;
|
||||||
{
|
if ($this->type == self::TYPE_DEPOSIT) $label=$langs->transnoentitiesnoconv("ShowInvoiceDeposit").': '.$this->ref;
|
||||||
$link = '<a href="'.DOL_URL_ROOT.'/fourn/facture/document.php?facid='.$this->id.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
|
if ($moretitle) $label.=' - '.$moretitle;
|
||||||
$linkend='</a>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$link = '<a href="'.DOL_URL_ROOT.'/fourn/facture/card.php?facid='.$this->id.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
|
|
||||||
$linkend='</a>';
|
|
||||||
}
|
|
||||||
|
|
||||||
$ref=$this->ref;
|
$ref=$this->ref;
|
||||||
if (empty($ref)) $ref=$this->id;
|
if (empty($ref)) $ref=$this->id;
|
||||||
|
|
||||||
if ($withpicto) $result.=($link.img_object($label, 'bill', 'class="classfortooltip"').$linkend.' ');
|
$linkstart='<a href="'.$url.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
|
||||||
$result.=$link.($max?dol_trunc($ref,$max):$ref).$linkend;
|
$linkend='</a>';
|
||||||
|
|
||||||
|
if ($withpicto) $result.=($linkstart.img_object($label, $picto, 'class="classfortooltip"').$linkend.' ');
|
||||||
|
$result.=$linkstart.($max?dol_trunc($ref,$max):$ref).$linkend;
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user