'Merge Booking', 'message' => 'You have successfully merged Booking' ]; } /** @var CanCreateBooking */ private $canMergeBooking; /** @var CreatesBooking */ private $createsBooking; /** @var GeneratesBookingMarking */ private $generatesBookingMarking; /** @var FetchesCompany */ private $fetchesCompany; /** @var GetBookings */ private $getBookings; /** @var UpdatesBookingTransaction */ private $updatesBookingTransaction; /** @var DeletesBooking */ private $deletesBooking; /** * CreateBookingLogic constructor. * @param CanMergeBooking $canMergeBooking * @param CreatesBooking $createsBooking * @param GeneratesBookingMarking $generatesBookingMarking * @param FetchesCompany $fetchesCompany */ public function __construct(CanMergeBooking $canMergeBooking, CreatesBooking $createsBooking, GeneratesBookingMarking $generatesBookingMarking, FetchesCompany $fetchesCompany, GetBookings $getBookings, UpdatesBookingTransaction $updatesBookingTransaction, DeletesBooking $deletesBooking) { $this->canMergeBooking = $canMergeBooking; $this->createsBooking = $createsBooking; $this->generatesBookingMarking = $generatesBookingMarking; $this->fetchesCompany = $fetchesCompany; $this->getBookings = $getBookings; $this->updatesBookingTransaction = $updatesBookingTransaction; $this->deletesBooking = $deletesBooking; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\RequestValidationException * @throws \App\Classes\Exceptions\MalformedRequestException */ public function logic(Request $request) : JsonResponse { $booking_object = new BookingMergeObject($request->get('id'),$request->get('booking_ids')); $this->canMergeBooking->passes($booking_object); $booking_main = $this->getBookings->handler(['id'=> $booking_object->getId()])[0]; $bookings_to_merge = $this->getBookings->handler(['id_in'=> $booking_object->getBookingIds()]); $booking_amount = $booking_main->fix_amount; $transaction_amount = 0; $booking_main_transactions = $booking_main->transactions()->get(); foreach($booking_main_transactions as $transaction) { $transaction_amount += $transaction->amount; } foreach($bookings_to_merge as $booking) { $booking_amount += $booking->fix_amount; $bookings_to_merge_transactions = $booking->transactions()->get(); foreach($bookings_to_merge_transactions as $transaction) { $transaction_amount += $transaction->amount; } //Soft-delete selected bookings //$this->deletesBooking->execute($booking); } $booking_object->setBookingAmount($booking_amount); $booking_object->setTransactionAmount($transaction_amount); $this->updatesBookingTransaction->execute($booking_main,$bookings_to_merge, $booking_object); dd('??'); return $this->response(); } }