瀏覽代碼

Fix: Api MRP ProduceAndConsume if MoLine option "disable_stock_change" is true (#30181)

* Fix: Api MRP ProduceAndConsume if MoLine option "disable_stock_change" is true.

* fix typo
Christian Humpel 11 月之前
父節點
當前提交
e025c543f7
共有 1 個文件被更改,包括 27 次插入23 次删除
  1. 27 23
      htdocs/mrp/class/api_mos.class.php

+ 27 - 23
htdocs/mrp/class/api_mos.class.php

@@ -681,7 +681,7 @@ class Mos extends DolibarrApi
 	 *     {
 	 *       "objectid": "123",  -- rowid of MoLine
 	 *       "qty": "2",
-	 *       "fk_warehouse": "789"
+	 *       "fk_warehouse": "789" -- "0" or empty, if stock change is disabled.
 	 *     }
 	 *   ],
 	 *   "arraytoproduce": [
@@ -785,12 +785,14 @@ class Mos extends DolibarrApi
 				}
 				$qtytoprocess = $value["qty"];
 
-				if (isset($value["fk_warehouse"])) {    // If there is a warehouse to set
-					if (!($value["fk_warehouse"] > 0)) {    // If there is no warehouse set.
-						throw new RestException(500, "Field fk_warehouse required in " . $arrayname);
+				if ($molinetoprocess->disable_stock_change == false) {
+					if (isset($value["fk_warehouse"])) {    // If there is a warehouse to set
+						if (!($value["fk_warehouse"] > 0)) {    // If there is no warehouse set.
+							throw new RestException(500, "Field fk_warehouse required in " . $arrayname);
+						}
 					}
+					$fk_warehousetoprocess = $value["fk_warehouse"];
 				}
-				$fk_warehousetoprocess = $value["fk_warehouse"];
 
 				$pricetoproduce = 0;
 				if (isset($value["pricetoproduce"])) {    // If there is a price to produce set.
@@ -802,37 +804,39 @@ class Mos extends DolibarrApi
 				$pos = 0;
 				$idstockmove = 0;
 
-				// Record stock movement
-				$id_product_batch = 0;
-				$stockmove->origin_type = 'mo';
-				$stockmove->origin_id = $this->mo->id;
-				if ($arrayname == "arraytoconsume") {
-					if ($qtytoprocess >= 0) {
-						$idstockmove = $stockmove->livraison(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, 0, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
+				if ($molinetoprocess->disable_stock_change == false) {
+					// Record stock movement
+					$id_product_batch = 0;
+					$stockmove->origin_type = 'mo';
+					$stockmove->origin_id = $this->mo->id;
+					if ($arrayname == "arraytoconsume") {
+						if ($qtytoprocess >= 0) {
+							$idstockmove = $stockmove->livraison(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, 0, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
+						} else {
+							$idstockmove = $stockmove->reception(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, 0, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
+						}
 					} else {
-						$idstockmove = $stockmove->reception(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, 0, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
+						if ($qtytoprocess >= 0) {
+							$idstockmove = $stockmove->reception(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, $pricetoproduce, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
+						} else {
+							$idstockmove = $stockmove->livraison(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, 0, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
+						}
 					}
-				} else {
-					if ($qtytoprocess >= 0) {
-						$idstockmove = $stockmove->reception(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, $pricetoproduce, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
-					} else {
-						$idstockmove = $stockmove->livraison(DolibarrApiAccess::$user, $molinetoprocess->fk_product, $fk_warehousetoprocess, $qtytoprocess, 0, $labelmovement, dol_now(), '', '', $tmpproduct->status_batch, $id_product_batch, $codemovement);
+					if ($idstockmove <= 0) {
+						throw new RestException(500, $stockmove->error);
 					}
 				}
-				if ($idstockmove <= 0) {
-					throw new RestException(500, $stockmove->error);
-				}
 
 				// Record consumption
 				$moline = new MoLine($this->db);
 				$moline->fk_mo = $this->mo->id;
 				$moline->position = $pos;
 				$moline->fk_product = $tmpproduct->id;
-				$moline->fk_warehouse = $fk_warehousetoprocess;
+				$moline->fk_warehouse = $idstockmove > 0 ? $fk_warehousetoprocess : null;
 				$moline->qty = $qtytoprocess;
 				$moline->batch = '';
 				$moline->fk_mrp_production = $molinetoprocess->id;
-				$moline->fk_stock_movement = $idstockmove;
+				$moline->fk_stock_movement = $idstockmove > 0 ? $idstockmove : null;
 				$moline->fk_user_creat = DolibarrApiAccess::$user->id;
 
 				if ($arrayname == "arraytoconsume") {