namespace backend\controllers; | namespace backend\controllers; | ||||
use common\models\DeliveryNote; | use common\models\DeliveryNote; | ||||
use common\models\PointSale; | |||||
use common\models\Product; | use common\models\Product; | ||||
use common\models\User; | use common\models\User; | ||||
use common\models\Document; | use common\models\Document; | ||||
use common\helpers\GlobalParam; | use common\helpers\GlobalParam; | ||||
use common\models\Order; | use common\models\Order; | ||||
use common\models\UserProducer; | |||||
use yii\base\UserException; | use yii\base\UserException; | ||||
use yii; | use yii; | ||||
], [ | ], [ | ||||
'id_delivery_note' => $idDeliveryNote | '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() ; | |||||
} | |||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } | ||||
$json['delivery_notes'][] = array_merge( | $json['delivery_notes'][] = array_merge( | ||||
$deliveryNote->getAttributes(), | $deliveryNote->getAttributes(), | ||||
[ | [ | ||||
'total' => $deliveryNote->getAmountWithTax() | |||||
'total' => $deliveryNote->getAmountWithTax(Order::INVOICE_AMOUNT_TOTAL) | |||||
] | ] | ||||
) ; | ) ; | ||||
} | } | ||||
); | ); | ||||
} | } | ||||
$userProducer = UserProducer::searchOne([ | |||||
'id_user' => $document->user->id, | |||||
'id_producer' => GlobalParam::getCurrentProducerId() | |||||
]) ; | |||||
$pointSale = PointSale::searchOne([ | |||||
'id_user' => $document->user->id | |||||
]) ; | |||||
return [ | return [ | ||||
'return' => 'success', | 'return' => 'success', | ||||
'tax_rate_producer' => GlobalParam::getCurrentProducer()->taxRate->value, | 'tax_rate_producer' => GlobalParam::getCurrentProducer()->taxRate->value, | ||||
'class' => $document->getClass() | 'class' => $document->getClass() | ||||
]), | ]), | ||||
'id_user' => $document->user->id, | '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(), [ | 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, | 'wording_unit' => $product->wording_unit, | ||||
'tax_rate' => $product->taxRate->value | 'tax_rate' => $product->taxRate->value | ||||
]); | ]); | ||||
}), | }), | ||||
'orders' => $ordersArray, | '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), | |||||
]; | ]; | ||||
} | } | ||||
} | } |
use common\models\Producer; | use common\models\Producer; | ||||
use common\models\Distribution; | use common\models\Distribution; | ||||
use backend\models\MailForm; | use backend\models\MailForm; | ||||
use common\models\UserGroup; | |||||
use common\models\UserProducer; | use common\models\UserProducer; | ||||
use common\models\UserPointSale; | use common\models\UserPointSale; | ||||
use common\models\PointSale; | use common\models\PointSale; | ||||
use common\models\UserUserGroup; | |||||
/** | /** | ||||
* UserController implements the CRUD actions for User model. | * UserController implements the CRUD actions for User model. | ||||
public function initForm($model) | public function initForm($model) | ||||
{ | { | ||||
// init points de vente sélectionnés | |||||
if ($model->id) { | if ($model->id) { | ||||
// init points de vente sélectionnés | |||||
$userPointSaleArray = UserPointSale::searchAll([ | $userPointSaleArray = UserPointSale::searchAll([ | ||||
'id_user' => $model->id | 'id_user' => $model->id | ||||
]); | ]); | ||||
} | } | ||||
} | } | ||||
// 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([ | $userProducer = UserProducer::searchOne([ | ||||
'id_producer' => GlobalParam::getCurrentProducerId(), | 'id_producer' => GlobalParam::getCurrentProducerId(), | ||||
'id_user' => $model->id | 'id_user' => $model->id | ||||
}]) | }]) | ||||
->all(); | ->all(); | ||||
// groupes d'utilisateurs | |||||
$userGroupsArray = UserGroup::find() | |||||
->where([ | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) | |||||
->all(); | |||||
return [ | return [ | ||||
'pointsSaleArray' => $pointsSaleArray | |||||
'pointsSaleArray' => $pointsSaleArray, | |||||
'userGroupsArray' => $userGroupsArray, | |||||
]; | ]; | ||||
} | } | ||||
if ($userExist) { | if ($userExist) { | ||||
Producer::addUser($userExist->id, GlobalParam::getCurrentProducerId()) ; | Producer::addUser($userExist->id, GlobalParam::getCurrentProducerId()) ; | ||||
$this->processLinkPointSale($userExist); | $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."); | 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 { | else { | ||||
$model->sendMailWelcome($password); | $model->sendMailWelcome($password); | ||||
$this->processLinkPointSale($model); | $this->processLinkPointSale($model); | ||||
$this->processLinkUserGroup($model); | |||||
$this->processProductPricePercent($model) ; | $this->processProductPricePercent($model) ; | ||||
Yii::$app->getSession()->setFlash('success', 'Utilisateur créé.'); | Yii::$app->getSession()->setFlash('success', 'Utilisateur créé.'); | ||||
$model->sendMailWelcome($password); | $model->sendMailWelcome($password); | ||||
} | } | ||||
$this->processLinkPointSale($model); | $this->processLinkPointSale($model); | ||||
$this->processLinkUserGroup($model); | |||||
$this->processProductPricePercent($model) ; | $this->processProductPricePercent($model) ; | ||||
Yii::$app->getSession()->setFlash('success', 'Utilisateur modifié.'); | Yii::$app->getSession()->setFlash('success', 'Utilisateur modifié.'); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
/** | |||||
* 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) | public function processProductPricePercent($model) | ||||
{ | { | ||||
$userProducer = UserProducer::searchOne([ | $userProducer = UserProducer::searchOne([ |
<?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.'); | |||||
} | |||||
} | |||||
} |
[ | [ | ||||
'attribute' => 'amount', | 'attribute' => 'amount', | ||||
'header' => 'Montant', | 'header' => 'Montant', | ||||
'value' => function($invoice) { | |||||
return $invoice->getAmountWithTax(Order::AMOUNT_TOTAL, true) ; | |||||
'value' => function($deliveryNote) { | |||||
return $deliveryNote->getAmountWithTax(Order::INVOICE_AMOUNT_TOTAL, true) ; | |||||
} | } | ||||
], | ], | ||||
[ | [ |
<li v-if="order.point_sale_name">{{ order.point_sale_name }}</li> | <li v-if="order.point_sale_name">{{ order.point_sale_name }}</li> | ||||
</ul> | </ul> | ||||
</td> | </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-2">{{ productOrder.quantity }}</td> | ||||
<td class="col-md-1" v-if="taxRateProducer != 0"> | <td class="col-md-1" v-if="taxRateProducer != 0"> | ||||
{{ productsArray[productOrder.id_product].tax_rate * 100 }} % | {{ productsArray[productOrder.id_product].tax_rate * 100 }} % | ||||
</td> | </td> | ||||
<td class="col-md-2"> | <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) }} | {{ formatPrice(productOrder.quantity * productOrder.price) }} | ||||
</span> | |||||
</td> | </td> | ||||
<td class="col-md-1"> | <td class="col-md-1"> | ||||
<a class="btn btn-default" @click="deleteProductOrder(productOrder.id)"> | <a class="btn btn-default" @click="deleteProductOrder(productOrder.id)"> |
['label' => 'Distributions','icon' => 'calendar','url' => ['/distribution/index'], 'visible' => User::isCurrentProducer()], | ['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' => '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' => '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' => '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' => 'Paramètres','icon' => 'cog','url' => ['/producer/update'], 'visible' => User::isCurrentProducer()], | ||||
['label' => 'Communiquer','icon' => 'bullhorn','url' => ['/communicate/index'], 'visible' => User::isCurrentProducer()], | ['label' => 'Communiquer','icon' => 'bullhorn','url' => ['/communicate/index'], 'visible' => User::isCurrentProducer()], |
Producer::CREDIT_FUNCTIONING_USER => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_USER], | Producer::CREDIT_FUNCTIONING_USER => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_USER], | ||||
], [])->hint(Producer::HINT_CREDIT_FUNCTIONING); ?> | ], [])->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"> | <div id="delivery-days"> |
]); ?> | ]); ?> | ||||
<?= $form->field($model, 'id_user')->dropDownList(User::populateDropdownList()); ?> | <?= $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 | <?php | ||||
$producer = GlobalParam::getCurrentProducer(); | $producer = GlobalParam::getCurrentProducer(); |
]) ; | ]) ; | ||||
?> | ?> | ||||
<div class="col-md-8"> | |||||
<div class="col-md-12"> | |||||
<div class="panel panel-default"> | <div class="panel panel-default"> | ||||
<div class="panel-heading"> | <div class="panel-heading"> | ||||
'dataProvider' => $dataProvider, | 'dataProvider' => $dataProvider, | ||||
'columns' => [ | 'columns' => [ | ||||
[ | [ | ||||
'attribute' => 'id_point_sale', | |||||
'attribute' => 'id_user', | |||||
'format' => 'raw', | 'format' => 'raw', | ||||
'value' => function ($model) { | '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>' ; | return '<span class="label label-success">Tous</span>' ; | ||||
} | } | ||||
], | ], | ||||
[ | [ | ||||
'attribute' => 'id_user', | |||||
'attribute' => 'id_user_group', | |||||
'format' => 'raw', | 'format' => 'raw', | ||||
'value' => function ($model) { | '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>' ; | return '<span class="label label-success">Tous</span>' ; | ||||
} | } | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<!-- | |||||
<div class="panel panel-default"> | <div class="panel panel-default"> | ||||
<div class="panel-heading"> | <div class="panel-heading"> | ||||
<h3 class="panel-title">Pourcentage global / Utilisateurs</h3> | <h3 class="panel-title">Pourcentage global / Utilisateurs</h3> | ||||
</table> | </table> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
--> | |||||
<div class="panel panel-default"> | <div class="panel panel-default"> | ||||
<div class="panel-heading"> | <div class="panel-heading"> | ||||
<h3 class="panel-title">Prix de base</h3> | |||||
<h3 class="panel-title">Rappel du prix de base</h3> | |||||
</div> | </div> | ||||
<div class="panel-body"> | <div class="panel-body"> | ||||
<p>Prix de base : <strong><?= Price::format($model->getPrice()); ?> HT</strong> / <strong><?= Price::format($model->getPriceWithTax()); ?> TTC</strong><br /></p> | <p>Prix de base : <strong><?= Price::format($model->getPrice()); ?> HT</strong> / <strong><?= Price::format($model->getPriceWithTax()); ?> TTC</strong><br /></p> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<!-- | |||||
<div class="col-md-4"> | <div class="col-md-4"> | ||||
<div class="panel panel-default"> | <div class="panel panel-default"> | ||||
<div class="panel-heading"> | <div class="panel-heading"> | ||||
<h3 class="panel-title">Priorités de résolution</h3> | <h3 class="panel-title">Priorités de résolution</h3> | ||||
</p> | </p> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | |||||
</div> | |||||
--> |
<?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> |
<?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> |
<?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> |
<?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> |
]); | ]); | ||||
?> | ?> | ||||
<?= $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"> | <div class="form-group"> | ||||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | <?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> |
<div class="user-update"> | <div class="user-update"> | ||||
<?= $this->render('_form', [ | <?= $this->render('_form', [ | ||||
'model' => $model, | 'model' => $model, | ||||
'pointsSaleArray' => $pointsSaleArray | |||||
'pointsSaleArray' => $pointsSaleArray, | |||||
'userGroupsArray' => $userGroupsArray, | |||||
]) ?> | ]) ?> | ||||
</div> | </div> |
float: right; | float: right; | ||||
} | } | ||||
/* line 5, ../sass/user/_form.scss */ | |||||
/* line 6, ../sass/user/_form.scss */ | |||||
.user-create #user-points_sale label, | .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; | font-weight: normal; | ||||
margin-right: 10px; | margin-right: 10px; | ||||
cursor: pointer; | cursor: pointer; | ||||
padding: 5px 10px; | padding: 5px 10px; | ||||
border: solid 1px #e0e0e0; | 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-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; | display: inline; | ||||
width: 200px; | width: 200px; | ||||
margin-left: 15px; | margin-left: 15px; |
.user-create, | .user-create, | ||||
.user-update { | .user-update { | ||||
#user-points_sale { | |||||
#user-points_sale, | |||||
#user-user_groups { | |||||
label { | label { | ||||
font-weight: normal ; | font-weight: normal ; | ||||
margin-right: 10px ; | margin-right: 10px ; |
foreach ($ordersArray as $order) { | foreach ($ordersArray as $order) { | ||||
$order->init(); | $order->init(); | ||||
if ($withTax) { | if ($withTax) { | ||||
$amount += $order->getAmountWithTax($type); | $amount += $order->getAmountWithTax($type); | ||||
} else { | |||||
} | |||||
else { | |||||
$amount += $order->getAmount($type); | $amount += $order->getAmount($type); | ||||
} | } | ||||
} | } |
{ | { | ||||
var $amount = 0; | var $amount = 0; | ||||
var $amount_with_tax = 0; | var $amount_with_tax = 0; | ||||
var $invoice_amount = 0; | |||||
var $invoice_amount_with_tax = 0; | |||||
var $paid_amount = 0; | var $paid_amount = 0; | ||||
var $weight = 0; | var $weight = 0; | ||||
const PAYMENT_UNPAID = 'unpaid'; | const PAYMENT_UNPAID = 'unpaid'; | ||||
const PAYMENT_SURPLUS = 'surplus'; | const PAYMENT_SURPLUS = 'surplus'; | ||||
const INVOICE_AMOUNT_TOTAL = 'invoice-total' ; | |||||
const AMOUNT_TOTAL = 'total'; | const AMOUNT_TOTAL = 'total'; | ||||
const AMOUNT_PAID = 'paid'; | const AMOUNT_PAID = 'paid'; | ||||
const AMOUNT_REMAINING = 'remaining'; | const AMOUNT_REMAINING = 'remaining'; | ||||
{ | { | ||||
$this->amount = 0; | $this->amount = 0; | ||||
$this->amount_with_tax = 0; | $this->amount_with_tax = 0; | ||||
$this->invoice_amount = 0; | |||||
$this->invoice_amount_with_tax = 0; | |||||
$this->weight = 0; | $this->weight = 0; | ||||
if (isset($this->productOrder)) { | if (isset($this->productOrder)) { | ||||
foreach ($this->productOrder as $productOrder) { | foreach ($this->productOrder as $productOrder) { | ||||
$this->amount += $productOrder->price * $productOrder->quantity; | $this->amount += $productOrder->price * $productOrder->quantity; | ||||
$this->amount_with_tax += Price::getPriceWithTax($productOrder->price, $productOrder->taxRate->value) * $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 ($productOrder->unit == 'piece') { | ||||
if (isset($productOrder->product)) { | if (isset($productOrder->product)) { | ||||
$this->weight += ($productOrder->quantity * $productOrder->product->weight) / 1000; | $this->weight += ($productOrder->quantity * $productOrder->product->weight) / 1000; | ||||
public function getAmount($type = self::AMOUNT_TOTAL, $format = false) | 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) | 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) | protected function _getAmountGeneric($type, $amountOrder, $format) | ||||
{ | { | ||||
switch ($type) { | switch ($type) { | ||||
case self::AMOUNT_TOTAL : | case self::AMOUNT_TOTAL : | ||||
case self::INVOICE_AMOUNT_TOTAL : | |||||
$amount = $amountOrder; | $amount = $amountOrder; | ||||
break; | break; | ||||
case self::AMOUNT_PAID : | case self::AMOUNT_PAID : |
'active' => 'Actif', | 'active' => 'Actif', | ||||
'photo' => 'Photo', | 'photo' => 'Photo', | ||||
'price' => 'Prix (€) TTC', | 'price' => 'Prix (€) TTC', | ||||
'price' => 'Prix (€) TTC', | |||||
'weight' => 'Poids', | 'weight' => 'Poids', | ||||
'recipe' => 'Recette', | 'recipe' => 'Recette', | ||||
'monday' => 'Lundi', | 'monday' => 'Lundi', | ||||
'user' => false, | 'user' => false, | ||||
'pointsale' => false, | 'pointsale' => false, | ||||
'user_pointsale' => false, | 'user_pointsale' => false, | ||||
'usergroup' => false, | |||||
] ; | ] ; | ||||
foreach($specificPrices as $specificPrice) { | foreach($specificPrices as $specificPrice) { | ||||
if($user | 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) { | && $specificPrice->id_user == $user->id) { | ||||
$specificPricesArray['user'] = $specificPrice->price ; | $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 | 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) { | && $specificPrice->id_point_sale == $pointSale->id) { | ||||
$specificPricesArray['pointsale'] = $specificPrice->price ; | $specificPricesArray['pointsale'] = $specificPrice->price ; | ||||
} | } | ||||
if($pointSale && $user | 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 ; | $specificPricesArray['user_pointsale'] = $specificPrice->price ; | ||||
} | } | ||||
elseif($specificPricesArray['user']) { | elseif($specificPricesArray['user']) { | ||||
return $specificPricesArray['user'] ; | return $specificPricesArray['user'] ; | ||||
} | } | ||||
elseif($specificPricesArray['usergroup']) { | |||||
return $specificPricesArray['usergroup'] ; | |||||
} | |||||
elseif($specificPricesArray['pointsale']) { | elseif($specificPricesArray['pointsale']) { | ||||
return $specificPricesArray['pointsale'] ; | return $specificPricesArray['pointsale'] ; | ||||
} | } |
[['id_order', 'id_product', 'id_tax_rate'], 'integer'], | [['id_order', 'id_product', 'id_tax_rate'], 'integer'], | ||||
[['unit'], 'string', 'max' => 255], | [['unit'], 'string', 'max' => 255], | ||||
[['quantity'], 'number', 'min' => 0], | [['quantity'], 'number', 'min' => 0], | ||||
[['price', 'invoice_price'], 'double'], | |||||
[['description'], 'safe'] | [['description'], 'safe'] | ||||
]; | ]; | ||||
} | } | ||||
'quantity' => 'Quantité', | 'quantity' => 'Quantité', | ||||
'unit' => 'Unité', | 'unit' => 'Unité', | ||||
'id_tax_rate' => 'Taxe', | 'id_tax_rate' => 'Taxe', | ||||
'description' => 'Description' | |||||
'description' => 'Description', | |||||
'price' => 'Prix', | |||||
'invoice_price' => 'Prix facturé', | |||||
]; | ]; | ||||
} | } | ||||
return $this->price ; | return $this->price ; | ||||
} | } | ||||
public function getInvoicePrice() { | |||||
return $this->invoice_price ; | |||||
} | |||||
/** | /** | ||||
* Retourne le prix du produit avec taxe | * Retourne le prix du produit avec taxe | ||||
*/ | */ | ||||
public function getPriceWithTax() | public function getPriceWithTax() | ||||
{ | { | ||||
return Price::getPriceWithTax($this->price, $this->taxRate->value); | return Price::getPriceWithTax($this->price, $this->taxRate->value); | ||||
} | } | ||||
{ | { | ||||
return [ | return [ | ||||
['id_user', 'required', 'when' => function($model) { | ['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) { | ['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', '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'], | [['price'], 'double'], | ||||
]; | ]; | ||||
} | } | ||||
'id_product' => 'Produit', | 'id_product' => 'Produit', | ||||
'id_user' => 'Utilisateur', | 'id_user' => 'Utilisateur', | ||||
'id_point_sale' => 'Point de vente', | 'id_point_sale' => 'Point de vente', | ||||
'id_user_group' => "Groupe d'utilisateur", | |||||
'price' => 'Prix (HT)', | 'price' => 'Prix (HT)', | ||||
'percent' => 'Pourcentage', | 'percent' => 'Pourcentage', | ||||
]; | ]; | ||||
); | ); | ||||
} | } | ||||
public function getUserGroup() | |||||
{ | |||||
return $this->hasOne( | |||||
UserGroup::className(), | |||||
['id' => 'id_user_group'] | |||||
); | |||||
} | |||||
public function getUser() | public function getUser() | ||||
{ | { | ||||
return $this->hasOne( | return $this->hasOne( |
var $password_new; | var $password_new; | ||||
var $password_new_confirm; | var $password_new_confirm; | ||||
var $points_sale = []; | var $points_sale = []; | ||||
var $user_groups = []; | |||||
var $one_name ; | var $one_name ; | ||||
var $product_price_percent ; | var $product_price_percent ; | ||||
['password_old', 'verifyPasswordOld'], | ['password_old', 'verifyPasswordOld'], | ||||
['password_new', 'verifyPasswordNew'], | ['password_new', 'verifyPasswordNew'], | ||||
['password_new_confirm', 'verifyPasswordNewConfirm'], | ['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'], | |||||
]; | ]; | ||||
} | } | ||||
'type' => 'Type', | 'type' => 'Type', | ||||
'name_legal_person' => 'Libellé', | 'name_legal_person' => 'Libellé', | ||||
'is_main_contact' => 'Contact principal', | 'is_main_contact' => 'Contact principal', | ||||
'product_price_percent' => 'Prix produits : pourcentage' | |||||
'product_price_percent' => 'Prix produits : pourcentage', | |||||
'user_groups' => "Groupes d'utilisateurs" | |||||
]; | ]; | ||||
} | } | ||||
{ | { | ||||
return [ | return [ | ||||
'with' => [], | 'with' => [], | ||||
'join_with' => ['userProducer'], | |||||
'join_with' => ['userProducer', 'userUserGroup'], | |||||
'orderby' => 'user.name ASC, user.lastname ASC', | 'orderby' => 'user.name ASC, user.lastname ASC', | ||||
'attribute_id_producer' => '' | 'attribute_id_producer' => '' | ||||
]; | ]; | ||||
return $this->hasMany(UserProducer::className(), ['id_user' => 'id']); | return $this->hasMany(UserProducer::className(), ['id_user' => 'id']); | ||||
} | } | ||||
public function getUserUserGroup() | |||||
{ | |||||
return $this->hasMany(UserUserGroup::className(), ['id_user' => 'id']); | |||||
} | |||||
public function getOrder() | public function getOrder() | ||||
{ | { | ||||
return $this->hasMany(Order::className(), ['id_user' => 'id']); | return $this->hasMany(Order::className(), ['id_user' => 'id']); | ||||
return User::getCurrentStatus() == USER::STATUS_ADMIN || User::getCurrentStatus() == USER::STATUS_PRODUCER; | 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 ; | |||||
} | |||||
} | } |
<?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 ; | |||||
} | |||||
} |
<?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; | |||||
} | |||||
} |
<?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' => '' | |||||
] ; | |||||
} | |||||
} |
<?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'); | |||||
} | |||||
} |
<?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'); | |||||
} | |||||
} |
<?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') ; | |||||
} | |||||
} |