'Created Booking', 'message' => 'You have successfully created a new Booking' ]; } /** @var CanCreateBooking */ private $canCreateBooking; /** @var CreatesBooking */ private $createsBooking; /** @var GeneratesBookingMarking */ private $generatesBookingMarking; /** @var FetchesCompany */ private $fetchesCompany; /** @var BookingToPerfexCRMProcessor */ private $bookingToPerfexCRMProcessor; /** @var CheckMilestonesForRewardProcessor */ private $checkMilestonesForRewardProcessor; /** * CreateBookingLogic constructor. * @param CanCreateBooking $canCreateBooking * @param CreatesBooking $createsBooking * @param GeneratesBookingMarking $generatesBookingMarking * @param FetchesCompany $fetchesCompany * @param BookingToPerfexCRMProcessor $bookingToPerfexCRMProcessor * @param CheckMilestoneForRewardProcessor $checkMilestonesForRewardProcessor */ public function __construct(CanCreateBooking $canCreateBooking, CreatesBooking $createsBooking, GeneratesBookingMarking $generatesBookingMarking, FetchesCompany $fetchesCompany, BookingToPerfexCRMProcessor $bookingToPerfexCRMProcessor, CheckMilestonesForRewardProcessor $checkMilestonesForRewardProcessor) { $this->canCreateBooking = $canCreateBooking; $this->createsBooking = $createsBooking; $this->generatesBookingMarking = $generatesBookingMarking; $this->fetchesCompany = $fetchesCompany; $this->bookingToPerfexCRMProcessor = $bookingToPerfexCRMProcessor; $this->checkMilestonesForRewardProcessor = $checkMilestonesForRewardProcessor; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request) : JsonResponse { if (in_array($request->input('service_id'), [4, 10])) { if (!$request['order_reference_no']) { throw new MalformedRequestException('At least 1 order reference required.'); } if ($request['order_reference_no']) { foreach ($request['order_reference_no'] as $index => $reference) { if (!$reference) { $index += 1; throw new MalformedRequestException("Order reference {$index} cannot be empty"); } } } } $company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]); $object = new BookingObject($request->input('service_id'), $request->input('transferable_bank_id'), $this->generatesBookingMarking->execute(), number_format( floatval(str_replace(',', '', $request->input('fix_amount'))), 5, '.', ''), $request->input('type') === 1 ? $request->input('convertible_currency_id') : 1, $request->input('convertible_currency_id'), 1); $this->canCreateBooking->passes($object); /** @var Booking $booking */ $booking = $this->createsBooking->execute($company, $object); if(config('perfexcrm.is_enabled') == 'true'){ $this->bookingToPerfexCRMProcessor->execute($booking); } if (in_array($request->input('service_id'), [4, 10])) { foreach ($request['order_reference_no'] as $order_reference) { $booking->modelAttributes()->create([ 'name' => BookingAttributeNames::ORDER_REFERENCE_NO, 'value' => $order_reference ]); } } //cief todo: case study 5 // $user = $company->employees()->first(); // $this->checkMilestonesForRewardProcessor->execute($user, [Milestones::MILESTONE_5]); return $this->resourceResponse(new BookingResource($booking)); } }