Parcourir la source

Merge branch 'develop'

master
Guillaume Bourgeois il y a 3 semaines
Parent
révision
028e7bb9ce
11 fichiers modifiés avec 116 ajouts et 17 suppressions
  1. +1
    -0
      backend/controllers/DistributionController.php
  2. +2
    -0
      backend/controllers/admin/OrderAdminController.php
  3. +8
    -1
      backend/views/distribution/index.php
  4. +2
    -0
      backend/web/js/vuejs/distribution-index.js
  5. +1
    -1
      common/config/params.php
  6. +62
    -0
      common/versions/24.10.B.php
  7. +5
    -5
      domain/Communication/Email/EmailGenerator.php
  8. +9
    -5
      domain/Order/Order/OrderSearch.php
  9. +23
    -0
      domain/Order/Order/TillerManager.php
  10. +1
    -3
      producer/controllers/OrderController.php
  11. +2
    -2
      producer/views/newsletter/index.php

+ 1
- 0
backend/controllers/DistributionController.php Voir le fichier

@@ -134,6 +134,7 @@ class DistributionController extends BackendController
$json['tiller_is_synchro'] = $this->buildAjaxInfosResponseTiller($producer, $date);
$json['tiller_is_authenticated'] = $this->getOrderModule()->getTillerManager()->isAuthenticated();
$json['tiller_url_authorize_code'] = $this->getOrderModule()->getTillerManager()->getUrlAuthorizeCode();
$json['tiller_total_amount_orders'] = $this->getOrderModule()->getTillerManager()->getTotalAmountOrdersByDate($date, true);
$json['missing_subscriptions'] = $this->buildAjaxInfosResponseMissingSubscriptions($date, $distribution, $ordersArrayObject);
}


+ 2
- 0
backend/controllers/admin/OrderAdminController.php Voir le fichier

@@ -69,6 +69,8 @@ class OrderAdminController extends BackendController
$searchModel = new OrderSearch();
$dataProvider = $searchModel->search([
'order_by' => 'IF(ISNULL(date_update), `order`.`date`, `order`.`date_update`) DESC'
], [
'ignore_id_producer' => true,
]);

return $this->render('index', [

+ 8
- 1
backend/views/distribution/index.php Voir le fichier

@@ -321,7 +321,10 @@ $this->setPageTitle('Distributions') ;
<button id="btn-tiller" class="btn btn-xs btn-default" disabled><span class="glyphicon glyphicon-refresh"></span> Synchroniser avec Tiller</button>
</span>
</template>
<button v-else id="btn-tiller" class="btn btn-xs btn-default" @click="synchroTiller"><span class="glyphicon glyphicon-refresh"></span> Synchroniser avec Tiller</button>
<button v-else id="btn-tiller" class="btn btn-xs btn-default" @click="synchroTiller">
<span class="glyphicon glyphicon-refresh"></span>
Synchroniser avec Tiller
</button>
</template>
<template v-else>
<a :href="tillerUrlAuthorizeCode" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-refresh"></span> Connexion Tiller</a>
@@ -344,6 +347,10 @@ $this->setPageTitle('Distributions') ;
</span>
</div>

<div class="alert alert-info" v-if="producer && producer.tiller == true && orders.length > 0 && tillerTotalAmountOrders">
Montant total commandes Tiller : {{ tillerTotalAmountOrders }}
</div>

<div class="alert alert-danger" v-if="distribution && !distribution.active && orders && orders.length > 0">
Attention, ce jour de distribution n'est pas activé et vous avez quand même des commandes enregistrées.
</div>

+ 2
- 0
backend/web/js/vuejs/distribution-index.js Voir le fichier

@@ -79,6 +79,7 @@ if($(selector).length) {
tillerIsAuthenticated: false,
tillerUrlAuthorizeCode: '#',
tillerIsSynchro: false,
tillerTotalAmountOrders: false,
checkboxSelectAllOrders: false,
messageGenerateDeliveryNoteDisplayed: false,
missingSubscriptions: false,
@@ -211,6 +212,7 @@ if($(selector).length) {
app.tillerUrlAuthorizeCode = response.data.tiller_url_authorize_code;
app.tillerIsAuthenticated = response.data.tiller_is_authenticated;
app.tillerIsSynchro = response.data.tiller_is_synchro;
app.tillerTotalAmountOrders = response.data.tiller_total_amount_orders;

app.calendar.attrs = [];
var distributions = response.data.distributions;

+ 1
- 1
common/config/params.php Voir le fichier

@@ -37,7 +37,7 @@
*/

return [
'version' => '24.10.A',
'version' => '24.10.B',
'maintenanceMode' => false,
'siteName' => 'Souke',
'tinyMcePlugins' => 'preview searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link lists wordcount help',

+ 62
- 0
common/versions/24.10.B.php Voir le fichier

@@ -0,0 +1,62 @@
<?php
/**
* Copyright Guillaume Bourgeois (2018)
*
* contact@souke.fr
*
* Ce logiciel est un programme informatique servant à aider les producteurs
* à distribuer leur production en circuits courts.
*
* Ce logiciel est régi par la licence CeCILL soumise au droit français et
* respectant les principes de diffusion des logiciels libres. Vous pouvez
* utiliser, modifier et/ou redistribuer ce programme sous les conditions
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
* sur le site "http://www.cecill.info".
*
* En contrepartie de l'accessibilité au code source et des droits de copie,
* de modification et de redistribution accordés par cette licence, il n'est
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
* seule une responsabilité restreinte pèse sur l'auteur du programme, le
* titulaire des droits patrimoniaux et les concédants successifs.
*
* A cet égard l'attention de l'utilisateur est attirée sur les risques
* associés au chargement, à l'utilisation, à la modification et/ou au
* développement et à la reproduction du logiciel par l'utilisateur étant
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à
* manipuler et qui le réserve donc à des développeurs et des professionnels
* avertis possédant des connaissances informatiques approfondies. Les
* utilisateurs sont donc invités à charger et tester l'adéquation du
* logiciel à leurs besoins dans des conditions permettant d'assurer la
* sécurité de leurs systèmes et ou de leurs données et, plus généralement,
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
*
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
* pris connaissance de la licence CeCILL, et que vous en avez accepté les
* termes.
*/

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

version(
'27/10/2024',
[
[
"[Administration] Distributions > Tiller : affichage du montant total des commandes à synchroniser",

],
[
"[Administration] Utilisateurs > Commandes : ajout filtre par producteur",
"Communication > Emails : modification du lien de désinscription à l'infolettre pour qu'il pointe vers la page de gestion de l'inscription aux deux types d'emails (actualités et prises de commandes) sans désinscrire directement l'utilisateur",
"[Boutique] Commander : correctif bug affichage distributions sur le calendrier quand une distribution est activée sur une période de congés"
]
],
[
[
],
[
]
],
$userCurrent
);

?>

+ 5
- 5
domain/Communication/Email/EmailGenerator.php Voir le fichier

@@ -161,18 +161,18 @@ Produits disponibles :
$fromEmail = $this->producerSolver->getProducerEmailPlatform($producer) ;
$fromName = $producer->name ;

$linkUnsubscribe = $linkProducer.'/newsletter/unsubscribe';
$linkUnsubscribe = $linkProducer.'/newsletter/index';

// Message inscription newsletter
$messageAutoText .= "

--
Boutique : ".$linkProducer."
Me désinscrire : ".$linkUnsubscribe;
Aller sur la boutique : ".$linkProducer."
Se désinscrire de l'infolettre : ".$linkUnsubscribe;

$messageAutoHtml .= "<br /><br />--<br>";
$messageAutoHtml .= "Boutique : <a href=\"".$linkProducer."\">".$linkProducer."</a><br>";
$messageAutoHtml .= "Me désinscrire : <a href=\"".$linkUnsubscribe."\">".$linkUnsubscribe."</a>";
$messageAutoHtml .= "Aller sur la boutique : <a href=\"".$linkProducer."\">".$linkProducer."</a><br>";
$messageAutoHtml .= "Se désinscrire de l'infolettre : <a href=\"".$linkUnsubscribe."\">".$linkUnsubscribe."</a>";
}
else {
$fromEmail = 'contact@souke.fr' ;

+ 9
- 5
domain/Order/Order/OrderSearch.php Voir le fichier

@@ -42,17 +42,21 @@ use yii\data\ActiveDataProvider;

class OrderSearch extends Order
{
public function search($params)
public function search($params, $options = [])
{
$paramsSearch = [];
if(isset($params['id_user'])) {
$paramsSearch['id_user'] = $params['id_user'];
}

$query = Order::searchQuery($paramsSearch, [
'ignore_id_producer' => true,
'orderby' => isset($params['order_by']) ? $params['order_by'] : 'distribution.date DESC'
]);
$optionsArray = [
'orderby' => isset($params['order_by']) ? $params['order_by'] : 'distribution.date DESC',
];
if(isset($options['ignore_id_producer']) && $options['ignore_id_producer']) {
$optionsArray['ignore_id_producer'] = true;
}

$query = Order::searchQuery($paramsSearch, $optionsArray);
$dataProvider = new ActiveDataProvider([
'query' => $query,

+ 23
- 0
domain/Order/Order/TillerManager.php Voir le fichier

@@ -41,6 +41,7 @@ use common\components\Tiller\TillerClientInterface;
use common\components\Tiller\TillerClientV2;
use common\components\Tiller\TillerClientV3;
use common\helpers\MeanPayment;
use common\helpers\Price;
use domain\Order\OrderStatus\OrderStatus;
use domain\Order\ProductOrder\ProductOrderSolver;
use domain\Producer\Producer\ProducerSolver;
@@ -308,4 +309,26 @@ class TillerManager extends AbstractManager

return false;
}

public function getTotalAmountOrdersByDate(string $date, bool $format = false)
{
$totalAmount = 0;
$ordersArray = Order::searchAll([
'distribution.date' => $date,
'order.tiller_synchronization' => 1,
], [
'conditions' => OrderRepositoryQuery::getSqlFilterIsValid()
]);

foreach($ordersArray as $order) {
$this->orderBuilder->initOrder($order);
$totalAmount += $this->orderSolver->getOrderAmountWithTax($order);
}

if($format) {
return Price::format($totalAmount);
}

return $totalAmount;
}
}

+ 1
- 3
producer/controllers/OrderController.php Voir le fichier

@@ -725,15 +725,13 @@ class OrderController extends ProducerBaseController
// Filtre par point de vente
if ($pointSaleCurrent && $producer->option_order_entry_point == Producer::ORDER_ENTRY_POINT_POINT_SALE) {
$distributionsArrayFilterPointSale = [];
for ($i = 0; $i < count($distributionsArray); $i++) {
$distribution = $distributionsArray[$i];
foreach($distributionsArray as $distribution) {
if ($distribution && $distributionModule->isPointSaleActive($distribution, $pointSaleCurrent)) {
$countOrders = Order::searchCount([
'id_distribution' => $distribution->id,
'id_point_sale' => $pointSaleCurrent->id
]);
$orderUserPointSale = $this->getOrderUser($distribution->date, $pointSaleCurrent);

if (!$pointSaleCurrent->maximum_number_orders
|| ($orderUserPointSale && $orderUserPointSale->id_point_sale == $pointSaleCurrent->id)
|| ($pointSaleCurrent->maximum_number_orders &&

+ 2
- 2
producer/views/newsletter/index.php Voir le fichier

@@ -64,8 +64,8 @@ $this->setTitle("Infolettres");
[
'options' => [
'data-id' => $user->id,
'data-on' => 'Activé',
'data-off' => 'Désactivé'
'data-on' => 'Activée',
'data-off' => 'Désactivée'
],
])
->label('Actualités');

Chargement…
Annuler
Enregistrer