La cration de facture de remplacement cre une facture copie brouillon de la facture remplace
This commit is contained in:
parent
24299292db
commit
ac5f32e232
@ -54,7 +54,7 @@ $langs->load('products');
|
||||
$langs->load('main');
|
||||
|
||||
$sall=isset($_GET['sall'])?trim($_GET['sall']):trim($_POST['sall']);
|
||||
$msg=isset($_GET['msg'])?urldecode($_GET['msg']):'';
|
||||
$mesg=isset($_GET['mesg'])?urldecode($_GET['mesg']):'';
|
||||
$socidp=isset($_GET['socidp'])?$_GET['socidp']:$_POST['socidp'];
|
||||
|
||||
// Sécurité accés client
|
||||
@ -165,7 +165,7 @@ if ($_POST['action'] == 'confirm_valid' && $_POST['confirm'] == 'yes' && $user->
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg='<div class="error">'.$fac->error.'</div>';
|
||||
$mesg='<div class="error">'.$fac->error.'</div>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -243,7 +243,7 @@ if ($_POST['action'] == 'confirm_payed_partially' && $_POST['confirm'] == 'yes'
|
||||
/*
|
||||
if ($close_code == 'other' && ! $close_note)
|
||||
{
|
||||
$msg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("Comment")).'</div>';
|
||||
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("Comment")).'</div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -260,7 +260,7 @@ if ($_POST['action'] == 'confirm_payed_partially' && $_POST['confirm'] == 'yes'
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("Reason")).'</div>';
|
||||
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("Reason")).'</div>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -269,38 +269,65 @@ if ($_POST['action'] == 'confirm_payed_partially' && $_POST['confirm'] == 'yes'
|
||||
*/
|
||||
if ($_POST['action'] == 'add')
|
||||
{
|
||||
$datefacture = mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
|
||||
|
||||
$facture = new Facture($db, $_POST['socid']);
|
||||
|
||||
$facture->type = $_POST['type'];
|
||||
if ($facture->type == 1) $facture->fk_facture_source = $_POST['replacement_ref'];
|
||||
$facture->number = $_POST['facnumber'];
|
||||
$facture->date = $datefacture;
|
||||
$facture->note_public = trim($_POST['note_public']);
|
||||
$facture->note = trim($_POST['note']);
|
||||
$facture->ref_client = $_POST['ref_client'];
|
||||
$facture->modelpdf = $_POST['model'];
|
||||
|
||||
if ($_POST['fac_rec'] > 0)
|
||||
$facture = new Facture($db);
|
||||
if ($_POST['type'] == 1)
|
||||
{
|
||||
// Facture récurrente
|
||||
if ($_POST['fac_replacement'] > 0)
|
||||
{
|
||||
// Si facture remplacement
|
||||
$result=$facture->fetch($_POST['fac_replacement']);
|
||||
|
||||
//print "xxx".$result." ".$facture->socidp;
|
||||
$facid = $facture->create_clone(1,$user);
|
||||
}
|
||||
else
|
||||
{
|
||||
$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("ReplaceInvoice")).'</div>';
|
||||
$_GET['action'] = 'create';
|
||||
}
|
||||
}
|
||||
|
||||
if ($_POST['type'] == 0 && $_POST['fac_rec'] > 0)
|
||||
{
|
||||
// Si facture récurrente
|
||||
$datefacture = mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
|
||||
|
||||
$facture->socidp = $_POST['socid'];
|
||||
$facture->type = $_POST['type'];
|
||||
$facture->number = $_POST['facnumber'];
|
||||
$facture->date = $datefacture;
|
||||
$facture->note_public = trim($_POST['note_public']);
|
||||
$facture->note = trim($_POST['note']);
|
||||
$facture->ref_client = $_POST['ref_client'];
|
||||
$facture->modelpdf = $_POST['model'];
|
||||
|
||||
$facture->fac_rec = $_POST['fac_rec'];
|
||||
$facid = $facture->create($user);
|
||||
}
|
||||
else
|
||||
|
||||
if ($_POST['type'] == 0 && $_POST['fac_rec'] <= 0)
|
||||
{
|
||||
// Si facture standard
|
||||
$datefacture = mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
|
||||
|
||||
$facture->socidp = $_POST['socid'];
|
||||
$facture->type = $_POST['type'];
|
||||
$facture->number = $_POST['facnumber'];
|
||||
$facture->date = $datefacture;
|
||||
$facture->note_public = trim($_POST['note_public']);
|
||||
$facture->note = trim($_POST['note']);
|
||||
$facture->ref_client = $_POST['ref_client'];
|
||||
$facture->modelpdf = $_POST['model'];
|
||||
$facture->projetid = $_POST['projetid'];
|
||||
$facture->cond_reglement_id = $_POST['cond_reglement_id'];
|
||||
$facture->mode_reglement_id = $_POST['mode_reglement_id'];
|
||||
$facture->amount = $_POST['amount'];
|
||||
$facture->remise_absolue = $_POST['remise_absolue'];
|
||||
$facture->remise_percent = $_POST['remise_percent'];
|
||||
$facture->ref_client = $_POST['ref_client'];
|
||||
|
||||
if (! $_POST['propalid'] && ! $_POST['commandeid'] && ! $_POST['contratid'])
|
||||
{
|
||||
for ($i = 1 ; $i <= $NBLINES ; $i++)
|
||||
for ($i = 1; $i <= $NBLINES; $i++)
|
||||
{
|
||||
if ($_POST['idprod'.$i])
|
||||
{
|
||||
@ -315,6 +342,8 @@ if ($_POST['action'] == 'add')
|
||||
$facture->add_product($_POST['idprod'.$i],$_POST['qty'.$i],$_POST['remise_percent'.$i],$startday,$endday);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$facid = $facture->create($user);
|
||||
|
||||
if ($facid > 0)
|
||||
@ -325,14 +354,14 @@ if ($_POST['action'] == 'add')
|
||||
else
|
||||
{
|
||||
$_GET["action"]='create';
|
||||
$msg='<div class="error">'.$facture->error.'</div>';
|
||||
$mesg='<div class="error">'.$facture->error.'</div>';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Si creation depuis propale
|
||||
*/
|
||||
* Si creation depuis propale
|
||||
*/
|
||||
if ($_POST['propalid'])
|
||||
{
|
||||
$facture->propalid = $_POST['propalid'];
|
||||
@ -347,18 +376,18 @@ if ($_POST['action'] == 'add')
|
||||
$desc=($prop->lignes[$i]->desc?$prop->lignes[$i]->desc:$prop->lignes[$i]->libelle);
|
||||
|
||||
$result = $facture->addline(
|
||||
$facid,
|
||||
$desc,
|
||||
$prop->lignes[$i]->subprice,
|
||||
$prop->lignes[$i]->qty,
|
||||
$prop->lignes[$i]->tva_tx,
|
||||
$prop->lignes[$i]->fk_product,
|
||||
$prop->lignes[$i]->remise_percent,
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
$prop->lignes[$i]->info_bits,
|
||||
$prop->lignes[$i]->fk_remise_except);
|
||||
$facid,
|
||||
$desc,
|
||||
$prop->lignes[$i]->subprice,
|
||||
$prop->lignes[$i]->qty,
|
||||
$prop->lignes[$i]->tva_tx,
|
||||
$prop->lignes[$i]->fk_product,
|
||||
$prop->lignes[$i]->remise_percent,
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
$prop->lignes[$i]->info_bits,
|
||||
$prop->lignes[$i]->fk_remise_except);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -373,8 +402,8 @@ if ($_POST['action'] == 'add')
|
||||
}
|
||||
|
||||
/*
|
||||
* Si création depuis commande
|
||||
*/
|
||||
* Si création depuis commande
|
||||
*/
|
||||
if ($_POST['commandeid'])
|
||||
{
|
||||
$facture->commandeid = $_POST['commandeid'];
|
||||
@ -390,18 +419,18 @@ if ($_POST['action'] == 'add')
|
||||
$desc=($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->libelle);
|
||||
|
||||
$result = $facture->addline(
|
||||
$facid,
|
||||
$desc,
|
||||
$lines[$i]->subprice,
|
||||
$lines[$i]->qty,
|
||||
$lines[$i]->tva_tx,
|
||||
$lines[$i]->fk_product,
|
||||
$lines[$i]->remise_percent,
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
$lines[$i]->info_bits,
|
||||
$lines[$i]->fk_remise_except);
|
||||
$facid,
|
||||
$desc,
|
||||
$lines[$i]->subprice,
|
||||
$lines[$i]->qty,
|
||||
$lines[$i]->tva_tx,
|
||||
$lines[$i]->fk_product,
|
||||
$lines[$i]->remise_percent,
|
||||
'',
|
||||
'',
|
||||
0,
|
||||
$lines[$i]->info_bits,
|
||||
$lines[$i]->fk_remise_except);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -416,8 +445,8 @@ if ($_POST['action'] == 'add')
|
||||
}
|
||||
|
||||
/*
|
||||
* Si création depuis contrat
|
||||
*/
|
||||
* Si création depuis contrat
|
||||
*/
|
||||
if ($_POST['contratid'])
|
||||
{
|
||||
$facture->contratid = $_POST['contratid'];
|
||||
@ -440,18 +469,18 @@ if ($_POST['action'] == 'add')
|
||||
if ($contrat->lignes[$i]->date_fin_reel) $date_end=$contrat->lignes[$i]->date_fin_reel;
|
||||
|
||||
$result = $facture->addline(
|
||||
$facid,
|
||||
$desc,
|
||||
$lines[$i]->subprice,
|
||||
$lines[$i]->qty,
|
||||
$lines[$i]->tva_tx,
|
||||
$lines[$i]->fk_product,
|
||||
$lines[$i]->remise_percent,
|
||||
$date_start,
|
||||
$date_end,
|
||||
0,
|
||||
$lines[$i]->info_bits,
|
||||
$lines[$i]->fk_remise_except);
|
||||
$facid,
|
||||
$desc,
|
||||
$lines[$i]->subprice,
|
||||
$lines[$i]->qty,
|
||||
$lines[$i]->tva_tx,
|
||||
$lines[$i]->fk_product,
|
||||
$lines[$i]->remise_percent,
|
||||
$date_start,
|
||||
$date_end,
|
||||
0,
|
||||
$lines[$i]->info_bits,
|
||||
$lines[$i]->fk_remise_except);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -465,14 +494,16 @@ if ($_POST['action'] == 'add')
|
||||
}
|
||||
}
|
||||
|
||||
// Fin création facture, on l'affiche
|
||||
if ($facid > 0)
|
||||
{
|
||||
Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$facid);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fin création facture, on l'affiche
|
||||
if ($facid > 0)
|
||||
{
|
||||
Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$facid);
|
||||
exit;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@ -767,13 +798,13 @@ if (($_POST['action'] == 'send' || $_POST['action'] == 'relance') && ! $_POST['c
|
||||
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt);
|
||||
if ($mailfile->error)
|
||||
{
|
||||
$msg='<div class="error">'.$mailfile->error.'</div>';
|
||||
$mesg='<div class="error">'.$mailfile->error.'</div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($mailfile->sendfile())
|
||||
{
|
||||
$msg='<div class="ok">'.$langs->trans('MailSuccessfulySent',$from,$sendto).'.</div>';
|
||||
$mesg='<div class="ok">'.$langs->trans('MailSuccessfulySent',$from,$sendto).'.</div>';
|
||||
|
||||
// Insertion action
|
||||
require_once(DOL_DOCUMENT_ROOT.'/contact.class.php');
|
||||
@ -798,24 +829,24 @@ if (($_POST['action'] == 'send' || $_POST['action'] == 'relance') && ! $_POST['c
|
||||
else
|
||||
{
|
||||
// Renvoie sur la fiche
|
||||
Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$fac->id.'&msg='.urlencode($msg));
|
||||
Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$fac->id.'&mesg='.urlencode($mesg));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$langs->load("other");
|
||||
$msg='<div class="error">';
|
||||
$msg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto);
|
||||
if ($mailfile->error) $msg.='<br>'.$mailfile->error;
|
||||
$msg.='</div>';
|
||||
$mesg='<div class="error">';
|
||||
$mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto);
|
||||
if ($mailfile->error) $mesg.='<br>'.$mailfile->error;
|
||||
$mesg.='</div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$langs->load("other");
|
||||
$msg='<div class="error">'.$langs->trans('ErrorMailRecipientIsEmpty').'</div>';
|
||||
$mesg='<div class="error">'.$langs->trans('ErrorMailRecipientIsEmpty').'</div>';
|
||||
dolibarr_syslog('Recipient email is empty');
|
||||
}
|
||||
|
||||
@ -823,14 +854,14 @@ if (($_POST['action'] == 'send' || $_POST['action'] == 'relance') && ! $_POST['c
|
||||
else
|
||||
{
|
||||
$langs->load("other");
|
||||
$msg='<div class="error">'.$langs->trans('ErrorCantReadFile',$file).'</div>';
|
||||
$mesg='<div class="error">'.$langs->trans('ErrorCantReadFile',$file).'</div>';
|
||||
dolibarr_syslog('Failed to read file: '.$file);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$langs->load("other");
|
||||
$msg='<div class="error">'.$langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")).'</div>';
|
||||
$mesg='<div class="error">'.$langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")).'</div>';
|
||||
dolibarr_syslog('Impossible de lire les données de la facture. Le fichier facture n\'a peut-être pas été généré.');
|
||||
}
|
||||
}
|
||||
@ -907,7 +938,7 @@ if ($_GET['action'] == 'create')
|
||||
|
||||
print_titre($langs->trans('NewBill'));
|
||||
|
||||
if ($msg) print $msg;
|
||||
if ($mesg) print $mesg;
|
||||
|
||||
$soc = new Societe($db);
|
||||
|
||||
@ -1017,7 +1048,7 @@ if ($_GET['action'] == 'create')
|
||||
print '>';
|
||||
print '</td><td>';
|
||||
$text=$langs->trans("InvoiceReplacementAsk").' ';
|
||||
$text.='<select name="replacement_ref">';
|
||||
$text.='<select name="fac_replacement">';
|
||||
if ($options)
|
||||
{
|
||||
$text.='<option value="-1"> </option>';
|
||||
@ -1426,7 +1457,7 @@ else
|
||||
/* */
|
||||
/* *************************************************************************** */
|
||||
|
||||
if ($msg) print $msg.'<br>';
|
||||
if ($mesg) print $mesg.'<br>';
|
||||
|
||||
$fac = New Facture($db);
|
||||
if ( $fac->fetch($_GET['facid'], $user->societe_id) > 0)
|
||||
|
||||
@ -77,6 +77,9 @@ class Facture extends CommonObject
|
||||
var $mode_reglement_code;
|
||||
var $modelpdf;
|
||||
|
||||
var $products=array();
|
||||
var $lignes=array();
|
||||
|
||||
// Pour board
|
||||
var $nbtodo;
|
||||
var $nbtodolate;
|
||||
@ -108,9 +111,6 @@ class Facture extends CommonObject
|
||||
$this->propalid = 0;
|
||||
$this->projetid = 0;
|
||||
$this->remise_exceptionnelle = 0;
|
||||
|
||||
$this->products = array(); // Tableau de lignes de factures
|
||||
$this->lignes = array();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -348,6 +348,52 @@ class Facture extends CommonObject
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Création de la facture en base depuis une autre
|
||||
* \param facidsrc Id facture source
|
||||
* \param invertdetail Inverse le signe des lignes details
|
||||
* \param user Object utilisateur qui crée
|
||||
* \return int <0 si ko, >0 si ok
|
||||
*/
|
||||
function create_clone($invertdetail=0,$user)
|
||||
{
|
||||
// Charge facture source
|
||||
$facture=new Facture($this->db);
|
||||
|
||||
$facture->fk_facture_source = $this->id;
|
||||
|
||||
$facture->socidp = $this->socidp;
|
||||
$facture->type = $this->type;
|
||||
$facture->number = $this->number;
|
||||
$facture->date = $this->date;
|
||||
$facture->note_public = $this->note_public;
|
||||
$facture->note = $this->note;
|
||||
$facture->ref_client = $this->ref_client;
|
||||
$facture->modelpdf = $this->modelpdf;
|
||||
$facture->projetid = $this->projetid;
|
||||
$facture->cond_reglement_id = $this->cond_reglement_id;
|
||||
$facture->mode_reglement_id = $this->mode_reglement_id;
|
||||
$facture->amount = $this->amount;
|
||||
$facture->remise_absolue = $this->remise_absolue;
|
||||
$facture->remise_percent = $this->remise_percent;
|
||||
|
||||
dolibarr_syslog("Facture::create_clone invertdetail=$invertdetail socidp=".$this->socidp);
|
||||
|
||||
for ($i = 0; $i < sizeof($this->lignes); $i++)
|
||||
{
|
||||
if ($this->lignes[$i])
|
||||
{
|
||||
//print $this->lignes[$i]->fk_product.",".$this->lignes[$i]->qty.",".$this->lignes[$i]->remise_percent.",".$this->lignes[$i]->date_start.",".$this->lignes[$i]->date_end;
|
||||
$facture->add_product($this->lignes[$i]->fk_product,$this->lignes[$i]->qty,$this->lignes[$i]->remise_percent,$this->lignes[$i]->date_start,$this->lignes[$i]->date_end);
|
||||
}
|
||||
}
|
||||
|
||||
$facid = $facture->create($user);
|
||||
|
||||
return $facid;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Renvoie nom clicable (avec eventuellement le picto)
|
||||
* \param withpicto Inclut le picto dans le lien
|
||||
@ -377,7 +423,7 @@ class Facture extends CommonObject
|
||||
*/
|
||||
function fetch($rowid, $societe_id=0)
|
||||
{
|
||||
//dolibarr_syslog("Facture::Fetch rowid : $rowid, societe_id : $societe_id");
|
||||
dolibarr_syslog("Facture.class::fetch rowid=$rowid, societe_id=$societe_id");
|
||||
|
||||
$sql = 'SELECT f.facnumber,f.ref_client,f.type,f.fk_soc,f.amount,f.tva,f.total,f.total_ttc,f.remise_percent,f.remise_absolue,f.remise';
|
||||
$sql.= ','.$this->db->pdate('f.datef').' as df, f.fk_projet';
|
||||
@ -493,6 +539,7 @@ class Facture extends CommonObject
|
||||
$faclig->remise_percent = $objp->remise_percent;
|
||||
$faclig->fk_remise_except = $objp->fk_remise_except;
|
||||
$faclig->produit_id = $objp->fk_product;
|
||||
$faclig->fk_product = $objp->fk_product;
|
||||
$faclig->date_start = $objp->date_start;
|
||||
$faclig->date_end = $objp->date_end;
|
||||
$faclig->date_start = $objp->date_start;
|
||||
@ -2116,7 +2163,7 @@ class Facture extends CommonObject
|
||||
|
||||
/**
|
||||
* \brief Renvoi liste des factures remplacables
|
||||
* Statut validee + aucun paiement + non paye
|
||||
* Statut validee + aucun paiement + non paye + pas deja remplacées
|
||||
* \param socid Id societe
|
||||
* \return array Tableau des factures ($id => $ref)
|
||||
*/
|
||||
@ -2126,14 +2173,17 @@ class Facture extends CommonObject
|
||||
|
||||
$return = array();
|
||||
|
||||
$sql = "SELECT f.rowid, f.facnumber";
|
||||
$sql = "SELECT f.rowid as rowid, f.facnumber,";
|
||||
$sql.= " ff.rowid as rowidnext";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as ff ON f.rowid = ff.fk_facture_source";
|
||||
$sql.= " WHERE f.fk_statut = 1 AND f.paye = 0 AND pf.fk_paiement IS NULL";
|
||||
$sql.= " AND ff.rowid IS NULL";
|
||||
if ($socid > 0) $sql.=" AND f.fk_soc = ".$socid;
|
||||
$sql.= " ORDER BY f.facnumber";
|
||||
|
||||
dolibarr_syslog("Facture.class::list_replacable_invoices sq=$sql");
|
||||
dolibarr_syslog("Facture.class::list_replacable_invoices sql=$sql");
|
||||
$resql=$this->db->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
@ -2146,6 +2196,8 @@ class Facture extends CommonObject
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=$this->db->error();
|
||||
dolibarr_syslog("Facture.class::list_replacable_invoices ".$this->error);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -2574,6 +2626,7 @@ class FactureLigne
|
||||
$this->remise_percent = $objp->remise_percent;
|
||||
$this->fk_remise_except = $objp->fk_remise_except;
|
||||
$this->produit_id = $objp->fk_product;
|
||||
$this->fk_product = $objp->fk_product;
|
||||
$this->date_start = $objp->date_start;
|
||||
$this->date_end = $objp->date_end;
|
||||
$this->info_bits = $objp->info_bits;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user