<?php | |||||
/** | |||||
Copyright La boîte à pain (2018) | |||||
contact@laboiteapain.net | |||||
Ce logiciel est un programme informatique servant à aider les producteurs | |||||
à distribuer leur production en circuits courts. | |||||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||||
sur le site "http://www.cecill.info". | |||||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||||
de modification et de redistribution accordés par cette licence, il n'est | |||||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||||
titulaire des droits patrimoniaux et les concédants successifs. | |||||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||||
associés au chargement, à l'utilisation, à la modification et/ou au | |||||
développement et à la reproduction du logiciel par l'utilisateur étant | |||||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||||
avertis possédant des connaissances informatiques approfondies. Les | |||||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||||
termes. | |||||
*/ | |||||
namespace common\models; | |||||
use Yii; | |||||
use common\models\Order; | |||||
use common\models\Distribution; | |||||
/** | |||||
* This is the model class for table "production". | |||||
* | |||||
* @property integer $id | |||||
* @property string $date | |||||
* @property integer $actif | |||||
*/ | |||||
class Distribution extends \yii\db\ActiveRecord | |||||
{ | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'distribution'; | |||||
} | |||||
public function getProducer() | |||||
{ | |||||
return $this->hasOne(Producer::className(), ['id' => 'id_producer']); | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['date'], 'required'], | |||||
[['date'], 'safe'], | |||||
[['active'], 'integer'] | |||||
]; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function attributeLabels() | |||||
{ | |||||
return [ | |||||
'id' => 'ID', | |||||
'date' => 'Date', | |||||
'active' => 'Actif', | |||||
]; | |||||
} | |||||
/* | |||||
* Relations | |||||
*/ | |||||
public function getOrder() | |||||
{ | |||||
return $this->hasMany(Order::className(), ['id_distribution' => 'id']); | |||||
} | |||||
public function getProductDistribution() | |||||
{ | |||||
return $this->hasMany(ProductDistribution::className(), ['id_distribution' => 'id']); | |||||
} | |||||
/** | |||||
* Retourne les options de base nécessaires à la fonction de recherche. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function defaultOptionsSearch() { | |||||
return [ | |||||
'with' => [], | |||||
'join_with' => [], | |||||
'orderby' => 'date ASC', | |||||
'attribute_id_producer' => 'distribution.id_producer' | |||||
] ; | |||||
} | |||||
/** | |||||
* Retourne si un produit est actif ou non. | |||||
* | |||||
* @param integer $id_produit | |||||
* @return boolean | |||||
*/ | |||||
public function isActiveProduct($idProduit) | |||||
{ | |||||
if ($idProduit && | |||||
isset($this->productDistribution) && | |||||
count($this->productDistribution) > 0) | |||||
{ | |||||
foreach ($this->productDistribution as $productDistribution) { | |||||
if ($productDistribution['id_product'] == $idProduct && | |||||
$productDistribution['active']) | |||||
{ | |||||
return true; | |||||
} | |||||
} | |||||
} | |||||
return false; | |||||
} | |||||
/** | |||||
* Initialise un jour de production. | |||||
* | |||||
* @param string $date | |||||
* @return Production | |||||
*/ | |||||
public static function initDistribution($date) | |||||
{ | |||||
$distribution = null ; | |||||
if ($date != '') { | |||||
$distribution = Distribution::searchOne(['date' => $date]) ; | |||||
if (!$distribution) { | |||||
$distribution = new Distribution; | |||||
$distribution->date = $date; | |||||
$distribution->delivery = 1; | |||||
$distribution->id_producer = Producer::getCurrentId(); | |||||
$distribution->save(); | |||||
} | |||||
} | |||||
// point_sale_distribution à définir s'ils ne sont pas initialisés | |||||
if ($distribution) { | |||||
$countPointSaleDistribution = PointSaleDistribution::searchCount([ | |||||
'id_distribution' => $distribution->id | |||||
]) ; | |||||
if (!$countPointSaleDistribution) { | |||||
PointSaleDistribution::setAll($distribution->id, true); | |||||
} | |||||
} | |||||
// init produits sélectionnés pour cette production | |||||
$products = Product::searchAll(); | |||||
if ($distribution) { | |||||
$dayDistribution = date('N', strtotime($distribution->date)); | |||||
$productsDistribution = ProductDistribution::searchAll([ | |||||
'id_distribution' => $distribution->id | |||||
]) ; | |||||
if (!count($productsDistribution)) { | |||||
foreach ($products as $product) { | |||||
$productDistribution = new ProductDistribution(); | |||||
$productDistribution->id_distribution = $distribution->id; | |||||
$productDistribution->id_product = $product->id; | |||||
$productDistribution->actif = 0; | |||||
if ($product->actif && $dayDistribution == 1 && $product->monday) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
if ($product->actif && $dayDistribution == 2 && $product->tuesday) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
if ($product->actif && $dayDistribution == 3 && $product->wednesday) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
if ($product->actif && $dayDistribution == 4 && $product->thursday) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
if ($product->actif && $dayDistribution == 5 && $product->friday) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
if ($product->actif && $dayDistribution == 6 && $product->saterday) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
if ($product->actif && $dayDistribution == 7 && $product->sunday) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
$productDistribution->quantity_max = $product->quantity_max; | |||||
$productDistribution->save(); | |||||
} | |||||
} | |||||
} | |||||
return $production ; | |||||
} | |||||
} |
return $this->hasMany(User::className(),['id_producer' => 'id']) | return $this->hasMany(User::className(),['id_producer' => 'id']) | ||||
->where(['status' => User::STATUS_PRODUCER]); | ->where(['status' => User::STATUS_PRODUCER]); | ||||
} | } | ||||
/** | |||||
* Retourne les options de base nécessaires à la fonction de recherche. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function defaultOptionsSearch() { | |||||
return [ | |||||
'with' => [], | |||||
'join_with' => [], | |||||
'orderby' => 'name ASC', | |||||
'attribute_id_producer' => '' | |||||
] ; | |||||
} | |||||
/** | /** | ||||
* Retourne la liste des établissements pour l'initialisation d'une liste | * Retourne la liste des établissements pour l'initialisation d'une liste |
<?php | |||||
/** | |||||
Copyright La boîte à pain (2018) | |||||
contact@laboiteapain.net | |||||
Ce logiciel est un programme informatique servant à aider les producteurs | |||||
à distribuer leur production en circuits courts. | |||||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||||
sur le site "http://www.cecill.info". | |||||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||||
de modification et de redistribution accordés par cette licence, il n'est | |||||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||||
titulaire des droits patrimoniaux et les concédants successifs. | |||||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||||
associés au chargement, à l'utilisation, à la modification et/ou au | |||||
développement et à la reproduction du logiciel par l'utilisateur étant | |||||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||||
avertis possédant des connaissances informatiques approfondies. Les | |||||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||||
termes. | |||||
*/ | |||||
namespace common\models; | |||||
use Yii; | |||||
use common\models\Commande; | |||||
use common\models\Production; | |||||
/** | |||||
* This is the model class for table "production". | |||||
* | |||||
* @property integer $id | |||||
* @property string $date | |||||
* @property integer $actif | |||||
*/ | |||||
class Production extends \yii\db\ActiveRecord | |||||
{ | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'production'; | |||||
} | |||||
public function getProducer() | |||||
{ | |||||
return $this->hasOne(Producer::className(), ['id' => 'id_producer']); | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['date'], 'required'], | |||||
[['date'], 'safe'], | |||||
[['actif'], 'integer'] | |||||
]; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function attributeLabels() | |||||
{ | |||||
return [ | |||||
'id' => 'ID', | |||||
'date' => 'Date', | |||||
'actif' => 'Actif', | |||||
]; | |||||
} | |||||
/* | |||||
* Relations | |||||
*/ | |||||
public function getCommande() | |||||
{ | |||||
return $this->hasMany(Commande::className(), ['id_production' => 'id']); | |||||
} | |||||
public function getProductionProduit() | |||||
{ | |||||
return $this->hasMany(ProductionProduit::className(), ['id_production' => 'id']); | |||||
} | |||||
/** | |||||
* Retourne si un produit est actif ou non. | |||||
* | |||||
* @param integer $id_produit | |||||
* @return boolean | |||||
*/ | |||||
public function produitActif($id_produit) | |||||
{ | |||||
if ($id_produit && | |||||
isset($this->productionProduit) && | |||||
count($this->productionProduit) > 0) | |||||
{ | |||||
foreach ($this->productionProduit as $production_produit) { | |||||
if ($production_produit['id_produit'] == $id_produit && | |||||
$production_produit['actif']) | |||||
{ | |||||
return true; | |||||
} | |||||
} | |||||
} | |||||
return false; | |||||
} | |||||
/** | |||||
* Initialise un jour de production. | |||||
* | |||||
* @param string $date | |||||
* @return Production | |||||
*/ | |||||
public static function initProduction($date) | |||||
{ | |||||
$production = null ; | |||||
if ($date != '') { | |||||
$production = Production::find() | |||||
->where(['date' => $date]) | |||||
->andWhere(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||||
->one(); | |||||
if (!$production) { | |||||
$production = new Production; | |||||
$production->date = $date; | |||||
$production->livraison = 1; | |||||
$production->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||||
$production->save(); | |||||
} | |||||
} | |||||
// production_point_vente à définir s'ils ne sont pas initialisés | |||||
if ($production) { | |||||
$count_productions_point_vente = ProductionPointVente::find()-> | |||||
where([ | |||||
'id_production' => $production->id | |||||
]) | |||||
->count(); | |||||
if (!$count_productions_point_vente) { | |||||
ProductionPointVente::setAll($production->id, true); | |||||
} | |||||
} | |||||
// init produits sélectionnés pour cette production | |||||
$produits = Produit::getAll(); | |||||
if ($production) { | |||||
$day_production = date('N', strtotime($production->date)); | |||||
$produits_production = ProductionProduit::find()->where(['id_production' => $production->id])->all(); | |||||
if (!count($produits_production)) { | |||||
foreach ($produits as $p) { | |||||
$pp = new ProductionProduit(); | |||||
$pp->id_production = $production->id; | |||||
$pp->id_produit = $p->id; | |||||
$pp->actif = 0; | |||||
if ($p->actif && $day_production == 1 && $p->lundi) | |||||
$pp->actif = 1; | |||||
if ($p->actif && $day_production == 2 && $p->mardi) | |||||
$pp->actif = 1; | |||||
if ($p->actif && $day_production == 3 && $p->mercredi) | |||||
$pp->actif = 1; | |||||
if ($p->actif && $day_production == 4 && $p->jeudi) | |||||
$pp->actif = 1; | |||||
if ($p->actif && $day_production == 5 && $p->vendredi) | |||||
$pp->actif = 1; | |||||
if ($p->actif && $day_production == 6 && $p->samedi) | |||||
$pp->actif = 1; | |||||
if ($p->actif && $day_production == 7 && $p->dimanche) | |||||
$pp->actif = 1; | |||||
$pp->quantite_max = $p->quantite_max; | |||||
$pp->save(); | |||||
} | |||||
} | |||||
} | |||||
return $production ; | |||||
} | |||||
} |