mailer = $mailer;
$this->channelService = $channelService;
$this->channelManagerMappingService = $channelManagerMappingService;
$this->channelManagerPropertyMappingService = $channelManagerPropertyMappingService;
$this->bookingService = $bookingService;
$this->bookingContactService = $bookingContactService;
$this->bookingRoomService = $bookingRoomService;
$this->bookingPaymentService = $bookingPaymentService;
$this->propertyRoomAvailabilityService = $propertyRoomAvailabilityService;
$this->newBookingMailService = $newBookingMailService;
}
public function reservationListParam($channelManagerPropertyId)
{
$userId = Config::get('app.channelManager.reseliva.userId');
$userPSW = Config::get('app.channelManager.reseliva.userPassword');
$requestParam = new \SimpleXMLElement('');
$Authentication = $requestParam->addChild('Authentication');
$Authentication->addChild('UserID', $userId);
$Authentication->addChild('UserPSW', $userPSW);
$Authentication->addChild('PropertyID', $channelManagerPropertyId);
return $requestParam->asXML();
}
public function reservationConfirmParam($propertyId, $channelManagerBookingId, $bookingCode)
{
$userId = Config::get('app.channelManager.reseliva.userId');
$userPSW = Config::get('app.channelManager.reseliva.userPassword');
$requestParam = new \SimpleXMLElement('');
$Authentication = $requestParam->addChild('Authentication');
$Authentication->addChild('UserID', $userId);
$Authentication->addChild('UserPSW', $userPSW);
$Authentication->addChild('PropertyID', $propertyId);
$reservations = $requestParam->addChild('reservations');
$reservation = $reservations->addChild('reservation');
$reservation->addAttribute('reseliva_id', $channelManagerBookingId);
$reservation->addAttribute('pms_id', $bookingCode);
return $requestParam->asXML();
}
public function getDateByDay($dates = [])
{
$dateByDay = [];
$diffInDays = Carbon::parse($dates['checkIn'])->floatDiffInDays(Carbon::parse($dates['checkOut']));
for ($i = 0; $i < $diffInDays; $i++) {
$dateByDay[] = Carbon::parse($dates['checkIn'])->addDay($i)->format('Y-m-d');
}
return $dateByDay;
}
public function createBooking($param)
{
$response = ['status' => false, 'message' => ''];
DB::beginTransaction();
try {
$bookingCode = getCodeGenerate('BKG');
$bookingStatus = 1;
$roomRequest = [];
foreach ($param['room'] as $room) {
$roomRequest[] = [
'adults' => $room['totalpax'],
'children' => $room['totalchd'],
'age' => []
];
}
if (empty(fillOnUndefined($param, 'reservno_ota'))) {
$param['reservno_ota'] = null;
}
$bookingCreateParam = [
'property_id' => $param['property']['id'],
'channel_id' => $param['property']['channel_id'],
'booking_code' => $bookingCode,
'channel_booking_code' => fillOnUndefined($param, 'reservno_ota'),
'search_key' => $param['reservno'],
'checkin_date' => $param['checkinFormatted'],
'checkout_date' => $param['checkoutFormatted'],
'rooms' => json_encode($roomRequest),
'payment_type_code' => 'CHN',
'room_amount' => $param['paymenttotal'],
'addon_amount' => 0,
'discount_amount' => 0,
'total' => $param['paymenttotal'],
'currency_code' => $param['paymentcurr'],
'channel_token' => null,
'booking_engine_token' => null,
'reservation_time' => $param['restimeUnixFormatted'],
'status' => $param['status'] == 'A' ? 1 : 0
];
$bookingCreate = $this->bookingService->create($bookingCreateParam);
//$bookingCreate['status'] = 'success';
//$bookingCreate['data']['id'] = 52;
if ($bookingCreate['status'] != 'success') {
throw new ApiErrorException(lang('Booking could not be made, Reservation: ' . $param['reservno']));
}
//INSERT CONTACT DATA
$bookingContactCreateParam = [
'booking_id' => $bookingCreate['data']['id'],
'name' => $param['firstname'],
'surname' => !empty($param['lastname']) ? $param['lastname'] : null,
'phone_code' => null,
'phone_number' => $param['tel'],
'email' => $param['email'],
'note' => !empty($param['note']) ? $param['note'] : null,
'language_code' => fillOnUndefined($param, 'language', 'en'),
'status' => 1
];
$bookingContactCreate = $this->bookingContactService->create($bookingContactCreateParam);
//$bookingContactCreate['status'] = 'success';
if ($bookingContactCreate['status'] != 'success') {
throw new ApiErrorException(lang('Booking Contact could not be made'));
}
//INSERT ROOM DATA
foreach ($param['room'] as $roomOrder => $room) {
$bookingRoomCreateParam = [
'booking_id' => $bookingCreate['data']['id'],
'room_order_number' => ($roomOrder + 1),
'occupancy_code' => str_repeat('A', $room['totalpax']) . str_repeat('C', $room['totalchd']),
'checkin_date' => $param['checkinFormatted'], //$room['checkin'],
'checkout_date' => $param['checkoutFormatted'],//$room['checkout'],
'rate_key' => null,
'rate_key_code' => null,
'availability_id' => 1,
'availability_code' => 'ROM',
'room_id' => $room['property']['room_id'],
'room_name' => $room['roomtype'],
'room_rate_mapping_id' => $room['property']['room_rate_mapping_id'],
'room_rate_name' => $room['ratename'],
'cancellation_policy' => null,
'payment_type_code' => 'CHN',
'rate_detail' => json_encode($room),
'total' => $room['total_amount'],
'currency_code' => $param['paymentcurr'],
'status' => $param['status'] == 'A' ? 1 : 0
];
$bookingRoomCreate = $this->bookingRoomService->create($bookingRoomCreateParam);
//$bookingRoomCreate['status'] = 'success';
if ($bookingRoomCreate['status'] != 'success') {
throw new ApiErrorException(lang('Booking Room could not be made'));
}
/* ROOM AVAILABILITY */
$dateByDay = [];
$dateByDay = $this->getDateByDay(['checkIn' => $room['checkin'], 'checkOut' => $room['checkout']]);
foreach ($dateByDay as $day) {
$requestParam = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $param['property']['id']],
['field' => 'property_room_id', 'condition' => '=', 'value' => $room['property']['room_id']],
['field' => 'availability_type_id', 'condition' => '=', 'value' => 1],
['field' => 'date', 'condition' => '=', 'value' => $day]
],
];
$getPropertyRoomAndRoomRateAvailability = $this->propertyRoomAvailabilityService->select($requestParam);
if ($getPropertyRoomAndRoomRateAvailability['status'] != 'success') {
throw new ApiErrorException('getPropertyRoomAndRoomRateAvailability Empty');
}
foreach ($getPropertyRoomAndRoomRateAvailability['data'] as $roomAvailability) {
$roomAvailabilityUpdated = $roomAvailability['availability'] <= 0 ? 0 : ($roomAvailability['availability'] - 1);
$this->propertyRoomAvailabilityService->update($roomAvailability['id'], ['availability' => $roomAvailabilityUpdated]);
}
}
/* ROOM AVAILABILITY */
}
//INSERT PAYMENT DATA
$bookingPaymentCreateParam = [
'booking_id' => $bookingCreate['data']['id'],
'payment_code' => (isset($param['cc_token']) && !empty($param['cc_token'])) ? fillOnUndefined($param, 'cc_token') : null,
'payment_type_code' => 'CHN',
'total' => $param['paymenttotal'],
'currency_code' => $param['paymentcurr'],
'status' => 2
];
$bookingPaymentCreate = $this->bookingPaymentService->create($bookingPaymentCreateParam);
//$bookingContactCreate['status'] = 'success';
if ($bookingPaymentCreate['status'] != 'success') {
throw new ApiErrorException(lang('Booking Payment could not be made'));
}
//INSERT PAYMENT DATA
//INSERT CHANNEL PAYMENT DATA
if (isset($param['cc_token']) && !empty($param['cc_token'])) {
$bookingPaymentDataCreateParam = [
'booking_id' => $bookingCreate['data']['id'],
'type' => 'ch',
'data' => md5($param['reservno'].$param['channelManagerPropertyId'].$param['cc_token'])
];
$bookingPaymentDataCreate = $this->bookingPaymentService->createPaymentData($bookingPaymentDataCreateParam);
if ($bookingPaymentDataCreate['status'] != 'success') {
throw new ApiErrorException(lang('Booking Payment could not be made'));
}
}
//INSERT CHANNEL PAYMENT DATA
//$param['reservno'] = '27145472222';
$reservationConfirmParam = $this->reservationConfirmParam($param['channelManagerPropertyId'], $param['reservno'], $bookingCode);
$reservationConfirm = $this->channelService->reservationConfirm($reservationConfirmParam);
if (!$reservationConfirm['status']) {
throw new ApiErrorException($reservationConfirm['message']);
}
DB::commit();
$mailParams = ['booking_id' => $bookingCreate['data']['id']];
$this->newBookingMailService->process($mailParams);
$response['status'] = true;
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
if (!$response['status']) {
DB::rollBack();
}
return $response;
}
public function cancelBooking($param)
{
$response = ['status' => false, 'message' => ''];
DB::beginTransaction();
try {
$bookingCode = null;
$bookingDetailParam = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $param['property']['id']],
['field' => 'search_key', 'condition' => '=', 'value' => $param['reservno']]
],
'with' => ['bookingRoom'],
'firstRow' => true
];
$bookingDetail = $this->bookingService->select($bookingDetailParam);
if ($bookingDetail['status'] != 'success') {
throw new ApiErrorException(lang('Booking could not be found, Reservation: ' . $param['reservno']));
}
if (!empty($bookingDetail['data'])) {
$bookingCode = $bookingDetail['data']['booking_code'];
$this->bookingService->update($bookingDetail['data']['id'], ['status' => 0]);
foreach ($bookingDetail['data']['booking_room'] as $roomOrder => $room) {
$bookingRoomCreate = $this->bookingRoomService->update($room['id'], ['status' => 0]);
/* ROOM AVAILABILITY */
$dateByDay = [];
$dateByDay = $this->getDateByDay(['checkIn' => $room['checkin_date'], 'checkOut' => $room['checkout_date']]);
foreach ($dateByDay as $day) {
$requestParam = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $param['property']['id']],
['field' => 'property_room_id', 'condition' => '=', 'value' => $room['room_id']],
['field' => 'availability_type_id', 'condition' => '=', 'value' => 1],
['field' => 'date', 'condition' => '=', 'value' => $day]
],
];
$getPropertyRoomAndRoomRateAvailability = $this->propertyRoomAvailabilityService->select($requestParam);
if ($getPropertyRoomAndRoomRateAvailability['status'] != 'success') {
throw new ApiErrorException('getPropertyRoomAndRoomRateAvailability Empty');
}
foreach ($getPropertyRoomAndRoomRateAvailability['data'] as $roomAvailability) {
$roomAvailabilityUpdated = $roomAvailability['availability'] <= 0 ? 1 : ($roomAvailability['availability'] + 1);
$this->propertyRoomAvailabilityService->update($roomAvailability['id'], ['availability' => $roomAvailabilityUpdated]);
}
}
/* ROOM AVAILABILITY */
}
}
$response['status'] = true;
$bookingCode = is_null($bookingCode) ? 'ENW' . $param['reservno'] : $bookingCode;
$reservationConfirmParam = $this->reservationConfirmParam($param['channelManagerPropertyId'], $param['reservno'], $bookingCode);
$reservationConfirm = $this->channelService->reservationConfirm($reservationConfirmParam);
if (!$reservationConfirm['status']) {
throw new ApiErrorException($reservationConfirm['message']);
}
$notificationCancelToPropertyUser = [
'channel' => $param['otaname'],
'channelBookingCode' => $param['reservno_ota'],
'propertyChannelManager' => $param['otaname'],//$channelManagerMapping['property_channel_manager']['name'],
'nameSurname' => $param['firstname'] . ' ' . $param['lastname'],
'propertyId' => $param['property']['id'],
];
$this->mailer->onQueue('cancelBookingMail', new CancelBookingMail($notificationCancelToPropertyUser));
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
if ($response['status']) {
DB::commit();
} else {
DB::rollBack();
}
return $response;
}
public function modifiedBooking($param)
{
$response = ['status' => false, 'message' => ''];
DB::beginTransaction();
try {
$bookingCode = null;
$bookingDetailParam = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $param['property']['id']],
['field' => 'search_key', 'condition' => '=', 'value' => $param['reservno']]
],
'with' => ['bookingRoom', 'bookingContact'],
'firstRow' => true
];
$bookingDetail = $this->bookingService->select($bookingDetailParam);
if ($bookingDetail['status'] != 'success') {
throw new ApiErrorException(lang('Booking could not be found, Reservation: ' . $param['reservno']));
}
if (!empty($bookingDetail['data'])) {
$bookingCode = $bookingDetail['data']['booking_code'];
$bookingUpdateParam = [
'channel_booking_code' => fillOnUndefined($param, 'reservno_ota'),
'search_key' => $param['reservno'],
'checkin_date' => $param['checkinFormatted'],
'checkout_date' => $param['checkoutFormatted'],
'payment_type_code' => 'CHN',
'total' => $param['paymenttotal'],
'currency_code' => $param['paymentcurr'],
];
$bookingUpdate = $this->bookingService->update($bookingDetail['data']['id'], $bookingUpdateParam);
$bookingContactUpdateParam = [
'name' => $param['firstname'],
'surname' => $param['lastname'],
'phone_code' => null,
'phone_number' => $param['tel'],
'email' => $param['email'],
'note' => !empty($param['note']) ? $param['note'] : null,
'language_code' => fillOnUndefined($param, 'language', 'en')
];
$bookingContactUpdate = $this->bookingContactService->update($bookingDetail['data']['booking_contact']['id'], $bookingContactUpdateParam);
foreach ($bookingDetail['data']['booking_room'] as $roomOrder => $room) {
foreach ($param['room'] as $roomOrderChannel => $roomChannel) {
if ($roomOrder == $roomOrderChannel) {
$bookingRoomUpdateParam = [
'occupancy_code' => str_repeat('A', $roomChannel['totalpax']) . str_repeat('C', $roomChannel['totalchd']),
'checkin_date' => $roomChannel['checkin'],
'checkout_date' => $roomChannel['checkout'],
'room_id' => $roomChannel['property']['room_id'],
'room_name' => $roomChannel['roomtype'],
'room_rate_mapping_id' => $roomChannel['property']['room_rate_mapping_id'],
'room_rate_name' => $roomChannel['ratename'],
'rate_detail' => json_encode($roomChannel),
'total' => $roomChannel['total_amount'],
'currency_code' => $param['paymentcurr'],
];
$bookingRoomUpdate = $this->bookingRoomService->update($room['id'], $bookingRoomUpdateParam);
}
}
}
}
$response['status'] = true;
$bookingCode = is_null($bookingCode) ? 'ENW' . $param['reservno'] : $bookingCode;
$reservationConfirmParam = $this->reservationConfirmParam($param['channelManagerPropertyId'], $param['reservno'], $bookingCode);
$reservationConfirm = $this->channelService->reservationConfirm($reservationConfirmParam);
if (!$reservationConfirm['status']) {
throw new ApiErrorException($reservationConfirm['message']);
}
$notificationModifiedToPropertyUser = [
'channel' => $param['otaname'],
'channelBookingCode' => $param['reservno_ota'],
'propertyChannelManager' => $param['otaname'],//$channelManagerMapping['property_channel_manager']['name'],
'nameSurname' => $param['firstname'] . ' ' . $param['lastname'],
'propertyId' => $param['property']['id'],
];
$this->mailer->onQueue('modifiedBookingMail', new ModifiedBookingMail($notificationModifiedToPropertyUser));
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
if ($response['status']) {
DB::commit();
} else {
DB::rollBack();
}
return $response;
}
public function handle()
{
//$request = $this->channelService->productList(14480);
try {
/*
1. Reseliva mapping olan oteller çekilecek
2. Her otel için foreach ile reservaion servisi çağrılacak
3. Gelen bilgiler enw ye işlenecek, sonra da confirmcheck yapılacak
* */
$this->info(date('Y-m-d H:i:s') . ' : Start');
$channelManagerMappingCriteria =
[
'criteria' =>
[
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyChannelManager'],
'orderBy' => [
['field' => 'id', 'value' => 'ASC']
]
];
$channelManagerMappingData = $this->channelManagerMappingService->select($channelManagerMappingCriteria);
$channelManagerMappingCollect = collect($channelManagerMappingData['data']);
$channelManagerPropertyMappingCriteria = [
'criteria' =>
[
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'channel_manager_id', 'condition' => '=', 'value' => 1],
['field' => 'channel_manager_property_id', 'condition' => '!=', 'value' => null],
//['field' => 'property_id', 'condition' => '=', 'value' => 326],//TODO: Delete
],
'with' => ['channelManagerRoomRate.propertyRoomRateMapping'],
'orderBy' => [
['field' => 'id', 'value' => 'ASC']
]
];
$channelManagerPropertyMapping = $this->channelManagerPropertyMappingService->select($channelManagerPropertyMappingCriteria);
if ($channelManagerPropertyMapping['status'] == 'success') {
foreach ($channelManagerPropertyMapping['data'] as $propertyMapping) {
$channelManagerRoomRateCollect = collect($propertyMapping['channel_manager_room_rate']);
$reservationListParam = $this->reservationListParam($propertyMapping['channel_manager_property_id']);
$reservationList = $this->channelService->reservationList($reservationListParam);
if (!$reservationList['status']) {
//$logMessage
$mailParams = [
'title' => 'ReservationPullService Error - ReservationList Error',
'logMessage' => '
' . $reservationListParam . '
'
];
$this->mailer->onQueue('logMail', new LogMail($mailParams));
//$logMessage
throw new ApiErrorException('ReservationList Error: ' . $reservationList['message']);
}
foreach ($reservationList['data'] as $reservationKey => $reservation) {
//Check Channel Manager Mapping
$channelManagerMapping = $channelManagerMappingCollect->where('channel_manager_channel_id', $reservation['otaname'])->first();
//Eğer ExtranetWork ise içeri almadan onayla
if ($reservation['otaname'] == 'ExtranetWork') {
$reservationConfirmParam = $this->reservationConfirmParam($propertyMapping['channel_manager_property_id'], $reservation['reservno'], 'ENWRES' . $reservation['reservno']);
//$reservationConfirm = $this->channelService->reservationConfirm($reservationConfirmParam);
$reservationConfirm['status'] = true;
if (!$reservationConfirm['status']) {
throw new ApiErrorException($reservationConfirm['message']);
}
continue;
}
if (empty($channelManagerMapping)) {
//Eğer mapping yapılmış kanal bulunamamış ise rezervasyonu içeri alamazsın
//$logMessage
$mailParams = [
'title' => 'ReservationPullService Error - Channel Manager Mapping',
'logMessage' => '' . print_r(array_merge($propertyMapping, $reservation), true) . '
'
];
$this->mailer->onQueue('logMail', new LogMail($mailParams));
//$logMessage
unset($reservationList['data'][$reservationKey]);
continue;
}
$reservationList['data'][$reservationKey]['property']['id'] = $propertyMapping['property_id'];
$reservationList['data'][$reservationKey]['property']['channel_id'] = $channelManagerMapping['property_channel_id'];
foreach ($reservation['room'] as $roomKey => $room) {
//Check Room Rate Mapping
$channelManagerRoomRate = $channelManagerRoomRateCollect->where('channel_manager_room_id', $room['roomid'])->where('channel_manager_room_rate_id', $room['rateid'])->first();
if (empty($channelManagerRoomRate)) {
$channelManagerRoomRate = $channelManagerRoomRateCollect->where('channel_manager_room_id', $room['roomid'])->first();
}
$reservationList['data'][$reservationKey]['room'][$roomKey]['property']['room_id'] = null;
$reservationList['data'][$reservationKey]['room'][$roomKey]['property']['room_rate_id'] = null;
$reservationList['data'][$reservationKey]['room'][$roomKey]['property']['room_rate_mapping_id'] = null;
$reservationList['data'][$reservationKey]['channelManagerPropertyId'] = $propertyMapping['channel_manager_property_id'];
if (empty($channelManagerRoomRate)) {
//Eğer mapping yapılmış oda bulunamamış ise rezervasyonu içeri alamazsın
//$logMessage
$mailParams = [
'title' => 'ReservationPullService Error - Channel Manager Room Rate Mapping',
'logMessage' => '' . print_r(array_merge($propertyMapping, $reservation), true) . '
'
];
$this->mailer->onQueue('logMail', new LogMail($mailParams));
//$logMessage
unset($reservationList['data'][$reservationKey]);
$this->error(date('Y-m-d H:i:s') . ' : Error: RoomRate Mapping Reservation: ' . $reservation['reservno']);
//Eşleşmeyen ve iptal edilen işlemin otele bildirilmesi.
if ($reservation['status'] == 'C') {
$notificationCancelToPropertyUser = [
'channel' => $reservation['otaname'],
'channelBookingCode' => $reservation['reservno_ota'],
'propertyChannelManager' => $channelManagerMapping['property_channel_manager']['name'],
'nameSurname' => $reservation['firstname'] . ' ' . $reservation['lastname'],
'propertyId' => $propertyMapping['property_id'],
];
$this->mailer->onQueue('cancelBookingMail', new CancelBookingMail($notificationCancelToPropertyUser));
$reservationConfirmParam = $this->reservationConfirmParam($propertyMapping['channel_manager_property_id'], $reservation['reservno'], 'ENWRES' . $reservation['reservno']);
$reservationConfirm = $this->channelService->reservationConfirm($reservationConfirmParam);
if (!$reservationConfirm['status']) {
throw new ApiErrorException($reservationConfirm['message']);
}
}
} else {
$reservationList['data'][$reservationKey]['room'][$roomKey]['property']['room_id'] = $channelManagerRoomRate['property_room_rate_mapping']['room_id'];
$reservationList['data'][$reservationKey]['room'][$roomKey]['property']['room_rate_id'] = $channelManagerRoomRate['property_room_rate_mapping']['room_rate_id'];
$reservationList['data'][$reservationKey]['room'][$roomKey]['property']['room_rate_mapping_id'] = $channelManagerRoomRate['property_room_rate_mapping']['id'];
}
}
}
foreach ($reservationList['data'] as $reservationKey => $reservation) {
//Eğer ExtranetWork ise içeri almadan onayla
if ($reservation['otaname'] == 'ExtranetWork') {
$reservationConfirmParam = $this->reservationConfirmParam($propertyMapping['channel_manager_property_id'], $reservation['reservno'], 'ENWRES' . $reservation['reservno']);
$reservationConfirm = $this->channelService->reservationConfirm($reservationConfirmParam);
if (!$reservationConfirm['status']) {
throw new ApiErrorException($reservationConfirm['message']);
}
continue;
}
$booking = ['status' => false, 'message' => ''];
if ($reservation['status'] == 'A') {
$booking = $this->createBooking($reservation);
} elseif ($reservation['status'] == 'C') {
$booking = $this->cancelBooking($reservation);
} elseif ($reservation['status'] == 'M') {
$booking = $this->modifiedBooking($reservation);
}
//M Modified kayıt bul güncelle ve sonra mail atılacak cancel ile aynı mail yapısı kullanılacak
if ($booking['status']) {
$this->info(date('Y-m-d H:i:s') . ' : Success: ' . $reservation['reservno']);
} else {
//$logMessage
$mailParams = [
'title' => 'ReservationPullService Error - Booking',
'logMessage' => '' . print_r(array_merge($booking, $reservation), true) . '
'
];
$this->mailer->onQueue('logMail', new LogMail($mailParams));
//$logMessage
$this->error(date('Y-m-d H:i:s') . ' : Error: ' . $booking['message']);
}
}
}
}
$this->info(date('Y-m-d H:i:s') . ' : Finished');
} catch (ApiErrorException $e) {
$this->error(date('Y-m-d H:i:s') . ' : Error: ' . $e->getMessage());
} catch
(Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$this->error(date('Y-m-d H:i:s') . ' : Error: ' . $message);
}
}
}