@@ -1,45 +1,49 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.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. | |||
*/ | |||
/** | |||
* Copyright distrib (2018) | |||
* | |||
* contact@opendistrib.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 backend\controllers; | |||
use common\helpers\GlobalParam; | |||
use common\models\ProductDistribution; | |||
use common\models\ProductPrice; | |||
use common\models\ProductPriceSearch; | |||
use common\models\ProductSearch; | |||
use common\models\UserSearch; | |||
use Yii; | |||
use yii\filters\AccessControl; | |||
use common\models\Product; | |||
@@ -56,181 +60,248 @@ use common\helpers\Upload; | |||
/** | |||
* ProduitController implements the CRUD actions for Produit model. | |||
*/ | |||
class ProductController extends BackendController | |||
class ProductController extends BackendController | |||
{ | |||
var $enableCsrfValidation = false; | |||
public function behaviors() | |||
{ | |||
return [ | |||
'verbs' => [ | |||
'class' => VerbFilter::className(), | |||
'actions' => [ | |||
], | |||
], | |||
'access' => [ | |||
'class' => AccessControl::className(), | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return User::hasAccessBackend(); | |||
var $enableCsrfValidation = false; | |||
public function behaviors() | |||
{ | |||
return [ | |||
'verbs' => [ | |||
'class' => VerbFilter::className(), | |||
'actions' => [ | |||
], | |||
], | |||
'access' => [ | |||
'class' => AccessControl::className(), | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return User::hasAccessBackend(); | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
/** | |||
* Liste les modèles Produit. | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionIndex() | |||
{ | |||
$searchModel = new ProductSearch(); | |||
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); | |||
return $this->render('index', [ | |||
'searchModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
]); | |||
} | |||
/** | |||
* Crée un modèle Produit. | |||
* Si la création réussit, le navigateur est redirigé vers la page 'index'. | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionCreate() | |||
{ | |||
$model = new Product(); | |||
$model->active = 1; | |||
$model->id_producer = GlobalParam::getCurrentProducerId(); | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
$lastProductOrder = Product::find()->where('id_producer = :id_producer')->params([':id_producer' => GlobalParam::getCurrentProducerId()])->orderBy('order DESC')->one(); | |||
if ($lastProductOrder) { | |||
$model->order = ++$lastProductOrder->order; | |||
} | |||
Upload::uploadFile($model, 'photo'); | |||
$model->save(); | |||
// link product / distribution | |||
Distribution::linkProductIncomingDistributions($model); | |||
Yii::$app->getSession()->setFlash('success', 'Produit <strong>' . Html::encode($model->name) . '</strong> ajouté'); | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('create', [ | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
/** | |||
* Modifie un modèle Produit existant. | |||
* Si la modification réussit, le navigateur est redirigé vers la page 'index'. | |||
* | |||
* @param integer $id | |||
* @return mixed | |||
*/ | |||
public function actionUpdate($id) | |||
{ | |||
$request = Yii::$app->request; | |||
$model = $this->findModel($id); | |||
$photoFilenameOld = $model->photo; | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Upload::uploadFile($model, 'photo', $photoFilenameOld); | |||
$deletePhoto = $request->post('delete_photo', 0); | |||
if ($deletePhoto) { | |||
$model->photo = ''; | |||
$model->save(); | |||
} | |||
if ($model->apply_distributions) { | |||
// link product / distribution | |||
Distribution::linkProductIncomingDistributions($model); | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
/** | |||
* Liste les modèles Produit. | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionIndex() | |||
{ | |||
$searchModel = new ProductSearch() ; | |||
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); | |||
return $this->render('index', [ | |||
'searchModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
]); | |||
} | |||
/** | |||
* Crée un modèle Produit. | |||
* Si la création réussit, le navigateur est redirigé vers la page 'index'. | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionCreate() | |||
{ | |||
$model = new Product(); | |||
$model->active = 1; | |||
$model->id_producer = GlobalParam::getCurrentProducerId(); | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
$lastProductOrder = Product::find()->where('id_producer = :id_producer')->params([':id_producer' => GlobalParam::getCurrentProducerId()])->orderBy('order DESC')->one() ; | |||
if($lastProductOrder) { | |||
$model->order = ++ $lastProductOrder->order ; | |||
} | |||
Upload::uploadFile($model, 'photo'); | |||
$model->save(); | |||
// link product / distribution | |||
Distribution::linkProductIncomingDistributions($model) ; | |||
Yii::$app->getSession()->setFlash('success', 'Produit <strong>'.Html::encode($model->name).'</strong> ajouté'); | |||
return $this->redirect(['index']); | |||
} | |||
else { | |||
return $this->render('create', [ | |||
'model' => $model, | |||
]); | |||
Yii::$app->getSession()->setFlash('success', 'Produit <strong>' . Html::encode($model->name) . '</strong> modifié'); | |||
return $this->redirect(['index']); | |||
} | |||
return $this->render('update/update', [ | |||
'model' => $model, | |||
'action' => 'update', | |||
]); | |||
} | |||
public function actionPricesList($id) | |||
{ | |||
$request = Yii::$app->request; | |||
$model = $this->findModel($id); | |||
$searchModel = new ProductPriceSearch(); | |||
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); | |||
return $this->render('update/prices/list', [ | |||
'model' => $model, | |||
'action' => 'prices-list', | |||
'searchModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
]); | |||
} | |||
public function actionPricesCreate($idProduct) | |||
{ | |||
$model = new ProductPrice(); | |||
$model->id_product = $idProduct; | |||
$modelProduct = $this->findModel($idProduct) ; | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Yii::$app->getSession()->setFlash('success', 'Le prix a bien été ajouté.'); | |||
return $this->redirect(['product/prices-list', 'id' => $idProduct]); | |||
} | |||
return $this->render('update/prices/create', [ | |||
'model' => $model, | |||
'modelProduct' => $modelProduct, | |||
]); | |||
} | |||
public function actionPricesUpdate($id) | |||
{ | |||
$request = Yii::$app->request; | |||
$model = $this->findModelProductPrice($id); | |||
$modelProduct = $this->findModel($model->id_product) ; | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Yii::$app->getSession()->setFlash('success', 'Prix modifié'); | |||
return $this->redirect(['product/prices-list', 'id' => $model->id_product]); | |||
} | |||
return $this->render('update/prices/update', [ | |||
'model' => $model, | |||
'modelProduct' => $modelProduct, | |||
'action' => 'prices-update', | |||
]); | |||
} | |||
} | |||
/** | |||
* Modifie un modèle Produit existant. | |||
* Si la modification réussit, le navigateur est redirigé vers la page 'index'. | |||
* | |||
* @param integer $id | |||
* @return mixed | |||
*/ | |||
public function actionUpdate($id) | |||
{ | |||
$request = Yii::$app->request; | |||
$model = $this->findModel($id); | |||
$photoFilenameOld = $model->photo; | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Upload::uploadFile($model, 'photo', $photoFilenameOld); | |||
$deletePhoto = $request->post('delete_photo', 0); | |||
if ($deletePhoto) { | |||
$model->photo = ''; | |||
$model->save(); | |||
} | |||
if($model->apply_distributions) { | |||
// link product / distribution | |||
Distribution::linkProductIncomingDistributions($model) ; | |||
} | |||
Yii::$app->getSession()->setFlash('success', 'Produit <strong>'.Html::encode($model->name).'</strong> modifié'); | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('update', [ | |||
'model' => $model, | |||
]); | |||
public function actionPricesDelete($id) | |||
{ | |||
$productPrice = $this->findModelProductPrice($id); | |||
$productPrice->delete(); | |||
Yii::$app->getSession()->setFlash('success', 'Prix supprimé'); | |||
return $this->redirect(['product/prices-list', 'id' => $productPrice->id_product]); | |||
} | |||
/** | |||
* Supprime un modèle Produit. | |||
* Si la suppression réussit, le navigateur est redirigé vers la page | |||
* 'index'. | |||
* | |||
* @param integer $id | |||
* @return mixed | |||
*/ | |||
public function actionDelete($id, $confirm = false) | |||
{ | |||
$product = $this->findModel($id); | |||
if ($confirm) { | |||
$product->delete(); | |||
ProductDistribution::deleteAll(['id_product' => $id]); | |||
Yii::$app->getSession()->setFlash('success', 'Produit <strong>' . Html::encode($product->name) . '</strong> supprimé'); | |||
} else { | |||
Yii::$app->getSession()->setFlash('info', 'Souhaitez-vous vraiment supprimer le produit <strong>' . Html::encode($product->name) . '</strong> ? ' | |||
. Html::a('Oui', ['product/delete', 'id' => $id, 'confirm' => 1], ['class' => 'btn btn-default']) . ' ' . Html::a('Non', ['product/index'], ['class' => 'btn btn-default'])); | |||
} | |||
return $this->redirect(['index']); | |||
} | |||
} | |||
/** | |||
* Supprime un modèle Produit. | |||
* Si la suppression réussit, le navigateur est redirigé vers la page | |||
* 'index'. | |||
* | |||
* @param integer $id | |||
* @return mixed | |||
*/ | |||
public function actionDelete($id, $confirm = false) | |||
{ | |||
$product = $this->findModel($id) ; | |||
if($confirm) { | |||
$product->delete(); | |||
ProductDistribution::deleteAll(['id_product' => $id]) ; | |||
Yii::$app->getSession()->setFlash('success', 'Produit <strong>'.Html::encode($product->name).'</strong> supprimé'); | |||
} | |||
else { | |||
Yii::$app->getSession()->setFlash('info', 'Souhaitez-vous vraiment supprimer le produit <strong>'.Html::encode($product->name).'</strong> ? ' | |||
. Html::a('Oui',['product/delete','id' => $id, 'confirm' => 1], ['class' => 'btn btn-default']).' '.Html::a('Non', ['product/index'], ['class' => 'btn btn-default'])); | |||
/** | |||
* Modifie l'ordre des produits. | |||
* | |||
* @param array $array | |||
*/ | |||
public function actionOrder() | |||
{ | |||
$array = Yii::$app->request->post('array'); | |||
$orderArray = json_decode(stripslashes($array)); | |||
foreach ($orderArray as $id => $order) { | |||
$product = $this->findModel($id); | |||
$product->order = $order; | |||
$product->save(); | |||
} | |||
} | |||
return $this->redirect(['index']); | |||
} | |||
/** | |||
* Modifie l'ordre des produits. | |||
* | |||
* @param array $array | |||
*/ | |||
public function actionOrder() | |||
{ | |||
$array = Yii::$app->request->post('array') ; | |||
$orderArray = json_decode(stripslashes($array)); | |||
foreach($orderArray as $id => $order) { | |||
$product = $this->findModel($id); | |||
$product->order = $order; | |||
$product->save(); | |||
/** | |||
* Recherche un produit en fonction de son ID. | |||
* | |||
* @param integer $id | |||
* @return Produit | |||
* @throws NotFoundHttpException si le modèle n'est pas trouvé | |||
*/ | |||
protected function findModel($id) | |||
{ | |||
if (($model = Product::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); | |||
} | |||
} | |||
} | |||
/** | |||
* Recherche un produit en fonction de son ID. | |||
* | |||
* @param integer $id | |||
* @return Produit | |||
* @throws NotFoundHttpException si le modèle n'est pas trouvé | |||
*/ | |||
protected function findModel($id) | |||
{ | |||
if (($model = Product::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); | |||
protected function findModelProductPrice($id) | |||
{ | |||
if (($model = ProductPrice::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); | |||
} | |||
} | |||
} | |||
} |
@@ -40,6 +40,7 @@ use yii\helpers\Html; | |||
use yii\widgets\ActiveForm; | |||
use yii\helpers\ArrayHelper; | |||
use common\models\Producer; | |||
use common\models\ProductPrice ; | |||
/* @var $this yii\web\View */ | |||
/* @var $model backend\models\PointVente */ | |||
@@ -93,11 +94,7 @@ use common\models\Producer; | |||
], [])->hint(Producer::HINT_CREDIT_FUNCTIONING); ?> | |||
<?= $form->field($model, 'product_price_percent') | |||
->dropDownList([ | |||
'' => 'Aucun', | |||
-5 => '-5%', | |||
5 => '+5%', | |||
], [])->hint('Pourcentage appliqué aux prix de chaque produit dans ce point de vente.'); ?> | |||
->dropDownList(ProductPrice::percentValues(), [])->hint('Pourcentage appliqué aux prix de chaque produit dans ce point de vente.'); ?> | |||
<div id="delivery-days"> |
@@ -1,41 +1,5 @@ | |||
<?php | |||
/** | |||
* Copyright distrib (2018) | |||
* | |||
* contact@opendistrib.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. | |||
*/ | |||
use yii\helpers\Html; | |||
use yii\bootstrap\ActiveForm; | |||
use common\models\Product; | |||
@@ -44,9 +8,6 @@ use common\models\TaxRate; | |||
use common\models\Producer; | |||
use common\helpers\GlobalParam; | |||
/* @var $this yii\web\View */ | |||
/* @var $model app\models\Produit */ | |||
/* @var $form yii\widgets\ActiveForm */ | |||
?> | |||
<div class="product-form"> | |||
@@ -56,42 +17,42 @@ use common\helpers\GlobalParam; | |||
'options' => ['enctype' => 'multipart/form-data'] | |||
]); ?> | |||
<div> | |||
<div class="col-md-8"> | |||
<?= $form->field($model, 'active')->radioList([1 => 'Oui', 0 => 'Non']) ?> | |||
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'description')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'recipe')->textarea()->label('Description longue') ?> | |||
<div> | |||
<div class="col-md-8"> | |||
<?= $form->field($model, 'active')->radioList([1 => 'Oui', 0 => 'Non']) ?> | |||
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'description')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'recipe')->textarea()->label('Description longue') ?> | |||
<?= $form->field($model, 'unit') | |||
->dropDownList(ArrayHelper::map(Product::$unitsArray, 'unit', 'wording')) | |||
->label('Unité (pièce, poids ou volume)'); ?> | |||
<?= $form->field($model, 'unit') | |||
->dropDownList(ArrayHelper::map(Product::$unitsArray, 'unit', 'wording')) | |||
->label('Unité (pièce, poids ou volume)'); ?> | |||
<?php | |||
<?php | |||
//Récupère la tva par défaut du producteur courant | |||
$producer = \common\helpers\GlobalParam::getCurrentProducer(); | |||
$taxRateDefault = $producer->taxRate; | |||
//Récupère la tva par défaut du producteur courant | |||
$producer = \common\helpers\GlobalParam::getCurrentProducer(); | |||
$taxRateDefault = $producer->taxRate; | |||
$taxRateNamesArray = array_merge(array(0 => 'Tva par défaut'), ArrayHelper::map(TaxRate::find()->all(), 'id', function ($model) { | |||
return $model->name; | |||
})); | |||
$taxRateValuesArray = array_merge(array(0 => $taxRateDefault->value), ArrayHelper::map(TaxRate::find()->all(), 'id', function ($model) { | |||
return $model->value; | |||
})); | |||
foreach ($taxRateValuesArray as $key => $taxRateValue) { | |||
$taxRateValuesArrayFormatted[$key] = array('data-tax-rate-value' => $taxRateValue); | |||
} | |||
$taxRateNamesArray = array_merge(array(0 => 'Tva par défaut'), ArrayHelper::map(TaxRate::find()->all(), 'id', function ($model) { | |||
return $model->name; | |||
})); | |||
$taxRateValuesArray = array_merge(array(0 => $taxRateDefault->value), ArrayHelper::map(TaxRate::find()->all(), 'id', function ($model) { | |||
return $model->value; | |||
})); | |||
foreach ($taxRateValuesArray as $key => $taxRateValue) { | |||
$taxRateValuesArrayFormatted[$key] = array('data-tax-rate-value' => $taxRateValue); | |||
} | |||
?> | |||
?> | |||
<?php if($taxRateDefault->value != 0): ?> | |||
<?= $form->field($model, 'id_tax_rate')->dropDownList($taxRateNamesArray, ['options' => $taxRateValuesArrayFormatted])->label('Taxe'); ?> | |||
<?php endif; ?> | |||
<?php if($taxRateDefault->value != 0): ?> | |||
<?= $form->field($model, 'id_tax_rate')->dropDownList($taxRateNamesArray, ['options' => $taxRateValuesArrayFormatted])->label('Taxe'); ?> | |||
<?php endif; ?> | |||
<?= $form->field($model, 'price', [ | |||
'template' => ' | |||
<?= $form->field($model, 'price', [ | |||
'template' => ' | |||
<div class="row"> | |||
<div class="col-xs-6"> | |||
<label for="product-price" class="control-label without-tax"></label> | |||
@@ -109,76 +70,76 @@ use common\helpers\GlobalParam; | |||
</div> | |||
', | |||
]) ?> | |||
<?= $form->field($model, 'step')->textInput()->hint('Définit ce qui est ajouté ou enlevé lors des changements de quantité.') ?> | |||
]) ?> | |||
<?= $form->field($model, 'step')->textInput()->hint('Définit ce qui est ajouté ou enlevé lors des changements de quantité.') ?> | |||
<?= $form->field($model, 'weight')->textInput()->label('Poids (g)') ?> | |||
<?= $form->field($model, 'weight')->textInput()->label('Poids (g)') ?> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_monday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_tuesday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_wednesday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_thursday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_friday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_saturday')->textInput() ?> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_monday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_tuesday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_wednesday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_thursday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_friday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_saturday')->textInput() ?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_sunday')->textInput() ?> | |||
</div> | |||
<div class="clr"></div> | |||
<?php | |||
if (!$model->isNewRecord) { | |||
echo $form->field($model, 'apply_distributions') | |||
->checkbox() | |||
->hint('Sélectionnez cette option si vous souhaitez que ces modifications (actif / non actif, quantité max) soient répercutées dans les distributions à venir déjà initialisées.'); | |||
} | |||
?> | |||
</div> | |||
<div class="col-md-3"> | |||
<?= $form->field($model, 'quantity_max_sunday')->textInput() ?> | |||
<div class="col-md-4"> | |||
<?= $form->field($model, 'photo')->fileInput() ?> | |||
<?php | |||
if (strlen($model->photo)) { | |||
$url = Yii::$app->urlManagerProducer->getHostInfo() . '/' . Yii::$app->urlManagerProducer->baseUrl . '/uploads/' . $model->photo; | |||
$url = str_replace('//uploads','/uploads', $url) ; | |||
echo '<img class="photo-product" src="' . $url . '" width="200px" /><br />'; | |||
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />'; | |||
} | |||
?> | |||
<div id="days-production"> | |||
<h2>Jours de distribution</h2> | |||
<?= $form->field($model, 'monday')->checkbox() ?> | |||
<?= $form->field($model, 'tuesday')->checkbox() ?> | |||
<?= $form->field($model, 'wednesday')->checkbox() ?> | |||
<?= $form->field($model, 'thursday')->checkbox() ?> | |||
<?= $form->field($model, 'friday')->checkbox() ?> | |||
<?= $form->field($model, 'saturday')->checkbox() ?> | |||
<?= $form->field($model, 'sunday')->checkbox() ?> | |||
</div> | |||
<div class="clr"></div> | |||
</div> | |||
<div class="clr"></div> | |||
<?php | |||
if (!$model->isNewRecord) { | |||
echo $form->field($model, 'apply_distributions') | |||
->checkbox() | |||
->hint('Sélectionnez cette option si vous souhaitez que ces modifications (actif / non actif, quantité max) soient répercutées dans les distributions à venir déjà initialisées.'); | |||
} | |||
?> | |||
</div> | |||
<div class="col-md-4"> | |||
<?= $form->field($model, 'photo')->fileInput() ?> | |||
<?php | |||
if (strlen($model->photo)) { | |||
$url = Yii::$app->urlManagerProducer->getHostInfo() . '/' . Yii::$app->urlManagerProducer->baseUrl . '/uploads/' . $model->photo; | |||
$url = str_replace('//uploads','/uploads', $url) ; | |||
echo '<img class="photo-product" src="' . $url . '" width="200px" /><br />'; | |||
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />'; | |||
} | |||
?> | |||
<div id="days-production"> | |||
<h2>Jours de distribution</h2> | |||
<?= $form->field($model, 'monday')->checkbox() ?> | |||
<?= $form->field($model, 'tuesday')->checkbox() ?> | |||
<?= $form->field($model, 'wednesday')->checkbox() ?> | |||
<?= $form->field($model, 'thursday')->checkbox() ?> | |||
<?= $form->field($model, 'friday')->checkbox() ?> | |||
<?= $form->field($model, 'saturday')->checkbox() ?> | |||
<?= $form->field($model, 'sunday')->checkbox() ?> | |||
</div> | |||
<div class="clr"></div> | |||
</div> | |||
<div class="clr"></div> | |||
</div> | |||
<?= $form->field($model, 'id_producer')->hiddenInput()->label('') ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | |||
</div> | |||
<div class="form-group"> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | |||
</div> | |||
<?php ActiveForm::end(); ?> | |||
@@ -0,0 +1,14 @@ | |||
<div id="nav-params"> | |||
<?= $this->render('_nav_item', [ | |||
'title' => 'Général', | |||
'action' => 'update', | |||
'currentAction' => $action, | |||
'model' => $model, | |||
]); ?> | |||
<?= $this->render('_nav_item', [ | |||
'title' => 'Prix spécifiques', | |||
'action' => 'prices-list', | |||
'currentAction' => $action, | |||
'model' => $model, | |||
]); ?> | |||
</div> |
@@ -0,0 +1,4 @@ | |||
<a href="<?= Yii::$app->urlManager->createUrl(['product/'.$action, 'id' => $model->id]) ?>" class="btn <?php if($action == $currentAction): ?>btn-primary<?php else: ?>btn-default<?php endif; ?>"> | |||
<?= $title ?> | |||
<span class="glyphicon glyphicon-triangle-bottom"></span> | |||
</a> |
@@ -0,0 +1,32 @@ | |||
<?php | |||
use yii\helpers\Html; | |||
use yii\bootstrap\ActiveForm; | |||
use common\models\Product; | |||
use yii\helpers\ArrayHelper; | |||
use common\models\TaxRate; | |||
use common\models\Producer; | |||
use common\helpers\GlobalParam; | |||
use common\models\User ; | |||
?> | |||
<div class="product-form"> | |||
<?php $form = ActiveForm::begin([ | |||
'enableClientValidation' => false, | |||
'options' => ['enctype' => 'multipart/form-data'] | |||
]); ?> | |||
<?= $form->field($model, 'id_user')->dropDownList(User::populateDropdownList()); ?> | |||
<?= $form->field($model, 'id_point_sale')->dropDownList(PointSale::populateDropdownList()) ?> | |||
<?= $form->field($model, 'price') ?> | |||
<div class="form-group"> | |||
<?= Html::a('Annuler', ['prices-list', 'id' => $model->id_product], ['class' => 'btn btn-default']) ?> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => 'btn btn-primary']) ?> | |||
</div> | |||
<?php ActiveForm::end(); ?> | |||
</div> |
@@ -1,17 +1,17 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
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 | |||
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, | |||
@@ -22,32 +22,39 @@ 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 à | |||
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é. | |||
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 | |||
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. | |||
*/ | |||
*/ | |||
use yii\helpers\Html; | |||
$this->setTitle('Modifier un produit') ; | |||
$this->setTitle('Ajouter un prix ('.Html::encode($model->product->name).')') ; | |||
$this->addBreadcrumb(['label' => 'Produits', 'url' => ['index']]) ; | |||
$this->addBreadcrumb(['label' => $model->name, 'url' => ['update', 'id' => $model->id]]) ; | |||
$this->addBreadcrumb('Modifier') ; | |||
$this->addBreadcrumb(['label' => $model->product->name, 'url' => ['update', 'id' => $model->product->id]]); | |||
$this->addBreadcrumb(['label' => 'Prix', 'url' => ['prices-list', 'id' => $model->product->id]]) ; | |||
$this->addBreadcrumb('Ajouter un prix') ; | |||
?> | |||
<?= | |||
$this->render('../_nav', [ | |||
'model' => $modelProduct, | |||
'action' => 'prices-list', | |||
]) ; | |||
?> | |||
<div class="product-update"> | |||
<?= $this->render('_form', [ | |||
'model' => $model, | |||
]) ?> | |||
<div class="product-prices-create"> | |||
<?= $this->render('_form', [ | |||
'model' => $model, | |||
]) ?> | |||
</div> |
@@ -0,0 +1,104 @@ | |||
<?php | |||
/** | |||
* Copyright distrib (2018) | |||
* | |||
* contact@opendistrib.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. | |||
*/ | |||
$this->setTitle('Liste des prix ('.Html::encode($model->name).')'); | |||
$this->addBreadcrumb(['label' => 'Produits', 'url' => ['index']]); | |||
$this->addBreadcrumb(['label' => $model->name, 'url' => ['update', 'id' => $model->id]]); | |||
$this->addBreadcrumb('Modifier'); | |||
$this->addButton(['label' => 'Nouveau prix <span class="glyphicon glyphicon-plus"></span>', 'url' => ['product/prices-create', 'idProduct' => $model->id ], 'class' => 'btn btn-primary']); | |||
?> | |||
<?= | |||
$this->render('../_nav', [ | |||
'model' => $model, | |||
'action' => $action, | |||
]) ; | |||
?> | |||
<?php | |||
echo GridView::widget([ | |||
//'filterModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
'columns' => [ | |||
[ | |||
'attribute' => 'id_user', | |||
'value' => function ($model) { | |||
if($model->user) { | |||
return $model->user->getUsername() ; | |||
} | |||
return '' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'id_point_sale', | |||
'value' => function ($model) { | |||
if($model->pointSale) { | |||
return $model->pointSale->name ; | |||
} | |||
return '' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'price', | |||
'value' => function ($model) { | |||
return number_format($model->price, 2).' €' ; | |||
} | |||
], | |||
[ | |||
'class' => 'yii\grid\ActionColumn', | |||
'template' => '{update} {delete}', | |||
'headerOptions' => ['class' => 'column-actions'], | |||
'contentOptions' => ['class' => 'column-actions'], | |||
'buttons' => [ | |||
'update' => function ($url, $model) { | |||
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', ['product/prices-update', 'id' => $model->id], [ | |||
'title' => Yii::t('app', 'Modifier'), 'class' => 'btn btn-default' | |||
]); | |||
}, | |||
'delete' => function ($url, $model) { | |||
return Html::a('<span class="glyphicon glyphicon-trash"></span>', ['product/prices-delete', 'id' => $model->id], [ | |||
'title' => Yii::t('app', 'Supprimer'), 'class' => 'btn btn-default' | |||
]); | |||
} | |||
], | |||
], | |||
], | |||
]); |
@@ -0,0 +1,60 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.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. | |||
*/ | |||
use yii\helpers\Html; | |||
$this->setTitle('Modifier un prix ('.Html::encode($model->product->name).')') ; | |||
$this->addBreadcrumb(['label' => 'Produits', 'url' => ['index']]) ; | |||
$this->addBreadcrumb(['label' => $model->product->name, 'url' => ['update', 'id' => $model->product->id]]); | |||
$this->addBreadcrumb(['label' => 'Prix', 'url' => ['prices-list', 'id' => $model->product->id]]) ; | |||
$this->addBreadcrumb('Modifier un prix') ; | |||
?> | |||
<?= | |||
$this->render('../_nav', [ | |||
'model' => $modelProduct, | |||
'action' => 'prices-list', | |||
]) ; | |||
?> | |||
<div class="product-prices-update"> | |||
<?= $this->render('_form', [ | |||
'model' => $model, | |||
]) ?> | |||
</div> |
@@ -0,0 +1,62 @@ | |||
<?php | |||
/** | |||
* Copyright distrib (2018) | |||
* | |||
* contact@opendistrib.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. | |||
*/ | |||
/* @var $this yii\web\View */ | |||
/* @var $model app\models\Produit */ | |||
/* @var $form yii\widgets\ActiveForm */ | |||
$this->setTitle('Modifier un produit ('.Html::encode($model->name).')'); | |||
$this->addBreadcrumb(['label' => 'Produits', 'url' => ['index']]); | |||
$this->addBreadcrumb(['label' => $model->name, 'url' => ['update', 'id' => $model->id]]); | |||
$this->addBreadcrumb('Modifier'); | |||
?> | |||
<?= $this->render('_nav', [ | |||
'model' => $model, | |||
'action' => $action, | |||
]) | |||
?> | |||
<div class="product-update"> | |||
<?= $this->render('../_form', [ | |||
'model' => $model, | |||
]) ?> | |||
</div> |
@@ -38,6 +38,7 @@ | |||
use yii\helpers\Html; | |||
use yii\widgets\ActiveForm; | |||
use common\models\ProductPrice ; | |||
\backend\assets\VuejsUserFormAsset::register($this); | |||
@@ -77,11 +78,7 @@ use yii\widgets\ActiveForm; | |||
?> | |||
<?= $form->field($model, 'product_price_percent') | |||
->dropDownList([ | |||
'' => 'Aucun', | |||
-5 => '-5%', | |||
5 => '+5%', | |||
], [])->hint('Pourcentage appliqué aux prix de chaque produit pour cet utilisateur.'); ?> | |||
->dropDownList(ProductPrice::percentValues(), [])->hint('Pourcentage appliqué aux prix de chaque produit pour cet utilisateur.'); ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> |
@@ -1,12 +1,4 @@ | |||
.producer-update { | |||
#nav-params { | |||
margin-bottom: 30px ; | |||
button { | |||
margin-right: 10px ; | |||
} | |||
} | |||
} |
@@ -314,6 +314,14 @@ a.btn, button.btn { | |||
} | |||
} | |||
#nav-params { | |||
margin-bottom: 30px ; | |||
button { | |||
margin-right: 10px ; | |||
} | |||
} | |||
/* modals */ | |||
.modal-mask { |
@@ -383,4 +383,16 @@ class PointSale extends ActiveRecordCommon | |||
} | |||
} | |||
} | |||
public static function populateDropdownList() | |||
{ | |||
$pointSalesArrayDropdown = ['' => '--'] ; | |||
$pointSalesArray = PointSale::find()->where('id_producer = ' . GlobalParam::getCurrentProducerId())->all() ; | |||
foreach($pointSalesArray as $pointSale) { | |||
$pointSalesArrayDropdown[$pointSale['id']] = $pointSale['name'] ; | |||
} | |||
return $pointSalesArrayDropdown ; | |||
} | |||
} |
@@ -67,6 +67,12 @@ class ProductPrice extends ActiveRecordCommon | |||
public function rules() | |||
{ | |||
return [ | |||
['id_user', 'required', 'when' => function($model) { | |||
return !$model->id_point_sale ; | |||
}, 'message' => 'Vous devez renseigner un utilisateur et/ou un point de vente'], | |||
['id_point_sale', 'required', 'when' => function($model) { | |||
return !$model->id_user ; | |||
}, 'message' => 'Vous devez renseigner un utilisateur et/ou un point de vente'], | |||
[['id_product', 'price'], 'required'], | |||
[['id_product', 'id_user', 'id_point_sale', 'percent'], 'integer'], | |||
[['price'], 'double'], | |||
@@ -124,11 +130,24 @@ class ProductPrice extends ActiveRecordCommon | |||
public static function defaultOptionsSearch() | |||
{ | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'with' => ['user', 'pointSale'], | |||
'join_with' => ['product'], | |||
'orderby' => '', | |||
'attribute_id_producer' => '' | |||
'attribute_id_producer' => 'product.id_producer' | |||
]; | |||
} | |||
public static function percentValues() | |||
{ | |||
$percentValues = [ | |||
'' => 'Aucun' | |||
] ; | |||
for($i = -50 ; $i < 51 ; $i = $i + 5) { | |||
$percentValues[$i] = $i.' %' ; | |||
} | |||
return $percentValues ; | |||
} | |||
} |
@@ -0,0 +1,94 @@ | |||
<?php | |||
/** | |||
* Copyright distrib (2018) | |||
* | |||
* contact@opendistrib.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 common\helpers\GlobalParam; | |||
use Yii; | |||
use yii\helpers\Html; | |||
use common\models\UserPointSale; | |||
use common\models\PointSaleDistribution; | |||
use common\components\ActiveRecordCommon; | |||
/** | |||
* This is the model class for table "product_price". | |||
* | |||
* @property integer $id | |||
*/ | |||
class ProductPriceSearch extends ProductPrice | |||
{ | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_user', 'id_point_sale'], 'string'], | |||
[['price'], 'double'], | |||
]; | |||
} | |||
public function search($params) | |||
{ | |||
$optionsSearch = self::defaultOptionsSearch() ; | |||
$query = ProductPrice::find() | |||
->with($optionsSearch['with']) | |||
->innerJoinWith($optionsSearch['join_with'], true) | |||
->where(['product.id_producer' => GlobalParam::getCurrentProducerId()]) | |||
->orderBy('product_price.price ASC') | |||
; | |||
$dataProvider = new ActiveDataProvider([ | |||
'query' => $query, | |||
'sort' => false, | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
], | |||
]); | |||
$this->load($params); | |||
if (!$this->validate()) { | |||
return $dataProvider; | |||
} | |||
//$query->andFilterWhere(['like', 'user.name', $this->id_user]) ; | |||
//$query->andFilterWhere(['like', 'point_sale.name', $this->id_point_sale]) ; | |||
return $dataProvider; | |||
} | |||
} |
@@ -695,11 +695,15 @@ class User extends ActiveRecordCommon implements IdentityInterface | |||
return $address; | |||
} | |||
public function getUsername() | |||
public function getUsername($withType = false) | |||
{ | |||
$username = '' ; | |||
if(isset($this->name_legal_person) && strlen($this->name_legal_person)) { | |||
$username = $this->name_legal_person ; | |||
if($withType) { | |||
$username = 'Personne morale / '.$username ; | |||
} | |||
} | |||
else { | |||
$username = $this->lastname.' '.$this->name ; | |||
@@ -708,6 +712,36 @@ class User extends ActiveRecordCommon implements IdentityInterface | |||
return $username ; | |||
} | |||
public static function getUsernameFromArray($modelArray, $withType = false) | |||
{ | |||
$username = '' ; | |||
if(isset($modelArray['name_legal_person']) && strlen($modelArray['name_legal_person'])) { | |||
$username = $modelArray['name_legal_person'] ; | |||
if($withType) { | |||
$username = 'Personne morale / '.$username ; | |||
} | |||
} | |||
else { | |||
$username = $modelArray['lastname'].' '.$modelArray['name'] ; | |||
} | |||
return $username ; | |||
} | |||
public static function populateDropdownList() | |||
{ | |||
$usersArray = User::findBy()->all() ; | |||
$usersArrayDropdown = ['' => '--'] ; | |||
foreach($usersArray as $user) { | |||
$usersArrayDropdown[$user['user_id']] = User::getUsernameFromArray($user, true) ; | |||
} | |||
return $usersArrayDropdown ;; | |||
} | |||
/** | |||
* Retourne l'ID de l'utilisateur courant connecté. | |||
* |