From 23742344c89e7b70bdc19597ee7a3c62c6c9774e Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 10 Sep 2010 06:28:51 +0000 Subject: [PATCH] New: move "commande create from propal" in a trigger --- htdocs/comm/propal.php | 9 - htdocs/comm/propal/class/propal.class.php | 55 +----- htdocs/commande/class/commande.class.php | 62 ------ ...erface_modPropale_PropalWorkflow.class.php | 187 ++++++++++++++++++ 4 files changed, 194 insertions(+), 119 deletions(-) create mode 100644 htdocs/includes/triggers/interface_modPropale_PropalWorkflow.class.php diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index b5db99285bf..da1fb65fd76 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -573,15 +573,6 @@ if ($_POST['action'] == 'send' && ! $_POST['addfile'] && ! $_POST['removedfile'] } } -if ($_GET['action'] == 'commande') -{ - /* - * Cloture de la propale - */ - $propal->fetch($id); - $propal->create_commande($user); -} - if ($_GET['action'] == 'modif' && $user->rights->propale->creer) { /* diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index d0423546e61..4b68fc81885 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -94,6 +94,8 @@ class Propal extends CommonObject var $lines = array(); var $line; + + var $clone_fromid; var $origin; var $origin_id; @@ -783,6 +785,7 @@ class Propal extends CommonObject $object->fetch($fromid); $object->id=0; $object->statut=0; + $object->clone_fromid=$fromid; require_once(DOL_DOCUMENT_ROOT ."/societe/class/societe.class.php"); $objsoc=new Societe($this->db); @@ -1288,19 +1291,10 @@ class Propal extends CommonObject { if ($statut == 2) { - // Propale signee - include_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php"); - - // TODO move in triggers - $result=$this->create_commande($user); - - if ($result >= 0) - { - // Classe la societe rattachee comme client - $soc=new Societe($this->db); - $soc->id = $this->socid; - $result=$soc->set_as_client(); - } + // Classe la societe rattachee comme client + $soc=new Societe($this->db); + $soc->id = $this->socid; + $result=$soc->set_as_client(); if ($result < 0) { @@ -1359,41 +1353,6 @@ class Propal extends CommonObject } } - - /** - * \brief Cree une commande a partir de la proposition commerciale - * \param user Utilisateur - * \return int <0 si ko, >=0 si ok - * TODO move in triggers - */ - function create_commande($user) - { - global $conf; - - if ($conf->commande->enabled) - { - if ($this->statut == 2) - { - // Propale signee - include_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php"); - $commande = new Commande($this->db); - $result=$commande->create_from_propale($user, $this->id); - - // Ne pas passer par la commande provisoire - if ($conf->global->COMMANDE_VALID_AFTER_CLOSE_PROPAL == 1) - { - $commande->fetch($result); - $commande->valid($user); - } - - return $result; - } - else return 0; - } - else return 0; - } - - /** * \brief Set draft status * \param user Object user that modify diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 61b795783dd..db5a553a726 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -109,68 +109,6 @@ class Commande extends CommonObject $this->products = array(); } - - /** - * \brief Cree la commande depuis une propale existante - * \param user Utilisateur qui cree - * \param propale_id id de la propale qui sert de modele - * TODO move in trigger - */ - function create_from_propale($user, $propale_id) - { - dol_syslog("Commande::create_from_propale propale_id=$propale_id"); - - $propal = new Propal($this->db); - $propal->fetch($propale_id); - - $this->lines = array(); - $this->date_commande = time(); - $this->source = 0; - for ($i = 0 ; $i < sizeof($propal->lignes) ; $i++) - { - $line = new OrderLine($this->db); - - $line->libelle = $propal->lines[$i]->libelle; - $line->desc = $propal->lines[$i]->desc; - $line->price = $propal->lines[$i]->price; - $line->subprice = $propal->lines[$i]->subprice; - $line->tva_tx = $propal->lines[$i]->tva_tx; - $line->localtax1_tx = $propal->lines[$i]->localtax1_tx; - $line->localtax2_tx = $propal->lines[$i]->localtax2_tx; - $line->qty = $propal->lines[$i]->qty; - $line->fk_remise_except = $propal->lines[$i]->fk_remise_except; - $line->remise_percent = $propal->lines[$i]->remise_percent; - $line->fk_product = $propal->lines[$i]->fk_product; - $line->info_bits = $propal->lines[$i]->info_bits; - $line->product_type = $propal->lines[$i]->product_type; - $line->special_code = $propal->lines[$i]->special_code; - - $this->lines[$i] = $line; - } - - $this->socid = $propal->socid; - $this->fk_project = $propal->fk_project; - $this->cond_reglement_id = $propal->cond_reglement_id; - $this->mode_reglement_id = $propal->mode_reglement_id; - $this->date_livraison = $propal->date_livraison; - $this->fk_delivery_address = $propal->fk_delivery_address; - $this->contact_id = $propal->contactid; - $this->ref_client = $propal->ref_client; - $this->note = $propal->note; - $this->note_public = $propal->note_public; - - /* Definit la societe comme un client */ - $soc = new Societe($this->db); - $soc->id = $this->socid; - $soc->set_as_client(); - - $this->origin = $propal->element; - $this->origin_id = $propal->id; - - return $this->create($user); - } - - /** * \brief Renvoie la reference de commande suivante non utilisee en fonction du module * de numerotation actif defini dans COMMANDE_ADDON diff --git a/htdocs/includes/triggers/interface_modPropale_PropalWorkflow.class.php b/htdocs/includes/triggers/interface_modPropale_PropalWorkflow.class.php new file mode 100644 index 00000000000..4d82fdd5cda --- /dev/null +++ b/htdocs/includes/triggers/interface_modPropale_PropalWorkflow.class.php @@ -0,0 +1,187 @@ + + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + * \file htdocs/includes/triggers/interface_modPropale_PropalWorkflow.class.php + * \ingroup propale + * \brief Trigger file for proposal workflow + * \version $Id$ + */ + + +/** + * \class InterfacePropalWorkflow + * \brief Classe des fonctions triggers des actions personalisees du workflow + */ + +class InterfacePropalWorkflow +{ + var $db; + + /** + * \brief Constructeur. + * \param DB Handler d'acces base + */ + function InterfacePropalWorkflow($DB) + { + $this->db = $DB ; + + $this->name = preg_replace('/^Interface/i','',get_class($this)); + $this->family = "propale"; + $this->description = "Triggers of this module allows to manage proposal workflow"; + $this->version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' or version + $this->picto = 'propal'; + } + + + /** + * \brief Renvoi nom du lot de triggers + * \return string Nom du lot de triggers + */ + function getName() + { + return $this->name; + } + + /** + * \brief Renvoi descriptif du lot de triggers + * \return string Descriptif du lot de triggers + */ + function getDesc() + { + return $this->description; + } + + /** + * \brief Renvoi version du lot de triggers + * \return string Version du lot de triggers + */ + function getVersion() + { + global $langs; + $langs->load("admin"); + + if ($this->version == 'development') return $langs->trans("Development"); + elseif ($this->version == 'experimental') return $langs->trans("Experimental"); + elseif ($this->version == 'dolibarr') return DOL_VERSION; + elseif ($this->version) return $this->version; + else return $langs->trans("Unknown"); + } + + /** + * \brief Fonction appelee lors du declenchement d'un evenement Dolibarr. + * D'autres fonctions run_trigger peuvent etre presentes dans includes/triggers + * \param action Code de l'evenement + * \param object Objet concerne + * \param user Objet user + * \param lang Objet lang + * \param conf Objet conf + * \return int <0 if fatal error, 0 si nothing done, >0 if ok + */ + function run_trigger($action,$object,$user,$langs,$conf) + { + // Mettre ici le code a executer en reaction de l'action + // Les donnees de l'action sont stockees dans $object + + // Proposals + if ($action == 'PROPAL_CLOSE_SIGNED') + { + dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); + return $this->_createSupplierOrderFromPropal($action,$object,$user,$langs,$conf); + } + + return 0; + } + + /** + * Create a supplier order from a propal + */ + function _createSupplierOrderFromPropal($action,$object,$user,$langs,$conf) + { + $error=0; + + if ($conf->commande->enabled) + { + // Signed proposal + if ($object->statut == 2) + { + include_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php"); + + $order = new Commande($this->db); + $orderline = new OrderLine($this->db); + + $order->date_commande = time(); + $order->source = 0; + + for ($i = 0 ; $i < sizeof($object->lines) ; $i++) + { + $line = new OrderLine($this->db); + + $line->libelle = $object->lines[$i]->libelle; + $line->desc = $object->lines[$i]->desc; + $line->price = $object->lines[$i]->price; + $line->subprice = $object->lines[$i]->subprice; + $line->tva_tx = $object->lines[$i]->tva_tx; + $line->localtax1_tx = $object->lines[$i]->localtax1_tx; + $line->localtax2_tx = $object->lines[$i]->localtax2_tx; + $line->qty = $object->lines[$i]->qty; + $line->fk_remise_except = $object->lines[$i]->fk_remise_except; + $line->remise_percent = $object->lines[$i]->remise_percent; + $line->fk_product = $object->lines[$i]->fk_product; + $line->info_bits = $object->lines[$i]->info_bits; + $line->product_type = $object->lines[$i]->product_type; + $line->special_code = $object->lines[$i]->special_code; + + $order->lines[$i] = $line; + } + + $order->socid = $object->socid; + $order->fk_project = $object->fk_project; + $order->cond_reglement_id = $object->cond_reglement_id; + $order->mode_reglement_id = $object->mode_reglement_id; + $order->date_livraison = $object->date_livraison; + $order->fk_delivery_address = $object->fk_delivery_address; + $order->contact_id = $object->contactid; + $order->ref_client = $object->ref_client; + $order->note = $object->note; + $order->note_public = $object->note_public; + + $order->origin = $object->element; + $order->origin_id = $object->id; + + $ret = $order->create($user); + + if ($ret > 0) + { + // Ne pas passer par la commande provisoire + if ($conf->global->COMMANDE_VALID_AFTER_CLOSE_PROPAL == 1) + { + $order->fetch($ret); + $order->valid($user); + } + + return 1; + } + } + else return 0; + } + else return 0; + } + +} +?>