You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
6.8KB

  1. <?php
  2. /**
  3. * Copyright Souke (2018)
  4. *
  5. * contact@souke.fr
  6. *
  7. * Ce logiciel est un programme informatique servant à aider les producteurs
  8. * à distribuer leur production en circuits courts.
  9. *
  10. * Ce logiciel est régi par la licence CeCILL soumise au droit français et
  11. * respectant les principes de diffusion des logiciels libres. Vous pouvez
  12. * utiliser, modifier et/ou redistribuer ce programme sous les conditions
  13. * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  14. * sur le site "http://www.cecill.info".
  15. *
  16. * En contrepartie de l'accessibilité au code source et des droits de copie,
  17. * de modification et de redistribution accordés par cette licence, il n'est
  18. * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  19. * seule une responsabilité restreinte pèse sur l'auteur du programme, le
  20. * titulaire des droits patrimoniaux et les concédants successifs.
  21. *
  22. * A cet égard l'attention de l'utilisateur est attirée sur les risques
  23. * associés au chargement, à l'utilisation, à la modification et/ou au
  24. * développement et à la reproduction du logiciel par l'utilisateur étant
  25. * donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  26. * manipuler et qui le réserve donc à des développeurs et des professionnels
  27. * avertis possédant des connaissances informatiques approfondies. Les
  28. * utilisateurs sont donc invités à charger et tester l'adéquation du
  29. * logiciel à leurs besoins dans des conditions permettant d'assurer la
  30. * sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  31. * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  32. *
  33. * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  34. * pris connaissance de la licence CeCILL, et que vous en avez accepté les
  35. * termes.
  36. */
  37. namespace domain\PointSale\PointSale;
  38. use common\components\ActiveRecordCommon;
  39. use common\helpers\GlobalParam;
  40. use domain\Distribution\PointSaleDistribution\PointSaleDistribution;
  41. use domain\PointSale\UserPointSale\UserPointSale;
  42. use domain\Producer\Producer\Producer;
  43. use domain\User\User\User;
  44. /**
  45. * This is the model class for table "point_sale".
  46. */
  47. class PointSale extends ActiveRecordCommon
  48. {
  49. var $orders = [];
  50. var $revenues = 0;
  51. var $revenues_with_tax = 0;
  52. var $data_select_orders;
  53. var $data_options_orders;
  54. var $users = [];
  55. var $users_comment = [];
  56. /**
  57. * @inheritdoc
  58. */
  59. public static function tableName()
  60. {
  61. return 'point_sale';
  62. }
  63. /**
  64. * @inheritdoc
  65. */
  66. public function rules()
  67. {
  68. return [
  69. [['name'], 'required'],
  70. [['restricted_access'], 'boolean'],
  71. [['name', 'code'], 'string', 'max' => 255],
  72. [['address', 'locality', 'infos_monday', 'infos_tuesday',
  73. 'infos_wednesday', 'infos_thursday', 'infos_friday',
  74. 'infos_saturday', 'infos_sunday', 'credit_functioning', 'bread_box_code'], 'string'],
  75. [['point_production', 'payment_method_onsite', 'payment_method_credit', 'payment_method_online',
  76. 'delivery_monday', 'delivery_tuesday', 'delivery_wednesday', 'delivery_thursday', 'delivery_friday',
  77. 'delivery_saturday', 'delivery_sunday', 'default', 'is_bread_box',
  78. 'button_generate_delivery_note_point_sale', 'button_generate_delivery_note_each_user',
  79. 'exclude_export_shopping_cart_labels', 'is_home_delivery'], 'boolean'],
  80. ['point_production', 'default', 'value' => 0],
  81. [['id_producer', 'id_user', 'maximum_number_orders', 'status'], 'integer'],
  82. ['id_producer', 'required'],
  83. [['users', 'users_comment', 'code'], 'safe'],
  84. [['product_price_percent', 'minimum_order_amount'], 'double'],
  85. ];
  86. }
  87. /**
  88. * @inheritdoc
  89. */
  90. public function attributeLabels()
  91. {
  92. return [
  93. 'id' => 'ID',
  94. 'name' => 'Nom',
  95. 'address' => 'Adresse',
  96. 'locality' => 'Localité',
  97. 'point_production' => 'Point de production',
  98. 'infos_monday' => 'Lundi',
  99. 'infos_tuesday' => 'Mardi',
  100. 'infos_wednesday' => 'Mercredi',
  101. 'infos_thursday' => 'Jeudi',
  102. 'infos_friday' => 'Vendredi',
  103. 'infos_saturday' => 'Samedi',
  104. 'infos_sunday' => 'Dimanche',
  105. 'restricted_access' => 'Accès restreint',
  106. 'payment_method_onsite' => 'Sur place',
  107. 'payment_method_credit' => 'Cagnotte',
  108. 'payment_method_online' => 'Paiement en ligne',
  109. 'delivery_monday' => 'Lundi',
  110. 'delivery_tuesday' => 'Mardi',
  111. 'delivery_wednesday' => 'Mercredi',
  112. 'delivery_thursday' => 'Jeudi',
  113. 'delivery_friday' => 'Vendredi',
  114. 'delivery_saturday' => 'Samedi',
  115. 'delivery_sunday' => 'Dimanche',
  116. 'code' => 'Code',
  117. 'credit_functioning' => 'Fonctionnement de la cagnotte',
  118. 'default' => 'Point de vente par défaut',
  119. 'id_user' => 'Contact facturation',
  120. 'product_price_percent' => 'Prix produits : pourcentage',
  121. 'maximum_number_orders' => 'Nombre maximum de commandes par distribution',
  122. 'is_bread_box' => 'Boîte à pain',
  123. 'bread_box_code' => 'Code boîte à pain',
  124. 'status' => 'Statut',
  125. 'button_generate_delivery_note_point_sale' => 'Par point de vente',
  126. 'button_generate_delivery_note_each_user' => 'Par client',
  127. 'exclude_export_shopping_cart_labels' => "Exclure de l'export d'étiquettes",
  128. 'is_home_delivery' => "Livraison à domicile",
  129. 'minimum_order_amount' => "Montant minimum de commande (€)"
  130. ];
  131. }
  132. public function getName(): string
  133. {
  134. return $this->name;
  135. }
  136. public function getProducer(): Producer
  137. {
  138. return $this->producerRelation;
  139. }
  140. /*
  141. * Relations
  142. */
  143. public function getProducerRelation()
  144. {
  145. return $this->hasOne(Producer::class, ['id' => 'id_producer']);
  146. }
  147. public function getUserPointSale()
  148. {
  149. return $this->hasMany(UserPointSale::class, ['id_point_sale' => 'id']);
  150. }
  151. public function getPointSaleDistribution()
  152. {
  153. return $this->hasMany(PointSaleDistribution::class, ['id_point_sale' => 'id']);
  154. }
  155. public function getUser()
  156. {
  157. return $this->hasOne(User::class, ['id' => 'id_user']);
  158. }
  159. public function populateUser(User $user): void
  160. {
  161. $this->populateFieldObject('id_user', 'user', $user);
  162. }
  163. /**
  164. * Enregistre le point de vente.
  165. */
  166. public function save($runValidation = true, $attributeNames = NULL)
  167. {
  168. $this->id_producer = GlobalParam::getCurrentProducerId();
  169. return parent::save($runValidation, $attributeNames);
  170. }
  171. }