getResultDataCollection() as $deliveries) { $loopResultRow = new LoopResultRow($deliveries); $delta = date_diff($deliveries->getDueDeliveryTimeStart(), new DateTime("now")); $order = OrderQuery::create()->findOneById($deliveries->getOrderId()); $customer = $order->getCustomer()->getFirstname() . ' ' . $order->getCustomer()->getLastname(); if (null != $deliveries->getDeliveryAddressId()) { $city = OrderAddressQuery::create()->findOneById($order->getDeliveryOrderAddressId())->getCity(); $area = LpsAreaQuery::create()->findOneById(LpsAreaCityQuery::create()->findOneById($deliveries->getDeliveryAddressId())->getIdArea())->getTitle(); } if (null != $deliveries->getDeliveryPlaceId()) $place = PdrPlacesQuery::create()->findOneById($deliveries->getDeliveryPlaceId())->getTitle(); $loopResultRow ->set("ORDER_ID", $deliveries->getOrderId()) ->set("ADDRESS_ID", $deliveries->getDeliveryAddressId()) ->set("PLACE_ID", $deliveries->getDeliveryPlaceId()) ->set("SCHEDULE_ID", $deliveries->getScheduleId()) ->set("START_DATE", $deliveries->getDueDeliveryTimeStart()) ->set("END_DATE", $deliveries->getDueDeliveryTimeEnd()) ->set("DELTA", $delta->days) ->set("CUSTOMER", $customer) ->set("AREA", $area) ->set("CITY", $city) ->set("PLACE", $place) ; $loopResult->addRow($loopResultRow); } return $loopResult; } /** * @inheritdoc */ protected function getArgDefinitions() { return new ArgumentCollection( Argument::createIntTypeArgument('order_id'), Argument::createEnumListTypeArgument('list_type', [ self::DOMICILE, self::RETRAIT, self::CLICK_AND_COLLECT ], self::DOMICILE), Argument::createBooleanTypeArgument('only_future', true), Argument::createEnumListTypeArgument('order', [ 'date', 'date-reverse', ], 'date') ); } /** * @inheritdoc */ public function buildModelCriteria() { $deliveries = OrderDeliveryScheduleQuery::create(); if (null !== $this->getOrderId()) { return $deliveries->filterByOrderId($this->getOrderId()); } // Déjà, on n'affiche que les commandes non annulées $deliveries->filterByOrderId(self::onlyNotCanceledOrders()); $clickAndCollectPlaces = PdrPlacesQuery::create()->filterByClickAndCollect(1)->find()->getData(); foreach ($this->getListType() as $parametre) { switch ($parametre) { case self::DOMICILE: $deliveries->filterByDeliveryAddressId(null, Criteria::NOT_EQUAL); break; case self::RETRAIT: $deliveries->filterByDeliveryPlaceId($clickAndCollectPlaces, Criteria::IN); break; case self::CLICK_AND_COLLECT: $deliveries->filterByDeliveryPlaceId($clickAndCollectPlaces, Criteria::NOT_IN); break; default: break; } } if ($this->getOnlyFuture()) $deliveries->filterByDueDeliveryTimeStart(array('min' => time()))->find(); else $deliveries->filterByDueDeliveryTimeStart(array('max' => time()))->find(); foreach ($this->getOrder() as $parametre) { switch ($parametre) { case 'date': $deliveries->orderByDueDeliveryTimeStart(Criteria::ASC); break; case 'date-reverse': $deliveries->orderByDueDeliveryTimeStart(Criteria::DESC); break; default: break; } } return $deliveries; } private function onlyNotCanceledOrders() { $notCanceledOrders = []; $notCanceledData = OrderQuery::create()->filterByStatusId(OrderStatusQuery::create()->findOneByCode('canceled')->getId(), Criteria::NOT_EQUAL)->find()->getData(); foreach ($notCanceledData as $data) { array_push($notCanceledOrders, $data->getId()); } return $notCanceledOrders; } }