NEW: Multicurrency REST API to create, update, delete, update rate...
- Add permissions for currencies and their rates - Fix invalid SQL syntax in Currency update request
This commit is contained in:
parent
eccb61e95d
commit
9fc4055af3
@ -156,6 +156,30 @@ class modMultiCurrency extends DolibarrModules
|
||||
// $this->rights[$r][5] = 'level2'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
||||
// $r++;
|
||||
|
||||
$this->rights[$r][0] = 40001;
|
||||
$this->rights[$r][1] = 'Read currencies and their rates';
|
||||
$this->rights[$r][2] = 'r';
|
||||
$this->rights[$r][3] = 1;
|
||||
$this->rights[$r][4] = 'currency';
|
||||
$this->rights[$r][5] = 'read';
|
||||
$r++;
|
||||
|
||||
$this->rights[$r][0] = 40002;
|
||||
$this->rights[$r][1] = 'Create/Update currencies and their rates';
|
||||
$this->rights[$r][2] = 'w';
|
||||
$this->rights[$r][3] = 0;
|
||||
$this->rights[$r][4] = 'currency';
|
||||
$this->rights[$r][5] = 'write';
|
||||
$r++;
|
||||
|
||||
$this->rights[$r][0] = 40003;
|
||||
$this->rights[$r][1] = 'Delete currencies and their rates';
|
||||
$this->rights[$r][2] = 'w';
|
||||
$this->rights[$r][3] = 0;
|
||||
$this->rights[$r][4] = 'currency';
|
||||
$this->rights[$r][5] = 'delete';
|
||||
$r++;
|
||||
|
||||
// Main menu entries
|
||||
$this->menu = array(); // List of menus to add
|
||||
$r = 0;
|
||||
|
||||
@ -1004,6 +1004,9 @@ Permission23001=Voir les travaux planifiés
|
||||
Permission23002=Créer/Modifier des travaux planifiées
|
||||
Permission23003=Effacer travail planifié
|
||||
Permission23004=Exécuter travail planifié
|
||||
Permission40001=Consulter les devises et leurs taux de change
|
||||
Permission40002=Créer/modifier les devises et leurs taux de change
|
||||
Permission40003=Supprimer les devises et leurs taux de change
|
||||
Permission50101=Utiliser le Point De Vente (SimplePOS)
|
||||
Permission50151=Utiliser le Point de Vente (TakePOS)
|
||||
Permission50152=Modifier les lignes de vente
|
||||
|
||||
@ -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 $sortorder Sort order
|
||||
@ -100,6 +102,232 @@ class MultiCurrencies extends DolibarrApi
|
||||
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
|
||||
/**
|
||||
* Clean sensible object datas
|
||||
@ -114,8 +342,29 @@ class MultiCurrencies extends DolibarrApi
|
||||
|
||||
// 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")
|
||||
if ($key == "rate") $object->$key = $this->_cleanObjectDatasRate($object->$key);
|
||||
if ($key == "id" || $key == "code" || $key == "rate" || $key == "name")
|
||||
continue;
|
||||
unset($object->$key);
|
||||
}
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean sensible 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;
|
||||
unset($object->$key);
|
||||
}
|
||||
|
||||
@ -299,7 +299,7 @@ class MultiCurrency extends CommonObject
|
||||
|
||||
// Update request
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET";
|
||||
$sql .= " name = '".$this->db->escape($this->name)."'";
|
||||
$sql .= " name = '".$this->db->escape($this->name)."',";
|
||||
$sql .= " code = '".$this->db->escape($this->code)."'";
|
||||
$sql .= " WHERE rowid = ".((int) $this->id);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user