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 "\n | \n
\n";
@@ -123,8 +147,8 @@ if ($conf->global->STOCK_USERSTOCK == 1)
print '';
print "';
@@ -144,11 +168,11 @@ if ($conf->facture->enabled)
{
$var=!$var;
print " | ";
- print '| '.$langs->trans("DeStockReStockOnBill").' | ';
+ print ''.$langs->trans("DeStockOnBill").' | ';
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 "\n | \n
\n";
}
@@ -170,11 +194,11 @@ if ($conf->expedition->enabled)
{
$var=!$var;
print "";
- print '| '.$langs->trans("DeStockReStockOnShipment").' | ';
+ print ''.$langs->trans("DeStockOnShipment").' | ';
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 "\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 "\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;
}
/**