Beispiel #1
0
 /**
  * @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;
 }
Beispiel #2
0
 /**
  * @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);
 }