Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

193 rindas
5.7KB

  1. <?php
  2. namespace common\models;
  3. use Yii;
  4. use common\models\Etablissement ;
  5. use common\models\PointVente ;
  6. use common\models\Commande ;
  7. use common\models\CommandeProduit ;
  8. /**
  9. * This is the model class for table "commande_auto".
  10. *
  11. * @property integer $id
  12. * @property integer $id_user
  13. * @property integer $id_etablissement
  14. * @property integer $id_point_vente
  15. * @property string $date_debut
  16. * @property string $date_fin
  17. * @property integer $lundi
  18. * @property integer $mardi
  19. * @property integer $mercredi
  20. * @property integer $jeudi
  21. * @property integer $vendredi
  22. * @property integer $samedi
  23. * @property integer $dimanche
  24. * @property integer $periodicite_semaine
  25. */
  26. class CommandeAuto extends \yii\db\ActiveRecord
  27. {
  28. /**
  29. * @inheritdoc
  30. */
  31. public static function tableName()
  32. {
  33. return 'commande_auto';
  34. }
  35. /**
  36. * @inheritdoc
  37. */
  38. public function rules()
  39. {
  40. return [
  41. [['id_user', 'id_etablissement', 'id_point_vente'], 'required'],
  42. [['id_user', 'id_etablissement', 'id_point_vente', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche', 'periodicite_semaine'], 'integer'],
  43. [['date_debut', 'date_fin'], 'safe'],
  44. ];
  45. }
  46. /**
  47. * @inheritdoc
  48. */
  49. public function attributeLabels()
  50. {
  51. return [
  52. 'id' => 'ID',
  53. 'id_user' => 'Utilisateur',
  54. 'id_etablissement' => 'Etablissement',
  55. 'id_point_vente' => 'Point de vente',
  56. 'date_debut' => 'Date de début',
  57. 'date_fin' => 'Date de fin',
  58. 'lundi' => 'Lundi',
  59. 'mardi' => 'Mardi',
  60. 'mercredi' => 'Mercredi',
  61. 'jeudi' => 'Jeudi',
  62. 'vendredi' => 'Vendredi',
  63. 'samedi' => 'Samedi',
  64. 'dimanche' => 'Dimanche',
  65. 'periodicite_semaine' => 'Périodicité',
  66. ];
  67. }
  68. public function getUser()
  69. {
  70. return $this->hasOne(User::className(), ['id'=>'id_user']) ;
  71. }
  72. public function getEtablissement()
  73. {
  74. return $this->hasOne(Etablissement::className(), ['id'=>'id_etablissement']) ;
  75. }
  76. public function getPointVente()
  77. {
  78. return $this->hasOne(PointVente::className(), ['id'=>'id_point_vente']) ;
  79. }
  80. public function getCommandeAutoProduit()
  81. {
  82. return $this->hasMany(CommandeAutoProduit::className(), ['id_commande_auto'=>'id'])->with('produit') ;
  83. }
  84. public static function getAll($date)
  85. {
  86. $date = date('Y-m-d', strtotime($date)) ;
  87. // commandes auto
  88. $commandes_auto = self::find()
  89. ->with('commandeAutoProduit')
  90. ->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement])
  91. ->all() ;
  92. $arr_commandes_auto = [] ;
  93. foreach($commandes_auto as $c)
  94. {
  95. // vérif dates
  96. if($date >= $c->date_debut &&
  97. (!$c->date_fin || $date <= $c->date_fin))
  98. {
  99. // périodicite
  100. $nb_jours = (strtotime($date) - strtotime($c->date_debut)) / (24*60*60) ;
  101. if($nb_jours % ($c->periodicite_semaine * 7) < 7 )
  102. {
  103. // jour de la semaine
  104. $jour = date('N', strtotime($date)) ;
  105. switch($jour)
  106. {
  107. case 1 : $jour = 'lundi' ;
  108. case 2 : $jour = 'mardi' ;
  109. case 3 : $jour = 'mercredi' ;
  110. case 4 : $jour = 'jeudi' ;
  111. case 5 : $jour = 'vendredi' ;
  112. case 6 : $jour = 'samedi' ;
  113. case 7 : $jour = 'dimanche' ;
  114. }
  115. if($c->$jour)
  116. {
  117. $arr_commandes_auto[] = $c ;
  118. }
  119. }
  120. }
  121. }
  122. return $arr_commandes_auto ;
  123. }
  124. public static function addAll($date)
  125. {
  126. // production
  127. $production = Production::findOne(['date' => date('Y-m-d',strtotime($date))]) ;
  128. if($production)
  129. {
  130. $count_commandes_prod = Commande::find()
  131. ->where(['id_production' => $production->id])
  132. ->count() ;
  133. if(!$count_commandes_prod)
  134. {
  135. $commandes_auto = self::getAll($date) ;
  136. foreach($commandes_auto as $c)
  137. {
  138. $c->add($date) ;
  139. }
  140. }
  141. }
  142. }
  143. public function add($date)
  144. {
  145. // production
  146. $production = Production::findOne(['date' => date('Y-m-d',strtotime($date))]) ;
  147. if($production)
  148. {
  149. // commande
  150. $commande = new Commande ;
  151. $commande->id_user = $this->id_user ;
  152. $commande->date = date('Y-m-d H:i:s') ;
  153. $commande->type = Commande::TYPE_AUTO ;
  154. $commande->id_point_vente = $this->id_point_vente ;
  155. $commande->id_production = $production->id ;
  156. $commande->save() ;
  157. // produits
  158. foreach($this->commandeAutoProduit as $commande_auto_produit)
  159. {
  160. $commande_produit = new CommandeProduit ;
  161. $commande_produit->id_commande = $commande->id ;
  162. $commande_produit->id_produit = $commande_auto_produit->produit->id ;
  163. $commande_produit->quantite = $commande_auto_produit->quantite ;
  164. $commande_produit->prix = $commande_auto_produit->produit->prix ;
  165. $commande_produit->save() ;
  166. }
  167. }
  168. }
  169. }