Fix: mutualize code

This commit is contained in:
Regis Houssin 2010-04-28 19:23:36 +00:00
parent a8b55112a3
commit ebdbeec4a9
3 changed files with 44 additions and 149 deletions

View File

@ -39,9 +39,6 @@ require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php");
require_once(DOL_DOCUMENT_ROOT.'/lib/invoice.lib.php');
if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT.'/projet/project.class.php');
if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT.'/lib/project.lib.php');
if ($conf->propal->enabled) require_once(DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php');
if ($conf->contrat->enabled) require_once(DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php');
if ($conf->commande->enabled) require_once(DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php');
$langs->load('bills');
$langs->load('companies');
@ -666,84 +663,53 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
$facture->remise_percent = $_POST['remise_percent'];
// If creation from proposal
if ($_POST['propalid'])
if ($_POST['origin'] && $_POST['originid'])
{
$facture->propalid = $_POST['propalid'];
// Parse element/subelement (ex: project_task)
$element = $subelement = $_POST['origin'];
if (preg_match('/^([^_]+)_([^_]+)/i',$_POST['origin'],$regs))
{
$element = $regs[1];
$subelement = $regs[2];
}
// For compatibility
if ($element == 'order') { $element = $subelement = 'commande'; }
if ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; }
if ($element == 'contract') { $element = $subelement = 'contrat'; }
$facture->origin = $_POST['origin'];
$facture->origin_id = $_POST['originid'];
$facid = $facture->create($user);
if ($facid > 0)
{
$prop = new Propal($db);
if ( $prop->fetch($_POST['propalid']) )
require_once(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php');
$classname = ucfirst($subelement);
$object = new $classname($db);
if ($object->fetch($_POST['originid']))
{
for ($i = 0 ; $i < sizeof($prop->lignes) ; $i++)
{
$desc=($prop->lignes[$i]->desc?$prop->lignes[$i]->desc:$prop->lignes[$i]->libelle);
// Dates
$date_start=$prop->lignes[$i]->date_debut_prevue;
if ($prop->lignes[$i]->date_debut_reel) $date_start=$prop->lignes[$i]->date_debut_reel;
$date_end=$prop->lignes[$i]->date_fin_prevue;
if ($prop->lignes[$i]->date_fin_reel) $date_end=$prop->lignes[$i]->date_fin_reel;
$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,
$date_start,
$date_end,
0,
$prop->lignes[$i]->info_bits,
$prop->lignes[$i]->fk_remise_except,
'HT',
0,
$prop->lignes[$i]->product_type
);
if ($result < 0)
{
$error++;
break;
}
}
}
else
{
$error++;
}
}
else
{
$error++;
}
}
// If creation from order
else if ($_POST['commandeid'])
{
$facture->commandeid = $_POST['commandeid'];
$facid = $facture->create($user);
if ($facid > 0)
{
$comm = new Commande($db);
if ( $comm->fetch($_POST['commandeid']) )
{
$comm->fetch_lines();
$lines = $comm->lignes;
// TODO mutualiser
$lines = $object->lignes;
if (empty($lines) && method_exists($object,'fetch_lignes')) $lines = $object->fetch_lignes();
if (empty($lines) && method_exists($object,'fetch_lines')) $lines = $object->fetch_lines();
for ($i = 0 ; $i < sizeof($lines) ; $i++)
{
$desc=($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->libelle);
$desc=($lines[$i]->desc?$lines[$i]->desc:$lines[$i]->libelle);
$product_type=($lines[$i]->product_type?$lines[$i]->product_type:0);
// Dates
$date_start=$comm->lignes[$i]->date_start;
$date_end=$comm->lignes[$i]->date_end;
// TODO mutualiser
$date_start=$lines[$i]->date_debut_prevue;
if ($lines[$i]->date_debut_reel) $date_start=$lines[$i]->date_debut_reel;
if ($lines[$i]->date_start) $date_start=$lines[$i]->date_start;
$date_end=$lines[$i]->date_fin_prevue;
if ($lines[$i]->date_fin_reel) $date_end=$lines[$i]->date_fin_reel;
if ($lines[$i]->date_end) $date_end=$lines[$i]->date_end;
// Should use a function using total_ht, total_ttc and total_vat
$result = $facture->addline(
$facid,
$desc,
@ -759,63 +725,7 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
$lines[$i]->fk_remise_except,
'HT',
0,
$lines[$i]->product_type
);
if ($result < 0)
{
$error++;
break;
}
}
}
else
{
$error++;
}
}
else
{
$error++;
}
}
// If creation from contract
else if ($_POST['contratid'])
{
$facture->contratid = $_POST['contratid'];
$facid = $facture->create($user);
if ($facid > 0)
{
$contrat = New Contrat($db);
if ($contrat->fetch($_POST['contratid']) > 0)
{
$lines = $contrat->fetch_lignes();
for ($i = 0 ; $i < sizeof($lines) ; $i++)
{
$desc=($contrat->lignes[$i]->desc?$contrat->lignes[$i]->desc:$contrat->lignes[$i]->libelle);
// Dates
$date_start=$contrat->lignes[$i]->date_debut_prevue;
if ($contrat->lignes[$i]->date_debut_reel) $date_start=$contrat->lignes[$i]->date_debut_reel;
$date_end=$contrat->lignes[$i]->date_fin_prevue;
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
$product_type
);
if ($result < 0)
@ -867,9 +777,8 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
{
$db->rollback();
$_GET["action"]='create';
$_GET["propalid"]=$_POST["propalid"];
$_GET["commandeid"]=$_POST["commandeid"];
$_GET["contratid"]=$_POST["contratid"];
$_GET["origin"]=$_POST["origin"];
$_GET["originid"]=$_POST["originid"];
if (! $mesg) $mesg='<div class="error">'.$facture->error.'</div>';
}
}
@ -1798,6 +1707,7 @@ if ($_GET['action'] == 'create')
print '<input type="hidden" name="amount" value="'.$object->total_ht.'">'."\n";
print '<input type="hidden" name="total" value="'.$object->total_ttc.'">'."\n";
print '<input type="hidden" name="tva" value="'.$object->total_tva.'">'."\n";
print '<input type="hidden" name="origin" value="'.$object->element.'">';
print '<input type="hidden" name="originid" value="'.$object->id.'">';
print '<tr><td>'.$langs->trans($classname).'</td><td colspan="2">'.$object->getNomUrl(1).'</td></tr>';

View File

@ -89,7 +89,8 @@ class Facture extends CommonObject
var $close_code;
//! Commentaire si mis a paye sans paiement complet
var $close_note;
var $propalid;
var $origin;
var $origin_id;
var $fk_project;
var $date_lim_reglement;
var $cond_reglement_id; // Id in llx_cond_reglement
@ -253,24 +254,9 @@ class Facture extends CommonObject
$resql=$this->db->query($sql);
if (! $resql) $error++;
// Mise a jour lien avec propal ou commande
if (! $error && $this->id && $this->propalid)
// Add object linked
if (! $error && $this->id && $this->origin && $this->origin_id)
{
// TODO normaliser ?
$this->origin_id = $this->propalid;
$this->origin = "propal";
$ret = $this->add_object_linked();
if (! $ret)
{
dol_print_error($this->db);
$error++;
}
}
if (! $error && $this->id && $this->commandeid)
{
// TODO normaliser ?
$this->origin_id = $this->commandeid;
$this->origin = "commande";
$ret = $this->add_object_linked();
if (! $ret)
{

View File

@ -1031,7 +1031,6 @@ class CommonObject
$tplpath = $object;
if ($object == 'facture') $tplpath = $classpath = 'compta/'.$object;
if ($object == 'propal') $tplpath = $classpath = 'comm/'.$object;
if ($object == 'commande') $tplpath = $classpath = $object;
$classname = ucfirst($object);
if(!class_exists($classname)) require(DOL_DOCUMENT_ROOT."/".$classpath."/".$object.".class.php");