From db103f37df0b3587e289f80fc49e37ae5da72bf9 Mon Sep 17 00:00:00 2001 From: Fabian Volkers <33686912+FabianVolkers@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:12:18 +0200 Subject: [PATCH] Add POST /supplierorders/{id}/line endpoint to REST API (#35286) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✏️ Fix spelling * ✨ Add postLine endpoint to supplier_orders * 🐛 Fix accessing this->commande instead of this->order --- .../fourn/class/api_supplier_orders.class.php | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/class/api_supplier_orders.class.php b/htdocs/fourn/class/api_supplier_orders.class.php index 9cf52085dfe..7a54b3be21d 100644 --- a/htdocs/fourn/class/api_supplier_orders.class.php +++ b/htdocs/fourn/class/api_supplier_orders.class.php @@ -247,7 +247,7 @@ class SupplierOrders extends DolibarrApi public function post($request_data = null) { if (!DolibarrApiAccess::$user->hasRight("fournisseur", "commande", "creer") && !DolibarrApiAccess::$user->hasRight("supplier_order", "creer")) { - throw new RestException(403, "Insuffisant rights"); + throw new RestException(403, "Insufficiant rights"); } if (!is_array($request_data)) { @@ -334,6 +334,71 @@ class SupplierOrders extends DolibarrApi return false; } + /** + * Add a line to a given supplier order + * + * @param int $id Id of order to update + * @param array $request_data OrderLine data + * @phan-param ?array $request_data + * @phpstan-param ?array $request_data + * + * @url POST {id}/lines + * + * @return int + */ + public function postLine($id, $request_data = null) + { + if (!DolibarrApiAccess::$user->hasRight('fournisseur', 'commande', 'creer')) { + throw new RestException(403); + } + + $result = $this->order->fetch($id); + if (!$result) { + throw new RestException(404, 'Supplier order not found'); + } + + if (!DolibarrApi::_checkAccessToResource('fournisseur', $this->order->id, 'commande_fournisseur', 'commande')) { + throw new RestException(403, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $request_data = (object) $request_data; + + $request_data->desc = sanitizeVal($request_data->desc, 'restricthtml'); + + $updateRes = $this->order->addline( + $request_data->desc, + $request_data->subprice, + $request_data->qty, + $request_data->tva_tx, + $request_data->localtax1_tx, + $request_data->localtax2_tx, + $request_data->fk_product, + $request_data->fk_prod_fourn_price, + $request_data->ref_fourn, + $request_data->remise_percent, + $request_data->price_base_type ? $request_data->price_base_type : 'HT', + $request_data->pu_ttc, + $request_data->product_type, + $request_data->info_bits, + $request_data->notrigger, + $request_data->date_start, + $request_data->date_end, + $request_data->array_options, + $request_data->fk_unit, + $request_data->multicurrency_subprice, + $request_data->origin, + $request_data->origin_id, + $request_data->rang, + $request_data->special_code, + ); + + if ($updateRes > 0) { + return $updateRes; + } else { + throw new RestException(400, $this->order->error); + } + } + /** * Get contacts of given supplier order *