diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index 5174568f5ae..1753a82f38c 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -51,6 +51,7 @@ $langs->load('bills');
$langs->load('orders');
$langs->load('products');
$langs->load("deliveries");
+$langs->load('sendings');
if (! empty($conf->margin->enabled))
$langs->load('margins');
@@ -251,6 +252,7 @@ else if ($action == 'add' && $user->rights->propal->creer) {
$object->availability_id = GETPOST('availability_id');
$object->demand_reason_id = GETPOST('demand_reason_id');
$object->fk_delivery_address = GETPOST('fk_address');
+ $object->shipping_method_id = GETPOST('shipping_method_id', 'int');
$object->duree_validite = $duration;
$object->cond_reglement_id = GETPOST('cond_reglement_id');
$object->mode_reglement_id = GETPOST('mode_reglement_id');
@@ -277,6 +279,7 @@ else if ($action == 'add' && $user->rights->propal->creer) {
$object->availability_id = GETPOST('availability_id');
$object->demand_reason_id = GETPOST('demand_reason_id');
$object->fk_delivery_address = GETPOST('fk_address');
+ $object->shipping_method_id = GETPOST('shipping_method_id', 'int');
$object->duree_validite = GETPOST('duree_validite');
$object->cond_reglement_id = GETPOST('cond_reglement_id');
$object->mode_reglement_id = GETPOST('mode_reglement_id');
@@ -1110,6 +1113,11 @@ else if ($action == 'setbankaccount' && $user->rights->propal->creer) {
$result=$object->setBankAccount(GETPOST('fk_account', 'int'));
}
+// shipping method
+else if ($action == 'setshippingmethod' && $user->rights->propal->creer) {
+ $result=$object->setShippingMethod(GETPOST('shipping_method_id', 'int'));
+}
+
/*
* Ordonnancement des lignes
*/
@@ -1389,6 +1397,13 @@ if ($action == 'create') {
$form->selectAvailabilityDelay('', 'availability_id', '', 1);
print '';
+ // Shipping Method
+ if (! empty($conf->expedition->enabled)) {
+ print '
';
print '| ';
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index 5a70aa99cbc..1b7f50b8339 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -92,6 +92,7 @@ class Propal extends CommonObject
var $fk_address;
var $address_type;
var $address;
+ var $shipping_method_id;
var $availability_id;
var $availability_code;
var $demand_reason_id;
@@ -718,6 +719,7 @@ class Propal extends CommonObject
$sql.= ", fk_account";
$sql.= ", ref_client";
$sql.= ", date_livraison";
+ $sql.= ", fk_shipping_method";
$sql.= ", fk_availability";
$sql.= ", fk_input_reason";
$sql.= ", fk_projet";
@@ -744,6 +746,7 @@ class Propal extends CommonObject
$sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL');
$sql.= ", '".$this->db->escape($this->ref_client)."'";
$sql.= ", ".($this->date_livraison!=''?"'".$this->db->idate($this->date_livraison)."'":"null");
+ $sql.= ", ".($this->shipping_method_id>0?$this->shipping_method_id:'NULL');
$sql.= ", ".$this->availability_id;
$sql.= ", ".$this->demand_reason_id;
$sql.= ", ".($this->fk_project?$this->fk_project:"null");
@@ -1053,6 +1056,7 @@ class Propal extends CommonObject
$sql.= ", p.fk_cond_reglement";
$sql.= ", p.fk_mode_reglement";
$sql.= ', p.fk_account';
+ $sql.= ", p.fk_shipping_method";
$sql.= ", c.label as statut_label";
$sql.= ", ca.code as availability_code, ca.label as availability";
$sql.= ", dr.code as demand_reason_code, dr.label as demand_reason";
@@ -1106,6 +1110,7 @@ class Propal extends CommonObject
$this->datep = $this->db->jdate($obj->dp); // deprecated
$this->fin_validite = $this->db->jdate($obj->dfv);
$this->date_livraison = $this->db->jdate($obj->date_livraison);
+ $this->shipping_method_id = ($obj->fk_shipping_method>0)?$obj->fk_shipping_method:null;
$this->availability_id = $obj->fk_availability;
$this->availability_code = $obj->availability_code;
$this->availability = $obj->availability;
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 6c1b5eeed90..71419dfc1a3 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -72,6 +72,7 @@ class Commande extends CommonOrder
var $date; // Date commande
var $date_commande; // Date commande (deprecated)
var $date_livraison; // Date livraison souhaitee
+ var $shipping_method_id;
var $fk_remise_except;
var $remise_percent;
var $total_ht; // Total net of tax
@@ -656,6 +657,7 @@ class Commande extends CommonOrder
$sql = "INSERT INTO ".MAIN_DB_PREFIX."commande (";
$sql.= " ref, fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source, note_private, note_public, ref_client, ref_int";
$sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_account, fk_availability, fk_input_reason, date_livraison, fk_delivery_address";
+ $sql.= ", fk_shipping_method";
$sql.= ", remise_absolue, remise_percent";
$sql.= ", entity";
$sql.= ")";
@@ -675,6 +677,7 @@ class Commande extends CommonOrder
$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->shipping_method_id>0?$this->shipping_method_id:'NULL');
$sql.= ", ".($this->remise_absolue>0?$this->remise_absolue:'NULL');
$sql.= ", ".($this->remise_percent>0?$this->remise_percent:0);
$sql.= ", ".$conf->entity;
@@ -984,6 +987,7 @@ class Commande extends CommonOrder
$this->availability_id = $object->availability_id;
$this->demand_reason_id = $object->demand_reason_id;
$this->date_livraison = $object->date_livraison;
+ $this->shipping_method_id = $object->shipping_method_id;
$this->fk_delivery_address = $object->fk_delivery_address;
$this->contact_id = $object->contactid;
$this->ref_client = $object->ref_client;
@@ -1327,6 +1331,7 @@ class Commande extends CommonOrder
$sql.= ', c.fk_account';
$sql.= ', c.date_commande';
$sql.= ', c.date_livraison';
+ $sql.= ', c.fk_shipping_method';
$sql.= ', c.fk_projet, c.remise_percent, c.remise, c.remise_absolue, c.source, c.facture as billed';
$sql.= ', c.note_private, c.note_public, c.ref_client, c.ref_ext, c.ref_int, c.model_pdf, c.fk_delivery_address, c.extraparams';
$sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
@@ -1390,6 +1395,7 @@ class Commande extends CommonOrder
$this->demand_reason_id = $obj->fk_input_reason;
$this->demand_reason_code = $obj->demand_reason_code;
$this->date_livraison = $this->db->jdate($obj->date_livraison);
+ $this->shipping_method_id = ($obj->fk_shipping_method>0)?$obj->fk_shipping_method:null;
$this->fk_delivery_address = $obj->fk_delivery_address;
$this->extraparams = (array) json_decode($obj->extraparams, true);
diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php
index 3cebef8567c..73088fb5ba9 100644
--- a/htdocs/commande/fiche.php
+++ b/htdocs/commande/fiche.php
@@ -52,6 +52,7 @@ $langs->load('companies');
$langs->load('bills');
$langs->load('propal');
$langs->load('deliveries');
+$langs->load('sendings');
$langs->load('products');
if (! empty($conf->margin->enabled))
$langs->load('margins');
@@ -229,6 +230,7 @@ else if ($action == 'add' && $user->rights->commande->creer) {
$object->availability_id = GETPOST('availability_id');
$object->demand_reason_id = GETPOST('demand_reason_id');
$object->date_livraison = $datelivraison;
+ $object->shipping_method_id = GETPOST('shipping_method_id', 'int');
$object->fk_delivery_address = GETPOST('fk_address');
$object->contactid = GETPOST('contactidp');
@@ -491,6 +493,11 @@ else if ($action == 'setbankaccount' && $user->rights->commande->creer) {
$result=$object->setBankAccount(GETPOST('fk_account', 'int'));
}
+// shipping method
+else if ($action == 'setshippingmethod' && $user->rights->commande->creer) {
+ $result = $object->setShippingMethod(GETPOST('shipping_method_id', 'int'));
+}
+
else if ($action == 'setremisepercent' && $user->rights->commande->creer) {
$result = $object->set_remise($user, GETPOST('remise_percent'));
}
@@ -1396,6 +1403,7 @@ if ($action == 'create' && $user->rights->commande->creer) {
$mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0));
$fk_account = (! empty($objectsrc->fk_account)?$objectsrc->fk_account:(! empty($soc->fk_account)?$soc->fk_account:0));
$availability_id = (!empty($objectsrc->availability_id)?$objectsrc->availability_id:(!empty($soc->availability_id)?$soc->availability_id:0));
+ $shipping_method_id = (! empty($objectsrc->shipping_method_id)?$objectsrc->shipping_method_id:(! empty($soc->shipping_method_id)?$soc->shipping_method_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));
@@ -1416,6 +1424,7 @@ if ($action == 'create' && $user->rights->commande->creer) {
$mode_reglement_id = $soc->mode_reglement_id;
$fk_account = $soc->fk_account;
$availability_id = $soc->availability_id;
+ $shipping_method_id = $soc->shipping_method_id;
$demand_reason_id = $soc->demand_reason_id;
$remise_percent = $soc->remise_percent;
$remise_absolue = 0;
@@ -1520,6 +1529,13 @@ if ($action == 'create' && $user->rights->commande->creer) {
$form->selectAvailabilityDelay($availability_id, 'availability_id', '', 1);
print ' | ';
+ // Shipping Method
+ if (! empty($conf->expedition->enabled)) {
+ print '| ' . $langs->trans('SendingMethod') . ' | ';
+ print $form->selectShippingMethod($shipping_method_id, 'shipping_method_id', '', 1);
+ print ' | ';
+ }
+
// What trigger creation
print '| ' . $langs->trans('Source') . ' | ';
$form->selectInputReason($demand_reason_id, 'demand_reason_id', '', 1);
@@ -1975,6 +1991,25 @@ if ($action == 'create' && $user->rights->commande->creer) {
print ' | ';
print ' ';
+ // Shipping Method
+ if (! empty($conf->expedition->enabled)) {
+ print '| ';
+ print '';
+ print ' | ';
+ if ($action == 'editshippingmethod') {
+ $form->formSelectShippingMethod($_SERVER['PHP_SELF'].'?id='.$object->id, $object->shipping_method_id, 'shipping_method_id', 1);
+ } else {
+ $form->formSelectShippingMethod($_SERVER['PHP_SELF'].'?id='.$object->id, $object->shipping_method_id, 'none');
+ }
+ print ' | ';
+ print ' ';
+ }
+
// Terms of payment
print '';
print '| ';
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 307164556c7..73dc9211000 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -1042,6 +1042,37 @@ abstract class CommonObject
}
}
+
+ /**
+ * Change the shipping method
+ *
+ * @param int $shipping_method_id Id of shipping method
+ * @return int 1 if OK, 0 if KO
+ */
+ function setShippingMethod($shipping_method_id)
+ {
+ if (! $this->table_element) {
+ dol_syslog(get_class($this)."::setShippingMethod was called on objet with property table_element not defined",LOG_ERR);
+ return -1;
+ }
+ if ($shipping_method_id<0) $shipping_method_id='NULL';
+ dol_syslog(get_class($this).'::setShippingMethod('.$shipping_method_id.')');
+
+ $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
+ $sql.= " SET fk_shipping_method = ".$shipping_method_id;
+ $sql.= " WHERE rowid=".$this->id;
+
+ if ($this->db->query($sql)) {
+ $this->shipping_method_id = ($shipping_method_id=='NULL')?null:$shipping_method_id;
+ return 1;
+ } else {
+ dol_syslog(get_class($this).'::setShippingMethod Error ', LOG_DEBUG);
+ $this->error=$this->db->error();
+ return 0;
+ }
+ }
+
+
/**
* Set last model used by doc generator
*
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index ebe0f143a93..2180de2893d 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -2420,6 +2420,95 @@ class Form
return $return;
}
+ /**
+ * Return a HTML select list of shipping mode
+ *
+ * @param string $selected Id shipping mode pre-selected
+ * @param string $htmlname Name of select zone
+ * @param string $filtre To filter list
+ * @param int $useempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries.
+ * @param string $moreattrib To add more attribute on select
+ * @return void
+ */
+ function selectShippingMethod($selected='',$htmlname='shipping_method_id',$filtre='',$useempty=0,$moreattrib='')
+ {
+ global $langs, $conf, $user;
+
+ $langs->load("admin");
+ $langs->load("deliveries");
+
+ $sql = "SELECT rowid, code, libelle";
+ $sql.= " FROM ".MAIN_DB_PREFIX."c_shipment_mode";
+ $sql.= " WHERE active = 1";
+ if ($filtre) $sql.=" AND ".$filtre;
+ $sql.= " ORDER BY libelle ASC";
+
+ dol_syslog(get_class($this)."::selectShippingMode", LOG_DEBUG);
+ $result = $this->db->query($sql);
+ if ($result) {
+ $num = $this->db->num_rows($result);
+ $i = 0;
+ if ($num) {
+ print '";
+ if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
+ } else {
+ print $langs->trans("NoShippingMethodDefined");
+ }
+ } else {
+ dol_print_error($this->db);
+ }
+ }
+
+ /**
+ * Display form to select shipping mode
+ *
+ * @param string $page Page
+ * @param int $selected Id of shipping mode
+ * @param string $htmlname Name of select html field
+ * @param int $addempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries.
+ * @return void
+ */
+ function formSelectShippingMethod($page, $selected='', $htmlname='shipping_method_id', $addempty=0)
+ {
+ global $langs, $db;
+
+ $langs->load("deliveries");
+
+ if ($htmlname != "none") {
+ print '';
+ } else {
+ if ($selected) {
+ $code=$langs->getLabelFromKey($db, $selected, 'c_shipment_mode', 'rowid', 'code');
+ print $langs->trans("SendingMethod".strtoupper($code));
+ } else {
+ print " ";
+ }
+ }
+ }
+
/**
* Return a HTML select list of bank accounts
*
diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php
index d44a7d5f4a4..0ad306ef8a3 100644
--- a/htdocs/expedition/shipment.php
+++ b/htdocs/expedition/shipment.php
@@ -116,6 +116,13 @@ if ($action == 'setconditions' && $user->rights->commande->creer)
if ($result < 0) dol_print_error($db,$commande->error);
}
+// shipping method
+if ($action == 'setshippingmethod' && $user->rights->commande->creer) {
+ $commande = new Commande($db);
+ $commande->fetch($id);
+ $result=$commande->setShippingMethod(GETPOST('shipping_method_id', 'int'));
+}
+
/*
@@ -262,6 +269,23 @@ if ($id > 0 || ! empty($ref))
print ' | ';
print ' ';
+ // Shipping Method
+ print '| ';
+ print '';
+ print ' | ';
+ if ($action == 'editshippingmethod') {
+ $form->formSelectShippingMethod($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->shipping_method_id, 'shipping_method_id', 1);
+ } else {
+ $form->formSelectShippingMethod($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->shipping_method_id, 'none');
+ }
+ print ' | ';
+ print ' ';
+
// Terms of payment
print '';
print '| ';
@@ -607,6 +631,7 @@ if ($id > 0 || ! empty($ref))
print ' |
|
|
|