canApproveChangeOrderAddress = $canApproveChangeOrderAddress; $this->fetchesAddress = $fetchesAddress; $this->updatesOrdersAddress = $updatesOrdersAddress; $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; $this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor; } /** * @param Request $request * @return mixed * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\InternalServerErrorException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException * @throws \GuzzleHttp\Exception\GuzzleException */ public function execute(Request $request) { $status = (int) $request->route('status'); $this->canApproveChangeOrderAddress->passes(); $address = $this->fetchesAddress->execute(['id' => $request->route('id')]); if($status === ApprovalStatus::APPROVED){ $address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]); $appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; if($appointee === 2) { foreach($address->owner->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST) as $packingList){ $this->updateDoFromVTPortalProcessor->execute($packingList); } } } $address = $this->updatesOrdersAddress->execute($address, $status); return $address; } }