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() { // à rembourser if($this->getMontant() - $this->getMontantPaye() < 0) { return self::STATUT_SURPLUS ; } // payé elseif($this->getMontant() - $this->getMontantPaye() < 0.001) { return self::STATUT_PAYEE ; } // reste à payer elseif($this->getMontant() - $this->getMontantPaye() > 0.01) { return self::STATUT_IMPAYEE ; } } 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 .= '
' ; } } return $html ; } public function getResumePointVente() { $html = '' ; if(isset($this->pointVente)) { $html .= ''.Html::encode($this->pointVente->nom) .'' . '
'.Html::encode($this->pointVente->localite).'' ; if(strlen($this->commentaire_point_vente)) { $html .= '
'.Html::encode($this->commentaire_point_vente).'
' ; } } else { $html .= 'Point de vente supprimé' ; } return $html ; } public function getStrMontant() { return number_format($this->montant,2).' €' ; } public function getResumeMontant() { $html = '' ; $html .= $this->getStrMontant().'
' ; if($this->montant_paye) { if($this->getStatutPaiement() == Commande::STATUT_PAYEE) { $html .= 'Payée' ; } elseif($this->getStatutPaiement() == Commande::STATUT_IMPAYEE) { $html .= 'Non payée
Reste '.$this->getMontantRestant(true).' à payer' ; } elseif($this->getStatutPaiement() == Commande::STATUT_SURPLUS) { $html .= 'Payée' ; } } else { $html .= 'À régler sur place' ; } 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', 'creditHistorique', 'pointVente') ->joinWith(['production','user']) ->where(['production.id_etablissement' => $params['id_etablissement']]) ; if(isset($params['condition'])) $commandes = $commandes->andWhere($params['condition']); if(isset($params['date'])) $commandes = $commandes->andWhere(['production.date' => $params['date']]); if(isset($params['type'])) $commandes = $commandes->andWhere(['commande.type' => $params['type']]); if(isset($params['orderby'])) $commandes = $commandes->orderBy($params['orderby']); 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 ; } }