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.

198 satır
5.1KB

  1. <?php
  2. namespace common\models;
  3. use Yii;
  4. use yii\helpers\Html ;
  5. /**
  6. * This is the model class for table "commande".
  7. *
  8. * @property integer $id
  9. * @property integer $id_user
  10. * @property string $date
  11. * @property string $date_update
  12. * @property integer $id_point_vente
  13. * @property integer $id_production
  14. */
  15. class Commande extends \yii\db\ActiveRecord
  16. {
  17. var $montant = 0 ;
  18. var $montant_pain = 0 ;
  19. var $montant_vrac = 0 ;
  20. var $montant_paye = 0 ;
  21. var $poids_pain = 0 ;
  22. var $poids_vrac = 0 ;
  23. const TYPE_AUTO = 'auto' ;
  24. const TYPE_USER = 'user' ;
  25. const TYPE_ADMIN = 'admin' ;
  26. /**
  27. * @inheritdoc
  28. */
  29. public static function tableName()
  30. {
  31. return 'commande';
  32. }
  33. public function init() {
  34. if(isset($this->commandeProduits))
  35. {
  36. foreach($this->commandeProduits as $p)
  37. {
  38. if(isset($p->produit) && $p->produit->vrac)
  39. {
  40. $this->montant_vrac += $p->prix * $p->quantite/1000 ;
  41. $this->poids_vrac += $p->quantite/1000 ;
  42. }
  43. else {
  44. $this->montant_pain += $p->prix * $p->quantite ;
  45. if(isset($p->produit))
  46. $this->poids_pain += $p->quantite * $p->produit->poids/1000 ;
  47. }
  48. }
  49. $this->montant = $this->montant_vrac + $this->montant_pain ;
  50. }
  51. if(isset($this->creditHistorique))
  52. {
  53. foreach($this->creditHistorique as $ch)
  54. {
  55. if($ch->type == CreditHistorique::TYPE_PAIEMENT)
  56. $this->montant_paye += $ch->montant ;
  57. elseif($ch->type == CreditHistorique::TYPE_REMBOURSEMENT)
  58. $this->montant_paye -= $ch->montant ;
  59. }
  60. }
  61. }
  62. public static function getQuantiteProduit($id_produit, $commandes) {
  63. $quantite = 0 ;
  64. if(isset($commandes) && is_array($commandes) && count($commandes)) {
  65. foreach($commandes as $c) {
  66. foreach($c->commandeProduits as $cp) {
  67. if($cp->id_produit == $id_produit)
  68. $quantite += $cp->quantite ;
  69. }
  70. }
  71. }
  72. return $quantite ;
  73. }
  74. /*
  75. * relations
  76. */
  77. public function getUser() {
  78. return $this->hasOne(User::className(), ['id'=>'id_user']) ;
  79. }
  80. public function getCommandeProduits() {
  81. return $this->hasMany(CommandeProduit::className(), ['id_commande'=>'id'])->with('produit') ;
  82. }
  83. public function getProduction() {
  84. return $this->hasOne(Production::className(), ['id'=>'id_production'])->with('etablissement') ;
  85. }
  86. public function getPointVente() {
  87. return $this->hasOne(PointVente::className(), ['id'=>'id_point_vente']) ;
  88. }
  89. public function getCreditHistorique()
  90. {
  91. return $this->hasMany(CreditHistorique::className(), ['id_commande'=>'id']) ;
  92. }
  93. /**
  94. * @inheritdoc
  95. */
  96. public function rules()
  97. {
  98. return [
  99. [['id_user', 'date', 'id_point_vente','id_production'], 'required','message'=>''],
  100. [['id_user', 'id_point_vente', 'id_production'], 'integer'],
  101. [['date', 'date_update','commentaire'], 'safe']
  102. ];
  103. }
  104. /**
  105. * @inheritdoc
  106. */
  107. public function attributeLabels()
  108. {
  109. return [
  110. 'id' => 'ID',
  111. 'id_user' => 'Id User',
  112. 'date' => 'Date',
  113. 'date_update' => 'Date Update',
  114. 'id_point_vente' => 'Point de vente',
  115. 'id_production' => 'Date de production',
  116. ];
  117. }
  118. public function strListeVrac()
  119. {
  120. $str = '' ;
  121. foreach($this->commandeProduits as $cp) {
  122. if($cp->produit->vrac) {
  123. $str .= $cp->quantite.'&nbsp;'.Html::encode($cp->produit->diminutif).', ' ;
  124. }
  125. }
  126. return substr($str, 0, strlen($str) - 2) ;
  127. }
  128. public function getMontantPaye()
  129. {
  130. $historique = CreditHistorique::find()
  131. ->where(['id_commande' => $this->id])
  132. ->all() ;
  133. $montant = 0 ;
  134. foreach($historique as $ch)
  135. {
  136. if($ch->type == CreditHistorique::TYPE_PAIEMENT)
  137. $montant += $ch->montant ;
  138. elseif($ch->type == CreditHistorique::TYPE_REMBOURSEMENT)
  139. $montant -= $ch->montant ;
  140. }
  141. return $montant ;
  142. }
  143. public function getMontantFormat()
  144. {
  145. return number_format($this->montant,2).' €' ;
  146. }
  147. public function getDataJson()
  148. {
  149. $commande = Commande::find()->with('commandeProduits')->where(['id' => $this->id])->one() ;
  150. $commande->init() ;
  151. $json_commande = [
  152. 'produits'=> [],
  153. 'montant' => $commande->montant,
  154. 'str_montant' => $commande->getMontantFormat(),
  155. 'montant_paye' => $commande->getMontantPaye()
  156. ] ;
  157. foreach($commande->commandeProduits as $commande_produit)
  158. {
  159. $json_commande['produits'][$commande_produit->id_produit] = $commande_produit->quantite ;
  160. }
  161. return json_encode($json_commande) ;
  162. }
  163. }