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.

167 line
5.4KB

  1. <?php
  2. /**
  3. * Copyright Guillaume Bourgeois (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\Subscription\Subscription;
  38. use common\components\ActiveRecordCommon;
  39. use domain\PointSale\PointSale\PointSale;
  40. use domain\Producer\Producer\Producer;
  41. use domain\Subscription\ProductSubscription\ProductSubscription;
  42. use domain\User\User\User;
  43. class Subscription extends ActiveRecordCommon
  44. {
  45. const AUTO_PAYMENT_DEDUCTED = 1;
  46. const AUTO_PAYMENT_YES = 2;
  47. const AUTO_PAYMENT_NO = 0;
  48. /**
  49. * @inheritdoc
  50. */
  51. public static function tableName()
  52. {
  53. return 'subscription';
  54. }
  55. /**
  56. * @inheritdoc
  57. */
  58. public function rules()
  59. {
  60. return [
  61. [['id_producer', 'id_point_sale'], 'required'],
  62. [['id_user', 'id_producer', 'id_point_sale', 'monday', 'tuesday',
  63. 'wednesday', 'thursday', 'friday', 'saturday', 'sunday',
  64. 'week_frequency', 'auto_payment', 'id_created_by', 'id_updated_by'], 'integer'],
  65. [['created_at', 'updated_at'], 'datetime', 'format' => 'php:Y-m-d H:i:s'],
  66. [['username', 'comment', 'date_begin', 'date_end'], 'safe'],
  67. ];
  68. }
  69. /**
  70. * @inheritdoc
  71. */
  72. public function attributeLabels()
  73. {
  74. return [
  75. 'id' => 'ID',
  76. 'id_user' => 'Utilisateur',
  77. 'id_producer' => 'Etablissement',
  78. 'id_point_sale' => 'Point de vente',
  79. 'date_begin' => 'Date de début',
  80. 'date_end' => 'Date de fin',
  81. 'monday' => 'Lundi',
  82. 'tuesday' => 'Mardi',
  83. 'wednesday' => 'Mercredi',
  84. 'thursday' => 'Jeudi',
  85. 'friday' => 'Vendredi',
  86. 'saturday' => 'Samedi',
  87. 'sunday' => 'Dimanche',
  88. 'week_frequency' => 'Périodicité',
  89. 'auto_payment' => 'Débit automatique',
  90. 'comment' => 'Commentaire',
  91. 'created_at' => 'Création',
  92. 'updated_at' => 'Modification',
  93. 'created_by' => 'Créé par',
  94. 'updated_by' => 'Modifié par',
  95. ];
  96. }
  97. /*
  98. * Relations
  99. */
  100. public function getUser()
  101. {
  102. return $this->hasOne(User::class, ['id' => 'id_user']);
  103. }
  104. public function populateUser(User $user): void
  105. {
  106. $this->populateFieldObject('id_user', 'user', $user);
  107. }
  108. public function getProducer()
  109. {
  110. return $this->hasOne(Producer::class, ['id' => 'id_producer']);
  111. }
  112. public function populateProducer(Producer $producer): void
  113. {
  114. $this->populateFieldObject('id_producer', 'producer', $producer);
  115. }
  116. public function getPointSale()
  117. {
  118. return $this->hasOne(PointSale::class, ['id' => 'id_point_sale']);
  119. }
  120. public function populatePointSale(PointSale $pointSale): void
  121. {
  122. $this->populateFieldObject('id_point_sale', 'pointSale', $pointSale);
  123. }
  124. public function getProductSubscription()
  125. {
  126. return $this->hasMany(ProductSubscription::class, ['id_subscription' => 'id'])
  127. ->with('product');
  128. }
  129. public function getCreatedBy()
  130. {
  131. return $this->hasOne(User::class, ['id' => 'id_created_by']);
  132. }
  133. public function populateCreatedBy(User $createdBy): void
  134. {
  135. $this->populateFieldObject('id_created_by', 'createdBy', $createdBy);
  136. $this->created_at = date('Y-m-d H:i:s');
  137. }
  138. public function getUpdatedBy()
  139. {
  140. return $this->hasOne(User::class, ['id' => 'id_updated_by']);
  141. }
  142. public function populateUpdatedBy(User $updatedBy): void
  143. {
  144. $this->populateFieldObject('id_updated_by', 'updatedBy', $updatedBy);
  145. $this->updated_at = date('Y-m-d H:i:s');
  146. }
  147. }