DolibarrAccountCreator.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Dolibarr;
  4. use App\ApiResources\Dolibarr\DolibarrAccount;
  5. use App\ApiResources\Dolibarr\DolibarrBill;
  6. use App\ApiResources\Dolibarr\DolibarrContract;
  7. use App\ApiResources\Dolibarr\DolibarrContractLine;
  8. class DolibarrAccountCreator
  9. {
  10. public const PRODUCT_MAPPING = [
  11. 1 => 'PRODUCT_ARTIST', # OT Artist
  12. 2 => 'PRODUCT_ARTIST_PREMIUM', # OT Artist Premium
  13. 3 => 'PRODUCT_SCHOOL', # OT School Standard
  14. 4 => 'PRODUCT_SCHOOL_PREMIUM', # OT School Premium
  15. 5 => 'PRODUCT_MANAGER', # OT Manager
  16. ];
  17. public function __construct(
  18. private DolibarrService $dolibarrService,
  19. )
  20. {}
  21. public function getDolibarrAccount(int $id): DolibarrAccount {
  22. // Get dolibarr account (society)
  23. $accountData = $this->dolibarrService->getSociety($id);
  24. $dolibarrAccount = $this->createDolibarrAccount($id, $accountData);
  25. // Get active contract and services
  26. $contractData = $this->dolibarrService->getActiveContract($dolibarrAccount->getSocId());
  27. if ($contractData !== null) {
  28. $contract = $this->createDolibarrContract($contractData);
  29. $dolibarrAccount->setContract($contract);
  30. }
  31. // get bills
  32. $billsData = $this->dolibarrService->getBills($dolibarrAccount->getSocId());
  33. foreach ($billsData as $billData) {
  34. $bill = $this->createDolibarrBill($billData);
  35. $dolibarrAccount->addBill($bill);
  36. }
  37. return $dolibarrAccount;
  38. }
  39. public function createDolibarrAccount(int $organizationId, array $accountData): DolibarrAccount {
  40. $dolibarrAccount = new DolibarrAccount();
  41. $dolibarrAccount->setOrganizationId($organizationId)
  42. ->setSocId((int)$accountData['id'])
  43. ->setClientNumber($accountData['code_client']);
  44. if (!empty($accountData['array_options']['options_2iopen_software_used'])) {
  45. $dolibarrAccount->setProduct(
  46. self::PRODUCT_MAPPING[(int)$accountData['array_options']['options_2iopen_software_used']]
  47. );
  48. }
  49. return $dolibarrAccount;
  50. }
  51. public function createDolibarrContract(array $contractData): DolibarrContract {
  52. $contract = new DolibarrContract();
  53. $contract->setRef($contractData['ref'] ?? '')
  54. ->setSocId((int)$contractData['socid']);
  55. foreach ($contractData['lines'] as $lineData) {
  56. $line = $this->createDolibarrContractLine($lineData);
  57. $contract->addLine($line);
  58. }
  59. return $contract;
  60. }
  61. public function createDolibarrContractLine(array $lineData): DolibarrContractLine {
  62. $line = new DolibarrContractLine();
  63. return $line->setId((int)$lineData['id'])
  64. ->setContractId((int)$lineData['fk_contrat'])
  65. ->setServiceRef($lineData['product_ref'])
  66. ->setServiceLabel($lineData['product_label'])
  67. ->setDateStart(new \DateTime(date('c', $lineData['date_start'])))
  68. ->setDateEnd(new \DateTime(date('c', $lineData['date_end'])));
  69. }
  70. public function createDolibarrBill(array $billData): DolibarrBill {
  71. $bill = new DolibarrBill();
  72. return $bill->setId((int)$billData['id'])
  73. ->setRef($billData['ref'])
  74. ->setTaxExcludedAmount((float)$billData['total_ht'])
  75. ->setTaxIncludedAmount((float)$billData['total_ttc'])
  76. ->setDate(new \DateTime(date('c', $billData['date'])))
  77. ->setPaid((bool)$billData['paye']);
  78. }
  79. }