/** * @param array $data * @param \DDD\Domain\Booking\ChannelReservation $bookingDomain * @param $otherInfo * @param bool $isOverbooking * @return bool */ public function modifyReservation($data = [], $bookingDomain, $otherInfo, $isOverbooking = false) { /** * @var \DDD\Dao\ChannelManager\ReservationIdentificator $daoReservationIdentificator * @var Booking $bookingDao * @var Logger $logger * @var Availability $availabilityService * @var \DDD\Service\task $taskService */ if (empty($data) || !$bookingDomain) { $this->gr2err("Empty data In Modification reservation"); return false; } $bookingDao = $this->getServiceLocator()->get('dao_booking_booking'); $logger = $this->getServiceLocator()->get('ActionLogger'); $taskService = $this->getServiceLocator()->get('service_task'); $reservationId = $bookingDomain->getId(); // Modification: Customer/CC Creation $ccIssue = $emailOptions = []; // Send CC Details if one has provided if ($otherInfo['cc_provided'] == true) { $ccIssue['cc_provided'] = true; $customerData = $data['customer_data']; $customerId = $this->changeCCForModification($bookingDomain, $customerData); $data['customer_id'] = $customerId; } else { $ccIssue['cc_provided'] = false; } unset($data['customer_data']); if (isset($otherInfo['send_payment_modify'])) { $emailOptions['send_payment_modify'] = true; } /** * @var \DDD\Service\Booking\ReservationIssues $reservationIssuesService */ $reservationIssuesService = $this->getServiceLocator()->get('service_booking_reservation_issues'); $reservationIssuesService->checkReservationIssues($reservationId, $ccIssue); $apartmentId = $otherInfo['apartment_id']; // get apartel id $apartel = isset($otherInfo['apartel']['apartel_id']) && $otherInfo['apartel']['apartel_id'] ? $otherInfo['apartel']['apartel_id'] : false; // set identificator if ($apartel && isset($otherInfo['identificator'])) { $daoReservationIdentificator = $this->getServiceLocator()->get('dao_channel_manager_reservation_identificator'); $daoReservationIdentificator->save(['date_from' => $otherInfo['identificator']['dateFrom'], 'date_to' => $otherInfo['identificator']['dateTo'], 'room_id' => $otherInfo['identificator']['roomId'], 'rate_id' => $otherInfo['identificator']['rateId'], 'guest_name' => trim($otherInfo['identificator']['guestName'])], ['reservation_id' => $reservationId]); } if ($data['date_from'] != $bookingDomain->getDateFrom() || $data['date_to'] != $bookingDomain->getDateTo()) { // Rates data parsing $ratesData = $otherInfo['ratesData']; $ratesForChangeDate = $this->changeDateForModification($ratesData, $reservationId, false, $apartel, $isOverbooking); if ($ratesForChangeDate['status'] == 'error') { return false; } } $remarks = null; if (isset($data['remarks']) && !empty(trim($data['remarks']))) { $remarks = trim($data['remarks']); } unset($data['remarks']); if (isset($data['ip_address'])) { unset($data['ip_address']); } // Update reservation $bookingDao->save($data, ['id' => $reservationId]); // anyway update channel $availabilityService = $this->getServiceLocator()->get('service_availability'); $availabilityService->updateChannelByReservationId($reservationId); // Reservation modified $reservationModifiedMessage = 'Modification received from Channel Manager and processed successfully'; if ($data['date_from'] != $bookingDomain->getDateFrom() || $data['date_to'] != $bookingDomain->getDateTo()) { $reservationModifiedMessage .= ' : <br>'; $thereIsAlreadyDateChange = false; if ($data['date_from'] < $bookingDomain->getDateFrom()) { $thereIsAlreadyDateChange = true; $oldDateFromMinusOneDay = date('Y-m-d', strtotime('-1 day', strtotime($bookingDomain->getDateFrom()))); //change range is one day if ($oldDateFromMinusOneDay == $data['date_from']) { $reservationModifiedMessage .= 'Dates modified: Added new date ' . $oldDateFromMinusOneDay; } else { $reservationModifiedMessage .= 'Modified dates: Added new dates from ' . $data['date_from'] . ' to ' . $oldDateFromMinusOneDay; } } if ($data['date_from'] > $bookingDomain->getDateFrom()) { if ($thereIsAlreadyDateChange) { $reservationModifiedMessage .= ' , '; } $thereIsAlreadyDateChange = true; $newDateMinusOneDay = date('Y-m-d', strtotime('-1 day', strtotime($data['date_from']))); if ($newDateMinusOneDay == $bookingDomain->getDateFrom()) { $reservationModifiedMessage .= 'Modified dates: Updated with penalty and opened availability for ' . $newDateMinusOneDay; } else { $reservationModifiedMessage .= 'Modified dates: Updated with penalty and opened availability from ' . $bookingDomain->getDateFrom() . ' to ' . $newDateMinusOneDay; } } if ($data['date_to'] > $bookingDomain->getDateTo()) { $realNewDateTo = date('Y-m-d', strtotime('-1 day', strtotime($data['date_to']))); $realOldDateTo = date('Y-m-d', strtotime('-1 day', strtotime($bookingDomain->getDateTo()))); if ($thereIsAlreadyDateChange) { $reservationModifiedMessage .= ' , '; } $thereIsAlreadyDateChange = true; $oldDateFromPlusOneDay = date('Y-m-d', strtotime('+1 day', strtotime($realOldDateTo))); if ($oldDateFromPlusOneDay == $realNewDateTo) { $reservationModifiedMessage .= 'Modified dates: Added new date ' . $realNewDateTo; } else { $reservationModifiedMessage .= 'Modified dates: Added new dates from ' . $oldDateFromPlusOneDay . ' to ' . $realNewDateTo; } } if ($data['date_to'] < $bookingDomain->getDateTo()) { $realNewDateTo = date('Y-m-d', strtotime('-1 day', strtotime($data['date_to']))); $realOldDateTo = date('Y-m-d', strtotime('-1 day', strtotime($bookingDomain->getDateTo()))); if ($thereIsAlreadyDateChange) { $reservationModifiedMessage .= ' , '; } $newDatePlusOneDay = date('Y-m-d', strtotime('+1 day', strtotime($realNewDateTo))); if ($newDatePlusOneDay == $realOldDateTo) { $reservationModifiedMessage .= 'Modified dates: Updated with penalty and opened availability for ' . $newDatePlusOneDay; } else { $reservationModifiedMessage .= 'Modified dates: Updated with penalty and opened availability from ' . $newDatePlusOneDay . ' to ' . $realOldDateTo; } } } $logger->save(Logger::MODULE_BOOKING, $reservationId, Logger::ACTION_BOOKING_MODIFY, $reservationModifiedMessage); // create log for remarks if (!is_null($remarks)) { $actionLogDao = $this->getServiceLocator()->get('dao_action_logs_action_logs'); $preActionLog = $actionLogDao->fetchOne(['module_id' => Logger::MODULE_BOOKING, 'identity_id' => $reservationId, 'user_id' => UserService::USER_GUEST, 'action_id' => Logger::ACTION_COMMENT]); if ($preActionLog) { $actionLogDao->save(['value' => Helper::stripTages($remarks), 'timestamp' => date('Y-m-d H:i:s')], ['id' => $preActionLog['id']]); } else { $logger->save(Logger::MODULE_BOOKING, $reservationId, Logger::ACTION_COMMENT, Helper::stripTages($remarks), UserService::USER_GUEST); } } // if missing rate create task if (isset($otherInfo['rateMissingTask'])) { $taskService->createAutoTaskForMissingRate($reservationId); } $this->sendReservationEmail($reservationId, 'modification', $emailOptions, $apartel); $this->gr2info("Booking ticket successfully modify", ['cron' => 'ChannelManager', 'apartment_id' => $apartmentId, 'reservation_id' => $reservationId]); return true; }
/** * @param \DDD\Domain\Booking\ChannelReservation|null $bookingDomain */ private function logDuplicateCancellation($bookingDomain) { $msg = 'Reservation Number: ' . $bookingDomain->getResNumber() . ', Cancellation Date: ' . $bookingDomain->getDateFrom() . ', Detected Date: ' . date('Y-m-d H:i:s') . ', Detected Status: ' . BookingService::$bookingStatuses[$bookingDomain->getStatus()]; $logger = new ALogger($this->getServiceLocator()); $logger->save(ALogger::MODULE_BOOKING, $bookingDomain->getId(), ALogger::ACTION_DUPLICATE_CANCELLATION, $msg); }