diff --git a/htdocs/expensereport/class/api_expensereports.class.php b/htdocs/expensereport/class/api_expensereports.class.php index 9cabb600ae4..72636a40014 100644 --- a/htdocs/expensereport/class/api_expensereports.class.php +++ b/htdocs/expensereport/class/api_expensereports.class.php @@ -52,7 +52,7 @@ class ExpenseReports extends DolibarrApi 'date', 'fk_c_type_fees', 'qty', - 'total_ttc', + 'value_unit', 'vatrate' ); @@ -337,7 +337,7 @@ class ExpenseReports extends DolibarrApi $result = $this->expensereport->addline( $request_data->qty, - $request_data->total_ttc, + $request_data->value_unit, (int) $request_data->fk_c_type_fees, $request_data->vatrate, $request_data->date, @@ -356,71 +356,75 @@ class ExpenseReports extends DolibarrApi } /** - * Update a line to given Expense Report + * Update a line of an expense report * - * @param int $id Id of Expense Report to update - * @param int $lineid Id of line to update - * @param array $request_data Expense Report data + * @since 23.0.0 Initial implementation + * + * @param int $id ID of the expense report + * @param int $lineid ID of the line to update + * @param array $request_data Expense Report data * @phan-param ?array $request_data * @phpstan-param ?array $request_data * * @url PUT {id}/lines/{lineid} * - * @return object + * @return Object|false Object with cleaned properties + * + * @throws RestException 403 + * @throws RestException 404 + * @throws RestException 500 */ - /* public function putLine($id, $lineid, $request_data = null) { - if(! DolibarrApiAccess::$user->hasRight('expensereport', 'creer')) { - throw new RestException(403); + if (!DolibarrApiAccess::$user->hasRight('expensereport', 'creer')) { + throw new RestException(403); } $result = $this->expensereport->fetch($id); - if( ! $result ) { + if (!$result) { throw new RestException(404, 'expensereport not found'); } - if( ! DolibarrApi::_checkAccessToResource('expensereport',$this->expensereport->id)) { + if (!DolibarrApi::_checkAccessToResource('expensereport', $this->expensereport->id)) { throw new RestException(403, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } + if ($this->expensereport->status != ExpenseReport::STATUS_DRAFT) { + throw new RestException(403, 'Expense report must be in draft status to update lines'); + } + + $line = new ExpenseReportLine($this->db); + $result = $line->fetch($lineid); + if ($result <= 0) { + throw new RestException(404, 'Expense report line not found'); + } + $request_data = (object) $request_data; - $request_data->desc = sanitizeVal($request_data->desc, 'restricthtml'); - $request_data->label = sanitizeVal($request_data->label); + $request_data->comments = sanitizeVal($request_data->comments, 'restricthtml'); $updateRes = $this->expensereport->updateline( - $lineid, - $request_data->desc, - $request_data->subprice, - $request_data->qty, - $request_data->remise_percent, - $request_data->tva_tx, - $request_data->localtax1_tx, - $request_data->localtax2_tx, - 'HT', - $request_data->info_bits, - $request_data->date_start, - $request_data->date_end, - $request_data->product_type, - $request_data->fk_parent_line, - 0, - $request_data->fk_fournprice, - $request_data->pa_ht, - $request_data->label, - $request_data->special_code, - $request_data->array_options, - $request_data->fk_unit + $lineid, + (int) $request_data->fk_c_type_fees, + $request_data->fk_project, + $request_data->vatrate, + $request_data->comments, + $request_data->qty, + $request_data->value_unit, + $request_data->date, + $id, + $request_data->fk_c_exp_tax_cat, + $request_data->fk_ecm_files ); if ($updateRes > 0) { $result = $this->get($id); unset($result->line); return $this->_cleanObjectDatas($result); + } else { + throw new RestException(500, 'Error updating line: '.$this->expensereport->error); } - return false; } - */ /** * Delete a line from an expense report