@@ -0,0 +1,225 @@ | |||
<?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 ; | |||
} | |||
} |
@@ -138,6 +138,20 @@ class Producer extends \yii\db\ActiveRecord | |||
return $this->hasMany(User::className(),['id_producer' => 'id']) | |||
->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 |
@@ -1,206 +0,0 @@ | |||
<?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 ; | |||
} | |||
} |