PHRAS-1107 Fix order pagination in repository

This commit is contained in:
Thibaud Fabre
2016-05-19 19:00:06 +02:00
parent 0e3ed6ed94
commit 3381d18b22
4 changed files with 26 additions and 13 deletions

View File

@@ -61,6 +61,7 @@ class OrderSubscriber extends AbstractNotificationSubscriber
]); ]);
$notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod());
$notifier->notifyCreation($event->getOrder(), $event->getOrder()->getUser()); $notifier->notifyCreation($event->getOrder(), $event->getOrder()->getUser());
$notifier = $this->notifierRegistry->getNotifier(Order::NOTIFY_MAIL); $notifier = $this->notifierRegistry->getNotifier(Order::NOTIFY_MAIL);
@@ -87,10 +88,10 @@ class OrderSubscriber extends AbstractNotificationSubscriber
$notified = false; $notified = false;
$notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod());
$notificationData = json_encode([ $notificationData = json_encode([
'from' => $event->getAdmin()->getId(), 'from' => $event->getDelivery()->getAdmin()->getId(),
'to' => $event->getOrder()->getUser()->getId(), 'to' => $event->getOrder()->getUser()->getId(),
'ssel_id' => $event->getOrder()->getBasket()->getId(), 'ssel_id' => $event->getOrder()->getBasket()->getId(),
'n' => $event->getQuantity(), 'n' => $event->getDelivery()->getQuantity()
]); ]);
if ($this->shouldSendNotificationFor($event->getOrder()->getUser(), 'eventsmanager_notify_orderdeliver')) { if ($this->shouldSendNotificationFor($event->getOrder()->getUser(), 'eventsmanager_notify_orderdeliver')) {
@@ -111,9 +112,9 @@ class OrderSubscriber extends AbstractNotificationSubscriber
$notified = false; $notified = false;
$notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod());
$notificationData = json_encode([ $notificationData = json_encode([
'from' => $event->getAdmin()->getId(), 'from' => $event->getDelivery()->getAdmin()->getId(),
'to' => $event->getOrder()->getUser()->getId(), 'to' => $event->getOrder()->getUser()->getId(),
'n' => $event->getQuantity(), 'n' => $event->getDelivery()->getQuantity()
]); ]);

View File

@@ -41,11 +41,13 @@ class OrderRepository extends EntityRepository
public function listOrders($baseIds, $offsetStart = 0, $perPage = 20, $sort = "created_on") public function listOrders($baseIds, $offsetStart = 0, $perPage = 20, $sort = "created_on")
{ {
$qb = $this $qb = $this
->createQueryBuilder('o') ->createQueryBuilder('o');
->innerJoin('o.elements', 'e');
if (!empty($baseIds)) { 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') { if ($sort === 'user') {

View File

@@ -110,7 +110,7 @@ class ProdOrderController extends BaseOrderController
$baseIds = array_keys($this->getAclForUser()->get_granted_base(['order_master'])); $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); $total = $this->getOrderRepository()->countTotalOrders($baseIds);
return $this->render('prod/orders/order_box.html.twig', [ return $this->render('prod/orders/order_box.html.twig', [

View File

@@ -19,6 +19,7 @@ use Alchemy\Phrasea\TaskManager\Editor\DefaultEditor;
use Alchemy\Phrasea\Webhook\EventProcessorFactory; use Alchemy\Phrasea\Webhook\EventProcessorFactory;
use Guzzle\Http\Client as GuzzleClient; use Guzzle\Http\Client as GuzzleClient;
use Guzzle\Batch\BatchBuilder; use Guzzle\Batch\BatchBuilder;
use Guzzle\Http\Message\Request;
use Silex\Application; use Silex\Application;
use Guzzle\Common\Event; use Guzzle\Common\Event;
use Guzzle\Plugin\Backoff\BackoffPlugin; use Guzzle\Plugin\Backoff\BackoffPlugin;
@@ -98,26 +99,35 @@ class WebhookJob extends AbstractJob
}, -254); }, -254);
// Set callback which logs success or failure // 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; $retry = true;
if ($response && (null !== $deliverId = parse_url($request->getUrl(), PHP_URL_FRAGMENT))) { if ($response && (null !== $deliverId = parse_url($request->getUrl(), PHP_URL_FRAGMENT))) {
$delivery = $app['repo.webhook-delivery']->find($deliverId); $delivery = $app['repo.webhook-delivery']->find($deliverId);
$logContext = [ 'host' => $request->getHost() ];
if ($response->isSuccessful()) { if ($response->isSuccessful()) {
$app['manipulator.webhook-delivery']->deliverySuccess($delivery); $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->getWebhookEvent()->getId(), $delivery->getWebhookEvent()->getName(),
$delivery->getThirdPartyApplication()->getName())); $delivery->getThirdPartyApplication()->getName()
);
$retry = false; $retry = false;
} else { } else {
$app['manipulator.webhook-delivery']->deliveryFailure($delivery); $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->getWebhookEvent()->getId(), $delivery->getWebhookEvent()->getName(),
$delivery->getThirdPartyApplication()->getName())); $delivery->getThirdPartyApplication()->getName()
);
} }
$that->log($logType, $logEntry, $logContext);
return $retry; return $retry;
} }
}, true, new CurlBackoffStrategy()); }, true, new CurlBackoffStrategy());