Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

110 rindas
3.6KB

  1. <?php
  2. namespace domain\Producer\Producer;
  3. use common\components\DolibarrApi;
  4. use domain\Producer\ProducerPriceRange\ProducerPriceRangeRepository;
  5. use domain\_\AbstractManager;
  6. use yii\base\ErrorException;
  7. class DolibarrProducerUtils extends AbstractManager
  8. {
  9. protected DolibarrApi $dolibarrApi;
  10. protected ProducerPriceRangeRepository $producerPriceRangeRepository;
  11. protected ProducerRepository $producerRepository;
  12. public function loadDependencies(): void
  13. {
  14. $this->dolibarrApi = \Yii::$app->dolibarrApi;
  15. $this->producerPriceRangeRepository = $this->loadService(ProducerPriceRangeRepository::class);
  16. $this->producerRepository = $this->loadService(ProducerRepository::class);
  17. }
  18. public function getDolibarrProducerInvoices(Producer $producer): array
  19. {
  20. $invoicesArray = [];
  21. if($producer->dolibarr_socid) {
  22. $invoicesArray = $this->dolibarrApi->getInvoicesByThirParty($producer->dolibarr_socid);
  23. }
  24. return $invoicesArray;
  25. }
  26. public function getDolibarrProducerInvoicesUnpaid(Producer $producer): array
  27. {
  28. $unpaidInvoicesArray = [];
  29. $invoicesArray = $this->getDolibarrProducerInvoices($producer);
  30. foreach($invoicesArray as $invoice) {
  31. if(isset($invoice['remaintopay']) && $invoice['remaintopay'] > 0) {
  32. $unpaidInvoicesArray[] = $invoice;
  33. }
  34. }
  35. return $unpaidInvoicesArray;
  36. }
  37. public function countDolibarrProducerInvoicesUnpaid(Producer $producer): int
  38. {
  39. return count($this->getDolibarrProducerInvoicesUnpaid($producer));
  40. }
  41. public function getDolibarrInvoicesUnpaid()
  42. {
  43. $unpaidInvoicesArray = [];
  44. $producersArray = $this->producerRepository->findProducersActive();
  45. foreach($producersArray as $producer) {
  46. $unpaidInvoicesArray = array_merge(
  47. $unpaidInvoicesArray,
  48. $this->getDolibarrProducerInvoicesUnpaid($producer)
  49. );
  50. }
  51. //die('test : '.count($unpaidInvoicesArray));
  52. return $unpaidInvoicesArray;
  53. }
  54. public function getAmountProducerInvoicesUnpaid()
  55. {
  56. $amount = 0;
  57. $unpaidInvoicesArray = $this->getDolibarrInvoicesUnpaid();
  58. foreach($unpaidInvoicesArray as $unpaidInvoice) {
  59. if(isset($unpaidInvoice['remaintopay'])) {
  60. $amount += $unpaidInvoice['remaintopay'];
  61. }
  62. }
  63. return $amount;
  64. }
  65. public function generateDolibarrProducerInvoice(Producer $producer)
  66. {
  67. $idProduct = $this->getDolibarrProductId($producer);
  68. if(!$idProduct) {
  69. throw new ErrorException("Dolibarr : pas d'id product trouvé pour le producteur ".$producer->name);
  70. }
  71. $idInvoice = $this->dolibarrApi->createInvoice($producer->dolibarr_socid);
  72. $this->dolibarrApi->addInvoiceLine($idInvoice, $idProduct);
  73. $responseValidate = $this->dolibarrApi->validateInvoice($idInvoice);
  74. $this->dolibarrApi->generateInvoicePdf($responseValidate['ref']);
  75. }
  76. private function getDolibarrProductId(Producer $producer)
  77. {
  78. if($producer->dolibarr_product_id) {
  79. $idProduct = $producer->dolibarr_product_id;
  80. }
  81. else {
  82. $producerPriceRange = $this->producerPriceRangeRepository->getProducerPriceRangeByTurnover($this->producerRepository->getTurnoverLastMonth($producer));
  83. if($producerPriceRange && $producerPriceRange->dolibarr_product_id) {
  84. $idProduct = $producerPriceRange->dolibarr_product_id;
  85. }
  86. }
  87. return $idProduct;
  88. }
  89. }