|
|
@@ -53,21 +53,21 @@ use common\models\Etablissement; |
|
|
|
* @property integer $id_production |
|
|
|
* @property boolean $paiement_automatique |
|
|
|
*/ |
|
|
|
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; |
|
|
|
class Commande extends \yii\db\ActiveRecord |
|
|
|
{ |
|
|
|
|
|
|
|
var $montant = 0 ; |
|
|
|
var $montant_paye = 0 ; |
|
|
|
var $poids = 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'; |
|
|
@@ -75,80 +75,48 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public static function tableName() { |
|
|
|
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; |
|
|
|
if(isset($p->produit)) |
|
|
|
$this->poids_pain += ($p->quantite * $p->produit->poids) / 1000 ; |
|
|
|
} 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) { |
|
|
|
if(is_null($c->date_delete)) { |
|
|
|
foreach ($c->commandeProduits as $cp) { |
|
|
|
if ($cp->id_produit == $id_produit) |
|
|
|
$quantite += $cp->quantite; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return $quantite; |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* relations |
|
|
|
*/ |
|
|
|
|
|
|
|
public function getUser() { |
|
|
|
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 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 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 getPointVente() |
|
|
|
{ |
|
|
|
return $this->hasOne(PointVente::className(), ['id' => 'id_point_vente']) |
|
|
|
->with('pointVenteUser'); |
|
|
|
} |
|
|
|
|
|
|
|
public function getCreditHistorique() { |
|
|
|
public function getCreditHistorique() |
|
|
|
{ |
|
|
|
return $this->hasMany(CreditHistorique::className(), ['id_commande' => 'id']); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public function rules() { |
|
|
|
public function rules() |
|
|
|
{ |
|
|
|
return [ |
|
|
|
[['id_user', 'date', 'id_point_vente', 'id_production'], 'required', 'message' => ''], |
|
|
|
[['id_user', 'id_point_vente', 'id_production'], 'integer'], |
|
|
@@ -160,7 +128,8 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
/** |
|
|
|
* @inheritdoc |
|
|
|
*/ |
|
|
|
public function attributeLabels() { |
|
|
|
public function attributeLabels() |
|
|
|
{ |
|
|
|
return [ |
|
|
|
'id' => 'ID', |
|
|
|
'id_user' => 'Id User', |
|
|
@@ -170,23 +139,78 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
'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) . ', '; |
|
|
|
|
|
|
|
/** |
|
|
|
* Initialise le montant total, le montant déjà payé et le poids de la |
|
|
|
* commande |
|
|
|
*/ |
|
|
|
public function init() |
|
|
|
{ |
|
|
|
// Montant |
|
|
|
if (isset($this->commandeProduits)) { |
|
|
|
foreach ($this->commandeProduits as $p) { |
|
|
|
if ($p->mode_vente == 'unite') { |
|
|
|
$this->montant += $p->prix * $p->quantite; |
|
|
|
if(isset($p->produit)) { |
|
|
|
$this->poids += ($p->quantite * $p->produit->poids) / 1000 ; |
|
|
|
} |
|
|
|
} |
|
|
|
elseif ($p->mode_vente == 'poids') { |
|
|
|
$this->montant += $p->prix * $p->quantite / 1000; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// Montant payé |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return substr($str, 0, strlen($str) - 2); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Retourne la quantité d'un produit donné de plusieurs commandes. |
|
|
|
* |
|
|
|
* @param integer $id_produit |
|
|
|
* @param array $commandes |
|
|
|
* |
|
|
|
* @return integer |
|
|
|
*/ |
|
|
|
public static function getQuantiteProduit($id_produit, $commandes) |
|
|
|
{ |
|
|
|
$quantite = 0; |
|
|
|
|
|
|
|
if (isset($commandes) && is_array($commandes) && count($commandes)) { |
|
|
|
foreach ($commandes as $c) { |
|
|
|
if(is_null($c->date_delete)) { |
|
|
|
foreach ($c->commandeProduits as $cp) { |
|
|
|
if ($cp->id_produit == $id_produit) { |
|
|
|
$quantite += $cp->quantite; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getMontantPaye() { |
|
|
|
return $quantite; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Retourne le montant payé de la commande. |
|
|
|
* |
|
|
|
* @return float |
|
|
|
*/ |
|
|
|
public function getMontantPaye() |
|
|
|
{ |
|
|
|
if ($this->montant_paye) { |
|
|
|
return $this->montant_paye; |
|
|
|
} else { |
|
|
|
} |
|
|
|
else { |
|
|
|
$historique = CreditHistorique::find() |
|
|
|
->where(['id_commande' => $this->id]) |
|
|
|
->all(); |
|
|
@@ -194,46 +218,77 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
$montant = 0; |
|
|
|
|
|
|
|
foreach ($historique as $ch) { |
|
|
|
if ($ch->type == CreditHistorique::TYPE_PAIEMENT) |
|
|
|
if ($ch->type == CreditHistorique::TYPE_PAIEMENT) { |
|
|
|
$montant += $ch->montant; |
|
|
|
elseif ($ch->type == CreditHistorique::TYPE_REMBOURSEMENT) |
|
|
|
} |
|
|
|
elseif ($ch->type == CreditHistorique::TYPE_REMBOURSEMENT) { |
|
|
|
$montant -= $ch->montant; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return $montant; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getMontant($format = false) { |
|
|
|
if ($format) |
|
|
|
/** |
|
|
|
* Retourne le montant de la commande. |
|
|
|
* |
|
|
|
* @param boolean $format |
|
|
|
* @return float |
|
|
|
*/ |
|
|
|
public function getMontant($format = false) |
|
|
|
{ |
|
|
|
if ($format) { |
|
|
|
return number_format($this->getMontant(), 2) . ' €'; |
|
|
|
else |
|
|
|
} |
|
|
|
else { |
|
|
|
return $this->montant; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getMontantFormat() { |
|
|
|
return number_format($this->getMontant(), 2) . ' €'; |
|
|
|
} |
|
|
|
|
|
|
|
public function getMontantRestant($format = false) { |
|
|
|
/** |
|
|
|
* Retourne le montant restant à payer. |
|
|
|
* |
|
|
|
* @param boolean $format |
|
|
|
* @return float |
|
|
|
*/ |
|
|
|
public function getMontantRestant($format = false) |
|
|
|
{ |
|
|
|
$montant_restant = $this->getMontant() - $this->getMontantPaye(); |
|
|
|
if ($format) |
|
|
|
if ($format) { |
|
|
|
return number_format($montant_restant, 2) . ' €'; |
|
|
|
else |
|
|
|
} |
|
|
|
else { |
|
|
|
return $montant_restant; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getMontantSurplus($format = false) { |
|
|
|
/** |
|
|
|
* Retourne le montant payé en surplus. |
|
|
|
* |
|
|
|
* @param boolean $format |
|
|
|
* @return float |
|
|
|
*/ |
|
|
|
public function getMontantSurplus($format = false) |
|
|
|
{ |
|
|
|
$montant_surplus = $this->getMontantPaye() - $this->getMontant(); |
|
|
|
if ($format) |
|
|
|
|
|
|
|
if ($format) { |
|
|
|
return number_format($montant_surplus, 2) . ' €'; |
|
|
|
else |
|
|
|
} |
|
|
|
else { |
|
|
|
return $montant_surplus; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getDataJson() { |
|
|
|
/** |
|
|
|
* Retourne les informations relatives à la commande au format JSON. |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getDataJson() |
|
|
|
{ |
|
|
|
$commande = Commande::find()->with('commandeProduits')->where(['id' => $this->id])->one(); |
|
|
|
|
|
|
|
$commande->init(); |
|
|
|
|
|
|
|
$json_commande = [ |
|
|
@@ -242,7 +297,7 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
'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; |
|
|
@@ -251,7 +306,17 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
return json_encode($json_commande); |
|
|
|
} |
|
|
|
|
|
|
|
public function creditHistorique($type, $montant, $id_etablissement, $id_user, $id_user_action) { |
|
|
|
/** |
|
|
|
* Enregistre un modèle de type CreditHistorique. |
|
|
|
* |
|
|
|
* @param string $type |
|
|
|
* @param float $montant |
|
|
|
* @param integer $id_etablissement |
|
|
|
* @param integer $id_user |
|
|
|
* @param integer $id_user_action |
|
|
|
*/ |
|
|
|
public function creditHistorique($type, $montant, $id_etablissement, $id_user, $id_user_action) |
|
|
|
{ |
|
|
|
$credit_historique = new CreditHistorique; |
|
|
|
$credit_historique->id_user = $this->id_user; |
|
|
|
$credit_historique->id_commande = $this->id; |
|
|
@@ -264,10 +329,17 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
$credit_historique->save(); |
|
|
|
} |
|
|
|
|
|
|
|
public function getStatutPaiement() { |
|
|
|
/** |
|
|
|
* Retourne le statut de paiement de la commande (payée, surplus, ou impayée). |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getStatutPaiement() |
|
|
|
{ |
|
|
|
// payé |
|
|
|
if ($this->getMontant() - $this->getMontantPaye() < 0.01 && |
|
|
|
$this->getMontant() - $this->getMontantPaye() >= 0) { |
|
|
|
$this->getMontant() - $this->getMontantPaye() >= 0) |
|
|
|
{ |
|
|
|
return self::STATUT_PAYEE; |
|
|
|
} |
|
|
|
// à rembourser |
|
|
@@ -279,25 +351,40 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
return self::STATUT_IMPAYEE; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getResumePanier() { |
|
|
|
if (!isset($this->commandeProduits)) |
|
|
|
|
|
|
|
/** |
|
|
|
* Retourne le résumé du panier au format HTML. |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
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) |
|
|
|
if (++$i != $count) { |
|
|
|
$html .= '<br />'; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return $html; |
|
|
|
} |
|
|
|
|
|
|
|
public function getResumePointVente() { |
|
|
|
/** |
|
|
|
* Retourne le résumé du point de vente lié à la commande au format HTML. |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getResumePointVente() |
|
|
|
{ |
|
|
|
$html = ''; |
|
|
|
|
|
|
|
if (isset($this->pointVente)) { |
|
|
@@ -313,14 +400,16 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
return $html; |
|
|
|
} |
|
|
|
|
|
|
|
public function getStrMontant() { |
|
|
|
return number_format($this->montant, 2) . ' €'; |
|
|
|
} |
|
|
|
|
|
|
|
public function getResumeMontant() { |
|
|
|
/** |
|
|
|
* Retourne le résumé du paiement (montant, statut). |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getResumeMontant() |
|
|
|
{ |
|
|
|
$html = ''; |
|
|
|
|
|
|
|
$html .= $this->getStrMontant() . '<br />'; |
|
|
|
$html .= $this->getMontant(true) . '<br />'; |
|
|
|
|
|
|
|
if ($this->montant_paye) { |
|
|
|
if ($this->getStatutPaiement() == Commande::STATUT_PAYEE) { |
|
|
@@ -331,14 +420,21 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
} elseif ($this->getStatutPaiement() == Commande::STATUT_SURPLUS) { |
|
|
|
$html .= '<span class="label label-success">Payée</span>'; |
|
|
|
} |
|
|
|
} else { |
|
|
|
} |
|
|
|
else { |
|
|
|
$html .= '<span class="label label-default">À régler sur place</span>'; |
|
|
|
} |
|
|
|
|
|
|
|
return $html; |
|
|
|
} |
|
|
|
|
|
|
|
public function getStrUser() { |
|
|
|
/** |
|
|
|
* Retourne une chaine de caractère décrivant l'utilisateur lié à la commande. |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getStrUser() |
|
|
|
{ |
|
|
|
if (isset($this->user)) { |
|
|
|
return Html::encode($this->user->prenom . ' ' . $this->user->nom); |
|
|
|
} elseif (strlen($this->username)) { |
|
|
@@ -348,7 +444,20 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static function findBy($params = []) { |
|
|
|
/** |
|
|
|
* Recherche dans les commandes suivant les paramètres suivants : |
|
|
|
* - id_etablissement |
|
|
|
* - condition |
|
|
|
* - date |
|
|
|
* - type |
|
|
|
* - orderby |
|
|
|
* - limit |
|
|
|
* |
|
|
|
* @param array $params |
|
|
|
* @return array |
|
|
|
*/ |
|
|
|
public static function findBy($params = []) |
|
|
|
{ |
|
|
|
if (!isset($params['id_etablissement'])) |
|
|
|
$params['id_etablissement'] = Yii::$app->user->identity->id_etablissement; |
|
|
|
|
|
|
@@ -380,7 +489,13 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
return $commandes; |
|
|
|
} |
|
|
|
|
|
|
|
public function getEtat() { |
|
|
|
/** |
|
|
|
* Retourne l'état de la commande (livrée, modifiable ou en préparation) |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getEtat() |
|
|
|
{ |
|
|
|
$delai_commande = Etablissement::getConfig('delai_commande', $this->production->id_etablissement); |
|
|
|
$heure_limite = Etablissement::getConfig('heure_limite_commande', $this->production->id_etablissement); |
|
|
|
|
|
|
@@ -392,15 +507,24 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
|
|
|
|
if ($nb_jours <= 0) { |
|
|
|
return self::ETAT_LIVREE; |
|
|
|
} elseif ($nb_jours >= $delai_commande && |
|
|
|
} |
|
|
|
elseif ($nb_jours >= $delai_commande && |
|
|
|
($nb_jours != $delai_commande || |
|
|
|
($nb_jours == $delai_commande && $heure_today < $heure_limite))) { |
|
|
|
($nb_jours == $delai_commande && $heure_today < $heure_limite))) |
|
|
|
{ |
|
|
|
return self::ETAT_MODIFIABLE; |
|
|
|
} |
|
|
|
|
|
|
|
return self::ETAT_PREPARATION; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Retourne le type de la commande (client, automatique ou admin) sous forme |
|
|
|
* texte ou HTML. |
|
|
|
* |
|
|
|
* @param boolean $with_label |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getStrType($with_label = false) { |
|
|
|
$class_label = ''; |
|
|
|
$str = ''; |
|
|
@@ -422,7 +546,14 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
return $str; |
|
|
|
} |
|
|
|
|
|
|
|
public function getStrHistorique() { |
|
|
|
/** |
|
|
|
* Retourne l'historique de la commande (ajoutée, modifiée, supprimée) au format |
|
|
|
* HTML. |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getStrHistorique() |
|
|
|
{ |
|
|
|
$arr = [ |
|
|
|
'class' => 'create', |
|
|
|
'glyphicon' => 'plus', |
|
|
@@ -451,7 +582,15 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
|
|
|
|
return $html ; |
|
|
|
} |
|
|
|
public function getClassHistorique() { |
|
|
|
|
|
|
|
/** |
|
|
|
* Retourne une classe identifiant l'historique de la commande (ajoutée, |
|
|
|
* modifiée, supprimée). |
|
|
|
* |
|
|
|
* @return string |
|
|
|
*/ |
|
|
|
public function getClassHistorique() |
|
|
|
{ |
|
|
|
if(!is_null($this->date_delete)) { |
|
|
|
return 'commande-delete' ; |
|
|
|
} |
|
|
@@ -461,4 +600,4 @@ class Commande extends \yii\db\ActiveRecord { |
|
|
|
return 'commande-create' ; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |