diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index 1f261b1a1a8..a8c5455435b 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -29,42 +29,44 @@ require_once(DOL_DOCUMENT_ROOT."/lib/admin.lib.php"); $langs->load("admin"); $langs->load("stocks"); +// Securit check if (!$user->admin) accessforbidden(); + /* * Actions */ -if ($_POST["action"] == 'stock_userstock') +if ($_POST["action"] == 'STOCK_USERSTOCK') { - dolibarr_set_const($db, "STOCK_USERSTOCK", $_POST["stock_userstock"]); - //On d�sactive l'autocr�ation si l'option "stock personnel" est d�sactiv�e - if ($_POST["stock_userstock"] == 0) + dolibarr_set_const($db, "STOCK_USERSTOCK", $_POST["STOCK_USERSTOCK"]); + //On desactive l'autocreation si l'option "stock personnel" est desactivee + if ($_POST["STOCK_USERSTOCK"] == 0) { dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", 0); } Header("Location: stock.php"); exit; } -elseif ($_POST["action"] == 'stock_userstock_autocreate') +elseif ($_POST["action"] == 'STOCK_USERSTOCK_AUTOCREATE') { - dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", $_POST["stock_userstock_autocreate"]); + dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", $_POST["STOCK_USERSTOCK_AUTOCREATE"]); Header("Location: stock.php"); exit; } -// Mode of stock changement -elseif ( $_POST["action"] == 'stock_bill' -|| $_POST["action"] == 'stock_validateorder' -|| $_POST["action"] == 'stock_shipment') +// Mode of stock decrease +if ($_POST["action"] == 'STOCK_CALCULATE_ON_BILL' +|| $_POST["action"] == 'STOCK_CALCULATE_ON_VALIDATE_ORDER' +|| $_POST["action"] == 'STOCK_CALCULATE_ON_SHIPMENT') { $count=0; $db->begin(); $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", ''); $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", ''); $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", ''); - if ($_POST["action"] == 'stock_bill') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", $_POST["stock_bill"]); - if ($_POST["action"] == 'stock_validateorder') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", $_POST["stock_validateorder"]); - if ($_POST["action"] == 'stock_shipment') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", $_POST["stock_shipment"]); + if ($_POST["action"] == 'STOCK_CALCULATE_ON_BILL') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", $_POST["STOCK_CALCULATE_ON_BILL"]); + if ($_POST["action"] == 'STOCK_CALCULATE_ON_VALIDATE_ORDER') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", $_POST["STOCK_CALCULATE_ON_VALIDATE_ORDER"]); + if ($_POST["action"] == 'STOCK_CALCULATE_ON_SHIPMENT') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", $_POST["STOCK_CALCULATE_ON_SHIPMENT"]); if ($count == 4) { $db->commit(); @@ -77,6 +79,28 @@ elseif ( $_POST["action"] == 'stock_bill' dolibarr_print_error("Error in some requests", LOG_ERR); } } +// Mode of stock decrease +if ($_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_BILL' +|| $_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') +{ + $count=0; + $db->begin(); + $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", ''); + $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", ''); + if ($_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_BILL') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", $_POST["STOCK_CALCULATE_ON_SUPPLIER_BILL"]); + if ($_POST["action"] == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') $count+=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", $_POST["STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER"]); + if ($count == 3) + { + $db->commit(); + Header("Location: stock.php"); + exit; + } + else + { + $db->rollback(); + dolibarr_print_error("Error in some requests", LOG_ERR); + } +} @@ -109,8 +133,8 @@ print ""; print ''.$langs->trans("UserWarehouse").''; print ''; print "
"; -print ""; -print $html->selectyesno("stock_userstock",$conf->global->STOCK_USERSTOCK,1); +print ""; +print $html->selectyesno("STOCK_USERSTOCK",$conf->global->STOCK_USERSTOCK,1); print ''; print "
\n\n\n"; @@ -123,8 +147,8 @@ if ($conf->global->STOCK_USERSTOCK == 1) print ''; print "
"; - print ""; - print $html->selectyesno("stock_userstock_autocreate",$conf->global->STOCK_USERSTOCK_AUTOCREATE,1); + print ""; + print $html->selectyesno("STOCK_USERSTOCK_AUTOCREATE",$conf->global->STOCK_USERSTOCK_AUTOCREATE,1); print ''; print '
'; @@ -144,11 +168,11 @@ if ($conf->facture->enabled) { $var=!$var; print ""; - print ''.$langs->trans("DeStockReStockOnBill").''; + print ''.$langs->trans("DeStockOnBill").''; print ''; print "
"; - print ""; - print $html->selectyesno("stock_bill",$conf->global->STOCK_CALCULATE_ON_BILL,1); + print ""; + print $html->selectyesno("STOCK_CALCULATE_ON_BILL",$conf->global->STOCK_CALCULATE_ON_BILL,1); print ''; print "
\n\n\n"; } @@ -157,11 +181,11 @@ if ($conf->commande->enabled) { $var=!$var; print ""; - print ''.$langs->trans("DeStockReStockOnValidateOrder").''; + print ''.$langs->trans("DeStockOnValidateOrder").''; print ''; print "
"; - print ""; - print $html->selectyesno("stock_validateorder",$conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER,1); + print ""; + print $html->selectyesno("STOCK_CALCULATE_ON_VALIDATE_ORDER",$conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER,1); print ''; print "
\n\n\n"; } @@ -170,11 +194,11 @@ if ($conf->expedition->enabled) { $var=!$var; print ""; - print ''.$langs->trans("DeStockReStockOnShipment").''; + print ''.$langs->trans("DeStockOnShipment").''; print ''; print "
"; - print ""; - print $html->selectyesno("stock_shipment",$conf->global->STOCK_CALCULATE_ON_SHIPMENT,1); + print ""; + print $html->selectyesno("STOCK_CALCULATE_ON_SHIPMENT",$conf->global->STOCK_CALCULATE_ON_SHIPMENT,1); print ''; print "
\n\n\n"; } @@ -187,11 +211,31 @@ print " ".$langs->trans("Value")."\n"; print ''."\n"; $var=true; +if ($conf->fournisseur->enabled) +{ + $var=!$var; + print ""; + print ''.$langs->trans("ReStockOnBill").''; + print ''; + print "
"; + print ""; + print $html->selectyesno("STOCK_CALCULATE_ON_SUPPLIER_BILL",$conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL,1); + print ''; + print "
\n\n\n"; +} -$var=!$var; -print ""; -print ''.$langs->trans("FeatureNotYetAvailable").''; -print ''."\n"; +if ($conf->commande->enabled) +{ + $var=!$var; + print ""; + print ''.$langs->trans("ReStockOnValidateOrder").''; + print ''; + print "
"; + print ""; + print $html->selectyesno("STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER",$conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER,1); + print ''; + print "
\n\n\n"; +} print ''; diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php index 3d42646825b..780b63c50d4 100644 --- a/htdocs/facture.class.php +++ b/htdocs/facture.class.php @@ -1083,7 +1083,7 @@ class Facture extends CommonObject $this->update_price(); // Validation de la facture - $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture '; + $sql = 'UPDATE '.MAIN_DB_PREFIX.'facture'; $sql.= " SET facnumber='".$numfa."', fk_statut = 1, fk_user_valid = ".$user->id; if ($conf->global->FAC_FORCE_DATE_VALIDATION) { @@ -1094,15 +1094,16 @@ class Facture extends CommonObject $sql.= ', date_lim_reglement='.$this->db->idate($datelim); } $sql.= ' WHERE rowid = '.$this->id; + + dolibarr_syslog("Facture::set_valid() sql=".$sql, LOG_DEBUG); $resql=$this->db->query($sql); if ($resql) { $this->facnumber=$numfa; - dolibarr_syslog("Facture::set_valid() sql=$sql"); } else { - dolibarr_syslog("Facture::set_valid() Echec update - 10 - sql=$sql"); + dolibarr_syslog("Facture::set_valid() Echec update - 10 - sql=".$sql, LOG_DEBUG); dolibarr_print_error($this->db); $error++; } @@ -1138,11 +1139,11 @@ class Facture extends CommonObject if (! $error) { - // Classe la société rattachée comme client + // Define third party as a customer $result=$this->client->set_as_client(); // Si activé on décrémente le produit principal et ses composants à la validation de facture - if ($conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_BILL) + if ($result >= 0 && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_BILL) { require_once(DOL_DOCUMENT_ROOT."/product/stock/mouvementstock.class.php"); @@ -1150,27 +1151,8 @@ class Facture extends CommonObject { if ($this->lignes[$i]->fk_product && $this->lignes[$i]->product_type == 0) { - dolibarr_syslog("Facture::set_valid() correct stock for ".$this->lignes[$i]->rowid); - - // It's a product - if ($conf->global->PRODUIT_SOUSPRODUITS) - { - $prod = new Product($this->db, $this->lignes[$i]->fk_product); - $prod -> get_sousproduits_arbo(); - $prods_arbo = $prod->get_each_prod(); - if(sizeof($prods_arbo) > 0) - { - foreach($prods_arbo as $key => $value) - { - // on décompte le stock de tous les sousproduits - $mouvS = new MouvementStock($this->db); - $entrepot_id = "1"; //Todo: ajouter possibilité de choisir l'entrepot - $result=$mouvS->livraison($user, $value[1], $entrepot_id, $value[0]*$this->lignes[$i]->qty); - } - } - } $mouvP = new MouvementStock($this->db); - // on décompte le stock du produit principal + // We decrease stock for product $entrepot_id = "1"; // TODO ajouter possibilité de choisir l'entrepot $result=$mouvP->livraison($user, $this->lignes[$i]->fk_product, $entrepot_id, $this->lignes[$i]->qty); } @@ -1181,15 +1163,24 @@ class Facture extends CommonObject $this->use_webcal=($conf->global->PHPWEBCALENDAR_BILLSTATUS=='always'?1:0); - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('BILL_VALIDATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - $this->db->commit(); - return 1; + if ($result > 0) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('BILL_VALIDATE',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -1; + } + } else { diff --git a/htdocs/fourn/fournisseur.facture.class.php b/htdocs/fourn/fournisseur.facture.class.php index 2c80f7af030..1272438b1c4 100644 --- a/htdocs/fourn/fournisseur.facture.class.php +++ b/htdocs/fourn/fournisseur.facture.class.php @@ -44,13 +44,13 @@ class FactureFournisseur extends Facture var $table_element='facture_fourn'; var $table_element_line='facture_fourn_det'; var $fk_element='fk_facture_fourn'; - - //! 0=brouillon, - //! 1=validée, - //! TODO Ce statut doit etre 2 et non 1 classée payée partiellement (close_code='discount_vat','badcustomer') ou complètement (close_code=null), - //! TODO Ce statut doit etre 2 et non 1 classée abandonnée et aucun paiement n'a eu lieu (close_code='badcustomer','abandon' ou 'replaced') + + //! 0=draft, + //! 1=validated, + //! TODO Ce statut doit etre 2 et non 1 classee payee partiellement (close_code='discount_vat','badcustomer') ou completement (close_code=null), + //! TODO Ce statut doit etre 2 et non 1 classee abandonnee et aucun paiement n'a eu lieu (close_code='badcustomer','abandon' ou 'replaced') var $statut; - //! 1 si facture payée COMPLETEMENT, 0 sinon (ce champ ne devrait plus servir car insuffisant) + //! 1 si facture payee COMPLETEMENT, 0 sinon (ce champ ne devrait plus servir car insuffisant) var $paye; var $author; @@ -71,7 +71,7 @@ class FactureFournisseur extends Facture /** * \brief Constructeur de la classe - * \param DB Handler accès base de données + * \param DB Database access handler * \param socid Id societe ('' par defaut) * \param facid Id facture ('' par defaut) */ @@ -97,8 +97,8 @@ class FactureFournisseur extends Facture } /** - * \brief Création de la facture en base - * \param user object utilisateur qui crée + * \brief Creation de la facture en base + * \param user object utilisateur qui cree * \return int id facture si ok, < 0 si erreur */ function create($user) @@ -137,7 +137,7 @@ class FactureFournisseur extends Facture $this->lignes[$i]->qty); } } - // Mise à jour prix + // Update total price if ($this->update_price() > 0) { $this->db->commit(); @@ -168,8 +168,8 @@ class FactureFournisseur extends Facture } /** - * \brief Recupére l'objet facture et ses lignes de factures - * \param rowid id de la facture a récupérer + * \brief Recup�re l'objet facture et ses lignes de factures + * \param rowid id de la facture a r�cup�rer * \return int >0 si ok, <0 si ko */ function fetch($rowid) @@ -250,7 +250,7 @@ class FactureFournisseur extends Facture /** - \brief Recupére les lignes de factures dans this->lignes + \brief Recup�re les lignes de factures dans this->lignes \return int 1 si ok, < 0 si erreur */ function fetch_lines() @@ -307,7 +307,7 @@ class FactureFournisseur extends Facture /** - * \brief Recupére l'objet fournisseur lié à la facture + * \brief Recup�re l'objet fournisseur li� � la facture * */ function fetch_fournisseur() @@ -319,7 +319,7 @@ class FactureFournisseur extends Facture /** * \brief Supprime la facture - * \param rowid id de la facture à supprimer + * \param rowid id de la facture � supprimer */ function delete($rowid) { @@ -355,8 +355,8 @@ class FactureFournisseur extends Facture /** - * \brief Tag la facture comme payée complètement - * \param user Objet utilisateur qui modifie l'état + * \brief Tag la facture comme pay�e compl�tement + * \param user Objet utilisateur qui modifie l'�tat * \return int <0 si ko, >0 si ok */ function set_payed($user) @@ -376,7 +376,7 @@ class FactureFournisseur extends Facture /** - * \brief Tag la facture comme validée + * \brief Set invoice status as validate * \param user Objet utilisateur qui valide la facture * \return int <0 si ko, >0 si ok */ @@ -390,19 +390,46 @@ class FactureFournisseur extends Facture $sql.= " SET fk_statut = 1, fk_user_valid = ".$user->id; $sql.= " WHERE rowid = ".$this->id; - dolibarr_syslog("FactureFournisseur::set_valid sql=".$sql,LOG_DEBUG); + dolibarr_syslog("FactureFournisseur::set_valid sql=".$sql, LOG_DEBUG); $resql = $this->db->query($sql); if ($resql) { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('BILL_SUPPLIER_VALIDATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + $result=0; + + // Si activé on décrémente le produit principal et ses composants à la validation de facture + if ($result >= 0 && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) + { + require_once(DOL_DOCUMENT_ROOT."/product/stock/mouvementstock.class.php"); - $this->db->commit(); - return 1; + for ($i = 0 ; $i < sizeof($this->lignes) ; $i++) + { + if ($this->lignes[$i]->fk_product && $this->lignes[$i]->product_type == 0) + { + $mouvP = new MouvementStock($this->db); + // We increase stock for product + $entrepot_id = "1"; // TODO ajouter possibilité de choisir l'entrepot + $result=$mouvP->reception($user, $this->lignes[$i]->fk_product, $entrepot_id, $this->lignes[$i]->qty); + } + } + } + + if ($result > 0) + { + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('BILL_SUPPLIER_VALIDATE',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + $this->db->commit(); + return 1; + } + else + { + $this->db->rollback(); + return -1; + } } else { @@ -414,20 +441,20 @@ class FactureFournisseur extends Facture /** - * \brief Ajoute une ligne de facture (associé à aucun produit/service prédéfini) + * \brief Ajoute une ligne de facture (associ� � aucun produit/service pr�d�fini) * \param desc Description de la ligne * \param pu Prix unitaire (HT ou TTC selon price_base_type) - * \param txtva Taux de tva forcé, sinon -1 - * \param qty Quantité - * \param fk_product Id du produit/service predéfini + * \param txtva Taux de tva forc�, sinon -1 + * \param qty Quantit� + * \param fk_product Id du produit/service pred�fini * \param remise_percent Pourcentage de remise de la ligne - * \param date_start Date de debut de validité du service - * \param date_end Date de fin de validité du service + * \param date_start Date de debut de validit� du service + * \param date_end Date de fin de validit� du service * \param ventil Code de ventilation comptable * \param info_bits Bits de type de lignes * \param price_base_type HT ou TTC - * \remarks Les parametres sont deja censé etre juste et avec valeurs finales a l'appel - * de cette methode. Aussi, pour le taux tva, il doit deja avoir ete défini + * \remarks Les parametres sont deja cens� etre juste et avec valeurs finales a l'appel + * de cette methode. Aussi, pour le taux tva, il doit deja avoir ete d�fini * par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,taux_produit) * et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue) */ @@ -438,7 +465,7 @@ class FactureFournisseur extends Facture $this->db->begin(); - // Nettoyage paramètres + // Nettoyage param�tres if ($txtva == '') $txtva=0; $txtva=price2num($txtva); @@ -475,12 +502,12 @@ class FactureFournisseur extends Facture } /** - * \brief Mets à jour une ligne de facture + * \brief Mets � jour une ligne de facture * \param id Id de la ligne de facture * \param label Description de la ligne * \param pu Prix unitaire (HT ou TTC selon price_base_type) * \param tauxtva Taux tva - * \param qty Quantité + * \param qty Quantit� * \param idproduct Id produit * \param price_base_type HT ou TTC * \param info_bits Miscellanous informations of line @@ -596,7 +623,7 @@ class FactureFournisseur extends Facture $this->user_validation = $vuser; } $this->date_creation = $obj->datec; - //$this->date_validation = $obj->datev; \todo La date de validation n'est pas encore gérée + //$this->date_validation = $obj->datev; \todo La date de validation n'est pas encore g�r�e } $this->db->free($result); } @@ -666,14 +693,14 @@ class FactureFournisseur extends Facture /** - * \brief Initialise la facture avec valeurs fictives aléatoire - * Sert à générer une facture pour l'aperu des modèles ou demo + * \brief Initialise la facture avec valeurs fictives al�atoire + * Sert � g�n�rer une facture pour l'aperu des mod�les ou demo */ function initAsSpecimen() { global $user,$langs; - // Charge tableau des id de société socids + // Charge tableau des id de soci�t� socids $socids = array(); $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe WHERE fournisseur=1 LIMIT 10"; $resql = $this->db->query($sql); @@ -706,7 +733,7 @@ class FactureFournisseur extends Facture } } - // Initialise paramètres + // Initialise param�tres $this->id=0; $this->ref = 'SPECIMEN'; $this->specimen=1; diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php index 0e7fc76d2e6..fa9801d754f 100644 --- a/htdocs/html.form.class.php +++ b/htdocs/html.form.class.php @@ -1974,7 +1974,8 @@ class Form print ''; } $i++; diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index c01b80ebfcf..302fc80846d 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -40,9 +40,11 @@ QtyDispatched=Quantity dispatched OrderDispatch=Order dispatching RuleForStockManagementDecrease=Rule for stock management decrease RuleForStockManagementIncrease=Rule for stock management increase -DeStockReStockOnBill=Decrease/increase real stocks on invoices/credit notes (warning, in this version, it's only in warehouse number 1 that stock is modified) -DeStockReStockOnValidateOrder=Decrease/increase real stocks on orders notes (warning, in this version, it's only in warehouse number 1 that stock is modified) -DeStockReStockOnShipment=Decrease/increase real stocks on shipment (recommanded) +DeStockOnBill=Decrease real stocks on invoices/credit notes (warning, in this version, it's only in warehouse number 1 that stock is modified) +DeStockOnValidateOrder=Decrease real stocks on orders notes (warning, in this version, it's only in warehouse number 1 that stock is modified) +DeStockOnShipment=Decrease real stocks on shipment (recommanded) +ReStockOnBill=Increase real stocks on invoices/credit notes (warning, in this version, it's only in warehouse number 1 that stock is modified) +ReStockOnValidateOrder=Increase real stocks on orders notes (warning, in this version, it's only in warehouse number 1 that stock is modified) StockDiffPhysicTeoric=Reason for difference stock physical and theorical StockLimitShort=Limit StockLimit=Stock limit for alerts diff --git a/htdocs/langs/es_ES/stocks.lang b/htdocs/langs/es_ES/stocks.lang index d93db758040..6045fcf7458 100644 --- a/htdocs/langs/es_ES/stocks.lang +++ b/htdocs/langs/es_ES/stocks.lang @@ -38,9 +38,11 @@ EnhancedValueOfWarehouses=Valor de stocks UserWarehouseAutoCreate=Crear existencias automáticamente en la creación de un usuario QtyDispatched=Cantidad desglosada OrderDispatch=Desglose pedido -DeStockReStockOnBill=Decrementar/incrementar las existencias con las facturas/abonos -DeStockReStockOnValidateOrder=Decrementar/incrementar las existencias en los pedidos -DeStockReStockOnShipment=Decrementar/incrementar los stocks en los envíos +DeStockOnBill=Decrementar las existencias con las facturas/abonos +DeStockOnValidateOrder=Decrementar las existencias en los pedidos +DeStockOnShipment=Decrementar los stocks en los envíos +ReStockOnBill=Incrementar las existencias con las facturas/abonos +ReStockOnValidateOrder=Incrementar las existencias en los pedidos StockLimitShort=Límite máximo StockLimit=Límite máximo existencias PhysicalStock=Stock físico diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang index 51a1a96b323..01e360cc390 100644 --- a/htdocs/langs/fr_FR/stocks.lang +++ b/htdocs/langs/fr_FR/stocks.lang @@ -40,9 +40,11 @@ QtyDispatched=Quantit OrderDispatch=Ventilation commande RuleForStockManagementDecrease=Règle de gestion des décrémentations de stock RuleForStockManagementIncrease=Règle de gestion des incrémentations de stock -DeStockReStockOnBill=Décrémente/Incrémente les stocks physiques sur les factures/avoirs (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement) -DeStockReStockOnValidateOrder=Décrémente/Incrémente les stocks physiques sur les commandes (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement) -DeStockReStockOnShipment=Décrémente/Incrémente les stocks physiques sur les expéditions (recommandé) +DeStockOnBill=Décrémente les stocks physiques sur les factures/avoirs (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement) +DeStockOnValidateOrder=Décrémente les stocks physiques sur les commandes (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement) +DeStockOnShipment=Décrémente les stocks physiques sur les expéditions (recommandé) +ReStockOnBill=Incrémente les stocks physiques sur les factures/avoirs (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement) +ReStockOnValidateOrder=Incrémente les stocks physiques sur les commandes (attention, dans cette version, c'est toujours dans le premier entrepot numero 1 que se fait l'ajustement) StockDiffPhysicTeoric=Raison écart stock physique-théorique StockLimitShort=Seuil StockLimit=Seuil alerte stock diff --git a/htdocs/langs/it_IT/stocks.lang b/htdocs/langs/it_IT/stocks.lang index 9040e319462..3873f67cd3e 100644 --- a/htdocs/langs/it_IT/stocks.lang +++ b/htdocs/langs/it_IT/stocks.lang @@ -39,9 +39,11 @@ UserWarehouseAutoCreate =Creare uno stock automaticamente durante la creaz QtyDispatched =Quantità spedita OrderDispatch =Spedizione dell'ordine RuleForStockManagement =Regola per gestione delle scorte -DeStockReStockOnBill =Diminuzione / aumento reale delle scorte sulle fatture / note di credito (attenzione, in questa versione, è solo nel magazzino numero 1 che viene modificata) -DeStockReStockOnValidateOrder =Diminuzione / aumento reale delle scorte per ordini note (avviso, in questa versione, è solo nel magazzino numero 1 che viene modificata) -DeStockReStockOnShipment =Diminuzione / aumento reale delle scorte sulla spedizione (Raccomandato) +DeStockOnBill =Diminuzione reale delle scorte sulle fatture / note di credito (attenzione, in questa versione, è solo nel magazzino numero 1 che viene modificata) +DeStockOnValidateOrder =Diminuzione reale delle scorte per ordini note (avviso, in questa versione, è solo nel magazzino numero 1 che viene modificata) +DeStockOnShipment =Diminuzione reale delle scorte sulla spedizione (Raccomandato) +ReStockOnBill =Aumente reale delle scorte sulle fatture / note di credito (attenzione, in questa versione, è solo nel magazzino numero 1 che viene modificata) +ReStockOnValidateOrder =Aumente reale delle scorte per ordini note (avviso, in questa versione, è solo nel magazzino numero 1 che viene modificata) StockDiffPhysicTeoric =Motivo per la differenza di magazzino fisico e teorico StockLimitShort =Limite StockLimit =Magazzino limite per le segnalazioni diff --git a/htdocs/product/sousproduits/fiche.php b/htdocs/product/sousproduits/fiche.php index 27b4ca6c534..b665c14d731 100644 --- a/htdocs/product/sousproduits/fiche.php +++ b/htdocs/product/sousproduits/fiche.php @@ -97,8 +97,7 @@ $user->rights->produit->creer) // action recherche des produits par mot-cle et/ou par categorie if($action == 'search' ) { - #$sql = 'SELECT p.rowid, p.ref, p.label, p.price, p.fk_product_type'; - $sql = 'SELECT p.rowid, p.ref, p.label, p.price'; + $sql = 'SELECT DISTINCT p.rowid, p.ref, p.label, p.price'; $sql.= ' FROM '.MAIN_DB_PREFIX.'product as p'; $sql.= ' left join '.MAIN_DB_PREFIX.'categorie_product as cp on p.rowid=cp.fk_product'; $sql.= " WHERE 1=1"; diff --git a/htdocs/product/stock/mouvementstock.class.php b/htdocs/product/stock/mouvementstock.class.php index aa01a1dd7bc..4a3b70f0b1e 100644 --- a/htdocs/product/stock/mouvementstock.class.php +++ b/htdocs/product/stock/mouvementstock.class.php @@ -48,6 +48,8 @@ class MouvementStock */ function _create($user, $fk_product, $entrepot_id, $qty, $type, $price=0) { + global $conf; + $error = 0; dolibarr_syslog("MouvementStock::_Create $user->id, $fk_product, $entrepot_id, $qty, $type, $price"); @@ -132,7 +134,10 @@ class MouvementStock } // Add movement for sub products - $error = $this->_createSubProduct($user, $fk_product, $entrepot_id, $qty, $type, $price=0); + if ($conf->global->PRODUIT_SOUSPRODUITS) + { + $error = $this->_createSubProduct($user, $fk_product, $entrepot_id, $qty, $type, $price=0); + } if ($error == 0) { @@ -150,13 +155,14 @@ class MouvementStock /** - * \brief Crée un mouvement en base pour tous les sous-produits + * \brief Cr�e un mouvement en base pour tous les sous-produits * \return int <0 si ko, 0 si ok */ function _createSubProduct($user, $idProduct, $entrepot_id, $qty, $type, $price=0) { $error = 0; $pids = array(); + $pqtys = array(); $sql = "SELECT fk_product_pere, fk_product_fils, qty"; $sql.= " FROM ".MAIN_DB_PREFIX."product_association"; @@ -166,9 +172,12 @@ class MouvementStock $resql=$this->db->query($sql); if ($resql) { + $i=0; while ($obj=$this->db->fetch_object($resql)) - { - $pids[]=$obj->fk_product_fils; + { + $pids[$i]=$obj->fk_product_fils; + $pqtys[$i]=$obj->qty; + $i++; } $this->db->free($resql); } @@ -179,9 +188,9 @@ class MouvementStock } // Create movement for each subproduct - foreach($pids as $pid) + foreach($pids as $key => $value) { - $this->_create($user, $pid, $entrepot_id, $qty, $type, $price); + $this->_create($user, $pids[$key], $entrepot_id, $pqtys[$key], $type, $price); } return $error; @@ -293,7 +302,7 @@ class MouvementStock * \brief ??? * \param mvid int Id du mouvement * \param fk_product int Id produit - * \param qty float Quantité + * \param qty float Quantit� * \param price float Prix unitaire du produit * \param value_ope float Valeur du mouvement en retour * \return int <0 si ko, 0 si ok diff --git a/htdocs/societe.class.php b/htdocs/societe.class.php index 744f5c48773..cd9b2429cce 100644 --- a/htdocs/societe.class.php +++ b/htdocs/societe.class.php @@ -914,19 +914,22 @@ class Societe extends CommonObject } /** - * \brief D�finit la soci�t� comme un client - * + * \brief Define third party as a customer + * \return int <0 if KO, >0 if OK */ function set_as_client() { if ($this->id) { - $sql = "UPDATE ".MAIN_DB_PREFIX."societe "; - $sql .= " SET client = 1"; - $sql .= " WHERE rowid = " . $this->id .";"; + $sql = "UPDATE ".MAIN_DB_PREFIX."societe"; + $sql.= " SET client = 1"; + $sql.= " WHERE rowid = " . $this->id; - return $this->db->query($sql); + $resql=$this->db->query($sql); + if ($resql) return 1; + else return -1; } + return 0; } /**