Kaynağa Gözat

Merge branch 'develop'

master
Guillaume Bourgeois 11 ay önce
ebeveyn
işleme
8161e3c140
69 değiştirilmiş dosya ile 1893 ekleme ve 833 silme
  1. +2
    -1
      backend/controllers/DashboardController.php
  2. +4
    -2
      backend/controllers/DistributionController.php
  3. +106
    -66
      backend/views/dashboard/index.php
  4. +7
    -1
      backend/views/distribution/index.php
  5. +10
    -4
      backend/views/layouts/left.php
  6. +171
    -63
      backend/views/point-sale/_form.php
  7. +13
    -2
      backend/views/producer/update.php
  8. +14
    -5
      backend/views/product-category/_form.php
  9. +172
    -108
      backend/views/product/_form.php
  10. +0
    -1
      backend/views/product/index.php
  11. +1
    -1
      backend/views/product/update/_nav.php
  12. +29
    -22
      backend/views/product/update/prices/_form.php
  13. +6
    -12
      backend/views/product/update/prices/list.php
  14. +1
    -1
      backend/views/setting-admin/index.php
  15. +109
    -59
      backend/views/subscription/_form.php
  16. +20
    -3
      backend/views/support/index.php
  17. +18
    -10
      backend/views/user-group/_form.php
  18. +146
    -54
      backend/views/user/_form.php
  19. +0
    -9
      backend/views/user/_menu.php
  20. +209
    -61
      backend/web/css/screen.css
  21. +26
    -3
      backend/web/js/backend.js
  22. +2
    -1
      backend/web/js/vuejs/distribution-index.js
  23. +11
    -9
      backend/web/js/vuejs/document-form.js
  24. +62
    -0
      backend/web/sass/point_sale/_form.scss
  25. +53
    -7
      backend/web/sass/product/_form.scss
  26. +2
    -6
      backend/web/sass/screen.scss
  27. +5
    -7
      backend/web/sass/setting/_form.scss
  28. +3
    -0
      backend/web/sass/subscription/_form.scss
  29. +19
    -0
      backend/web/sass/user/_form.scss
  30. +6
    -2
      common/components/AbstractApi.php
  31. +11
    -0
      common/components/ForumFlarumClient.php
  32. +11
    -6
      common/config/main.php
  33. +1
    -1
      common/config/params.php
  34. +1
    -1
      common/logic/Distribution/Distribution/Export/DistributionReportPdfGenerator.php
  35. +8
    -2
      common/logic/Order/Order/Repository/OrderRepository.php
  36. +3
    -3
      common/logic/PointSale/PointSale/Model/PointSale.php
  37. +23
    -2
      common/logic/PointSale/PointSale/Service/PointSaleSolver.php
  38. +8
    -0
      common/logic/PointSale/UserPointSale/Module/UserPointSaleModule.php
  39. +12
    -3
      common/logic/PointSale/UserPointSale/Repository/UserPointSaleRepository.php
  40. +10
    -0
      common/logic/PointSale/UserPointSale/Service/UserPointSaleSolver.php
  41. +5
    -0
      common/logic/Producer/Producer/Module/ProducerModule.php
  42. +8
    -0
      common/logic/Producer/Producer/Repository/ProducerRepository.php
  43. +23
    -0
      common/logic/Producer/Producer/Service/ProducerManager.php
  44. +9
    -9
      common/logic/Product/Product/Model/Product.php
  45. +25
    -0
      common/logic/Product/Product/Service/ProductSolver.php
  46. +8
    -2
      common/logic/Setting/SettingDetails/Admin/AdminSettingDefinition.php
  47. +17
    -0
      common/logic/Setting/SettingDetails/Admin/General/ForumFlarumUrlAdminSetting.php
  48. +17
    -0
      common/logic/Setting/SettingDetails/Admin/General/MaximumNumberProducersAdminSetting.php
  49. +17
    -0
      common/logic/Setting/SettingDetails/Admin/General/SupportDeveloperOnlineAdminSetting.php
  50. +20
    -17
      common/logic/User/User/Service/UserSolver.php
  51. +1
    -1
      common/versions/23.12.C.php
  52. +25
    -0
      common/versions/24.1.A.php
  53. +29
    -0
      common/versions/24.1.B.php
  54. +22
    -0
      console/commands/ProducerDescriptionNl2brController.php
  55. +5
    -2
      frontend/controllers/SiteController.php
  56. +6
    -0
      frontend/views/layouts/main.php
  57. +20
    -0
      frontend/views/site/_button_producer_signup.php
  58. +7
    -11
      frontend/views/site/index.php
  59. +4
    -6
      frontend/views/site/service.php
  60. +5
    -3
      frontend/views/site/signup.php
  61. +161
    -157
      frontend/web/css/screen.css
  62. +7
    -7
      frontend/web/sass/_responsive.scss
  63. +10
    -1
      frontend/web/sass/screen.scss
  64. +3
    -1
      producer/controllers/OrderController.php
  65. +11
    -1
      producer/views/order/order.php
  66. +1
    -1
      producer/views/site/index.php
  67. +88
    -74
      producer/web/css/screen.css
  68. +8
    -1
      producer/web/sass/order/_order.scss
  69. +16
    -1
      producer/web/sass/site/_index.scss

+ 2
- 1
backend/controllers/DashboardController.php Dosyayı Görüntüle

'pointsSaleCount' => $this->getPointSaleModule()->getRepository()->countPointSales(), 'pointsSaleCount' => $this->getPointSaleModule()->getRepository()->countPointSales(),
'distributionsArray' => $this->getDistributionModule()->getRepository()->findDistributionsDashboard(), 'distributionsArray' => $this->getDistributionModule()->getRepository()->findDistributionsDashboard(),
'ordersArray' => $this->getOrderModule()->getRepository()->findOrdersDashboard(), 'ordersArray' => $this->getOrderModule()->getRepository()->findOrdersDashboard(),
'subscriptionsLatestAddedArray' => $this->getSubscriptionModule()->getRepository()->findSubscriptionsLatestAdded()
'subscriptionsLatestAddedArray' => $this->getSubscriptionModule()->getRepository()->findSubscriptionsLatestAdded(),
'forumDiscussionsArray' => \Yii::$app->forumFlarumClient->getLastDiscussions()
]); ]);
} }
} }

+ 4
- 2
backend/controllers/DistributionController.php Dosyayı Görüntüle

return $missingSubscriptionsArray; return $missingSubscriptionsArray;
} }


public function actionAjaxPointSaleFavorite($idUser)
public function actionAjaxPointSaleFavorite($idUser, $idDistribution)
{ {
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$userModule = $this->getUserModule(); $userModule = $this->getUserModule();
$orderModule = $this->getOrderModule(); $orderModule = $this->getOrderModule();
$distributionModule = $this->getDistributionModule();


$user = $userModule->findOneUserById($idUser); $user = $userModule->findOneUserById($idUser);
$distribution = $distributionModule->getRepository()->findOneDistributionById($idDistribution);
$idFavoritePointSale = 0; $idFavoritePointSale = 0;


if($user) { if($user) {
$favoritePointSale = $orderModule->getUserFavoritePointSale($user);
$favoritePointSale = $orderModule->getUserFavoritePointSale($user, $distribution);
if ($favoritePointSale) { if ($favoritePointSale) {
$idFavoritePointSale = $favoritePointSale->id; $idFavoritePointSale = $favoritePointSale->id;
} }

+ 106
- 66
backend/views/dashboard/index.php Dosyayı Görüntüle

use common\logic\Order\Order\Model\Order; use common\logic\Order\Order\Model\Order;
use common\logic\Order\Order\Module\OrderModule; use common\logic\Order\Order\Module\OrderModule;
use common\logic\Producer\Producer\Module\ProducerModule; use common\logic\Producer\Producer\Module\ProducerModule;
use common\logic\Setting\SettingModule;
use common\logic\Subscription\Subscription\Module\SubscriptionModule; use common\logic\Subscription\Subscription\Module\SubscriptionModule;
use common\logic\User\User\Module\UserModule; use common\logic\User\User\Module\UserModule;
use yii\helpers\Html ; use yii\helpers\Html ;
$orderModule = OrderModule::getInstance(); $orderModule = OrderModule::getInstance();
$subscriptionModule = SubscriptionModule::getInstance(); $subscriptionModule = SubscriptionModule::getInstance();
$producerModule = ProducerModule::getInstance(); $producerModule = ProducerModule::getInstance();
$settingModule = SettingModule::getInstance();
$adminSettingBag = $settingModule->getAdminSettingBag();


$this->setTitle('Tableau de bord'); $this->setTitle('Tableau de bord');


?> ?>
<div class="dashboard-index"> <div class="dashboard-index">


<?php if(Yii::$app->request->get('error_products_points_sale')): ?>
<div class="alert alert-warning">
Vous devez ajouter <?php if(!$productsCount): ?> des produits<?php endif; ?>
<?php if(!$productsCount && !$pointsSaleCount): ?> et<?php endif; ?>
<?php if(!$pointsSaleCount): ?> un ou des points de vente <?php endif; ?>
avant d'effectuer cette action.
</div>
<?php endif; ?>
<div <?php if($adminSettingBag->get('forumFlarumUrl')): ?>class="col-md-8"<?php endif; ?>>
<?php if(Yii::$app->request->get('error_products_points_sale')): ?>
<div class="alert alert-warning">
Vous devez ajouter <?php if(!$productsCount): ?> des produits<?php endif; ?>
<?php if(!$productsCount && !$pointsSaleCount): ?> et<?php endif; ?>
<?php if(!$pointsSaleCount): ?> un ou des points de vente <?php endif; ?>
avant d'effectuer cette action.
</div>
<?php endif; ?>


<?php if(!$productsCount): ?>
<div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-clone"></i></span>
<div class="info-box-content">
<span class="info-box-text"><br /><?= Html::a('Ajouter des produits', ['product/create'], ['class' => 'btn btn-default']); ?></span>
<?php if(!$productsCount): ?>
<div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-clone"></i></span>
<div class="info-box-content">
<span class="info-box-text"><br /><?= Html::a('Ajouter des produits', ['product/create'], ['class' => 'btn btn-default']); ?></span>
</div>
</div> </div>
</div>
<?php endif; ?>
<?php endif; ?>


<?php if(!$pointsSaleCount): ?>
<div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-map-marker"></i></span>
<div class="info-box-content">
<span class="info-box-text"><br /><?= Html::a('Ajouter des points de vente', ['point-sale/create'], ['class' => 'btn btn-default']); ?></span>
<?php if(!$pointsSaleCount): ?>
<div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-map-marker"></i></span>
<div class="info-box-content">
<span class="info-box-text"><br /><?= Html::a('Ajouter des points de vente', ['point-sale/create'], ['class' => 'btn btn-default']); ?></span>
</div>
</div> </div>
</div>
<?php endif; ?>
<?php endif; ?>


<?php if($productsCount && $pointsSaleCount && !count($distributionsArray)): ?>
<div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-calendar"></i></span>
<div class="info-box-content">
<span class="info-box-text"><br /><?= Html::a('Ajouter des jours de distribution', ['distribution/index'], ['class' => 'btn btn-default']); ?></span>
<?php if($productsCount && $pointsSaleCount && !count($distributionsArray)): ?>
<div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-calendar"></i></span>
<div class="info-box-content">
<span class="info-box-text"><br /><?= Html::a('Ajouter des jours de distribution', ['distribution/index'], ['class' => 'btn btn-default']); ?></span>
</div>
</div>
<?php endif; ?>

<?php if(count($distributionsArray)): ?>
<div id="distributions">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
Prochaines distributions
</h3>
</div>
<div class="panel-body">
<!-- distributions -->
<?php foreach($distributionsArray as $distribution): ?>
<div class="col-md-6 col-sm-12 col-xs-12">
<div class="info-box">
<span class="info-box-icon bg-green date">
<span class="day"><?= strftime('%A', strtotime($distribution->date)) ?></span>
<span class="num"><?= date('d', strtotime($distribution->date)) ?></span>
<span class="month"><?= strftime('%B', strtotime($distribution->date)) ?></span>
</span>
<div class="info-box-content">
<span class="info-box-text">
<?php if(count($distribution->order)): ?>
<strong><?= count($distribution->order); ?></strong> COMMANDES
<?php else: ?>
AUCUNE COMMANDE
<?php endif; ?>
</span>
<span class="info-box-number"></span>
<div class="buttons">
<?= Html::a('<span class="fa fa-eye"></span>', ['distribution/index', 'date' => $distribution->date], ['class' => 'btn btn-default']); ?>
<?php if(count($distribution->order)): ?>
<?php
$exportsEnabledArray = $distributionModule->getExportManager()->getAllEnabled();
foreach($exportsEnabledArray as $name => $export) {
echo Html::a('<span class="fa fa-download"></span>', ['distribution/export', 'name' => $name, 'date' => $distribution->date], ['class' => 'btn btn-default', 'title' => $export[0]]).' ';
}
?>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div> </div>
</div> </div>
<?php endif; ?>
<?php endif; ?>
</div>


<?php if(count($distributionsArray)): ?>
<div id="distributions">
<?php if($adminSettingBag->get('forumFlarumUrl')): ?>
<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">
Prochaines distributions
</h3>
<h3 class="panel-title">
Derniers sujets sur le forum
</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<!-- distributions -->
<?php foreach($distributionsArray as $distribution): ?>
<div class="col-md-4 col-sm-12 col-xs-12">
<div class="info-box">
<span class="info-box-icon bg-green date">
<span class="day"><?= strftime('%A', strtotime($distribution->date)) ?></span>
<span class="num"><?= date('d', strtotime($distribution->date)) ?></span>
<span class="month"><?= strftime('%B', strtotime($distribution->date)) ?></span>
</span>
<div class="info-box-content">
<span class="info-box-text">
<?php if(count($distribution->order)): ?>
<strong><?= count($distribution->order); ?></strong> COMMANDES
<?php else: ?>
AUCUNE COMMANDE
<?php endif; ?>
</span>
<span class="info-box-number"></span>
<div class="buttons">
<?= Html::a('<span class="fa fa-eye"></span>', ['distribution/index', 'date' => $distribution->date], ['class' => 'btn btn-default']); ?>
<?php if(count($distribution->order)): ?>
<?php
$exportsEnabledArray = $distributionModule->getExportManager()->getAllEnabled();
foreach($exportsEnabledArray as $name => $export) {
echo Html::a('<span class="fa fa-download"></span>', ['distribution/export', 'name' => $name, 'date' => $distribution->date], ['class' => 'btn btn-default', 'title' => $export[0]]).' ';
}
?>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
<?php //echo print_r($forumDiscussionsArray); ?>
<?php if($forumDiscussionsArray && count($forumDiscussionsArray['data'])): ?>
<table class="table">
<?php $forumDiscussionsLimitedArray = array_slice($forumDiscussionsArray['data'], 0, min(3, count($forumDiscussionsArray['data']))); ?>
<?php foreach($forumDiscussionsLimitedArray as $forumDiscussion): ?>
<tr>
<?php //echo print_r($forumDiscussion); ?>
<td><?= $forumDiscussion['attributes']['title']; ?></td>
<td><?= date('d/m à H:i', strtotime($forumDiscussion['attributes']['lastPostedAt'])); ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php else: ?>
<p>Aucun sujet sur le forum.</p>
<?php endif; ?>
<p>
<a href="<?= $settingModule->getAdminSettingBag()->get('forumFlarumUrl'); ?>" class="btn btn-default">
<span class="fa fa-comments"></span>
Consulter le forum
</a>
</p>
</div> </div>
</div> </div>
</div> </div>

+ 7
- 1
backend/views/distribution/index.php Dosyayı Görüntüle

v-if="showModalFormOrderCreate" v-if="showModalFormOrderCreate"
create="1" create="1"
:date="date" :date="date"
:distribution="distribution"
:order="orderCreate" :order="orderCreate"
:points-sale="pointsSale" :points-sale="pointsSale"
:id-active-point-sale="idActivePointSale" :id-active-point-sale="idActivePointSale"
<order-form <order-form
v-if="showModalFormOrderUpdate && idOrderUpdate == order.id" v-if="showModalFormOrderUpdate && idOrderUpdate == order.id"
create="0" create="0"
:distribution="distribution"
:date="date" :date="date"
:date-format="dateFormat" :date-format="dateFormat"
:points-sale="pointsSale" :points-sale="pointsSale"
<a v-if="producer && producer.credit && order.id_user > 0 && user.id_user == order.id_user" class="btn btn-xs btn-primary btn-credit" :href="baseUrl+'/user/credit?id='+user.id_user" v-for="user in users">{{ parseFloat(user.credit).toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+'&nbsp;€' }}</a> <a v-if="producer && producer.credit && order.id_user > 0 && user.id_user == order.id_user" class="btn btn-xs btn-primary btn-credit" :href="baseUrl+'/user/credit?id='+user.id_user" v-for="user in users">{{ parseFloat(user.credit).toFixed(2).replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")+'&nbsp;€' }}</a>
<label class="control-label" for="select-id-user"> <label class="control-label" for="select-id-user">
Utilisateur Utilisateur
<a v-if="!order.id_user || order.id_user == 0" class="btn btn-default btn-xs" href="<?= Yii::$app->urlManager->createUrl('user/create'); ?>">
<span class="glyphicon glyphicon-plus"></span>
Créer un utilisateur
</a>
</label> </label>
<select class="form-control select2-order-form" v-model="order.id_user" @change="userChange"> <select class="form-control select2-order-form" v-model="order.id_user" @change="userChange">
<option value="0">--</option> <option value="0">--</option>
<option v-for="user in users" :value="user.id_user"> <option v-for="user in users" :value="user.id_user">
<template v-if="user.name_legal_person && user.name_legal_person.length">
<template v-if="user.type == 'legal-person' && user.name_legal_person && user.name_legal_person.length">
{{ user.name_legal_person }} (personne morale) {{ user.name_legal_person }} (personne morale)
</template> </template>
<template v-else> <template v-else>

+ 10
- 4
backend/views/layouts/left.php Dosyayı Görüntüle

$userProducerModule = $this->getUserProducerModule(); $userProducerModule = $this->getUserProducerModule();
$ticketModule = $this->getTicketModule(); $ticketModule = $this->getTicketModule();
$featureChecker = $this->getFeatureModule()->getChecker(); $featureChecker = $this->getFeatureModule()->getChecker();
$adminSettingBag = $this->getSettingModule()->getAdminSettingBag();


$producer = GlobalParam::getCurrentProducer(); $producer = GlobalParam::getCurrentProducer();
$userCurrent = GlobalParam::getCurrentUser(); $userCurrent = GlobalParam::getCurrentUser();
$countTicketsProducerUnreadLabel = ''; $countTicketsProducerUnreadLabel = '';
$countTicketsProducerUnread = $ticketModule->countTicketsUnreadByUser($this->getUserCurrent()); $countTicketsProducerUnread = $ticketModule->countTicketsUnreadByUser($this->getUserCurrent());
if($countTicketsProducerUnread && !$isUserCurrentGrantedAsAdministrator) { if($countTicketsProducerUnread && !$isUserCurrentGrantedAsAdministrator) {
$countTicketsProducerUnreadLabel = '<span class="pull-right-container"><small class="label pull-right bg-green">'.$countTicketsProducerUnread.'</small></span>';
$countTicketsProducerUnreadLabel = '<small class="label pull-right bg-blue">'.$countTicketsProducerUnread.'</small>';
}

$developerOnlineLabel = '';
if($adminSettingBag->get('supportDeveloperOnline')) {
$developerOnlineLabel = '<small class="label pull-right bg-green"><i class="fa fa-phone"></i></small>';
} }


$countTicketsAdminUnreadLabel = ''; $countTicketsAdminUnreadLabel = '';
'items' => [ 'items' => [
['label' => "Besoin d'aide ?", 'options' => ['class' => 'header'], 'visible' => $isUserCurrentGrantedAsProducer], ['label' => "Besoin d'aide ?", 'options' => ['class' => 'header'], 'visible' => $isUserCurrentGrantedAsProducer],
[ [
'label' => 'Support',
'label' => 'Support',
'icon' => 'comments', 'icon' => 'comments',
'url' => ['support/index'], 'url' => ['support/index'],
'visible' => $isUserCurrentGrantedAsProducer, 'visible' => $isUserCurrentGrantedAsProducer,
'template' => '<a href="{url}">{icon} {label}' . $countTicketsProducerUnreadLabel . '</a>'
'template' => '<a href="{url}">{icon} {label} <span class="pull-right-container">' . $developerOnlineLabel . $countTicketsProducerUnreadLabel . '</span></a>'
], ],
['label' => $producer->name, 'options' => ['class' => 'header'], 'visible' => $isUserCurrentGrantedAsProducer], ['label' => $producer->name, 'options' => ['class' => 'header'], 'visible' => $isUserCurrentGrantedAsProducer],
['label' => 'Tableau de bord', 'icon' => 'dashboard', 'url' => ['/dashboard/index'], 'visible' => $isUserCurrentGrantedAsProducer], ['label' => 'Tableau de bord', 'icon' => 'dashboard', 'url' => ['/dashboard/index'], 'visible' => $isUserCurrentGrantedAsProducer],
'icon' => 'clone', 'icon' => 'clone',
'url' => ['/product/index'], 'url' => ['/product/index'],
'visible' => $isUserCurrentGrantedAsProducer, 'visible' => $isUserCurrentGrantedAsProducer,
'active' => Yii::$app->controller->id == 'product',
'active' => Yii::$app->controller->id == 'product' || Yii::$app->controller->id == 'product-category',
'items' => [ 'items' => [
['label' => 'Liste', 'icon' => 'th-list', 'url' => ['/product/index'], 'visible' => $isUserCurrentGrantedAsProducer], ['label' => 'Liste', 'icon' => 'th-list', 'url' => ['/product/index'], 'visible' => $isUserCurrentGrantedAsProducer],
['label' => 'Catégories', 'icon' => 'book', 'url' => ['/product-category/index'], 'visible' => $isUserCurrentGrantedAsProducer], ['label' => 'Catégories', 'icon' => 'book', 'url' => ['/product-category/index'], 'visible' => $isUserCurrentGrantedAsProducer],

+ 171
- 63
backend/views/point-sale/_form.php Dosyayı Görüntüle

use common\logic\Distribution\Distribution\Module\DistributionModule; use common\logic\Distribution\Distribution\Module\DistributionModule;
use common\logic\Distribution\Distribution\Service\ExportManager; use common\logic\Distribution\Distribution\Service\ExportManager;
use common\logic\Producer\Producer\Module\ProducerModule; use common\logic\Producer\Producer\Module\ProducerModule;
use lo\widgets\Toggle;
use yii\helpers\Html; use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper; use yii\helpers\ArrayHelper;


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


<?php $form = ActiveForm::begin(); ?>
<?php $form = ActiveForm::begin([
'enableClientValidation' => false
]); ?>


<div class="col-md-8"> <div class="col-md-8">
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'locality')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'address')->textarea(['rows' => 6]) ?>
<?= $form->field($model, 'id_user', [
'template' => '{label} <a href="' . Yii::$app->urlManager->createUrl(['user/create']) . '" class="btn btn-xs btn-default">Nouvel utilisateur <span class="glyphicon glyphicon-plus"></span></a><div>{input}</div>{hint}',
])
->dropDownList($userModule->populateUserDropdownList(), ['class' => 'select2'])
->hint('Utilisé lors de la facturation'); ?>
<?php
$addHintCredit = '';
if (!$producerModule->getConfig('credit')):
$addHintCredit = '<br /><strong>Attention, le système de Crédit est désactivé au niveau des ' . Html::a('paramètres globaux', ['producer/update']) . '.</strong>';
endif;

echo $form->field($model, 'credit')
->checkbox()
->hint('Cochez cette case si le client peut régler ses commandes via son compte <strong>Crédit</strong> pour ce point de vente.'
. $addHintCredit);
?>

<?= $form->field($model, 'credit_functioning')
->dropDownList([
'' => 'Paramètres globaux (' . Producer::$creditFunctioningArray[$producerModule->getConfig('credit_functioning')] . ')',
Producer::CREDIT_FUNCTIONING_OPTIONAL => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_OPTIONAL],
Producer::CREDIT_FUNCTIONING_MANDATORY => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_MANDATORY],
Producer::CREDIT_FUNCTIONING_USER => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_USER],
], [])->hint(Producer::HINT_CREDIT_FUNCTIONING); ?>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-th-list"></i>
Général
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'locality')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'address')->textarea(['rows' => 4]) ?>
<?= $form->field($model, 'minimum_order_amount')->textInput() ?>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<span class="glyphicon glyphicon-piggy-bank"></span>
Crédit
</h3>
</div>
<div class="panel-body">
<div id="credit">
<?php
$addHintCredit = '';
if (!$producerModule->getConfig('credit')):
$addHintCredit = '<br /><strong>Attention, le système de Crédit est désactivé au niveau des ' . Html::a('paramètres globaux', ['producer/update']) . '.</strong>';
endif;

echo $form->field($model, 'credit')->widget(Toggle::class,
[
'options' => [
'data-id' => $model->id,
'data-on' => 'Oui',
'data-off' => 'Non',
],
]
)->hint('Activez cette option si vous souhaitez que vos clients puissent régler leurs commandes via leur compte <strong>Crédit</strong> pour ce point de vente.'
. $addHintCredit); ?>

<?= $form->field($model, 'credit_functioning')
->dropDownList([
'' => 'Paramètres globaux (' . Producer::$creditFunctioningArray[$producerModule->getConfig('credit_functioning')] . ')',
Producer::CREDIT_FUNCTIONING_OPTIONAL => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_OPTIONAL],
Producer::CREDIT_FUNCTIONING_MANDATORY => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_MANDATORY],
Producer::CREDIT_FUNCTIONING_USER => Producer::$creditFunctioningArray[Producer::CREDIT_FUNCTIONING_USER],
], [])->hint(Producer::HINT_CREDIT_FUNCTIONING); ?>
</div>
</div>
</div>



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


<?= $form->field($model, 'maximum_number_orders')->textInput() ?>
<?= $form->field($model, 'minimum_order_amount')->textInput() ?>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-truck"></i>
Livraison à domicile
</h3>
</div>
<div class="panel-body">
<div id="home-delivery">
<?= $form->field($model, 'is_home_delivery')->widget(Toggle::class,
[
'options' => [
'data-id' => $model->id,
'data-on' => 'Oui',
'data-off' => 'Non',
],
]
); ?>
</div>
</div>
</div>


<div id="delivery-days">
<h2>Jours de livraison</h2>
<?= $form->field($model, 'delivery_monday')->checkbox() ?>
<?= $form->field($model, 'delivery_tuesday')->checkbox() ?>
<?= $form->field($model, 'delivery_wednesday')->checkbox() ?>
<?= $form->field($model, 'delivery_thursday')->checkbox() ?>
<?= $form->field($model, 'delivery_friday')->checkbox() ?>
<?= $form->field($model, 'delivery_saturday')->checkbox() ?>
<?= $form->field($model, 'delivery_sunday')->checkbox() ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-th-large"></i>
Boîte à pain
</h3>
</div>
<div class="panel-body">
<div id="bread-box">
<?= $form->field($model, 'is_bread_box')->widget(Toggle::class,
[
'options' => [
'data-id' => $model->id,
'data-on' => 'Oui',
'data-off' => 'Non',
],
]
); ?>
<?= $form->field($model, 'bread_box_code')->textInput() ?>
<?= $form->field($model, 'maximum_number_orders')->textInput() ?>
</div>
</div>
</div> </div>
<div class="clr"></div>

<h2>Informations</h2>
<?= $form->field($model, 'infos_monday')->textarea(['rows' => 3]) ?>
<?= $form->field($model, 'infos_tuesday')->textarea(['rows' => 3]) ?>
<?= $form->field($model, 'infos_wednesday')->textarea(['rows' => 3]) ?>
<?= $form->field($model, 'infos_thursday')->textarea(['rows' => 3]) ?>
<?= $form->field($model, 'infos_friday')->textarea(['rows' => 3]) ?>
<?= $form->field($model, 'infos_saturday')->textarea(['rows' => 3]) ?>
<?= $form->field($model, 'infos_sunday')->textarea(['rows' => 3]) ?>

<h2>Livraison à domicile</h2>
<?= $form->field($model, 'is_home_delivery')->checkbox() ?>

<h2>Boîte à pain</h2>
<?= $form->field($model, 'is_bread_box')->checkbox() ?>
<?= $form->field($model, 'bread_box_code')->textInput() ?>
</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">Accès</h3>
<h3 class="panel-title">
<i class="fa fa-calendar"></i>
Jours de livraison
</h3>
</div>
<div class="panel-body">
<div id="days-distribution">
<?php $optionsTextareaInfos = ['rows' => 2, 'placeholder' => 'Informations'] ?>
<div class="day">
<?= $form->field($model, 'delivery_monday')->checkbox() ?>
<?= $form->field($model, 'infos_monday')->textarea($optionsTextareaInfos) ?>
</div>
<div class="day">
<?= $form->field($model, 'delivery_tuesday')->checkbox() ?>
<?= $form->field($model, 'infos_tuesday')->textarea($optionsTextareaInfos) ?>
</div>
<div class="day">
<?= $form->field($model, 'delivery_wednesday')->checkbox() ?>
<?= $form->field($model, 'infos_wednesday')->textarea($optionsTextareaInfos) ?>
</div>
<div class="day">
<?= $form->field($model, 'delivery_thursday')->checkbox() ?>
<?= $form->field($model, 'infos_thursday')->textarea($optionsTextareaInfos) ?>
</div>
<div class="day">
<?= $form->field($model, 'delivery_friday')->checkbox() ?>
<?= $form->field($model, 'infos_friday')->textarea($optionsTextareaInfos) ?>
</div>
<div class="day">
<?= $form->field($model, 'delivery_saturday')->checkbox() ?>
<?= $form->field($model, 'infos_saturday')->textarea($optionsTextareaInfos) ?>
</div>
<div class="day">
<?= $form->field($model, 'delivery_sunday')->checkbox() ?>
<?= $form->field($model, 'infos_sunday')->textarea($optionsTextareaInfos) ?>
</div>
</div>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-lock"></i>
Accès
</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<?= $form->field($model, 'code') <?= $form->field($model, 'code')


<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Génération des bons de livraison</h3>
<h3 class="panel-title">
<i class="fa fa-sticky-note-o"></i>
Facturation
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'id_user', [
'template' => '{label} <a href="' . Yii::$app->urlManager->createUrl(['user/create']) . '" class="btn btn-xs btn-default">Nouvel utilisateur <span class="glyphicon glyphicon-plus"></span></a><div>{input}</div>{hint}',
])
->dropDownList($userModule->populateUserDropdownList(), ['class' => 'select2'])
->hint('Utilisateur au nom duquel les factures de ce point de vente seront éditées'); ?>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-sticky-note-o"></i>
Génération des bons de livraison
</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<?= $form->field($model, 'button_generate_delivery_note_point_sale')->checkbox() ?>
<?= $form->field($model, 'button_generate_delivery_note_each_user')->checkbox() ?>
<div id="delivery-note-generation">
<?= $form->field($model, 'button_generate_delivery_note_point_sale')->checkbox() ?>
<?= $form->field($model, 'button_generate_delivery_note_each_user')->checkbox() ?>
</div>
</div> </div>
</div> </div>


<?= Html::a('Retour', ['point-sale/index'], ['class' => 'btn btn-default']) ?> <?= Html::a('Retour', ['point-sale/index'], ['class' => 'btn btn-default']) ?>
<?= Html::submitButton($model->isNewRecord ? 'Créer' : 'Modifier', ['class' => 'btn btn-primary']) ?> <?= Html::submitButton($model->isNewRecord ? 'Créer' : 'Modifier', ['class' => 'btn btn-primary']) ?>
</div> </div>

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

</div> </div>

+ 13
- 2
backend/views/producer/update.php Dosyayı Görüntüle

<h4>Général</h4> <h4>Général</h4>
<?= $form->field($model, 'name') ?> <?= $form->field($model, 'name') ?>
<?= $form->field($model, 'type') ?> <?= $form->field($model, 'type') ?>
<?= $form->field($model, 'description')
<?php /*$form->field($model, 'description')
->textarea(['rows' => 4]) ->textarea(['rows' => 4])
->hint('Affiché sur la page d\'accueil') ?>
->hint('Affiché sur la page d\'accueil')*/ ?>

<?= $form->field($model, 'description')->widget(letyii\tinymce\Tinymce::class, [
'options' => [
'id' => 'testid',
],
'configs' => [ // Read more: https://www.tiny.cloud/docs/tinymce/6/full-featured-open-source-demo/
//'plugins' => 'preview importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons accordion' ,
'plugins' => 'preview searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link lists wordcount help' ,
]
])->hint('Affiché sur la page d\'accueil') ; ?>

<?= $form->field($model, 'address') <?= $form->field($model, 'address')
->textarea(['rows' => 4]) ?> ->textarea(['rows' => 4]) ?>
<?= $form->field($model, 'postcode') ?> <?= $form->field($model, 'postcode') ?>

+ 14
- 5
backend/views/product-category/_form.php Dosyayı Görüntüle



<?php $form = ActiveForm::begin(); ?> <?php $form = ActiveForm::begin(); ?>
<div class="col-md-8"> <div class="col-md-8">
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-th-list"></i>
Général
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
</div>
</div>
</div> </div>
<div class="clr"></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 class="form-group form-actions">
<?= Html::a('Retour', ['product-category/index'], ['class' => 'btn btn-default']) ?>
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => 'btn btn-primary']) ?>
</div> </div>

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

</div> </div>

+ 172
- 108
backend/views/product/_form.php Dosyayı Görüntüle

<?php <?php


use common\helpers\Image; use common\helpers\Image;
use lo\widgets\Toggle;
use yii\helpers\Html; use yii\helpers\Html;
use yii\bootstrap\ActiveForm; use yii\bootstrap\ActiveForm;
use yii\helpers\ArrayHelper; use yii\helpers\ArrayHelper;
use common\logic\Product\Product\Model\Product; use common\logic\Product\Product\Model\Product;
use common\logic\PointSale\PointSale\Model\PointSale; use common\logic\PointSale\PointSale\Model\PointSale;


$producerModule = $this->getProducerModule();
$productCategoryModule = $this->getProductCategoryModule(); $productCategoryModule = $this->getProductCategoryModule();
$taxRateModule = $this->getTaxRateModule(); $taxRateModule = $this->getTaxRateModule();




<div> <div>
<div class="col-md-8"> <div class="col-md-8">
<?= $form->field($model, 'status')->radioList([1 => 'Oui', 0 => 'Non']) ?>
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'reference')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'id_product_category')->dropDownList($productCategoryModule->populateProductCategoriesDropdownList()); ?>
<?= $form->field($model, 'description')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'recipe')->textarea()->label('Description longue') ?>

<?= $form->field($model, 'unit')
->dropDownList(ArrayHelper::map(Product::$unitsArray, 'unit', 'wording'))
->label('Unité (pièce, poids ou volume)'); ?>


<?php

//Récupère la tva par défaut du producteur courant
$producer = \common\helpers\GlobalParam::getCurrentProducer();
$taxRateDefault = $producer->taxRate;

$taxRateNamesArray = array_merge(array(0 => 'Tva par défaut'), ArrayHelper::map($taxRateModule->findTaxRates(), 'id', function ($model) {
return $model->name;
}));
$taxRateValuesArray = array_merge(array(0 => $taxRateDefault->value), ArrayHelper::map($taxRateModule->findTaxRates(), 'id', function ($model) {
return $model->value;
}));
foreach ($taxRateValuesArray as $key => $taxRateValue) {
$taxRateValuesArrayFormatted[$key] = array('data-tax-rate-value' => $taxRateValue);
}

?>

<?php if ($taxRateDefault->value != 0): ?>
<?= $form->field($model, 'id_tax_rate')->dropDownList($taxRateNamesArray, ['options' => $taxRateValuesArrayFormatted])->label('Taxe'); ?>
<?php endif; ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-th-list"></i>
Général
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'status')->widget(Toggle::class,
[
'options' => [
'data-id' => $model->id,
'data-on' => 'Oui',
'data-off' => 'Non',
],
]
); ?>

<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
<?php if($producerModule->getSolver()->getConfig('option_export_display_product_reference')): ?>
<?= $form->field($model, 'reference')->textInput(['maxlength' => 255]) ?>
<?php endif; ?>
<?= $form->field($model, 'id_product_category')->dropDownList($productCategoryModule->populateProductCategoriesDropdownList()); ?>
<?= $form->field($model, 'description')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'recipe')->textarea()->label('Description longue') ?>
<?= $form->field($model, 'unit')
->dropDownList(ArrayHelper::map(Product::$unitsArray, 'unit', 'wording'))
->label('Unité (pièce, poids ou volume)'); ?>
<?= $form->field($model, 'step')->textInput()->hint('Définit ce qui est ajouté ou enlevé lors des changements de quantité.') ?>
<?= $form->field($model, 'weight')->textInput()->label('Poids (g)')->hint("Si unité au poids ou volume, utilisé pour déterminer le nombre de pièces dans les exports.") ?>
</div>
</div>


<?= $form->field($model, 'price', [
'template' => '
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-euro"></i> Prix

<a href="<?= Yii::$app->urlManager->createUrl(['product/prices-list', 'id' => $model->id]) ?>"
class="btn btn-default btn-xs">
Prix spécifiques (<?= count($model->productPrice) ?>)
</a>
</h3>
</div>
<div class="panel-body">
<?php

//Récupère la tva par défaut du producteur courant
$producer = \common\helpers\GlobalParam::getCurrentProducer();
$taxRateDefault = $producer->taxRate;

$taxRateNamesArray = array_merge(array(0 => 'Tva par défaut'), ArrayHelper::map($taxRateModule->findTaxRates(), 'id', function ($model) {
return $model->name;
}));
$taxRateValuesArray = array_merge(array(0 => $taxRateDefault->value), ArrayHelper::map($taxRateModule->findTaxRates(), 'id', function ($model) {
return $model->value;
}));
foreach ($taxRateValuesArray as $key => $taxRateValue) {
$taxRateValuesArrayFormatted[$key] = array('data-tax-rate-value' => $taxRateValue);
}

?>

<?php if ($taxRateDefault->value != 0): ?>
<?= $form->field($model, 'id_tax_rate')->dropDownList($taxRateNamesArray, ['options' => $taxRateValuesArrayFormatted])->label('Taxe'); ?>
<?php endif; ?>

<?= $form->field($model, 'price', [
'template' => '
<div class="row"> <div class="row">
<div class="col-xs-6"> <div class="col-xs-6">
<label for="product-price" class="control-label without-tax"></label> <label for="product-price" class="control-label without-tax"></label>
</div> </div>
</div> </div>
</div> </div>
', ',
]) ?>
<?= $form->field($model, 'step')->textInput()->hint('Définit ce qui est ajouté ou enlevé lors des changements de quantité.') ?>

<?= $form->field($model, 'weight')->textInput()->label('Poids (g)')->hint("Si unité au poids ou volume, utilisé pour déterminer le nombre de pièces dans les exports.") ?>

<div class="col-md-3">
<?= $form->field($model, 'quantity_max')->textInput() ?>
</div>
<div class="col-md-3">
<?= $form->field($model, 'quantity_max_monday')->textInput() ?>
</div>
<div class="col-md-3">
<?= $form->field($model, 'quantity_max_tuesday')->textInput() ?>
</div>
<div class="col-md-3">
<?= $form->field($model, 'quantity_max_wednesday')->textInput() ?>
</div>
<div class="col-md-3">
<?= $form->field($model, 'quantity_max_thursday')->textInput() ?>
</div>
<div class="col-md-3">
<?= $form->field($model, 'quantity_max_friday')->textInput() ?>
]) ?>
</div>
</div> </div>
<div class="col-md-3">
<?= $form->field($model, 'quantity_max_saturday')->textInput() ?>
</div>
<div class="col-md-3">
<?= $form->field($model, 'quantity_max_sunday')->textInput() ?>

<?php if (!$model->isNewRecord): ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-edit"></i>
Distributions à venir
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'apply_distributions')
->checkbox()
->hint('Sélectionnez cette option si vous souhaitez que ces modifications (actif / non actif, quantités maximum) soient répercutées dans les distributions à venir.'); ?>
</div>
</div> </div>
<div class="clr"></div>

<?php
if (!$model->isNewRecord) {
echo $form->field($model, 'apply_distributions')
->checkbox()
->hint('Sélectionnez cette option si vous souhaitez que ces modifications (actif / non actif, quantité max) soient répercutées dans les distributions à venir déjà initialisées.');
}
?>
<?php endif; ?>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<?= $form->field($model, 'photoFile')->fileInput() ?>
<?php
if (strlen($model->photo)) {
echo '<img class="photo-product" src="' . Image::getThumbnailSmall($model->photo, true) . '" width="200px" /><br />';
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label>';
}
?>

<div id="days-production">
<h2>Jours de distribution</h2>
<?= $form->field($model, 'monday')->checkbox() ?>
<?= $form->field($model, 'tuesday')->checkbox() ?>
<?= $form->field($model, 'wednesday')->checkbox() ?>
<?= $form->field($model, 'thursday')->checkbox() ?>
<?= $form->field($model, 'friday')->checkbox() ?>
<?= $form->field($model, 'saturday')->checkbox() ?>
<?= $form->field($model, 'sunday')->checkbox() ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-image"></i>
Photo
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'photoFile')->fileInput()->label('') ?>
<?php
if (strlen($model->photo)) {
echo '<img class="photo-product" src="' . Image::getThumbnailSmall($model->photo, true) . '" width="200px" /><br />';
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label>';
}
?>
</div>
</div> </div>
<div class="clr"></div>

<div id="availability-points-sale">
<h2>Disponibilité points de vente</h2>
<?= $form->field($model, 'available_on_points_sale')->radioList([1 => 'Disponible', 0 => 'Indisponible']) ?>

<strong id="label-availability-points-sale">Et
<span><?php if ($model->available_on_points_sale): ?>indisponible<?php else: ?>disponible<?php endif; ?></span>
sur les points de vente</strong>
<?php $pointSaleArray = PointSale::find()
->where([
'id_producer' => GlobalParam::getCurrentProducerId(),
'status' => 1
])
->orderBy('is_bread_box ASC, name ASC')
->all(); ?>
<?= Html::activeCheckboxList($model, 'pointsSale', ArrayHelper::map($pointSaleArray, 'id', function ($pointSale, $defaultValue) use ($model) {
return Html::encode($pointSale->name);
}), ['encode' => false, 'class' => '']) ?>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-calendar"></i>
Jours de production
</h3>
</div>
<div class="panel-body">
<div id="days-production">
<?= $form->field($model, 'monday')->checkbox() ?>
<?= $form->field($model, 'tuesday')->checkbox() ?>
<?= $form->field($model, 'wednesday')->checkbox() ?>
<?= $form->field($model, 'thursday')->checkbox() ?>
<?= $form->field($model, 'friday')->checkbox() ?>
<?= $form->field($model, 'saturday')->checkbox() ?>
<?= $form->field($model, 'sunday')->checkbox() ?>
</div>
<div class="clr"></div>
</div>
</div> </div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-balance-scale"></i>
Quantités maximum par jour
</h3>
</div>
<div class="panel-body">
<div id="maximum-quantities">
<?= $form->field($model, 'quantity_max')->textInput() ?>
<?= $form->field($model, 'quantity_max_monday')->textInput() ?>
<?= $form->field($model, 'quantity_max_tuesday')->textInput() ?>
<?= $form->field($model, 'quantity_max_wednesday')->textInput() ?>
<?= $form->field($model, 'quantity_max_thursday')->textInput() ?>
<?= $form->field($model, 'quantity_max_friday')->textInput() ?>
<?= $form->field($model, 'quantity_max_saturday')->textInput() ?>
<?= $form->field($model, 'quantity_max_sunday')->textInput() ?>
</div>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-map-marker"></i>
Disponibilité par point de vente
</h3>
</div>
<div class="panel-body">
<div id="availability-points-sale">
<?= $form->field($model, 'available_on_points_sale')->radioList([1 => 'Disponible', 0 => 'Indisponible']) ?>
<strong id="label-availability-points-sale">Et
<span><?php if ($model->available_on_points_sale): ?>indisponible<?php else: ?>disponible<?php endif; ?></span>
sur les points de vente</strong>
<?php $pointSaleArray = PointSale::find()
->where([
'id_producer' => GlobalParam::getCurrentProducerId(),
'status' => 1
])
->orderBy('is_bread_box ASC, name ASC')
->all(); ?>
<?= Html::activeCheckboxList($model, 'pointsSale', ArrayHelper::map($pointSaleArray, 'id', function ($pointSale, $defaultValue) use ($model) {
return Html::encode($pointSale->name);
}), ['encode' => false, 'class' => '']) ?>
</div>
</div>
</div>

</div> </div>
<div class="clr"></div> <div class="clr"></div>
</div> </div>

+ 0
- 1
backend/views/product/index.php Dosyayı Görüntüle

if ($model->price) { if ($model->price) {
$return = Price::format($productModule->getPriceWithTax($model)) . ' (' . $productModule->getSolver()->strUnit($model, 'wording_unit', true) . ')'; $return = Price::format($productModule->getPriceWithTax($model)) . ' (' . $productModule->getSolver()->strUnit($model, 'wording_unit', true) . ')';
} }

return $return; return $return;
} }
], ],

+ 1
- 1
backend/views/product/update/_nav.php Dosyayı Görüntüle

'model' => $model, 'model' => $model,
]); ?> ]); ?>
<?= $this->render('_nav_item', [ <?= $this->render('_nav_item', [
'title' => 'Prix spécifiques',
'title' => 'Prix spécifiques ('.count($model->productPrice).')',
'action' => 'prices-list', 'action' => 'prices-list',
'currentAction' => $action, 'currentAction' => $action,
'model' => $model, 'model' => $model,

+ 29
- 22
backend/views/product/update/prices/_form.php Dosyayı Görüntüle

?> ?>


<div class="product-form"> <div class="product-form">

<?=
$this->render('_base_price', [
'model' => $modelProduct,
]) ;
?>

<?php $form = ActiveForm::begin([ <?php $form = ActiveForm::begin([
'enableClientValidation' => false, 'enableClientValidation' => false,
'options' => ['enctype' => 'multipart/form-data'] 'options' => ['enctype' => 'multipart/form-data']
]); ?> ]); ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-euro"></i>
<?= $model->isNewRecord ? 'Ajouter un prix' : 'Modifier un prix'; ?>
</h3>
</div>
<div class="panel-body">


<?= $form->field($model, 'id_user')->dropDownList($userModule->populateUserDropdownList()); ?>
<?= $form->field($model, 'id_user_group')->dropDownList($userGroupModule->populateUserGroupDropdownList()); ?>
<?= $form->field($model, 'id_point_sale')->dropDownList($pointSaleModule->populatePointSaleDropdownList()); ?>
<?= $form->field($model, 'from_quantity')->label('À partir de la quantité ('. $productModule->getSolver()->strUnit($modelProduct, 'wording', true).')'); ?>
<?= $this->render('_base_price', [
'model' => $modelProduct,
]) ; ?>

<?= $form->field($model, 'id_user')->dropDownList($userModule->populateUserDropdownList()); ?>
<?= $form->field($model, 'id_user_group')->dropDownList($userGroupModule->populateUserGroupDropdownList()); ?>
<?= $form->field($model, 'id_point_sale')->dropDownList($pointSaleModule->populatePointSaleDropdownList()); ?>
<?= $form->field($model, 'from_quantity')->label('À partir de la quantité ('. $productModule->getSolver()->strUnit($modelProduct, 'wording', true).')'); ?>


<?php
$producer = GlobalParam::getCurrentProducer();
$taxRateValue = $producer->taxRate->value;
if($modelProduct->taxRate) {
<?php
$producer = GlobalParam::getCurrentProducer();
$taxRateValue = $producer->taxRate->value;
if($modelProduct->taxRate) {
$taxRateValue = $modelProduct->taxRate->value ; $taxRateValue = $modelProduct->taxRate->value ;
}
?>
}
?>


<?= $form->field($model, 'price', [
'template' => '
<?= $form->field($model, 'price', [
'template' => '
<div class="row"> <div class="row">
<div class="col-xs-4"> <div class="col-xs-4">
<label for="reduction-increase-percent" class="control-label">Réduction / augmentation</label> <label for="reduction-increase-percent" class="control-label">Réduction / augmentation</label>
</div> </div>
</div> </div>
</div>', </div>',
]) ?>
]) ?>
</div>
</div>


<div class="form-group">
<?= Html::a('Annuler', ['prices-list', 'id' => $model->id_product], ['class' => 'btn btn-default']) ?>
<div class="form-group form-actions">
<?= Html::a('Retour', ['prices-list', 'id' => $model->id_product], ['class' => 'btn btn-default']) ?>
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => 'btn btn-primary']) ?> <?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => 'btn btn-primary']) ?>
</div> </div>



+ 6
- 12
backend/views/product/update/prices/list.php Dosyayı Görüntüle

<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title"> <h3 class="panel-title">
Prix spécifiques à ce produit
<i class="fa fa-th-list"></i>
Liste des prix
<a href="<?= Yii::$app->urlManager->createUrl(['product/prices-create', 'idProduct' => $model->id]) ?>" <a href="<?= Yii::$app->urlManager->createUrl(['product/prices-create', 'idProduct' => $model->id]) ?>"
class="btn btn-default btn-xs"> class="btn btn-default btn-xs">
Nouveau prix Nouveau prix
</h3> </h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<?php
<?= $this->render('_base_price', [
'model' => $model,
]) ; ?>


<?php
echo GridView::widget([ echo GridView::widget([
'dataProvider' => $dataProvider, 'dataProvider' => $dataProvider,
'columns' => [ 'columns' => [
], ],
], ],
]); ]);

?> ?>
</div> </div>
</div> </div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Rappel du prix de base</h3>
</div>
<div class="panel-body">
<p>Prix de base : <strong><?= Price::format($productModule->getPrice($model)); ?> HT</strong> /
<strong><?= Price::format($productModule->getPriceWithTax($model)); ?> TTC</strong><br/></p>
</div>
</div>
</div> </div>

+ 1
- 1
backend/views/setting-admin/index.php Dosyayı Görüntüle

return $field->checkbox(); return $field->checkbox();
} }
elseif($settingDetail->getFormType() == 'toggle') { elseif($settingDetail->getFormType() == 'toggle') {
return $form->field($model, $settingDetail->getName(), ['options' => ['class' => 'form-group form-toggle']])->widget(Toggle::class, ['options' => ['data-on' => 'Oui', 'data-off' => 'Non', 'data-offstyle' => 'default']]);
return $form->field($model, $settingDetail->getName(), ['options' => ['class' => 'form-group form-toggle']])->widget(Toggle::class, ['options' => ['data-on' => 'Oui', 'data-off' => 'Non', 'data-offstyle' => 'danger']]);
} }
elseif($settingDetail->getFormType() == 'select') { elseif($settingDetail->getFormType() == 'select') {
return $field->dropDownList($settingDetail->getOptions()); return $field->dropDownList($settingDetail->getOptions());

+ 109
- 59
backend/views/subscription/_form.php Dosyayı Görüntüle

<?php if($model->id): ?> <?php if($model->id): ?>
<?= $form->field($model, 'id')->hiddenInput() ?> <?= $form->field($model, 'id')->hiddenInput() ?>
<?php endif; ?> <?php endif; ?>
<div class="col-md-5" id="bloc-select-user">
<?= $form->field($model, 'id_user')->dropDownList($userModule->populateUserDropdownList(), ['class' => 'select2']); ?>
</div>
<div class="col-md-1" id="or-user">
<span>OU</span>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-th-list"></i>
Général
</h3>
</div>
<div class="panel-body">
<div class="col-md-5" id="bloc-select-user">
<?= $form->field($model, 'id_user')->dropDownList($userModule->populateUserDropdownList(), ['class' => 'select2']); ?>
</div>
<div class="col-md-1" id="or-user">
<span>OU</span>
</div>
<div class="col-md-6">
<?= $form->field($model, 'username')->textInput() ?>
</div>
<div class="clr"></div>

<?= $form->field($model, 'id_producer')->hiddenInput() ?>
<?= $form->field($model, 'id_point_sale')->dropDownList(ArrayHelper::map($pointSaleModule->findPointSales(), 'id', function($model, $defaultValue) {
return $model['name'];
}), ['prompt' => '--','class' => 'form-control user-id']) ?>
<?= $form->field($model, 'date_begin') ?>
<?= $form->field($model, 'date_end')->hint('Laisser vide pour une durée indéterminée') ?>
</div>
</div> </div>
<div class="col-md-6">
<?= $form->field($model, 'username')->textInput() ?>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-calendar"></i>
Jours et fréquence
</h3>
</div>
<div class="panel-body">
<div class="days">
<?= $form->field($model, 'monday')->checkbox() ?>
<?= $form->field($model, 'tuesday')->checkbox() ?>
<?= $form->field($model, 'wednesday')->checkbox() ?>
<?= $form->field($model, 'thursday')->checkbox() ?>
<?= $form->field($model, 'friday')->checkbox() ?>
<?= $form->field($model, 'saturday')->checkbox() ?>
<?= $form->field($model, 'sunday')->checkbox() ?>
</div>
<div class="clr"></div>
<?= $form->field($model, 'week_frequency')->dropDownList([1=>1, 2=>2, 3=>3, 4=>4]) ?>
</div>
</div> </div>
<div class="clr"></div>
<?= $form->field($model, 'id_producer')->hiddenInput() ?>
<?= $form->field($model, 'id_point_sale')->dropDownList(ArrayHelper::map($pointSaleModule->findPointSales(), 'id', function($model, $defaultValue) {
return $model['name'];
}), ['prompt' => '--','class' => 'form-control user-id']) ?>
<?= $form->field($model, 'date_begin') ?>
<?= $form->field($model, 'date_end')->hint('Laisser vide pour une durée indéterminée') ?>
<div class="days">
<h2>Jours</h2>
<?= $form->field($model, 'monday')->checkbox() ?>
<?= $form->field($model, 'tuesday')->checkbox() ?>
<?= $form->field($model, 'wednesday')->checkbox() ?>
<?= $form->field($model, 'thursday')->checkbox() ?>
<?= $form->field($model, 'friday')->checkbox() ?>
<?= $form->field($model, 'saturday')->checkbox() ?>
<?= $form->field($model, 'sunday')->checkbox() ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<span class="glyphicon glyphicon-piggy-bank"></span>
Crédit
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'auto_payment')
->dropDownList([
Subscription::AUTO_PAYMENT_DEDUCTED => 'Déduit',
Subscription::AUTO_PAYMENT_YES => 'Oui',
Subscription::AUTO_PAYMENT_NO => 'Non'
])
->hint('Attention, un compte client existant doit être spécifié en haut de ce formulaire.') ?>
</div>
</div> </div>
<div class="clr"></div>
<?= $form->field($model, 'week_frequency')->dropDownList([1=>1, 2=>2, 3=>3, 4=>4]) ?>

<?= $form->field($model, 'auto_payment')
->dropDownList([
Subscription::AUTO_PAYMENT_DEDUCTED => 'Déduit',
Subscription::AUTO_PAYMENT_YES => 'Oui',
Subscription::AUTO_PAYMENT_NO => 'Non'
])
->hint('Attention, un compte client existant doit être spécifié en haut de ce formulaire.') ?>
<div class="products">
<h2>Produits</h2>
<?php if(isset($model->errors['products']) && count($model->errors['products']))
{
echo '<div class="alert alert-danger">'.$model->errors['products'][0].'</div>' ;
}
?>
<table class="table table-bordered table-condensed table-hover" id="products">
<tr v-for="product in products">
<td>{{ product.name }}</td>
<td>
<input type="hidden" :value="product.step" :name="'product_step_'+product.step" />
<input type="hidden" :value="product.price" :name="'product_price_'+product.price" />
<div class="input-group">

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-clone"></i>
Produits
</h3>
</div>
<div class="panel-body">
<div class="products">
<?php if(isset($model->errors['products']) && count($model->errors['products']))
{
echo '<div class="alert alert-danger">'.$model->errors['products'][0].'</div>' ;
}
?>
<table class="table table-bordered table-condensed table-hover" id="products">
<tr v-for="product in products">
<td>{{ product.name }}</td>
<td>
<input type="hidden" :value="product.step" :name="'product_step_'+product.step" />
<input type="hidden" :value="product.price" :name="'product_price_'+product.price" />
<div class="input-group">
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" type="button" @click="changeQuantityProductSubscription(false, product)"><span class="glyphicon glyphicon-minus"></span></button> <button class="btn btn-default" type="button" @click="changeQuantityProductSubscription(false, product)"><span class="glyphicon glyphicon-minus"></span></button>
</span> </span>
<input v-model="product.quantity" :name="'SubscriptionForm[products][product_'+product.id+']'" class="form-control input-quantity" />
<div class="input-group-addon">
<input v-model="product.quantity" :name="'SubscriptionForm[products][product_'+product.id+']'" class="form-control input-quantity" />
<div class="input-group-addon">
<span> <span>
{{ product.wording_unit }} {{ product.wording_unit }}
</span> </span>
</div>
<span class="input-group-btn">
</div>
<span class="input-group-btn">
<button class="btn btn-default" type="button" @click="changeQuantityProductSubscription(true, product)"><span class="glyphicon glyphicon-plus"></span></button> <button class="btn btn-default" type="button" @click="changeQuantityProductSubscription(true, product)"><span class="glyphicon glyphicon-plus"></span></button>
</span> </span>
</div>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-comment"></i>
Commentaire
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'comment')->textarea(['rows' => 6]) ?>
</div>
</div> </div>
<?= $form->field($model, 'comment')->textarea(['rows' => 6]) ?>


<div class="form-group form-actions"> <div class="form-group form-actions">
<?= Html::a('Retour', ['subscription/index'], ['class' => 'btn btn-default']) ?> <?= Html::a('Retour', ['subscription/index'], ['class' => 'btn btn-default']) ?>

+ 20
- 3
backend/views/support/index.php Dosyayı Görüntüle

$this->setTitle('Support & contact'); $this->setTitle('Support & contact');
$this->addBreadcrumb($this->getTitle()); $this->addBreadcrumb($this->getTitle());


$supportDeveloperOnline = $adminSettingBag->get('supportDeveloperOnline');

?> ?>


<div class="support-index"> <div class="support-index">
<?php if($context == 'producer'): ?> <?php if($context == 'producer'): ?>


<div class="callout callout-info"> <div class="callout callout-info">
<p><i class="icon fa fa-info-circle"></i> Pour toutes vos remarques, suggestions et remontées de bugs.</p>
<p><i class="icon fa fa-info-circle"></i> Pour toutes vos questions, remarques, suggestions et remontées de bugs.</p>
</div> </div>
<div> <div>
<div class="col-md-6 col-left"> <div class="col-md-6 col-left">
<div class="info-box"> <div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-phone"></i></span>
<span class="info-box-icon <?php if($supportDeveloperOnline): ?>bg-green<?php else: ?>bg-yellow<?php endif; ?>"><i class="fa fa-phone"></i></span>
<div class="info-box-content"> <div class="info-box-content">
<span class="info-box-text">Me contacter directement</span>
<span class="info-box-text">
Me contacter directement
<?php if($supportDeveloperOnline): ?>
<br /><span class="label label-success">Disponible</span>
<?php endif; ?>
</span>
<span class="info-box-text"> <span class="info-box-text">
<br/> <br/>
<strong><?= $adminSettingBag->get('administratorPhoneNumber'); ?></strong> <strong><?= $adminSettingBag->get('administratorPhoneNumber'); ?></strong>
</div> </div>
</div> </div>
</div> </div>
<?php if($adminSettingBag->get('forumFlarumUrl')): ?>
<div class="col-md-6 col-left">
<div class="info-box">
<span class="info-box-icon bg-yellow"><i class="fa fa-users"></i></span>
<div class="info-box-content">
<span class="info-box-text"><br/><?= Html::a("Ouvrir une discussion sur le forum", $adminSettingBag->get('forumFlarumUrl'), ['class' => 'btn btn-sm btn-default', 'target' => '_blank']); ?></span>
</div>
</div>
</div>
<?php endif; ?>
</div> </div>
<div class="clr"></div> <div class="clr"></div>
<?php endif; ?> <?php endif; ?>

+ 18
- 10
backend/views/user-group/_form.php Dosyayı Görüntüle

?> ?>


<div class="user-group-form"> <div class="user-group-form">

<?php $form = ActiveForm::begin(); ?>
<div class="col-md-8">
<?php $form = ActiveForm::begin(); ?>
<div class="col-md-8">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-th-list"></i>
Général
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> <?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
</div>
</div> </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>
<div class="clr"></div>
<div class="form-group form-actions">
<?= Html::a('Retour', ['user-group/index'], ['class' => 'btn btn-default']) ?>
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div> </div>

+ 146
- 54
backend/views/user/_form.php Dosyayı Görüntüle

use common\logic\Distribution\Distribution\Service\ExportManager; use common\logic\Distribution\Distribution\Service\ExportManager;
use common\logic\Producer\Producer\Module\ProducerModule; use common\logic\Producer\Producer\Module\ProducerModule;
use common\logic\User\User\Module\UserModule; use common\logic\User\User\Module\UserModule;
use lo\widgets\Toggle;
use yii\helpers\Html; use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper; use yii\helpers\ArrayHelper;
'enableClientValidation' => false 'enableClientValidation' => false
]); ?> ]); ?>


<?= $form->field($model, 'type')
->dropDownList($userModule->getTypeChoicesArray(), [
'v-model' => 'type'
]); ?>
<?= $form->field($model, 'name_legal_person', ['options' => ['v-show' => "type == 'legal-person'"]])->textInput() ?>
<?= $form->field($model, 'lastname')->textInput() ?>
<?= $form->field($model, 'name')->textInput() ?>
<?= $form->field($model, 'phone')->textInput() ?>
<?= $form->field($model, 'email')->textInput() ?>
<?php if(!$model->email): ?>
<?= $form->field($model, 'send_mail_welcome')->checkbox() ?>
<?php endif; ?>
<?= $form->field($model, 'address')->textarea() ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-th-list"></i>
Général
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'type')
->dropDownList($userModule->getTypeChoicesArray(), [
'v-model' => 'type'
]); ?>
<?= $form->field($model, 'name_legal_person', ['options' => ['v-show' => "type == 'legal-person'"]])->textInput() ?>
<?= $form->field($model, 'lastname')->textInput() ?>
<?= $form->field($model, 'name')->textInput() ?>
<?= $form->field($model, 'phone')->textInput() ?>
<?= $form->field($model, 'email')->textInput() ?>
<?php if(!$model->email): ?>
<?= $form->field($model, 'send_mail_welcome')->checkbox() ?>
<?php endif; ?>
<?= $form->field($model, 'address')->textarea() ?>
</div>
</div>


<?php if ($producerModule->getSolver()->getConfig('option_export_evoliz')): ?>
<?= $form->field($model, 'evoliz_code')->textInput() ?>
<?php endif; ?>
<?= $form->field($model, 'newsletter')->checkbox() ?>
<div class="panel panel-default panel-newsletter">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-paper-plane"></i>
Bulletin d'information
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'newsletter')->widget(Toggle::class,
[
'options' => [
'data-id' => $model->id,
'data-on' => 'Oui',
'data-off' => 'Non',
],
]
); ?>
</div>
</div>


<?php if($distributionModule->getExportManager()->isEnabled(ExportManager::SHOPPING_CART_LABELS_PDF)): ?>
<?= $form->field($model, 'exclude_export_shopping_cart_labels')->checkbox(); ?>
<?php if (
$distributionModule->getExportManager()->isEnabled(ExportManager::SHOPPING_CART_LABELS_PDF)
|| $producerModule->getSolver()->getConfig('option_export_evoliz')): ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-download"></i>
Exports
</h3>
</div>
<div class="panel-body">
<?php if($distributionModule->getExportManager()->isEnabled(ExportManager::SHOPPING_CART_LABELS_PDF)): ?>
<?= $form->field($model, 'exclude_export_shopping_cart_labels')->checkbox(); ?>
<?php endif; ?>
<?php if ($producerModule->getSolver()->getConfig('option_export_evoliz')): ?>
<?= $form->field($model, 'evoliz_code')->textInput() ?>
<?php endif; ?>
</div>
</div>
<?php endif; ?> <?php endif; ?>


<?php if($pointsSaleArray && count($pointsSaleArray) > 0): ?> <?php if($pointsSaleArray && count($pointsSaleArray) > 0): ?>
<?= $form->field($model, 'points_sale')->checkboxlist(
ArrayHelper::map($pointsSaleArray, 'id', function ($pointSale) use ($model) {
$commentUserPointSale = isset($pointSale->userPointSale[0]) ? $pointSale->userPointSale[0]->comment : '';
$html = Html::encode($pointSale->name);
if ($pointSale->restricted_access) {
$html .= '<input type="text" placeholder="Commentaire" class="form-control" name="User[comment_point_sale_' . $pointSale->id . ']" value="' . (($model->id) ? Html::encode($commentUserPointSale) : '') . '" />';
}
return $html;
}), [
'encode' => false
]);
?>
<div class="panel panel-default panel-point-sales">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-map-marker"></i>
Points de vente
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'points_sale')->checkboxlist(
ArrayHelper::map($pointsSaleArray, 'id', function ($pointSale) use ($model) {
$commentUserPointSale = isset($pointSale->userPointSale[0]) ? $pointSale->userPointSale[0]->comment : '';
$html = Html::encode($pointSale->name);
if ($pointSale->restricted_access) {
$html .= '<input type="text" placeholder="Commentaire" class="form-control" name="User[comment_point_sale_' . $pointSale->id . ']" value="' . (($model->id) ? Html::encode($commentUserPointSale) : '') . '" />';
}
return $html;
}), [
'encode' => false
]);
?>
</div>
</div>
<?php endif; ?> <?php endif; ?>


<?php if($userGroupsArray && count($userGroupsArray) > 0): ?> <?php if($userGroupsArray && count($userGroupsArray) > 0): ?>
<?= $form->field($model, 'user_groups')->checkboxlist(
ArrayHelper::map($userGroupsArray, 'id', function ($userGroup) use ($model) {
return Html::encode($userGroup->name);
}), [
'encode' => false
]);
?>
<div class="panel panel-default panel-user-groups">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-users"></i>
Groupes
</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'user_groups')->checkboxlist(
ArrayHelper::map($userGroupsArray, 'id', function ($userGroup) use ($model) {
return Html::encode($userGroup->name);
}), [
'encode' => false
]);
?>
</div>
</div>
<?php endif; ?> <?php endif; ?>


<?php /* $form->field($model, 'product_price_percent') <?php /* $form->field($model, 'product_price_percent')
</div> </div>


<div class="col-md-4"> <div class="col-md-4">
<h3>Email de bienvenue</h3>
<?php $form = ActiveForm::begin(); ?>
<div class="form-group">
<?= Html::submitButton("Envoyer l'email de bienvenue", ['class' => 'btn btn-primary', 'name' => 'submit_mail_welcome', 'value' => 1]) ?>
</div>
<?php ActiveForm::end(); ?>


<h3>Mot de passe</h3>
<?php $form = ActiveForm::begin(); ?>
<div class="form-group">
<?= Html::submitButton('Envoyer un nouveau mot de passe', ['class' => 'btn btn-primary', 'name' => 'submit_new_password', 'value' => 1]) ?>
</div>
<?php ActiveForm::end(); ?>
<?php if($model->email): ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-envelope"></i>
Envoi d'emails
</h3>
</div>
<div class="panel-body">
<?php $form = ActiveForm::begin(); ?>
<div class="form-group">
<?= Html::submitButton(
'<i class="fa fa-home"></i> Envoyer l\'email de bienvenue',
['class' => 'btn btn-default', 'name' => 'submit_mail_welcome', 'value' => 1]
) ?>
</div>
<?php ActiveForm::end(); ?>

<?php $form = ActiveForm::begin(); ?>
<div class="form-group">
<?= Html::submitButton(
'<i class="fa fa-key"></i> Envoyer un nouveau mot de passe',
['class' => 'btn btn-default', 'name' => 'submit_new_password', 'value' => 1]
) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
<?php endif; ?>


<?php if(isset($pointSaleBillingArray) && $pointSaleBillingArray && count($pointSaleBillingArray) > 0): ?> <?php if(isset($pointSaleBillingArray) && $pointSaleBillingArray && count($pointSaleBillingArray) > 0): ?>
<h3>Facturation</h3>
<?php foreach($pointSaleBillingArray as $pointSale): ?>
<a href="<?= Yii::$app->urlManager->createUrl(['point-sale/update', 'id' => $pointSale->id]) ?>"><?= $pointSale->name ?></a><br />
<?php endforeach; ?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-sticky-note-o"></i>
Facturation
</h3>
</div>
<div class="panel-body">
<?php foreach($pointSaleBillingArray as $pointSale): ?>
<a class="btn btn-default btn-sm" href="<?= Yii::$app->urlManager->createUrl(['point-sale/update', 'id' => $pointSale->id]) ?>">
<i class="fa fa-map-marker"></i>
<?= $pointSale->name ?>
</a><br />
<?php endforeach; ?>
</div>
</div>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </div>

+ 0
- 9
backend/views/user/_menu.php Dosyayı Görüntüle

</a> </a>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>

<div id="submenu">
<a class="btn btn-xs <?php if($section == 'index'): ?>btn-primary<?php else: ?>btn-default<?php endif; ?>" href="<?= Yii::$app->urlManager->createUrl(['user/index','idPointSale' => $idPointSaleActive]); ?>">
<span class="glyphicon glyphicon-th-list"></span> Liste
</a>
<a class="btn btn-xs <?php if($section == 'mail'): ?>btn-primary<?php else: ?>btn-default<?php endif; ?>" href="<?= Yii::$app->urlManager->createUrl(['user/mail','idPointSale' => $idPointSaleActive]); ?>">
<span class="glyphicon glyphicon-envelope"></span> Envoyer un email
</a>
</div>
</div> </div>

+ 209
- 61
backend/web/css/screen.css Dosyayı Görüntüle

margin-bottom: 30px; margin-bottom: 30px;
} }
/* line 1362, ../sass/screen.scss */ /* line 1362, ../sass/screen.scss */
#menu-users #submenu {
margin-bottom: 30px;
text-align: left;
}
/* line 1367, ../sass/screen.scss */
#menu-users a { #menu-users a {
margin-bottom: 15px; margin-bottom: 15px;
} }


/* line 1373, ../sass/screen.scss */
/* line 1368, ../sass/screen.scss */
.user-index .input-group { .user-index .input-group {
width: 180px; width: 180px;
} }
/* line 1376, ../sass/screen.scss */
/* line 1371, ../sass/screen.scss */
.user-index .input-group .input-credit { .user-index .input-group .input-credit {
text-align: center; text-align: center;
} }


/* line 1383, ../sass/screen.scss */
/* line 1378, ../sass/screen.scss */
.user-credit .the-credit { .user-credit .the-credit {
float: right; float: right;
font-weight: bold; font-weight: bold;
} }


/* facturation */ /* facturation */
/* line 1398, ../sass/screen.scss */
/* line 1393, ../sass/screen.scss */
#free-price { #free-price {
padding: 20px; padding: 20px;
background-color: #F9F9F9; background-color: #F9F9F9;
} }
/* line 1402, ../sass/screen.scss */
/* line 1397, ../sass/screen.scss */
#free-price h2 { #free-price h2 {
font-family: "myriadpro-it"; font-family: "myriadpro-it";
} }
/* line 1406, ../sass/screen.scss */
/* line 1401, ../sass/screen.scss */
#free-price .amount span { #free-price .amount span {
font-size: 25px; font-size: 25px;
color: white; color: white;
padding-top: 7px; padding-top: 7px;
font-family: "myriadpro-regular"; font-family: "myriadpro-regular";
} }
/* line 1417, ../sass/screen.scss */
/* line 1412, ../sass/screen.scss */
#free-price label { #free-price label {
text-transform: uppercase; text-transform: uppercase;
font-family: "myriadpro-light"; font-family: "myriadpro-light";
font-size: 20px; font-size: 20px;
} }
/* line 1422, ../sass/screen.scss */
/* line 1417, ../sass/screen.scss */
#free-price label span { #free-price label span {
font-size: 16px; font-size: 16px;
} }
/* line 1428, ../sass/screen.scss */
/* line 1423, ../sass/screen.scss */
#free-price .field-producer-free_price .input-group { #free-price .field-producer-free_price .input-group {
width: 200px; width: 200px;
} }
/* line 1434, ../sass/screen.scss */
/* line 1429, ../sass/screen.scss */
#free-price .field-user-free_price label { #free-price .field-user-free_price label {
display: none; display: none;
} }
/* line 1439, ../sass/screen.scss */
/* line 1434, ../sass/screen.scss */
#free-price #producer-free_price { #free-price #producer-free_price {
width: 100px; width: 100px;
height: 60px; height: 60px;
text-align: center; text-align: center;
} }


/* line 1449, ../sass/screen.scss */
/* line 1444, ../sass/screen.scss */
.development-index ul#tabs-status-developments { .development-index ul#tabs-status-developments {
margin-bottom: 30px; margin-bottom: 30px;
border-bottom: solid 3px #F39C12; border-bottom: solid 3px #F39C12;
} }
/* line 1453, ../sass/screen.scss */
/* line 1448, ../sass/screen.scss */
.development-index ul#tabs-status-developments a { .development-index ul#tabs-status-developments a {
text-transform: uppercase; text-transform: uppercase;
} }
/* line 1456, ../sass/screen.scss */
/* line 1451, ../sass/screen.scss */
.development-index ul#tabs-status-developments .active { .development-index ul#tabs-status-developments .active {
border: 0px none; border: 0px none;
background: none; background: none;
} }
/* line 1459, ../sass/screen.scss */
/* line 1454, ../sass/screen.scss */
.development-index ul#tabs-status-developments .active a { .development-index ul#tabs-status-developments .active a {
background-color: #F39C12; background-color: #F39C12;
color: white; color: white;
} }
/* line 1467, ../sass/screen.scss */
/* line 1462, ../sass/screen.scss */
.development-index #tab-developments .btn-group-priority { .development-index #tab-developments .btn-group-priority {
width: 100%; width: 100%;
margin-bottom: 5px; margin-bottom: 5px;
} }
/* line 1471, ../sass/screen.scss */
/* line 1466, ../sass/screen.scss */
.development-index #tab-developments .btn-group-priority .btn-priority { .development-index #tab-developments .btn-group-priority .btn-priority {
display: block; display: block;
float: none; float: none;
width: 100%; width: 100%;
} }
/* line 1478, ../sass/screen.scss */
/* line 1473, ../sass/screen.scss */
.development-index #tab-developments .label-priority { .development-index #tab-developments .label-priority {
display: block; display: block;
width: 100%; width: 100%;
} }


/* stats */ /* stats */
/* line 1491, ../sass/screen.scss */
/* line 1486, ../sass/screen.scss */
.stats-products #nav-year { .stats-products #nav-year {
float: right; float: right;
} }
/* line 1496, ../sass/screen.scss */
/* line 1491, ../sass/screen.scss */
.stats-products tr.month th { .stats-products tr.month th {
text-align: center; text-align: center;
} }
/* line 1501, ../sass/screen.scss */
/* line 1496, ../sass/screen.scss */
.stats-products tr.sub-head th { .stats-products tr.sub-head th {
font-weight: normal; font-weight: normal;
font-size: 12px; font-size: 12px;
} }
/* line 1507, ../sass/screen.scss */
/* line 1502, ../sass/screen.scss */
.stats-products td.name { .stats-products td.name {
text-transform: uppercase; text-transform: uppercase;
} }
/* line 1511, ../sass/screen.scss */
/* line 1506, ../sass/screen.scss */
.stats-products td.align-center { .stats-products td.align-center {
text-align: center; text-align: center;
} }
} }


/* line 3, ../sass/subscription/_form.scss */ /* line 3, ../sass/subscription/_form.scss */
.subscription-form #bloc-select-user {
padding-left: 0px;
}
/* line 6, ../sass/subscription/_form.scss */
.subscription-form .field-subscriptionform-id { .subscription-form .field-subscriptionform-id {
display: none; display: none;
} }
/* line 7, ../sass/subscription/_form.scss */
/* line 10, ../sass/subscription/_form.scss */
.subscription-form table#products .input-quantity { .subscription-form table#products .input-quantity {
text-align: center; text-align: center;
border-right: 0px none; border-right: 0px none;
} }
/* line 11, ../sass/subscription/_form.scss */
/* line 14, ../sass/subscription/_form.scss */
.subscription-form table#products .input-group-addon { .subscription-form table#products .input-group-addon {
padding: 5px; padding: 5px;
padding-left: 0px; padding-left: 0px;
border-left: 0px none; border-left: 0px none;
border-right: 0px none; border-right: 0px none;
} }
/* line 18, ../sass/subscription/_form.scss */
/* line 21, ../sass/subscription/_form.scss */
.subscription-form table#products .select-unit { .subscription-form table#products .select-unit {
padding: 0px; padding: 0px;
width: 58px; width: 58px;
text-align: center; text-align: center;
height: 22px; height: 22px;
} }
/* line 24, ../sass/subscription/_form.scss */
/* line 27, ../sass/subscription/_form.scss */
.subscription-form table#products .glyphicon-warning-sign { .subscription-form table#products .glyphicon-warning-sign {
position: relative; position: relative;
top: 10px; top: 10px;
} }


/* line 6, ../sass/product/_form.scss */ /* line 6, ../sass/product/_form.scss */
.product-create .field-product-status label,
.product-update .field-product-status label {
display: block;
}
/* line 12, ../sass/product/_form.scss */
.product-create #product-active label, .product-create #product-active label,
.product-update #product-active label { .product-update #product-active label {
margin-right: 15px; margin-right: 15px;
} }
/* line 10, ../sass/product/_form.scss */
/* line 18, ../sass/product/_form.scss */
.product-create .field-product-photofile label,
.product-update .field-product-photofile label {
display: none;
}
/* line 24, ../sass/product/_form.scss */
.product-create #maximum-quantities label, .product-create #maximum-quantities .form-control,
.product-update #maximum-quantities label,
.product-update #maximum-quantities .form-control {
width: 49%;
height: 35px;
margin-bottom: 5px;
}
/* line 29, ../sass/product/_form.scss */
.product-create #maximum-quantities label,
.product-update #maximum-quantities label {
float: left;
line-height: 35px;
}
/* line 33, ../sass/product/_form.scss */
.product-create #maximum-quantities .form-control,
.product-update #maximum-quantities .form-control {
float: right;
}
/* line 38, ../sass/product/_form.scss */
.product-create #days-production, .product-create #days-production,
.product-create #availability-points-sale,
.product-update #days-production,
.product-update #availability-points-sale {
margin-top: 30px;
}
/* line 14, ../sass/product/_form.scss */
.product-create #days-production h2,
.product-create #availability-points-sale h2,
.product-update #days-production h2,
.product-update #availability-points-sale h2 {
font-size: 20px;
.product-update #days-production {
padding-left: 3px;
} }
/* line 20, ../sass/product/_form.scss */
/* line 41, ../sass/product/_form.scss */
.product-create #days-production .form-group,
.product-update #days-production .form-group {
margin-bottom: 7px;
}
/* line 45, ../sass/product/_form.scss */
.product-create #days-production label, .product-create #days-production label,
.product-update #days-production label { .product-update #days-production label {
font-weight: normal; font-weight: normal;
} }
/* line 26, ../sass/product/_form.scss */
/* line 48, ../sass/product/_form.scss */
.product-create #days-production label input,
.product-update #days-production label input {
position: relative;
top: 1px;
left: -3px;
}
/* line 55, ../sass/product/_form.scss */
.product-create #days-production .checkbox,
.product-update #days-production .checkbox {
margin-top: 0px;
}
/* line 59, ../sass/product/_form.scss */
.product-create #days-production .field-product-sunday,
.product-update #days-production .field-product-sunday {
margin-bottom: 0px;
}
/* line 62, ../sass/product/_form.scss */
.product-create #days-production .field-product-sunday .checkbox,
.product-update #days-production .field-product-sunday .checkbox {
margin-bottom: 0px;
}
/* line 69, ../sass/product/_form.scss */
.product-create #availability-points-sale #label-availability-points-sale, .product-create #availability-points-sale #label-availability-points-sale,
.product-update #availability-points-sale #label-availability-points-sale { .product-update #availability-points-sale #label-availability-points-sale {
display: block; display: block;
margin-bottom: 6px; margin-bottom: 6px;
} }
/* line 30, ../sass/product/_form.scss */
/* line 73, ../sass/product/_form.scss */
.product-create #availability-points-sale #label-availability-points-sale span, .product-create #availability-points-sale #label-availability-points-sale span,
.product-update #availability-points-sale #label-availability-points-sale span { .product-update #availability-points-sale #label-availability-points-sale span {
border-bottom: dotted 1px black; border-bottom: dotted 1px black;
} }
/* line 36, ../sass/product/_form.scss */
/* line 79, ../sass/product/_form.scss */
.product-create #availability-points-sale .field-product-available_on_points_sale label.control-label, .product-create #availability-points-sale .field-product-available_on_points_sale label.control-label,
.product-update #availability-points-sale .field-product-available_on_points_sale label.control-label { .product-update #availability-points-sale .field-product-available_on_points_sale label.control-label {
margin-bottom: 0px; margin-bottom: 0px;
position: relative; position: relative;
top: 3px; top: 3px;
} }
/* line 44, ../sass/product/_form.scss */
/* line 86, ../sass/product/_form.scss */
.product-create #availability-points-sale #product-pointssale,
.product-update #availability-points-sale #product-pointssale {
max-height: 300px;
overflow-y: scroll;
}
/* line 90, ../sass/product/_form.scss */
.product-create #availability-points-sale #product-pointssale label, .product-create #availability-points-sale #product-pointssale label,
.product-update #availability-points-sale #product-pointssale label { .product-update #availability-points-sale #product-pointssale label {
display: block; display: block;
} }


/* line 6, ../sass/user/_form.scss */ /* line 6, ../sass/user/_form.scss */
.user-create .panel-newsletter label,
.user-update .panel-newsletter label {
display: block;
}
/* line 12, ../sass/user/_form.scss */
.user-create .panel-point-sales label.control-label,
.user-update .panel-point-sales label.control-label {
display: none;
}
/* line 18, ../sass/user/_form.scss */
.user-create .panel-user-groups label.control-label,
.user-update .panel-user-groups label.control-label {
display: none;
}
/* line 25, ../sass/user/_form.scss */
.user-create #user-points_sale label, .user-create #user-points_sale label,
.user-create #user-user_groups label, .user-create #user-user_groups label,
.user-update #user-points_sale label, .user-update #user-points_sale label,
padding: 5px 10px; padding: 5px 10px;
border: solid 1px #e0e0e0; border: solid 1px #e0e0e0;
} }
/* line 14, ../sass/user/_form.scss */
/* line 33, ../sass/user/_form.scss */
.user-create #user-points_sale label .form-control, .user-create #user-points_sale label .form-control,
.user-create #user-user_groups label .form-control, .user-create #user-user_groups label .form-control,
.user-update #user-points_sale label .form-control, .user-update #user-points_sale label .form-control,
text-align: center; text-align: center;
} }


/* line 6, ../sass/point_sale/_form.scss */
.point-sale-create #credit .field-pointsale-credit label,
.point-sale-update #credit .field-pointsale-credit label {
display: block;
}
/* line 13, ../sass/point_sale/_form.scss */
.point-sale-create #days-distribution .form-group,
.point-sale-update #days-distribution .form-group {
margin-bottom: 0px;
}
/* line 15, ../sass/point_sale/_form.scss */
.point-sale-create #days-distribution .form-group label,
.point-sale-update #days-distribution .form-group label {
font-weight: normal;
}
/* line 18, ../sass/point_sale/_form.scss */
.point-sale-create #days-distribution .form-group.has-success label,
.point-sale-update #days-distribution .form-group.has-success label {
color: #333;
}
/* line 21, ../sass/point_sale/_form.scss */
.point-sale-create #days-distribution .form-group .help-block,
.point-sale-update #days-distribution .form-group .help-block {
display: none;
}
/* line 26, ../sass/point_sale/_form.scss */
.point-sale-create #days-distribution .field-pointsale-infos_monday,
.point-sale-create #days-distribution .field-pointsale-infos_tuesday,
.point-sale-create #days-distribution .field-pointsale-infos_wednesday,
.point-sale-create #days-distribution .field-pointsale-infos_thursday,
.point-sale-create #days-distribution .field-pointsale-infos_friday,
.point-sale-create #days-distribution .field-pointsale-infos_saturday,
.point-sale-create #days-distribution .field-pointsale-infos_sunday,
.point-sale-update #days-distribution .field-pointsale-infos_monday,
.point-sale-update #days-distribution .field-pointsale-infos_tuesday,
.point-sale-update #days-distribution .field-pointsale-infos_wednesday,
.point-sale-update #days-distribution .field-pointsale-infos_thursday,
.point-sale-update #days-distribution .field-pointsale-infos_friday,
.point-sale-update #days-distribution .field-pointsale-infos_saturday,
.point-sale-update #days-distribution .field-pointsale-infos_sunday {
margin-bottom: 10px;
}
/* line 34, ../sass/point_sale/_form.scss */
.point-sale-create #days-distribution .field-pointsale-infos_monday label,
.point-sale-create #days-distribution .field-pointsale-infos_tuesday label,
.point-sale-create #days-distribution .field-pointsale-infos_wednesday label,
.point-sale-create #days-distribution .field-pointsale-infos_thursday label,
.point-sale-create #days-distribution .field-pointsale-infos_friday label,
.point-sale-create #days-distribution .field-pointsale-infos_saturday label,
.point-sale-create #days-distribution .field-pointsale-infos_sunday label,
.point-sale-update #days-distribution .field-pointsale-infos_monday label,
.point-sale-update #days-distribution .field-pointsale-infos_tuesday label,
.point-sale-update #days-distribution .field-pointsale-infos_wednesday label,
.point-sale-update #days-distribution .field-pointsale-infos_thursday label,
.point-sale-update #days-distribution .field-pointsale-infos_friday label,
.point-sale-update #days-distribution .field-pointsale-infos_saturday label,
.point-sale-update #days-distribution .field-pointsale-infos_sunday label {
display: none;
}
/* line 41, ../sass/point_sale/_form.scss */
.point-sale-create #delivery-note-generation .form-group,
.point-sale-update #delivery-note-generation .form-group {
margin-bottom: 0px;
}
/* line 44, ../sass/point_sale/_form.scss */
.point-sale-create #delivery-note-generation .form-group label,
.point-sale-update #delivery-note-generation .form-group label {
margin-bottom: 0px;
font-weight: normal;
}
/* line 52, ../sass/point_sale/_form.scss */
.point-sale-create #home-delivery .field-pointsale-is_home_delivery label,
.point-sale-update #home-delivery .field-pointsale-is_home_delivery label {
display: block;
}
/* line 58, ../sass/point_sale/_form.scss */
.point-sale-create #bread-box .field-pointsale-is_bread_box label,
.point-sale-update #bread-box .field-pointsale-is_bread_box label {
display: block;
}

/** /**
Copyright distrib (2018) Copyright distrib (2018)


top: -1px; top: -1px;
margin-right: 3px; margin-right: 3px;
} }
/* line 30, ../sass/setting/_form.scss */
/* line 29, ../sass/setting/_form.scss */
.setting-form .form-group.form-toggle .control-label { .setting-form .form-group.form-toggle .control-label {
position: relative;
/*position: relative;
top: 7px; top: 7px;
left: 10px;
left: 10px;*/
} }
/* line 36, ../sass/setting/_form.scss */
/* line 35, ../sass/setting/_form.scss */
.setting-form .form-group.form-toggle .toggle { .setting-form .form-group.form-toggle .toggle {
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
float: left;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
display: block;
} }
/* line 41, ../sass/setting/_form.scss */
/* line 40, ../sass/setting/_form.scss */
.setting-form .form-group.form-toggle .toggle .toggle-group .btn.toggle-on { .setting-form .form-group.form-toggle .toggle .toggle-group .btn.toggle-on {
color: white; color: white;
} }
/* line 45, ../sass/setting/_form.scss */
/* line 43, ../sass/setting/_form.scss */
.setting-form .form-group.form-toggle .toggle .toggle-group .btn.toggle-off { .setting-form .form-group.form-toggle .toggle .toggle-group .btn.toggle-off {
border-color: white;
color: white;
} }


/** /**

+ 26
- 3
backend/web/js/backend.js Dosyayı Görüntüle

opendistrib_producers_admin(); opendistrib_producers_admin();
opendistrib_user_form(); opendistrib_user_form();
opendistrib_features_index(); opendistrib_features_index();
opendistrib_point_sale_form();
}); });


var UrlManager = { var UrlManager = {
} }
}; };


function opendistrib_point_sale_form() {
if($('.point-sale-form').length) {
opendistrib_point_sale_form_days_distribution_event();
$('#days-distribution .day input[type=checkbox]').change(function() {
opendistrib_point_sale_form_days_distribution_event();
});
}
}

function opendistrib_point_sale_form_days_distribution_event() {
$('#days-distribution .day').each(function() {
var isChecked = $(this).find('input[type=checkbox]').prop('checked');
var $textareaInfos = $(this).find('textarea');
if(isChecked) {
$textareaInfos.show();
}
else {
$textareaInfos.hide();
}
});
}

function opendistrib_user_form() { function opendistrib_user_form() {
if($('#app-user-form').length) { if($('#app-user-form').length) {
var $fieldUserEmail = $('#app-user-form .field-user-email input'); var $fieldUserEmail = $('#app-user-form .field-user-email input');
if (unit == 'piece') { if (unit == 'piece') {
label_price_ttc.html('Prix (la pièce) TTC'); label_price_ttc.html('Prix (la pièce) TTC');
label_price_ht.html('Prix (la pièce) HT'); label_price_ht.html('Prix (la pièce) HT');
label_quantity_max.html('Quantité max par défaut (pièces)');
label_quantity_max.html('Par défaut (pièces)');
} else if (unit == 'g' || unit == 'kg') { } else if (unit == 'g' || unit == 'kg') {
label_price_ttc.html('Prix (au kg) TTC'); label_price_ttc.html('Prix (au kg) TTC');
label_price_ht.html('Prix (au kg) HT'); label_price_ht.html('Prix (au kg) HT');
label_quantity_max.html('Quantité max par défaut (kg)');
label_quantity_max.html('Par défaut (kg)');
label_step.html('Pas (' + unit + ')'); label_step.html('Pas (' + unit + ')');
} else if (unit == 'mL' || unit == 'L') { } else if (unit == 'mL' || unit == 'L') {
label_price_ttc.html('Prix (au litre) TTC'); label_price_ttc.html('Prix (au litre) TTC');
label_price_ht.html('Prix (au litre) HT'); label_price_ht.html('Prix (au litre) HT');
label_quantity_max.html('Quantité max par défaut (litres)');
label_quantity_max.html('Par défaut (litres)');
label_step.html('Pas (' + unit + ')'); label_step.html('Pas (' + unit + ')');
} }



+ 2
- 1
backend/web/js/vuejs/distribution-index.js Dosyayı Görüntüle

}); });


Vue.component('order-form', { Vue.component('order-form', {
props: ['date', 'dateFormat', 'pointsSale', 'idActivePointSale', 'meansPayment', 'users', 'products', 'order', 'orders', 'producer', 'loadingUpdateProductOrder', 'create', 'units'],
props: ['distribution', 'date', 'dateFormat', 'pointsSale', 'idActivePointSale', 'meansPayment', 'users', 'products', 'order', 'orders', 'producer', 'loadingUpdateProductOrder', 'create', 'units'],
emits: ['updateProductPrice', 'updateInvoicePrices'], emits: ['updateProductPrice', 'updateInvoicePrices'],
data: function () { data: function () {
return { return {
axios.get(UrlManager.getBaseUrlAbsolute() + "distribution/ajax-point-sale-favorite", { axios.get(UrlManager.getBaseUrlAbsolute() + "distribution/ajax-point-sale-favorite", {
params: { params: {
idUser: app.order.id_user, idUser: app.order.id_user,
idDistribution: app.distribution.id
} }
}) })
.then(function (response) { .then(function (response) {

+ 11
- 9
backend/web/js/vuejs/document-form.js Dosyayı Görüntüle

var pricesArray = product.prices; var pricesArray = product.prices;
var unitCoefficient = product.unit_coefficient; var unitCoefficient = product.unit_coefficient;


if (theQuantity) {
theQuantity = theQuantity / unitCoefficient;
}
if(pricesArray && unitCoefficient) {
if (theQuantity) {
theQuantity = theQuantity / unitCoefficient;
}


for (var i = 0; i < pricesArray.length; i++) {
if(pricesArray[i]) {
var price = pricesArray[i].price;
var fromQuantity = pricesArray[i].from_quantity;
for (var i = 0; i < pricesArray.length; i++) {
if(pricesArray[i]) {
var price = pricesArray[i].price;
var fromQuantity = pricesArray[i].from_quantity;


if (price < thePrice && fromQuantity <= theQuantity) {
thePrice = price;
if (price < thePrice && fromQuantity <= theQuantity) {
thePrice = price;
}
} }
} }
} }

+ 62
- 0
backend/web/sass/point_sale/_form.scss Dosyayı Görüntüle


.point-sale-create,
.point-sale-update {
#credit {
.field-pointsale-credit {
label {
display: block;
}
}
}

#days-distribution {
.form-group {
margin-bottom: 0px;
label {
font-weight: normal;
}
&.has-success label {
color: #333;
}
.help-block {
display: none;
}
}

.field-pointsale-infos_monday,
.field-pointsale-infos_tuesday,
.field-pointsale-infos_wednesday,
.field-pointsale-infos_thursday,
.field-pointsale-infos_friday,
.field-pointsale-infos_saturday,
.field-pointsale-infos_sunday {
margin-bottom: 10px;
label {
display: none;
}
}
}

#delivery-note-generation {
.form-group {
margin-bottom: 0px;

label {
margin-bottom: 0px;
font-weight: normal;
}
}
}

#home-delivery {
.field-pointsale-is_home_delivery label {
display: block;
}
}

#bread-box {
.field-pointsale-is_bread_box label {
display: block;
}
}
}

+ 53
- 7
backend/web/sass/product/_form.scss Dosyayı Görüntüle



.product-create, .product-create,
.product-update { .product-update {

.field-product-status {
label {
display: block;
}
}

#product-active { #product-active {
label { label {
margin-right: 15px ; margin-right: 15px ;
} }
} }
#days-production,
#availability-points-sale {
margin-top: 30px ;
h2 {
font-size: 20px ;

.field-product-photofile {
label {
display: none;
}
}

#maximum-quantities {
label, .form-control {
width: 49%;
height: 35px;
margin-bottom: 5px;
}
label {
float: left;
line-height: 35px;
}
.form-control {
float: right;
} }
} }


#days-production { #days-production {
padding-left: 3px;

.form-group {
margin-bottom: 7px;
}

label { label {
font-weight: normal ; font-weight: normal ;

input {
position: relative;
top: 1px;
left: -3px;
}
}

.checkbox {
margin-top: 0px;
}

.field-product-sunday {
margin-bottom: 0px;

.checkbox {
margin-bottom: 0px;
}
} }
} }


} }


#product-pointssale { #product-pointssale {
max-height: 300px;
overflow-y: scroll ;

label { label {
display: block; display: block;
font-weight: normal; font-weight: normal;

+ 2
- 6
backend/web/sass/screen.scss Dosyayı Görüntüle

margin-bottom: 30px ; margin-bottom: 30px ;
} }
#submenu {
margin-bottom: 30px ;
text-align: left ;
}
a { a {
margin-bottom: 15px ; margin-bottom: 15px ;
} }
@import "user/_credit.scss" ; @import "user/_credit.scss" ;
@import "user/_form.scss" ; @import "user/_form.scss" ;
@import "producer/_update.scss" ; @import "producer/_update.scss" ;
@import "point_sale/_index.scss" ;
@import "point_sale/_index.scss" ;
@import "point_sale/_form.scss" ;
@import "report/_index.scss" ; @import "report/_index.scss" ;
@import "document/_form.scss" ; @import "document/_form.scss" ;
@import "document/_index.scss" ; @import "document/_index.scss" ;

+ 5
- 7
backend/web/sass/setting/_form.scss Dosyayı Görüntüle

} }


&.form-toggle { &.form-toggle {

.control-label { .control-label {
position: relative;
/*position: relative;
top: 7px; top: 7px;
left: 10px;
left: 10px;*/
} }


.toggle { .toggle {
@include border-radius(20px);
float: left;
@include border-radius(5px);
display: block;


.toggle-group { .toggle-group {
.btn.toggle-on { .btn.toggle-on {
//border-color: white;
color: white; color: white;
} }
.btn.toggle-off { .btn.toggle-off {
border-color: white;
color: white;
} }
} }
} }

+ 3
- 0
backend/web/sass/subscription/_form.scss Dosyayı Görüntüle



.subscription-form { .subscription-form {
#bloc-select-user {
padding-left: 0px;
}
.field-subscriptionform-id { .field-subscriptionform-id {
display: none; display: none;
} }

+ 19
- 0
backend/web/sass/user/_form.scss Dosyayı Görüntüle



.user-create, .user-create,
.user-update { .user-update {

.panel-newsletter {
label {
display: block;
}
}

.panel-point-sales {
label.control-label {
display: none;
}
}

.panel-user-groups {
label.control-label {
display: none;
}
}

#user-points_sale, #user-points_sale,
#user-user_groups { #user-user_groups {
label { label {

+ 6
- 2
common/components/AbstractApi.php Dosyayı Görüntüle

public string $url; public string $url;
public array $auth; public array $auth;


public function __construct(string $url, array $auth)
public function __construct(string $url, array $auth = [])
{ {
$this->url = $url; $this->url = $url;
$this->auth = $auth; $this->auth = $auth;
private function getClient() private function getClient()
{ {
$curl = new Curl(); $curl = new Curl();
$curl->setHeader($this->auth[0], $this->auth[1]);

if(count($this->auth)) {
$curl->setHeader($this->auth[0], $this->auth[1]);
}

return $curl; return $curl;
} }



+ 11
- 0
common/components/ForumFlarumClient.php Dosyayı Görüntüle

<?php

namespace common\components;

class ForumFlarumClient extends AbstractApi
{
public function getLastDiscussions()
{
return $this->get('discussions', ['offset' => 1]);
}
}

+ 11
- 6
common/config/main.php Dosyayı Görüntüle



use common\components\BusinessLogic; use common\components\BusinessLogic;
use common\components\DolibarrApi; use common\components\DolibarrApi;
use common\components\ForumFlarumClient;
use common\logic\Distribution\Distribution\Model\Distribution; use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\Document\DeliveryNote\Model\DeliveryNote; use common\logic\Document\DeliveryNote\Model\DeliveryNote;
use common\logic\Order\Order\Model\Order; use common\logic\Order\Order\Model\Order;
'alwaysdataClient' => [ 'alwaysdataClient' => [
'class' => 'common\components\AlwaysdataClient' 'class' => 'common\components\AlwaysdataClient'
], ],
'forumFlarumClient' => function() {

return new ForumFlarumClient(Yii::$app->logic->getSettingModule()->getAdminSettingBag()->get('forumFlarumUrl').'api/');
},
'dolibarrApi' => function() {
return new DolibarrApi(
Yii::$app->parameterBag->get('dolibarrApiUrl'),
['DOLAPIKEY', \Yii::$app->parameterBag->get('dolibarrApiKey')]
);
},
'assetManager' => [ 'assetManager' => [
'linkAssets' => YII_ENV == "dev" ? 'true' : false, 'linkAssets' => YII_ENV == "dev" ? 'true' : false,
], ],
'enableStrictParsing' => false, 'enableStrictParsing' => false,
'rules' => [], 'rules' => [],
], ],
'dolibarrApi' => function() {
return new DolibarrApi(
Yii::$app->parameterBag->get('dolibarrApiUrl'),
['DOLAPIKEY', \Yii::$app->parameterBag->get('dolibarrApiKey')]
);
},
'logic' => function () { 'logic' => function () {
return new BusinessLogic(); return new BusinessLogic();
}, },

+ 1
- 1
common/config/params.php Dosyayı Görüntüle

*/ */


return [ return [
'version' => '23.12.C',
'version' => '24.1.B',
'maintenanceMode' => false, 'maintenanceMode' => false,
'siteName' => 'Opendistrib', 'siteName' => 'Opendistrib',
'adminEmail' => 'contact@opendistrib.net', 'adminEmail' => 'contact@opendistrib.net',

+ 1
- 1
common/logic/Distribution/Distribution/Export/DistributionReportPdfGenerator.php Dosyayı Görüntüle

} }
.td-order-amount.is-order-paid { .td-order-amount.is-order-paid {
background-color: #f1f1f1;
background-color: #ddd;
} }
', ',
'methods' => [ 'methods' => [

+ 8
- 2
common/logic/Order/Order/Repository/OrderRepository.php Dosyayı Görüntüle

use common\logic\Payment\Service\PaymentSolver; use common\logic\Payment\Service\PaymentSolver;
use common\logic\PointSale\PointSale\Model\PointSale; use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\PointSale\PointSale\Repository\PointSaleRepository; use common\logic\PointSale\PointSale\Repository\PointSaleRepository;
use common\logic\PointSale\PointSale\Service\PointSaleSolver;
use common\logic\PointSale\UserPointSale\Repository\UserPointSaleRepository; use common\logic\PointSale\UserPointSale\Repository\UserPointSaleRepository;
use common\logic\Producer\Producer\Model\Producer; use common\logic\Producer\Producer\Model\Producer;
use common\logic\Producer\Producer\Repository\ProducerRepository; use common\logic\Producer\Producer\Repository\ProducerRepository;
protected InvoiceSolver $invoiceSolver; protected InvoiceSolver $invoiceSolver;
protected PaymentSolver $paymentSolver; protected PaymentSolver $paymentSolver;
protected ProducerSolver $producerSolver; protected ProducerSolver $producerSolver;
protected PointSaleSolver $pointSaleSolver;


public function loadDependencies(): void public function loadDependencies(): void
{ {
$this->invoiceSolver = $this->loadService(InvoiceSolver::class); $this->invoiceSolver = $this->loadService(InvoiceSolver::class);
$this->paymentSolver = $this->loadService(PaymentSolver::class); $this->paymentSolver = $this->loadService(PaymentSolver::class);
$this->producerSolver = $this->loadService(ProducerSolver::class); $this->producerSolver = $this->loadService(ProducerSolver::class);
$this->pointSaleSolver = $this->loadService(PointSaleSolver::class);
} }


public function getDefaultOptionsSearch(): array public function getDefaultOptionsSearch(): array
* Retourne le point de vente favoris d'un utilisateur : le point de vente auquel le client est lié, * Retourne le point de vente favoris d'un utilisateur : le point de vente auquel le client est lié,
* le point de vente de la dernière commande sinon. * le point de vente de la dernière commande sinon.
*/ */
public function getUserFavoritePointSale(User $user): ?PointSale
public function getUserFavoritePointSale(User $user, Distribution $distribution = null): ?PointSale
{ {
$pointSale = null; $pointSale = null;
$arrayUserPointSale = $this->userPointSaleRepository->findUserPointSalesByUser($user);
$arrayUserPointSale = $this->userPointSaleRepository->findUserPointSalesByUser($user, $distribution);


if (count($arrayUserPointSale) == 1) { if (count($arrayUserPointSale) == 1) {
$pointSale = $this->pointSaleRepository->findOnePointSaleById($arrayUserPointSale[0]->id_point_sale); $pointSale = $this->pointSaleRepository->findOnePointSaleById($arrayUserPointSale[0]->id_point_sale);
$lastOrder = $this->findOneOrderLastByUser($user); $lastOrder = $this->findOneOrderLastByUser($user);
if ($lastOrder) { if ($lastOrder) {
$pointSale = $this->pointSaleRepository->findOnePointSaleById($lastOrder->id_point_sale); $pointSale = $this->pointSaleRepository->findOnePointSaleById($lastOrder->id_point_sale);
if($distribution && !$this->pointSaleSolver->isDelivered($pointSale, $distribution)) {
$pointSale = null;
}
} }
} }



+ 3
- 3
common/logic/PointSale/PointSale/Model/PointSale.php Dosyayı Görüntüle

'default' => 'Point de vente par défaut', 'default' => 'Point de vente par défaut',
'id_user' => 'Contact facturation', 'id_user' => 'Contact facturation',
'product_price_percent' => 'Prix produits : pourcentage', 'product_price_percent' => 'Prix produits : pourcentage',
'maximum_number_orders' => 'Nombre maximum de commandes',
'maximum_number_orders' => 'Nombre maximum de commandes par distribution',
'is_bread_box' => 'Boîte à pain', 'is_bread_box' => 'Boîte à pain',
'bread_box_code' => 'Code boîte à pain', 'bread_box_code' => 'Code boîte à pain',
'status' => 'Statut', 'status' => 'Statut',
'button_generate_delivery_note_point_sale' => 'Activer le bouton de génération de bon de livraison par point de vente',
'button_generate_delivery_note_each_user' => 'Activer le bouton de génération de bon de livraison par client',
'button_generate_delivery_note_point_sale' => 'Par point de vente',
'button_generate_delivery_note_each_user' => 'Par client',
'exclude_export_shopping_cart_labels' => "Exclure de l'export d'étiquettes", 'exclude_export_shopping_cart_labels' => "Exclure de l'export d'étiquettes",
'is_home_delivery' => "Livraison à domicile", 'is_home_delivery' => "Livraison à domicile",
'minimum_order_amount' => "Montant minimum de commande (€)" 'minimum_order_amount' => "Montant minimum de commande (€)"

+ 23
- 2
common/logic/PointSale/PointSale/Service/PointSaleSolver.php Dosyayı Görüntüle



use common\helpers\GlobalParam; use common\helpers\GlobalParam;
use common\logic\AbstractService; use common\logic\AbstractService;
use common\logic\Order\Order\Model\Order;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\PointSale\PointSale\Model\PointSale; use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\Producer\Producer\Model\Producer;
use common\logic\SolverInterface; use common\logic\SolverInterface;
use yii\helpers\Html; use yii\helpers\Html;


class PointSaleSolver extends AbstractService implements SolverInterface class PointSaleSolver extends AbstractService implements SolverInterface
{ {
public function filterUserPointSalesByDistribution(array $userPointSaleArray, Distribution $distribution): array
{
foreach($userPointSaleArray as $key => $userPointSale) {
if(!$this->isDelivered($userPointSale->pointSale, $distribution)) {
unset($userPointSaleArray[$key]);
}
}

return $userPointSaleArray;
}

public function isDelivered(PointSale $pointSale, Distribution $distribution): bool
{
foreach($distribution->pointSaleDistribution as $pointSaleDistribution) {
if($pointSaleDistribution->pointSale->id == $pointSale->id && $pointSaleDistribution->delivery) {
return true;
}
}

return false;
}

/** /**
* Retourne le commentaire de l'utilisateur courant lié au point de vente. * Retourne le commentaire de l'utilisateur courant lié au point de vente.
*/ */

+ 8
- 0
common/logic/PointSale/UserPointSale/Module/UserPointSaleModule.php Dosyayı Görüntüle

use common\logic\PointSale\UserPointSale\Repository\UserPointSaleRepository; use common\logic\PointSale\UserPointSale\Repository\UserPointSaleRepository;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleBuilder; use common\logic\PointSale\UserPointSale\Service\UserPointSaleBuilder;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleDefinition; use common\logic\PointSale\UserPointSale\Service\UserPointSaleDefinition;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleSolver;


/** /**
* @mixin UserPointSaleDefinition * @mixin UserPointSaleDefinition
* @mixin UserPointSaleRepository * @mixin UserPointSaleRepository
* @mixin UserPointSaleBuilder * @mixin UserPointSaleBuilder
* @mixin UserPointSaleSolver
*/ */
class UserPointSaleModule extends AbstractModule class UserPointSaleModule extends AbstractModule
{ {
UserPointSaleDefinition::class, UserPointSaleDefinition::class,
UserPointSaleRepository::class, UserPointSaleRepository::class,
UserPointSaleBuilder::class, UserPointSaleBuilder::class,
UserPointSaleSolver::class
]; ];
} }


{ {
return UserPointSaleBuilder::getInstance(); return UserPointSaleBuilder::getInstance();
} }

public function getSolver(): UserPointSaleSolver
{
return UserPointSaleSolver::getInstance();
}
} }

+ 12
- 3
common/logic/PointSale/UserPointSale/Repository/UserPointSaleRepository.php Dosyayı Görüntüle

namespace common\logic\PointSale\UserPointSale\Repository; namespace common\logic\PointSale\UserPointSale\Repository;


use common\logic\AbstractRepository; use common\logic\AbstractRepository;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\PointSale\PointSale\Model\PointSale; use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\PointSale\UserPointSale\Model\UserPointSale;
use common\logic\PointSale\PointSale\Service\PointSaleSolver;
use common\logic\User\User\Model\User; use common\logic\User\User\Model\User;


class UserPointSaleRepository extends AbstractRepository class UserPointSaleRepository extends AbstractRepository
{ {
protected UserPointSaleRepositoryQuery $query; protected UserPointSaleRepositoryQuery $query;
protected PointSaleSolver $pointSaleSolver;


public function loadDependencies(): void public function loadDependencies(): void
{ {
$this->loadQuery(UserPointSaleRepositoryQuery::class); $this->loadQuery(UserPointSaleRepositoryQuery::class);
$this->pointSaleSolver = $this->loadService(PointSaleSolver::class);
} }


public function getDefaultOptionsSearch(): array public function getDefaultOptionsSearch(): array
] ; ] ;
} }


public function findUserPointSalesByUser(User $user): array
public function findUserPointSalesByUser(User $user, Distribution $distribution = null): array
{ {
return $this->createDefaultQuery()
$userPointSalesArray = $this->createDefaultQuery()
->joinPointSale() ->joinPointSale()
->filterByUser($user) ->filterByUser($user)
->find(); ->find();

if($distribution) {
$userPointSalesArray = $this->pointSaleSolver->filterUserPointSalesByDistribution($userPointSalesArray, $distribution);
}

return $userPointSalesArray;
} }


public function findOneUserPointSale(User $user = null, PointSale $pointSale = null) public function findOneUserPointSale(User $user = null, PointSale $pointSale = null)

+ 10
- 0
common/logic/PointSale/UserPointSale/Service/UserPointSaleSolver.php Dosyayı Görüntüle

<?php

namespace common\logic\PointSale\UserPointSale\Service;

use common\logic\AbstractSolver;

class UserPointSaleSolver extends AbstractSolver
{

}

+ 5
- 0
common/logic/Producer/Producer/Module/ProducerModule.php Dosyayı Görüntüle

return ProducerManager::getInstance(); return ProducerManager::getInstance();
} }


public function getManager(): ProducerManager
{
return ProducerManager::getInstance();
}

public function getProducerPageSizer(): ProducerPageSizer public function getProducerPageSizer(): ProducerPageSizer
{ {
return ProducerPageSizer::getInstance(); return ProducerPageSizer::getInstance();

+ 8
- 0
common/logic/Producer/Producer/Repository/ProducerRepository.php Dosyayı Görüntüle

use common\logic\Producer\Producer\Model\Producer; use common\logic\Producer\Producer\Model\Producer;
use common\logic\Producer\Producer\Service\ProducerSolver; use common\logic\Producer\Producer\Service\ProducerSolver;
use common\logic\Producer\ProducerPriceRange\Repository\ProducerPriceRangeRepository; use common\logic\Producer\ProducerPriceRange\Repository\ProducerPriceRangeRepository;
use common\logic\Setting\AdminSettingBag;
use common\logic\User\User\Model\User; use common\logic\User\User\Model\User;
use yii\helpers\Html; use yii\helpers\Html;


return $count; return $count;
} }


public function countCacheProducersActiveWithTurnover(): int
{
return \Yii::$app->cache->getOrSet('count_producers_active', function () {
return $this->countProducersActiveWithTurnover();
}, 60 * 60 * 24);
}

public function findProducers() public function findProducers()
{ {
return $this->createQuery()->find(); return $this->createQuery()->find();

+ 23
- 0
common/logic/Producer/Producer/Service/ProducerManager.php Dosyayı Görüntüle

use common\logic\AbstractService; use common\logic\AbstractService;
use common\logic\Producer\Producer\Model\Producer; use common\logic\Producer\Producer\Model\Producer;
use common\logic\ManagerInterface; use common\logic\ManagerInterface;
use common\logic\Producer\Producer\Repository\ProducerRepository;
use common\logic\Setting\AdminSettingBag;


class ProducerManager extends AbstractService implements ManagerInterface class ProducerManager extends AbstractService implements ManagerInterface
{ {
protected AdminSettingBag $adminSettingBag;
protected ProducerRepository $producerRepository;

public function loadDependencies(): void
{
$this->adminSettingBag = $this->loadService(AdminSettingBag::class);
$this->producerRepository = $this->loadService(ProducerRepository::class);
}

public function sendEmailNewProducer(Producer $producer): void public function sendEmailNewProducer(Producer $producer): void
{ {
\Yii::$app->mailerService->sendAdmin( \Yii::$app->mailerService->sendAdmin(
] ]
); );
} }

public function isProducerSignupOpen(): bool
{
return $this->adminSettingBag->get('maximumNumberProducers')
> $this->producerRepository->countCacheProducersActiveWithTurnover();
}

public function getProducerSignupRemainingPlaces(): int
{
return max($this->adminSettingBag->get('maximumNumberProducers')
- $this->producerRepository->countCacheProducersActiveWithTurnover(), 0);
}
} }

+ 9
- 9
common/logic/Product/Product/Model/Product.php Dosyayı Görüntüle

'saturday' => 'Samedi', 'saturday' => 'Samedi',
'sunday' => 'Dimanche', 'sunday' => 'Dimanche',
'order' => 'Ordre', 'order' => 'Ordre',
'quantity_max' => 'Quantité max par défaut',
'quantity_max_monday' => 'Quantité max : lundi',
'quantity_max_tuesday' => 'Quantité max : mardi',
'quantity_max_wednesday' => 'Quantité max : mercredi',
'quantity_max_thursday' => 'Quantité max : jeudi',
'quantity_max_friday' => 'Quantité max : vendredi',
'quantity_max_saturday' => 'Quantité max : samedi',
'quantity_max_sunday' => 'Quantité max : dimanche',
'quantity_max' => 'Par défaut',
'quantity_max_monday' => 'Lundi',
'quantity_max_tuesday' => 'Mardi',
'quantity_max_wednesday' => 'Mercredi',
'quantity_max_thursday' => 'Jeudi',
'quantity_max_friday' => 'Vendredi',
'quantity_max_saturday' => 'Samedi',
'quantity_max_sunday' => 'Dimanche',
'unavailable' => 'Épuisé', 'unavailable' => 'Épuisé',
'apply_distributions' => 'Appliquer ces modifications dans les distributions futures',
'apply_distributions' => 'Appliquer ces modifications dans les distributions à venir',
'unit' => 'Unité', 'unit' => 'Unité',
'step' => 'Pas', 'step' => 'Pas',
'id_tax_rate' => 'TVA', 'id_tax_rate' => 'TVA',

+ 25
- 0
common/logic/Product/Product/Service/ProductSolver.php Dosyayı Görüntüle

use common\logic\AbstractService; use common\logic\AbstractService;
use common\logic\Config\Unit\Service\UnitDefinition; use common\logic\Config\Unit\Service\UnitDefinition;
use common\logic\Config\Unit\Service\UnitSolver; use common\logic\Config\Unit\Service\UnitSolver;
use common\logic\Order\ProductOrder\Model\ProductOrder;
use common\logic\PointSale\PointSale\Model\PointSale; use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\PointSale\PointSale\Service\PointSaleSolver; use common\logic\PointSale\PointSale\Service\PointSaleSolver;
use common\logic\Product\Product\Model\Product; use common\logic\Product\Product\Model\Product;
return $product->price; return $product->price;
} }


public function getPriceUnitReference(Product $product): ?float
{
$productPrice = $product->price;
if($product->unit == 'piece') {
if($product->weight) {
$price = (1000 * $productPrice) / $product->weight;
}
else {
return null;
}
}
else {
$price = $product->price;
}

return $price;
}

public function getPriceUnitReferenceWithTax(Product $product)
{
$taxRateValue = $product->taxRate ? $product->taxRate->value : 0;
return Price::getPriceWithTax($this->getPriceUnitReference($product), $taxRateValue);
}

/** /**
* Retourne le prix du produit avec taxe * Retourne le prix du produit avec taxe
*/ */

+ 8
- 2
common/logic/Setting/SettingDetails/Admin/AdminSettingDefinition.php Dosyayı Görüntüle

use common\logic\Setting\SettingDefinition; use common\logic\Setting\SettingDefinition;
use common\logic\Setting\SettingDetails\Admin\General\AdministratorEmailAdminSetting; use common\logic\Setting\SettingDetails\Admin\General\AdministratorEmailAdminSetting;
use common\logic\Setting\SettingDetails\Admin\General\AdministratorPhoneNumberAdminSetting; use common\logic\Setting\SettingDetails\Admin\General\AdministratorPhoneNumberAdminSetting;
use common\logic\Setting\SettingDetails\Admin\General\ForumFlarumUrlAdminSetting;
use common\logic\Setting\SettingDetails\Admin\General\MaximumNumberProducersAdminSetting;
use common\logic\Setting\SettingDetails\Admin\General\SupportDeveloperOnlineAdminSetting;


class AdminSettingDefinition extends SettingDefinition class AdminSettingDefinition extends SettingDefinition
{ {
return [ return [
self::SECTION_GENERAL => [ self::SECTION_GENERAL => [
self::SUBSECTION_GENERAL => [ self::SUBSECTION_GENERAL => [
new AdministratorEmailAdminSetting,
new AdministratorPhoneNumberAdminSetting,
new SupportDeveloperOnlineAdminSetting(),
new AdministratorEmailAdminSetting(),
new AdministratorPhoneNumberAdminSetting(),
new MaximumNumberProducersAdminSetting(),
new ForumFlarumUrlAdminSetting(),
] ]
], ],
]; ];

+ 17
- 0
common/logic/Setting/SettingDetails/Admin/General/ForumFlarumUrlAdminSetting.php Dosyayı Görüntüle

<?php

namespace common\logic\Setting\SettingDetails\Admin\General;

use common\logic\Setting\SettingDetails\AbstractSettingDetail;

class ForumFlarumUrlAdminSetting extends AbstractSettingDetail
{
public function __construct()
{
$this
->setName('forumFlarumUrl')
->setLabel("Url du forum Flarum")
->setTypeString()
->setFormTypeInput();
}
}

+ 17
- 0
common/logic/Setting/SettingDetails/Admin/General/MaximumNumberProducersAdminSetting.php Dosyayı Görüntüle

<?php

namespace common\logic\Setting\SettingDetails\Admin\General;

use common\logic\Setting\SettingDetails\AbstractSettingDetail;

class MaximumNumberProducersAdminSetting extends AbstractSettingDetail
{
public function __construct()
{
$this
->setName('maximumNumberProducers')
->setLabel("Nombre maximum de producteurs")
->setTypeInteger()
->setFormTypeInput();
}
}

+ 17
- 0
common/logic/Setting/SettingDetails/Admin/General/SupportDeveloperOnlineAdminSetting.php Dosyayı Görüntüle

<?php

namespace common\logic\Setting\SettingDetails\Admin\General;

use common\logic\Setting\SettingDetails\AbstractSettingDetail;

class SupportDeveloperOnlineAdminSetting extends AbstractSettingDetail
{
public function __construct()
{
$this
->setName('supportDeveloperOnline')
->setLabel("Support : développeur disponible")
->setTypeBoolean()
->setFormTypeToggle();
}
}

+ 20
- 17
common/logic/User/User/Service/UserSolver.php Dosyayı Görüntüle

return $user->type == User::TYPE_GUEST; return $user->type == User::TYPE_GUEST;
} }


public function getUsernameFromArray(array $modelArray, $withType = false): string
{
$username = '';
if (isset($modelArray['name_legal_person']) && strlen($modelArray['name_legal_person'])) {
$username = $modelArray['name_legal_person'];
} else {
$username = $modelArray['lastname'] . ' ' . $modelArray['name'];
}

if ($withType && $modelArray['type'] == User::TYPE_LEGAL_PERSON) {
$username = $username . ' (personne morale)';
}

return $username;
}

public function getContactSummaryFromArrayAsHtml(array $user): string public function getContactSummaryFromArrayAsHtml(array $user): string
{ {
$html = ''; $html = '';
$username = $user->lastname . ' ' . $user->name; $username = $user->lastname . ' ' . $user->name;
} }


if ($withType) {
if ($withType && $this->isTypeLegalPerson($user)) {
$username = $username . ' (personne morale)';
}

return $username;
}

public function getUsernameFromArray(array $modelArray, $withType = false): string
{
$username = 'Nom indéfini';
if ($modelArray['type'] == User::TYPE_LEGAL_PERSON
&& isset($modelArray['name_legal_person'])
&& strlen($modelArray['name_legal_person'])) {
$username = $modelArray['name_legal_person'];
} elseif((isset($modelArray['lastname']) && $modelArray['lastname'])
|| (isset($modelArray['name']) && $modelArray['name'])) {
$username = $modelArray['lastname'] . ' ' . $modelArray['name'];
}

if ($withType && $modelArray['type'] == User::TYPE_LEGAL_PERSON) {
$username = $username . ' (personne morale)'; $username = $username . ' (personne morale)';
} }



+ 1
- 1
common/versions/23.12.C.php Dosyayı Görüntüle

[ [
"[Administration] Utilisateur : correctif affichage nom personne légale", "[Administration] Utilisateur : correctif affichage nom personne légale",
"[Administration] Distributions > Synchronisation Tiller : activation uniquement le jour des distribution", "[Administration] Distributions > Synchronisation Tiller : activation uniquement le jour des distribution",
"[Administration] Export commandes PDF : correctif problème caractère "<" dans le nom des produits",
"[Administration] Export commandes PDF : correctif problème caractère \"<\" dans le nom des produits",
] ]
], ],
[ [

+ 25
- 0
common/versions/24.1.A.php Dosyayı Görüntüle

<?php

require_once dirname(__FILE__).'/_macros.php';

version(
'15/01/2024',
[
[
"[Administration] Export commandes PDF : cellule du montant en gris quand la commande est payée",
"[Administration] Distribution > Création commande : ajout lien pour créer un utilisateur",
"[Boutique] Commander : affichage du prix au kg pour les produits vendus à la pièce"
],
[
]
],
[
[
],
[
]
],
$userCurrent
);

?>

+ 29
- 0
common/versions/24.1.B.php Dosyayı Görüntüle

<?php

require_once dirname(__FILE__).'/_macros.php';

version(
'29/01/2024',
[
[
"[Boutique] Accueil > texte de présentation : édition texte avancée (Paramètres > Description)",
"[Boutique] Commande : message d'alerte si modification de commande",
"[Administration] Ergonomie formulaires produit, point de vente, abonnement et utilisateur",
"[Administration] Support : icône et message indiquant que le développeur est actuellement disponible"
],
[
"[Administration] Commande > édition commande : correctif point de vente par défaut",
"[Administration] Utilisateurs : correctif nom d'utilisateur particuliers avec libellé personnes morales défini"
]
],
[
[
"[Administration & site] Nombre maximum de producteurs"
],
[
]
],
$userCurrent
);

?>

+ 22
- 0
console/commands/ProducerDescriptionNl2brController.php Dosyayı Görüntüle

<?php

namespace console\commands;

use common\logic\Producer\Producer\Module\ProducerModule;
use yii\console\Controller;

class ProducerDescriptionNl2brController extends Controller
{
// ./yii producer-description-nl2br/apply
public function actionApply()
{
$producerModule = ProducerModule::getInstance();

foreach($producerModule->getRepository()->findProducers() as $producer) {
$producer->description = nl2br($producer->description);
$producer->save();
}
}
}

?>

+ 5
- 2
frontend/controllers/SiteController.php Dosyayı Görüntüle

*/ */
public function actionIndex() public function actionIndex()
{ {
return $this->render('index');
return $this->render('index', [
'maximumNumberProducers' => $this->getSettingModule()->getAdminSettingBag()->get('maximumNumberProducers'),
'countProducersActive' => $this->getProducerModule()->getRepository()->countCacheProducersActiveWithTurnover()
]);
} }


public function actionService() public function actionService()
$userModule = $this->getUserModule(); $userModule = $this->getUserModule();
$orderModule = $this->getOrderModule(); $orderModule = $this->getOrderModule();


$countProducersActive = $producerModule->countProducersActiveWithTurnover();
$countProducersActive = $producerModule->getRepository()->countProducersActiveWithTurnover();
$timeSavedByProducersAverage = $producerModule->getTimeSavedByProducersAverage(); $timeSavedByProducersAverage = $producerModule->getTimeSavedByProducersAverage();
$countProducersWithOptionTimeSaved = $producerModule->countProducersWithTimeSaved(); $countProducersWithOptionTimeSaved = $producerModule->countProducersWithTimeSaved();
$countPointSalesActive = $pointSaleModule->countPointSalesActiveLastThreeMonths(); $countPointSalesActive = $pointSaleModule->countPointSalesActiveLastThreeMonths();

+ 6
- 0
frontend/views/layouts/main.php Dosyayı Görüntüle

*/ */


use common\helpers\GlobalParam; use common\helpers\GlobalParam;
use common\logic\Setting\SettingModule;
use common\logic\User\User\Module\UserModule; use common\logic\User\User\Module\UserModule;
use yii\helpers\Html; use yii\helpers\Html;
use yii\bootstrap\Nav; use yii\bootstrap\Nav;
if ($isUserCurrentGrantedAsProducer) { if ($isUserCurrentGrantedAsProducer) {
$producer = Producer::searchOne(['id' => \Yii::$app->user->identity->id_producer]); $producer = Producer::searchOne(['id' => \Yii::$app->user->identity->id_producer]);
} }
$settingModule = SettingModule::getInstance();
$adminSettingBag = $settingModule->getAdminSettingBag();


?> ?>
<?php $this->beginPage() ?> <?php $this->beginPage() ?>
<div class="container"> <div class="container">
<a href="<?php echo $this->getUrlManager()->createUrl('site/service'); ?>">Fonctionnalités, services & tarifs</a> <span class="bull">&bull;</span> <a href="<?php echo $this->getUrlManager()->createUrl('site/service'); ?>">Fonctionnalités, services & tarifs</a> <span class="bull">&bull;</span>
<a href="<?php echo $this->getUrlManager()->createUrl('site/opinion'); ?>">Avis & suggestions</a> <span class="bull">&bull;</span> <a href="<?php echo $this->getUrlManager()->createUrl('site/opinion'); ?>">Avis & suggestions</a> <span class="bull">&bull;</span>
<?php if($adminSettingBag->get('forumFlarumUrl')): ?>
<!--<a href="<?php echo $adminSettingBag->get('forumFlarumUrl'); ?>">Forum</a> <span class="bull">&bull;</span>-->
<?php endif; ?>
<a href="<?php echo $this->getUrlManager()->createUrl('site/mentions'); ?>">Mentions légales</a> <span class="bull">&bull;</span> <a href="<?php echo $this->getUrlManager()->createUrl('site/mentions'); ?>">Mentions légales</a> <span class="bull">&bull;</span>
<a href="<?php echo $this->getUrlManager()->createUrl('site/cgv'); ?>">Conditions générales de service</a> <span class="bull">&bull;</span> <a href="<?php echo $this->getUrlManager()->createUrl('site/cgv'); ?>">Conditions générales de service</a> <span class="bull">&bull;</span>
<a href="<?php echo $this->getUrlManager()->createUrl('site/source-code'); ?>">Code source</a> <a href="<?php echo $this->getUrlManager()->createUrl('site/source-code'); ?>">Code source</a>

+ 20
- 0
frontend/views/site/_button_producer_signup.php Dosyayı Görüntüle

<?php
$producerModule = $this->getProducerModule();
$producerSignupRemainingPlaces = $producerModule->getManager()->getProducerSignupRemainingPlaces();

if (Yii::$app->user->isGuest): ?>
<?php if($producerModule->getManager()->isProducerSignupOpen()): ?>
<a class="btn btn-primary"
href="<?= \Yii::$app->urlManagerFrontend->createUrl(['site/signup']); ?>">
<span class="glyphicon glyphicon-user"></span> Je crée mon espace producteur
</a><br />
<strong><?= ($producerSignupRemainingPlaces); ?></strong>
place<?php if($producerSignupRemainingPlaces > 1): ?>s<?php endif; ?> restante<?php if($producerSignupRemainingPlaces > 1): ?>s<?php endif; ?>
<?php else: ?>
<div class="label label-warning label-producer-signup-closed">
La plateforme n'accueille pas de nouveaux producteurs pour le moment
</div>
<?php endif; ?>
<br />
<br />
<?php endif; ?>

+ 7
- 11
frontend/views/site/index.php Dosyayı Görüntüle

$this->setTitle('Un outil pour organiser des ventes en circuit court'); $this->setTitle('Un outil pour organiser des ventes en circuit court');
$this->setMeta('description', 'Simplifiez la distribution de vos produits en circuit court grâce à des outils web adaptés.'); $this->setMeta('description', 'Simplifiez la distribution de vos produits en circuit court grâce à des outils web adaptés.');


$producerModule = $this->getProducerModule();

?> ?>


<div class="row" id="row-users-producers"> <div class="row" id="row-users-producers">
<div class="word-animate"><span class="functionality"></span></div> <div class="word-animate"><span class="functionality"></span></div>
</div> </div>
<div class="links"> <div class="links">
<?php if (Yii::$app->user->isGuest): ?>
<a class="btn btn-primary"
href="<?= \Yii::$app->urlManagerFrontend->createUrl(['site/signup']); ?>">
<span class="glyphicon glyphicon-user"></span> Je crée mon espace
</a>
<?php endif; ?>
<?= $this->render('_button_producer_signup'); ?>
<a class="btn btn-default" <a class="btn btn-default"
href="<?= \Yii::$app->urlManagerFrontend->createUrl(['site/service']); ?>"> href="<?= \Yii::$app->urlManagerFrontend->createUrl(['site/service']); ?>">
<span class="glyphicon glyphicon-plus-sign"></span> En savoir plus <span class="glyphicon glyphicon-plus-sign"></span> En savoir plus
</a> </a>
<?php if (Yii::$app->user->isGuest): ?><br /><?php endif; ?>
<a class="btn btn-default" href="<?= \Yii::$app->parameterBag->get('appointmentUrl'); ?>" target="_blank"> <a class="btn btn-default" href="<?= \Yii::$app->parameterBag->get('appointmentUrl'); ?>" target="_blank">
<span class="glyphicon glyphicon-education"></span> Je demande une démo <span class="glyphicon glyphicon-education"></span> Je demande une démo
</a> </a>
<?php if (Yii::$app->user->isGuest): ?> <?php if (Yii::$app->user->isGuest): ?>
<a class="btn btn-default"
href="<?= \Yii::$app->urlManagerFrontend->createUrl(['site/producer', 'id' => 32]); ?>">
<span class="glyphicon glyphicon-check"></span> Je teste le logiciel
</a>
<a class="btn btn-default"
href="<?= \Yii::$app->urlManagerFrontend->createUrl(['site/producer', 'id' => 32]); ?>">
<span class="glyphicon glyphicon-check"></span> Je teste le logiciel
</a>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </div>

+ 4
- 6
frontend/views/site/service.php Dosyayı Görüntüle



use yii\helpers\Html; use yii\helpers\Html;


$producerModule = $this->getProducerModule();

$this->setTitle('Fonctionnalités, services & tarifs'); $this->setTitle('Fonctionnalités, services & tarifs');
$this->setIcon('console'); $this->setIcon('console');
//$this->setMeta('description', ''); //$this->setMeta('description', '');
</div> </div>
<div class="panel-body"> <div class="panel-body">
<p class="text-center"> <p class="text-center">
<?= $this->render('_button_producer_signup'); ?>
<?php if (Yii::$app->user->isGuest): ?> <?php if (Yii::$app->user->isGuest): ?>
<a class="btn btn-default"
href="<?= $this->getUrlManagerFrontend()->createUrl(['site/signup']); ?>">
<span class="glyphicon glyphicon-user"></span> Je crée un espace producteur
</a>
<?php endif; ?>
<a class="btn btn-default" <a class="btn btn-default"
href="<?= $this->getUrlManagerFrontend()->createUrl(['site/producer', 'id' => 32]); ?>"> href="<?= $this->getUrlManagerFrontend()->createUrl(['site/producer', 'id' => 32]); ?>">
<span class="glyphicon glyphicon-check"></span> Je teste le logiciel <span class="glyphicon glyphicon-check"></span> Je teste le logiciel
</a> </a>
<?php endif; ?>
<a class="btn btn-default" href="<?= \Yii::$app->parameterBag->get('appointmentUrl'); ?>" <a class="btn btn-default" href="<?= \Yii::$app->parameterBag->get('appointmentUrl'); ?>"
target="_blank"> target="_blank">
<span class="glyphicon glyphicon-education"></span> Je demande une démo <span class="glyphicon glyphicon-education"></span> Je demande une démo
</a> </a>
<br><br>
<a class="btn btn-default" <a class="btn btn-default"
href="<?= $this->getUrlManagerFrontend()->createUrl(['site/about']); ?>"> href="<?= $this->getUrlManagerFrontend()->createUrl(['site/about']); ?>">
<span class="glyphicon glyphicon-info-sign"></span> À propos <span class="glyphicon glyphicon-info-sign"></span> À propos

+ 5
- 3
frontend/views/site/signup.php Dosyayı Görüntüle

<label class="btn btn-default <?php if($model->option_user_producer == 'user' || !$model->option_user_producer): ?>active<?php endif; ?>"> <label class="btn btn-default <?php if($model->option_user_producer == 'user' || !$model->option_user_producer): ?>active<?php endif; ?>">
<input type="radio" name="SignupForm[option_user_producer]" value="user" id="option-user" autocomplete="off" <?php if($model->option_user_producer == 'user' || !$model->option_user_producer): ?>checked<?php endif; ?>> Je suis client <input type="radio" name="SignupForm[option_user_producer]" value="user" id="option-user" autocomplete="off" <?php if($model->option_user_producer == 'user' || !$model->option_user_producer): ?>checked<?php endif; ?>> Je suis client
</label> </label>
<label class="btn btn-default <?php if($model->option_user_producer == 'producer'): ?>active<?php endif; ?>">
<input type="radio" name="SignupForm[option_user_producer]" value="producer" id="option-producer" autocomplete="off" <?php if($model->option_user_producer == 'producer'): ?>checked<?php endif; ?>> Je suis producteur
</label>
<?php if($this->getProducerModule()->getManager()->isProducerSignupOpen()): ?>
<label class="btn btn-default <?php if($model->option_user_producer == 'producer'): ?>active<?php endif; ?>">
<input type="radio" name="SignupForm[option_user_producer]" value="producer" id="option-producer" autocomplete="off" <?php if($model->option_user_producer == 'producer'): ?>checked<?php endif; ?>> Je suis producteur
</label>
<?php endif; ?>
</div> </div>


<div id="fields-producer"> <div id="fields-producer">

+ 161
- 157
frontend/web/css/screen.css
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 7
- 7
frontend/web/sass/_responsive.scss Dosyayı Görüntüle

*/ */


@media screen and (min-width: 768px) { @media screen and (min-width: 768px) {
.equal, .equal > div[class*='col-'] {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
flex: 1 1 auto;
.home #row-users-producers {
.producer, .users {
.panel-body {
height: 260px;
}
}
} }
} }


} }


.home { .home {

#content #presentation-distrib h3 { #content #presentation-distrib h3 {
color: $courant; color: $courant;
} }

+ 10
- 1
frontend/web/sass/screen.scss Dosyayı Görüntüle

} }
} }


.label-producer-signup-closed {
font-size: 14px;
}

#row-users-producers { #row-users-producers {
width: 100%; width: 100%;
text-align: center; text-align: center;
right: 6px; right: 6px;
} }
} }

} }
} }


} }
} }


#content .site-service {
#panel-go-further {
text-align: center;
}
}

#content #mentions { #content #mentions {
padding-top: 20px; padding-top: 20px;



+ 3
- 1
producer/controllers/OrderController.php Dosyayı Görüntüle

$orderModule = $this->getOrderModule(); $orderModule = $this->getOrderModule();
$producerModule = $this->getProducerModule(); $producerModule = $this->getProducerModule();
$userModule = $this->getUserModule(); $userModule = $this->getUserModule();
$productOrderModule = $this->getProductOrderModule();


$producer = $this->getProducerCurrent(); $producer = $this->getProducerCurrent();
$redirect = null; $redirect = null;
true true
) . ')', ) . ')',
], ],
'unit_amount' => $productOrder->price * 100 * $productOrder->quantity,
'unit_amount' => intval($productOrderModule->getSolver()->getPriceWithTax($productOrder) * 100 * $productOrder->quantity),
], ],
'quantity' => 1, 'quantity' => 1,
]; ];
[ [
'unit_coefficient' => Product::$unitsArray[$product->unit]['coefficient'], 'unit_coefficient' => Product::$unitsArray[$product->unit]['coefficient'],
'prices' => $productModule->getPriceArray($product, $user, $pointSale), 'prices' => $productModule->getPriceArray($product, $user, $pointSale),
'price_unit_ref' => $productModule->getSolver()->getPriceUnitReferenceWithTax($product),
'productDistribution' => $product['productDistribution'], 'productDistribution' => $product['productDistribution'],
'productPointSale' => $product['productPointSale'], 'productPointSale' => $product['productPointSale'],
] ]

+ 11
- 1
producer/views/order/order.php Dosyayı Görüntüle

<div class="clr"></div> <div class="clr"></div>
</div> </div>
<div class="content"> <div class="content">
<div v-if="order" class="alert alert-warning alert-edit-order">
<div class="glyphicon glyphicon-pencil"></div>
Attention, vous êtes en train de modifier votre commande du <strong>{{ dateFormat }}</strong>.
</div>
<div v-if="errors && errors.length" class="alert alert-danger"> <div v-if="errors && errors.length" class="alert alert-danger">
<ul> <ul>
<li v-for="error in errors"> <li v-for="error in errors">
<div> <div>
{{ formatPrice(getBestProductPrice(product.id, {{ formatPrice(getBestProductPrice(product.id,
product.quantity_form)) }}<br/> product.quantity_form)) }}<br/>
<span class="unit">{{ product.wording_unit }}</span>
<span class="price-infos">{{ product.wording_unit }}</span>
<template v-if="product.unit == 'piece' && product.weight">
<br />
<span class="price-infos">
{{ formatPrice(product.price_unit_ref) }} / kg
</span>
</template>
</div> </div>
<div v-if="productHasPriceWithFromQuantity(product)" <div v-if="productHasPriceWithFromQuantity(product)"
class="alert alert-info decreasing-prices"> class="alert alert-info decreasing-prices">

+ 1
- 1
producer/views/site/index.php Dosyayı Görüntüle

<section id="presentation"> <section id="presentation">
<?php if (strlen($producer->description)): ?> <?php if (strlen($producer->description)): ?>
<div class="description"> <div class="description">
<?= nl2br(Html::encode($producer->description)); ?>
<?= $producer->description; ?>
</div> </div>
<?php endif; ?> <?php endif; ?>
<div class="clr"></div> <div class="clr"></div>

+ 88
- 74
producer/web/css/screen.css Dosyayı Görüntüle

width: 100%; width: 100%;
max-width: 500px; max-width: 500px;
} }
/* line 55, ../sass/site/_index.scss */
/* line 54, ../sass/site/_index.scss */
.site-index #presentation .description strong {
font-weight: bold;
}
/* line 58, ../sass/site/_index.scss */
.site-index #presentation .description em {
font-style: italic;
}
/* line 62, ../sass/site/_index.scss */
.site-index #presentation .description a {
color: black;
text-decoration: underline;
}
/* line 70, ../sass/site/_index.scss */
.site-index #points-sale .name { .site-index #points-sale .name {
color: #333; color: #333;
} }
/* line 57, ../sass/site/_index.scss */
/* line 72, ../sass/site/_index.scss */
.site-index #points-sale .name .the-name { .site-index #points-sale .name .the-name {
font-family: "capsuularegular"; font-family: "capsuularegular";
font-size: 20px; font-size: 20px;
color: black; color: black;
} }
/* line 67, ../sass/site/_index.scss */
/* line 82, ../sass/site/_index.scss */
.site-index #points-sale .days small { .site-index #points-sale .days small {
color: gray; color: gray;
} }
/* line 76, ../sass/site/_index.scss */
/* line 91, ../sass/site/_index.scss */
.site-index #products h4 { .site-index #products h4 {
font-family: "highvoltageregular"; font-family: "highvoltageregular";
font-size: 22px; font-size: 22px;
padding-top: 13px; padding-top: 13px;
text-transform: uppercase !important; text-transform: uppercase !important;
} }
/* line 84, ../sass/site/_index.scss */
/* line 99, ../sass/site/_index.scss */
.site-index #products td.photo { .site-index #products td.photo {
width: 100px; width: 100px;
} }
/* line 86, ../sass/site/_index.scss */
/* line 101, ../sass/site/_index.scss */
.site-index #products td.photo img.photo-product { .site-index #products td.photo img.photo-product {
width: 120px; width: 120px;
height: auto; height: auto;
} }
/* line 92, ../sass/site/_index.scss */
/* line 107, ../sass/site/_index.scss */
.site-index #products .name { .site-index #products .name {
color: #333; color: #333;
} }
/* line 94, ../sass/site/_index.scss */
/* line 109, ../sass/site/_index.scss */
.site-index #products .name .the-name { .site-index #products .name .the-name {
font-family: "capsuularegular"; font-family: "capsuularegular";
font-size: 20px; font-size: 20px;
.order-order #main #app-order-order #distribution-date, .order-order #main #app-order-order #order-distribution-date { .order-order #main #app-order-order #distribution-date, .order-order #main #app-order-order #order-distribution-date {
display: none; display: none;
} }
/* line 21, ../sass/order/_order.scss */
/* line 27, ../sass/order/_order.scss */
.order-order #main #app-order-order .slide-enter-active { .order-order #main #app-order-order .slide-enter-active {
transition: all .2s ease; transition: all .2s ease;
} }
/* line 25, ../sass/order/_order.scss */
/* line 31, ../sass/order/_order.scss */
.order-order #main #app-order-order .slide-leave-active { .order-order #main #app-order-order .slide-leave-active {
transition: all 0s ease; transition: all 0s ease;
} }
/* line 28, ../sass/order/_order.scss */
/* line 34, ../sass/order/_order.scss */
.order-order #main #app-order-order .slide-enter, .order-order #main #app-order-order .slide-leave-to { .order-order #main #app-order-order .slide-enter, .order-order #main #app-order-order .slide-leave-to {
transform: translateX(10px); transform: translateX(10px);
opacity: 0; opacity: 0;
} }
/* line 33, ../sass/order/_order.scss */
/* line 39, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps { .order-order #main #app-order-order #steps {
margin-bottom: 20px; margin-bottom: 20px;
} }
/* line 35, ../sass/order/_order.scss */
/* line 41, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul { .order-order #main #app-order-order #steps ul {
height: 70px; height: 70px;
} }
/* line 38, ../sass/order/_order.scss */
/* line 44, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li { .order-order #main #app-order-order #steps ul li {
text-align: center; text-align: center;
padding-right: 8px; padding-right: 8px;
padding-left: 8px; padding-left: 8px;
position: relative; position: relative;
} }
/* line 44, ../sass/order/_order.scss */
/* line 50, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .info-step { .order-order #main #app-order-order #steps ul li .info-step {
position: absolute; position: absolute;
top: 45px; top: 45px;
font-size: 17px; font-size: 17px;
font-weight: bold; font-weight: bold;
} }
/* line 56, ../sass/order/_order.scss */
/* line 62, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .glyphicon-chevron-right, .order-order #main #app-order-order #steps ul li.active .glyphicon-chevron-right { .order-order #main #app-order-order #steps ul li .glyphicon-chevron-right, .order-order #main #app-order-order #steps ul li.active .glyphicon-chevron-right {
float: right; float: right;
color: gray; color: gray;
position: relative; position: relative;
top: 10px; top: 10px;
} }
/* line 64, ../sass/order/_order.scss */
/* line 70, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li.first { .order-order #main #app-order-order #steps ul li.first {
padding-left: 0px; padding-left: 0px;
} }
/* line 68, ../sass/order/_order.scss */
/* line 74, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li#step-payment { .order-order #main #app-order-order #steps ul li#step-payment {
padding-right: 0px; padding-right: 0px;
} }
/* line 72, ../sass/order/_order.scss */
/* line 78, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li#step-products .btn::after, .order-order #main #app-order-order #steps ul li.first .btn::before { .order-order #main #app-order-order #steps ul li#step-products .btn::after, .order-order #main #app-order-order #steps ul li.first .btn::before {
display: none; display: none;
} }
/* line 77, ../sass/order/_order.scss */
/* line 83, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn { .order-order #main #app-order-order #steps ul li .btn {
color: #333; color: #333;
text-transform: uppercase; text-transform: uppercase;
border: 0px none; border: 0px none;
text-transform: uppercase; text-transform: uppercase;
} }
/* line 88, ../sass/order/_order.scss */
/* line 94, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn .button-content { .order-order #main #app-order-order #steps ul li .btn .button-content {
position: relative; position: relative;
left: 8px; left: 8px;
} }
/* line 93, ../sass/order/_order.scss */
/* line 99, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn.btn-primary { .order-order #main #app-order-order #steps ul li .btn.btn-primary {
background-color: #F39C12; background-color: #F39C12;
} }
/* line 97, ../sass/order/_order.scss */
/* line 103, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn::after, .order-order #main #app-order-order #steps ul li .btn::before { .order-order #main #app-order-order #steps ul li .btn::after, .order-order #main #app-order-order #steps ul li .btn::before {
content: ""; content: "";
position: absolute; position: absolute;
top: -1px; top: -1px;
} }
/* line 103, ../sass/order/_order.scss */
/* line 109, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn::after { .order-order #main #app-order-order #steps ul li .btn::after {
right: -34px; right: -34px;
border: 17px solid transparent; border: 17px solid transparent;
border-left: 17px solid #e0e0e0; border-left: 17px solid #e0e0e0;
background-color: transparent; background-color: transparent;
} }
/* line 110, ../sass/order/_order.scss */
/* line 116, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn::before { .order-order #main #app-order-order #steps ul li .btn::before {
left: 0px; left: 0px;
border: 17px solid transparent; border: 17px solid transparent;
border-left: 17px solid white; border-left: 17px solid white;
background-color: transparent; background-color: transparent;
} }
/* line 117, ../sass/order/_order.scss */
/* line 123, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn.btn-primary::after { .order-order #main #app-order-order #steps ul li .btn.btn-primary::after {
border-left: 17px solid #F39C12; border-left: 17px solid #F39C12;
} }
/* line 131, ../sass/order/_order.scss */
/* line 137, ../sass/order/_order.scss */
.order-order #main #app-order-order #steps ul li .btn-primary { .order-order #main #app-order-order #steps ul li .btn-primary {
color: white; color: white;
} }
/* line 139, ../sass/order/_order.scss */
/* line 145, ../sass/order/_order.scss */
.order-order #main #app-order-order #legend #order-date-color, .order-order #main #app-order-order #legend #order-date-color,
.order-order #main #app-order-order #legend #distribution-date-color { .order-order #main #app-order-order #legend #distribution-date-color {
width: 13px; width: 13px;
height: 13px; height: 13px;
display: inline-block; display: inline-block;
} }
/* line 146, ../sass/order/_order.scss */
/* line 152, ../sass/order/_order.scss */
.order-order #main #app-order-order #legend #order-date-color { .order-order #main #app-order-order #legend #order-date-color {
background-color: #F39C12; background-color: #F39C12;
} }
/* line 149, ../sass/order/_order.scss */
/* line 155, ../sass/order/_order.scss */
.order-order #main #app-order-order #legend #distribution-date-color { .order-order #main #app-order-order #legend #distribution-date-color {
background-color: #5cb85c; background-color: #5cb85c;
} }
/* line 154, ../sass/order/_order.scss */
/* line 160, ../sass/order/_order.scss */
.order-order #main #app-order-order #calendar { .order-order #main #app-order-order #calendar {
margin-bottom: 15px; margin-bottom: 15px;
} }
/* line 156, ../sass/order/_order.scss */
/* line 162, ../sass/order/_order.scss */
.order-order #main #app-order-order #calendar .c-header .c-title-layout .c-title-popover .c-title-anchor .c-title[data-v-2083cb72] { .order-order #main #app-order-order #calendar .c-header .c-title-layout .c-title-popover .c-title-anchor .c-title[data-v-2083cb72] {
font-size: 2rem; font-size: 2rem;
} }
/* line 159, ../sass/order/_order.scss */
/* line 165, ../sass/order/_order.scss */
.order-order #main #app-order-order #calendar .c-day-background { .order-order #main #app-order-order #calendar .c-day-background {
padding: 20px; padding: 20px;
} }
/* line 164, ../sass/order/_order.scss */
/* line 170, ../sass/order/_order.scss */
.order-order #main #app-order-order #calendar .c-day:hover .c-day-background { .order-order #main #app-order-order #calendar .c-day:hover .c-day-background {
background-color: #F39C12 !important; background-color: #F39C12 !important;
color: white !important; color: white !important;
} }
/* line 170, ../sass/order/_order.scss */
/* line 176, ../sass/order/_order.scss */
.order-order #main #app-order-order #calendar .c-day-popover-content { .order-order #main #app-order-order #calendar .c-day-popover-content {
font-size: 1.3rem; font-size: 1.3rem;
} }
/* line 178, ../sass/order/_order.scss */
/* line 184, ../sass/order/_order.scss */
.order-order #main #app-order-order #credit-online-payment .panel .panel-heading .btn-default { .order-order #main #app-order-order #credit-online-payment .panel .panel-heading .btn-default {
float: right; float: right;
position: relative; position: relative;
top: -5px; top: -5px;
} }
/* line 190, ../sass/order/_order.scss */
/* line 196, ../sass/order/_order.scss */
.order-order #main #app-order-order #content-step-date #distributions-list .panel .btn-primary { .order-order #main #app-order-order #content-step-date #distributions-list .panel .btn-primary {
float: right; float: right;
} }
/* line 194, ../sass/order/_order.scss */
/* line 200, ../sass/order/_order.scss */
.order-order #main #app-order-order #content-step-date #distributions-list .panel .date { .order-order #main #app-order-order #content-step-date #distributions-list .panel .date {
font-size: 20px; font-size: 20px;
} }
/* line 198, ../sass/order/_order.scss */
/* line 204, ../sass/order/_order.scss */
.order-order #main #app-order-order #content-step-date #distributions-list .panel .point-sales { .order-order #main #app-order-order #content-step-date #distributions-list .panel .point-sales {
color: gray; color: gray;
font-size: 14px; font-size: 14px;
margin-top: 8px; margin-top: 8px;
} }
/* line 207, ../sass/order/_order.scss */
/* line 213, ../sass/order/_order.scss */
.order-order #main #app-order-order .block-actions { .order-order #main #app-order-order .block-actions {
text-align: right; text-align: right;
margin-top: 20px; margin-top: 20px;
} }
/* line 214, ../sass/order/_order.scss */
/* line 220, ../sass/order/_order.scss */
.order-order #main #app-order-order table#points-sale td.name .the-name { .order-order #main #app-order-order table#points-sale td.name .the-name {
font-family: "capsuularegular"; font-family: "capsuularegular";
color: black; color: black;
line-height: 25px; line-height: 25px;
font-weight: bold; font-weight: bold;
} }
/* line 222, ../sass/order/_order.scss */
/* line 228, ../sass/order/_order.scss */
.order-order #main #app-order-order table#points-sale td.name .comment, .order-order #main #app-order-order table#points-sale td.name .comment,
.order-order #main #app-order-order table#points-sale td.name .minimum-order-amount { .order-order #main #app-order-order table#points-sale td.name .minimum-order-amount {
color: gray; color: gray;
} }
/* line 226, ../sass/order/_order.scss */
/* line 232, ../sass/order/_order.scss */
.order-order #main #app-order-order table#points-sale td.name .comment a, .order-order #main #app-order-order table#points-sale td.name .comment a,
.order-order #main #app-order-order table#points-sale td.name .minimum-order-amount a { .order-order #main #app-order-order table#points-sale td.name .minimum-order-amount a {
color: #F39C12; color: #F39C12;
} }
/* line 232, ../sass/order/_order.scss */
/* line 238, ../sass/order/_order.scss */
.order-order #main #app-order-order table#points-sale td.actions { .order-order #main #app-order-order table#points-sale td.actions {
width: 150px; width: 150px;
} }
/* line 234, ../sass/order/_order.scss */
/* line 240, ../sass/order/_order.scss */
.order-order #main #app-order-order table#points-sale td.actions button { .order-order #main #app-order-order table#points-sale td.actions button {
width: 100%; width: 100%;
} }
/* line 240, ../sass/order/_order.scss */
/* line 246, ../sass/order/_order.scss */
.order-order #main #app-order-order table#points-sale tr.selected td { .order-order #main #app-order-order table#points-sale tr.selected td {
background-color: white; background-color: white;
} }
/* line 248, ../sass/order/_order.scss */
/* line 254, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products td.category-name { .order-order #main #app-order-order table#products td.category-name {
font-family: "highvoltageregular"; font-family: "highvoltageregular";
font-size: 22px; font-size: 22px;
text-transform: uppercase; text-transform: uppercase;
padding-top: 13px; padding-top: 13px;
} }
/* line 255, ../sass/order/_order.scss */
/* line 261, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products td.category-name .glyphicon-triangle-bottom, .order-order #main #app-order-order table#products td.category-name .glyphicon-triangle-bottom,
.order-order #main #app-order-order table#products td.category-name .glyphicon-triangle-right { .order-order #main #app-order-order table#products td.category-name .glyphicon-triangle-right {
font-size: 15px; font-size: 15px;
} }
/* line 260, ../sass/order/_order.scss */
/* line 266, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products td.category-name span.label { .order-order #main #app-order-order table#products td.category-name span.label {
font-family: "Arial"; font-family: "Arial";
font-weight: normal; font-weight: normal;
text-transform: none; text-transform: none;
margin-left: 15px; margin-left: 15px;
} }
/* line 269, ../sass/order/_order.scss */
/* line 275, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products td.category-name:hover { .order-order #main #app-order-order table#products td.category-name:hover {
cursor: pointer; cursor: pointer;
background-color: #F39C12; background-color: #F39C12;
color: white; color: white;
} }
/* line 277, ../sass/order/_order.scss */
/* line 283, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products td.photo img { .order-order #main #app-order-order table#products td.photo img {
width: 100px; width: 100px;
} }
/* line 287, ../sass/order/_order.scss */
/* line 293, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .price-unit .decreasing-prices { .order-order #main #app-order-order table#products .price-unit .decreasing-prices {
margin-top: 10px; margin-top: 10px;
font-size: 10px; font-size: 10px;
padding-bottom: 2px; padding-bottom: 2px;
margin-bottom: 0px; margin-bottom: 0px;
} }
/* line 295, ../sass/order/_order.scss */
/* line 301, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .price-unit .decreasing-prices ul li { .order-order #main #app-order-order table#products .price-unit .decreasing-prices ul li {
margin-bottom: 5px; margin-bottom: 5px;
} }
/* line 297, ../sass/order/_order.scss */
/* line 303, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .price-unit .decreasing-prices ul li strong { .order-order #main #app-order-order table#products .price-unit .decreasing-prices ul li strong {
font-weight: bold; font-weight: bold;
} }
/* line 305, ../sass/order/_order.scss */
/* line 311, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .price-unit, .order-order #main #app-order-order table#products .price-total { .order-order #main #app-order-order table#products .price-unit, .order-order #main #app-order-order table#products .price-total {
width: 135px; width: 135px;
text-align: center; text-align: center;
} }
/* line 309, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .price-unit .unit, .order-order #main #app-order-order table#products .price-total .unit {
/* line 315, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .price-unit .price-infos, .order-order #main #app-order-order table#products .price-total .price-infos {
color: gray; color: gray;
font-size: 13px; font-size: 13px;
line-height: 15px;
} }
/* line 314, ../sass/order/_order.scss */
/* line 321, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .td-quantity { .order-order #main #app-order-order table#products .td-quantity {
width: 175px; width: 175px;
} }
/* line 316, ../sass/order/_order.scss */
/* line 323, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .td-quantity input.quantity { .order-order #main #app-order-order table#products .td-quantity input.quantity {
text-align: center; text-align: center;
border-right: 0px none; border-right: 0px none;
} }
/* line 320, ../sass/order/_order.scss */
/* line 327, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products .td-quantity .input-group-addon { .order-order #main #app-order-order table#products .td-quantity .input-group-addon {
padding: 5px; padding: 5px;
padding-left: 0px; padding-left: 0px;
border-left: 0px none; border-left: 0px none;
border-right: 0px none; border-right: 0px none;
} }
/* line 331, ../sass/order/_order.scss */
/* line 338, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products tr.total .summary h3 { .order-order #main #app-order-order table#products tr.total .summary h3 {
margin-top: 0px; margin-top: 0px;
font-family: "capsuularegular"; font-family: "capsuularegular";
text-transform: none; text-transform: none;
margin-bottom: 5px; margin-bottom: 5px;
} }
/* line 338, ../sass/order/_order.scss */
/* line 345, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products tr.total .summary ul { .order-order #main #app-order-order table#products tr.total .summary ul {
margin-bottom: 15px; margin-bottom: 15px;
padding-left: 20px; padding-left: 20px;
font-size: 23px; font-size: 23px;
} }
/* line 345, ../sass/order/_order.scss */
/* line 352, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products tr.total .summary ul li .quantity { .order-order #main #app-order-order table#products tr.total .summary ul li .quantity {
font-size: 18px; font-size: 18px;
} }
/* line 349, ../sass/order/_order.scss */
/* line 356, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products tr.total .summary ul li .name { .order-order #main #app-order-order table#products tr.total .summary ul li .name {
font-family: "capsuularegular"; font-family: "capsuularegular";
font-size: 24px; font-size: 24px;
} }
/* line 353, ../sass/order/_order.scss */
/* line 360, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products tr.total .summary ul li .other { .order-order #main #app-order-order table#products tr.total .summary ul li .other {
font-family: "capsuularegular"; font-family: "capsuularegular";
font-size: 18px; font-size: 18px;
} }
/* line 361, ../sass/order/_order.scss */
/* line 368, ../sass/order/_order.scss */
.order-order #main #app-order-order table#products tr.total .price-total { .order-order #main #app-order-order table#products tr.total .price-total {
font-size: 23px; font-size: 23px;
} }
/* line 369, ../sass/order/_order.scss */
/* line 376, ../sass/order/_order.scss */
.order-order #main #app-order-order #content-step-payment .delivery { .order-order #main #app-order-order #content-step-payment .delivery {
margin-bottom: 20px; margin-bottom: 20px;
} }
/* line 372, ../sass/order/_order.scss */
/* line 379, ../sass/order/_order.scss */
.order-order #main #app-order-order #content-step-payment .delivery .delivery-home { .order-order #main #app-order-order #content-step-payment .delivery .delivery-home {
margin-bottom: 20px; margin-bottom: 20px;
} }
/* line 381, ../sass/order/_order.scss */
/* line 388, ../sass/order/_order.scss */
.order-order #main #app-order-order #content-step-payment .comment { .order-order #main #app-order-order #content-step-payment .comment {
margin-bottom: 20px; margin-bottom: 20px;
} }
/* line 386, ../sass/order/_order.scss */
/* line 393, ../sass/order/_order.scss */
.order-order #main #app-order-order #content-step-payment .credit .info { .order-order #main #app-order-order #content-step-payment .credit .info {
margin-left: 20px; margin-left: 20px;
color: gray; color: gray;
} }
/* line 393, ../sass/order/_order.scss */
/* line 400, ../sass/order/_order.scss */
.order-order #main #app-order-order #specific-delays { .order-order #main #app-order-order #specific-delays {
margin-top: 15px; margin-top: 15px;
} }
/* line 401, ../sass/order/_order.scss */
/* line 408, ../sass/order/_order.scss */
.order-order #main #app-order-order #infos { .order-order #main #app-order-order #infos {
margin-top: 30px; margin-top: 30px;
} }
/* line 403, ../sass/order/_order.scss */
/* line 410, ../sass/order/_order.scss */
.order-order #main #app-order-order #infos .panel-body { .order-order #main #app-order-order #infos .panel-body {
padding-top: 0px; padding-top: 0px;
white-space: pre-line; white-space: pre-line;
} }


/* line 413, ../sass/order/_order.scss */
/* line 420, ../sass/order/_order.scss */
#main #content .panel h3 { #main #content .panel h3 {
font-family: "highvoltageregular"; font-family: "highvoltageregular";
margin: 0px; margin: 0px;

+ 8
- 1
producer/web/sass/order/_order.scss Dosyayı Görüntüle

#distribution-date, #order-distribution-date { #distribution-date, #order-distribution-date {
display: none ; display: none ;
} }

.alert-edit-order {
strong {
//font-weight: bold;
}
}
.slide-enter-active { .slide-enter-active {
transition: all .2s ease; transition: all .2s ease;
width: 135px ; width: 135px ;
text-align: center ; text-align: center ;
.unit {
.price-infos {
color: gray ; color: gray ;
font-size: 13px ; font-size: 13px ;
line-height: 15px;
} }
} }
.td-quantity { .td-quantity {

+ 16
- 1
producer/web/sass/site/_index.scss Dosyayı Görüntüle

width: 100% ; width: 100% ;
max-width: 500px ; max-width: 500px ;
} }
}
}

.description {
strong {
font-weight: bold;
}

em {
font-style: italic;
}

a {
color: black;
text-decoration: underline;
}
}
} }
#points-sale { #points-sale {

Yükleniyor…
İptal
Kaydet