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.

273 lines
8.6KB

  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. * @property string $paiement_automatique
  28. */
  29. class CommandeAuto extends \yii\db\ActiveRecord
  30. {
  31. /**
  32. * @inheritdoc
  33. */
  34. public static function tableName()
  35. {
  36. return 'commande_auto';
  37. }
  38. /**
  39. * @inheritdoc
  40. */
  41. public function rules()
  42. {
  43. return [
  44. [['id_etablissement', 'id_point_vente'], 'required'],
  45. [['id_user', 'id_etablissement', 'id_point_vente', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche', 'periodicite_semaine'], 'integer'],
  46. [['paiement_automatique'], 'boolean'],
  47. [['date_debut', 'date_fin','username'], 'safe'],
  48. ];
  49. }
  50. /**
  51. * @inheritdoc
  52. */
  53. public function attributeLabels()
  54. {
  55. return [
  56. 'id' => 'ID',
  57. 'id_user' => 'Utilisateur',
  58. 'id_etablissement' => 'Etablissement',
  59. 'id_point_vente' => 'Point de vente',
  60. 'date_debut' => 'Date de début',
  61. 'date_fin' => 'Date de fin',
  62. 'lundi' => 'Lundi',
  63. 'mardi' => 'Mardi',
  64. 'mercredi' => 'Mercredi',
  65. 'jeudi' => 'Jeudi',
  66. 'vendredi' => 'Vendredi',
  67. 'samedi' => 'Samedi',
  68. 'dimanche' => 'Dimanche',
  69. 'periodicite_semaine' => 'Périodicité',
  70. 'paiement_automatique' => 'Paiement automatique'
  71. ];
  72. }
  73. public function getUser()
  74. {
  75. return $this->hasOne(User::className(), ['id'=>'id_user']) ;
  76. }
  77. public function getEtablissement()
  78. {
  79. return $this->hasOne(Etablissement::className(), ['id'=>'id_etablissement']) ;
  80. }
  81. public function getPointVente()
  82. {
  83. return $this->hasOne(PointVente::className(), ['id'=>'id_point_vente']) ;
  84. }
  85. public function getCommandeAutoProduit()
  86. {
  87. return $this->hasMany(CommandeAutoProduit::className(), ['id_commande_auto'=>'id'])->with('produit') ;
  88. }
  89. public static function getAll($date)
  90. {
  91. $date = date('Y-m-d', strtotime($date)) ;
  92. // commandes auto
  93. $commandes_auto = self::find()
  94. ->with('commandeAutoProduit')
  95. ->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement])
  96. ->all() ;
  97. $arr_commandes_auto = [] ;
  98. foreach($commandes_auto as $c)
  99. {
  100. // vérif dates
  101. if($date >= $c->date_debut &&
  102. (!$c->date_fin || $date <= $c->date_fin))
  103. {
  104. // périodicite
  105. $nb_jours = (strtotime($date) - strtotime($c->date_debut)) / (24*60*60) ;
  106. if($nb_jours % ($c->periodicite_semaine * 7) < 7 )
  107. {
  108. // jour de la semaine
  109. $jour = date('N', strtotime($date)) ;
  110. switch($jour)
  111. {
  112. case 1 : $jour = 'lundi' ; break ;
  113. case 2 : $jour = 'mardi' ; break ;
  114. case 3 : $jour = 'mercredi' ; break ;
  115. case 4 : $jour = 'jeudi' ; break ;
  116. case 5 : $jour = 'vendredi' ; break ;
  117. case 6 : $jour = 'samedi' ; break ;
  118. case 7 : $jour = 'dimanche' ; break ;
  119. }
  120. if($c->$jour)
  121. {
  122. $arr_commandes_auto[] = $c ;
  123. }
  124. }
  125. }
  126. }
  127. return $arr_commandes_auto ;
  128. }
  129. public static function addAll($date)
  130. {
  131. // production
  132. $production = Production::findOne([
  133. 'date' => date('Y-m-d',strtotime($date)),
  134. 'id_etablissement' => Yii::$app->user->identity->id_etablissement
  135. ]) ;
  136. if($production)
  137. {
  138. $count_commandes_prod = Commande::find()
  139. ->where(['id_production' => $production->id])
  140. ->count() ;
  141. if(!$count_commandes_prod)
  142. {
  143. $commandes_auto = self::getAll($date) ;
  144. foreach($commandes_auto as $c)
  145. {
  146. $c->add($date) ;
  147. }
  148. }
  149. }
  150. }
  151. public function add($date)
  152. {
  153. // production
  154. $production = Production::find()
  155. ->where([
  156. 'date' => date('Y-m-d',strtotime($date)),
  157. 'id_etablissement' => Yii::$app->user->identity->id_etablissement
  158. ])
  159. ->with('productionProduit')
  160. ->one() ;
  161. if($production && count($this->commandeAutoProduit))
  162. {
  163. // commande
  164. $commande = new Commande ;
  165. if(strlen($this->username))
  166. {
  167. $commande->username = $this->username ;
  168. $commande->id_user = 0 ;
  169. }
  170. else {
  171. $commande->id_user = $this->id_user ;
  172. }
  173. $commande->date = date('Y-m-d H:i:s') ;
  174. $commande->type = Commande::TYPE_AUTO ;
  175. $commande->id_point_vente = $this->id_point_vente ;
  176. $commande->id_production = $production->id ;
  177. $point_vente_user = PointVenteUser::find()
  178. ->where(['id_point_vente' => $this->id_point_vente, 'id_user' => $this->id_user])
  179. ->one() ;
  180. if($point_vente_user && strlen($point_vente_user->commentaire)) {
  181. $commande->commentaire_point_vente = $point_vente_user->commentaire ;
  182. }
  183. $commande->save() ;
  184. // produits
  185. $montant_total = 0 ;
  186. $produits_add = false ;
  187. foreach($this->commandeAutoProduit as $commande_auto_produit)
  188. {
  189. if($production->produitActif($commande_auto_produit->produit->id))
  190. {
  191. $commande_produit = new CommandeProduit ;
  192. $commande_produit->id_commande = $commande->id ;
  193. $commande_produit->id_produit = $commande_auto_produit->produit->id ;
  194. $commande_produit->quantite = $commande_auto_produit->quantite ;
  195. $commande_produit->prix = $commande_auto_produit->produit->prix ;
  196. $commande_produit->save() ;
  197. $produits_add = true;
  198. }
  199. }
  200. if(!$produits_add)
  201. {
  202. $commande->delete() ;
  203. }
  204. else {
  205. // on débite automatiquement le crédit pain du client
  206. if($commande->id_user &&
  207. $this->paiement_automatique &&
  208. Etablissement::getConfig('credit_pain'))
  209. {
  210. $commande = Commande::find()
  211. ->with('commandeProduits')
  212. ->where(['id' => $commande->id])
  213. ->one() ;
  214. $commande->init() ;
  215. $user_action = User::find()->where([
  216. 'id_etablissement' => $production->id_etablissement,
  217. 'status' => 11
  218. ])->one() ;
  219. if($user_action)
  220. $id_user_action = $user_action->id;
  221. else
  222. $id_user_action = NULL ;
  223. if($commande->getMontant() > 0)
  224. {
  225. $commande->creditHistorique(
  226. CreditHistorique::TYPE_PAIEMENT,
  227. $commande->getMontant(),
  228. $production->id_etablissement,
  229. $id_user_action
  230. ) ;
  231. }
  232. }
  233. }
  234. }
  235. }
  236. }