";
- }
}
else
{
diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
index 8500fc31ac6..7aad675d0ba 100644
--- a/htdocs/langs/en_US/stocks.lang
+++ b/htdocs/langs/en_US/stocks.lang
@@ -108,4 +108,5 @@ NbOfProductBeforePeriod=Quantity of product %s in stock before selected period (
NbOfProductAfterPeriod=Quantity of product %s in stock after selected period (> %s)
MassStockMovement=Mass stock movement
SelectProductInAndOutWareHouse=Select a product, a quantity, a source warehouse and a target warehouse, then click "%s". Once this is done for all required movements, click onto "%s".
-RecordMovement=Record transfert
\ No newline at end of file
+RecordMovement=Record transfert
+ReceivingForSameOrder=Receivings for this order
\ No newline at end of file
diff --git a/htdocs/langs/es_ES/stocks.lang b/htdocs/langs/es_ES/stocks.lang
index 7fa650aeac6..cf6e5941587 100644
--- a/htdocs/langs/es_ES/stocks.lang
+++ b/htdocs/langs/es_ES/stocks.lang
@@ -47,7 +47,7 @@ PMPValue=Valor (PMP)
PMPValueShort=PMP
EnhancedValueOfWarehouses=Valor de stocks
UserWarehouseAutoCreate=Crear automáticamente existencias/almacén propio del usuario en la creación del usuario
-QtyDispatched=Cantidad desglosada
+QtyDispatched=Cantidad recibida
OrderDispatch=Recepción de stocks
RuleForStockManagementDecrease=Regla de gestión de decrementos de stock
RuleForStockManagementIncrease=Regla de gestión de incrementos de stock
@@ -61,7 +61,7 @@ ReStockOnDeleteInvoice=Incrementa los stocks físicos en la eliminación de fact
OrderStatusNotReadyToDispatch=El pedido aún no está o no tiene un estado que permita un desglose de stock.
StockDiffPhysicTeoric=Motivo de la diferencia entre valores físicos y teóricos
NoPredefinedProductToDispatch=No hay productos predefinidos en este objeto. Por lo tanto no se puede realizar un desglose de stock.
-DispatchVerb=Desglosar
+DispatchVerb=Validar recepción
StockLimitShort=Límite
StockLimit=Stock límite para alertas
PhysicalStock=Stock físico
@@ -96,16 +96,17 @@ Replenishment=Reaprovisionamiento
ReplenishmentOrders=Ordenes de reaprovisionamiento
UseVirtualStock=Usar stock virtual en lugar de stock físico
RuleForStockReplenishment=Regla para el reaprovisionamiento de stock
-SelectProductWithNotNullQty=Seleccione al menos un proveedor y un producto con una cantidad válida
-AlertOnly= Sólo alertas
-WarehouseForStockDecrease=El almacén %s será utilizado para el decremento de stock
-WarehouseForStockIncrease=El almacén %s será utilizado para el incremento de stock
+SelectProductWithNotNullQty=Seleccie al menos un producto con una cantidad distinta de cero y un proveedor
+AlertOnly=Sólo alertas
+WarehouseForStockDecrease=Para el decremento de stock se usará el almacén %s
+WarehouseForStockIncrease=Para el incremento de stock se usará el almacén %s
ForThisWarehouse=Para este almacén
-ReplenishmentStatusDesc=Esta es la lista de todos los productos con un stock físico menor que el stock deseado (o un valor de alerta si el checkbox "sólo alertas" está marcado) y que sugiere crear pedidos de proveedor para rellenar la diferencia.
-ReplenishmentOrdersDesc=Esta es la lista de todos los pedidos de proveedor abiertos
-Replenishments=Reaprovisionamientos
-NbOfProductBeforePeriod=Cantidad de producto %s en stock antes del periodo seleccionado (< %s)
-NbOfProductAfterPeriod=Cantidad de producto %s en stock después del periodo seleccionado (< %s)
-MassStockMovement=Movimiento de stock masivo
-SelectProductInAndOutWareHouse=Seleccione un producto, una cantidad, un almacén de origen y un almacén de destino, después pulse "%s". Una vez esto sea realizado para todos los movimientos requeridos, pulse en "%s".
+ReplenishmentStatusDesc=Este listado le permite ver productos con un stock inferior a la cantidad mínima deseada (o valor de alerta si el checkbok "Sólo alertas" está activado) y le sugiere crear los pedidos a proveedores para completar la diferencia.
+ReplenishmentOrdersDesc=Este es el listado de pedidos a proveedores en curso
+Replenishments=Reaprovisionamiento
+NbOfProductBeforePeriod=Cantidad del producto %s en stock antes del periodo seleccionado (< %s)
+NbOfProductAfterPeriod=Cantidad del producto %s en stock después del periodo seleccionado (> %s)
+MassStockMovement=Movimientos de stock en masa
+SelectProductInAndOutWareHouse=Selecccione un producto, una cantidad, un almacén origen y un almacén destino, seguidamente haga clic "%s". Una vez seleccionados todos los movimientos, haga clic en "%s".
RecordMovement=Registrar transferencias
+ReceivingForSameOrder=Recepciones de este pedido
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang
index 4d7fd8b6769..a39576f86f3 100644
--- a/htdocs/langs/fr_FR/stocks.lang
+++ b/htdocs/langs/fr_FR/stocks.lang
@@ -109,3 +109,4 @@ NbOfProductAfterPeriod=Quantité du produit %s en stock après la périod
MassStockMovement=Mouvement de stock en masse
SelectProductInAndOutWareHouse=Sélectionner un produit, une quantité à transférer, un entrepôt source et destination et cliquer sur "%s". Une fois tous les mouvements choisis, cliquer sur "%s".
RecordMovement=Enregistrer transferts
+ReceivingForSameOrder=Réceptions pour cette commande
\ No newline at end of file
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index 0176effbb18..8a6745da13f 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -2194,9 +2194,9 @@ class Product extends CommonObject
$product = new Product($this->db);
//var_dump($prod);
- foreach($prod as $id_product => $desc_pere) // nom_pere is 0 or id of sub_product
+ foreach($prod as $id_product => $desc_pere) // $id_product is 0 (there is no mode sub_product) or an id of a sub_product
{
- if (is_array($desc_pere)) // If this parent desc is an array, this is an array of childs
+ if (is_array($desc_pere)) // If desc_pere is an array, this means it's a child
{
$id=(! empty($desc_pere[0]) ? $desc_pere[0] :'');
$nb=(! empty($desc_pere[1]) ? $desc_pere[1] :'');
@@ -2205,20 +2205,23 @@ class Product extends CommonObject
if ($multiply < 1) $multiply=1;
//print "XXX We add id=".$id." - label=".$label." - nb=".$nb." - multiply=".$multiply." fullpath=".$compl_path.$label."\n";
- $this->fetch($id);
- $this->load_stock();
+ $this->fetch($id); // Load product
+ $this->load_stock(); // Load stock
$this->res[]= array(
'id'=>$id, // Id product
+ 'ref'=>$this->ref, // Ref product
'nb'=>$nb, // Nb of units that compose parent product
'nb_total'=>$nb*$multiply, // Nb of units for all nb of product
- 'stock'=>$this->stock_warehouse[1]->real, // Stock
+ 'stock'=>$this->stock_reel, // Stock
'stock_alert'=>$this->seuil_stock_alerte, // Stock alert
- 'fullpath' => $compl_path.$label, // Label
+ 'label'=>$label,
+ 'fullpath'=>$compl_path.$label, // Label
'type'=>$type, // Nb of units that compose parent product
- 'desiredstock' => $this->desiredstock
+ 'desiredstock'=>$this->desiredstock,
+ 'level'=>$level
);
- // Recursive call if child is an array
+ // Recursive call if there is childs to child
if (is_array($desc_pere['childs']))
{
//print 'YYY We go down for '.$desc_pere[3]." -> \n";
diff --git a/htdocs/product/composition/fiche.php b/htdocs/product/composition/fiche.php
index b56f3ce6227..f94f831cc63 100644
--- a/htdocs/product/composition/fiche.php
+++ b/htdocs/product/composition/fiche.php
@@ -53,10 +53,11 @@ $mesg = '';
$product = new Product($db);
$productid=0;
-if ($id || $ref)
+if ($id > 0 || ! empty($ref))
{
$result = $product->fetch($id,$ref);
$productid=$product->id;
+ $id=$product->id;
}
@@ -119,6 +120,10 @@ if ($cancel == $langs->trans("Cancel"))
* View
*/
+$product_fourn = new ProductFournisseur($db);
+$productstatic = new Product($db);
+$form = new Form($db);
+
// action recherche des produits par mot-cle et/ou par categorie
if ($action == 'search')
{
@@ -153,8 +158,6 @@ if ($action == 'search')
}
//print $sql;
-$productstatic = new Product($db);
-$form = new Form($db);
llxHeader("","",$langs->trans("CardProduct".$product->type));
@@ -285,9 +288,36 @@ if ($id > 0 || ! empty($ref))
print '