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;
}
-
}