|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- <?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(),
- '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 getResumeMontant()
- {
- $html = '' ;
-
- $html .= number_format($this->montant,2).' €<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 ;
-
- }
- }
|