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.

265 lines
7.2KB

  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. const STATUT_PAYEE = 'payee' ;
  27. const STATUT_IMPAYEE = 'impayee' ;
  28. const STATUT_SURPLUS = 'surplus' ;
  29. /**
  30. * @inheritdoc
  31. */
  32. public static function tableName()
  33. {
  34. return 'commande';
  35. }
  36. public function init() {
  37. if(isset($this->commandeProduits))
  38. {
  39. foreach($this->commandeProduits as $p)
  40. {
  41. if(isset($p->produit) && $p->produit->vrac)
  42. {
  43. $this->montant_vrac += $p->prix * $p->quantite/1000 ;
  44. $this->poids_vrac += $p->quantite/1000 ;
  45. }
  46. else {
  47. $this->montant_pain += $p->prix * $p->quantite ;
  48. if(isset($p->produit))
  49. $this->poids_pain += $p->quantite * $p->produit->poids/1000 ;
  50. }
  51. }
  52. $this->montant = $this->montant_vrac + $this->montant_pain ;
  53. }
  54. if(isset($this->creditHistorique) && !$this->montant_paye)
  55. {
  56. foreach($this->creditHistorique as $ch)
  57. {
  58. if($ch->type == CreditHistorique::TYPE_PAIEMENT)
  59. $this->montant_paye += $ch->montant ;
  60. elseif($ch->type == CreditHistorique::TYPE_REMBOURSEMENT)
  61. $this->montant_paye -= $ch->montant ;
  62. }
  63. }
  64. }
  65. public static function getQuantiteProduit($id_produit, $commandes) {
  66. $quantite = 0 ;
  67. if(isset($commandes) && is_array($commandes) && count($commandes)) {
  68. foreach($commandes as $c) {
  69. foreach($c->commandeProduits as $cp) {
  70. if($cp->id_produit == $id_produit)
  71. $quantite += $cp->quantite ;
  72. }
  73. }
  74. }
  75. return $quantite ;
  76. }
  77. /*
  78. * relations
  79. */
  80. public function getUser() {
  81. return $this->hasOne(User::className(), ['id'=>'id_user']) ;
  82. }
  83. public function getCommandeProduits() {
  84. return $this->hasMany(CommandeProduit::className(), ['id_commande'=>'id'])->with('produit') ;
  85. }
  86. public function getProduction() {
  87. return $this->hasOne(Production::className(), ['id'=>'id_production'])->with('etablissement') ;
  88. }
  89. public function getPointVente() {
  90. return $this->hasOne(PointVente::className(), ['id'=>'id_point_vente'])->with('pointVenteUser') ;
  91. }
  92. public function getCreditHistorique()
  93. {
  94. return $this->hasMany(CreditHistorique::className(), ['id_commande'=>'id']) ;
  95. }
  96. /**
  97. * @inheritdoc
  98. */
  99. public function rules()
  100. {
  101. return [
  102. [['id_user', 'date', 'id_point_vente','id_production'], 'required','message'=>''],
  103. [['id_user', 'id_point_vente', 'id_production'], 'integer'],
  104. [['date', 'date_update','commentaire', 'commentaire_point_vente'], 'safe']
  105. ];
  106. }
  107. /**
  108. * @inheritdoc
  109. */
  110. public function attributeLabels()
  111. {
  112. return [
  113. 'id' => 'ID',
  114. 'id_user' => 'Id User',
  115. 'date' => 'Date',
  116. 'date_update' => 'Date Update',
  117. 'id_point_vente' => 'Point de vente',
  118. 'id_production' => 'Date de production',
  119. ];
  120. }
  121. public function strListeVrac()
  122. {
  123. $str = '' ;
  124. foreach($this->commandeProduits as $cp) {
  125. if($cp->produit->vrac) {
  126. $str .= $cp->quantite.'&nbsp;'.Html::encode($cp->produit->diminutif).', ' ;
  127. }
  128. }
  129. return substr($str, 0, strlen($str) - 2) ;
  130. }
  131. public function getMontantPaye()
  132. {
  133. if($this->montant_paye)
  134. {
  135. return $this->montant_paye ;
  136. }
  137. else {
  138. $historique = CreditHistorique::find()
  139. ->where(['id_commande' => $this->id])
  140. ->all() ;
  141. $montant = 0 ;
  142. foreach($historique as $ch)
  143. {
  144. if($ch->type == CreditHistorique::TYPE_PAIEMENT)
  145. $montant += $ch->montant ;
  146. elseif($ch->type == CreditHistorique::TYPE_REMBOURSEMENT)
  147. $montant -= $ch->montant ;
  148. }
  149. return $montant ;
  150. }
  151. }
  152. public function getMontant($format = false)
  153. {
  154. if($format)
  155. return number_format($this->getMontant(),2).' €' ;
  156. else
  157. return $this->montant ;
  158. }
  159. public function getMontantFormat()
  160. {
  161. return number_format($this->getMontant(),2).' €' ;
  162. }
  163. public function getMontantRestant($format = false)
  164. {
  165. $montant_restant = $this->getMontant() - $this->getMontantPaye() ;
  166. if($format)
  167. return number_format($montant_restant, 2).' €';
  168. else
  169. return $montant_restant ;
  170. }
  171. public function getMontantSurplus($format = false)
  172. {
  173. $montant_surplus = $this->getMontantPaye() - $this->getMontant() ;
  174. if($format)
  175. return number_format($montant_surplus, 2).' €';
  176. else
  177. return $montant_surplus ;
  178. }
  179. public function getDataJson()
  180. {
  181. $commande = Commande::find()->with('commandeProduits')->where(['id' => $this->id])->one() ;
  182. $commande->init() ;
  183. $json_commande = [
  184. 'produits'=> [],
  185. 'montant' => $commande->montant,
  186. 'str_montant' => $commande->getMontantFormat(),
  187. 'montant_paye' => $commande->getMontantPaye()
  188. ] ;
  189. foreach($commande->commandeProduits as $commande_produit)
  190. {
  191. $json_commande['produits'][$commande_produit->id_produit] = $commande_produit->quantite ;
  192. }
  193. return json_encode($json_commande) ;
  194. }
  195. public function creditHistorique($type, $montant, $id_etablissement, $id_user)
  196. {
  197. $credit_historique = new CreditHistorique ;
  198. $credit_historique->id_user = $this->id_user ;
  199. $credit_historique->id_commande = $this->id ;
  200. $credit_historique->montant = $montant ;
  201. $credit_historique->type = $type ;
  202. $credit_historique->id_etablissement = $id_etablissement ;
  203. $credit_historique->id_user_action = $id_user ;
  204. $credit_historique->save() ;
  205. }
  206. public function getStatutPaiement()
  207. {
  208. // payé
  209. if($this->montant - $this->montant_paye < 0.001)
  210. {
  211. return self::STATUT_PAYEE ;
  212. }
  213. // reste à payer
  214. elseif($this->montant - $this->montant_paye > 0.01)
  215. {
  216. return self::STATUT_IMPAYEE ;
  217. }
  218. // à rembourser
  219. elseif($this->montant - $this->montant_paye < 0.01)
  220. {
  221. return self::STATUT_SURPLUS ;
  222. }
  223. }
  224. }