選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

229 行
7.6KB

  1. <?php
  2. namespace common\models;
  3. use Yii;
  4. use common\helpers\Departements;
  5. use yii\helpers\Html;
  6. /**
  7. * This is the model class for table "etablissement".
  8. *
  9. * @property integer $id
  10. * @property string $nom
  11. * @property string $siret
  12. * @property string $logo
  13. * @property string $photo
  14. * @property string $description
  15. * @property string $code_postal
  16. * @property string $ville
  17. */
  18. class Etablissement extends \yii\db\ActiveRecord {
  19. const PAIEMENT_OK = 'ok';
  20. const PAIEMENT_ESSAI = 'essai';
  21. const PAIEMENT_ESSAI_TERMINE = 'essai-terminee';
  22. const PAIEMENT_RETARD = 'retard-paiement';
  23. /**
  24. * @inheritdoc
  25. */
  26. public static function tableName() {
  27. return 'etablissement';
  28. }
  29. /**
  30. * @inheritdoc
  31. */
  32. public function rules() {
  33. return [
  34. [['nom', 'siret', 'heure_limite_commande', 'delai_commande'], 'required'],
  35. [['heure_limite_commande', 'delai_commande'], 'integer'],
  36. ['heure_limite_commande', 'in', 'range' => [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]],
  37. ['delai_commande', 'in', 'range' => [1, 2, 3, 4, 5, 6, 7]],
  38. ['code', function($attribute, $params) {
  39. $code = $this->$attribute;
  40. $etablissement = Etablissement::findOne(['code' => $code]);
  41. if ($etablissement && $etablissement->id != $this->id) {
  42. $this->addError($attribute, 'Ce code est déjà utilisé par un autre producteur.');
  43. }
  44. }],
  45. [['description', 'infos_commande','slug'], 'string'],
  46. [['solde_negatif', 'credit_pain', 'actif'], 'boolean'],
  47. [['nom', 'siret', 'logo', 'photo', 'code_postal', 'ville', 'code'], 'string', 'max' => 255],
  48. ['prix_libre', 'double'],
  49. ['prix_libre', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'],
  50. ];
  51. }
  52. /**
  53. * @inheritdoc
  54. */
  55. public function attributeLabels() {
  56. return [
  57. 'id' => 'ID',
  58. 'nom' => 'Nom',
  59. 'siret' => 'Siret',
  60. 'logo' => 'Logo',
  61. 'photo' => 'Photo',
  62. 'description' => 'Description',
  63. 'code_postal' => 'Code postal',
  64. 'ville' => 'Ville',
  65. 'code' => 'Code',
  66. 'heure_limite_commande' => 'Heure limite de commande',
  67. 'delai_commande' => 'Délai de commande',
  68. 'solde_negatif' => 'Solde négatif',
  69. 'credit_pain' => 'Crédit pain',
  70. 'actif' => 'Actif',
  71. 'date_creation' => 'Date de création',
  72. 'infos_commande' => 'Informations',
  73. 'slug' => 'Slug',
  74. ];
  75. }
  76. public function getUserEtablissement() {
  77. return $this->hasMany(UserEtablissement::className(), ['id_etablissement' => 'id']);
  78. }
  79. public function getUser() {
  80. return $this->hasMany(User::className(), ['id_etablissement' => 'id']);
  81. }
  82. public static function getEtablissementsPopulateDropdown() {
  83. $etablissements_dispos = Etablissement::find()
  84. ->where(['actif' => 1])
  85. ->orderby('code_postal, ville ASC')
  86. ->all();
  87. $departements = Departements::get();
  88. $data_etablissements_dispos = [];
  89. $options_etablissements_dispos = [];
  90. foreach ($etablissements_dispos as $e) {
  91. if ($e->etatPaiement() == self::PAIEMENT_OK || $e->etatPaiement() == self::PAIEMENT_ESSAI) {
  92. if (!key_exists('d' . substr($e->code_postal, 0, 2), $data_etablissements_dispos)) {
  93. $data_etablissements_dispos['d' . substr($e->code_postal, 0, 2)] = '<strong>' . $departements[substr($e->code_postal, 0, 2)] . '</strong>';
  94. $options_etablissements_dispos['d' . substr($e->code_postal, 0, 2)] = ['disabled' => true];
  95. }
  96. $data_etablissements_dispos[$e->id] = '<span class="glyphicon glyphicon-lock"></span> ' . Html::encode($e->nom) . ' - ' . Html::encode($e->code_postal) . ' ' . Html::encode($e->ville) . ' <span class="glyphicon glyphicon-lock"></span>';
  97. if (strlen($e->code))
  98. $options_etablissements_dispos[$e->id] = ['class' => 'lock'];
  99. }
  100. }
  101. return ['data' => $data_etablissements_dispos, 'options' => $options_etablissements_dispos];
  102. }
  103. public function etatPaiement() {
  104. $date_limite = strtotime($this->date_creation) + 30 * 24 * 60 * 60;
  105. $date = time();
  106. $date_paiement = strtotime($this->date_paiement);
  107. if ($date < $date_paiement + 30 * 24 * 60 * 60 || $this->gratuit) {
  108. return 'ok';
  109. } else {
  110. if ($date < $date_limite) {
  111. return 'essai';
  112. } else {
  113. if (!$this->date_paiement)
  114. return 'essai-terminee';
  115. else
  116. return 'retard-paiement';
  117. }
  118. }
  119. }
  120. public function getCA($periode = '', $format = false) {
  121. if (!$periode)
  122. $periode = date('Y-m');
  123. $connection = Yii::$app->getDb();
  124. $command = $connection->createCommand('
  125. SELECT SUM(IF(produit.vrac,0,commande_produit.prix * commande_produit.quantite)) AS CA
  126. FROM commande, commande_produit, production, produit
  127. WHERE commande.id = commande_produit.id_commande
  128. AND production.id_etablissement = :id_etablissement
  129. AND commande.id_production = production.id
  130. AND commande_produit.id_produit = produit.id
  131. AND production.date > :date_debut
  132. AND production.date < :date_fin', [
  133. ':date_debut' => date('Y-m-31', strtotime("-1 month", strtotime($periode))),
  134. ':date_fin' => date('Y-m-01', strtotime("+1 month", strtotime($periode))),
  135. ':id_etablissement' => $this->id
  136. ]);
  137. $result = $command->queryOne();
  138. $ca = $result['CA'];
  139. if ($format)
  140. return number_format($ca, 2) . ' €';
  141. else
  142. return $ca;
  143. }
  144. public function getMontantFacturer($periode = '', $ca = 0, $format = false) {
  145. if (!$periode)
  146. $periode = date('Y-m');
  147. if (!$ca)
  148. $ca = $this->getCA($periode);
  149. if ($ca < 500) {
  150. $montant = 0;
  151. } else {
  152. $montant = $ca * 0.02;
  153. }
  154. if ($format) {
  155. return number_format($montant, 2) . ' €';
  156. } else {
  157. return $montant;
  158. }
  159. }
  160. public function getFacture($periode = '') {
  161. if (!$periode)
  162. $periode = date('Y-m', strtotime('-1 month'));
  163. $facture = Facture::find()
  164. ->where('id_etablissement = :id_etablissement')
  165. ->andWhere('periode = :periode')
  166. ->addParams([
  167. ':id_etablissement' => $this->id,
  168. ':periode' => $periode,
  169. ])
  170. ->one();
  171. return $facture;
  172. }
  173. public function factureMoisDernier() {
  174. return $this->getFacture(date('Y-m', strtotime('-1 month')));
  175. }
  176. public static function getConfig($config = '', $id_etablissement = 0) {
  177. if (strlen($config)) {
  178. if (!$id_etablissement)
  179. $id_etablissement = Yii::$app->user->identity->id_etablissement;
  180. $etablissement = self::findOne($id_etablissement);
  181. if ($etablissement) {
  182. return $etablissement->$config;
  183. }
  184. }
  185. return false;
  186. }
  187. public function getPrixLibre() {
  188. if (!is_null($this->prix_libre)) {
  189. return number_format($this->prix_libre, 2, ',', false) . ' €';
  190. }
  191. }
  192. }