diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 8ad8ecd2331e40ccdf03e99d51d2709fd726fc20..02ccd13b97ca5e787cbcc05ee49d159a2271ab89 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2141,7 +2141,8 @@ abstract class CommonObject $fieldstatus="fk_statut"; if ($elementTable == 'user') $fieldstatus="statut"; if ($elementTable == 'expensereport') $fieldstatus="fk_c_expensereport_statuts"; - + if ($elementTable == 'commande_fournisseur_dispatch') $fieldstatus="status"; + $sql = "UPDATE ".MAIN_DB_PREFIX.$elementTable; $sql.= " SET ".$fieldstatus." = ".$status; // If status = 1 = validated, update also fk_user_valid diff --git a/htdocs/core/class/html.formorder.class.php b/htdocs/core/class/html.formorder.class.php index 5ea5b33c1f463aa8cede30c2bd5550a293e95ece..2abc0c3848504220be5bae21168b8102902333db 100644 --- a/htdocs/core/class/html.formorder.class.php +++ b/htdocs/core/class/html.formorder.class.php @@ -57,11 +57,11 @@ class FormOrder { print '<select class="flat" name="'.$hmlname.'">'; print '<option value="-1"> </option>'; - $statustohow=array(0,1,2,3,4,5,6,9); // 7 is same label than 6. 8 does not exist. + $statustohow=array('0'=>'0','1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5','6'=>'6,7','9'=>'9'); // 7 is same label than 6. 8 does not exist. - foreach($statustohow as $key) + foreach($statustohow as $key => $value) { - print '<option value="'.$key.'"'.($selected == $key?' selected="selected"':'').'>'; + print '<option value="'.$value.'"'.(($selected == $key || $selected == $value)?' selected="selected"':'').'>'; print CommandeFournisseur::LibStatut($key,$short); print '</option>'; } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index a75d97ec25201757319ba0cf4021470ae5209d7d..b9477d0adc858e774cdb3f3e66003c26d345a618 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -106,6 +106,8 @@ class CommandeFournisseur extends CommonOrder */ function __construct($db) { + global $conf; + $this->db = $db; $this->products = array(); $this->lines = array(); @@ -114,7 +116,8 @@ class CommandeFournisseur extends CommonOrder $this->statuts[0] = 'StatusOrderDraft'; $this->statuts[1] = 'StatusOrderValidated'; $this->statuts[2] = 'StatusOrderApproved'; - $this->statuts[3] = 'StatusOrderOnProcess'; + if (empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS)) $this->statuts[3] = 'StatusOrderOnProcess'; + else $this->statuts[3] = 'StatusOrderOnProcessWithValidation'; $this->statuts[4] = 'StatusOrderReceivedPartially'; $this->statuts[5] = 'StatusOrderReceivedAll'; $this->statuts[6] = 'StatusOrderCanceled'; // Approved->Canceled @@ -1618,19 +1621,65 @@ class CommandeFournisseur extends CommonOrder } } + + /** + * Return array of dispathed lines waiting to be approved for this order + * + * @param int $status Filter on stats (-1 = no filter, 0 = lines draft to be approved, 1 = approved lines) + * @return array Array of lines + */ + function getDispachedLines($status=-1) + { + $ret = array(); + + // List of already dispatched lines + $sql = "SELECT p.ref, p.label,"; + $sql.= " e.rowid as warehouse_id, e.label as entrepot,"; + $sql.= " cfd.rowid as dispatchlineid, cfd.fk_product, cfd.qty, cfd.eatby, cfd.sellby, cfd.batch, cfd.comment, cfd.status"; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p,"; + $sql.= " ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as cfd"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."entrepot as e ON cfd.fk_entrepot = e.rowid"; + $sql.= " WHERE cfd.fk_commande = ".$this->id; + $sql.= " AND cfd.fk_product = p.rowid"; + if ($status >= 0) $sql.=" AND cfd.status = ".$status; + $sql.= " ORDER BY cfd.rowid ASC"; + + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + + while ($i < $num) + { + $objp = $this->db->fetch_object($resql); + if ($objp) $ret[]=array('id'=>$objp->dispatchedlineid, 'productid'=>$objp->fk_product, 'warehouseid'=>$objp->warehouse_id); + + $i++; + } + } + else dol_print_error($this->db, 'Failed to execute request to get dispatched lines'); + + return $ret; + } + + /** * Set a delivery in database for this supplier order * * @param User $user User that input data * @param date $date Date of reception - * @param string $type Type of receipt + * @param string $type Type of receipt ('tot' = total/done, 'par' = partial, 'nev' = never, 'can' = cancel) * @param string $comment Comment * @return int <0 if KO, >0 if OK */ function Livraison($user, $date, $type, $comment) { + global $conf; + $result = 0; - + $error = 0; + dol_syslog(get_class($this)."::Livraison"); if ($user->rights->fournisseur->commande->receptionner) @@ -1640,7 +1689,27 @@ class CommandeFournisseur extends CommonOrder if ($type == 'nev') $statut = 7; if ($type == 'can') $statut = 7; - if ($statut == 4 or $statut == 5 or $statut == 7) + if (! $error && ! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS) && ($type == 'tot')) + { + // If option SUPPLIER_ORDER_USE_DISPATCH_STATUS is on, we check all reception are approved to allow status "total/done" + $dispatchedlinearray=$this->getDispachedLines(0); + if (count($dispatchedlinearray) > 0) + { + $result=-1; + $error++; + $this->errors[]='ErrorCantSetReceptionToTotalDoneWithReceptionToApprove'; + dol_syslog('ErrorCantSetReceptionToTotalDoneWithReceptionToApprove', LOG_DEBUG); + } + } + + if (! $error && ! ($statut == 4 or $statut == 5 or $statut == 7)) + { + $error++; + dol_syslog(get_class($this)."::Livraison Error -2", LOG_ERR); + $result = -2; + } + + if (! $error) { $this->db->begin(); @@ -1665,11 +1734,6 @@ class CommandeFournisseur extends CommonOrder $result = -1; } } - else - { - dol_syslog(get_class($this)."::Livraison Error -2", LOG_ERR); - $result = -2; - } } else { diff --git a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php index 370b61de8819aac2444881df70c4c2c97829f7b3..e7aea53945ee139d86763c8e12ef3563d7bece00 100644 --- a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php +++ b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php @@ -17,7 +17,7 @@ */ /** - * \file dev/skeletons/commandefournisseurdispatch.class.php + * \file fourn/class/fournisseur.commande.dispatch.class.php * \ingroup fournisseur stock * \brief This file is an example for a CRUD class file (Create/Read/Update/Delete) * Initialy built by build_class_from_table on 2015-02-24 10:38 @@ -70,10 +70,10 @@ class CommandeFournisseurDispatch extends CommonObject // List of language codes for status $this->statuts[0] = 'Received'; - $this->statuts[1] = 'Approved'; + $this->statuts[1] = 'Verified'; $this->statuts[2] = 'Denied'; $this->statutshort[0] = 'Received'; - $this->statutshort[1] = 'Approved'; + $this->statutshort[1] = 'Verified'; $this->statutshort[2] = 'Denied'; return 1; @@ -494,23 +494,17 @@ class CommandeFournisseurDispatch extends CommonObject if ($mode == 3) { if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0'); - if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1'); - if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3'); - if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut5'); + if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4'); } if ($mode == 4) { if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]); - if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]); - if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]); - if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]); + if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]); } if ($mode == 5) { if ($statut==0) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut0'); - if ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut1'); - if ($statut==2) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut3'); - if ($statut==3) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut5'); + if ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut4'); } } diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index c9a95872c17ee05d5de0ebc177ed713aef76579b..6101aa7e17dd8ff761caaf9ff4b183b03a1ca9b6 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -143,7 +143,7 @@ if (empty($reshook)) } // Set incoterm - if ($action == 'set_incoterms' && !empty($conf->incoterm->enabled)) + if ($action == 'set_incoterms' && $user->rights->fournisseur->commande->creer) { $result = $object->setIncoterms(GETPOST('incoterm_id', 'int'), GETPOST('location_incoterms', 'alpha')); if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); @@ -734,15 +734,14 @@ if (empty($reshook)) } } - // Receive + // Set status of reception (complete, partial, ...) if ($action == 'livraison' && $user->rights->fournisseur->commande->receptionner) { - - if ($_POST["type"]) + if (GETPOST("type") != '') { - $date_liv = dol_mktime(0,0,0,$_POST["remonth"],$_POST["reday"],$_POST["reyear"]); + $date_liv = dol_mktime(GETPOST('rehour'),GETPOST('remin'),GETPOST('resec'),GETPOST("remonth"),GETPOST("reday"),GETPOST("reyear")); - $result = $object->Livraison($user, $date_liv, $_POST["type"], $_POST["comment"]); + $result = $object->Livraison($user, $date_liv, GETPOST("type"), GETPOST("comment")); if ($result > 0) { header("Location: ".$_SERVER["PHP_SELF"]."?id=".$object->id); @@ -754,8 +753,7 @@ if (empty($reshook)) } else { - dol_print_error($db,$object->error); - exit; + setEventMessages($object->error, $object->errors, 'errors'); } } else @@ -2598,14 +2596,21 @@ elseif (! empty($object->id)) } // Reopen - if (in_array($object->statut, array(2, 5, 6, 7, 9))) + if (in_array($object->statut, array(2))) + { + if ($user->rights->fournisseur->commande->commander) + { + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen">'.$langs->trans("Disapprove").'</a>'; + } + } + if (in_array($object->statut, array(5, 6, 7, 9))) { if ($user->rights->fournisseur->commande->commander) { print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen">'.$langs->trans("ReOpen").'</a>'; } } - + // Create bill if (! empty($conf->fournisseur->enabled) && $object->statut >= 2) // 2 means accepted { diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 81c9e410c28e27db298ad7f6e560d9f70cc534c4..2610111023aab8fbf9edc44815efd11aa5c2586b 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -46,6 +46,8 @@ if (! empty($conf->productbatch->enabled)) $langs->load('productbatch'); // Security check $id = GETPOST("id",'int'); +$lineid = GETPOST('lineid', 'int'); +$action = GETPOST('action'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'fournisseur', $id, '', 'commande'); @@ -65,7 +67,35 @@ $mesg=''; * Actions */ -if ($_POST["action"] == 'dispatch' && $user->rights->fournisseur->commande->receptionner) +if ($action == 'checkdispatchline') +{ + $supplierorderdispatch = new CommandeFournisseurDispatch($db); + $result=$supplierorderdispatch->fetch($lineid); + if (! $result) dol_print_error($db); + $result=$supplierorderdispatch->setStatut(1); + if ($result < 0) + { + setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors, 'errors'); + $error++; + $action=''; + } +} + +if ($action == 'uncheckdispatchline') +{ + $supplierorderdispatch = new CommandeFournisseurDispatch($db); + $result=$supplierorderdispatch->fetch($lineid); + if (! $result) dol_print_error($db); + $result=$supplierorderdispatch->setStatut(0); + if ($result < 0) + { + setEventMessages($supplierorderdispatch->error, $supplierorderdispatch->errors, 'errors'); + $error++; + $action=''; + } +} + +if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) { $commande = new CommandeFournisseur($db); $commande->fetch($id); @@ -76,33 +106,40 @@ if ($_POST["action"] == 'dispatch' && $user->rights->fournisseur->commande->rece foreach($_POST as $key => $value) { - if (preg_match('/^product_([0-9]+)$/i', $key, $reg)) + if (preg_match('/^product_([0-9]+)$/i', $key, $reg)) // without batch module enabled { + $numline=$reg[1] + 1; // line of product $prod = "product_".$reg[1]; $qty = "qty_".$reg[1]; $ent = "entrepot_".$reg[1]; $pu = "pu_".$reg[1]; // This is unit price including discount $fk_commandefourndet = "fk_commandefourndet_".$reg[1]; - if (GETPOST($ent,'int') > 0) + + if (GETPOST($qty) > 0) // We ask to move a qty { - $result = $commande->DispatchProduct($user, GETPOST($prod,'int'),GETPOST($qty), GETPOST($ent,'int'), GETPOST($pu), GETPOST("comment"), '', '', '', GETPOST($fk_commandefourndet, 'int')); - if ($result < 0) + if (! GETPOST($ent,'int') > 0) { - setEventMessages($commande->error, $commande->errors, 'errors'); + dol_syslog('No dispatch for line '.$key.' as no warehouse choosed'); + $text = $langs->transnoentities('Warehouse').', '.$langs->transnoentities('Line').' ' .($numline); + setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors'); $error++; } - } - else - { - dol_syslog('No dispatch for line '.$key.' as no warehouse choosed'); - $text = $langs->transnoentities('Warehouse').', '.$langs->transnoentities('Line').'' .($reg[1]-1); - setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors'); - $error++; + + if (! $error) + { + $result = $commande->DispatchProduct($user, GETPOST($prod,'int'),GETPOST($qty), GETPOST($ent,'int'), GETPOST($pu), GETPOST("comment"), '', '', '', GETPOST($fk_commandefourndet, 'int')); + if ($result < 0) + { + setEventMessages($commande->error, $commande->errors, 'errors'); + $error++; + } + } } } - else if (preg_match('/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) + if (preg_match('/^product_([0-9]+)_([0-9]+)$/i', $key, $reg)) // with batch module enabled { //eat-by date dispatch + $numline=$reg[2] + 1; // line of product $prod = "product_".$reg[1]."_".$reg[2]; $qty = "qty_".$reg[1]."_".$reg[2]; $ent = "entrepot_".$reg[1]."_".$reg[2]; @@ -112,24 +149,25 @@ if ($_POST["action"] == 'dispatch' && $user->rights->fournisseur->commande->rece $dDLUO = dol_mktime(12, 0, 0, $_POST['dluo_'.$reg[1]."_".$reg[2].'month'], $_POST['dluo_'.$reg[1]."_".$reg[2].'day'], $_POST['dluo_'.$reg[1]."_".$reg[2].'year']); $dDLC = dol_mktime(12, 0, 0, $_POST['dlc_'.$reg[1]."_".$reg[2].'month'], $_POST['dlc_'.$reg[1]."_".$reg[2].'day'], $_POST['dlc_'.$reg[1]."_".$reg[2].'year']); - if (! (GETPOST($ent,'int') > 0)) + if (GETPOST($qty) > 0) // We ask to move a qty { - dol_syslog('No dispatch for line '.$key.' as no warehouse choosed'); - $text = $langs->transnoentities('Warehouse').', '.$langs->transnoentities('Line').'' .($reg[1]-1); - setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors'); - $error++; - } + if (! (GETPOST($ent,'int') > 0)) + { + dol_syslog('No dispatch for line '.$key.' as no warehouse choosed'); + $text = $langs->transnoentities('Warehouse').', '.$langs->transnoentities('Line').' ' .($numline).'-'.($reg[1]+1); + setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors'); + $error++; + } - if (! $error) - { - if (! ((GETPOST($qty) > 0) && ($_POST[$lot] || $dDLUO || $dDLC))) + if (! ($_POST[$lot] || $dDLUO || $dDLC)) { - dol_syslog('No dispatch for line '.$key.' as qty is not set or eat-by date are not set'); - $text = $langs->transnoentities('atleast1batchfield').', '.$langs->transnoentities('Line').'' .($reg[1]-1); + dol_syslog('No dispatch for line '.$key.' as serial/eat-by/sellby date are not set'); + $text = $langs->transnoentities('atleast1batchfield').', '.$langs->transnoentities('Line').' ' .($numline).'-'.($reg[1]+1); setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors'); $error++; } - else + + if (! $error) { $result = $commande->dispatchProduct($user, GETPOST($prod,'int'), GETPOST($qty), GETPOST($ent,'int'), GETPOST($pu), GETPOST("comment"), $dDLC, $dDLUO, GETPOST($lot, 'alpha'), GETPOST($fk_commandefourndet, 'int')); if ($result < 0) @@ -511,7 +549,7 @@ if ($id > 0 || ! empty($ref)) // List of already dispatching $sql = "SELECT p.ref, p.label,"; $sql.= " e.rowid as warehouse_id, e.label as entrepot,"; - $sql.= " cfd.rowid, cfd.fk_product, cfd.qty, cfd.eatby, cfd.sellby, cfd.batch, cfd.comment, cfd.status"; + $sql.= " cfd.rowid as dispatchlineid, cfd.fk_product, cfd.qty, cfd.eatby, cfd.sellby, cfd.batch, cfd.comment, cfd.status"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p,"; $sql.= " ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as cfd"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."entrepot as e ON cfd.fk_entrepot = e.rowid"; @@ -545,7 +583,7 @@ if ($id > 0 || ! empty($ref)) print '<td></td>'; print '<td>'.$langs->trans("Warehouse").'</td>'; print '<td>'.$langs->trans("Comment").'</td>'; - if (! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS)) print '<td align="right">'.$langs->trans("Status").'</td>'; + if (! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS)) print '<td align="center" colspan="2">'.$langs->trans("Status").'</td>'; print "</tr>\n"; $var=false; @@ -553,6 +591,7 @@ if ($id > 0 || ! empty($ref)) while ($i < $num) { $objp = $db->fetch_object($resql); + print "<tr ".$bc[$var].">"; print '<td>'; print '<a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a>'; @@ -588,8 +627,22 @@ if ($id > 0 || ! empty($ref)) //print $supplierorderdispatch->status; print $supplierorderdispatch->getLibStatut(5); print '</td>'; - } + // Add button to check/uncheck disaptching + print '<td align="center">'; + $disabled=''; + if ($commande->statut == 5) $disabled=1; + if (empty($objp->status)) + { + print '<a class="button'.($disabled?' buttonRefused':'').'" href="'.$_SERVER["PHP_SELF"]."?id=".$id."&action=checkdispatchline&lineid=".$objp->dispatchlineid.'">'.$langs->trans("Check").'</a>'; + } + else + { + print '<a class="button'.($disabled?' buttonRefused':'').'" href="'.$_SERVER["PHP_SELF"]."?id=".$id."&action=uncheckdispatchline&lineid=".$objp->dispatchlineid.'">'.$langs->trans("Uncheck").'</a>'; + } + print '</td>'; + } + print "</tr>\n"; $i++; diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 6926997f0f11c2a49f66d9c3b325615fd872596c..7e525a9d0805bf9bd0282f5e500e18a7065328ec 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -45,7 +45,7 @@ $search_user=GETPOST('search_user'); $search_ht=GETPOST('search_ht'); $search_ttc=GETPOST('search_ttc'); $sall=GETPOST('search_all'); -$search_status=(GETPOST('search_status','int')!=''?GETPOST('search_status','int'):GETPOST('statut','int')); +$search_status=(GETPOST('search_status','alpha')!=''?GETPOST('search_status','alpha'):GETPOST('statut','alpha')); // alpha and not intbecause it can be '6,7' $page = GETPOST('page','int'); $socid = GETPOST('socid','int'); @@ -153,9 +153,9 @@ if ($search_refsupp) { $sql.= " AND (cf.ref_supplier LIKE '%".$db->escape($search_refsupp)."%')"; } -if ($search_status >= 0) +if ($search_status != '' && $search_status >= 0) { - if ($search_status == 6 || $search_status == 7) $sql.=" AND cf.fk_statut IN (6,7)"; + if (strstr($search_status, ',')) $sql.=" AND cf.fk_statut IN (".$db->escape($search_status).")"; else $sql.=" AND cf.fk_statut = ".$search_status; } @@ -205,9 +205,9 @@ if ($resql) print '<tr class="liste_titre">'; - print '<td class="liste_titre"><input type="text" class="flat" name="search_ref" value="'.$search_ref.'"></td>'; + print '<td class="liste_titre"><input size="8" type="text" class="flat" name="search_ref" value="'.$search_ref.'"></td>'; if (empty($conf->global->SUPPLIER_ORDER_HIDE_REF_SUPPLIER)) print '<td class="liste_titre"><input type="text" class="flat" size="8" name="search_refsupp" value="'.$search_refsupp.'"></td>'; - print '<td class="liste_titre"><input type="text" class="flat" name="search_company" value="'.$search_company.'"></td>'; + print '<td class="liste_titre"><input type="text" class="flat" size="8" name="search_company" value="'.$search_company.'"></td>'; if (! empty($conf->global->PROJECT_SHOW_REF_INTO_LISTS)) { print '<td class="liste_titre">'; diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index be75e3a96a35f8722a30af314a85357959a7cf75..3d83901194b9f234911e4e3df2f64f4fb3077966 100755 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -160,6 +160,7 @@ ErrorPriceExpressionInternal=Internal error '%s' ErrorPriceExpressionUnknown=Unknown error '%s' ErrorSrcAndTargetWarehouseMustDiffers=Source and target warehouses must differs ErrorTryToMakeMoveOnProductRequiringBatchData=Error, trying to make a stock movement without batch/serial information, on a product requiring batch/serial information +ErrorCantSetReceptionToTotalDoneWithReceptionToApprove=All recorded receptions must first be verified before being allowed to do this action # Warnings WarningMandatorySetupNotComplete=Mandatory setup parameters are not yet defined diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index be893d5256947cf78215bbc183a01578d90a79ac..551807aad5946410a4ab58e87d328bc3d642736b 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -159,6 +159,7 @@ Search=Search SearchOf=Search Valid=Valid Approve=Approve +Disapprove=Disapprove ReOpen=Re-Open Upload=Send file ToLink=Link @@ -524,6 +525,7 @@ DateFromTo=From %s to %s DateFrom=From %s DateUntil=Until %s Check=Check +Uncheck=Uncheck Internal=Internal External=External Internals=Internal diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index 4f6e0b0dfb2edff006927eff69c2460e3277a4f7..ea3659b90de7eed5be1aaaa29190f9a5073b5029 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -42,6 +42,7 @@ StatusOrderCanceled=Canceled StatusOrderDraft=Draft (needs to be validated) StatusOrderValidated=Validated StatusOrderOnProcess=Ordered - Standby reception +StatusOrderOnProcessWithValidation=Ordered - Standby reception or validation StatusOrderProcessed=Processed StatusOrderToBill=Delivered StatusOrderToBill2=To bill diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index ccf54a6f9b502bf2406e5c33d1af7310f32fbdb0..206b1df019e79a4c8dddd66c9f482da597c6d6cc 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -361,6 +361,15 @@ fieldset { border: 1px solid #AAAAAA !important; box-shadow: 2px 2px 3px #DDD; } -moz-box-shadow: none; cursor: auto; } +.buttonRefused { + pointer-events: none; + cursor: default; + opacity: 0.4; + filter: alpha(opacity=40); /* For IE8 and earlier */ + box-shadow: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; +} form { padding:0px; margin:0px;