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.

218 line
6.7KB

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