Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

109 lines
3.3KB

  1. <?php
  2. namespace common\logic\PointSale\PointSale;
  3. use common\logic\BaseService;
  4. use common\logic\BuilderInterface;
  5. use common\logic\PointSale\UserPointSale\UserPointSaleBuilder;
  6. use common\logic\PointSale\UserPointSale\UserPointSaleRepository;
  7. use common\logic\Producer\Producer\Producer;
  8. use common\logic\User\User\User;
  9. use common\logic\User\User\UserRepository;
  10. class PointSaleBuilder extends BaseService implements BuilderInterface
  11. {
  12. protected UserPointSaleBuilder $userPointSaleBuilder;
  13. protected UserRepository $userRepository;
  14. protected UserPointSaleRepository $userPointSaleRepository;
  15. public function __construct()
  16. {
  17. $this->userPointSaleBuilder = $this->loadService(UserPointSaleBuilder::class);
  18. $this->userRepository = $this->loadService(UserRepository::class);
  19. $this->userPointSaleRepository = $this->loadService(UserPointSaleRepository::class);
  20. }
  21. public function instanciate(): PointSale
  22. {
  23. $pointSale = new PointSale();
  24. return $pointSale;
  25. }
  26. /**
  27. * Initialise les commandes liées au point de vente.
  28. */
  29. public function initOrders(PointSale $pointSale, array $ordersArray): void
  30. {
  31. $pointSale->orders = [];
  32. $pointSale->revenues = 0;
  33. $pointSale->revenues_with_tax = 0;
  34. if ($ordersArray) {
  35. foreach ($ordersArray as $order) {
  36. if ($pointSale->id == $order->id_point_sale) {
  37. $pointSale->orders[] = $order;
  38. if (is_null($order->date_delete)) {
  39. $pointSale->revenues += (float) $order->amount;
  40. $pointSale->revenues_with_tax += (float) $order->amount_with_tax;
  41. }
  42. }
  43. }
  44. }
  45. }
  46. public function resetPointProductions(Producer $producer): void
  47. {
  48. PointSale::updateAll(
  49. ['point_production' => 0],
  50. ['id_producer' => $producer->id]
  51. );
  52. }
  53. /**
  54. * Traite la mise à jour de l'attribut 'point_production'.
  55. */
  56. // processPointProduction
  57. public function updatePointProduction(PointSale $pointSale): void
  58. {
  59. if ($pointSale->point_production) {
  60. $this->resetPointProductions($pointSale->producer);
  61. $pointSale->point_production = 1;
  62. $pointSale->save();
  63. }
  64. }
  65. /**
  66. * Traite les accès restreints d'un point de vente.
  67. */
  68. public function processRestrictedAccess(PointSale $pointSale): void
  69. {
  70. $this->userPointSaleBuilder->deleteByPointSale($pointSale);
  71. if (is_array($pointSale->users) && count($pointSale->users)) {
  72. foreach ($pointSale->users as $key => $val) {
  73. $user = $this->userRepository->getOneById($val);
  74. if ($user) {
  75. $this->userPointSaleBuilder->create($user, $pointSale, $pointSale->users_comment[$val]);
  76. }
  77. }
  78. }
  79. }
  80. /**
  81. * Lie un utilisateur au point de vente.
  82. */
  83. // linkUser
  84. public function addUser(User $user, PointSale $pointSale)
  85. {
  86. $userPointSale = $this->userPointSaleRepository->getOne($user, $pointSale);
  87. if (!$userPointSale) {
  88. $this->userPointSaleBuilder->create($user, $pointSale);
  89. }
  90. }
  91. }