diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php
index aefdf5f4389..00fbc7cc1a4 100644
--- a/htdocs/societe/class/api_thirdparties.class.php
+++ b/htdocs/societe/class/api_thirdparties.class.php
@@ -32,7 +32,7 @@ class Thirdparties extends DolibarrApi
* @var array $FIELDS Mandatory fields, checked when create and update object
*/
static $FIELDS = array(
- 'name',
+ 'name'
);
/**
@@ -49,6 +49,7 @@ class Thirdparties extends DolibarrApi
$this->db = $db;
require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
+ require_once DOL_DOCUMENT_ROOT.'/societe/class/societeaccount.class.php';
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
$this->company = new Societe($this->db);
@@ -114,8 +115,7 @@ class Thirdparties extends DolibarrApi
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.nom:like:'TheCompany%') and (t.date_creation:<:'20160101')"
* @return array Array of thirdparty objects
*/
- function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $sqlfilters = '')
- {
+ function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $sqlfilters = '') {
global $db, $conf;
$obj_ret = array();
@@ -130,7 +130,6 @@ class Thirdparties extends DolibarrApi
$sql = "SELECT t.rowid";
if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects)
$sql.= " FROM ".MAIN_DB_PREFIX."societe as t";
- $sql.= " LEFT JOIN ".MAIN_DB_PREFIX . "societe_extrafields as te ON te.fk_object = t.rowid";
if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale
$sql.= ", ".MAIN_DB_PREFIX."c_stcomm as st";
@@ -215,7 +214,7 @@ class Thirdparties extends DolibarrApi
if ($this->company->create(DolibarrApiAccess::$user) < 0)
throw new RestException(500, 'Error creating thirdparty', array_merge(array($this->company->error), $this->company->errors));
- return $this->company->id;
+ return $this->company->id;
}
/**
@@ -248,7 +247,7 @@ class Thirdparties extends DolibarrApi
if($this->company->update($id, DolibarrApiAccess::$user,1,'','','update'))
return $this->get($id);
- return false;
+ return false;
}
/**
@@ -314,12 +313,12 @@ class Thirdparties extends DolibarrApi
$object->client = $object->client | $soc_origin->client;
$object->fournisseur = $object->fournisseur | $soc_origin->fournisseur;
$listofproperties=array(
- 'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'url', 'barcode',
- 'idprof1', 'idprof2', 'idprof3', 'idprof4', 'idprof5', 'idprof6',
- 'tva_intra', 'effectif_id', 'forme_juridique', 'remise_percent', 'remise_supplier_percent', 'mode_reglement_supplier_id', 'cond_reglement_supplier_id', 'name_bis',
- 'stcomm_id', 'outstanding_limit', 'price_level', 'parent', 'default_lang', 'ref', 'ref_ext', 'import_key', 'fk_incoterms', 'fk_multicurrency',
- 'code_client', 'code_fournisseur', 'code_compta', 'code_compta_fournisseur',
- 'model_pdf', 'fk_projet'
+ 'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'url', 'barcode',
+ 'idprof1', 'idprof2', 'idprof3', 'idprof4', 'idprof5', 'idprof6',
+ 'tva_intra', 'effectif_id', 'forme_juridique', 'remise_percent', 'remise_supplier_percent', 'mode_reglement_supplier_id', 'cond_reglement_supplier_id', 'name_bis',
+ 'stcomm_id', 'outstanding_limit', 'price_level', 'parent', 'default_lang', 'ref', 'ref_ext', 'import_key', 'fk_incoterms', 'fk_multicurrency',
+ 'code_client', 'code_fournisseur', 'code_compta', 'code_compta_fournisseur',
+ 'model_pdf', 'fk_projet'
);
foreach ($listofproperties as $property)
{
@@ -328,7 +327,7 @@ class Thirdparties extends DolibarrApi
// Concat some data
$listofproperties=array(
- 'note_public', 'note_private'
+ 'note_public', 'note_private'
);
foreach ($listofproperties as $property)
{
@@ -374,27 +373,27 @@ class Thirdparties extends DolibarrApi
if (! $error)
{
$objects = array(
- 'Adherent' => '/adherents/class/adherent.class.php',
- 'Societe' => '/societe/class/societe.class.php',
- 'Categorie' => '/categories/class/categorie.class.php',
- 'ActionComm' => '/comm/action/class/actioncomm.class.php',
- 'Propal' => '/comm/propal/class/propal.class.php',
- 'Commande' => '/commande/class/commande.class.php',
- 'Facture' => '/compta/facture/class/facture.class.php',
- 'FactureRec' => '/compta/facture/class/facture-rec.class.php',
- 'LignePrelevement' => '/compta/prelevement/class/ligneprelevement.class.php',
- 'Contact' => '/contact/class/contact.class.php',
- 'Contrat' => '/contrat/class/contrat.class.php',
- 'Expedition' => '/expedition/class/expedition.class.php',
- 'Fichinter' => '/fichinter/class/fichinter.class.php',
- 'CommandeFournisseur' => '/fourn/class/fournisseur.commande.class.php',
- 'FactureFournisseur' => '/fourn/class/fournisseur.facture.class.php',
- 'SupplierProposal' => '/supplier_proposal/class/supplier_proposal.class.php',
- 'ProductFournisseur' => '/fourn/class/fournisseur.product.class.php',
- 'Livraison' => '/livraison/class/livraison.class.php',
- 'Product' => '/product/class/product.class.php',
- 'Project' => '/projet/class/project.class.php',
- 'User' => '/user/class/user.class.php',
+ 'Adherent' => '/adherents/class/adherent.class.php',
+ 'Societe' => '/societe/class/societe.class.php',
+ 'Categorie' => '/categories/class/categorie.class.php',
+ 'ActionComm' => '/comm/action/class/actioncomm.class.php',
+ 'Propal' => '/comm/propal/class/propal.class.php',
+ 'Commande' => '/commande/class/commande.class.php',
+ 'Facture' => '/compta/facture/class/facture.class.php',
+ 'FactureRec' => '/compta/facture/class/facture-rec.class.php',
+ 'LignePrelevement' => '/compta/prelevement/class/ligneprelevement.class.php',
+ 'Contact' => '/contact/class/contact.class.php',
+ 'Contrat' => '/contrat/class/contrat.class.php',
+ 'Expedition' => '/expedition/class/expedition.class.php',
+ 'Fichinter' => '/fichinter/class/fichinter.class.php',
+ 'CommandeFournisseur' => '/fourn/class/fournisseur.commande.class.php',
+ 'FactureFournisseur' => '/fourn/class/fournisseur.facture.class.php',
+ 'SupplierProposal' => '/supplier_proposal/class/supplier_proposal.class.php',
+ 'ProductFournisseur' => '/fourn/class/fournisseur.product.class.php',
+ 'Livraison' => '/livraison/class/livraison.class.php',
+ 'Product' => '/product/class/product.class.php',
+ 'Project' => '/projet/class/project.class.php',
+ 'User' => '/user/class/user.class.php',
);
//First, all core objects must update their tables
@@ -414,8 +413,8 @@ class Thirdparties extends DolibarrApi
if (!$errors)
{
$reshook = $hookmanager->executeHooks('replaceThirdparty', array(
- 'soc_origin' => $soc_origin->id,
- 'soc_dest' => $object->id
+ 'soc_origin' => $soc_origin->id,
+ 'soc_dest' => $object->id
), $soc_dest, $action);
if ($reshook < 0)
@@ -930,8 +929,7 @@ class Thirdparties extends DolibarrApi
* @throws 404
* @throws 405
*/
- function getInvoicesQualifiedForReplacement($id)
- {
+ function getInvoicesQualifiedForReplacement($id) {
if(! DolibarrApiAccess::$user->rights->facture->lire) {
throw new RestException(401);
@@ -973,8 +971,7 @@ class Thirdparties extends DolibarrApi
* @throws 404
* @throws 405
*/
- function getInvoicesQualifiedForCreditNote($id)
- {
+ function getInvoicesQualifiedForCreditNote($id) {
if(! DolibarrApiAccess::$user->rights->facture->lire) {
throw new RestException(401);
@@ -1003,23 +1000,24 @@ class Thirdparties extends DolibarrApi
/**
* Get CompanyBankAccount objects for thirdparty
*
- * @param int $socid Thirdparty id
+ * @param int $id ID of thirdparty
*
* @return array
+ *
+ * @url GET {id}/bankaccounts
*/
- function getCompanyBankAccount($socid)
- {
+ function getCompanyBankAccount($id){
global $db, $conf;
if(! DolibarrApiAccess::$user->rights->facture->lire) {
throw new RestException(401);
}
- if(empty($socid)) {
+ if(empty($id)) {
throw new RestException(400, 'Thirdparty ID is mandatory');
}
- if( ! DolibarrApi::_checkAccessToResource('societe',$socid)) {
+ if( ! DolibarrApi::_checkAccessToResource('societe',$id)) {
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
}
@@ -1030,7 +1028,7 @@ class Thirdparties extends DolibarrApi
$sql = "SELECT rowid, fk_soc, bank, number, code_banque, code_guichet, cle_rib, bic, iban_prefix as iban, domiciliation, proprio,";
$sql.= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur";
$sql.= " FROM ".MAIN_DB_PREFIX."societe_rib";
- if ($socid) $sql.= " WHERE fk_soc = ".$socid." ";
+ if ($id) $sql.= " WHERE fk_soc = ".$id." ";
$result = $db->query($sql);
@@ -1068,10 +1066,10 @@ class Thirdparties extends DolibarrApi
foreach($accounts as $account){
$object= [];
foreach($account as $key => $value)
- if(in_array($key, $fields)){
- $object[$key] = $value;
+ if(in_array($key, $fields)){
+ $object[$key] = $value;
- }
+ }
$returnAccounts[] = $object;
}
@@ -1081,14 +1079,14 @@ class Thirdparties extends DolibarrApi
/**
* Create CompanyBankAccount object for thirdparty
- * @param int $socid thirdparty id
- * @param array $request_data Request datas
+ * @param int $id ID of thirdparty
+ * @param array $request_data
*
* @return object ID of thirdparty
*
- * @url POST {socid}/CompanyBankAccount
+ * @url POST {id}/bankaccounts
*/
- function createCompanyBankAccount($socid, $request_data = null)
+ function createCompanyBankAccount($id, $request_data = null)
{
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
@@ -1096,7 +1094,7 @@ class Thirdparties extends DolibarrApi
$account = new CompanyBankAccount($this->db);
- $account->socid = $socid;
+ $account->socid = $id;
foreach($request_data as $field => $value) {
$account->$field = $value;
@@ -1109,22 +1107,22 @@ class Thirdparties extends DolibarrApi
if ($account->update(DolibarrApiAccess::$user) < 0)
throw new RestException(500, 'Error updating values');
- return $account;
+ return $account;
}
/**
* Update CompanyBankAccount object for thirdparty
*
- * @param int $socid Thirdparty id
- * @param int $id CompanyBankAccount's id
- * @param array $request_data Request datas
+ * @param int $id ID of thirdparty
+ * @param int $bankaccount_id ID of CompanyBankAccount
+ * @param array $request_data
*
* @return object ID of thirdparty
*
- * @url PUT {socid}/CompanyBankAccount/{id}
+ * @url PUT {id}/bankaccounts/{bankaccount_id}
*/
- function updateCompanyBankAccount($socid, $id, $request_data = null)
+ function updateCompanyBankAccount($id, $bankaccount_id, $request_data = null)
{
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
@@ -1132,10 +1130,10 @@ class Thirdparties extends DolibarrApi
$account = new CompanyBankAccount($this->db);
- $account->fetch($id, $socid, -1, '');
+ $account->fetchFromApi($bankaccount_id, $id);
- if($account->socid != $socid){
+ if($account->socid != $bankaccount_id){
throw new RestException(401);
}
@@ -1151,15 +1149,16 @@ class Thirdparties extends DolibarrApi
}
/**
- * @param int $id CompanyBankAccount's id
- * @param int $socid Thirdparty id
+ * Delete a bank account attached to a thirdparty
+ *
+ * @param int $id ID of thirdparty
+ * @param int $bankaccount_id ID of CompanyBankAccount
*
* @return int -1 if error 1 if correct deletion
*
- * @url DELETE {socid}/CompanyBankAccount/{id}
+ * @url DELETE {id}/bankaccounts/{bankaccount_id}
*/
- function deleteCompanyBankAccount($id, $socid)
- {
+ function deleteCompanyBankAccount($bankaccount_id, $id){
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
@@ -1167,14 +1166,373 @@ class Thirdparties extends DolibarrApi
$account = new CompanyBankAccount($this->db);
- $account->fetch($id);
+ $account->fetch($bankaccount_id);
- if(!$account->socid == $socid)
+ if(!$account->socid == $id)
throw new RestException(401);
return $account->delete(DolibarrApiAccess::$user);
}
+ /**
+ * Get a specific gateway attached to a thirdparty (by specifying the site key)
+ *
+ * @param int $id ID of thirdparty
+ * @param string $site Site key
+ *
+ * @return SocieteAccount[]
+ * @throws 401 Unauthorized: User does not have permission to read thirdparties
+ * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
+ *
+ * @url GET {id}/gateways/
+ */
+ function getSocieteAccounts($id, $site=null){
+
+ global $db, $conf;
+
+ if(!DolibarrApiAccess::$user->rights->societe->lire) {
+ throw new RestException(401);
+ }
+
+ if(!DolibarrApi::_checkAccessToResource('societe',$id)) {
+ throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
+ }
+
+ /**
+ * We select all the records that match the socid
+ */
+ $sql = "SELECT rowid, fk_soc, key_account, site, date_creation, tms FROM ".MAIN_DB_PREFIX."societe_account";
+ $sql.= " WHERE fk_soc = $id";
+ if($site) $sql .= " AND site ='$site'";
+
+ $result = $db->query($sql);
+
+ if($result->num_rows == 0){
+ throw new RestException(404, 'This thirdparty does not have any gateway attached or does not exist.');
+ }
+
+ $i=0;
+
+ $accounts =[];
+
+ $num = $db->num_rows($result);
+ while ($i < $num)
+ {
+ $obj = $db->fetch_object($result);
+ $account = new SocieteAccount($db);
+
+ if($account->fetch($obj->rowid)) {
+ $accounts[] = $account;
+ }
+ $i++;
+ }
+
+ $fields = ['id', 'fk_soc', 'key_account', 'site', 'date_creation', 'tms'];
+
+ $returnAccounts = [];
+
+ foreach($accounts as $account){
+ $object= [];
+ foreach($account as $key => $value)
+ if(in_array($key, $fields)){
+ $object[$key] = $value;
+
+ }
+ $returnAccounts[] = $object;
+ }
+
+ return $returnAccounts;
+ }
+
+ /**
+ * Create and attach a new gateway to an existing thirdparty
+ *
+ * Possible fields for request_data (request body) are specified in llx_societe_account table.
+ * See Table llx_societe_account wiki page for more information
+ * Example body payload :
{"key_account": "cus_DAVkLSs1LYyYI", "site": "stripe"}
+ *
+ * @param int $id ID of thirdparty
+ * @param array $request_data
+ *
+ * @return SocieteAccount
+ * @throws 401 Unauthorized: User does not have permission to read thirdparties
+ * @throws 409 Conflict: A SocieteAccount entity (gateway) already exists for this company and site.
+ * @throws 422 Unprocessable Entity: You must pass the site attribute in your request data !
+ * @throws 500 Internal Server Error: Error creating SocieteAccount account
+ * @status 201
+ *
+ * @url POST {id}/gateways
+ */
+ function createSocieteAccount($id, $request_data = null)
+ {
+ global $db;
+
+ if(! DolibarrApiAccess::$user->rights->societe->creer) {
+ throw new RestException(401);
+ }
+
+ if(!isset($request_data['site'])) {
+ throw new RestException(422, 'Unprocessable Entity: You must pass the site attribute in your request data !');
+ }
+
+ $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = ".$id." AND site = '". $request_data['site']."' ";
+ $result = $db->query($sql);
+
+ if($result->num_rows == 0 ){
+ $account = new SocieteAccount($this->db);
+ if(!isset($request_data['login'])) {
+ $account->login = "";
+ }
+ $account->fk_soc = $id;
+
+ foreach($request_data as $field => $value) {
+ $account->$field = $value;
+ }
+
+ if ($account->create(DolibarrApiAccess::$user) < 0)
+ throw new RestException(500, 'Error creating SocieteAccount entity. Ensure that the ID of thirdparty provided does exist!');
+
+ $this->_cleanObjectDatas($account);
+
+ return $account;
+ } else {
+ throw new RestException(409, 'A SocieteAccount entity already exists for this company and site.');
+ }
+ }
+
+ /**
+ * Create and attach a new (or replace an existing) specific site gateway to a thirdparty
+ *
+ * You MUST pass all values to keep (otherwise, they will be deleted) !PATCH /thirdparties/{id}/gateways/{site} endpoint.id and site
+ * supplied, a new one will be created. In that case fk_soc and site members form
+ * request body payload will be ignored and id and site query strings parameters
+ * will be used instead.
+ *
+ * @param int $id ID of thirdparty
+ * @param string $site Site key
+ * @param array $request_data
+ *
+ * @return SocieteAccount
+ * @throws 401 Unauthorized: User does not have permission to read thirdparties
+ * @throws 422 Unprocessable Entity: You must pass the site attribute in your request data !
+ * @throws 500 Internal Server Error: Error updating SocieteAccount entity
+ *
+ * @throws RestException
+ * @url PUT {id}/gateways/{site}
+ */
+ function putSocieteAccount($id, $site, $request_data = null)
+ {
+
+ global $db;
+
+ if(! DolibarrApiAccess::$user->rights->societe->creer) {
+ throw new RestException(401);
+ }
+
+ $sql = "SELECT rowid, fk_user_creat, date_creation FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = $id AND site = '$site' ";
+ $result = $db->query($sql);
+
+ // We do not found an existing SocieteAccount entity for this fk_soc and site ; we then create a new one.
+ if($result->num_rows == 0 ){
+ if(!isset($request_data['key_account'])) {
+ throw new RestException(422, 'Unprocessable Entity: You must pass the key_account attribute in your request data !');
+ }
+ $account = new SocieteAccount($this->db);
+ if(!isset($request_data['login'])) {
+ $account->login = "";
+ }
+
+ foreach($request_data as $field => $value) {
+ $account->$field = $value;
+ }
+
+ $account->fk_soc = $id;
+ $account->site = $site;
+
+ if ($account->create(DolibarrApiAccess::$user) < 0)
+ throw new RestException(500, 'Error creating SocieteAccount entity.');
+ // We found an existing SocieteAccount entity, we are replacing it
+ } else {
+
+ if(isset($request_data['site']) && $request_data['site'] !== $site) {
+ $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = ".$id." AND site = '". $request_data['site']."' ";
+ $result = $db->query($sql);
+
+ if($result->num_rows !== 0)
+ throw new RestException(409, "You are trying to update this thirdparty SocieteAccount (gateway record) from $site to ".$request_data['site'] . " but another SocieteAccount entity already exists with this site key.");
+ }
+
+ $obj = $db->fetch_object($result);
+
+ $account = new SocieteAccount($this->db);
+ $account->id = $obj->rowid;
+ $account->fk_soc = $id;
+ $account->site = $site;
+ if(!isset($request_data['login'])) {
+ $account->login = "";
+ }
+ $account->fk_user_creat = $obj->fk_user_creat;
+ $account->date_creation = $obj->date_creation;
+
+ foreach($request_data as $field => $value) {
+ $account->$field = $value;
+ }
+
+ if ($account->update(DolibarrApiAccess::$user) < 0)
+ throw new RestException(500, 'Error updating SocieteAccount entity.');
+ }
+
+ $this->_cleanObjectDatas($account);
+
+ return $account;
+ }
+
+ /**
+ * Update specified values of a specific site gateway attached to a thirdparty
+ *
+ * @param int $id Id of thirdparty
+ * @param string $site Site key
+ * @param array $request_data
+ *
+ * @return SocieteAccount
+ * @throws 401 Unauthorized: User does not have permission to read thirdparties
+ * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
+ * @throws 409 Conflict: Another SocieteAccount entity already exists for this thirdparty with this site key.
+ * @throws 500 Internal Server Error: Error updating SocieteAccount entity
+ *
+ * @url PATCH {id}/gateways/{site}
+ */
+ function patchSocieteAccount($id, $site, $request_data = null)
+ {
+ global $db;
+
+ if(! DolibarrApiAccess::$user->rights->societe->creer) {
+ throw new RestException(401);
+ }
+
+ $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = $id AND site = '$site' ";
+ $result = $db->query($sql);
+
+ if($result->num_rows == 0 ){
+ throw new RestException(404, "This thirdparty does not have $site gateway attached or does not exist.");
+ } else {
+
+ // If the user tries to edit the site member, we check first if
+ if(isset($request_data['site']) && $request_data['site'] !== $site) {
+ $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = ".$id." AND site = '". $request_data['site']."' ";
+ $result = $db->query($sql);
+
+ if($result->num_rows !== 0)
+ throw new RestException(409, "You are trying to update this thirdparty SocieteAccount (gateway record) site member from $site to ".$request_data['site'] . " but another SocieteAccount entity already exists for this thirdparty with this site key.");
+ }
+
+ $obj = $db->fetch_object($result);
+ $account = new SocieteAccount($this->db);
+ $account->fetch($obj->rowid);
+
+ foreach($request_data as $field => $value) {
+ $account->$field = $value;
+ }
+
+ if ($account->update(DolibarrApiAccess::$user) < 0)
+ throw new RestException(500, 'Error updating SocieteAccount account');
+
+ $this->_cleanObjectDatas($account);
+
+ return $account;
+ }
+ }
+
+ /**
+ * Delete a specific site gateway attached to a thirdparty (by gateway id)
+ *
+ * @param int $id ID of thirdparty
+ * @param int $site Site key
+ *
+ * @return void
+ * @throws 401 Unauthorized: User does not have permission to delete thirdparties gateways
+ * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
+ * @throws 500 Internal Server Error: Error deleting SocieteAccount entity
+ *
+ * @url DELETE {id}/gateways/{site}
+ */
+ function deleteSocieteAccount($site, $id){
+
+ global /** @var Database $db */
+ $db;
+
+ if(! DolibarrApiAccess::$user->rights->societe->creer) {
+ throw new RestException(401);
+ }
+
+ $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = $id AND site = '$site' ";
+ $result = $db->query($sql);
+
+ if($result->num_rows == 0 ){
+ throw new RestException(404);
+ } else {
+ $obj = $db->fetch_object($result);
+ $account = new SocieteAccount($this->db);
+ $account->fetch($obj->rowid);
+
+ if($account->delete(DolibarrApiAccess::$user) < 0) {
+ throw new RestException(500, "Error while deleting $site gateway attached to this third party");
+ }
+ }
+ }
+
+ /**
+ * Delete all gateways attached to a thirdparty
+ *
+ * @param int $id ID of thirdparty
+ *
+ * @return void
+ * @throws 401 Unauthorized: User does not have permission to delete thirdparties gateways
+ * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
+ * @throws 500 Internal Server Error: Error deleting SocieteAccount entity
+ *
+ * @url DELETE {id}/gateways
+ */
+ function deleteSocieteAccounts($id){
+
+ global /** @var Database $db */
+ $db;
+
+ if(! DolibarrApiAccess::$user->rights->societe->creer) {
+ throw new RestException(401);
+ }
+
+ /**
+ * We select all the records that match the socid
+ */
+
+ $sql = "SELECT rowid, fk_soc, key_account, site, date_creation, tms";
+ $sql.= " FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = $id ";
+
+ $result = $db->query($sql);
+
+ if($result->num_rows == 0 ){
+ throw new RestException(404, 'This third party does not have any gateway attached or does not exist.');
+ } else {
+ $i=0;
+
+ $num = $db->num_rows($result);
+ while ($i < $num)
+ {
+ $obj = $db->fetch_object($result);
+ $account = new SocieteAccount($db);
+ $account->fetch($obj->rowid);
+
+ if($account->delete(DolibarrApiAccess::$user) < 0) {
+ throw new RestException(500, 'Error while deleting gateways attached to this third party');
+ }
+ $i++;
+ }
+ }
+
+ }
/**
* Clean sensible object datas
@@ -1182,8 +1540,7 @@ class Thirdparties extends DolibarrApi
* @param object $object Object to clean
* @return array Array of cleaned object properties
*/
- function _cleanObjectDatas($object)
- {
+ function _cleanObjectDatas($object) {
$object = parent::_cleanObjectDatas($object);
@@ -1215,7 +1572,7 @@ class Thirdparties extends DolibarrApi
foreach (Thirdparties::$FIELDS as $field) {
if (!isset($data[$field]))
throw new RestException(400, "$field field missing");
- $thirdparty[$field] = $data[$field];
+ $thirdparty[$field] = $data[$field];
}
return $thirdparty;
}
diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php
index 7340a319534..4a9a62ba391 100644
--- a/htdocs/societe/class/societeaccount.class.php
+++ b/htdocs/societe/class/societeaccount.class.php
@@ -84,7 +84,7 @@ class SocieteAccount extends CommonObject
'pass_temp' => array('type'=>'varchar(128)', 'label'=>'Temp', 'visible'=>0, 'enabled'=>0, 'position'=>32, 'notnull'=>-1,),
'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>40, 'notnull'=>-1, 'index'=>1),
'site' => array('type'=>'varchar(128)', 'label'=>'Site', 'visible'=>-1, 'enabled'=>1, 'position'=>41),
- 'fk_website' => array('type'=>'integer:Website:website/class/website.class.php', 'label'=>'WebSite', 'visible'=>1, 'enabled'=>1, 'position'=>42, 'notnull'=>1, 'index'=>1),
+ 'fk_website' => array('type'=>'integer:Website:website/class/website.class.php', 'label'=>'WebSite', 'visible'=>1, 'enabled'=>1, 'position'=>42, 'notnull'=>-1, 'index'=>1),
'date_last_login' => array('type'=>'datetime', 'label'=>'LastConnexion', 'visible'=>2, 'enabled'=>1, 'position'=>50, 'notnull'=>0,),
'date_previous_login' => array('type'=>'datetime', 'label'=>'PreviousConnexion', 'visible'=>2, 'enabled'=>1, 'position'=>51, 'notnull'=>0,),
//'note_public' => array('type'=>'text', 'label'=>'NotePublic', 'visible'=>-1, 'enabled'=>1, 'position'=>45, 'notnull'=>-1,),
@@ -99,6 +99,7 @@ class SocieteAccount extends CommonObject
public $rowid;
public $entity;
public $key_account;
+ public $login;
public $pass_encoding;
public $pass_crypted;
public $pass_temp;