Parcourir la source

Adaptations prix spécifiques

refactoring
Guillaume il y a 3 ans
Parent
révision
87680db88a
29 fichiers modifiés avec 1056 ajouts et 49 suppressions
  1. +43
    -5
      backend/controllers/DocumentController.php
  2. +57
    -2
      backend/controllers/UserController.php
  3. +179
    -0
      backend/controllers/UserGroupController.php
  4. +2
    -2
      backend/views/delivery-note/index.php
  5. +13
    -1
      backend/views/document/_form.php
  6. +10
    -1
      backend/views/layouts/left.php
  7. +2
    -2
      backend/views/point-sale/_form.php
  8. +2
    -1
      backend/views/product/update/prices/_form.php
  9. +24
    -10
      backend/views/product/update/prices/list.php
  10. +63
    -0
      backend/views/user-group/_form.php
  11. +52
    -0
      backend/views/user-group/create.php
  12. +75
    -0
      backend/views/user-group/index.php
  13. +52
    -0
      backend/views/user-group/update.php
  14. +10
    -2
      backend/views/user/_form.php
  15. +2
    -1
      backend/views/user/update.php
  16. +8
    -4
      backend/web/css/screen.css
  17. +2
    -1
      backend/web/sass/user/_form.scss
  18. +3
    -1
      common/models/Document.php
  19. +24
    -2
      common/models/Order.php
  20. +23
    -4
      common/models/Product.php
  21. +8
    -2
      common/models/ProductOrder.php
  22. +17
    -5
      common/models/ProductPrice.php
  23. +29
    -3
      common/models/User.php
  24. +108
    -0
      common/models/UserGroup.php
  25. +84
    -0
      common/models/UserGroupSearch.php
  26. +100
    -0
      common/models/UserUserGroup.php
  27. +30
    -0
      console/migrations/m210303_081449_add_table_group_user.php
  28. +17
    -0
      console/migrations/m210303_090805_add_group_user_specific_prices.php
  29. +17
    -0
      console/migrations/m210303_095445_add_product_order_invoice_price.php

+ 43
- 5
backend/controllers/DocumentController.php Voir le fichier

@@ -39,11 +39,13 @@
namespace backend\controllers;

use common\models\DeliveryNote;
use common\models\PointSale;
use common\models\Product;
use common\models\User;
use common\models\Document;
use common\helpers\GlobalParam;
use common\models\Order;
use common\models\UserProducer;
use yii\base\UserException;
use yii;

@@ -109,6 +111,30 @@ class DocumentController extends BackendController
], [
'id_delivery_note' => $idDeliveryNote
]) ;

// mise à jour des prix facturés
$ordersArray = Order::searchAll([
'id_invoice' => $model->id
], [
'join_with' => ['distribution', 'user', 'user.userUserGroup', 'user.userProducer', 'pointSale', 'productOrder', 'productOrder.product', 'productOrder.product.productPrice']
]) ;

foreach($ordersArray as $order) {
$userProducer = UserProducer::searchOne([
'id_user' => $model->id_user,
'id_producer' => $order->distribution->id_producer,
]) ;
foreach($order->productOrder as $productOrder) {
if($productOrder->product) {
$productOrder->invoice_price = $productOrder->product->getPrice([
'user' => $model->user,
'user_producer' => $userProducer,
'point_sale' => $order->pointSale
]) ;
$productOrder->save() ;
}
}
}
}
}
}
@@ -249,7 +275,7 @@ class DocumentController extends BackendController
$json['delivery_notes'][] = array_merge(
$deliveryNote->getAttributes(),
[
'total' => $deliveryNote->getAmountWithTax()
'total' => $deliveryNote->getAmountWithTax(Order::INVOICE_AMOUNT_TOTAL)
]
) ;
}
@@ -347,6 +373,14 @@ class DocumentController extends BackendController
);
}

$userProducer = UserProducer::searchOne([
'id_user' => $document->user->id,
'id_producer' => GlobalParam::getCurrentProducerId()
]) ;
$pointSale = PointSale::searchOne([
'id_user' => $document->user->id
]) ;

return [
'return' => 'success',
'tax_rate_producer' => GlobalParam::getCurrentProducer()->taxRate->value,
@@ -355,16 +389,20 @@ class DocumentController extends BackendController
'class' => $document->getClass()
]),
'id_user' => $document->user->id,
'products' => ArrayHelper::map($productsArray, 'id', function ($product) {
'products' => ArrayHelper::map($productsArray, 'id', function ($product) use ($document, $userProducer, $pointSale) {
return array_merge($product->getAttributes(), [
'price_with_tax' => $product->price_with_tax,
'price_with_tax' => $product->getPriceWithTax([
'user' => $document->user,
'user_producer' => $userProducer,
'point_sale' => $pointSale,
]),
'wording_unit' => $product->wording_unit,
'tax_rate' => $product->taxRate->value
]);
}),
'orders' => $ordersArray,
'total' => $document->getAmount(Order::AMOUNT_TOTAL),
'total_with_tax' => $document->getAmountWithTax(Order::AMOUNT_TOTAL),
'total' => ($document->getClass() == 'Invoice' || $document->getClass() == 'DeliveryNote') ? $document->getAmount(Order::INVOICE_AMOUNT_TOTAL) : $document->getAmount(Order::AMOUNT_TOTAL),
'total_with_tax' => ($document->getClass() == 'Invoice' || $document->getClass() == 'DeliveryNote') ? $document->getAmountWithTax(Order::INVOICE_AMOUNT_TOTAL) : $document->getAmountWithTax(Order::AMOUNT_TOTAL),
];
}
}

+ 57
- 2
backend/controllers/UserController.php Voir le fichier

@@ -43,9 +43,11 @@ use common\models\User;
use common\models\Producer;
use common\models\Distribution;
use backend\models\MailForm;
use common\models\UserGroup;
use common\models\UserProducer;
use common\models\UserPointSale;
use common\models\PointSale;
use common\models\UserUserGroup;

/**
* UserController implements the CRUD actions for User model.
@@ -117,8 +119,9 @@ class UserController extends BackendController

public function initForm($model)
{
// init points de vente sélectionnés
if ($model->id) {
// init points de vente sélectionnés
$userPointSaleArray = UserPointSale::searchAll([
'id_user' => $model->id
]);
@@ -128,6 +131,17 @@ class UserController extends BackendController
}
}

// init groupes d'utilisateurs sélectionnés
$userUserGroupsArray = UserUserGroup::searchAll([
'id_user' => $model->id
]);
if ($userUserGroupsArray && count($userUserGroupsArray) > 0) {
foreach ($userUserGroupsArray as $userUserGroup) {
$model->user_groups[] = $userUserGroup->id_user_group;
}
}

// product price percent
$userProducer = UserProducer::searchOne([
'id_producer' => GlobalParam::getCurrentProducerId(),
'id_user' => $model->id
@@ -147,8 +161,16 @@ class UserController extends BackendController
}])
->all();

// groupes d'utilisateurs
$userGroupsArray = UserGroup::find()
->where([
'id_producer' => GlobalParam::getCurrentProducerId(),
])
->all();

return [
'pointsSaleArray' => $pointsSaleArray
'pointsSaleArray' => $pointsSaleArray,
'userGroupsArray' => $userGroupsArray,
];
}

@@ -173,6 +195,7 @@ class UserController extends BackendController
if ($userExist) {
Producer::addUser($userExist->id, GlobalParam::getCurrentProducerId()) ;
$this->processLinkPointSale($userExist);
$this->processLinkUserGroup($userExist);
Yii::$app->getSession()->setFlash('success', "L'utilisateur que vous souhaitez créer possède déjà un compte sur la plateforme. Il vient d'être lié à votre établissement.");
}
else {
@@ -199,6 +222,7 @@ class UserController extends BackendController

$model->sendMailWelcome($password);
$this->processLinkPointSale($model);
$this->processLinkUserGroup($model);
$this->processProductPricePercent($model) ;

Yii::$app->getSession()->setFlash('success', 'Utilisateur créé.');
@@ -237,6 +261,7 @@ class UserController extends BackendController
$model->sendMailWelcome($password);
}
$this->processLinkPointSale($model);
$this->processLinkUserGroup($model);
$this->processProductPricePercent($model) ;
Yii::$app->getSession()->setFlash('success', 'Utilisateur modifié.');
}
@@ -296,6 +321,36 @@ class UserController extends BackendController
}
}

/**
* Lie un utilisateur aux groupes d'utilisateurs sélectionnés.
*
* @param User $modelUser
*/
public function processLinkUserGroup($modelUser)
{
$posts = Yii::$app->request->post();
UserUserGroup::deleteAll([
'id_user' => $modelUser->id
]);

if (is_array($modelUser->user_groups) && count($modelUser->user_groups) > 0) {
foreach ($modelUser->user_groups as $userGroupId) {

$userUserGroup = UserUserGroup::searchOne([
'id_user' => $modelUser->id,
'id_user_group' => $userGroupId
]);

if (!$userUserGroup) {
$userUserGroup = new UserUserGroup();
$userUserGroup->id_user = $modelUser->id;
$userUserGroup->id_user_group = $userGroupId;
$userUserGroup->save();
}
}
}
}

public function processProductPricePercent($model)
{
$userProducer = UserProducer::searchOne([

+ 179
- 0
backend/controllers/UserGroupController.php Voir le fichier

@@ -0,0 +1,179 @@
<?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 backend\controllers;

use common\helpers\GlobalParam;
use common\models\UserGroup;
use common\models\UserUserGroup;
use Yii;
use yii\filters\AccessControl;
use common\models\PointSale;
use yii\data\ActiveDataProvider;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use common\models\User;
use common\models\UserPointSale;
use common\models\Order;
use common\models\Producer;
use common\models\Distribution;
use yii\helpers\Html;

/**
* PointVenteController implements the CRUD actions for PointVente model.
*/
class UserGroupController extends BackendController
{

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 points de vente.
*
* @return mixed
*/
public function actionIndex()
{
$searchModel = new UserGroupSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}

/**
* Crée un groupe d'utilisateur.
*
* @return mixed
*/
public function actionCreate()
{
$model = new UserGroup();

$model->id_producer = GlobalParam::getCurrentProducerId() ;

if ($model->load(Yii::$app->request->post()) && $model->save()) {
Yii::$app->getSession()->setFlash('success', "Groupe d'utilisateur ajouté.");
return $this->redirect(['index']);
}
else {
return $this->render('create', [
'model' => $model,
]);
}
}

/**
* Modifie un groupe d'utilisateur.
*
* @param integer $id
* @return mixed
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);

if ($model->load(Yii::$app->request->post()) && $model->save()) {
Yii::$app->getSession()->setFlash('success', "Groupe d'utilisateur modifié.");
return $this->redirect(['index']);
}
else {
return $this->render('update', [
'model' => $model,
]);
}
}

/**
* Supprime un groupe d'utilisateur.
*
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$userGroup = $this->findModel($id);

$userGroup->delete();
UserUserGroup::deleteAll(['id_user_group' => $id]);
Yii::$app->getSession()->setFlash('success', 'Groupe d\'utilisateur <strong>' . Html::encode($userGroup->name) . '</strong> supprimé.');

return $this->redirect(['index']);
}

/**
* Recherche un groupe d'utilisateur en fonction de son ID.
*
* @param integer $id
* @return UserGroup
* @throws NotFoundHttpException si le modèle n'est pas trouvé
*/
protected function findModel($id)
{
if (($model = UserGroup::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}

}

+ 2
- 2
backend/views/delivery-note/index.php Voir le fichier

@@ -104,8 +104,8 @@ $this->addButton(['label' => 'Nouveau bon de livraison <span class="glyphicon gl
[
'attribute' => 'amount',
'header' => 'Montant',
'value' => function($invoice) {
return $invoice->getAmountWithTax(Order::AMOUNT_TOTAL, true) ;
'value' => function($deliveryNote) {
return $deliveryNote->getAmountWithTax(Order::INVOICE_AMOUNT_TOTAL, true) ;
}
],
[

+ 13
- 1
backend/views/document/_form.php Voir le fichier

@@ -261,13 +261,25 @@ use common\models\Producer;
<li v-if="order.point_sale_name">{{ order.point_sale_name }}</li>
</ul>
</td>
<td class="col-md-2">{{ formatPrice(productOrder.price) }}</td>
<td class="col-md-2">
<span v-if="(document.class == 'Invoice' || document.class == 'DeliveryNote') && productOrder.invoice_price">
{{ formatPrice(productOrder.invoice_price) }}
</span>
<span v-else>
{{ formatPrice(productOrder.price) }}
</span>
</td>
<td class="col-md-2">{{ productOrder.quantity }}</td>
<td class="col-md-1" v-if="taxRateProducer != 0">
{{ productsArray[productOrder.id_product].tax_rate * 100 }} %
</td>
<td class="col-md-2">
<span v-if="(document.class == 'Invoice' || document.class == 'DeliveryNote') && productOrder.invoice_price">
{{ formatPrice(productOrder.quantity * productOrder.invoice_price) }}
</span>
<span v-else-if="document.class == 'Quotation'">
{{ formatPrice(productOrder.quantity * productOrder.price) }}
</span>
</td>
<td class="col-md-1">
<a class="btn btn-default" @click="deleteProductOrder(productOrder.id)">

+ 10
- 1
backend/views/layouts/left.php Voir le fichier

@@ -50,7 +50,16 @@ termes.
['label' => 'Distributions','icon' => 'calendar','url' => ['/distribution/index'], 'visible' => User::isCurrentProducer()],
['label' => 'Produits','icon' => 'clone','url' => ['/product/index'], 'visible' => User::isCurrentProducer(), 'active' => Yii::$app->controller->id == 'product'],
['label' => 'Points de vente','icon' => 'map-marker','url' => ['/point-sale/index'], 'visible' => User::isCurrentProducer(), 'active' => Yii::$app->controller->id == 'point-sale'],
['label' => 'Utilisateurs','icon' => 'users','url' => ['/user/index'], 'visible' => User::isCurrentProducer(), 'active' => Yii::$app->controller->id == 'user'],
//['label' => 'Utilisateurs','icon' => 'users','url' => ['/user/index'], 'visible' => User::isCurrentProducer(), 'active' => Yii::$app->controller->id == 'user'],
[
'label' => 'Utilisateurs',
'icon' => 'users',
'url' => '#',
'items' => [
['label' => 'Liste','icon' => 'th-list','url' => ['/user/index'], 'visible' => User::isCurrentProducer()],
['label' => 'Groupes','icon' => 'users','url' => ['/user-group/index'], 'visible' => User::isCurrentProducer()],
],
],
['label' => 'Abonnements','icon' => 'repeat','url' => ['/subscription/index'], 'visible' => User::isCurrentProducer(), 'active' => Yii::$app->controller->id == 'subscription'],
['label' => 'Paramètres','icon' => 'cog','url' => ['/producer/update'], 'visible' => User::isCurrentProducer()],
['label' => 'Communiquer','icon' => 'bullhorn','url' => ['/communicate/index'], 'visible' => User::isCurrentProducer()],

+ 2
- 2
backend/views/point-sale/_form.php Voir le fichier

@@ -93,8 +93,8 @@ use common\models\ProductPrice ;
Producer::CREDIT_FUNCTIONING_USER => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_USER],
], [])->hint(Producer::HINT_CREDIT_FUNCTIONING); ?>

<?= $form->field($model, 'product_price_percent')
->dropDownList(ProductPrice::percentValues(), [])->hint('Pourcentage appliqué aux prix de chaque produit dans ce point de vente.'); ?>
<?php /*$form->field($model, 'product_price_percent')
->dropDownList(ProductPrice::percentValues(), [])->hint('Pourcentage appliqué aux prix de chaque produit dans ce point de vente.');*/ ?>


<div id="delivery-days">

+ 2
- 1
backend/views/product/update/prices/_form.php Voir le fichier

@@ -28,7 +28,8 @@ use common\models\User ;
]); ?>

<?= $form->field($model, 'id_user')->dropDownList(User::populateDropdownList()); ?>
<?= $form->field($model, 'id_point_sale')->dropDownList(PointSale::populateDropdownList()) ?>
<?= $form->field($model, 'id_user_group')->dropDownList(UserGroup::populateDropdownList()); ?>
<?= $form->field($model, 'id_point_sale')->dropDownList(PointSale::populateDropdownList()); ?>

<?php
$producer = GlobalParam::getCurrentProducer();

+ 24
- 10
backend/views/product/update/prices/list.php Voir le fichier

@@ -53,7 +53,7 @@ $this->addBreadcrumb('Modifier');
]) ;
?>

<div class="col-md-8">
<div class="col-md-12">

<div class="panel panel-default">
<div class="panel-heading">
@@ -73,21 +73,31 @@ $this->addBreadcrumb('Modifier');
'dataProvider' => $dataProvider,
'columns' => [
[
'attribute' => 'id_point_sale',
'attribute' => 'id_user',
'format' => 'raw',
'value' => function ($model) {
if($model->pointSale) {
return $model->pointSale->name ;
if($model->user) {
return $model->user->getUsername() ;
}
return '<span class="label label-success">Tous</span>' ;
}
],
[
'attribute' => 'id_user',
'attribute' => 'id_user_group',
'format' => 'raw',
'value' => function ($model) {
if($model->user) {
return $model->user->getUsername() ;
if($model->userGroup) {
return $model->userGroup->name ;
}
return '<span class="label label-success">Tous</span>' ;
}
],
[
'attribute' => 'id_point_sale',
'format' => 'raw',
'value' => function ($model) {
if($model->pointSale) {
return $model->pointSale->name ;
}
return '<span class="label label-success">Tous</span>' ;
}
@@ -130,6 +140,7 @@ $this->addBreadcrumb('Modifier');
</div>
</div>

<!--
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Pourcentage global / Utilisateurs</h3>
@@ -195,10 +206,10 @@ $this->addBreadcrumb('Modifier');
</table>
</div>
</div>
-->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Prix de base</h3>
<h3 class="panel-title">Rappel du prix de base</h3>
</div>
<div class="panel-body">
<p>Prix de base : <strong><?= Price::format($model->getPrice()); ?> HT</strong> / <strong><?= Price::format($model->getPriceWithTax()); ?> TTC</strong><br /></p>
@@ -206,7 +217,9 @@ $this->addBreadcrumb('Modifier');
</div>
</div>

<!--
<div class="col-md-4">

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Priorités de résolution</h3>
@@ -224,4 +237,5 @@ $this->addBreadcrumb('Modifier');
</p>
</div>
</div>
</div>
</div>
-->

+ 63
- 0
backend/views/user-group/_form.php Voir le fichier

@@ -0,0 +1,63 @@
<?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\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use common\models\Producer;
use common\models\ProductPrice ;

/* @var $this yii\web\View */
/* @var $model backend\models\PointVente */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="point-sale-form">

<?php $form = ActiveForm::begin(); ?>
<div class="col-md-8">
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
</div>
<div class="clr"></div>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

</div>

+ 52
- 0
backend/views/user-group/create.php Voir le fichier

@@ -0,0 +1,52 @@
<?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("Ajouter un groupe d'utilisateur") ;
$this->addBreadcrumb(['label' => "Groupes d'utilisateurs", 'url' => ['index']]) ;
$this->addBreadcrumb('Ajouter') ;

?>

<div class="user-group-create">
<?= $this->render('_form', [
'model' => $model,
]) ?>
</div>

+ 75
- 0
backend/views/user-group/index.php Voir le fichier

@@ -0,0 +1,75 @@
<?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\grid\GridView;
use common\models\PointVenteUser ;

$this->setTitle('Groupes d\'utilisateurs') ;
$this->addBreadcrumb($this->getTitle()) ;
$this->addButton(['label' => 'Nouveau groupe d\'utilisateur <span class="glyphicon glyphicon-plus"></span>', 'url' => 'user-group/create', 'class' => 'btn btn-primary']) ;

?>

<div class="point-sale-index">
<?= GridView::widget([
'filterModel' => $searchModel,
'dataProvider' => $dataProvider,
'columns' => [
'name',
[
'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>', $url, [
'title' => Yii::t('app', 'Modifier'), 'class' => 'btn btn-default'
]);
},
'delete' => function ($url, $model) {
return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, [
'title' => Yii::t('app', 'Supprimer'), 'class' => 'btn btn-default'
]);
}
],
],
],
]); ?>
</div>

+ 52
- 0
backend/views/user-group/update.php Voir le fichier

@@ -0,0 +1,52 @@
<?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 groupe d'utilisateur") ;
$this->addBreadcrumb(['label' => "Groupes d'utilisateurs", 'url' => ['index']]) ;
$this->addBreadcrumb(['label' => Html::encode($model->name), 'url' => ['update', 'id' => $model->id]]) ;
$this->addBreadcrumb('Modifier') ;

?>

<div class="user-group-update">
<?= $this->render('_form', [
'model' => $model,
]) ?>
</div>

+ 10
- 2
backend/views/user/_form.php Voir le fichier

@@ -77,8 +77,16 @@ use common\models\ProductPrice ;
]);
?>

<?= $form->field($model, 'product_price_percent')
->dropDownList(ProductPrice::percentValues(), [])->hint('Pourcentage appliqué aux prix de chaque produit pour cet utilisateur.'); ?>
<?= $form->field($model, 'user_groups')->checkboxlist(
ArrayHelper::map($userGroupsArray, 'id', function ($userGroup) use ($model) {
return Html::encode($userGroup->name);
}), [
'encode' => false
]);
?>

<?php /* $form->field($model, 'product_price_percent')
->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']) ?>

+ 2
- 1
backend/views/user/update.php Voir le fichier

@@ -48,6 +48,7 @@ $this->addBreadcrumb('Modifier') ;
<div class="user-update">
<?= $this->render('_form', [
'model' => $model,
'pointsSaleArray' => $pointsSaleArray
'pointsSaleArray' => $pointsSaleArray,
'userGroupsArray' => $userGroupsArray,
]) ?>
</div>

+ 8
- 4
backend/web/css/screen.css Voir le fichier

@@ -2217,9 +2217,11 @@ termes.
float: right;
}

/* line 5, ../sass/user/_form.scss */
/* line 6, ../sass/user/_form.scss */
.user-create #user-points_sale label,
.user-update #user-points_sale label {
.user-create #user-user_groups label,
.user-update #user-points_sale label,
.user-update #user-user_groups label {
font-weight: normal;
margin-right: 10px;
cursor: pointer;
@@ -2227,9 +2229,11 @@ termes.
padding: 5px 10px;
border: solid 1px #e0e0e0;
}
/* line 13, ../sass/user/_form.scss */
/* line 14, ../sass/user/_form.scss */
.user-create #user-points_sale label .form-control,
.user-update #user-points_sale label .form-control {
.user-create #user-user_groups label .form-control,
.user-update #user-points_sale label .form-control,
.user-update #user-user_groups label .form-control {
display: inline;
width: 200px;
margin-left: 15px;

+ 2
- 1
backend/web/sass/user/_form.scss Voir le fichier

@@ -1,7 +1,8 @@

.user-create,
.user-update {
#user-points_sale {
#user-points_sale,
#user-user_groups {
label {
font-weight: normal ;
margin-right: 10px ;

+ 3
- 1
common/models/Document.php Voir le fichier

@@ -124,9 +124,11 @@ class Document extends ActiveRecordCommon

foreach ($ordersArray as $order) {
$order->init();

if ($withTax) {
$amount += $order->getAmountWithTax($type);
} else {
}
else {
$amount += $order->getAmount($type);
}
}

+ 24
- 2
common/models/Order.php Voir le fichier

@@ -63,6 +63,8 @@ class Order extends ActiveRecordCommon
{
var $amount = 0;
var $amount_with_tax = 0;
var $invoice_amount = 0;
var $invoice_amount_with_tax = 0;
var $paid_amount = 0;
var $weight = 0;

@@ -74,6 +76,7 @@ class Order extends ActiveRecordCommon
const PAYMENT_UNPAID = 'unpaid';
const PAYMENT_SURPLUS = 'surplus';

const INVOICE_AMOUNT_TOTAL = 'invoice-total' ;
const AMOUNT_TOTAL = 'total';
const AMOUNT_PAID = 'paid';
const AMOUNT_REMAINING = 'remaining';
@@ -214,12 +217,20 @@ class Order extends ActiveRecordCommon
{
$this->amount = 0;
$this->amount_with_tax = 0;
$this->invoice_amount = 0;
$this->invoice_amount_with_tax = 0;
$this->weight = 0;

if (isset($this->productOrder)) {
foreach ($this->productOrder as $productOrder) {

$this->amount += $productOrder->price * $productOrder->quantity;
$this->amount_with_tax += Price::getPriceWithTax($productOrder->price, $productOrder->taxRate->value) * $productOrder->quantity;

$invoicePrice = $productOrder->invoice_price ? $productOrder->invoice_price : $productOrder->price ;
$this->invoice_amount += $invoicePrice * $productOrder->quantity;
$this->invoice_amount_with_tax += Price::getPriceWithTax($invoicePrice, $productOrder->taxRate->value) * $productOrder->quantity;

if ($productOrder->unit == 'piece') {
if (isset($productOrder->product)) {
$this->weight += ($productOrder->quantity * $productOrder->product->weight) / 1000;
@@ -384,18 +395,29 @@ class Order extends ActiveRecordCommon

public function getAmount($type = self::AMOUNT_TOTAL, $format = false)
{
return $this->_getAmountGeneric($type, $this->amount, $format) ;
$amount = $this->amount ;
if($type == self::INVOICE_AMOUNT_TOTAL) {
$amount = $this->invoice_amount ;
}

return $this->_getAmountGeneric($type, $amount, $format) ;
}

public function getAmountWithTax($type = self::AMOUNT_TOTAL, $format = false)
{
return $this->_getAmountGeneric($type, $this->amount_with_tax, $format) ;
$amount = $this->amount_with_tax ;
if($type == self::INVOICE_AMOUNT_TOTAL) {
$amount = $this->invoice_amount_with_tax ;
}

return $this->_getAmountGeneric($type, $amount, $format) ;
}

protected function _getAmountGeneric($type, $amountOrder, $format)
{
switch ($type) {
case self::AMOUNT_TOTAL :
case self::INVOICE_AMOUNT_TOTAL :
$amount = $amountOrder;
break;
case self::AMOUNT_PAID :

+ 23
- 4
common/models/Product.php Voir le fichier

@@ -147,6 +147,7 @@ class Product extends ActiveRecordCommon
'active' => 'Actif',
'photo' => 'Photo',
'price' => 'Prix (€) TTC',
'price' => 'Prix (€) TTC',
'weight' => 'Poids',
'recipe' => 'Recette',
'monday' => 'Lundi',
@@ -348,25 +349,40 @@ class Product extends ActiveRecordCommon
'user' => false,
'pointsale' => false,
'user_pointsale' => false,
'usergroup' => false,
] ;

foreach($specificPrices as $specificPrice) {
if($user
&& $specificPrice->id_user && !$specificPrice->id_point_sale
&& $specificPrice->id_user
&& !$specificPrice->id_point_sale
&& !$specificPrice->id_user_group
&& $specificPrice->id_user == $user->id) {

$specificPricesArray['user'] = $specificPrice->price ;
}
if($user
&& $specificPrice->id_user_group
&& !$specificPrice->id_point_sale
&& !$specificPrice->id_user
&& $user->belongsToUserGroup($specificPrice->id_user_group)) {

$specificPricesArray['usergroup'] = $specificPrice->price ;
}
if($pointSale
&& $specificPrice->id_point_sale && !$specificPrice->id_user
&& $specificPrice->id_point_sale
&& !$specificPrice->id_user
&& !$specificPrice->id_user_group
&& $specificPrice->id_point_sale == $pointSale->id) {

$specificPricesArray['pointsale'] = $specificPrice->price ;
}

if($pointSale && $user
&& $specificPrice->id_point_sale && $specificPrice->id_user
&& $specificPrice->id_point_sale == $pointSale->id && $specificPrice->id_user == $user->id) {
&& $specificPrice->id_point_sale
&& $specificPrice->id_user
&& $specificPrice->id_point_sale == $pointSale->id
&& $specificPrice->id_user == $user->id) {

$specificPricesArray['user_pointsale'] = $specificPrice->price ;
}
@@ -378,6 +394,9 @@ class Product extends ActiveRecordCommon
elseif($specificPricesArray['user']) {
return $specificPricesArray['user'] ;
}
elseif($specificPricesArray['usergroup']) {
return $specificPricesArray['usergroup'] ;
}
elseif($specificPricesArray['pointsale']) {
return $specificPricesArray['pointsale'] ;
}

+ 8
- 2
common/models/ProductOrder.php Voir le fichier

@@ -87,6 +87,7 @@ class ProductOrder extends ActiveRecordCommon
[['id_order', 'id_product', 'id_tax_rate'], 'integer'],
[['unit'], 'string', 'max' => 255],
[['quantity'], 'number', 'min' => 0],
[['price', 'invoice_price'], 'double'],
[['description'], 'safe']
];
}
@@ -103,7 +104,9 @@ class ProductOrder extends ActiveRecordCommon
'quantity' => 'Quantité',
'unit' => 'Unité',
'id_tax_rate' => 'Taxe',
'description' => 'Description'
'description' => 'Description',
'price' => 'Prix',
'invoice_price' => 'Prix facturé',
];
}

@@ -134,12 +137,15 @@ class ProductOrder extends ActiveRecordCommon
return $this->price ;
}

public function getInvoicePrice() {
return $this->invoice_price ;
}

/**
* Retourne le prix du produit avec taxe
*/
public function getPriceWithTax()
{

return Price::getPriceWithTax($this->price, $this->taxRate->value);
}


+ 17
- 5
common/models/ProductPrice.php Voir le fichier

@@ -68,13 +68,16 @@ class ProductPrice extends ActiveRecordCommon
{
return [
['id_user', 'required', 'when' => function($model) {
return !$model->id_point_sale ;
}, 'message' => 'Vous devez renseigner un utilisateur et/ou un point de vente'],
return !$model->id_point_sale && !$model->id_user_group ;
}, 'message' => 'Vous devez renseigner au moins un utilisateur, un point de vente ou un groupe d\'utilisateur'],
['id_point_sale', 'required', 'when' => function($model) {
return !$model->id_user ;
}, 'message' => 'Vous devez renseigner un utilisateur et/ou un point de vente'],
return !$model->id_user && !$model->id_user_group ;
}, 'message' => 'Vous devez renseigner au moins un utilisateur, un point de vente ou un groupe d\'utilisateur'],
['id_user_group', 'required', 'when' => function($model) {
return !$model->id_user && !$model->id_point_sale ;
}, 'message' => 'Vous devez renseigner au moins un utilisateur, un point de vente ou un groupe d\'utilisateur'],
[['id_product', 'price'], 'required'],
[['id_product', 'id_user', 'id_point_sale', 'percent'], 'integer'],
[['id_product', 'id_user', 'id_point_sale', 'id_user_group', 'percent'], 'integer'],
[['price'], 'double'],
];
}
@@ -89,6 +92,7 @@ class ProductPrice extends ActiveRecordCommon
'id_product' => 'Produit',
'id_user' => 'Utilisateur',
'id_point_sale' => 'Point de vente',
'id_user_group' => "Groupe d'utilisateur",
'price' => 'Prix (HT)',
'percent' => 'Pourcentage',
];
@@ -114,6 +118,14 @@ class ProductPrice extends ActiveRecordCommon
);
}

public function getUserGroup()
{
return $this->hasOne(
UserGroup::className(),
['id' => 'id_user_group']
);
}

public function getUser()
{
return $this->hasOne(

+ 29
- 3
common/models/User.php Voir le fichier

@@ -75,6 +75,7 @@ class User extends ActiveRecordCommon implements IdentityInterface
var $password_new;
var $password_new_confirm;
var $points_sale = [];
var $user_groups = [];
var $one_name ;
var $product_price_percent ;

@@ -112,7 +113,7 @@ class User extends ActiveRecordCommon implements IdentityInterface
['password_old', 'verifyPasswordOld'],
['password_new', 'verifyPasswordNew'],
['password_new_confirm', 'verifyPasswordNewConfirm'],
[['date_last_connection', 'password_old', 'password_new', 'password_new_confirm', 'password_hash', 'points_sale', 'product_price_percent'], 'safe'],
[['date_last_connection', 'password_old', 'password_new', 'password_new_confirm', 'password_hash', 'points_sale', 'product_price_percent', 'user_groups'], 'safe'],
];
}

@@ -142,7 +143,8 @@ class User extends ActiveRecordCommon implements IdentityInterface
'type' => 'Type',
'name_legal_person' => 'Libellé',
'is_main_contact' => 'Contact principal',
'product_price_percent' => 'Prix produits : pourcentage'
'product_price_percent' => 'Prix produits : pourcentage',
'user_groups' => "Groupes d'utilisateurs"
];
}

@@ -155,7 +157,7 @@ class User extends ActiveRecordCommon implements IdentityInterface
{
return [
'with' => [],
'join_with' => ['userProducer'],
'join_with' => ['userProducer', 'userUserGroup'],
'orderby' => 'user.name ASC, user.lastname ASC',
'attribute_id_producer' => ''
];
@@ -257,6 +259,11 @@ class User extends ActiveRecordCommon implements IdentityInterface
return $this->hasMany(UserProducer::className(), ['id_user' => 'id']);
}

public function getUserUserGroup()
{
return $this->hasMany(UserUserGroup::className(), ['id_user' => 'id']);
}

public function getOrder()
{
return $this->hasMany(Order::className(), ['id_user' => 'id']);
@@ -775,5 +782,24 @@ class User extends ActiveRecordCommon implements IdentityInterface
return User::getCurrentStatus() == USER::STATUS_ADMIN || User::getCurrentStatus() == USER::STATUS_PRODUCER;
}

public function belongsToUserGroup($userGroupId)
{
if(!$this->userUserGroup) {
$this->userUserGroup = UserUserGroup::searchAll([
'id_user' => $this->id
]) ;
}

if($this->userUserGroup) {
foreach($this->userUserGroup as $userUserGroup) {
if($userUserGroup->id_user_group == $userGroupId) {
return true ;
}
}
}

return false ;
}


}

+ 108
- 0
common/models/UserGroup.php Voir le fichier

@@ -0,0 +1,108 @@
<?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 common\components\ActiveRecordCommon ;

/**
* This is the model class for table "user_group".
*
*/
class UserGroup extends ActiveRecordCommon
{

/**
* @inheritdoc
*/
public static function tableName()
{
return 'user_group';
}

/**
* @inheritdoc
*/
public function rules()
{
return [
[['name', 'id_producer'], 'required'],
[['name'], 'string'],
[['id_producer'], 'integer'],
];
}

/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'name' => 'Nom',
];
}
/**
* Retourne les options de base nécessaires à la fonction de recherche.
*
* @return array
*/
public static function defaultOptionsSearch() {
return [
'with' => [],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => ''
] ;
}

public static function populateDropdownList()
{
$userGroupsArrayDropdown = ['' => '--'] ;
$userGroupsArray = UserGroup::find()->where('id_producer = ' . GlobalParam::getCurrentProducerId())->all() ;

foreach($userGroupsArray as $userGroup) {
$userGroupsArrayDropdown[$userGroup['id']] = $userGroup['name'] ;
}

return $userGroupsArrayDropdown ;
}

}

+ 84
- 0
common/models/UserGroupSearch.php Voir le fichier

@@ -0,0 +1,84 @@
<?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 common\models\UserGroup ;

class UserGroupSearch extends UserGroup
{
public function rules()
{
return [
[['name'], 'string'],
[['name'], 'string', 'max' => 255],
['id_producer', 'integer'],
];
}
public function search($params)
{
$optionsSearch = self::defaultOptionsSearch() ;
$query = UserGroup::find()
->with($optionsSearch['with'])
->innerJoinWith($optionsSearch['join_with'], true)
->where(['user_group.id_producer' => GlobalParam::getCurrentProducerId()])
;
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['attributes' => ['name']],
'pagination' => [
'pageSize' => 20,
],
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}

$query->andFilterWhere(['like', 'user_group.name', $this->name]) ;
return $dataProvider;
}
}

+ 100
- 0
common/models/UserUserGroup.php Voir le fichier

@@ -0,0 +1,100 @@
<?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 Yii;
use common\components\ActiveRecordCommon ;

/**
* This is the model class for table "user_user_group".
*
*/
class UserUserGroup extends ActiveRecordCommon
{

/**
* @inheritdoc
*/
public static function tableName()
{
return 'user_user_group';
}

/**
* @inheritdoc
*/
public function rules()
{
return [
[['id_user', 'id_user_group'], 'required'],
[['id_user', 'id_user_group'], 'integer'],
];
}

/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id_user' => 'Utilisateur',
'id_user_group' => 'Groupe'
];
}
public function getPointSale()
{
return $this->hasOne(PointSale::className(), ['id' => 'id_point_sale']);
}
/**
* Retourne les options de base nécessaires à la fonction de recherche.
*
* @return array
*/
public static function defaultOptionsSearch() {
return [
'with' => [],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => ''
] ;
}

}

+ 30
- 0
console/migrations/m210303_081449_add_table_group_user.php Voir le fichier

@@ -0,0 +1,30 @@
<?php

use yii\db\Migration;
use yii\db\Schema;

class m210303_081449_add_table_group_user extends Migration
{
public function up()
{
$this->createTable('user_group', [
'id' => 'pk',
'id_producer' => Schema::TYPE_INTEGER. ' NOT NULL',
'name' => Schema::TYPE_STRING . ' NOT NULL',
]);

$this->createTable('user_user_group', [
'id' => 'pk',
'id_user' => Schema::TYPE_INTEGER. ' NOT NULL',
'id_user_group' => Schema::TYPE_INTEGER. ' NOT NULL',
]);

}

public function down()
{
$this->dropTable('user_group');
$this->dropTable('user_user_group');
}

}

+ 17
- 0
console/migrations/m210303_090805_add_group_user_specific_prices.php Voir le fichier

@@ -0,0 +1,17 @@
<?php

use yii\db\Migration;

class m210303_090805_add_group_user_specific_prices extends Migration
{
public function safeUp()
{
$this->addColumn('product_price', 'id_user_group', Schema::TYPE_INTEGER);
}

public function safeDown()
{
$this->dropColumn('product_price', 'id_user_group');
}

}

+ 17
- 0
console/migrations/m210303_095445_add_product_order_invoice_price.php Voir le fichier

@@ -0,0 +1,17 @@
<?php

use yii\db\Migration;
use yii\db\Schema;

class m210303_095445_add_product_order_invoice_price extends Migration
{
public function safeUp()
{
$this->addColumn('product_order', 'invoice_price', Schema::TYPE_FLOAT. ' DEFAULT NULL') ;
}

public function safeDown()
{
$this->dropColumn('product_order', 'invoice_price') ;
}
}

Chargement…
Annuler
Enregistrer