Merge pull request #1771 from frederic34/selectdelivery

Select Shipping Method in Propal, Order
This commit is contained in:
Laurent Destailleur 2014-07-30 11:31:22 +02:00
commit 2d97ad5177
10 changed files with 229 additions and 0 deletions

View File

@ -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 '</td></tr>';
// Shipping Method
if (! empty($conf->expedition->enabled)) {
print '<tr><td>' . $langs->trans('SendingMethod') . '</td><td colspan="2">';
print $form->selectShippingMethod($shipping_method_id, 'shipping_method_id', '', 1);
print '</td></tr>';
}
// Delivery date (or manufacturing)
print '<tr><td>' . $langs->trans("DeliveryDate") . '</td>';
print '<td colspan="2">';
@ -1851,6 +1866,25 @@ if ($action == 'create') {
print '</td>';
print '</tr>';
// Shipping Method
if (! empty($conf->expedition->enabled)) {
print '<tr><td>';
print '<table width="100%" class="nobordernopadding"><tr><td>';
print $langs->trans('SendingMethod');
print '</td>';
if ($action != 'editshippingmethod' && $user->rights->propal->creer)
print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editshippingmethod&amp;id='.$object->id.'">'.img_edit($langs->trans('SetShippingMode'),1).'</a></td>';
print '</tr></table>';
print '</td><td colspan="3">';
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 '</td>';
print '</tr>';
}
// Origin of demand
print '<tr><td>';
print '<table class="nobordernopadding" width="100%"><tr><td>';

View File

@ -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;

View File

@ -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);

View File

@ -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 '</td></tr>';
// Shipping Method
if (! empty($conf->expedition->enabled)) {
print '<tr><td>' . $langs->trans('SendingMethod') . '</td><td colspan="2">';
print $form->selectShippingMethod($shipping_method_id, 'shipping_method_id', '', 1);
print '</td></tr>';
}
// What trigger creation
print '<tr><td>' . $langs->trans('Source') . '</td><td colspan="2">';
$form->selectInputReason($demand_reason_id, 'demand_reason_id', '', 1);
@ -1975,6 +1991,25 @@ if ($action == 'create' && $user->rights->commande->creer) {
print '</td>';
print '</tr>';
// Shipping Method
if (! empty($conf->expedition->enabled)) {
print '<tr><td height="10">';
print '<table width="100%" class="nobordernopadding"><tr><td>';
print $langs->trans('SendingMethod');
print '</td>';
if ($action != 'editshippingmethod' && $user->rights->commande->creer)
print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editshippingmethod&amp;id='.$object->id.'">'.img_edit($langs->trans('SetShippingMode'),1).'</a></td>';
print '</tr></table>';
print '</td><td colspan="3">';
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 '</td>';
print '</tr>';
}
// Terms of payment
print '<tr><td height="10">';
print '<table class="nobordernopadding" width="100%"><tr><td>';

View File

@ -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
*

View File

@ -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 '<select id="select'.$htmlname.'" class="flat selectshippingmethod" name="'.$htmlname.'"'.($moreattrib?' '.$moreattrib:'').'>';
if ($useempty == 1 || ($useempty == 2 && $num > 1)) {
print '<option value="-1">&nbsp;</option>';
}
while ($i < $num) {
$obj = $this->db->fetch_object($result);
if ($selected == $obj->rowid) {
print '<option value="'.$obj->rowid.'" selected="selected">';
} else {
print '<option value="'.$obj->rowid.'">';
}
print $langs->trans("SendingMethod".strtoupper($obj->code));
print '</option>';
$i++;
}
print "</select>";
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 '<form method="POST" action="'.$page.'">';
print '<input type="hidden" name="action" value="setshippingmethod">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
print '<tr><td>';
$this->selectShippingMethod($selected, $htmlname, '', $addempty);
print '</td>';
print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
print '</tr></table></form>';
} else {
if ($selected) {
$code=$langs->getLabelFromKey($db, $selected, 'c_shipment_mode', 'rowid', 'code');
print $langs->trans("SendingMethod".strtoupper($code));
} else {
print "&nbsp;";
}
}
}
/**
* Return a HTML select list of bank accounts
*

View File

@ -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 '</td>';
print '</tr>';
// Shipping Method
print '<tr><td>';
print '<table width="100%" class="nobordernopadding"><tr><td>';
print $langs->trans('SendingMethod');
print '</td>';
if ($action != 'editshippingmethod' && $user->rights->expedition->creer)
print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editshippingmethod&amp;id='.$commande->id.'">'.img_edit($langs->trans('SetShippingMode'),1).'</a></td>';
print '</tr></table>';
print '</td><td colspan="3">';
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 '</td>';
print '</tr>';
// Terms of payment
print '<tr><td height="10">';
print '<table class="nobordernopadding" width="100%"><tr><td>';
@ -607,6 +631,7 @@ if ($id > 0 || ! empty($ref))
print '<form method="GET" action="'.DOL_URL_ROOT.'/expedition/fiche.php">';
print '<input type="hidden" name="action" value="create">';
print '<input type="hidden" name="id" value="'.$commande->id.'">';
print '<input type="hidden" name="shipping_method_id" value="'.$commande->shipping_method_id.'">';
print '<input type="hidden" name="origin" value="commande">';
print '<input type="hidden" name="origin_id" value="'.$commande->id.'">';
print '<table class="border" width="100%">';

View File

@ -123,6 +123,8 @@ create table llx_accounting_fiscalyear
ALTER TABLE llx_contrat ADD COLUMN ref_ext varchar(30) after ref;
ALTER TABLE llx_propal ADD COLUMN fk_shipping_method integer AFTER date_livraison;
ALTER TABLE llx_commande ADD COLUMN fk_shipping_method integer AFTER date_livraison;
ALTER TABLE llx_adherents MODIFY COLUMN societe VARCHAR(60);

View File

@ -61,6 +61,7 @@ create table llx_commande
fk_mode_reglement integer, -- mode de reglement
date_livraison date default NULL,
fk_shipping_method integer, -- shipping method id
fk_availability integer NULL,
fk_input_reason integer,
fk_delivery_address integer, -- delivery address (deprecated)

View File

@ -61,6 +61,7 @@ create table llx_propal
note_public text,
model_pdf varchar(255),
date_livraison date DEFAULT NULL, -- delivery date
fk_shipping_method integer, -- shipping method id
fk_availability integer NULL,
fk_input_reason integer,
import_key varchar(14),