|
- <?php
-
- namespace common\models;
-
- use Yii;
- use yii\helpers\Html ;
-
- /**
- * This is the model class for table "commande".
- *
- * @property integer $id
- * @property integer $id_user
- * @property string $date
- * @property string $date_update
- * @property integer $id_point_vente
- * @property integer $id_production
- */
- class Commande extends \yii\db\ActiveRecord
- {
- var $montant = 0 ;
- var $montant_pain = 0 ;
- var $montant_vrac = 0 ;
- var $montant_paye = 0 ;
- var $poids_pain = 0 ;
- var $poids_vrac = 0 ;
-
- const TYPE_AUTO = 'auto' ;
- const TYPE_USER = 'user' ;
- const TYPE_ADMIN = 'admin' ;
-
- const STATUT_PAYEE = 'payee' ;
- const STATUT_IMPAYEE = 'impayee' ;
- const STATUT_SURPLUS = 'surplus' ;
-
-
- /**
- * @inheritdoc
- */
- public static function tableName()
- {
- return 'commande';
- }
-
- public function init() {
- if(isset($this->commandeProduits))
- {
- foreach($this->commandeProduits as $p)
- {
-
- if(isset($p->produit) && $p->produit->vrac)
- {
- $this->montant_vrac += $p->prix * $p->quantite/1000 ;
- $this->poids_vrac += $p->quantite/1000 ;
- }
- else {
- $this->montant_pain += $p->prix * $p->quantite ;
- if(isset($p->produit))
- $this->poids_pain += $p->quantite * $p->produit->poids/1000 ;
- }
- }
-
- $this->montant = $this->montant_vrac + $this->montant_pain ;
- }
- if(isset($this->creditHistorique) && !$this->montant_paye)
- {
- foreach($this->creditHistorique as $ch)
- {
- if($ch->type == CreditHistorique::TYPE_PAIEMENT)
- $this->montant_paye += $ch->montant ;
- elseif($ch->type == CreditHistorique::TYPE_REMBOURSEMENT)
- $this->montant_paye -= $ch->montant ;
- }
- }
- }
-
- public static function getQuantiteProduit($id_produit, $commandes) {
-
- $quantite = 0 ;
-
- if(isset($commandes) && is_array($commandes) && count($commandes)) {
- foreach($commandes as $c) {
- foreach($c->commandeProduits as $cp) {
- if($cp->id_produit == $id_produit)
- $quantite += $cp->quantite ;
- }
- }
- }
-
- return $quantite ;
- }
-
- /*
- * relations
- */
-
- public function getUser() {
- return $this->hasOne(User::className(), ['id'=>'id_user']) ;
- }
-
- public function getCommandeProduits() {
- return $this->hasMany(CommandeProduit::className(), ['id_commande'=>'id'])->with('produit') ;
- }
-
- public function getProduction() {
- return $this->hasOne(Production::className(), ['id'=>'id_production'])->with('etablissement') ;
- }
-
- public function getPointVente() {
- return $this->hasOne(PointVente::className(), ['id'=>'id_point_vente'])->with('pointVenteUser') ;
- }
-
- public function getCreditHistorique()
- {
- return $this->hasMany(CreditHistorique::className(), ['id_commande'=>'id']) ;
- }
-
- /**
- * @inheritdoc
- */
- public function rules()
- {
- return [
- [['id_user', 'date', 'id_point_vente','id_production'], 'required','message'=>''],
- [['id_user', 'id_point_vente', 'id_production'], 'integer'],
- [['date', 'date_update','commentaire', 'commentaire_point_vente'], 'safe']
- ];
- }
-
- /**
- * @inheritdoc
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'id_user' => 'Id User',
- 'date' => 'Date',
- 'date_update' => 'Date Update',
- 'id_point_vente' => 'Point de vente',
- 'id_production' => 'Date de production',
- ];
- }
-
- public function strListeVrac()
- {
- $str = '' ;
-
- foreach($this->commandeProduits as $cp) {
- if($cp->produit->vrac) {
- $str .= $cp->quantite.' '.Html::encode($cp->produit->diminutif).', ' ;
- }
- }
-
- return substr($str, 0, strlen($str) - 2) ;
- }
-
- public function getMontantPaye()
- {
- if($this->montant_paye)
- {
- return $this->montant_paye ;
- }
- else {
- $historique = CreditHistorique::find()
- ->where(['id_commande' => $this->id])
- ->all() ;
-
- $montant = 0 ;
-
- foreach($historique as $ch)
- {
- if($ch->type == CreditHistorique::TYPE_PAIEMENT)
- $montant += $ch->montant ;
- elseif($ch->type == CreditHistorique::TYPE_REMBOURSEMENT)
- $montant -= $ch->montant ;
- }
-
- return $montant ;
- }
- }
-
- public function getMontant($format = false)
- {
- if($format)
- return number_format($this->getMontant(),2).' €' ;
- else
- return $this->montant ;
- }
-
- public function getMontantFormat()
- {
- return number_format($this->getMontant(),2).' €' ;
- }
-
- public function getMontantRestant($format = false)
- {
- $montant_restant = $this->getMontant() - $this->getMontantPaye() ;
- if($format)
- return number_format($montant_restant, 2).' €';
- else
- return $montant_restant ;
- }
-
- public function getMontantSurplus($format = false)
- {
- $montant_surplus = $this->getMontantPaye() - $this->getMontant() ;
- if($format)
- return number_format($montant_surplus, 2).' €';
- else
- return $montant_surplus ;
- }
-
- public function getDataJson()
- {
- $commande = Commande::find()->with('commandeProduits')->where(['id' => $this->id])->one() ;
-
- $commande->init() ;
-
- $json_commande = [
- 'produits'=> [],
- 'montant' => $commande->montant,
- 'str_montant' => $commande->getMontantFormat(),
- 'montant_paye' => $commande->getMontantPaye()
- ] ;
-
- foreach($commande->commandeProduits as $commande_produit)
- {
- $json_commande['produits'][$commande_produit->id_produit] = $commande_produit->quantite ;
- }
-
- return json_encode($json_commande) ;
- }
-
- public function creditHistorique($type, $montant, $id_etablissement, $id_user)
- {
- $credit_historique = new CreditHistorique ;
- $credit_historique->id_user = $this->id_user ;
- $credit_historique->id_commande = $this->id ;
- $credit_historique->montant = $montant ;
- $credit_historique->type = $type ;
- $credit_historique->id_etablissement = $id_etablissement ;
- $credit_historique->id_user_action = $id_user ;
- $credit_historique->save() ;
- }
-
- public function getStatutPaiement()
- {
- // payé
- if($this->montant - $this->montant_paye < 0.001)
- {
- return self::STATUT_PAYEE ;
- }
- // reste à payer
- elseif($this->montant - $this->montant_paye > 0.01)
- {
- return self::STATUT_IMPAYEE ;
- }
- // à rembourser
- elseif($this->montant - $this->montant_paye < 0.01)
- {
- return self::STATUT_SURPLUS ;
- }
- }
- }
|