|
@@ -39,7 +39,9 @@ class MultiCurrencies extends DolibarrApi
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Get a list of currencies
|
|
|
|
|
|
+ * List Currencies
|
|
|
|
+ *
|
|
|
|
+ * Get a list of Currencies
|
|
*
|
|
*
|
|
* @param string $sortfield Sort field
|
|
* @param string $sortfield Sort field
|
|
* @param string $sortorder Sort order
|
|
* @param string $sortorder Sort order
|
|
@@ -100,6 +102,232 @@ class MultiCurrencies extends DolibarrApi
|
|
return $obj_ret;
|
|
return $obj_ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Get properties of a Currency object
|
|
|
|
+ *
|
|
|
|
+ * Return an array with Currency informations
|
|
|
|
+ *
|
|
|
|
+ * @param int $id ID of Currency
|
|
|
|
+ * @return array|mixed Data without useless information
|
|
|
|
+ *
|
|
|
|
+ * @throws RestException
|
|
|
|
+ */
|
|
|
|
+ public function get($id)
|
|
|
|
+ {
|
|
|
|
+ $multicurrency = new MultiCurrency($this->db);
|
|
|
|
+ if (!$multicurrency->fetch($id)) {
|
|
|
|
+ throw new RestException(404, 'Currency not found');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!DolibarrApiAccess::$user->rights->multicurrency->currency->read) {
|
|
|
|
+ throw new RestException(401, "Insufficient rights to read currency");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $this->_cleanObjectDatas($multicurrency);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Get properties of a Currency object by code
|
|
|
|
+ *
|
|
|
|
+ * Return an array with Currency informations
|
|
|
|
+ * @url GET /bycode/{code}
|
|
|
|
+ *
|
|
|
|
+ * @param string $code Code of Currency (ex: EUR)
|
|
|
|
+ * @return array|mixed Data without useless information
|
|
|
|
+ *
|
|
|
|
+ * @throws RestException
|
|
|
|
+ */
|
|
|
|
+ public function getByCode($code)
|
|
|
|
+ {
|
|
|
|
+ $multicurrency = new MultiCurrency($this->db);
|
|
|
|
+ if (!$multicurrency->fetch('', $code)) {
|
|
|
|
+ throw new RestException(404, 'Currency not found');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!DolibarrApiAccess::$user->rights->multicurrency->currency->read) {
|
|
|
|
+ throw new RestException(401, "Insufficient rights to read currency");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $this->_cleanObjectDatas($multicurrency);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * List Currency rates
|
|
|
|
+ *
|
|
|
|
+ * Get a list of Currency rates
|
|
|
|
+ *
|
|
|
|
+ * @url GET {id}/rates
|
|
|
|
+ * @param int $id ID of Currency
|
|
|
|
+ * @return array|mixed Data without useless information
|
|
|
|
+ *
|
|
|
|
+ * @throws RestException
|
|
|
|
+ */
|
|
|
|
+ public function getRates($id)
|
|
|
|
+ {
|
|
|
|
+ $multicurrency = new MultiCurrency($this->db);
|
|
|
|
+ if (!$multicurrency->fetch($id)) {
|
|
|
|
+ throw new RestException(404, 'Currency not found');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!DolibarrApiAccess::$user->rights->multicurrency->currency->read) {
|
|
|
|
+ throw new RestException(401, "Insufficient rights to read currency rates");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($multicurrency->fetchAllCurrencyRate() < 0) {
|
|
|
|
+ throw new RestException(500, "Error when fetching currency rates");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Clean object datas
|
|
|
|
+ foreach ($multicurrency->rates as $key => $obj) {
|
|
|
|
+ $multicurrency->rates[$key] = $this->_cleanObjectDatasRate($obj);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $multicurrency->rates;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Create Currency object
|
|
|
|
+ *
|
|
|
|
+ * @param array $request_data Request data
|
|
|
|
+ * @return int ID of Currency
|
|
|
|
+ *
|
|
|
|
+ * @throws RestException
|
|
|
|
+ */
|
|
|
|
+ public function post($request_data = null)
|
|
|
|
+ {
|
|
|
|
+ if (!DolibarrApiAccess::$user->rights->multicurrency->currency->create) {
|
|
|
|
+ throw new RestException(401, "Insufficient rights to create currency");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check parameters
|
|
|
|
+ if (!isset($request_data['code'])) {
|
|
|
|
+ throw new RestException(400, "code field missing");
|
|
|
|
+ }
|
|
|
|
+ if (!isset($request_data['name'])) {
|
|
|
|
+ throw new RestException(400, "name field missing");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $multicurrency = new MultiCurrency($this->db);
|
|
|
|
+ $multicurrency->code = $request_data['code'];
|
|
|
|
+ $multicurrency->name = $request_data['name'];
|
|
|
|
+
|
|
|
|
+ // Create Currency
|
|
|
|
+ if ($multicurrency->create(DolibarrApiAccess::$user) < 0) {
|
|
|
|
+ throw new RestException(500, "Error creating currency", array_merge(array($multicurrency->error), $multicurrency->errors));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Add default rate if defined
|
|
|
|
+ if (isset($request_data['rate']) && $request_data['rate'] > 0) {
|
|
|
|
+ if ($multicurrency->addRate(DolibarrApiAccess::$user, $request_data['rate']) < 0) {
|
|
|
|
+ throw new RestException(500, "Error adding currency rate", array_merge(array($multicurrency->error), $multicurrency->errors));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $multicurrency->id;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $multicurrency->id;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Update Currency
|
|
|
|
+ *
|
|
|
|
+ * @param int $id Id of Currency to update
|
|
|
|
+ * @param array $request_data Datas
|
|
|
|
+ * @return array The updated Currency
|
|
|
|
+ *
|
|
|
|
+ * @throws RestException
|
|
|
|
+ */
|
|
|
|
+ public function put($id, $request_data = null)
|
|
|
|
+ {
|
|
|
|
+ if (!DolibarrApiAccess::$user->rights->multicurrency->currency->create) {
|
|
|
|
+ throw new RestException(401, "Insufficient rights to update currency");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $multicurrency = new MultiCurrency($this->db);
|
|
|
|
+ if (!$multicurrency->fetch($id)) {
|
|
|
|
+ throw new RestException(404, 'Currency not found');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ foreach ($request_data as $field => $value) {
|
|
|
|
+ if ($field == 'id') {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ $multicurrency->$field = $value;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($multicurrency->update(DolibarrApiAccess::$user) < 0) {
|
|
|
|
+ throw new RestException(500, "Error updating currency", array_merge(array($multicurrency->error), $multicurrency->errors));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $this->get($id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Delete Currency
|
|
|
|
+ *
|
|
|
|
+ * @param int $id Currency ID
|
|
|
|
+ * @return array
|
|
|
|
+ *
|
|
|
|
+ * @throws RestException
|
|
|
|
+ */
|
|
|
|
+ public function delete($id)
|
|
|
|
+ {
|
|
|
|
+ if (!DolibarrApiAccess::$user->rights->multicurrency->currency->delete) {
|
|
|
|
+ throw new RestException(401, "Insufficient rights to delete currency");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $multicurrency = new MultiCurrency($this->db);
|
|
|
|
+ if (!$multicurrency->fetch($id)) {
|
|
|
|
+ throw new RestException(404, 'Currency not found');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!$multicurrency->delete(DolibarrApiAccess::$user)) {
|
|
|
|
+ throw new RestException(500, "Error deleting currency", array_merge(array($multicurrency->error), $multicurrency->errors));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return array(
|
|
|
|
+ 'success' => array(
|
|
|
|
+ 'code' => 200,
|
|
|
|
+ 'message' => 'Currency deleted'
|
|
|
|
+ )
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Update Currency rate
|
|
|
|
+ * @url PUT {id}/rates
|
|
|
|
+ *
|
|
|
|
+ * @param int $id Currency ID
|
|
|
|
+ * @param array $request_data Request data
|
|
|
|
+ * @return array The currency with the new rate
|
|
|
|
+ *
|
|
|
|
+ * @throws RestException
|
|
|
|
+ */
|
|
|
|
+ public function updateRate($id, $request_data = null)
|
|
|
|
+ {
|
|
|
|
+ if (!DolibarrApiAccess::$user->rights->multicurrency->currency->create) {
|
|
|
|
+ throw new RestException(401, "Insufficient rights to update currency rate");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Check parameters
|
|
|
|
+ if (!isset($request_data['rate'])) {
|
|
|
|
+ throw new RestException(400, "rate field missing");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $multicurrency = new MultiCurrency($this->db);
|
|
|
|
+ if (!$multicurrency->fetch($id)) {
|
|
|
|
+ throw new RestException(404, 'Currency not found');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Add rate
|
|
|
|
+ if ($multicurrency->addRate($request_data['rate']) < 0) {
|
|
|
|
+ throw new RestException(500, "Error updating currency rate", array_merge(array($multicurrency->error), $multicurrency->errors));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $this->_cleanObjectDatas($multicurrency);
|
|
|
|
+ }
|
|
|
|
+
|
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
|
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
|
|
/**
|
|
/**
|
|
* Clean sensible object datas
|
|
* Clean sensible object datas
|
|
@@ -114,8 +342,30 @@ class MultiCurrencies extends DolibarrApi
|
|
|
|
|
|
// Clear all fields out of interrest
|
|
// Clear all fields out of interrest
|
|
foreach ($object as $key => $value) {
|
|
foreach ($object as $key => $value) {
|
|
- if ($key == "rate") $object->$key = $this->_cleanObjectDatas($object->$key);
|
|
|
|
- if ($key == "id" || $key == "code" || $key == "rate" || $key == "date_sync")
|
|
|
|
|
|
+ if ($key == "rate") $object->$key = $this->_cleanObjectDatasRate($object->$key);
|
|
|
|
+ if ($key == "id" || $key == "code" || $key == "rate" || $key == "name")
|
|
|
|
+ continue;
|
|
|
|
+ unset($object->$key);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $object;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
|
|
|
|
+ /**
|
|
|
|
+ * Clean sensible MultiCurrencyRate object datas
|
|
|
|
+ *
|
|
|
|
+ * @param MultiCurrencyRate $object Object to clean
|
|
|
|
+ * @return Object Object with cleaned properties
|
|
|
|
+ */
|
|
|
|
+ protected function _cleanObjectDatasRate($object)
|
|
|
|
+ {
|
|
|
|
+ // phpcs:enable
|
|
|
|
+ $object = parent::_cleanObjectDatas($object);
|
|
|
|
+
|
|
|
|
+ // Clear all fields out of interrest
|
|
|
|
+ foreach ($object as $key => $value) {
|
|
|
|
+ if ($key == "id" || $key == "rate" || $key == "date_sync")
|
|
continue;
|
|
continue;
|
|
unset($object->$key);
|
|
unset($object->$key);
|
|
}
|
|
}
|