| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <?php
- declare(strict_types=1);
- namespace App\Service\Dolibarr;
- use App\ApiResources\Dolibarr\DolibarrAccount;
- use App\ApiResources\Dolibarr\DolibarrBill;
- use App\ApiResources\Dolibarr\DolibarrContract;
- use App\ApiResources\Dolibarr\DolibarrContractLine;
- class DolibarrAccountCreator
- {
- public const PRODUCT_MAPPING = [
- 1 => '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']);
- }
- }
|