/** * @param Itinerary $anItinerary * @return RouteCandidateDto */ public function toDto(Itinerary $anItinerary) { $legs = array(); foreach ($anItinerary->legs() as $leg) { $legDto = new LegDto(); $legDto->setLoadLocation($leg->loadLocation()); $legDto->setUnloadLocation($leg->unloadLocation()); $legDto->setLoadTime($leg->loadTime()->format(\DateTime::ATOM)); $legDto->setUnloadTime($leg->unloadTime()->format(\DateTime::ATOM)); $legs[] = $legDto; } $routeCandidate = new RouteCandidateDto(); $routeCandidate->setLegs($legs); return $routeCandidate; }
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) { if (null === ($trackingId = $request->getAttribute('trackingId'))) { return new EmptyResponse(404); } $cargoData = $request->getParsedBody(); if (!isset($cargoData['legs']) || !is_array($cargoData['legs'])) { throw new \InvalidArgumentException("Missing legs for cargo"); } $routeCandidate = new RouteCandidateDto(); $routeCandidate->setLegs($this->toLegDtosFromData($cargoData['legs'])); try { $this->bookingService->assignCargoToRoute($trackingId, $routeCandidate); $cargoRoutingDto = $this->bookingService->loadCargoForRouting($trackingId); return new JsonResponse($cargoRoutingDto->getArrayCopy()); } catch (CargoNotFoundException $e) { return new EmptyResponse(404); } }