diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index fd0f3faa95a86e35439d0f536546c84aa6f54d37..3e6deac6814cb81a61cd401f31da43f8bf5fce97 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -64,6 +64,8 @@ class Commande extends CommonObject var $mode_reglement_code; var $availability_id; var $availability_code; + var $demand_reason_id; + var $demand_reason_code; var $fk_delivery_address; var $adresse; var $date; // Date commande @@ -567,7 +569,7 @@ class Commande extends CommonObject $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande ("; $sql.= " ref, fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source, note, note_public, ref_client"; - $sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_availability, date_livraison, fk_adresse_livraison"; + $sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_availability, fk_demand_reason, date_livraison, fk_adresse_livraison"; $sql.= ", remise_absolue, remise_percent"; $sql.= ", entity"; $sql.= ")"; @@ -580,6 +582,7 @@ class Commande extends CommonObject $sql.= ", ".($this->cond_reglement_id>0?"'".$this->cond_reglement_id."'":"null"); $sql.= ", ".($this->mode_reglement_id>0?"'".$this->mode_reglement_id."'":"null"); $sql.= ", ".($this->availability_id>0?"'".$this->availability_id."'":"null"); + $sql.= ", ".($this->demand_reason_id>0?"'".$this->demand_reason_id."'":"null"); $sql.= ", ".($this->date_livraison?"'".$this->db->idate($this->date_livraison)."'":"null"); $sql.= ", ".($this->fk_delivery_address>0?$this->fk_delivery_address:'NULL'); $sql.= ", ".($this->remise_absolue>0?$this->remise_absolue:'NULL'); @@ -854,6 +857,7 @@ class Commande extends CommonObject $this->cond_reglement_id = $object->cond_reglement_id; $this->mode_reglement_id = $object->mode_reglement_id; $this->availability_id = $object->availability_id; + $this->demand_reason_id = $object->demand_reason_id; $this->date_livraison = $object->date_livraison; $this->fk_delivery_address = $object->fk_delivery_address; $this->contact_id = $object->contactid; @@ -1142,7 +1146,7 @@ class Commande extends CommonObject if (empty($id) && empty($ref)) return -1; $sql = 'SELECT c.rowid, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_statut'; - $sql.= ', c.amount_ht, c.total_ht, c.total_ttc, c.tva as total_tva, c.localtax1 as total_localtax1, c.localtax2 as total_localtax2, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_availability'; + $sql.= ', c.amount_ht, c.total_ht, c.total_ttc, c.tva as total_tva, c.localtax1 as total_localtax1, c.localtax2 as total_localtax2, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_availability, c.fk_demand_reason'; $sql.= ', c.date_commande'; $sql.= ', c.date_livraison'; $sql.= ', c.fk_projet, c.remise_percent, c.remise, c.remise_absolue, c.source, c.facture as facturee'; @@ -1150,11 +1154,13 @@ class Commande extends CommonObject $sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle'; $sql.= ', cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle, cr.libelle_facture as cond_reglement_libelle_doc'; $sql.= ', ca.code as availability_code'; + $sql.= ', dr.code as demand_reason_code'; $sql.= ', el.fk_source'; $sql.= ' FROM '.MAIN_DB_PREFIX.'commande as c'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as cr ON (c.fk_cond_reglement = cr.rowid)'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON (c.fk_mode_reglement = p.id)'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_availability as ca ON (c.fk_availability = ca.rowid)'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_demand_reason as dr ON (c.fk_demand_reason = ca.rowid)'; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as el ON el.fk_target = c.rowid AND el.targettype = '".$this->element."'"; $sql.= " WHERE c.entity = ".$conf->entity; if ($ref) $sql.= " AND c.ref='".$ref."'"; @@ -1198,6 +1204,8 @@ class Commande extends CommonObject $this->cond_reglement_doc = $obj->cond_reglement_libelle_doc; $this->availability_id = $obj->fk_availability; $this->availability_code = $obj->availability_code; + $this->demand_reason_id = $obj->fk_demand_reason; + $this->demand_reason_code = $obj->demand_reason_code; $this->date_livraison = $this->db->jdate($obj->date_livraison); $this->fk_delivery_address = $obj->fk_adresse_livraison; $this->propale_id = $obj->fk_source; @@ -1810,6 +1818,34 @@ class Commande extends CommonObject } } + /** + * \brief Set source of demand + * \param user Objet utilisateur qui modifie + * \param delivery delai de livraison + * \return int <0 si ko, >0 si ok + */ + function set_demand_reason($user, $id) + { + if ($user->rights->commande->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande "; + $sql.= " SET fk_demand_reason = '".$id."'"; + $sql.= " WHERE rowid = ".$this->id; + + if ($this->db->query($sql)) + { + $this->fk_demand_reason = $id; + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("Commande::set_demand_reason Erreur SQL"); + return -1; + } + } + } + /** * \brief Return list of orders (eventuelly filtered on a user) into an array * \param brouillon 0=non brouillon, 1=brouillon @@ -1954,6 +1990,39 @@ class Commande extends CommonObject } } + /** + * \brief Change la source de la demande + * \param mode Id du nouveau mode + * \return int >0 si ok, <0 si ko + */ + function demand_reason($demand_reason_id) + { + dol_syslog('Commande::demand_reason('.$demand_reason_id.')'); + if ($this->statut >= 0) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande'; + $sql .= ' SET fk_demand_reason = '.$demand_reason_id; + $sql .= ' WHERE rowid='.$this->id; + if ( $this->db->query($sql) ) + { + $this->demand_reason_id = $demand_reason_id; + return 1; + } + else + { + dol_syslog('Commande::demand_reason Erreur '.$sql.' - '.$this->db->error(), LOG_ERR); + $this->error=$this->db->lasterror(); + return -1; + } + } + else + { + dol_syslog('Commande::demand_reason, etat facture incompatible', LOG_ERR); + $this->error='Etat commande incompatible '.$this->statut; + return -2; + } + } + /** * \brief Set customer ref * \param user User that make change @@ -2495,6 +2564,7 @@ class Commande extends CommonObject $this->cond_reglement_code = 'RECEP'; $this->mode_reglement_code = 'CHQ'; $this->availability_code = 'DSP'; + $this->demand_reason_code = 'SRC_00'; $this->note_public='This is a comment (public)'; $this->note='This is a comment (private)'; // Lines diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 610715674838891a27f6ab6948c08585e6b29597..78bc6b0cd95f87944aa536b338d57e253af003c6 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -208,6 +208,7 @@ if ($action == 'add' && $user->rights->commande->creer) $object->cond_reglement_id = $_POST['cond_reglement_id']; $object->mode_reglement_id = $_POST['mode_reglement_id']; $object->availability_id = $_POST['availability_id']; + $object->demand_reason_id = $_POST['demand_reason_id']; $object->date_livraison = $datelivraison; $object->fk_delivery_address = $_POST['fk_address']; $object->contactid = $_POST['contactidp']; @@ -463,6 +464,13 @@ if ($action == 'setavailability' && $user->rights->commande->creer) if ($result < 0) dol_print_error($db,$object->error); } +if ($action == 'setdemandreason' && $user->rights->commande->creer) +{ + $object->fetch($id); + $result=$object->demand_reason($_POST['demand_reason_id']); + if ($result < 0) dol_print_error($db,$object->error); +} + if ($action == 'setconditions' && $user->rights->commande->creer) { $object->fetch($id); @@ -1161,6 +1169,7 @@ if ($action == 'create' && $user->rights->commande->creer) $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1)); $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0)); $availability_id = (!empty($objectsrc->availability_id)?$objectsrc->availability_id:(!empty($soc->availability_id)?$soc->availability_id:0)); + $demand_reason_id = (!empty($objectsrc->demand_reason_id)?$objectsrc->demand_reason_id:(!empty($soc->demand_reason_id)?$soc->demand_reason_id:0)); $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0; @@ -1174,6 +1183,7 @@ if ($action == 'create' && $user->rights->commande->creer) $cond_reglement_id = $soc->cond_reglement_id; $mode_reglement_id = $soc->mode_reglement_id; $availability_id = $soc->availability_id; + $demand_reason_id = $soc->demand_reason_id; $remise_percent = $soc->remise_percent; $remise_absolue = 0; $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0; @@ -1265,6 +1275,11 @@ if ($action == 'create' && $user->rights->commande->creer) // delai de livraison print '<tr><td>'.$langs->trans('AvailabilityPeriod').'</td><td>'; $html->select_availability($soc->availability,'availability_id'); + print '</td></tr>'; + + // Source de commande + print '<tr><td>'.$langs->trans('Source').'</td><td>'; + $html->select_demand_reason($soc->demand_reason,'demand_reason_id'); print '</td></tr>'; // Projet @@ -1743,6 +1758,24 @@ else { $html->form_availability($_SERVER['PHP_SELF'].'?id='.$object->id,$object->availability_id,'none'); } + print '</td></tr>'; + + // Origine de la demande + print '<tr><td height="10">'; + print '<table class="nobordernopadding" width="100%"><tr><td>'; + print $langs->trans('Source'); + print '</td>'; + if ($_GET['action'] != 'editdemandreason' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdemandreason&id='.$object->id.'">'.img_edit($langs->trans('SetDemandReason'),1).'</a></td>'; + print '</tr></table>'; + print '</td><td colspan="2">'; + if ($_GET['action'] == 'editdemandreason') + { + $html->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'demand_reason_id'); + } + else + { + $html->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'none'); + } print '</td></tr>'; // Project diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 686b5a7b42aaf883ab70987322999e6c0d1610b9..27e4389d258be32441ec8653d3124ac297e0788e 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -49,7 +49,7 @@ class Form var $cache_types_paiements=array(); var $cache_conditions_paiements=array(); var $cache_availability=array(); - var $cache_source=array(); + var $cache_demand_reason=array(); var $tva_taux_value; var $tva_taux_libelle; @@ -1538,17 +1538,17 @@ class Form * \brief Charge dans cache la liste des origines de commande possibles * \return int Nb lignes chargees, 0 si deja chargees, <0 si ko */ - function load_cache_source() + function load_cache_demand_reason() { global $langs; - if (sizeof($this->cache_source)) return 0; // Cache deja charge + if (sizeof($this->cache_demand_reason)) return 0; // Cache deja charge $sql = "SELECT rowid, code, label"; - $sql.= " FROM ".MAIN_DB_PREFIX.'c_source'; + $sql.= " FROM ".MAIN_DB_PREFIX.'c_demand_reason'; $sql.= " WHERE active=1"; $sql.= " ORDER BY rowid"; - dol_syslog('Form::load_cache_source sql='.$sql,LOG_DEBUG); + dol_syslog('Form::load_cache_demand_reason sql='.$sql,LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { @@ -1559,9 +1559,9 @@ class Form $obj = $this->db->fetch_object($resql); // Si traduction existe, on l'utilise, sinon on prend le libelle par defaut - $label=($langs->trans("SourceType".$obj->code)!=("SourceType".$obj->code)?$langs->trans("SourceType".$obj->code):($obj->label!='-'?$obj->label:'')); - $this->cache_source[$obj->rowid]['code'] =$obj->code; - $this->cache_source[$obj->rowid]['label']=$label; + $label=($langs->trans("DemandReasonType".$obj->code)!=("DemandReasonType".$obj->code)?$langs->trans("DemandReasonType".$obj->code):($obj->label!='-'?$obj->label:'')); + $this->cache_demand_reason[$obj->rowid]['code'] =$obj->code; + $this->cache_demand_reason[$obj->rowid]['label']=$label; $i++; } return 1; @@ -1579,15 +1579,15 @@ class Form * \param filtertype Pour filtre * \param addempty Ajoute entree vide */ - function select_source($selected='',$htmlname='sourceid',$filtertype='',$addempty=0) + function select_demand_reason($selected='',$htmlname='demandreasonid',$filtertype='',$addempty=0) { global $langs,$user; - $this->load_cache_source(); + $this->load_cache_demand_reason(); print '<select class="flat" name="'.$htmlname.'">'; if ($addempty) print '<option value="0"> </option>'; - foreach($this->cache_source as $id => $arraysource) + foreach($this->cache_demand_reason as $id => $arraydemandreason) { if ($selected == $id) { @@ -1597,7 +1597,7 @@ class Form { print '<option value="'.$id.'">'; } - print $arraysource['label']; + print $arraydemandreason['label']; print '</option>'; } print '</select>'; @@ -2238,17 +2238,17 @@ class Form * \param htmlname Name of select html field * \param addempty Ajoute entree vide */ - function form_source($page, $selected='', $htmlname='source', $addempty=0) + function form_demand_reason($page, $selected='', $htmlname='demandreason', $addempty=0) { global $langs; if ($htmlname != "none") { print '<form method="post" action="'.$page.'">'; - print '<input type="hidden" name="action" value="setsource">'; + print '<input type="hidden" name="action" value="setdemandreason">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<table class="nobordernopadding" cellpadding="0" cellspacing="0">'; print '<tr><td>'; - $this->select_source($selected,$htmlname,-1,$addempty); + $this->select_demand_reason($selected,$htmlname,-1,$addempty); print '</td>'; print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>'; print '</tr></table></form>'; @@ -2257,8 +2257,8 @@ class Form { if ($selected) { - $this->load_cache_source(); - print $this->cache_source[$selected]['label']; + $this->load_cache_demand_reason(); + print $this->cache_demand_reason[$selected]['label']; } else { print " "; } diff --git a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql index 6b38dd36f2c1f0abfeb7a9297388a7ead573bbf4..a106b09e2021486eb8210e96ab4a619890a8b139 100755 --- a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql +++ b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql @@ -37,6 +37,7 @@ DELETE FROM llx_const WHERE __DECRYPT('name')__ = 'MAIN_MENUFRONT_BARRELEFT'; ALTER TABLE llx_facture_fourn ADD COLUMN ref_ext varchar(30) AFTER entity; ALTER TABLE llx_commande_fournisseur ADD COLUMN ref_ext varchar(30) AFTER entity; +ALTER TABLE llx_commande ADD COLUMN fk_demand_reason int(11) AFTER fk_availability; ALTER TABLE llx_facturedet DROP INDEX uk_fk_remise_except;