From 2e108e1e2f64d24f41e5611c54bc4f12e129e3da Mon Sep 17 00:00:00 2001 From: kastoras Date: Wed, 28 Apr 2021 00:32:37 +0300 Subject: [PATCH 1/2] Close/CLOSE #13739 Product API route added to get product stock Using GET /products/{id}/stock user can get product stock from all warehouses. Using warehouse id will get stock of warehouse given. --- htdocs/product/class/api_products.class.php | 44 +++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index 9b06b30765d..7805d7c7f52 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -1793,6 +1793,50 @@ class Products extends DolibarrApi return $result; } + /** + * Get stock data for the product id given. + * Optionaly with $selected_warehouse_id parameter user can get stock of specific warehouse + * + * @param int $id ID of Product + * @param int $selected_warehouse_id ID of warehouse + * @return int + * + * @throws RestException 500 + * @throws RestException 401 + * @throws RestException 404 + * + * @url GET {id}/stock + */ + public function getStock($id,$selected_warehouse_id=null){ + + if (!DolibarrApiAccess::$user->rights->produit->lire) { + throw new RestException(401); + } + + if (!DolibarrApi::_checkAccessToResource('product', $id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $product_model = new Product($this->db); + $product_model->fetch($id); + $product_model->load_stock(); + + $stockData = $this->_cleanObjectDatas($product_model)->stock_warehouse; + if($selected_warehouse_id){ + foreach($stockData as $warehouse_id => $warehouse){ + if($warehouse_id != $selected_warehouse_id){ + unset($stockData[$warehouse_id]); + } + } + } + + if(empty($stockData)){ + throw new RestException(404, 'No stock found'); + } + + return ['stock_warehouses'=>$stockData]; + } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Clean sensible object datas From 925c32487267387d47de20882bf969466b80c7c0 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 27 Apr 2021 21:38:03 +0000 Subject: [PATCH 2/2] Fixing style errors. --- htdocs/product/class/api_products.class.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index 7805d7c7f52..8d4b2f29522 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -1794,7 +1794,7 @@ class Products extends DolibarrApi } /** - * Get stock data for the product id given. + * Get stock data for the product id given. * Optionaly with $selected_warehouse_id parameter user can get stock of specific warehouse * * @param int $id ID of Product @@ -1807,7 +1807,8 @@ class Products extends DolibarrApi * * @url GET {id}/stock */ - public function getStock($id,$selected_warehouse_id=null){ + public function getStock($id, $selected_warehouse_id = null) + { if (!DolibarrApiAccess::$user->rights->produit->lire) { throw new RestException(401); @@ -1815,22 +1816,22 @@ class Products extends DolibarrApi if (!DolibarrApi::_checkAccessToResource('product', $id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + } $product_model = new Product($this->db); $product_model->fetch($id); $product_model->load_stock(); $stockData = $this->_cleanObjectDatas($product_model)->stock_warehouse; - if($selected_warehouse_id){ - foreach($stockData as $warehouse_id => $warehouse){ - if($warehouse_id != $selected_warehouse_id){ + if ($selected_warehouse_id) { + foreach ($stockData as $warehouse_id => $warehouse) { + if ($warehouse_id != $selected_warehouse_id) { unset($stockData[$warehouse_id]); } } } - if(empty($stockData)){ + if (empty($stockData)) { throw new RestException(404, 'No stock found'); }