2015-05-01 16:12:30 +02:00
< ? php
2024-03-14 23:39:16 +01:00
/* Copyright ( C ) 2015 Jean - François Ferry < jfefe @ aternatik . fr >
* Copyright ( C ) 2018 Pierre Chéné < pierre . chene44 @ gmail . com >
2024-10-05 18:55:36 +02:00
* Copyright ( C ) 2019 Cedric Ancelin < icedo . anc @ gmail . com >
2024-03-14 23:39:16 +01:00
* Copyright ( C ) 2020 - 2024 Frédéric France < frederic . france @ free . fr >
* Copyright ( C ) 2023 Alexandre Janniaux < alexandre . janniaux @ gmail . com >
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2024-03-16 10:08:19 +01:00
* Copyright ( C ) 2024 Jon Bendtsen < jon . bendtsen . github @ jonb . dk >
2015-05-01 16:12:30 +02:00
*
* 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2015-05-01 16:12:30 +02:00
*/
2018-02-12 04:07:45 +01:00
use Luracast\Restler\RestException ;
2015-05-01 16:12:30 +02:00
/**
2016-06-15 17:08:17 +02:00
* API class for thirdparties
2015-05-01 16:12:30 +02:00
*
2017-10-03 13:07:07 +02:00
* @ access protected
2015-05-03 01:54:04 +02:00
* @ class DolibarrApiAccess { @ requires user , external }
2017-10-03 13:07:07 +02:00
*
2015-05-01 16:12:30 +02:00
*/
2016-06-15 17:08:17 +02:00
class Thirdparties extends DolibarrApi
2015-05-06 00:55:42 +02:00
{
2018-02-12 04:07:45 +01:00
/**
*
2024-02-25 10:04:27 +01:00
* @ var array $FIELDS Mandatory fields , checked when we create and update the object
2018-02-12 04:07:45 +01:00
*/
2021-02-26 21:17:52 +01:00
public static $FIELDS = array (
2018-08-26 17:29:04 +02:00
'name'
2018-02-12 04:07:45 +01:00
);
/**
* @ var Societe $company { @ type Societe }
*/
public $company ;
/**
* Constructor
*/
2020-10-31 14:32:18 +01:00
public function __construct ()
2018-02-12 04:07:45 +01:00
{
2024-03-14 23:39:16 +01:00
global $db ;
2015-05-01 16:12:30 +02:00
$this -> db = $db ;
2017-10-22 14:48:42 +02:00
2020-12-21 15:25:15 +01:00
require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php' ;
2018-08-26 17:29:04 +02:00
require_once DOL_DOCUMENT_ROOT . '/societe/class/societeaccount.class.php' ;
2017-10-22 14:48:42 +02:00
require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php' ;
2018-10-16 21:43:40 +02:00
require_once DOL_DOCUMENT_ROOT . '/societe/class/companybankaccount.class.php' ;
2024-03-13 23:14:49 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php' ;
2017-10-22 14:48:42 +02:00
2018-02-12 04:07:45 +01:00
$this -> company = new Societe ( $this -> db );
2023-11-27 12:08:48 +01:00
if ( getDolGlobalString ( 'SOCIETE_EMAIL_MANDATORY' )) {
2018-02-12 04:07:45 +01:00
static :: $FIELDS [] = 'email' ;
}
}
/**
* Get properties of a thirdparty object
*
2024-01-12 17:18:52 +01:00
* Return an array with thirdparty information
2018-02-12 04:07:45 +01:00
*
2023-09-26 18:43:25 +02:00
* @ param int $id Id of third party to load
* @ return Object Object with cleaned properties
2018-02-12 04:07:45 +01:00
*
2023-09-26 18:43:25 +02:00
* @ throws RestException
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function get ( $id )
2018-02-12 04:07:45 +01:00
{
2020-10-31 14:32:18 +01:00
return $this -> _fetch ( $id );
}
2018-02-12 04:07:45 +01:00
2019-10-19 16:43:10 +02:00
/**
* Get properties of a thirdparty object by email .
*
2024-01-12 17:18:52 +01:00
* Return an array with thirdparty information
2019-10-19 16:43:10 +02:00
*
2020-08-29 11:37:16 +02:00
* @ param string $email Email of third party to load
2020-12-21 15:23:04 +01:00
* @ return array | mixed Cleaned Societe object
2019-10-19 16:43:10 +02:00
*
2020-08-31 21:45:51 +02:00
* @ url GET email / { email }
2019-10-19 16:43:10 +02:00
*
* @ throws RestException
*/
public function getByEmail ( $email )
{
2024-09-29 21:51:51 +02:00
return $this -> _fetch ( null , '' , '' , '' , '' , '' , '' , '' , '' , '' , $email );
2018-02-12 04:07:45 +01:00
}
2020-08-29 11:39:10 +02:00
2020-08-29 11:37:16 +02:00
/**
* Get properties of a thirdparty object by barcode .
*
2024-01-12 17:18:52 +01:00
* Return an array with thirdparty information
2020-08-29 11:37:16 +02:00
*
2020-08-29 11:43:56 +02:00
* @ param string $barcode Barcode of third party to load
2020-12-21 15:23:04 +01:00
* @ return array | mixed Cleaned Societe object
2020-08-29 11:37:16 +02:00
*
* @ url GET barcode / { barcode }
*
* @ throws RestException
*/
public function getByBarcode ( $barcode )
{
2024-09-29 21:51:51 +02:00
return $this -> _fetch ( null , '' , '' , $barcode );
2020-08-29 11:37:16 +02:00
}
2018-02-12 04:07:45 +01:00
/**
* List thirdparties
*
* Get a list of thirdparties
*
* @ param string $sortfield Sort field
* @ param string $sortorder Sort order
* @ param int $limit Limit for list
* @ param int $page Page number
* @ param int $mode Set to 1 to show only customers
* Set to 2 to show only prospects
* Set to 3 to show only those are not customer neither prospect
2019-10-15 09:52:14 +02:00
* Set to 4 to show only suppliers
2023-09-26 18:43:25 +02:00
* @ param int $category Use this param to filter list by category
2021-05-12 00:00:51 +02:00
* @ param string $sqlfilters Other criteria to filter answers separated by a comma . Syntax example " ((t.nom:like:'TheCompany%') or (t.name_alias:like:'TheCompany%')) and (t.datec:<:'20160101') "
2024-07-06 15:04:11 +02:00
* @ param string $properties Restrict the data returned to these properties . Ignored if empty . Comma separated list of properties names
* @ param bool $pagination_data If this parameter is set to true the response will include pagination data . Default value is false . Page starts from 0 *
2018-02-12 04:07:45 +01:00
* @ return array Array of thirdparty objects
*/
2024-07-06 15:04:11 +02:00
public function index ( $sortfield = " t.rowid " , $sortorder = 'ASC' , $limit = 100 , $page = 0 , $mode = 0 , $category = 0 , $sqlfilters = '' , $properties = '' , $pagination_data = false )
2020-10-31 14:32:18 +01:00
{
2018-02-12 04:07:45 +01:00
$obj_ret = array ();
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2021-04-08 19:05:28 +02:00
}
2018-02-12 04:07:45 +01:00
// case of external user, we force socids
2024-01-09 10:44:50 +01:00
$socids = DolibarrApiAccess :: $user -> socid ? ( string ) DolibarrApiAccess :: $user -> socid : '' ;
2018-02-12 04:07:45 +01:00
// If the internal user must only see his customers, force searching by him
$search_sale = 0 ;
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'client' , 'voir' ) && ! $socids ) {
2021-02-26 21:17:52 +01:00
$search_sale = DolibarrApiAccess :: $user -> id ;
}
2018-02-12 04:07:45 +01:00
$sql = " SELECT t.rowid " ;
2019-11-14 12:09:15 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " societe as t " ;
2022-12-15 20:34:23 +01:00
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " societe_extrafields AS ef ON ef.fk_object = t.rowid " ; // So we will be able to filter on extrafields
2020-10-31 14:32:18 +01:00
if ( $category > 0 ) {
2021-02-26 21:17:52 +01:00
if ( $mode != 4 ) {
$sql .= " , " . MAIN_DB_PREFIX . " categorie_societe as c " ;
}
if ( ! in_array ( $mode , array ( 1 , 2 , 3 ))) {
$sql .= " , " . MAIN_DB_PREFIX . " categorie_fournisseur as cc " ;
}
}
2019-11-14 12:09:15 +01:00
$sql .= " , " . MAIN_DB_PREFIX . " c_stcomm as st " ;
2020-05-28 19:50:27 +02:00
$sql .= " WHERE t.entity IN ( " . getEntity ( 'societe' ) . " ) " ;
2020-04-15 19:24:16 +02:00
$sql .= " AND t.fk_stcomm = st.id " ;
2021-02-26 21:17:52 +01:00
if ( $mode == 1 ) {
$sql .= " AND t.client IN (1, 3) " ;
} elseif ( $mode == 2 ) {
$sql .= " AND t.client IN (2, 3) " ;
} elseif ( $mode == 3 ) {
$sql .= " AND t.client IN (0) " ;
} elseif ( $mode == 4 ) {
$sql .= " AND t.fournisseur IN (1) " ;
}
2020-10-31 14:32:18 +01:00
// Select thirdparties of given category
if ( $category > 0 ) {
2021-02-26 21:17:52 +01:00
if ( ! empty ( $mode ) && $mode != 4 ) {
2021-06-09 15:36:47 +02:00
$sql .= " AND c.fk_categorie = " . (( int ) $category ) . " AND c.fk_soc = t.rowid " ;
2021-02-26 21:17:52 +01:00
} elseif ( ! empty ( $mode ) && $mode == 4 ) {
2021-06-09 15:36:47 +02:00
$sql .= " AND cc.fk_categorie = " . (( int ) $category ) . " AND cc.fk_soc = t.rowid " ;
2021-02-26 21:17:52 +01:00
} else {
2021-06-09 15:36:47 +02:00
$sql .= " AND ((c.fk_categorie = " . (( int ) $category ) . " AND c.fk_soc = t.rowid) OR (cc.fk_categorie = " . (( int ) $category ) . " AND cc.fk_soc = t.rowid)) " ;
2021-02-26 21:17:52 +01:00
}
2020-10-31 14:32:18 +01:00
}
2021-02-26 21:17:52 +01:00
if ( $socids ) {
2021-03-22 11:30:18 +01:00
$sql .= " AND t.rowid IN ( " . $this -> db -> sanitize ( $socids ) . " ) " ;
2021-02-26 21:17:52 +01:00
}
2024-01-09 10:44:50 +01:00
// Search on sale representative
if ( $search_sale && $search_sale != '-1' ) {
if ( $search_sale == - 2 ) {
$sql .= " AND NOT EXISTS (SELECT sc.fk_soc FROM " . MAIN_DB_PREFIX . " societe_commerciaux as sc WHERE sc.fk_soc = t.rowid) " ;
} elseif ( $search_sale > 0 ) {
$sql .= " AND EXISTS (SELECT sc.fk_soc FROM " . MAIN_DB_PREFIX . " societe_commerciaux as sc WHERE sc.fk_soc = t.rowid AND sc.fk_user = " . (( int ) $search_sale ) . " ) " ;
}
2018-02-12 04:07:45 +01:00
}
// Add sql filters
2021-02-26 21:17:52 +01:00
if ( $sqlfilters ) {
2021-12-20 20:49:32 +01:00
$errormessage = '' ;
2023-02-25 19:48:33 +01:00
$sql .= forgeSQLFromUniversalSearchCriteria ( $sqlfilters , $errormessage );
if ( $errormessage ) {
throw new RestException ( 400 , 'Error when validating parameter sqlfilters -> ' . $errormessage );
2018-02-12 04:07:45 +01:00
}
}
2024-07-06 15:04:11 +02:00
//this query will return total thirdparties with the filters given
$sqlTotals = str_replace ( 'SELECT t.rowid' , 'SELECT count(t.rowid) as total' , $sql );
2018-02-12 04:07:45 +01:00
2024-07-06 15:04:11 +02:00
$sql .= $this -> db -> order ( $sortfield , $sortorder );
2018-02-12 04:07:45 +01:00
if ( $limit ) {
2020-11-05 23:03:44 +01:00
if ( $page < 0 ) {
2018-02-12 04:07:45 +01:00
$page = 0 ;
}
$offset = $limit * $page ;
2020-09-19 23:30:29 +02:00
$sql .= $this -> db -> plimit ( $limit + 1 , $offset );
2018-02-12 04:07:45 +01:00
}
2015-05-04 00:33:44 +02:00
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2021-02-26 21:17:52 +01:00
if ( $result ) {
2020-09-19 23:30:29 +02:00
$num = $this -> db -> num_rows ( $result );
2018-02-12 04:07:45 +01:00
$min = min ( $num , ( $limit <= 0 ? $num : $limit ));
2020-10-31 14:32:18 +01:00
$i = 0 ;
2021-02-26 21:17:52 +01:00
while ( $i < $min ) {
2020-09-19 23:30:29 +02:00
$obj = $this -> db -> fetch_object ( $result );
$soc_static = new Societe ( $this -> db );
2019-11-14 12:09:15 +01:00
if ( $soc_static -> fetch ( $obj -> rowid )) {
2022-08-29 14:46:26 +02:00
if ( isModEnabled ( 'mailing' )) {
$soc_static -> getNoEmail ();
}
2023-09-26 18:04:48 +02:00
$obj_ret [] = $this -> _filterObjectProperties ( $this -> _cleanObjectDatas ( $soc_static ), $properties );
2018-02-12 04:07:45 +01:00
}
$i ++ ;
}
2020-05-21 15:05:19 +02:00
} else {
2020-09-19 23:30:29 +02:00
throw new RestException ( 503 , 'Error when retrieve thirdparties : ' . $this -> db -> lasterror ());
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( ! count ( $obj_ret )) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparties not found' );
}
2024-07-06 15:04:11 +02:00
//if $pagination_data is true the response will contain element data with all values and element pagination with pagination data(total,page,limit)
if ( $pagination_data ) {
$totalsResult = $this -> db -> query ( $sqlTotals );
$total = $this -> db -> fetch_object ( $totalsResult ) -> total ;
$tmp = $obj_ret ;
$obj_ret = [];
$obj_ret [ 'data' ] = $tmp ;
$obj_ret [ 'pagination' ] = [
'total' => ( int ) $total ,
'page' => $page , //count starts from 0
'page_count' => ceil (( int ) $total / $limit ),
'limit' => $limit
];
}
2015-05-03 16:59:47 +02:00
return $obj_ret ;
2018-02-12 04:07:45 +01:00
}
/**
* Create thirdparty object
*
* @ param array $request_data Request datas
* @ return int ID of thirdparty
*/
2020-10-31 14:32:18 +01:00
public function post ( $request_data = null )
2018-02-12 04:07:45 +01:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
// Check mandatory fields
$result = $this -> _validate ( $request_data );
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2023-11-29 16:18:34 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$this -> company -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-11-29 16:18:34 +01:00
continue ;
}
2023-12-15 12:15:33 +01:00
2024-03-14 23:39:16 +01:00
$this -> company -> $field = $this -> _checkValForAPI ( $field , $value , $this -> company );
2018-02-12 04:07:45 +01:00
}
2023-11-29 16:18:34 +01:00
2021-02-26 21:17:52 +01:00
if ( $this -> company -> create ( DolibarrApiAccess :: $user ) < 0 ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 500 , 'Error creating thirdparty' , array_merge ( array ( $this -> company -> error ), $this -> company -> errors ));
2021-02-26 21:17:52 +01:00
}
2022-08-29 14:46:26 +02:00
if ( isModEnabled ( 'mailing' ) && ! empty ( $this -> company -> email ) && isset ( $this -> company -> no_email )) {
$this -> company -> setNoEmail ( $this -> company -> no_email );
}
2018-02-12 04:07:45 +01:00
2018-08-26 17:29:04 +02:00
return $this -> company -> id ;
2018-02-12 04:07:45 +01:00
}
/**
* Update thirdparty
*
2024-02-22 01:32:55 +01:00
* @ param int $id Id of thirdparty to update
* @ param array $request_data Datas
* @ return Object | false Updated object
2024-05-03 18:24:03 +02:00
*
2024-05-03 18:03:14 +02:00
* @ throws RestException 401
* @ throws RestException 404
* @ throws RestException 500
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function put ( $id , $request_data = null )
2018-02-12 04:07:45 +01:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2021-02-26 21:17:52 +01:00
if ( $field == 'id' ) {
continue ;
}
2023-12-15 12:15:33 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$this -> company -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-12-15 12:15:33 +01:00
continue ;
}
2024-04-01 23:05:49 +02:00
if ( $field == 'array_options' && is_array ( $value )) {
foreach ( $value as $index => $val ) {
2025-01-16 10:37:29 +01:00
$this -> company -> array_options [ $index ] = $this -> _checkValForAPI ( $field , $val , $this -> company );
2024-04-01 23:05:49 +02:00
}
continue ;
}
2024-03-14 23:39:16 +01:00
$this -> company -> $field = $this -> _checkValForAPI ( $field , $value , $this -> company );
2018-02-12 04:07:45 +01:00
}
2022-08-29 14:46:26 +02:00
if ( isModEnabled ( 'mailing' ) && ! empty ( $this -> company -> email ) && isset ( $this -> company -> no_email )) {
$this -> company -> setNoEmail ( $this -> company -> no_email );
}
2024-11-04 12:34:21 +01:00
if ( $this -> company -> update ( $id , DolibarrApiAccess :: $user , 1 , 1 , 1 , 'update' , 1 ) > 0 ) {
2018-02-12 04:07:45 +01:00
return $this -> get ( $id );
2024-05-03 18:03:14 +02:00
} else {
throw new RestException ( 500 , $this -> company -> error );
2020-11-05 23:03:44 +01:00
}
2018-02-12 04:07:45 +01:00
}
/**
2024-03-16 16:21:43 +01:00
* Merge a third party into another one .
2018-02-12 04:07:45 +01:00
*
2024-03-16 16:21:43 +01:00
* Merge content ( properties , notes ) and objects ( like invoices , events , orders , proposals , ... ) of a thirdparty into a target third party ,
* then delete the merged third party .
* If a property has a defined value both in third party to delete and third party to keep , the value into the third party to
2018-02-12 04:07:45 +01:00
* delete will be ignored , the value of target thirdparty will remain , except for notes ( content is concatenated ) .
*
2024-03-16 16:21:43 +01:00
* @ param int $id ID of thirdparty to keep ( the target third party )
* @ param int $idtodelete ID of thirdparty to remove ( the thirdparty to delete ), once data has been merged into the target third party .
* @ return Object Return the resulted third party .
2018-02-12 04:07:45 +01:00
*
* @ url PUT { id } / merge / { idtodelete }
*/
2020-10-31 14:32:18 +01:00
public function merge ( $id , $idtodelete )
2018-02-12 04:07:45 +01:00
{
2021-02-26 21:17:52 +01:00
if ( $id == $idtodelete ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 400 , 'Try to merge a thirdparty into itself' );
}
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2015-05-03 18:30:59 +02:00
}
2017-10-03 13:07:07 +02:00
2019-11-14 12:09:15 +01:00
$result = $this -> company -> fetch ( $id ); // include the fetch of extra fields
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
2017-10-03 13:07:07 +02:00
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2015-05-03 18:30:59 +02:00
}
2023-08-06 13:02:33 +02:00
$companytoremove = new Societe ( $this -> db );
$result = $companytoremove -> fetch ( $idtodelete ); // include the fetch of extra fields
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
2023-08-06 13:02:33 +02:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $companytoremove -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
$user = DolibarrApiAccess :: $user ;
2023-10-26 16:30:38 +02:00
$result = $this -> company -> mergeCompany ( $companytoremove -> id );
2021-02-26 21:17:52 +01:00
if ( $result < 0 ) {
2023-08-06 13:02:33 +02:00
throw new RestException ( 500 , 'Error failed to merged thirdparty ' . $companytoremove -> id . ' into ' . $id . '. Enable and read log file for more information.' );
2018-01-31 18:01:56 +01:00
}
2018-02-12 04:07:45 +01:00
return $this -> get ( $id );
}
/**
* Delete thirdparty
*
2022-08-27 13:51:33 +02:00
* @ param int $id Thirdparty ID
2023-01-23 16:31:14 +01:00
* @ return array
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function delete ( $id )
2018-02-12 04:07:45 +01:00
{
2022-09-10 11:19:54 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'supprimer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2020-10-31 14:32:18 +01:00
$this -> company -> oldcopy = clone $this -> company ;
2022-11-26 00:50:45 +01:00
$res = $this -> company -> delete ( $id );
2022-11-26 00:57:35 +01:00
if ( $res < 0 ) {
2022-11-26 00:50:45 +01:00
throw new RestException ( 500 , " Can't delete, error occurs " );
2022-11-26 00:57:35 +01:00
} elseif ( $res == 0 ) {
2022-11-26 00:50:45 +01:00
throw new RestException ( 409 , " Can't delete, that product is probably used " );
}
return array (
'success' => array (
'code' => 200 ,
'message' => 'Object deleted'
)
);
2020-10-31 14:32:18 +01:00
}
2020-07-31 17:48:44 +02:00
/**
* Set new price level for the given thirdparty
*
* @ param int $id ID of thirdparty
* @ param int $priceLevel Price level to apply to thirdparty
2024-03-16 16:21:43 +01:00
* @ return Object Thirdparty data without useless information
2020-07-31 17:48:44 +02:00
*
2023-11-28 11:30:48 +01:00
* @ url PUT { id } / setpricelevel / { priceLevel }
2020-07-31 17:48:44 +02:00
*
* @ throws RestException 400 Price level out of bounds
* @ throws RestException 401 Access not allowed for your login
* @ throws RestException 404 Thirdparty not found
* @ throws RestException 500 Error fetching / setting price level
* @ throws RestException 501 Request needs modules " Thirdparties " and " Products " and setting Multiprices activated
*/
public function setThirdpartyPriceLevel ( $id , $priceLevel )
{
global $conf ;
2022-08-29 09:29:56 +02:00
if ( ! isModEnabled ( 'societe' )) {
2020-07-31 17:48:44 +02:00
throw new RestException ( 501 , 'Module "Thirdparties" needed for this request' );
}
2023-04-18 20:16:02 +02:00
if ( ! isModEnabled ( " product " )) {
2020-07-31 17:48:44 +02:00
throw new RestException ( 501 , 'Module "Products" needed for this request' );
}
2023-11-27 12:08:48 +01:00
if ( ! getDolGlobalString ( 'PRODUIT_MULTIPRICES' )) {
2020-07-31 17:48:44 +02:00
throw new RestException ( 501 , 'Multiprices features activation needed for this request' );
}
2024-02-09 15:58:49 +01:00
if ( $priceLevel < 1 || $priceLevel > getDolGlobalString ( 'PRODUIT_MULTIPRICES_LIMIT' )) {
2023-10-15 18:39:13 +02:00
throw new RestException ( 400 , 'Price level must be between 1 and ' . getDolGlobalString ( 'PRODUIT_MULTIPRICES_LIMIT' ));
2020-07-31 17:48:44 +02:00
}
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-04-07 14:59:25 +02:00
throw new RestException ( 403 , 'Access to thirdparty ' . $id . ' not allowed for login ' . DolibarrApiAccess :: $user -> login );
2020-07-31 17:48:44 +02:00
}
$result = $this -> company -> fetch ( $id );
if ( $result < 0 ) {
2020-10-31 14:32:18 +01:00
throw new RestException ( 404 , 'Thirdparty ' . $id . ' not found' );
2020-07-31 17:48:44 +02:00
}
if ( empty ( $result )) {
2020-10-31 14:32:18 +01:00
throw new RestException ( 500 , 'Error fetching thirdparty ' . $id , array_merge ( array ( $this -> company -> error ), $this -> company -> errors ));
2020-07-31 17:48:44 +02:00
}
if ( empty ( DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id ))) {
2024-04-07 14:59:25 +02:00
throw new RestException ( 403 , 'Access to thirdparty ' . $id . ' not allowed for login ' . DolibarrApiAccess :: $user -> login );
2020-07-31 17:48:44 +02:00
}
2021-04-01 10:05:37 +02:00
$result = $this -> company -> setPriceLevel ( $priceLevel , DolibarrApiAccess :: $user );
2020-07-31 17:48:44 +02:00
if ( $result <= 0 ) {
2020-10-31 14:32:18 +01:00
throw new RestException ( 500 , 'Error setting new price level for thirdparty ' . $id , array ( $this -> company -> db -> lasterror ()));
2020-07-31 17:48:44 +02:00
}
return $this -> _cleanObjectDatas ( $this -> company );
2018-02-12 04:07:45 +01:00
}
2024-02-09 15:58:49 +01:00
/**
* Add a customer representative to a thirdparty
*
* @ param int $id Id of thirdparty
* @ param int $representative_id Id of representative
2024-02-25 10:03:04 +01:00
* @ return int Return integer <= 0 if KO , > 0 if OK
2024-02-09 15:58:49 +01:00
*
* @ url POST { id } / representative / { representative_id }
2024-02-25 10:03:04 +01:00
*
* @ throws RestException 401 Access not allowed for your login
2024-02-25 10:04:27 +01:00
* @ throws RestException 404 User or Thirdparty not found
2024-02-09 15:58:49 +01:00
*/
public function addRepresentative ( $id , $representative_id )
{
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
throw new RestException ( 403 );
}
$result = $this -> company -> fetch ( $id );
if ( ! $result ) {
throw new RestException ( 404 , 'Thirdparty not found' );
}
$usertmp = new User ( $this -> db );
$result = $usertmp -> fetch ( $representative_id );
if ( ! $result ) {
throw new RestException ( 404 , 'User not found' );
}
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2024-02-09 15:58:49 +01:00
}
$result = $this -> company -> add_commercial ( DolibarrApiAccess :: $user , $representative_id );
return $result ;
}
/**
* Delete a customer representative to a thirdparty
*
* @ param int $id Id of thirdparty
* @ param int $representative_id Id of representative
2024-02-25 10:03:04 +01:00
* @ return int Return integer <= 0 if KO , > 0 if OK
2024-02-09 15:58:49 +01:00
*
* @ url DELETE { id } / representative / { representative_id }
2024-02-25 10:03:04 +01:00
*
* @ throws RestException 401 Access not allowed for your login
2024-02-25 10:04:27 +01:00
* @ throws RestException 404 User or Thirdparty not found
2024-02-09 15:58:49 +01:00
*/
public function deleteRepresentative ( $id , $representative_id )
{
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'supprimer' )) {
throw new RestException ( 403 );
}
$result = $this -> company -> fetch ( $id );
if ( ! $result ) {
throw new RestException ( 404 , 'Thirdparty not found' );
}
$usertmp = new User ( $this -> db );
$result = $usertmp -> fetch ( $representative_id );
if ( ! $result ) {
throw new RestException ( 404 , 'User not found' );
}
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2024-02-09 15:58:49 +01:00
}
$result = $this -> company -> del_commercial ( DolibarrApiAccess :: $user , $representative_id );
return $result ;
}
2018-02-12 04:07:45 +01:00
/**
* Get customer categories for a thirdparty
*
* @ param int $id ID of thirdparty
* @ param string $sortfield Sort field
* @ param string $sortorder Sort order
* @ param int $limit Limit for list
* @ param int $page Page number
2023-04-30 03:10:20 +02:00
* @ return array | void
2018-02-12 04:07:45 +01:00
*
* @ url GET { id } / categories
*/
2020-10-31 14:32:18 +01:00
public function getCategories ( $id , $sortfield = " s.rowid " , $sortorder = 'ASC' , $limit = 0 , $page = 0 )
2017-10-03 13:07:07 +02:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'categorie' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2017-10-03 19:09:46 +02:00
}
2018-02-12 04:07:45 +01:00
$result = $this -> company -> fetch ( $id );
2021-02-26 21:17:52 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
2017-10-03 19:01:54 +02:00
$categories = new Categorie ( $this -> db );
2017-10-03 13:07:07 +02:00
2023-04-30 03:10:20 +02:00
$arrayofcateg = $categories -> getListForItem ( $id , 'customer' , $sortfield , $sortorder , $limit , $page );
2017-10-03 13:07:07 +02:00
2023-04-30 03:10:20 +02:00
if ( is_numeric ( $arrayofcateg ) && $arrayofcateg < 0 ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 503 , 'Error when retrieve category list : ' . $categories -> error );
}
2023-05-02 03:38:57 +02:00
if ( is_numeric ( $arrayofcateg ) && $arrayofcateg >= 0 ) { // To fix a return of 0 instead of empty array of method getListForItem
2018-02-12 04:07:45 +01:00
return array ();
}
2023-04-30 03:10:20 +02:00
return $arrayofcateg ;
2018-02-12 04:07:45 +01:00
}
/**
* Add a customer category to a thirdparty
*
* @ param int $id Id of thirdparty
* @ param int $category_id Id of category
2023-05-02 03:48:21 +02:00
* @ return Object | void
2018-02-12 04:07:45 +01:00
*
2023-12-02 10:30:01 +01:00
* @ url PUT { id } / categories / { category_id }
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function addCategory ( $id , $category_id )
2018-02-12 04:07:45 +01:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
$category = new Categorie ( $this -> db );
$result = $category -> fetch ( $category_id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'category not found' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'category' , $category -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-01-27 11:55:16 +01:00
$category -> add_type ( $this -> company , 'customer' );
2018-02-12 04:07:45 +01:00
return $this -> _cleanObjectDatas ( $this -> company );
}
/**
* Remove the link between a customer category and the thirdparty
*
* @ param int $id Id of thirdparty
* @ param int $category_id Id of category
*
2023-05-02 03:38:57 +02:00
* @ return Object | void
2018-02-12 04:07:45 +01:00
*
* @ url DELETE { id } / categories / { category_id }
*/
2020-10-31 14:32:18 +01:00
public function deleteCategory ( $id , $category_id )
2018-02-12 04:07:45 +01:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
$category = new Categorie ( $this -> db );
$result = $category -> fetch ( $category_id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'category not found' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'category' , $category -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-01-27 11:55:16 +01:00
$category -> del_type ( $this -> company , 'customer' );
2018-02-12 04:07:45 +01:00
return $this -> _cleanObjectDatas ( $this -> company );
}
/**
* Get supplier categories for a thirdparty
*
* @ param int $id ID of thirdparty
* @ param string $sortfield Sort field
* @ param string $sortorder Sort order
* @ param int $limit Limit for list
* @ param int $page Page number
*
* @ return mixed
*
* @ url GET { id } / supplier_categories
*/
2020-10-31 14:32:18 +01:00
public function getSupplierCategories ( $id , $sortfield = " s.rowid " , $sortorder = 'ASC' , $limit = 0 , $page = 0 )
2018-02-12 04:07:45 +01:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'categorie' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2021-02-26 21:17:52 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
2017-10-03 19:01:54 +02:00
}
2018-02-12 04:07:45 +01:00
$categories = new Categorie ( $this -> db );
$result = $categories -> getListForItem ( $id , 'supplier' , $sortfield , $sortorder , $limit , $page );
2021-02-26 21:17:52 +01:00
if ( is_numeric ( $result ) && $result < 0 ) {
2017-10-03 19:01:54 +02:00
throw new RestException ( 503 , 'Error when retrieve category list : ' . $categories -> error );
}
2021-02-26 21:17:52 +01:00
if ( is_numeric ( $result ) && $result == 0 ) { // To fix a return of 0 instead of empty array of method getListForItem
2018-02-12 04:07:45 +01:00
return array ();
}
2017-10-03 19:01:54 +02:00
return $result ;
2018-02-12 04:07:45 +01:00
}
/**
* Add a supplier category to a thirdparty
*
* @ param int $id Id of thirdparty
* @ param int $category_id Id of category
*
* @ return mixed
*
2023-12-02 10:30:01 +01:00
* @ url PUT { id } / supplier_categories / { category_id }
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function addSupplierCategory ( $id , $category_id )
2018-02-12 04:07:45 +01:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
$category = new Categorie ( $this -> db );
$result = $category -> fetch ( $category_id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'category not found' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'category' , $category -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-01-27 11:55:16 +01:00
$category -> add_type ( $this -> company , 'supplier' );
2018-02-12 04:07:45 +01:00
return $this -> _cleanObjectDatas ( $this -> company );
}
/**
* Remove the link between a category and the thirdparty
*
* @ param int $id Id of thirdparty
* @ param int $category_id Id of category
*
* @ return mixed
*
* @ url DELETE { id } / supplier_categories / { category_id }
*/
2020-10-31 14:32:18 +01:00
public function deleteSupplierCategory ( $id , $category_id )
2018-02-12 04:07:45 +01:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
$category = new Categorie ( $this -> db );
$result = $category -> fetch ( $category_id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'category not found' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'category' , $category -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
2019-01-27 11:55:16 +01:00
$category -> del_type ( $this -> company , 'supplier' );
2018-02-12 04:07:45 +01:00
return $this -> _cleanObjectDatas ( $this -> company );
}
/**
* Get outstanding proposals of thirdparty
*
2023-09-26 18:43:25 +02:00
* @ param int $id ID of the thirdparty
* @ param string $mode 'customer' or 'supplier'
2018-02-12 04:07:45 +01:00
*
* @ url GET { id } / outstandingproposals
*
2023-09-26 18:43:25 +02:00
* @ return array List of outstandings proposals of thirdparty
2018-02-12 04:07:45 +01:00
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 400
* @ throws RestException 401
* @ throws RestException 404
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function getOutStandingProposals ( $id , $mode = 'customer' )
2018-02-12 04:07:45 +01:00
{
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( empty ( $id )) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
2018-02-01 02:29:41 +01:00
$result = $this -> company -> getOutstandingProposals ( $mode );
unset ( $result [ 'total_ht' ]);
unset ( $result [ 'total_ttc' ]);
return $result ;
2018-02-12 04:07:45 +01:00
}
/**
* Get outstanding orders of thirdparty
*
2023-09-26 18:43:25 +02:00
* @ param int $id ID of the thirdparty
* @ param string $mode 'customer' or 'supplier'
2018-02-12 04:07:45 +01:00
*
* @ url GET { id } / outstandingorders
*
2023-09-26 18:43:25 +02:00
* @ return array List of outstandings orders of thirdparty
2018-02-12 04:07:45 +01:00
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 400
* @ throws RestException 401
* @ throws RestException 404
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function getOutStandingOrder ( $id , $mode = 'customer' )
2018-02-12 04:07:45 +01:00
{
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( empty ( $id )) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
$result = $this -> company -> getOutstandingOrders ( $mode );
unset ( $result [ 'total_ht' ]);
unset ( $result [ 'total_ttc' ]);
return $result ;
}
/**
* Get outstanding invoices of thirdparty
*
2023-09-26 18:43:25 +02:00
* @ param int $id ID of the thirdparty
* @ param string $mode 'customer' or 'supplier'
2018-02-12 04:07:45 +01:00
*
* @ url GET { id } / outstandinginvoices
*
2023-09-26 18:43:25 +02:00
* @ return array List of outstandings invoices of thirdparty
2018-02-12 04:07:45 +01:00
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 400
* @ throws RestException 401
* @ throws RestException 404
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function getOutStandingInvoices ( $id , $mode = 'customer' )
2018-02-12 04:07:45 +01:00
{
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( empty ( $id )) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
$result = $this -> company -> getOutstandingBills ( $mode );
unset ( $result [ 'total_ht' ]);
unset ( $result [ 'total_ttc' ]);
return $result ;
}
2019-10-25 17:14:00 +02:00
/**
* Get representatives of thirdparty
*
2023-09-26 18:43:25 +02:00
* @ param int $id ID of the thirdparty
2023-12-02 22:28:04 +01:00
* @ param int $mode 0 = Array with properties , 1 = Array of id .
2019-10-25 17:14:00 +02:00
*
* @ url GET { id } / representatives
*
2023-09-26 18:43:25 +02:00
* @ return array List of representatives of thirdparty
2019-10-25 17:14:00 +02:00
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 400
* @ throws RestException 401
* @ throws RestException 404
2019-10-25 17:14:00 +02:00
*/
2020-10-31 14:32:18 +01:00
public function getSalesRepresentatives ( $id , $mode = 0 )
2019-10-25 17:14:00 +02:00
{
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2019-10-25 17:14:00 +02:00
}
2019-11-14 12:09:15 +01:00
if ( empty ( $id )) {
2019-10-25 17:14:00 +02:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2019-10-25 17:14:00 +02:00
}
$result = $this -> company -> fetch ( $id );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2019-10-25 17:14:00 +02:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
$result = $this -> company -> getSalesRepresentatives ( DolibarrApiAccess :: $user , $mode );
return $result ;
}
2018-02-12 04:07:45 +01:00
/**
* Get fixed amount discount of a thirdparty ( all sources : deposit , credit note , commercial offers ... )
*
2023-09-26 18:43:25 +02:00
* @ param int $id ID of the thirdparty
* @ param string $filter Filter exceptional discount . " none " will return every discount , " available " returns unapplied discounts , " used " returns applied discounts { @ choice none , available , used }
* @ param string $sortfield Sort field
* @ param string $sortorder Sort order
2018-02-12 04:07:45 +01:00
*
* @ url GET { id } / fixedamountdiscounts
*
* @ return array List of fixed discount of thirdparty
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 400
* @ throws RestException 401
* @ throws RestException 404
* @ throws RestException 503
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function getFixedAmountDiscounts ( $id , $filter = " none " , $sortfield = " f.type " , $sortorder = 'ASC' )
2018-02-12 04:07:45 +01:00
{
$obj_ret = array ();
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
2019-11-16 23:24:29 +01:00
if ( empty ( $id )) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-16 23:24:29 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
$result = $this -> company -> fetch ( $id );
2019-11-16 23:24:29 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 404 , 'Thirdparty not found' );
}
2018-12-02 14:31:45 +01:00
$sql = " SELECT f.ref, f.type as factype, re.fk_facture_source, re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc, re.description, re.fk_facture, re.fk_facture_line " ;
2018-02-12 04:07:45 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " societe_remise_except as re, " . MAIN_DB_PREFIX . " facture as f " ;
2021-03-30 19:12:07 +02:00
$sql .= " WHERE f.rowid = re.fk_facture_source AND re.fk_soc = " . (( int ) $id );
2021-02-26 21:17:52 +01:00
if ( $filter == " available " ) {
$sql .= " AND re.fk_facture IS NULL AND re.fk_facture_line IS NULL " ;
}
if ( $filter == " used " ) {
$sql .= " AND (re.fk_facture IS NOT NULL OR re.fk_facture_line IS NOT NULL) " ;
}
2018-02-12 04:07:45 +01:00
2019-11-14 12:09:15 +01:00
$sql .= $this -> db -> order ( $sortfield , $sortorder );
2018-02-12 04:07:45 +01:00
$result = $this -> db -> query ( $sql );
2019-11-14 12:09:15 +01:00
if ( ! $result ) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 503 , $this -> db -> lasterror ());
} else {
$num = $this -> db -> num_rows ( $result );
2019-11-14 12:09:15 +01:00
while ( $obj = $this -> db -> fetch_object ( $result )) {
2018-02-12 04:07:45 +01:00
$obj_ret [] = $obj ;
}
}
return $obj_ret ;
}
/**
* Return list of invoices qualified to be replaced by another invoice .
*
* @ param int $id Id of thirdparty
*
* @ url GET { id } / getinvoicesqualifiedforreplacement
*
* @ return array
2020-02-20 13:42:43 +01:00
* @ throws RestException 400
* @ throws RestException 401
* @ throws RestException 404
* @ throws RestException 405
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function getInvoicesQualifiedForReplacement ( $id )
{
2023-06-19 23:18:13 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'facture' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( empty ( $id )) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
/* $result = $this -> thirdparty -> fetch ( $id );
if ( ! $result ) {
throw new RestException ( 404 , 'Thirdparty not found' );
} */
2024-04-21 10:49:13 +02:00
require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
2018-02-12 04:07:45 +01:00
$invoice = new Facture ( $this -> db );
$result = $invoice -> list_replacable_invoices ( $id );
2019-11-14 12:09:15 +01:00
if ( $result < 0 ) {
2022-10-23 11:19:23 +02:00
throw new RestException ( 405 , $invoice -> error );
2018-02-12 04:07:45 +01:00
}
return $result ;
}
/**
* Return list of invoices qualified to be corrected by a credit note .
* Invoices matching the following rules are returned
2024-01-12 17:18:52 +01:00
* ( validated + payment on process ) or classified ( paid completely or paid partially ) + not already replaced + not already a credit note
2018-02-12 04:07:45 +01:00
*
* @ param int $id Id of thirdparty
*
* @ url GET { id } / getinvoicesqualifiedforcreditnote
*
* @ return array
2020-02-20 13:42:43 +01:00
*
* @ throws RestException 400
* @ throws RestException 401
* @ throws RestException 404
* @ throws RestException 405
2018-02-12 04:07:45 +01:00
*/
2020-10-31 14:32:18 +01:00
public function getInvoicesQualifiedForCreditNote ( $id )
{
2023-06-19 23:18:13 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'facture' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-02-12 04:07:45 +01:00
}
2019-11-14 12:09:15 +01:00
if ( empty ( $id )) {
2018-02-12 04:07:45 +01:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-02-12 04:07:45 +01:00
}
/* $result = $this -> thirdparty -> fetch ( $id );
if ( ! $result ) {
throw new RestException ( 404 , 'Thirdparty not found' );
} */
2024-04-21 10:49:13 +02:00
require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php' ;
2018-02-12 04:07:45 +01:00
$invoice = new Facture ( $this -> db );
$result = $invoice -> list_qualified_avoir_invoices ( $id );
2019-11-14 12:09:15 +01:00
if ( $result < 0 ) {
2022-10-23 11:19:23 +02:00
throw new RestException ( 405 , $invoice -> error );
2018-02-12 04:07:45 +01:00
}
return $result ;
}
2018-08-26 18:15:14 +02:00
2024-03-11 22:36:07 +01:00
/**
* Get CompanyNotification objects for thirdparty
*
* @ param int $id ID of thirdparty
*
* @ return array
*
* @ url GET { id } / notifications
*/
public function getCompanyNotification ( $id )
{
if ( empty ( $id )) {
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2024-03-19 15:55:23 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
throw new RestException ( 403 );
}
2024-03-11 22:36:07 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-03-19 15:55:23 +01:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2024-03-11 22:36:07 +01:00
}
/**
* We select all the records that match the socid
*/
2024-08-07 02:58:05 +02:00
$sql = " SELECT rowid as id, fk_action as event, fk_soc as socid, fk_contact as contact_id, type, datec, tms " ;
2024-03-11 22:36:07 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " notify_def " ;
if ( $id ) {
$sql .= " WHERE fk_soc = " . (( int ) $id );
}
$result = $this -> db -> query ( $sql );
if ( $this -> db -> num_rows ( $result ) == 0 ) {
throw new RestException ( 404 , 'Notification not found' );
}
$i = 0 ;
2024-03-13 23:31:27 +01:00
$notifications = array ();
2024-03-11 22:36:07 +01:00
if ( $result ) {
$num = $this -> db -> num_rows ( $result );
while ( $i < $num ) {
$obj = $this -> db -> fetch_object ( $result );
2024-03-13 22:13:57 +01:00
$notifications [] = $obj ;
2024-03-11 22:36:07 +01:00
$i ++ ;
}
} else {
2024-03-11 23:24:26 +01:00
throw new RestException ( 404 , 'No notifications found' );
2024-03-11 22:36:07 +01:00
}
2024-08-07 02:58:05 +02:00
$fields = array ( 'id' , 'socid' , 'event' , 'contact_id' , 'datec' , 'tms' , 'type' );
2024-03-11 22:36:07 +01:00
2024-03-11 23:24:26 +01:00
$returnNotifications = array ();
2024-03-11 22:36:07 +01:00
foreach ( $notifications as $notification ) {
$object = array ();
foreach ( $notification as $key => $value ) {
if ( in_array ( $key , $fields )) {
$object [ $key ] = $value ;
}
}
2024-03-11 23:24:26 +01:00
$returnNotifications [] = $object ;
2024-03-11 22:36:07 +01:00
}
2024-03-11 23:24:26 +01:00
return $returnNotifications ;
2024-03-11 22:36:07 +01:00
}
2024-03-16 09:46:32 +01:00
/**
* Create CompanyNotification object for thirdparty
* @ param int $id ID of thirdparty
* @ param array $request_data Request data
*
* @ return array | mixed Notification of thirdparty
*
* @ url POST { id } / notifications
*/
public function createCompanyNotification ( $id , $request_data = null )
{
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
throw new RestException ( 403 , " User has no right to update thirdparties " );
}
if ( $this -> company -> fetch ( $id ) <= 0 ) {
throw new RestException ( 404 , 'Error creating Thirdparty Notification, Thirdparty doesn\'t exists' );
}
$notification = new Notify ( $this -> db );
$notification -> socid = $id ;
foreach ( $request_data as $field => $value ) {
$notification -> $field = $value ;
}
2024-08-11 00:20:45 +02:00
$event = $notification -> event ;
if ( ! $event ) {
throw new RestException ( 500 , 'Error creating Thirdparty Notification, request_data missing event' );
}
$socid = $notification -> socid ;
$contact_id = $notification -> contact_id ;
$exists_sql = " SELECT rowid, fk_action as event, fk_soc as socid, fk_contact as contact_id, type, datec, tms as datem " ;
$exists_sql .= " FROM " . MAIN_DB_PREFIX . " notify_def " ;
$exists_sql .= " WHERE fk_action = ' " . $this -> db -> escape ( $event ) . " ' " ;
$exists_sql .= " AND fk_soc = ' " . $this -> db -> escape ( $socid ) . " ' " ;
$exists_sql .= " AND fk_contact = ' " . $this -> db -> escape ( $contact_id ) . " ' " ;
$exists_result = $this -> db -> query ( $exists_sql );
2024-08-14 01:24:55 +02:00
if ( $this -> db -> num_rows ( $exists_result ) > 0 ) {
2024-08-11 00:20:45 +02:00
throw new RestException ( 403 , 'Notification already exists' );
}
2024-03-16 09:46:32 +01:00
if ( $notification -> create ( DolibarrApiAccess :: $user ) < 0 ) {
throw new RestException ( 500 , 'Error creating Thirdparty Notification' );
}
2024-08-11 00:20:45 +02:00
if ( $notification -> update ( DolibarrApiAccess :: $user ) < 0 ) {
throw new RestException ( 500 , 'Error updating values' );
}
return $this -> _cleanObjectDatas ( $notification );
}
/**
* Create CompanyNotification object for thirdparty using action trigger code
* @ param int $id ID of thirdparty
* @ param string $code Action Trigger code
* @ param array $request_data Request data
*
* @ return array | mixed Notification of thirdparty
2024-08-14 01:24:55 +02:00
* @ phan - return Notify
2024-08-11 00:20:45 +02:00
*
* @ url POST { id } / notificationsbycode / { code }
*/
public function createCompanyNotificationByCode ( $id , $code , $request_data = null )
{
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
throw new RestException ( 403 , " User has no right to update thirdparties " );
}
if ( $this -> company -> fetch ( $id ) <= 0 ) {
throw new RestException ( 404 , 'Error creating Thirdparty Notification, Thirdparty doesn\'t exists' );
}
$notification = new Notify ( $this -> db );
$notification -> socid = $id ;
$sql = " SELECT t.rowid as id FROM " . MAIN_DB_PREFIX . " c_action_trigger as t " ;
$sql .= " WHERE t.code = ' " . $this -> db -> escape ( $code ) . " ' " ;
$result = $this -> db -> query ( $sql );
if ( $this -> db -> num_rows ( $result ) == 0 ) {
throw new RestException ( 404 , 'Action Trigger code not found' );
}
$notification -> event = $this -> db -> fetch_row ( $result )[ 0 ];
foreach ( $request_data as $field => $value ) {
if ( $field === 'event' ) {
throw new RestException ( 500 , 'Error creating Thirdparty Notification, request_data contains event key' );
}
if ( $field === 'fk_action' ) {
throw new RestException ( 500 , 'Error creating Thirdparty Notification, request_data contains fk_action key' );
}
$notification -> $field = $value ;
}
$event = $notification -> event ;
$socid = $notification -> socid ;
$contact_id = $notification -> contact_id ;
$exists_sql = " SELECT rowid, fk_action as event, fk_soc as socid, fk_contact as contact_id, type, datec, tms as datem " ;
$exists_sql .= " FROM " . MAIN_DB_PREFIX . " notify_def " ;
$exists_sql .= " WHERE fk_action = ' " . $this -> db -> escape ( $event ) . " ' " ;
$exists_sql .= " AND fk_soc = ' " . $this -> db -> escape ( $socid ) . " ' " ;
$exists_sql .= " AND fk_contact = ' " . $this -> db -> escape ( $contact_id ) . " ' " ;
$exists_result = $this -> db -> query ( $exists_sql );
2024-08-14 01:24:55 +02:00
if ( $this -> db -> num_rows ( $exists_result ) > 0 ) {
2024-08-11 00:20:45 +02:00
throw new RestException ( 403 , 'Notification already exists' );
}
if ( $notification -> create ( DolibarrApiAccess :: $user ) < 0 ) {
throw new RestException ( 500 , 'Error creating Thirdparty Notification, are request_data well formed?' );
}
2024-03-16 09:46:32 +01:00
if ( $notification -> update ( DolibarrApiAccess :: $user ) < 0 ) {
throw new RestException ( 500 , 'Error updating values' );
}
return $this -> _cleanObjectDatas ( $notification );
}
2024-03-11 22:36:07 +01:00
/**
* Delete a CompanyNotification attached to a thirdparty
*
* @ param int $id ID of thirdparty
* @ param int $notification_id ID of CompanyNotification
*
* @ return int - 1 if error 1 if correct deletion
*
* @ url DELETE { id } / notifications / { notification_id }
*/
public function deleteCompanyNotification ( $id , $notification_id )
{
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
throw new RestException ( 403 );
}
2024-03-13 23:14:49 +01:00
$notification = new Notify ( $this -> db );
2024-03-11 22:36:07 +01:00
$notification -> fetch ( $notification_id );
2024-03-15 22:40:43 +01:00
$socid = ( int ) $notification -> socid ;
2024-03-11 22:36:07 +01:00
2024-03-15 22:40:43 +01:00
if ( $socid == $id ) {
return $notification -> delete ( DolibarrApiAccess :: $user );
} else {
throw new RestException ( 403 , " Not allowed due to bad consistency of input data " );
}
2024-03-11 22:36:07 +01:00
}
2024-03-15 23:50:01 +01:00
/**
* Update CompanyNotification object for thirdparty
*
* @ param int $id ID of thirdparty
* @ param int $notification_id ID of CompanyNotification
* @ param array $request_data Request data
*
* @ return array | mixed Notification of thirdparty
*
* @ url PUT { id } / notifications / { notification_id }
*/
public function updateCompanyNotification ( $id , $notification_id , $request_data = null )
{
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
throw new RestException ( 403 , " User has no right to update thirdparties " );
}
if ( $this -> company -> fetch ( $id ) <= 0 ) {
throw new RestException ( 404 , 'Error creating Company Notification, Company doesn\'t exists' );
}
$notification = new Notify ( $this -> db );
// @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2024-03-16 00:14:59 +01:00
$notification -> fetch ( $notification_id , $id );
2024-03-15 23:50:01 +01:00
if ( $notification -> socid != $id ) {
throw new RestException ( 403 , " Not allowed due to bad consistency of input data " );
}
foreach ( $request_data as $field => $value ) {
$notification -> $field = $value ;
}
if ( $notification -> update ( DolibarrApiAccess :: $user ) < 0 ) {
throw new RestException ( 500 , 'Error updating values' );
}
return $this -> _cleanObjectDatas ( $notification );
}
2018-06-27 10:33:57 +02:00
/**
* Get CompanyBankAccount objects for thirdparty
2018-06-30 01:34:51 +02:00
*
2018-08-26 17:29:04 +02:00
* @ param int $id ID of thirdparty
2018-06-30 01:34:51 +02:00
*
2018-06-27 10:33:57 +02:00
* @ return array
2018-08-26 17:29:04 +02:00
*
* @ url GET { id } / bankaccounts
2018-06-27 10:33:57 +02:00
*/
2020-10-31 14:32:18 +01:00
public function getCompanyBankAccount ( $id )
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-06-27 10:33:57 +02:00
}
2019-11-14 12:09:15 +01:00
if ( empty ( $id )) {
2018-06-27 10:33:57 +02:00
throw new RestException ( 400 , 'Thirdparty ID is mandatory' );
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-06-27 10:33:57 +02:00
}
/**
2018-06-27 11:01:20 +02:00
* We select all the records that match the socid
2018-06-27 10:33:57 +02:00
*/
2024-02-21 16:43:41 +01:00
$sql = " SELECT rowid, fk_soc, bank, number, code_banque, code_guichet, cle_rib, bic, iban_prefix as iban, domiciliation as address, proprio, " ;
2019-11-14 12:09:15 +01:00
$sql .= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " societe_rib " ;
2021-02-26 21:17:52 +01:00
if ( $id ) {
2021-03-30 19:12:07 +02:00
$sql .= " WHERE fk_soc = " . (( int ) $id );
2021-02-26 21:17:52 +01:00
}
2018-06-27 10:33:57 +02:00
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2018-06-27 10:33:57 +02:00
2022-10-23 11:19:23 +02:00
if ( $this -> db -> num_rows ( $result ) == 0 ) {
2018-06-27 10:33:57 +02:00
throw new RestException ( 404 , 'Account not found' );
2018-06-30 01:34:51 +02:00
}
2018-06-27 10:33:57 +02:00
2019-11-14 12:09:15 +01:00
$i = 0 ;
2018-06-27 10:33:57 +02:00
2019-07-14 00:31:28 +02:00
$accounts = array ();
2018-06-27 10:33:57 +02:00
2021-02-26 21:17:52 +01:00
if ( $result ) {
2020-09-19 23:30:29 +02:00
$num = $this -> db -> num_rows ( $result );
2021-02-26 21:17:52 +01:00
while ( $i < $num ) {
2020-09-19 23:30:29 +02:00
$obj = $this -> db -> fetch_object ( $result );
2024-11-25 03:11:31 +01:00
2020-09-19 23:30:29 +02:00
$account = new CompanyBankAccount ( $this -> db );
2019-11-14 12:09:15 +01:00
if ( $account -> fetch ( $obj -> rowid )) {
2018-06-27 10:33:57 +02:00
$accounts [] = $account ;
}
$i ++ ;
}
2020-05-21 15:05:19 +02:00
} else {
2018-06-27 10:33:57 +02:00
throw new RestException ( 404 , 'Account not found' );
}
2018-06-30 01:34:51 +02:00
2018-06-27 10:33:57 +02:00
2019-07-14 00:31:28 +02:00
$fields = array ( 'socid' , 'default_rib' , 'frstrecur' , '1000110000001' , 'datec' , 'datem' , 'label' , 'bank' , 'bic' , 'iban' , 'id' , 'rum' );
2018-06-27 10:33:57 +02:00
2019-07-14 00:31:28 +02:00
$returnAccounts = array ();
2018-06-27 10:33:57 +02:00
2019-10-27 17:01:23 +01:00
foreach ( $accounts as $account ) {
$object = array ();
foreach ( $account as $key => $value ) {
if ( in_array ( $key , $fields )) {
2024-10-24 13:03:52 +02:00
if ( $key == 'iban' ) {
$object [ $key ] = dolDecrypt ( $value );
} else {
$object [ $key ] = $value ;
}
2018-08-26 17:29:04 +02:00
}
2019-10-27 17:01:23 +01:00
}
2018-06-27 10:33:57 +02:00
$returnAccounts [] = $object ;
2018-06-30 01:34:51 +02:00
}
2018-06-27 10:33:57 +02:00
return $returnAccounts ;
}
/**
* Create CompanyBankAccount object for thirdparty
2018-08-26 17:29:04 +02:00
* @ param int $id ID of thirdparty
2018-08-26 20:16:21 +02:00
* @ param array $request_data Request data
2018-06-30 01:34:51 +02:00
*
2020-12-21 15:23:04 +01:00
* @ return array | mixed BankAccount of thirdparty
2018-06-30 01:34:51 +02:00
*
2018-08-26 17:29:04 +02:00
* @ url POST { id } / bankaccounts
2018-06-27 10:33:57 +02:00
*/
2020-10-31 14:32:18 +01:00
public function createCompanyBankAccount ( $id , $request_data = null )
2018-06-27 10:33:57 +02:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-06-27 10:33:57 +02:00
}
2020-04-13 09:15:01 +02:00
if ( $this -> company -> fetch ( $id ) <= 0 ) {
throw new RestException ( 404 , 'Error creating Company Bank account, Company doesn\'t exists' );
}
2018-06-27 10:33:57 +02:00
$account = new CompanyBankAccount ( $this -> db );
2018-08-26 17:29:04 +02:00
$account -> socid = $id ;
2018-06-27 10:33:57 +02:00
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2023-12-15 12:15:33 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$this -> company -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-12-15 12:15:33 +01:00
continue ;
}
2024-04-02 12:28:55 +02:00
$account -> $field = $this -> _checkValForAPI ( 'extrafields' , $value , $account );
2018-06-27 10:33:57 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $account -> create ( DolibarrApiAccess :: $user ) < 0 ) {
2018-06-27 10:33:57 +02:00
throw new RestException ( 500 , 'Error creating Company Bank account' );
2021-02-26 21:17:52 +01:00
}
2018-06-27 10:33:57 +02:00
2020-04-13 09:15:01 +02:00
if ( empty ( $account -> rum )) {
require_once DOL_DOCUMENT_ROOT . '/compta/prelevement/class/bonprelevement.class.php' ;
$prelevement = new BonPrelevement ( $this -> db );
$account -> rum = $prelevement -> buildRumNumber ( $this -> company -> code_client , $account -> datec , $account -> id );
$account -> date_rum = dol_now ();
}
2018-06-27 10:33:57 +02:00
2021-02-26 21:17:52 +01:00
if ( $account -> update ( DolibarrApiAccess :: $user ) < 0 ) {
2018-06-27 10:33:57 +02:00
throw new RestException ( 500 , 'Error updating values' );
2021-02-26 21:17:52 +01:00
}
2018-06-30 01:34:51 +02:00
2020-04-13 09:25:06 +02:00
return $this -> _cleanObjectDatas ( $account );
2018-06-27 10:33:57 +02:00
}
/**
* Update CompanyBankAccount object for thirdparty
2018-06-30 01:34:51 +02:00
*
2018-08-26 17:29:04 +02:00
* @ param int $id ID of thirdparty
* @ param int $bankaccount_id ID of CompanyBankAccount
2018-08-26 20:16:21 +02:00
* @ param array $request_data Request data
2018-06-30 01:34:51 +02:00
*
2020-12-21 15:23:04 +01:00
* @ return array | mixed BankAccount of thirdparty
2018-06-30 01:34:51 +02:00
*
2018-08-26 17:29:04 +02:00
* @ url PUT { id } / bankaccounts / { bankaccount_id }
2018-06-27 10:33:57 +02:00
*/
2020-10-31 14:32:18 +01:00
public function updateCompanyBankAccount ( $id , $bankaccount_id , $request_data = null )
2018-06-27 10:33:57 +02:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-06-27 10:33:57 +02:00
}
2020-04-13 09:15:01 +02:00
if ( $this -> company -> fetch ( $id ) <= 0 ) {
throw new RestException ( 404 , 'Error creating Company Bank account, Company doesn\'t exists' );
}
2018-06-27 10:33:57 +02:00
$account = new CompanyBankAccount ( $this -> db );
2024-03-07 20:16:48 +01:00
// @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2024-04-27 12:45:50 +02:00
$account -> fetch ( $bankaccount_id , '' , $id , - 1 , '' );
2018-06-27 10:33:57 +02:00
2019-11-14 12:09:15 +01:00
if ( $account -> socid != $id ) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-06-27 10:33:57 +02:00
}
2018-06-30 01:34:51 +02:00
2018-06-27 10:33:57 +02:00
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2023-12-15 12:15:33 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$account -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-12-15 12:15:33 +01:00
continue ;
}
2024-04-02 12:28:55 +02:00
$account -> $field = $this -> _checkValForAPI ( $field , $value , $account );
2018-06-27 10:33:57 +02:00
}
2020-04-13 09:39:31 +02:00
if ( empty ( $account -> rum )) {
require_once DOL_DOCUMENT_ROOT . '/compta/prelevement/class/bonprelevement.class.php' ;
$prelevement = new BonPrelevement ( $this -> db );
$account -> rum = $prelevement -> buildRumNumber ( $this -> company -> code_client , $account -> datec , $account -> id );
$account -> date_rum = dol_now ();
}
2021-02-26 21:17:52 +01:00
if ( $account -> update ( DolibarrApiAccess :: $user ) < 0 ) {
2018-06-27 10:33:57 +02:00
throw new RestException ( 500 , 'Error updating values' );
2021-02-26 21:17:52 +01:00
}
2018-06-30 01:34:51 +02:00
2020-04-13 09:25:06 +02:00
return $this -> _cleanObjectDatas ( $account );
2018-06-27 10:33:57 +02:00
}
/**
2018-08-26 17:29:04 +02:00
* Delete a bank account attached to a thirdparty
*
* @ param int $id ID of thirdparty
* @ param int $bankaccount_id ID of CompanyBankAccount
2018-06-30 01:34:51 +02:00
*
2018-06-27 11:01:20 +02:00
* @ return int - 1 if error 1 if correct deletion
2018-06-30 01:34:51 +02:00
*
2018-08-26 17:29:04 +02:00
* @ url DELETE { id } / bankaccounts / { bankaccount_id }
2018-06-27 10:33:57 +02:00
*/
2020-10-31 14:32:18 +01:00
public function deleteCompanyBankAccount ( $id , $bankaccount_id )
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-06-27 10:33:57 +02:00
}
$account = new CompanyBankAccount ( $this -> db );
2018-08-26 17:29:04 +02:00
$account -> fetch ( $bankaccount_id );
2018-06-27 10:33:57 +02:00
2024-03-15 20:04:03 +01:00
$socid = ( int ) $account -> socid ;
2018-06-27 10:33:57 +02:00
2024-03-15 20:07:56 +01:00
if ( $socid == $id ) {
2024-03-15 20:04:03 +01:00
return $account -> delete ( DolibarrApiAccess :: $user );
} else {
2024-03-15 22:30:55 +01:00
throw new RestException ( 403 , " Not allowed due to bad consistency of input data " );
2024-03-15 20:04:03 +01:00
}
2018-06-27 10:33:57 +02:00
}
2017-10-27 01:08:14 +02:00
2018-08-26 17:29:04 +02:00
/**
2018-09-19 14:47:11 +02:00
* Generate a Document from a bank account record ( like SEPA mandate )
2018-09-19 18:33:11 +02:00
*
2023-09-26 18:43:25 +02:00
* @ param int $id Thirdparty id
* @ param int $companybankid Companybank id
* @ param string $model Model of document to generate
2023-01-23 16:31:14 +01:00
* @ return array
2018-09-19 18:33:11 +02:00
*
2018-09-19 14:47:11 +02:00
* @ url GET { id } / generateBankAccountDocument / { companybankid } / { model }
2018-07-19 15:09:32 +02:00
*/
2018-09-19 14:47:11 +02:00
public function generateBankAccountDocument ( $id , $companybankid = null , $model = 'sepamandate' )
{
2020-11-25 00:16:36 +01:00
global $conf , $langs ;
2018-09-20 17:09:31 +02:00
2020-11-25 00:16:36 +01:00
$langs -> loadLangs ( array ( " main " , " dict " , " commercial " , " products " , " companies " , " banks " , " bills " , " withdrawals " ));
2018-07-19 15:09:32 +02:00
2020-11-25 00:16:36 +01:00
if ( $this -> company -> fetch ( $id ) <= 0 ) {
throw new RestException ( 404 , 'Thirdparty not found' );
}
2018-09-20 17:09:31 +02:00
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2020-11-25 00:16:36 +01:00
}
2018-09-20 17:09:31 +02:00
$this -> company -> setDocModel ( DolibarrApiAccess :: $user , $model );
2018-07-19 15:09:32 +02:00
$this -> company -> fk_bank = $this -> company -> fk_account ;
2024-03-12 22:24:29 +01:00
// $this->company->fk_account = $this->company->fk_account;
2018-09-20 17:09:31 +02:00
2020-11-25 00:16:36 +01:00
$outputlangs = $langs ;
2019-11-14 12:09:15 +01:00
$newlang = '' ;
2018-09-20 17:09:31 +02:00
2022-09-24 14:56:50 +02:00
//if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang) && GETPOST('lang_id', 'aZ09')) $newlang = GETPOST('lang_id', 'aZ09');
if ( getDolGlobalInt ( 'MAIN_MULTILANGS' ) && empty ( $newlang )) {
2020-11-25 00:16:36 +01:00
if ( isset ( $this -> company -> thirdparty -> default_lang )) {
$newlang = $this -> company -> thirdparty -> default_lang ; // for proposal, order, invoice, ...
} elseif ( isset ( $this -> company -> default_lang )) {
$newlang = $this -> company -> default_lang ; // for thirdparty
}
}
2019-11-14 12:09:15 +01:00
if ( ! empty ( $newlang )) {
2019-01-27 11:55:16 +01:00
$outputlangs = new Translate ( " " , $conf );
2018-07-19 15:09:32 +02:00
$outputlangs -> setDefaultLang ( $newlang );
}
2018-09-20 17:09:31 +02:00
2018-07-19 15:09:32 +02:00
$sql = " SELECT rowid " ;
2019-11-14 12:09:15 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " societe_rib " ;
2021-02-26 21:17:52 +01:00
if ( $id ) {
2021-03-22 13:31:06 +01:00
$sql .= " WHERE fk_soc = " . (( int ) $id );
2021-02-26 21:17:52 +01:00
}
if ( $companybankid ) {
2021-03-22 13:31:06 +01:00
$sql .= " AND rowid = " . (( int ) $companybankid );
2021-02-26 21:17:52 +01:00
}
2018-09-19 18:33:11 +02:00
2019-11-14 12:09:15 +01:00
$i = 0 ;
$accounts = array ();
2018-09-20 17:09:31 +02:00
$result = $this -> db -> query ( $sql );
2020-11-25 00:16:36 +01:00
if ( $result ) {
if ( $this -> db -> num_rows ( $result ) == 0 ) {
2018-09-20 17:09:31 +02:00
throw new RestException ( 404 , 'Bank account not found' );
}
2018-07-19 15:09:32 +02:00
$num = $this -> db -> num_rows ( $result );
2020-11-25 00:16:36 +01:00
while ( $i < $num ) {
2018-07-19 15:09:32 +02:00
$obj = $this -> db -> fetch_object ( $result );
2018-09-20 17:09:31 +02:00
2018-07-19 15:09:32 +02:00
$account = new CompanyBankAccount ( $this -> db );
2018-09-20 17:09:31 +02:00
if ( $account -> fetch ( $obj -> rowid )) {
2018-07-19 15:09:32 +02:00
$accounts [] = $account ;
}
$i ++ ;
}
2020-05-21 15:05:19 +02:00
} else {
2020-11-25 00:16:36 +01:00
throw new RestException ( 500 , 'Sql error ' . $this -> db -> lasterror ());
2018-07-19 15:09:32 +02:00
}
$moreparams = array (
2020-11-25 00:16:36 +01:00
'use_companybankid' => $accounts [ 0 ] -> id ,
2024-09-06 13:50:27 +02:00
'force_dir_output' => $conf -> societe -> multidir_output [ $this -> company -> entity ] . '/' . dol_sanitizeFileName (( string ) $this -> company -> id )
2018-07-19 15:09:32 +02:00
);
2018-09-20 17:09:31 +02:00
2020-11-25 00:16:36 +01:00
$result = $this -> company -> generateDocument ( $model , $outputlangs , 0 , 0 , 0 , $moreparams );
2018-09-20 17:09:31 +02:00
2020-11-25 00:16:36 +01:00
if ( $result > 0 ) {
2018-07-19 15:09:32 +02:00
return array ( " success " => $result );
2020-05-21 15:05:19 +02:00
} else {
2022-10-23 11:19:23 +02:00
throw new RestException ( 500 , 'Error generating the document ' . $this -> company -> error );
2018-07-19 15:09:32 +02:00
}
2020-10-31 14:32:18 +01:00
}
2018-07-19 15:09:32 +02:00
2020-10-31 14:32:18 +01:00
/**
2024-03-08 16:41:33 +01:00
* Get a specific account attached to a thirdparty ( by specifying the site key )
2018-08-26 17:29:04 +02:00
*
* @ param int $id ID of thirdparty
* @ param string $site Site key
*
2020-12-21 15:23:04 +01:00
* @ return array | mixed
2020-02-20 13:42:43 +01:00
* @ throws RestException 401 Unauthorized : User does not have permission to read thirdparties
* @ throws RestException 404 Not Found : Specified thirdparty ID does not belongs to an existing thirdparty
2018-08-26 17:29:04 +02:00
*
2024-03-08 16:41:33 +01:00
* @ url GET { id } / accounts /
2018-08-26 17:29:04 +02:00
*/
2020-10-31 14:32:18 +01:00
public function getSocieteAccounts ( $id , $site = null )
{
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-08-26 17:29:04 +02:00
}
2019-11-14 12:09:15 +01:00
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
2018-08-26 17:29:04 +02:00
}
/**
* 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 " ;
2021-03-22 13:31:06 +01:00
$sql .= " WHERE fk_soc = " . (( int ) $id );
2021-02-26 21:17:52 +01:00
if ( $site ) {
2021-03-22 13:41:43 +01:00
$sql .= " AND site =' " . $this -> db -> escape ( $site ) . " ' " ;
2021-02-26 21:17:52 +01:00
}
2018-08-26 17:29:04 +02:00
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
2020-10-31 11:57:35 +01:00
if ( $result && $this -> db -> num_rows ( $result ) == 0 ) {
2024-03-08 16:41:33 +01:00
throw new RestException ( 404 , 'This thirdparty does not have any account attached or does not exist.' );
2018-08-26 17:29:04 +02:00
}
2019-11-14 12:09:15 +01:00
$i = 0 ;
2018-08-26 17:29:04 +02:00
2019-07-14 00:31:28 +02:00
$accounts = array ();
2018-08-26 17:29:04 +02:00
2020-09-19 23:30:29 +02:00
$num = $this -> db -> num_rows ( $result );
2021-02-26 21:17:52 +01:00
while ( $i < $num ) {
2020-09-19 23:30:29 +02:00
$obj = $this -> db -> fetch_object ( $result );
$account = new SocieteAccount ( $this -> db );
2018-08-26 17:29:04 +02:00
2019-11-14 12:09:15 +01:00
if ( $account -> fetch ( $obj -> rowid )) {
2018-08-26 17:29:04 +02:00
$accounts [] = $account ;
}
$i ++ ;
}
2019-07-14 00:31:28 +02:00
$fields = array ( 'id' , 'fk_soc' , 'key_account' , 'site' , 'date_creation' , 'tms' );
2018-08-26 17:29:04 +02:00
2019-07-14 00:31:28 +02:00
$returnAccounts = array ();
2018-08-26 17:29:04 +02:00
2019-10-27 17:01:23 +01:00
foreach ( $accounts as $account ) {
$object = array ();
foreach ( $account as $key => $value ) {
2019-11-16 23:24:29 +01:00
if ( in_array ( $key , $fields )) {
2018-08-26 17:29:04 +02:00
$object [ $key ] = $value ;
}
2019-10-27 17:01:23 +01:00
}
2018-08-26 17:29:04 +02:00
$returnAccounts [] = $object ;
}
return $returnAccounts ;
}
2024-10-05 18:46:16 +02:00
/**
* Get a specific thirdparty by account
*
* @ param string $site Site key
* @ param string $key_account Key of account
*
* @ return array | mixed
* @ throws RestException 401 Unauthorized : User does not have permission to read thirdparties
* @ throws RestException 404 Not Found : Specified thirdparty ID does not belongs to an existing thirdparty
*
* @ url GET / accounts / { site } / { key_account }
*/
public function getSocieteByAccounts ( $site , $key_account )
{
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
throw new RestException ( 403 );
}
$sql = " SELECT rowid, fk_soc, key_account, site, date_creation, tms FROM " . MAIN_DB_PREFIX . " societe_account " ;
$sql .= " WHERE site = ' " . $this -> db -> escape ( $site ) . " ' AND key_account = ' " . $this -> db -> escape ( $key_account ) . " ' " ;
$sql .= " AND entity IN ( " . getEntity ( 'societe' ) . " ) " ;
$result = $this -> db -> query ( $sql );
if ( $result && $this -> db -> num_rows ( $result ) == 1 ) {
$obj = $this -> db -> fetch_object ( $result );
$returnThirdparty = $this -> _fetch ( $obj -> fk_soc );
} else {
throw new RestException ( 404 , 'This account have many thirdparties attached or does not exist.' );
}
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $returnThirdparty -> id )) {
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login );
}
return $returnThirdparty ;
}
2018-08-26 17:29:04 +02:00
/**
2024-03-08 16:41:33 +01:00
* Create and attach a new account to an existing thirdparty
2018-08-26 17:29:04 +02:00
*
* Possible fields for request_data ( request body ) are specified in < code > llx_societe_account </ code > table .< br >
* See < a href = " https://wiki.dolibarr.org/index.php/Table_llx_societe_account " > Table llx_societe_account </ a > wiki page for more information < br >< br >
* < u > Example body payload :</ u > < pre > { " key_account " : " cus_DAVkLSs1LYyYI " , " site " : " stripe " } </ pre >
*
* @ param int $id ID of thirdparty
2018-08-26 20:16:21 +02:00
* @ param array $request_data Request data
2018-08-26 17:29:04 +02:00
*
2020-12-21 15:23:04 +01:00
* @ return array | mixed
2020-02-20 13:54:41 +01:00
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 401 Unauthorized : User does not have permission to read thirdparties
2024-03-08 16:41:33 +01:00
* @ throws RestException 409 Conflict : An Account already exists for this company and site .
2020-02-20 13:42:43 +01:00
* @ throws RestException 422 Unprocessable Entity : You must pass the site attribute in your request data !
* @ throws RestException 500 Internal Server Error : Error creating SocieteAccount account
2018-08-26 17:29:04 +02:00
*
2024-03-08 16:41:33 +01:00
* @ url POST { id } / accounts
2018-08-26 17:29:04 +02:00
*/
2020-10-31 14:32:18 +01:00
public function createSocieteAccount ( $id , $request_data = null )
2018-08-26 17:29:04 +02:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-08-26 17:29:04 +02:00
}
2019-11-14 12:09:15 +01:00
if ( ! isset ( $request_data [ 'site' ])) {
2018-08-26 17:29:04 +02:00
throw new RestException ( 422 , 'Unprocessable Entity: You must pass the site attribute in your request data !' );
}
2021-03-30 19:12:07 +02:00
$sql = " SELECT rowid FROM " . MAIN_DB_PREFIX . " societe_account WHERE fk_soc = " . (( int ) $id ) . " AND site = ' " . $this -> db -> escape ( $request_data [ 'site' ]) . " ' " ;
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
2020-10-31 11:57:35 +01:00
if ( $result && $this -> db -> num_rows ( $result ) == 0 ) {
2018-08-26 17:29:04 +02:00
$account = new SocieteAccount ( $this -> db );
2019-11-14 12:09:15 +01:00
if ( ! isset ( $request_data [ 'login' ])) {
2018-08-26 17:29:04 +02:00
$account -> login = " " ;
}
$account -> fk_soc = $id ;
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2023-12-15 12:15:33 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$account -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-12-15 12:15:33 +01:00
continue ;
}
2024-04-02 12:28:55 +02:00
$account -> $field = $this -> _checkValForAPI ( $field , $value , $account );
2018-08-26 17:29:04 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $account -> create ( DolibarrApiAccess :: $user ) < 0 ) {
2018-08-26 17:29:04 +02:00
throw new RestException ( 500 , 'Error creating SocieteAccount entity. Ensure that the ID of thirdparty provided does exist!' );
2021-02-26 21:17:52 +01:00
}
2018-08-26 17:29:04 +02:00
$this -> _cleanObjectDatas ( $account );
return $account ;
} else {
throw new RestException ( 409 , 'A SocieteAccount entity already exists for this company and site.' );
}
}
/**
2024-03-08 16:41:33 +01:00
* Create and attach a new ( or replace an existing ) specific site account to a thirdparty
2018-08-26 17:29:04 +02:00
*
* You < strong > MUST </ strong > pass all values to keep ( otherwise , they will be deleted ) !< br >
2024-03-08 16:41:33 +01:00
* If you just need to update specific fields prefer < code > PATCH / thirdparties / { id } / accounts / { site } </ code > endpoint .< br >< br >
2018-08-26 17:29:04 +02:00
* When a < strong > SocieteAccount </ strong > entity does not exist for the < code > id </ code > and < code > site </ code >
* supplied , a new one will be created . In that case < code > fk_soc </ code > and < code > site </ code > members form
* request body payload will be ignored and < code > id </ code > and < code > site </ code > query strings parameters
* will be used instead .
*
* @ param int $id ID of thirdparty
* @ param string $site Site key
2018-08-26 20:16:21 +02:00
* @ param array $request_data Request data
2018-08-26 17:29:04 +02:00
*
2020-12-21 15:23:04 +01:00
* @ return array | mixed
2018-08-26 17:29:04 +02:00
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 401 Unauthorized : User does not have permission to read thirdparties
* @ throws RestException 422 Unprocessable Entity : You must pass the site attribute in your request data !
* @ throws RestException 500 Internal Server Error : Error updating SocieteAccount entity
*
2024-03-08 16:41:33 +01:00
* @ url PUT { id } / accounts / { site }
2018-08-26 17:29:04 +02:00
*/
2020-10-31 14:32:18 +01:00
public function putSocieteAccount ( $id , $site , $request_data = null )
2018-08-26 17:29:04 +02:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-08-26 17:29:04 +02:00
}
2020-09-19 23:30:29 +02:00
$sql = " SELECT rowid, fk_user_creat, date_creation FROM " . MAIN_DB_PREFIX . " societe_account WHERE fk_soc = $id AND site = ' " . $this -> db -> escape ( $site ) . " ' " ;
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
// We do not found an existing SocieteAccount entity for this fk_soc and site ; we then create a new one.
2025-01-15 20:01:40 +01:00
if ( $result && $this -> db -> num_rows ( $result ) == 0 ) {
2019-11-14 12:09:15 +01:00
if ( ! isset ( $request_data [ 'key_account' ])) {
2018-08-26 17:29:04 +02:00
throw new RestException ( 422 , 'Unprocessable Entity: You must pass the key_account attribute in your request data !' );
}
$account = new SocieteAccount ( $this -> db );
2019-11-14 12:09:15 +01:00
if ( ! isset ( $request_data [ 'login' ])) {
2018-08-26 17:29:04 +02:00
$account -> login = " " ;
}
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2023-12-15 12:15:33 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$account -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-12-15 12:15:33 +01:00
continue ;
}
2024-04-02 12:28:55 +02:00
$account -> $field = $this -> _checkValForAPI ( $field , $value , $account );
2018-08-26 17:29:04 +02:00
}
$account -> fk_soc = $id ;
$account -> site = $site ;
2019-10-27 17:01:23 +01:00
if ( $account -> create ( DolibarrApiAccess :: $user ) < 0 ) {
2018-08-26 17:29:04 +02:00
throw new RestException ( 500 , 'Error creating SocieteAccount entity.' );
2019-10-27 17:01:23 +01:00
}
// We found an existing SocieteAccount entity, we are replacing it
2018-08-26 17:29:04 +02:00
} else {
2019-10-27 17:01:23 +01:00
if ( isset ( $request_data [ 'site' ]) && $request_data [ 'site' ] !== $site ) {
2021-03-30 19:12:07 +02:00
$sql = " SELECT rowid FROM " . MAIN_DB_PREFIX . " societe_account WHERE fk_soc = " . (( int ) $id ) . " AND site = ' " . $this -> db -> escape ( $request_data [ 'site' ]) . " ' " ;
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
2020-10-31 11:57:35 +01:00
if ( $result && $this -> db -> num_rows ( $result ) !== 0 ) {
2024-03-08 16:41:33 +01:00
throw new RestException ( 409 , " You are trying to update this thirdparty Account for $site to " . $request_data [ 'site' ] . " but another Account already exists with this site key. " );
2019-10-27 17:01:23 +01:00
}
2018-08-26 17:29:04 +02:00
}
2020-09-19 23:30:29 +02:00
$obj = $this -> db -> fetch_object ( $result );
2018-08-26 17:29:04 +02:00
$account = new SocieteAccount ( $this -> db );
$account -> id = $obj -> rowid ;
$account -> fk_soc = $id ;
$account -> site = $site ;
2019-11-14 12:09:15 +01:00
if ( ! isset ( $request_data [ 'login' ])) {
2018-08-26 17:29:04 +02:00
$account -> login = " " ;
}
$account -> fk_user_creat = $obj -> fk_user_creat ;
$account -> date_creation = $obj -> date_creation ;
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2023-12-15 12:15:33 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$account -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-12-15 12:15:33 +01:00
continue ;
}
2024-04-02 12:28:55 +02:00
$account -> $field = $this -> _checkValForAPI ( $field , $value , $account );
2018-08-26 17:29:04 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $account -> update ( DolibarrApiAccess :: $user ) < 0 ) {
2018-08-26 17:29:04 +02:00
throw new RestException ( 500 , 'Error updating SocieteAccount entity.' );
2021-02-26 21:17:52 +01:00
}
2018-08-26 17:29:04 +02:00
}
$this -> _cleanObjectDatas ( $account );
return $account ;
}
/**
2024-03-08 16:41:33 +01:00
* Update specified values of a specific account attached to a thirdparty
2018-08-26 17:29:04 +02:00
*
2023-09-26 18:43:25 +02:00
* @ param int $id Id of thirdparty
* @ param string $site Site key
* @ param array $request_data Request data
2018-08-26 17:29:04 +02:00
*
2020-12-21 15:23:04 +01:00
* @ return array | mixed
2020-02-20 13:54:41 +01:00
*
2020-02-20 13:42:43 +01:00
* @ throws RestException 401 Unauthorized : User does not have permission to read thirdparties
* @ throws RestException 404 Not Found : Specified thirdparty ID does not belongs to an existing thirdparty
* @ throws RestException 409 Conflict : Another SocieteAccount entity already exists for this thirdparty with this site key .
* @ throws RestException 500 Internal Server Error : Error updating SocieteAccount entity
2018-08-26 17:29:04 +02:00
*
2024-03-08 16:41:33 +01:00
* @ url PATCH { id } / accounts / { site }
2018-08-26 17:29:04 +02:00
*/
2020-10-31 14:32:18 +01:00
public function patchSocieteAccount ( $id , $site , $request_data = null )
2018-08-26 17:29:04 +02:00
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-08-26 17:29:04 +02:00
}
2021-04-30 10:57:21 +02:00
$sql = " SELECT rowid FROM " . MAIN_DB_PREFIX . " societe_account WHERE fk_soc = " . (( int ) $id ) . " AND site = ' " . $this -> db -> escape ( $site ) . " ' " ;
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
2020-10-31 11:57:35 +01:00
if ( $result && $this -> db -> num_rows ( $result ) == 0 ) {
2024-03-08 16:41:33 +01:00
throw new RestException ( 404 , " This thirdparty does not have $site account attached or does not exist. " );
2018-08-26 17:29:04 +02:00
} else {
// If the user tries to edit the site member, we check first if
2019-11-14 12:09:15 +01:00
if ( isset ( $request_data [ 'site' ]) && $request_data [ 'site' ] !== $site ) {
2021-03-30 19:12:07 +02:00
$sql = " SELECT rowid FROM " . MAIN_DB_PREFIX . " societe_account WHERE fk_soc = " . (( int ) $id ) . " AND site = ' " . $this -> db -> escape ( $request_data [ 'site' ]) . " ' " ;
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
2021-02-26 21:17:52 +01:00
if ( $result && $this -> db -> num_rows ( $result ) !== 0 ) {
2024-03-08 16:41:33 +01:00
throw new RestException ( 409 , " You are trying to update this thirdparty Account for " . $site . " to " . $request_data [ 'site' ] . " but another Account already exists for this thirdparty with this site key. " );
2021-02-26 21:17:52 +01:00
}
2018-08-26 17:29:04 +02:00
}
2020-09-19 23:30:29 +02:00
$obj = $this -> db -> fetch_object ( $result );
2018-08-26 17:29:04 +02:00
$account = new SocieteAccount ( $this -> db );
$account -> fetch ( $obj -> rowid );
2019-11-14 12:09:15 +01:00
foreach ( $request_data as $field => $value ) {
2023-12-15 12:15:33 +01:00
if ( $field === 'caller' ) {
2024-01-12 17:18:52 +01:00
// Add a mention of caller so on trigger called after action, we can filter to avoid a loop if we try to sync back again with the caller
2024-04-02 12:28:55 +02:00
$account -> context [ 'caller' ] = sanitizeVal ( $request_data [ 'caller' ], 'aZ09' );
2023-12-15 12:15:33 +01:00
continue ;
}
2024-04-02 12:28:55 +02:00
$account -> $field = $this -> _checkValForAPI ( $field , $value , $account );
2018-08-26 17:29:04 +02:00
}
2021-02-26 21:17:52 +01:00
if ( $account -> update ( DolibarrApiAccess :: $user ) < 0 ) {
2018-08-26 17:29:04 +02:00
throw new RestException ( 500 , 'Error updating SocieteAccount account' );
2021-02-26 21:17:52 +01:00
}
2018-08-26 17:29:04 +02:00
$this -> _cleanObjectDatas ( $account );
return $account ;
}
}
/**
2024-03-08 16:41:33 +01:00
* Delete a specific site account attached to a thirdparty ( by account id )
2018-08-26 17:29:04 +02:00
*
* @ param int $id ID of thirdparty
* @ param int $site Site key
*
* @ return void
2024-03-08 16:41:33 +01:00
* @ throws RestException 401 Unauthorized : User does not have permission to delete thirdparties accounts
2020-02-20 13:42:43 +01:00
* @ throws RestException 404 Not Found : Specified thirdparty ID does not belongs to an existing thirdparty
* @ throws RestException 500 Internal Server Error : Error deleting SocieteAccount entity
2018-08-26 17:29:04 +02:00
*
2024-03-08 16:41:33 +01:00
* @ url DELETE { id } / accounts / { site }
2018-08-26 17:29:04 +02:00
*/
2020-10-31 14:32:18 +01:00
public function deleteSocieteAccount ( $id , $site )
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-08-26 17:29:04 +02:00
}
2020-09-19 23:30:29 +02:00
$sql = " SELECT rowid FROM " . MAIN_DB_PREFIX . " societe_account WHERE fk_soc = $id AND site = ' " . $this -> db -> escape ( $site ) . " ' " ;
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
2020-10-31 11:57:35 +01:00
if ( $result && $this -> db -> num_rows ( $result ) == 0 ) {
2018-08-26 17:29:04 +02:00
throw new RestException ( 404 );
} else {
2020-09-19 23:30:29 +02:00
$obj = $this -> db -> fetch_object ( $result );
2018-08-26 17:29:04 +02:00
$account = new SocieteAccount ( $this -> db );
$account -> fetch ( $obj -> rowid );
2019-11-14 12:09:15 +01:00
if ( $account -> delete ( DolibarrApiAccess :: $user ) < 0 ) {
2024-03-08 16:41:33 +01:00
throw new RestException ( 500 , " Error while deleting $site account attached to this third party " );
2018-08-26 17:29:04 +02:00
}
}
}
/**
2024-03-08 16:41:33 +01:00
* Delete all accounts attached to a thirdparty
2018-08-26 17:29:04 +02:00
*
* @ param int $id ID of thirdparty
*
* @ return void
2024-03-08 16:41:33 +01:00
* @ throws RestException 401 Unauthorized : User does not have permission to delete thirdparties accounts
2020-10-31 09:50:50 +01:00
* @ throws RestException 404 Not Found : Specified thirdparty ID does not belongs to an existing thirdparty
* @ throws RestException 500 Internal Server Error : Error deleting SocieteAccount entity
2018-08-26 17:29:04 +02:00
*
2024-03-08 16:41:33 +01:00
* @ url DELETE { id } / accounts
2018-08-26 17:29:04 +02:00
*/
2020-10-31 14:32:18 +01:00
public function deleteSocieteAccounts ( $id )
{
2024-02-09 15:58:49 +01:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'creer' )) {
2024-02-01 19:16:58 +01:00
throw new RestException ( 403 );
2018-08-26 17:29:04 +02:00
}
/**
* We select all the records that match the socid
*/
$sql = " SELECT rowid, fk_soc, key_account, site, date_creation, tms " ;
2021-03-30 19:12:07 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " societe_account WHERE fk_soc = " . (( int ) $id );
2018-08-26 17:29:04 +02:00
2020-09-19 23:30:29 +02:00
$result = $this -> db -> query ( $sql );
2018-08-26 17:29:04 +02:00
2020-10-31 11:57:35 +01:00
if ( $result && $this -> db -> num_rows ( $result ) == 0 ) {
2024-03-08 16:41:33 +01:00
throw new RestException ( 404 , 'This third party does not have any account attached or does not exist.' );
2018-08-26 17:29:04 +02:00
} else {
2019-11-14 12:09:15 +01:00
$i = 0 ;
2018-08-26 17:29:04 +02:00
2020-09-19 23:30:29 +02:00
$num = $this -> db -> num_rows ( $result );
2021-02-26 21:17:52 +01:00
while ( $i < $num ) {
2020-09-19 23:30:29 +02:00
$obj = $this -> db -> fetch_object ( $result );
$account = new SocieteAccount ( $this -> db );
2018-08-26 17:29:04 +02:00
$account -> fetch ( $obj -> rowid );
2019-11-14 12:09:15 +01:00
if ( $account -> delete ( DolibarrApiAccess :: $user ) < 0 ) {
2024-03-08 16:41:33 +01:00
throw new RestException ( 500 , 'Error while deleting account attached to this third party' );
2018-08-26 17:29:04 +02:00
}
$i ++ ;
}
}
}
2017-10-25 11:39:23 +02:00
2020-10-31 14:32:18 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
2017-05-24 15:24:35 +02:00
/**
* Clean sensible object datas
*
2020-10-30 18:02:58 +01:00
* @ param Object $object Object to clean
2023-05-02 03:38:57 +02:00
* @ return Object Object with cleaned properties
2017-05-24 15:24:35 +02:00
*/
2019-03-04 19:57:46 +01:00
protected function _cleanObjectDatas ( $object )
2020-10-31 14:32:18 +01:00
{
// phpcs:enable
2018-02-12 04:07:45 +01:00
$object = parent :: _cleanObjectDatas ( $object );
2017-10-03 13:07:07 +02:00
2019-11-16 23:24:29 +01:00
unset ( $object -> nom ); // ->name already defined and nom deprecated
unset ( $object -> name_bis ); // ->name_alias already defined
unset ( $object -> note ); // ->note_private and note_public already defined
2019-11-02 14:20:43 +01:00
unset ( $object -> departement );
unset ( $object -> departement_code );
unset ( $object -> pays );
unset ( $object -> particulier );
2019-11-02 14:26:27 +01:00
unset ( $object -> prefix_comm );
2018-01-11 01:16:14 +01:00
2022-08-27 19:02:05 +02:00
unset ( $object -> siren );
unset ( $object -> siret );
unset ( $object -> ape );
2020-04-10 10:59:32 +02:00
unset ( $object -> commercial_id ); // This property is used in create/update only. It does not exists in read mode because there is several sales representatives.
2020-01-13 14:14:51 +01:00
2018-02-12 04:07:45 +01:00
unset ( $object -> total_ht );
unset ( $object -> total_tva );
unset ( $object -> total_localtax1 );
unset ( $object -> total_localtax2 );
unset ( $object -> total_ttc );
2017-10-03 13:07:07 +02:00
2018-02-12 04:07:45 +01:00
unset ( $object -> lines );
unset ( $object -> thirdparty );
2017-12-21 16:50:18 +01:00
2019-11-16 23:24:29 +01:00
unset ( $object -> fk_delivery_address ); // deprecated feature
2019-11-02 14:20:43 +01:00
2018-02-12 04:07:45 +01:00
return $object ;
2017-10-03 13:07:07 +02:00
}
2017-05-24 15:24:35 +02:00
/**
2018-02-12 04:07:45 +01:00
* Validate fields before create or update object
*
* @ param array $data Datas to validate
* @ return array
*
* @ throws RestException
*/
2020-10-31 14:32:18 +01:00
private function _validate ( $data )
{
$thirdparty = array ();
foreach ( Thirdparties :: $FIELDS as $field ) {
2021-02-26 21:17:52 +01:00
if ( ! isset ( $data [ $field ])) {
2020-10-31 14:32:18 +01:00
throw new RestException ( 400 , " $field field missing " );
2021-02-26 21:17:52 +01:00
}
2020-10-31 14:32:18 +01:00
$thirdparty [ $field ] = $data [ $field ];
}
return $thirdparty ;
}
/**
* Fetch properties of a thirdparty object .
*
2024-01-12 17:18:52 +01:00
* Return an array with thirdparty information
2020-10-31 14:32:18 +01:00
*
2024-09-29 21:51:51 +02:00
* @ param ? int $rowid Id of third party to load ( Use 0 to get a specimen record , use null to use other search criteria )
2019-10-19 16:43:10 +02:00
* @ param string $ref Reference of third party , name ( Warning , this can return several records )
* @ param string $ref_ext External reference of third party ( Warning , this information is a free field not provided by Dolibarr )
2020-08-29 11:37:16 +02:00
* @ param string $barcode Barcode of third party to load
2019-10-19 16:43:10 +02:00
* @ param string $idprof1 Prof id 1 of third party ( Warning , this can return several records )
* @ param string $idprof2 Prof id 2 of third party ( Warning , this can return several records )
* @ param string $idprof3 Prof id 3 of third party ( Warning , this can return several records )
* @ param string $idprof4 Prof id 4 of third party ( Warning , this can return several records )
* @ param string $idprof5 Prof id 5 of third party ( Warning , this can return several records )
* @ param string $idprof6 Prof id 6 of third party ( Warning , this can return several records )
2023-09-26 18:43:25 +02:00
* @ param string $email Email of third party ( Warning , this can return several records )
2019-10-19 16:43:10 +02:00
* @ param string $ref_alias Name_alias of third party ( Warning , this can return several records )
2024-05-03 18:03:14 +02:00
* @ return object cleaned Societe object
2020-10-31 14:32:18 +01:00
*
* @ throws RestException
*/
private function _fetch ( $rowid , $ref = '' , $ref_ext = '' , $barcode = '' , $idprof1 = '' , $idprof2 = '' , $idprof3 = '' , $idprof4 = '' , $idprof5 = '' , $idprof6 = '' , $email = '' , $ref_alias = '' )
{
2022-09-10 11:10:33 +02:00
if ( ! DolibarrApiAccess :: $user -> hasRight ( 'societe' , 'lire' )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login . '. No read permission on thirdparties.' );
2020-10-31 14:32:18 +01:00
}
2021-04-08 19:05:28 +02:00
2021-03-08 00:17:58 +01:00
if ( $rowid === 0 ) {
2020-10-29 23:56:42 +01:00
$result = $this -> company -> initAsSpecimen ();
} else {
$result = $this -> company -> fetch ( $rowid , $ref , $ref_ext , $barcode , $idprof1 , $idprof2 , $idprof3 , $idprof4 , $idprof5 , $idprof6 , $email , $ref_alias );
}
2020-10-31 14:32:18 +01:00
if ( ! $result ) {
throw new RestException ( 404 , 'Thirdparty not found' );
}
if ( ! DolibarrApi :: _checkAccessToResource ( 'societe' , $this -> company -> id )) {
2024-04-02 14:47:49 +02:00
throw new RestException ( 403 , 'Access not allowed for login ' . DolibarrApiAccess :: $user -> login . ' on this thirdparty' );
2020-10-31 14:32:18 +01:00
}
2022-08-29 14:46:26 +02:00
if ( isModEnabled ( 'mailing' )) {
$this -> company -> getNoEmail ();
}
2020-10-31 14:32:18 +01:00
2023-11-27 12:08:48 +01:00
if ( getDolGlobalString ( 'FACTURE_DEPOSITS_ARE_JUST_PAYMENTS' )) {
2024-01-12 17:18:52 +01:00
$filterabsolutediscount = " fk_facture_source IS NULL " ; // If we want deposit to be subtracted to payments only and not to total of final invoice
$filtercreditnote = " fk_facture_source IS NOT NULL " ; // If we want deposit to be subtracted to payments only and not to total of final invoice
2020-10-31 14:32:18 +01:00
} else {
$filterabsolutediscount = " fk_facture_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS RECEIVED)%') " ;
$filtercreditnote = " fk_facture_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS RECEIVED)%') " ;
}
$absolute_discount = $this -> company -> getAvailableDiscounts ( '' , $filterabsolutediscount );
$absolute_creditnote = $this -> company -> getAvailableDiscounts ( '' , $filtercreditnote );
$this -> company -> absolute_discount = price2num ( $absolute_discount , 'MT' );
$this -> company -> absolute_creditnote = price2num ( $absolute_creditnote , 'MT' );
return $this -> _cleanObjectDatas ( $this -> company );
}
2015-05-01 16:12:30 +02:00
}