diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index 2a6d12bbec00f86593a3f393ce0fca8ab245f89c..a8b0325dc5d8cc8c08957546280c7d27677ebd0a 100644 --- a/htdocs/admin/expedition.php +++ b/htdocs/admin/expedition.php @@ -40,6 +40,9 @@ if (!$user->admin) accessforbidden(); $action=GETPOST('action','alpha'); $value=GETPOST('value','alpha'); +$label = GETPOST('label','alpha'); +$scandir = GETPOST('scandir','alpha'); +$type='shipping'; if (empty($conf->global->EXPEDITION_ADDON_NUMBER)) { @@ -50,6 +53,59 @@ if (empty($conf->global->EXPEDITION_ADDON_NUMBER)) /* * Actions */ + if ($action == 'updateMask') +{ + $maskconst=GETPOST('maskconstexpedition','alpha'); + $maskvalue=GETPOST('maskexpedition','alpha'); + if ($maskconst) $res = dolibarr_set_const($db,$maskconst,$maskvalue,'chaine',0,'',$conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; + } + else + { + $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; + } +} + +if ($action == 'set_SHIPPING_FREE_TEXT') +{ + $freetext=GETPOST('SHIPPING_FREE_TEXT','alpha'); + $res = dolibarr_set_const($db, "SHIPPING_FREE_TEXT",$freetext,'chaine',0,'',$conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; + } + else + { + $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; + } +} + +if ($action == 'set_SHIPPING_DRAFT_WATERMARK') +{ + $draft=GETPOST('SHIPPING_DRAFT_WATERMARK','alpha'); + + $res = dolibarr_set_const($db, "SHIPPING_DRAFT_WATERMARK",trim($draft),'chaine',0,'',$conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; + } + else + { + $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; + } +} + if ($action == 'specimen') { $modele=GETPOST('module','alpha'); @@ -84,8 +140,8 @@ if ($action == 'specimen') } else { - $mesg='<font class="error">'.$module->error.'</font>'; - dol_syslog($module->error, LOG_ERR); + $mesg='<font class="error">'.$obj->error.'</font>'; + dol_syslog($obj->error, LOG_ERR); } } else @@ -98,30 +154,13 @@ if ($action == 'specimen') // Activate a model if ($action == 'set') { - $label = GETPOST('label','alpha'); - $scandir = GETPOST('scandir','alpha'); - - $type='shipping'; - $sql = "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity, libelle, description)"; - $sql.= " VALUES ('".$db->escape($value)."','".$type."',".$conf->entity.", "; - $sql.= ($label?"'".$db->escape($label)."'":'null').", "; - $sql.= (! empty($scandir)?"'".$db->escape($scandir)."'":"null"); - $sql.= ")"; - if ($db->query($sql)) - { - - } + $ret = addDocumentModel($value, $type, $label, $scandir); } if ($action == 'del') { - $type='shipping'; - $sql = "DELETE FROM ".MAIN_DB_PREFIX."document_model"; - $sql.= " WHERE nom = '".$db->escape($value)."'"; - $sql.= " AND type = '".$type."'"; - $sql.= " AND entity = ".$conf->entity; - - if ($db->query($sql)) + $ret = delDocumentModel($value, $type); + if ($ret > 0) { if ($conf->global->EXPEDITION_ADDON_PDF == "$value") dolibarr_del_const($db, 'EXPEDITION_ADDON_PDF',$conf->entity); } @@ -130,37 +169,18 @@ if ($action == 'del') // Set default model if ($action == 'setdoc') { - $label = GETPOST('label','alpha'); - $scandir = GETPOST('scandir','alpha'); - - $db->begin(); - if (dolibarr_set_const($db, "EXPEDITION_ADDON_PDF",$value,'chaine',0,'',$conf->entity)) { + // La constante qui a ete lue en avant du nouveau set + // on passe donc par une variable pour avoir un affichage coherent $conf->global->EXPEDITION_ADDON_PDF = $value; } // On active le modele - $type='shipping'; - $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."document_model"; - $sql_del.= " WHERE nom = '".$db->escape($value)."'"; - $sql_del.= " AND type = '".$type."'"; - $sql_del.= " AND entity = ".$conf->entity; - $result1=$db->query($sql_del); - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity, libelle, description)"; - $sql.= " VALUES ('".$db->escape($value)."', '".$type."', ".$conf->entity.", "; - $sql.= ($label?"'".$db->escape($label)."'":'null').", "; - $sql.= (! empty($scandir)?"'".$db->escape($scandir)."'":"null"); - $sql.= ")"; - $result2=$db->query($sql); - if ($result1 && $result2) - { - $db->commit(); - } - else + $ret = delDocumentModel($value, $type); + if ($ret > 0) { - $db->rollback(); + $ret = addDocumentModel($value, $type, $label, $scandir); } } @@ -240,68 +260,15 @@ if ($action == 'setmod') // TODO Verifier si module numerotation choisi peut etre active // par appel methode canBeActivated - $module=GETPOST('module','alpha'); - - dolibarr_set_const($db, "EXPEDITION_ADDON",$module,'chaine',0,'',$conf->entity); + dolibarr_set_const($db, "EXPEDITION_ADDON",$value,'chaine',0,'',$conf->entity); } -if ($action == 'updateMask') -{ - $maskconst=GETPOST('maskconstexpedition','alpha'); - $maskvalue=GETPOST('maskexpedition','alpha'); - if ($maskconst) $res = dolibarr_set_const($db,$maskconst,$maskvalue,'chaine',0,'',$conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; - } - else - { - $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; - } -} - if ($action == 'setmodel') { dolibarr_set_const($db, "EXPEDITION_ADDON_NUMBER",$value,'chaine',0,'',$conf->entity); } -if ($action == 'set_SHIPPING_DRAFT_WATERMARK') -{ - $draft=GETPOST('SHIPPING_DRAFT_WATERMARK','alpha'); - $res = dolibarr_set_const($db, "SHIPPING_DRAFT_WATERMARK",trim($draft),'chaine',0,'',$conf->entity); - - if (! $res > 0) $error++; - - if (! $error) - { - $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; - } - else - { - $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; - } -} - -if ($action == 'set_SHIPPING_FREE_TEXT') -{ - $free=GETPOST('SHIPPING_FREE_TEXT','alpha'); - $res = dolibarr_set_const($db, "SHIPPING_FREE_TEXT",$free,'chaine',0,'',$conf->entity); - if (! $res > 0) $error++; - - if (! $error) - { - $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; - } - else - { - $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; - } -} - /* * View diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 96525557ced9db9ee67b885217f84f3195613a3e..e186337fcc01b3c1bbd630653f45ae17fa438aac 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -54,6 +54,7 @@ class CommandeFournisseur extends Commande var $fourn_id; var $date; var $date_commande; + var $date_livraison; // Date livraison souhaitee var $total_ht; var $total_tva; var $total_localtax1; // Total Local tax 1 @@ -112,7 +113,7 @@ class CommandeFournisseur extends Commande $sql = "SELECT c.rowid, c.ref, c.date_creation, c.fk_soc, c.fk_user_author, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva,"; $sql.= " c.localtax1, c.localtax2, "; - $sql.= " c.date_commande as date_commande, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_methode_commande,"; + $sql.= " c.date_commande as date_commande, c.date_livraison as date_livraison, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_methode_commande,"; $sql.= " c.note as note_private, c.note_public, c.model_pdf, c.extraparams,"; $sql.= " cm.libelle as methode_commande,"; $sql.= " cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle,"; @@ -150,6 +151,7 @@ class CommandeFournisseur extends Commande $this->total_ttc = $obj->total_ttc; $this->date_commande = $this->db->jdate($obj->date_commande); // date a laquelle la commande a ete transmise $this->date = $this->db->jdate($obj->date_creation); + $this->date_livraison = $this->db->jdate($obj->date_livraison); $this->remise_percent = $obj->remise_percent; $this->methode_commande_id = $obj->fk_methode_commande; $this->methode_commande = $obj->methode_commande; @@ -888,6 +890,7 @@ class CommandeFournisseur extends Commande $sql.= ", entity"; $sql.= ", fk_soc"; $sql.= ", date_creation"; + $sql.= ", date_livraison"; $sql.= ", fk_user_author"; $sql.= ", fk_statut"; $sql.= ", source"; @@ -899,6 +902,7 @@ class CommandeFournisseur extends Commande $sql.= ", ".$conf->entity; $sql.= ", ".$this->socid; $sql.= ", ".$this->db->idate($now); + $sql.= ", ".$this->db->idate($now); $sql.= ", ".$user->id; $sql.= ", 0"; $sql.= ", 0"; @@ -1367,6 +1371,41 @@ class CommandeFournisseur extends Commande return $result ; } + /** + * Set the planned delivery date + * + * @param User $user Objet utilisateur qui modifie + * @param timestamp $date_livraison Date de livraison + * @return int <0 si ko, >0 si ok + */ + function set_date_livraison($user, $date_livraison) + { + if ($user->rights->fournisseur->commande->creer) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur"; + $sql.= " SET date_livraison = ".($date_livraison ? "'".$this->db->idate($date_livraison)."'" : 'null'); + $sql.= " WHERE rowid = ".$this->id; + + dol_syslog("CommandeFournisseur::set_date_livraison sql=".$sql,LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + $this->date_livraison = $date_livraison; + return 1; + } + else + { + $this->error=$this->db->error(); + dol_syslog("CommandeFournisseur::set_date_livraison ".$this->error,LOG_ERR); + return -1; + } + } + else + { + return -2; + } + } + /** * Update a supplier order from a customer order * @@ -1830,4 +1869,4 @@ class CommandeFournisseurLigne extends OrderLine } } -?> +?> \ No newline at end of file diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php index 21f93a08fcc7f72c329c5eeea3754efda431ed0a..caf83271bbd7ebd22fb77469ddacff78e39564cf 100644 --- a/htdocs/fourn/commande/fiche.php +++ b/htdocs/fourn/commande/fiche.php @@ -48,12 +48,12 @@ $langs->load('products'); $langs->load('stocks'); $id = GETPOST('id','int'); -$ref = GETPOST("ref"); -$action = GETPOST("action"); -$confirm = GETPOST("confirm"); -$comclientid = GETPOST("comid"); +$ref = GETPOST('ref','alpha'); +$action = GETPOST('action','alpha'); +$confirm = GETPOST('confirm','alpha'); +$comclientid = GETPOST('comid','int'); $socid = GETPOST('socid','int'); -$projectid = GETPOST("projectid"); +$projectid = GETPOST('projectid','int'); // Security check if ($user->societe_id) $socid=$user->societe_id; @@ -87,6 +87,19 @@ else if ($action == 'setmode' && $user->rights->fournisseur->commande->creer) $result = $object->setPaymentMethods(GETPOST('mode_reglement_id','int')); } +// date de livraison +if ($action == 'setdate_livraison' && $user->rights->fournisseur->commande->creer) +{ + $datelivraison=dol_mktime(0, 0, 0, GETPOST('liv_month','int'), GETPOST('liv_day','int'),GETPOST('liv_year','int')); + + $object->fetch($id); + $result=$object->set_date_livraison($user,$datelivraison); + if ($result < 0) + { + $mesg='<div class="error">'.$object->error.'</div>'; + } +} + // Set project else if ($action == 'classin' && $user->rights->fournisseur->commande->creer) { @@ -100,18 +113,18 @@ else if ($action == 'setremisepercent' && $user->rights->fournisseur->commande-> $result = $object->set_remise($user, $_POST['remise_percent']); } -else if ($action == 'setnote_public' && $user->rights->propale->creer) -{ - $object->fetch($id); - $result=$object->update_note_public(dol_html_entity_decode(GETPOST('note_public'), ENT_QUOTES)); - if ($result < 0) dol_print_error($db,$object->error); -} - -else if ($action == 'setnote' && $user->rights->propale->creer) -{ - $object->fetch($id); - $result=$object->update_note(dol_html_entity_decode(GETPOST('note'), ENT_QUOTES)); - if ($result < 0) dol_print_error($db,$object->error); +else if ($action == 'setnote_public' && $user->rights->propale->creer) +{ + $object->fetch($id); + $result=$object->update_note_public(dol_html_entity_decode(GETPOST('note_public'), ENT_QUOTES)); + if ($result < 0) dol_print_error($db,$object->error); +} + +else if ($action == 'setnote' && $user->rights->propale->creer) +{ + $object->fetch($id); + $result=$object->update_note(dol_html_entity_decode(GETPOST('note'), ENT_QUOTES)); + if ($result < 0) dol_print_error($db,$object->error); } else if ($action == 'reopen' && $user->rights->fournisseur->commande->approuver) @@ -812,64 +825,64 @@ if ($action == 'send' && ! $_POST['addfile'] && ! $_POST['removedfile'] && ! $_P } } -if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) +if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) { - if ($action == 'addcontact' && $user->rights->fournisseur->commande->creer) - { - $result = $object->fetch($id); - - if ($result > 0 && $id > 0) + if ($action == 'addcontact' && $user->rights->fournisseur->commande->creer) + { + $result = $object->fetch($id); + + if ($result > 0 && $id > 0) + { + $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); + $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); + } + + if ($result >= 0) + { + Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); + exit; + } + else + { + if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS') + { + $langs->load("errors"); + $mesg = '<div class="error">'.$langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType").'</div>'; + } + else + { + $mesg = '<div class="error">'.$object->error.'</div>'; + } + } + } + + // bascule du statut d'un contact + else if ($action == 'swapstatut' && $user->rights->fournisseur->commande->creer) + { + if ($object->fetch($id)) + { + $result=$object->swapContactStatus(GETPOST('ligne')); + } + else + { + dol_print_error($db); + } + } + + // Efface un contact + else if ($action == 'deletecontact' && $user->rights->fournisseur->commande->creer) + { + $object->fetch($id); + $result = $object->delete_contact($_GET["lineid"]); + + if ($result >= 0) { - $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); - $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); - } - - if ($result >= 0) - { - Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); - exit; - } - else - { - if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS') - { - $langs->load("errors"); - $mesg = '<div class="error">'.$langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType").'</div>'; - } - else - { - $mesg = '<div class="error">'.$object->error.'</div>'; - } - } - } - - // bascule du statut d'un contact - else if ($action == 'swapstatut' && $user->rights->fournisseur->commande->creer) - { - if ($object->fetch($id)) - { - $result=$object->swapContactStatus(GETPOST('ligne')); - } - else - { - dol_print_error($db); - } - } - - // Efface un contact - else if ($action == 'deletecontact' && $user->rights->fournisseur->commande->creer) - { - $object->fetch($id); - $result = $object->delete_contact($_GET["lineid"]); - - if ($result >= 0) - { - Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); - exit; - } - else { - dol_print_error($db); - } + Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); + exit; + } + else { + dol_print_error($db); + } } } @@ -1102,6 +1115,30 @@ if ($id > 0 || ! empty($ref)) } print '</td></tr>'; + // Delivery date planed + print '<tr><td height="10">'; + print '<table class="nobordernopadding" width="100%"><tr><td>'; + print $langs->trans('DateDeliveryPlanned'); + print '</td>'; + + if ($action != 'editdate_livraison') print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdate_livraison&id='.$object->id.'">'.img_edit($langs->trans('SetDeliveryDate'),1).'</a></td>'; + print '</tr></table>'; + print '</td><td colspan="2">'; + if ($action == 'editdate_livraison') + { + print '<form name="setdate_livraison" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="setdate_livraison">'; + $form->select_date($object->date_livraison?$object->date_livraison:-1,'liv_','','','',"setdate_livraison"); + print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">'; + print '</form>'; + } + else + { + print $object->date_livraison ? dol_print_date($object->date_livraison,'daytext') : ' '; + } + print '</td>'; + // Project if ($conf->projet->enabled) { @@ -1155,22 +1192,22 @@ if ($id > 0 || ! empty($ref)) print "</table><br>"; - if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) - { + if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) + { require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); - require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); - $formcompany= new FormCompany($db); - - $blocname = 'contacts'; - $title = $langs->trans('ContactsAddresses'); - include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); - } - - if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) - { - $blocname = 'notes'; - $title = $langs->trans('Notes'); - include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); + require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php"); + $formcompany= new FormCompany($db); + + $blocname = 'contacts'; + $title = $langs->trans('ContactsAddresses'); + include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); + } + + if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) + { + $blocname = 'notes'; + $title = $langs->trans('Notes'); + include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); } dol_htmloutput_mesg($mesg); @@ -1722,4 +1759,4 @@ if ($id > 0 || ! empty($ref)) // End of page llxFooter(); $db->close(); -?> +?> \ No newline at end of file diff --git a/htdocs/install/mysql/migration/3.1.0-3.2.0.sql b/htdocs/install/mysql/migration/3.1.0-3.2.0.sql index b5ccfefeb4a03864d57c61fa31cd043b8202c20f..b3ef221cf1afff8ed8b62df6fba635ebee9ad75e 100755 --- a/htdocs/install/mysql/migration/3.1.0-3.2.0.sql +++ b/htdocs/install/mysql/migration/3.1.0-3.2.0.sql @@ -451,3 +451,5 @@ ALTER TABLE llx_commande_fournisseur ADD COLUMN extraparams varchar(255) AFTER i ALTER TABLE llx_facture_fourn ADD COLUMN extraparams varchar(255) AFTER import_key; ALTER TABLE llx_boxes ADD COLUMN maxline integer NULL; + +ALTER TABLE llx_commande_fournisseur ADD COLUMN date_livraison date NULL; \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql index 1c1a00dbbe0a1d69d4d54c81f1fa8bf012ad29cf..9cfca75f30738cb7834def2f83b111525a11ae66 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql +++ b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql @@ -53,11 +53,12 @@ create table llx_commande_fournisseur note text, note_public text, model_pdf varchar(255), - + + date_livraison date default NULL, fk_cond_reglement integer, -- condition de reglement fk_mode_reglement integer, -- mode de reglement fk_methode_commande integer default 0, -- should be named fk_input_method import_key varchar(14), extraparams varchar(255) -- for stock other parameters with json format -)ENGINE=innodb; +)ENGINE=innodb; \ No newline at end of file