| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?php
- declare(strict_types=1);
- namespace App\Service\Dolibarr;
- use App\Service\Rest\ApiRequestService;
- use JetBrains\PhpStorm\Pure;
- use Symfony\Component\HttpKernel\Exception\HttpException;
- use Symfony\Contracts\HttpClient\HttpClientInterface;
- /**
- * Service d'appel à l'API dolibarr
- *
- * @see https://prod-erp.2iopenservice.com/api/index.php/explorer/
- */
- class DolibarrApiService extends ApiRequestService
- {
- /** @noinspection SenselessProxyMethodInspection Method shall be kept to allow dependency injections, even if empty */
- #[Pure]
- public function __construct(HttpClientInterface $dolibarr_client)
- {
- parent::__construct($dolibarr_client);
- }
- /**
- * Get a dolibarr society by its opentalent organization id
- *
- * @param int $organizationId
- * @return array
- * @throws HttpException
- */
- public function getSociety(int $organizationId): array {
- // impossible to retrieve a society by its extrafield 2iopen_organization_id (thanks dolibarr), so
- // we need to store the organization id in two fields: 2iopen_organization_id and ref_int :(
- return $this->getJsonContent("thirdparties" , [ "limit" => "1", "sqlfilters" => "ref_int=" . $organizationId])[0];
- }
- /**
- * Get the first active contract for the given dolibarr society
- *
- * @param int $socId
- * @return array|null
- */
- public function getActiveContract(int $socId): ?array {
- try {
- return $this->getJsonContent(
- "contracts",
- ["limit" => "1", "sqlfilters" => "statut=1", "thirdparty_ids" => $socId]
- )[0];
- } catch (HttpException $e) {
- if ($e->getStatusCode() === 404) {
- // /!\ The dolibarr API will return a 404 error if no results are found...
- return null;
- }
- throw $e;
- }
- }
- /**
- * Get a society bills by their society id
- *
- * @param int $socId
- * @return array
- */
- public function getBills(int $socId): array {
- try {
- return $this->getJsonContent(
- "invoices",
- ["sortfield" => "datef", "sortorder" => "DESC", "limit" => 5, "sqlfilters" => "fk_soc=" . $socId]);
- } catch (HttpException $e) {
- if ($e->getStatusCode() === 404) {
- // /!\ The dolibarr API will return a 404 error if no results are found...
- return [];
- }
- throw $e;
- }
- }
- /**
- * Get all the societies which are Opentalent client
- * @throws HttpException
- */
- public function getAllClients(): array
- {
- return $this->getJsonContent(
- "thirdparties",
- ["limit" => "1000000", "sqlfilters" => "client=1"]
- );
- }
- /**
- * Get the society contacts
- *
- * @throws HttpException
- */
- public function getContacts(int $socId): array
- {
- try {
- return $this->getJsonContent(
- "contacts",
- ['limit' => 1000, 'thirdparty_ids' => $socId],
- );
- } catch (HttpException $e) {
- if ($e->getStatusCode() === 404) {
- // /!\ The dolibarr API will return a 404 error if no results are found...
- return [];
- }
- throw $e;
- }
- }
- /**
- * Get the society contacts that have a non-null personId
- *
- * @throws HttpException
- */
- public function getActiveOpentalentContacts(int $socId): array
- {
- // On est obligé ici de passer la query en dur, sinon les parenthèses sont encodées,
- // et dolibarr est pas content :(
- try {
- return $this->getJsonContent(
- "contacts?limit=1000&t.statut=1&thirdparty_ids=" . $socId . "&sqlfilters=(te.2iopen_person_id%3A%3E%3A0)"
- );
- } catch (HttpException $e) {
- if ($e->getStatusCode() === 404) {
- // /!\ The dolibarr API will return a 404 error if no results are found...
- return [];
- }
- throw $e;
- }
- }
- }
|