From 329044dcccf01ac56580973b2203a0512262e29c Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 16 Jul 2024 12:47:42 +1000 Subject: [PATCH] Create and update legal entities --- .../EDocument/Gateway/Storecove/Storecove.php | 114 +++++++++++++++++- 1 file changed, 110 insertions(+), 4 deletions(-) diff --git a/app/Services/EDocument/Gateway/Storecove/Storecove.php b/app/Services/EDocument/Gateway/Storecove/Storecove.php index 7c991aabc621..0dce32741c68 100644 --- a/app/Services/EDocument/Gateway/Storecove/Storecove.php +++ b/app/Services/EDocument/Gateway/Storecove/Storecove.php @@ -11,6 +11,7 @@ namespace App\Services\EDocument\Gateway; +use App\Models\Company; use Illuminate\Support\Facades\Http; @@ -25,6 +26,8 @@ enum HttpVerb: string class Storecove { + private string $base_url = 'https://api.storecove.com/'; + private array $peppol_discovery = [ "documentTypes" => ["invoice"], "network" => "peppol", @@ -62,7 +65,7 @@ class Storecove { default => $network_data = array_merge($this->peppol_discovery, ['scheme' => $scheme, 'identifier' => $identifier]), }; - $uri = "https://api.storecove.com/api/v2/discovery/receives"; + $uri = "api/v2/discovery/receives"; $r = $this->httpClient($uri, (HttpVerb::POST)->value, $network_data, $this->getHeaders()); @@ -105,7 +108,7 @@ class Storecove { 'parseStrategy', 'ubl' ]; - $uri = "https://api.storecove.com/api/v2/document_submissions"; + $uri = "api/v2/document_submissions"; $r = $this->httpClient($uri, (HttpVerb::POST)->value, $payload, $this->getHeaders()); @@ -119,11 +122,114 @@ class Storecove { //document submission sending evidence public function getSendingEvidence(string $guid) { - $uri = "https://api.storecove.com/api/v2/document_submissions/{$guid}"; + $uri = "api/v2/document_submissions/{$guid}"; $r = $this->httpClient($uri, (HttpVerb::GET)->value, [], $this->getHeaders()); } + // { + // "party_name": "", + // "line1": "", + // "city": "", + // "zip": "", + // "country": "EH", + // "line2": "", + // "county": "", + // "tenant_id": "", + // "public": true, + // "advertisements": [ + // "invoice" + // ], + // "third_party_username": "", + // "third_party_password": "", + // "rea": { + // "province": "AR", + // "identifier": "", + // "capital": "", + // "partners": "SM", + // "liquidation_status": "LN" + // }, + // "acts_as_sender": true, + // "acts_as_receiver": true, + // "tax_registered": true + // } + + // acts_as_receiver - optional - Default : true + // acts_as_sender - optional - Default : true + // advertisements - optional < enum (invoice, invoice_response, order, ordering, order_response, selfbilling) > array + // city - required - Length : 2 - 64 + // country - required - ISO 3166-1 alpha-2 + // county - optional - Maximal length : 64 + // line1 - required - The first address line - Length : 2 - 192 + // line2 - optional - The second address line, if applicable Maximal length : 192 + // party_name - required - The name of the company. Length : 2 - 64 + // public - optional - Whether or not this LegalEntity is public. Public means it will be entered into the PEPPOL directory at https://directory.peppol.eu/ Default : true + // rea - optional - The REA details for the LegalEntity. Only applies to IT (Italian) LegalEntities. - https://www.storecove.com/docs/#_openapi_rea (schema) + + // capital - optional - The captial for the company. - number + // identifier - optional - The identifier. Length : 2 - 20 + // liquidation_status - optional - The liquidation status of the company. enum (LN, LS) + // partners - optional - The number of partners. enum (SU, SM) + // province - optional - The provincia of the ufficio that issued the identifier.enum (AG, AL, AN, AO, AQ, AR, AP, AT, AV, BA, BT, BL, BN, BG, BI, BO, BZ, BS, BR, CA, CL, CB, CI, CE, CT, CZ, CH, CO, CS, CR, KR, CN, EN, FM, FE, FI, FG, FC, FR, GE, GO, GR, IM, IS, SP, LT, LE, LC, LI, LO, LU, MC, MN, MS, MT, VS, ME, MI, MO, MB, NA, NO, NU, OG, OT, OR, PD, PA, PR, PV, PG, PU, PE, PC, PI, PT, PN, PZ, PO, RG, RA, RC, RE, RI, RN, RO, SA, SS, SV, SI, SR, SO, TA, TE, TR, TO, TP, TN, TV, TS, UD, VA, VE, VB, VC, VR, VV, VI, VT) + + // tax_registered - optional - Whether or not this LegalEntity is tax registered. This influences the validation of the data presented when sending documents. Default : true + // tenant_id - optional - The id of the tenant, to be used in case of single-tenant solutions that share webhook URLs. This property will included in webhook events. Maximal length : 64 + // third_party_password - optional - The password to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. Length : 2 - 64 + // third_party_username - optional - The username to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. Length : 2 - 64 + // zip - required - The zipcode. Length : 2 - 32 + + /** + * CreateLegalEntity + * + * @url https://www.storecove.com/docs/#_openapi_legalentitycreate + * @return mixed + */ + public function createLegalEntity(array $data, Company $company) + { + $uri = 'legal_entities'; + + $company_defaults = [ + 'acts_as_receiver' => true, + 'acts_as_sender' => true, + 'advertisements' => ['invoice'], + 'city' => $company->settings->city, + 'country' => $company->country()->iso_3166_2, + 'county' => $company->settings->state, + 'line1' => $company->settings->address1, + 'line2' => $company->settings->address2, + 'party_name' => $company->settings->name, + 'tax_registered' => true, + 'tenant_id' => $company->company_key, + 'zip' => $company->settings->postal_code, + ]; + + $payload = array_merge($company_defaults, $data); + + $r = $this->httpClient($uri, (HttpVerb::POST)->value, $payload); + + if($r->successful()) + return $r->json(); + + return $r; + + } + + public function updateLegalEntity($id, array $data) + { + + $uri = "legal_entities/{$id}"; + + $r = $this->httpClient($uri, (HttpVerb::PATCH)->value, $data); + + if($r->successful()) { + return $r->json(); + } + + return $r; + + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private function getHeaders(array $headers = []) { @@ -139,7 +245,7 @@ class Storecove { $r = Http::withToken(config('ninja.storecove_api_key')) ->withHeaders($this->getHeaders($headers)) - ->{$verb}($uri, $data); + ->{$verb}("{$this->base_url}{$uri}", $data); return $r; }