Browse Source

[Accueil] Modules payants

feature/rotating_product
Guillaume Bourgeois 5 months ago
parent
commit
f89424f7d0
8 changed files with 43 additions and 18 deletions
  1. +5
    -5
      backend/views/distribution/index.php
  2. +12
    -0
      backend/web/js/backend.js
  3. +8
    -1
      backend/web/js/vuejs/distribution-index.js
  4. +1
    -0
      domain/Order/Order/OrderResolver.php
  5. +2
    -2
      domain/Product/Product/ProductSolver.php
  6. +4
    -4
      frontend/views/site/_prices_producer.php
  7. +8
    -4
      frontend/views/site/service.php
  8. +3
    -2
      producer/controllers/OrderController.php

+ 5
- 5
backend/views/distribution/index.php View File

@@ -159,11 +159,11 @@ $this->setPageTitle('Distributions') ;
<td class="quantity-max">
<div class="input-group">
<input type="text" class="form-control quantity-max" placeholder="&infin;" :data-id-product="product.id" v-model="getProductDistribution(product).quantity_max" @keyup="productQuantityMaxChange" />
<span class="input-group-addon">{{ (product.unit == 'piece') ? 'p.' : ' '+((product.unit == 'g' || product.unit == 'kg') ? 'kg' : 'litre(s)') }}</span>
<span class="input-group-addon">{{ labelUnitReference(product.unit) }}</span>
</div>
<div class="limit-quantity-accessories" v-if="getProductDistribution(product).quantity_max != product.quantity_max && product.quantity_max">
<div class="limit-quantity-accessories" v-if="!showLoading && product.quantity_max && (getProductDistribution(product).quantity_max > product.quantity_max || !getProductDistribution(product).quantity_max)">
<span class="glyphicon glyphicon-warning-sign"></span> Limitation accessoires :
<strong>{{ product.quantity_max }} {{ (product.unit == 'piece') ? 'p.' : ' '+((product.unit == 'g' || product.unit == 'kg') ? 'kg' : 'litre(s)') }}</strong>
<strong>{{ product.quantity_max }} {{ labelUnitReference(product.unit) }}</strong>
</div>
</td>
</tr>
@@ -758,10 +758,10 @@ $this->setPageTitle('Distributions') ;
<td class="quantity-remaining">
<span class="infinite" v-if="(getProductQuantityRemaining(order, product) === null) || order.productOrder[product.id].unit != product.unit">&infin;</span>
<span class="negative" v-else-if="getProductQuantityRemaining(order, product) <= 0">
{{ getProductQuantityRemaining(order, product) }} {{ order.productOrder[product.id].unit == 'piece' ? ' p.' : ' '+(order.productOrder[product.id].unit == 'g' || order.productOrder[product.id].unit == 'kg') ? 'kg' : 'litre(s)' }}
{{ getProductQuantityRemaining(order, product) }} {{ labelUnitReference(order.productOrder[product.id].unit) }}
<span class="glyphicon glyphicon-alert" v-if="getProductQuantityRemaining(order, product) < 0"></span>
</span>
<span class="has-quantity" v-else>{{ getProductQuantityRemaining(order, product) }} {{ order.productOrder[product.id].unit == 'piece' ? ' p.' : ' '+(order.productOrder[product.id].unit == 'g' || order.productOrder[product.id].unit == 'kg') ? 'kg' : 'litre(s)' }}</span>
<span class="has-quantity" v-else>{{ getProductQuantityRemaining(order, product) }} {{ labelUnitReference(order.productOrder[product.id].unit) }}</span>
</td>
</tr>
</tbody>

+ 12
- 0
backend/web/js/backend.js View File

@@ -62,6 +62,18 @@ $(document).ready(function () {
opendistrib_sponsorship();
});


function label_unit_reference(unit) {
if(unit == 'piece') {
return 'p.';
}
else if(unit == 'g' || unit == 'kg') {
return 'kg';
}
else {
return 'litre(s)';
}
}
function opendistrib_sponsorship() {
$('#sponsorship-link-copy').click(function() {
navigator.clipboard.writeText($(this).attr('href'));

+ 8
- 1
backend/web/js/vuejs/distribution-index.js View File

@@ -294,6 +294,9 @@ if($(selector).length) {
}
});
},
labelUnitReference: function(unit) {
return label_unit_reference(unit);
},
getProductQuantityRemainingGlobal: function(product) {
var app = this;

@@ -346,6 +349,7 @@ if($(selector).length) {
this.init();
},
productQuantityMaxChange: function (event) {
var app = this;
var quantityMax = event.currentTarget.value;
axios.get("ajax-process-product-quantity-max", {
params: {
@@ -355,7 +359,7 @@ if($(selector).length) {
}
})
.then(function (response) {
app.init(app.idActivePointSale);
});
},
productActiveClick: function (event) {
@@ -1056,6 +1060,9 @@ if($(selector).length) {
}
},
methods: {
labelUnitReference: function(unit) {
return label_unit_reference(unit);
},
checkForm: function () {
this.errors = [];


+ 1
- 0
domain/Order/Order/OrderResolver.php View File

@@ -48,6 +48,7 @@ class OrderResolver extends AbstractResolver
}

$productQuantity = $this->orderSolver->getProductQuantity($product, $ordersArray);

if($inNumberOfPieces) {
$productQuantity = $this->productSolver->getNumberOfPieces($productQuantity, $product);
}

+ 2
- 2
domain/Product/Product/ProductSolver.php View File

@@ -29,7 +29,7 @@ class ProductSolver extends AbstractService implements SolverInterface
{
// Poids total
if($product->unit != 'piece') {
$quantity = ($quantity * $product->weight) / $this->getUnitCoefficient($product);
$quantity = ($quantity * $product->weight) / 1000;
}

return $quantity;
@@ -38,7 +38,7 @@ class ProductSolver extends AbstractService implements SolverInterface
public function getNumberOfPieces(float $quantity, Product $product): int
{
if($product->unit != 'piece') {
$quantity = ($quantity * $this->getUnitCoefficient($product)) / $product->weight;
$quantity = $quantity / ($product->weight / 1000);
}

return $quantity;

+ 4
- 4
frontend/views/site/_prices_producer.php View File

@@ -93,16 +93,16 @@ use yii\helpers\Html;

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<h3 class="panel-title" id="modules">
<i class="bi bi-boxes"></i>
Modules
</h3>
</div>
<div class="panel-body">
<div class="alert alert-dark" role="alert">
Retrouvez ici les modules payants de Souke correspondant aux développements qui n'ont pas encore
été totalement financés et aux fonctionnalités nécessitant une configuration spécifique. Contactez-moi
pour demander l'activation d'un module.
Retrouvez ici les modules payants de Souke correspondant à des fonctionnalités en lien avec des
plateformes externes ou à des développements répondant à des besoins spécifiques. N'hésitez pas à
<a href="<?= Yii::$app->urlManager->createUrl(['site/contact']) ?>">me contacter</a> pour en savoir plus ou pour demander l'activation d'un module.
</div>
<table class="table table-striped table-bordered">
<thead>

+ 8
- 4
frontend/views/site/service.php View File

@@ -61,10 +61,10 @@ $this->setMeta('description', "Découvrez les fonctionnalités du logiciel, les
</div>
<div class="row">
<?= block_feature("calendar3", "Planification des jours de distributions"); ?>
<?= block_feature("download", "Récapitulatif des commandes par jour de distribution (PDF et CSV), génération d'étiquettes (PDF)"); ?>
<?= block_feature("download", "Récapitulatif des commandes par jour de distribution (PDF et CSV)<br />Génération d'étiquettes simple (PDF)<br />Génération d'étiquettes avec format spécifique (PDF) *"); ?>
</div>
<div class="row">
<?= block_feature("basket", "Gestion des produits, catégories et prix spécifiques"); ?>
<?= block_feature("basket", "Gestion des produits, catégories et prix spécifiques<br />Gestion des accessoires produits *"); ?>
<?php $featureSharedPointSaleDescription = '';
if($featureChecker->isEnabled(Feature::ALIAS_SHARED_POINT_SALE)):
$featureSharedPointSaleDescription .= "<br />Partage de points de vente entre plusieurs producteurs pour des distributions communes";
@@ -77,7 +77,7 @@ $this->setMeta('description', "Découvrez les fonctionnalités du logiciel, les
</div>
<div class="row">
<?= block_feature("piggy-bank", "Système de cagnotte permettant la comptabilisation des paiements"); ?>
<?= block_feature("credit-card", "Paiement en ligne possible via la plateforme <strong>Stripe</strong> pour que les clients puissent alimenter leur cagnotte de manière autonome"); ?>
<?= block_feature("credit-card", "Paiement en ligne via la plateforme <strong>Stripe</strong> pour le paiement des commandes ou l'alimentation des cagnottes *"); ?>
</div>
<div class="row">
<?= block_feature("megaphone", "Communication facilitée avec les clients via l'envoi d'emails en masse"); ?>
@@ -85,8 +85,12 @@ $this->setMeta('description', "Découvrez les fonctionnalités du logiciel, les
</div>
<div class="row">
<?= block_feature("graph-up", "Statistiques et rapports de vente"); ?>
<?= block_feature("cloud-arrow-up", "Exports vers les logiciels <strong>Evoliz</strong> (comptabilité) et <strong>SumUp</strong> (caisse)"); ?>
<?= block_feature("cloud-arrow-up", "Exports vers les logiciels <strong>Evoliz</strong> (comptabilité) et <strong>SumUp</strong> (caisse) *"); ?>
</div>

<p>
* <a href="#modules">Modules payants</a>
</p>
</div>
</div>


+ 3
- 2
producer/controllers/OrderController.php View File

@@ -445,8 +445,9 @@ class OrderController extends ProducerBaseController
) && isset($unitsArray[$product->id])) ? $unitsArray[$product->id] : $product->unit;
$coefficient = Product::$unitsArray[$unit]['coefficient'];
$quantity = ((float)$posts['products'][$product->id]) / $coefficient;
if ($availableProducts[$product->id]['quantity_max'] && $quantity > $availableProducts[$product->id]['quantity_remaining']) {
$quantity = $availableProducts[$product->id]['quantity_remaining'];
$quantityRemaining = $orderModule->getResolver()->getProductQuantityRemaining($product, $order->distribution);
if(!is_null($quantityRemaining) && $quantity > $quantityRemaining) {
$quantity = $quantityRemaining;
}
$productOrder->quantity = $quantity;
$productOrder->price = $productModule->getPrice($product, [

Loading…
Cancel
Save