From 3381d18b223670c68778bdf9abcc812f33ec5b68 Mon Sep 17 00:00:00 2001 From: Thibaud Fabre Date: Thu, 19 May 2016 19:00:06 +0200 Subject: [PATCH] PHRAS-1107 Fix order pagination in repository --- .../Core/Event/Subscriber/OrderSubscriber.php | 9 +++++---- .../Model/Repositories/OrderRepository.php | 8 +++++--- .../Order/Controller/ProdOrderController.php | 2 +- .../Phrasea/TaskManager/Job/WebhookJob.php | 20 ++++++++++++++----- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php index 0a1e0dec2b..d17c725cd1 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php @@ -61,6 +61,7 @@ class OrderSubscriber extends AbstractNotificationSubscriber ]); $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); + $notifier->notifyCreation($event->getOrder(), $event->getOrder()->getUser()); $notifier = $this->notifierRegistry->getNotifier(Order::NOTIFY_MAIL); @@ -87,10 +88,10 @@ class OrderSubscriber extends AbstractNotificationSubscriber $notified = false; $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); $notificationData = json_encode([ - 'from' => $event->getAdmin()->getId(), + 'from' => $event->getDelivery()->getAdmin()->getId(), 'to' => $event->getOrder()->getUser()->getId(), 'ssel_id' => $event->getOrder()->getBasket()->getId(), - 'n' => $event->getQuantity(), + 'n' => $event->getDelivery()->getQuantity() ]); if ($this->shouldSendNotificationFor($event->getOrder()->getUser(), 'eventsmanager_notify_orderdeliver')) { @@ -111,9 +112,9 @@ class OrderSubscriber extends AbstractNotificationSubscriber $notified = false; $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); $notificationData = json_encode([ - 'from' => $event->getAdmin()->getId(), + 'from' => $event->getDelivery()->getAdmin()->getId(), 'to' => $event->getOrder()->getUser()->getId(), - 'n' => $event->getQuantity(), + 'n' => $event->getDelivery()->getQuantity() ]); diff --git a/lib/Alchemy/Phrasea/Model/Repositories/OrderRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/OrderRepository.php index c171ab8d93..4f1378746b 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/OrderRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/OrderRepository.php @@ -41,11 +41,13 @@ class OrderRepository extends EntityRepository public function listOrders($baseIds, $offsetStart = 0, $perPage = 20, $sort = "created_on") { $qb = $this - ->createQueryBuilder('o') - ->innerJoin('o.elements', 'e'); + ->createQueryBuilder('o'); if (!empty($baseIds)) { - $qb->where($qb->expr()->in('e.baseId', $baseIds)); + $qb + ->innerJoin('o.elements', 'e') + ->where($qb->expr()->in('e.baseId', $baseIds)) + ->groupBy('o.id'); } if ($sort === 'user') { diff --git a/lib/Alchemy/Phrasea/Order/Controller/ProdOrderController.php b/lib/Alchemy/Phrasea/Order/Controller/ProdOrderController.php index 1732567371..e66e628f86 100644 --- a/lib/Alchemy/Phrasea/Order/Controller/ProdOrderController.php +++ b/lib/Alchemy/Phrasea/Order/Controller/ProdOrderController.php @@ -110,7 +110,7 @@ class ProdOrderController extends BaseOrderController $baseIds = array_keys($this->getAclForUser()->get_granted_base(['order_master'])); - $ordersList = $this->getOrderRepository()->listOrders($baseIds, $offsetStart, $perPage, $sort); + $ordersList = $this->getOrderRepository()->listOrders($baseIds, $offsetStart * $perPage, $perPage, $sort); $total = $this->getOrderRepository()->countTotalOrders($baseIds); return $this->render('prod/orders/order_box.html.twig', [ diff --git a/lib/Alchemy/Phrasea/TaskManager/Job/WebhookJob.php b/lib/Alchemy/Phrasea/TaskManager/Job/WebhookJob.php index 03e1ecdda4..8d56af93d1 100644 --- a/lib/Alchemy/Phrasea/TaskManager/Job/WebhookJob.php +++ b/lib/Alchemy/Phrasea/TaskManager/Job/WebhookJob.php @@ -19,6 +19,7 @@ use Alchemy\Phrasea\TaskManager\Editor\DefaultEditor; use Alchemy\Phrasea\Webhook\EventProcessorFactory; use Guzzle\Http\Client as GuzzleClient; use Guzzle\Batch\BatchBuilder; +use Guzzle\Http\Message\Request; use Silex\Application; use Guzzle\Common\Event; use Guzzle\Plugin\Backoff\BackoffPlugin; @@ -98,26 +99,35 @@ class WebhookJob extends AbstractJob }, -254); // Set callback which logs success or failure - $subscriber = new CallbackBackoffStrategy(function ($retries, $request, $response, $e) use ($app, $that) { + $subscriber = new CallbackBackoffStrategy(function ($retries, Request $request, $response, $e) use ($app, $that) { $retry = true; if ($response && (null !== $deliverId = parse_url($request->getUrl(), PHP_URL_FRAGMENT))) { $delivery = $app['repo.webhook-delivery']->find($deliverId); + $logContext = [ 'host' => $request->getHost() ]; + if ($response->isSuccessful()) { $app['manipulator.webhook-delivery']->deliverySuccess($delivery); - $that->log('info', sprintf('Deliver success event "%d:%s" for app "%s"', + $logType = 'info'; + $logEntry = sprintf('Deliver success event "%d:%s" for app "%s"', $delivery->getWebhookEvent()->getId(), $delivery->getWebhookEvent()->getName(), - $delivery->getThirdPartyApplication()->getName())); + $delivery->getThirdPartyApplication()->getName() + ); + $retry = false; } else { $app['manipulator.webhook-delivery']->deliveryFailure($delivery); - $that->log('error', sprintf('Deliver failure event "%d:%s" for app "%s"', + $logType = 'error'; + $logEntry = sprintf('Deliver failure event "%d:%s" for app "%s"', $delivery->getWebhookEvent()->getId(), $delivery->getWebhookEvent()->getName(), - $delivery->getThirdPartyApplication()->getName())); + $delivery->getThirdPartyApplication()->getName() + ); } + $that->log($logType, $logEntry, $logContext); + return $retry; } }, true, new CurlBackoffStrategy());