From e80425ec75d11f76abbc09c2f67cf98a89ca4b94 Mon Sep 17 00:00:00 2001 From: Je2fb <46494485+Je2fb@users.noreply.github.com> Date: Fri, 30 Dec 2022 16:07:10 +0100 Subject: [PATCH 1/4] Fix issue #23345 --- htdocs/expedition/class/api_shipments.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/expedition/class/api_shipments.class.php b/htdocs/expedition/class/api_shipments.class.php index 357683ef35a..0536215d57c 100644 --- a/htdocs/expedition/class/api_shipments.class.php +++ b/htdocs/expedition/class/api_shipments.class.php @@ -686,6 +686,11 @@ class Shipments extends DolibarrApi if (!empty($object->lines) && is_array($object->lines)) { foreach ($object->lines as $line) { + if (is_array($line->detail_batch)) { + foreach($line->detail_batch as $keytmp2 => $valtmp2) { + unset($line->detail_batch[$keytmp2]->db); + } + } unset($line->tva_tx); unset($line->vat_src_code); unset($line->total_ht); From 8196cfac8a5baa551b8e828dc10ae6799e058962 Mon Sep 17 00:00:00 2001 From: Je2fb <46494485+Je2fb@users.noreply.github.com> Date: Fri, 30 Dec 2022 16:13:38 +0100 Subject: [PATCH 2/4] Create api_multicurrencies.class.php Add API for retrieves curriences information with the last rate --- .../class/api_multicurrencies.class.php | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 htdocs/multicurrency/class/api_multicurrencies.class.php diff --git a/htdocs/multicurrency/class/api_multicurrencies.class.php b/htdocs/multicurrency/class/api_multicurrencies.class.php new file mode 100644 index 00000000000..2ef1ba519b4 --- /dev/null +++ b/htdocs/multicurrency/class/api_multicurrencies.class.php @@ -0,0 +1,126 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +use Luracast\Restler\RestException; + +//require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/multicurrency.lib.php'; + +/** + * API class for MultiCurrency + * + * @access protected + * @class DolibarrApiAccess {@requires user,external} + */ +class MultiCurrencies extends DolibarrApi +{ + + /** + * Constructor + */ + public function __construct() + { + global $db, $conf; + $this->db = $db; + } + + /** + * Get a list of currencies + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.product_id:=:1) and (t.date_creation:<:'20160101')" + * @return array Array of warehouse objects + * + * @throws RestException + */ + public function index($sortfield = "t.rowid", $sortorder = 'ASC', $sqlfilters = '') + { + global $db, $conf; + + $obj_ret = array(); + + $sql = "SELECT t.rowid"; + $sql .= " FROM ".$this->db->prefix()."multicurrency as t"; + $sql .= ' WHERE 1 = 1'; + // Add sql filters + if ($sqlfilters) { + $errormessage = ''; + if (!DolibarrApi::_checkFilters($sqlfilters, $errormessage)) { + throw new RestException(503, 'Error when validating parameter sqlfilters -> '.$errormessage); + } + $regexstring = '\(([^:\'\(\)]+:[^:\'\(\)]+:[^\(\)]+)\)'; + $sql .= " AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } + + $sql .= $this->db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) { + $page = 0; + } + $offset = $limit * $page; + + $sql .= $this->db->plimit($limit + 1, $offset); + } + + $result = $this->db->query($sql); + if ($result) { + $i = 0; + $num = $this->db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + while ($i < $min) { + $obj = $this->db->fetch_object($result); + $multicurrency_static = new MultiCurrency($this->db); + if ($multicurrency_static->fetch($obj->rowid)) { + $obj_ret[] = $this->_cleanObjectDatas($multicurrency_static); + } + $i++; + } + } else { + throw new RestException(503, 'Error when retrieve currencies list : '.$this->db->lasterror()); + } + if (!count($obj_ret)) { + throw new RestException(404, 'No currencies found'); + } + + return $obj_ret; + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** + * Clean sensible object datas + * + * @param MultiCurrency $object Object to clean + * @return Object Object with cleaned properties + */ + protected function _cleanObjectDatas($object) + { + // phpcs:enable + $object = parent::_cleanObjectDatas($object); + + // Clear all fields out of interrest + foreach($object as $key => $value){ + if ($key == "rate") $object->$key = $this->_cleanObjectDatas($object->$key); + if ($key == "id" || $key == "code" || $key == "rate" || $key == "date_sync") + continue; + unset($object->$key); + } + + return $object; + } + +} From ab0e069ae16c53c4b6cdd01c64a37cf9197a7a20 Mon Sep 17 00:00:00 2001 From: Je2fb <46494485+Je2fb@users.noreply.github.com> Date: Fri, 30 Dec 2022 16:16:29 +0100 Subject: [PATCH 3/4] Update functions2.lib.php Add the moduledirforclass "multicurrency" to add a API to get the currencies --- htdocs/core/lib/functions2.lib.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 05ed388d41f..692d01f9ef0 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2652,6 +2652,8 @@ function getModuleDirForApiClass($moduleobject) $moduledirforclass = 'commande'; } elseif ($moduleobject == 'shipments') { $moduledirforclass = 'expedition'; + } elseif ($moduleobject == 'multicurrencies') { + $moduledirforclass = 'multicurrency'; } elseif ($moduleobject == 'facture' || $moduleobject == 'invoice' || $moduleobject == 'invoices') { $moduledirforclass = 'compta/facture'; } elseif ($moduleobject == 'project' || $moduleobject == 'projects' || $moduleobject == 'task' || $moduleobject == 'tasks') { From 8a2f44aec485cd4e817c27c083fdc709b0f0b548 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Fri, 30 Dec 2022 15:20:12 +0000 Subject: [PATCH 4/4] Fixing style errors. --- .../expedition/class/api_shipments.class.php | 8 ++++---- .../class/api_multicurrencies.class.php | 19 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/htdocs/expedition/class/api_shipments.class.php b/htdocs/expedition/class/api_shipments.class.php index 0536215d57c..450fe943d7e 100644 --- a/htdocs/expedition/class/api_shipments.class.php +++ b/htdocs/expedition/class/api_shipments.class.php @@ -687,10 +687,10 @@ class Shipments extends DolibarrApi if (!empty($object->lines) && is_array($object->lines)) { foreach ($object->lines as $line) { if (is_array($line->detail_batch)) { - foreach($line->detail_batch as $keytmp2 => $valtmp2) { - unset($line->detail_batch[$keytmp2]->db); - } - } + foreach ($line->detail_batch as $keytmp2 => $valtmp2) { + unset($line->detail_batch[$keytmp2]->db); + } + } unset($line->tva_tx); unset($line->vat_src_code); unset($line->total_ht); diff --git a/htdocs/multicurrency/class/api_multicurrencies.class.php b/htdocs/multicurrency/class/api_multicurrencies.class.php index 2ef1ba519b4..e88f936c571 100644 --- a/htdocs/multicurrency/class/api_multicurrencies.class.php +++ b/htdocs/multicurrency/class/api_multicurrencies.class.php @@ -96,7 +96,7 @@ class MultiCurrencies extends DolibarrApi if (!count($obj_ret)) { throw new RestException(404, 'No currencies found'); } - + return $obj_ret; } @@ -111,16 +111,15 @@ class MultiCurrencies extends DolibarrApi { // phpcs:enable $object = parent::_cleanObjectDatas($object); - - // Clear all fields out of interrest - foreach($object as $key => $value){ - if ($key == "rate") $object->$key = $this->_cleanObjectDatas($object->$key); - if ($key == "id" || $key == "code" || $key == "rate" || $key == "date_sync") - continue; - unset($object->$key); + + // Clear all fields out of interrest + foreach ($object as $key => $value) { + if ($key == "rate") $object->$key = $this->_cleanObjectDatas($object->$key); + if ($key == "id" || $key == "code" || $key == "rate" || $key == "date_sync") + continue; + unset($object->$key); } - + return $object; } - }