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

242 lines
7.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::findOne([
  155. 'date' => date('Y-m-d',strtotime($date)),
  156. 'id_etablissement' => Yii::$app->user->identity->id_etablissement
  157. ]) ;
  158. if($production && count($this->commandeAutoProduit))
  159. {
  160. // commande
  161. $commande = new Commande ;
  162. if(strlen($this->username))
  163. {
  164. $commande->username = $this->username ;
  165. $commande->id_user = 0 ;
  166. }
  167. else {
  168. $commande->id_user = $this->id_user ;
  169. }
  170. $commande->date = date('Y-m-d H:i:s') ;
  171. $commande->type = Commande::TYPE_AUTO ;
  172. $commande->id_point_vente = $this->id_point_vente ;
  173. $commande->id_production = $production->id ;
  174. $point_vente_user = PointVenteUser::find()
  175. ->where(['id_point_vente' => $this->id_point_vente, 'id_user' => $this->id_user])
  176. ->one() ;
  177. if($point_vente_user && strlen($point_vente_user->commentaire)) {
  178. $commande->commentaire_point_vente = $point_vente_user->commentaire ;
  179. }
  180. $commande->save() ;
  181. // produits
  182. $montant_total = 0 ;
  183. foreach($this->commandeAutoProduit as $commande_auto_produit)
  184. {
  185. $commande_produit = new CommandeProduit ;
  186. $commande_produit->id_commande = $commande->id ;
  187. $commande_produit->id_produit = $commande_auto_produit->produit->id ;
  188. $commande_produit->quantite = $commande_auto_produit->quantite ;
  189. $commande_produit->prix = $commande_auto_produit->produit->prix ;
  190. $commande_produit->save() ;
  191. }
  192. // on débite automatiquement le crédit pain du client
  193. if($commande->id_user && $this->paiement_automatique && Etablissement::getConfig('credit_pain'))
  194. {
  195. $commande = Commande::find()
  196. ->with('commandeProduits')
  197. ->where(['id' => $commande->id])
  198. ->one() ;
  199. $commande->init() ;
  200. $commande->creditHistorique(
  201. CreditHistorique::TYPE_PAIEMENT,
  202. $commande->getMontant(),
  203. $production->id_etablissement,
  204. $commande->id_user
  205. ) ;
  206. }
  207. }
  208. }
  209. }