Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

132 lines
3.9KB

  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. {
  20. const PAIEMENT_OK = 'ok' ;
  21. const PAIEMENT_ESSAI = 'essai' ;
  22. const PAIEMENT_ESSAI_TERMINE = 'essai-terminee' ;
  23. const PAIEMENT_RETARD = 'retard-paiement' ;
  24. /**
  25. * @inheritdoc
  26. */
  27. public static function tableName()
  28. {
  29. return 'etablissement';
  30. }
  31. /**
  32. * @inheritdoc
  33. */
  34. public function rules()
  35. {
  36. return [
  37. [['nom', 'siret','code', 'heure_limite_commande'], 'required'],
  38. ['heure_limite_commande','integer'],
  39. ['heure_limite_commande','in', 'range' => [18, 19, 20, 21, 22, 23, 24]],
  40. ['code', function($attribute, $params)
  41. {
  42. $code = $this->$attribute ;
  43. $etablissement = Etablissement::findOne(['code' => $code]) ;
  44. if($etablissement && $etablissement->id != $this->id)
  45. {
  46. $this->addError($attribute, 'Ce code est déjà utilisé par une autre boulangerie.');
  47. }
  48. }],
  49. [['description'], 'string'],
  50. [['nom', 'siret', 'logo', 'photo', 'code_postal', 'ville','code'], 'string', 'max' => 255],
  51. ];
  52. }
  53. /**
  54. * @inheritdoc
  55. */
  56. public function attributeLabels()
  57. {
  58. return [
  59. 'id' => 'ID',
  60. 'nom' => 'Nom',
  61. 'siret' => 'Siret',
  62. 'logo' => 'Logo',
  63. 'photo' => 'Photo',
  64. 'description' => 'Description',
  65. 'code_postal' => 'Code postal',
  66. 'ville' => 'Ville',
  67. 'code' => 'Code',
  68. 'heure_limite_commande' => 'Heure limite de commande'
  69. ];
  70. }
  71. public static function getEtablissementsPopulateDropdown()
  72. {
  73. $etablissements_dispos = Etablissement::find()
  74. ->orderby('code_postal, ville ASC')
  75. ->all() ;
  76. $departements = Departements::get() ;
  77. $data_etablissements_dispos = [] ;
  78. $options_etablissements_dispos = [] ;
  79. foreach($etablissements_dispos as $e)
  80. {
  81. if($e->etatPaiement() == self::PAIEMENT_OK || $e->etatPaiement() == self::PAIEMENT_ESSAI)
  82. {
  83. if(!key_exists('d'. substr($e->code_postal, 0, 2), $data_etablissements_dispos))
  84. {
  85. $data_etablissements_dispos['d'. substr($e->code_postal, 0, 2)] = '<strong>'.$departements[substr($e->code_postal, 0, 2)].'</strong>' ;
  86. $options_etablissements_dispos['d'. substr($e->code_postal, 0, 2)] = ['disabled' => true] ;
  87. }
  88. $data_etablissements_dispos[$e->id] = Html::encode($e->nom).' - '.Html::encode($e->code_postal).' '.Html::encode($e->ville) ;
  89. }
  90. }
  91. return ['data' => $data_etablissements_dispos, 'options' => $options_etablissements_dispos] ;
  92. }
  93. public function etatPaiement()
  94. {
  95. $date_limite = strtotime($this->date_creation) + 30*24*60*60 ;
  96. $date = time() ;
  97. $date_paiement = strtotime($this->date_paiement) ;
  98. if($date < $date_paiement + 30*24*60*60 || $this->gratuit)
  99. {
  100. return 'ok' ;
  101. }
  102. else {
  103. if($date < $date_limite)
  104. {
  105. return 'essai' ;
  106. }
  107. else {
  108. if(!$this->date_paiement)
  109. return 'essai-terminee' ;
  110. else
  111. return 'retard-paiement' ;
  112. }
  113. }
  114. }
  115. }