'PRODUCT_ARTIST', # OT Artist 2 => 'PRODUCT_ARTIST_PREMIUM', # OT Artist Premium 3 => 'PRODUCT_SCHOOL', # OT School Standard 4 => 'PRODUCT_SCHOOL_PREMIUM', # OT School Premium 5 => 'PRODUCT_MANAGER', # OT Manager ]; public function __construct( private DolibarrService $dolibarrService, ) {} public function getDolibarrAccount(int $id): DolibarrAccount { // Get dolibarr account (society) $accountData = $this->dolibarrService->getSociety($id); $dolibarrAccount = $this->createDolibarrAccount($id, $accountData); // Get active contract and services $contractData = $this->dolibarrService->getActiveContract($dolibarrAccount->getSocId()); if ($contractData !== null) { $contract = $this->createDolibarrContract($contractData); $dolibarrAccount->setContract($contract); } // get bills $billsData = $this->dolibarrService->getBills($dolibarrAccount->getSocId()); foreach ($billsData as $billData) { $bill = $this->createDolibarrBill($billData); $dolibarrAccount->addBill($bill); } return $dolibarrAccount; } public function createDolibarrAccount(int $organizationId, array $accountData): DolibarrAccount { $dolibarrAccount = new DolibarrAccount(); $dolibarrAccount->setOrganizationId($organizationId) ->setSocId((int)$accountData['id']) ->setClientNumber($accountData['code_client']); if (!empty($accountData['array_options']['options_2iopen_software_used'])) { $dolibarrAccount->setProduct( self::PRODUCT_MAPPING[(int)$accountData['array_options']['options_2iopen_software_used']] ); } return $dolibarrAccount; } public function createDolibarrContract(array $contractData): DolibarrContract { $contract = new DolibarrContract(); $contract->setRef($contractData['ref'] ?? '') ->setSocId((int)$contractData['socid']); foreach ($contractData['lines'] as $lineData) { $line = $this->createDolibarrContractLine($lineData); $contract->addLine($line); } return $contract; } public function createDolibarrContractLine(array $lineData): DolibarrContractLine { $line = new DolibarrContractLine(); return $line->setId((int)$lineData['id']) ->setContractId((int)$lineData['fk_contrat']) ->setServiceRef($lineData['product_ref']) ->setServiceLabel($lineData['product_label']) ->setDateStart(new \DateTime(date('c', $lineData['date_start']))) ->setDateEnd(new \DateTime(date('c', $lineData['date_end']))); } public function createDolibarrBill(array $billData): DolibarrBill { $bill = new DolibarrBill(); return $bill->setId((int)$billData['id']) ->setRef($billData['ref']) ->setTaxExcludedAmount((float)$billData['total_ht']) ->setTaxIncludedAmount((float)$billData['total_ttc']) ->setDate(new \DateTime(date('c', $billData['date']))) ->setPaid((bool)$billData['paye']); } }