@@ -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); | |||
} | |||
@@ -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', [ |
@@ -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> |
@@ -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; |
@@ -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', |
@@ -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 | |||
); | |||
?> |
@@ -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' ; |
@@ -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, |
@@ -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; | |||
} | |||
} |
@@ -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 && |
@@ -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'); |