|
- <?php
-
- namespace common\models;
-
- use Yii;
- use yii\helpers\Html ;
- use common\models\Etablissement ;
-
- /**
- * 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' ;
-
- const ETAT_MODIFIABLE = 'ouverte' ;
- const ETAT_PREPARATION = 'preparation' ;
- const ETAT_LIVREE = 'livree' ;
-
- /**
- * @inheritdoc
- */
- public static function tableName()
- {
- return 'commande';
- }
-
- public function init() {
- if(isset($this->commandeProduits))
- {
- foreach($this->commandeProduits as $p)
- {
- if($p->mode_vente == 'unite')
- {
- $this->montant_pain += $p->prix * $p->quantite ;
- }
- elseif($p->mode_vente == 'poids')
- {
- $this->montant_pain += $p->prix * $p->quantite/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(),
- 'commentaire' => $commande->commentaire,
- ] ;
-
- 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 ;
- }
- }
-
- public function getResumePanier()
- {
- if(!isset($this->commandeProduits))
- $this->commandeProduits = CommandeProduit::find()->where(['id_commande' => $this->id])->all() ;
-
- $html = '' ;
- $count = count($this->commandeProduits);
- $i = 0;
- foreach($this->commandeProduits as $p)
- {
- if(isset($p->produit))
- {
- $html .= $p->quantite.' x '.Html::encode($p->produit->nom) ;
- if(++$i != $count) $html .= '<br />' ;
-
- }
- }
- return $html ;
- }
-
- public function getResumePointVente()
- {
- $html = '' ;
-
- if(isset($this->pointVente))
- {
- $html .= '<span class="nom-point-vente">'.Html::encode($this->pointVente->nom) .'</span>'
- . '<br /><span class="localite">'.Html::encode($this->pointVente->localite).'</span>' ;
- if(strlen($this->commentaire_point_vente))
- {
- $html .= '<div class="commentaire"><span>'.Html::encode($this->commentaire_point_vente).'</span></div>' ;
- }
- }
- else {
- $html .= 'Point de vente supprimé' ;
- }
-
- return $html ;
- }
-
- public function getStrMontant()
- {
- return number_format($this->montant,2).' €' ;
- }
-
- public function getResumeMontant()
- {
- $html = '' ;
-
- $html .= $this->getStrMontant().'<br />' ;
-
- if($this->montant_paye)
- {
- if($this->getStatutPaiement() == Commande::STATUT_PAYEE)
- {
- $html .= '<span class="label label-success">Payée</span>' ;
- }
- elseif($this->getStatutPaiement() == Commande::STATUT_IMPAYEE)
- {
- $html .= '<span class="label label-danger">Non payée</span><br />
- Reste <strong>'.$this->getMontantRestant(true).'</strong> à payer' ;
-
- }
- elseif($this->getStatutPaiement() == Commande::STATUT_SURPLUS)
- {
- $html .= '<span class="label label-success">Payée</span>' ;
- }
- }
- else {
- $html .= '<span class="label label-default">À régler sur place</span>' ;
- }
-
- return $html ;
- }
-
- public function getStrUser()
- {
- if(isset($this->user))
- {
- return Html::encode($this->user->prenom.' '.$this->user->nom) ;
- }
- elseif(strlen($this->username)) {
- return Html::encode($this->username) ;
- }
- else {
- return 'Client introuvable' ;
- }
- }
-
- public static function findBy($params = [])
- {
-
- if(!isset($params['id_etablissement']))
- $params['id_etablissement'] = Yii::$app->user->identity->id_etablissement ;
-
- $commandes = Commande::find()
- ->with('commandeProduits', 'user', 'creditHistorique', 'pointVente')
- ->joinWith('production')
- ->where(['production.id_etablissement' => $params['id_etablissement']]) ;
-
-
- if(isset($params['date']))
- $commandes = $commandes->andWhere(['production.date' => $params['date']]);
-
- if(isset($params['order']))
- $commandes = $commandes->orderBy('date '.$params['order']);
- else
- $commandes = $commandes->orderBy('date ASC');
-
- if(isset($params['limit']))
- $commandes = $commandes->limit($params['limit']) ;
-
- $commandes = $commandes->all() ;
-
- return $commandes ;
-
- }
-
- public function getEtat()
- {
- $delai_commande = Etablissement::getConfig('delai_commande',$this->production->id_etablissement) ;
- $heure_limite = Etablissement::getConfig('heure_limite_commande',$this->production->id_etablissement) ;
-
- $date_commande = strtotime($this->production->date) ;
- $date_today = strtotime(date('Y-m-d'));
- $heure_today = date('G') ;
-
- $nb_jours = (int) (($date_commande - $date_today) / (24 * 60 * 60)) ;
-
- if($nb_jours <= 0)
- {
- return self::ETAT_LIVREE ;
- }
- elseif($nb_jours >= $delai_commande &&
- ($nb_jours != $delai_commande ||
- ($nb_jours == $delai_commande && $heure_today < $heure_limite)))
- {
- return self::ETAT_MODIFIABLE ;
- }
-
- return self::ETAT_PREPARATION ;
- }
-
- }
|