706 lines
28 KiB
PHP
706 lines
28 KiB
PHP
<?php
|
|
|
|
namespace App\Core\Service;
|
|
|
|
use App\Core\Repository\PropertyRoomRateMapping\PropertyRoomRateMappingRepository;
|
|
use App\Core\Repository\PropertyRoomRateChannelMapping\PropertyRoomRateChannelMappingRepository;
|
|
use App\Core\Repository\PropertyRoomRateMappingSetup\PropertyRoomRateMappingSetupRepository;
|
|
use App\Core\Validator\PropertyRoomRateMapping\PropertyRoomRateMappingAddValidator;
|
|
use App\Core\Validator\PropertyRoomRateMapping\PropertyRoomRateMappingUpdateValidator;
|
|
use App\Core\Validator\PropertyRoomRateMapping\PropertyRoomRateMappingDeleteValidator;
|
|
use App\Core\Validator\PropertyRoomRateMapping\PropertyRoomRateMappingAddWithSetupValidator;
|
|
use App\Core\Validator\PropertyRoomRateMapping\PropertyRoomRateMappingSetStatusValidator;
|
|
use App\Core\Validator\PropertyRoomRateMapping\PropertyRoomRateMappingConnectedValidator;
|
|
|
|
use App;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Exception;
|
|
use App\Exceptions\ApiErrorException;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class PropertyRoomRateMappingService
|
|
{
|
|
|
|
private $propertyRoomRateMappingRepository;
|
|
private $propertyRoomRateMappingSetupRepository;
|
|
private $propertyRoomRateMappingAddValidator;
|
|
private $propertyRoomRateMappingUpdateValidator;
|
|
private $propertyRoomRateMappingDeleteValidator;
|
|
private $propertyRoomRateMappingAddWithSetupValidator;
|
|
private $propertyRoomRateMappingSetStatusValidator;
|
|
private $propertyRoomRateChannelMappingRepository;
|
|
|
|
|
|
public function __construct(
|
|
|
|
PropertyRoomRateMappingRepository $propertyRoomRateMappingRepository,
|
|
PropertyRoomRateMappingSetupRepository $propertyRoomRateMappingSetupRepository,
|
|
PropertyRoomRateMappingUpdateValidator $propertyRoomRateMappingUpdateValidator,
|
|
PropertyRoomRateMappingDeleteValidator $propertyRoomRateMappingDeleteValidator,
|
|
PropertyRoomRateMappingAddWithSetupValidator $propertyRoomRateMappingAddWithSetupValidator,
|
|
PropertyRoomRateMappingSetStatusValidator $propertyRoomRateMappingSetStatusValidator,
|
|
PropertyRoomRateChannelMappingRepository $propertyRoomRateChannelMappingRepository,
|
|
PropertyRoomRateMappingAddValidator $propertyRoomRateMappingAddValidator,
|
|
PropertyRoomRateMappingConnectedValidator $propertyRoomRateMappingConnectedValidator
|
|
)
|
|
{
|
|
|
|
$this->propertyRoomRateMappingRepository = $propertyRoomRateMappingRepository;
|
|
$this->propertyRoomRateMappingSetupRepository = $propertyRoomRateMappingSetupRepository;
|
|
$this->propertyRoomRateMappingAddValidator = $propertyRoomRateMappingAddValidator;
|
|
$this->propertyRoomRateMappingUpdateValidator = $propertyRoomRateMappingUpdateValidator;
|
|
$this->propertyRoomRateMappingDeleteValidator = $propertyRoomRateMappingDeleteValidator;
|
|
$this->propertyRoomRateMappingAddWithSetupValidator = $propertyRoomRateMappingAddWithSetupValidator;
|
|
$this->propertyRoomRateMappingSetStatusValidator = $propertyRoomRateMappingSetStatusValidator;
|
|
$this->propertyRoomRateChannelMappingRepository = $propertyRoomRateChannelMappingRepository;
|
|
$this->propertyRoomRateMappingConnectedValidator = $propertyRoomRateMappingConnectedValidator;
|
|
|
|
|
|
}
|
|
|
|
public function create($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
$validationResult = $this->propertyRoomRateMappingAddValidator->validate($params);
|
|
|
|
if ($validationResult->errors()->first()) {
|
|
$errors = $validationResult->errors()->all();
|
|
throw new ApiErrorException($errors);
|
|
}
|
|
|
|
$insertData =
|
|
[
|
|
'room_id' => fillOnUndefined($params, 'room_id', 0),
|
|
'room_rate_id' => fillOnUndefined($params, 'room_rate_id', 0),
|
|
'description' => fillOnUndefined($params, 'description', ''),
|
|
'rack_rate' => fillOnUndefined($params, 'rack_rate', 0),
|
|
'included_occupancy' => fillOnUndefined($params, 'included_occupancy', 0),
|
|
"status" => fillOnUndefined($params, "status", 1),
|
|
"created_by" => fillOnUndefined($params, "created_by", 0),
|
|
"updated_by" => fillOnUndefined($params, "updated_by", 0),
|
|
];
|
|
|
|
$userCreateResult = $this->propertyRoomRateMappingRepository->create($insertData);
|
|
|
|
if ($userCreateResult['status'] != 'success') {
|
|
throw new Exception('api-unknown_error');
|
|
}
|
|
$userData = $userCreateResult["data"];
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $userData,
|
|
];
|
|
|
|
} 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();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function select($param = [], $column = ['*'])
|
|
{
|
|
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
|
|
try {
|
|
|
|
$data = $this->propertyRoomRateMappingRepository->findByCriteria($param, $column);
|
|
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $data,
|
|
];
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = $e->getMessage();
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function update($id, $param = [])
|
|
{
|
|
|
|
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
|
|
$updateResult = $this->propertyRoomRateMappingRepository->update($id, $param);
|
|
if ($updateResult['status'] != 'success') {
|
|
throw new Exception('api-unknown_error');
|
|
}
|
|
$updateData = $updateResult["data"];
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $updateData,
|
|
];
|
|
|
|
} 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();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function updateOrCreate($criteria = [], $saveData = [])
|
|
{
|
|
|
|
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
|
|
try {
|
|
|
|
$data = $this->propertyRoomRateMappingRepository->updateOrCreate($criteria, $saveData);
|
|
if ($data['status'] != 'success') {
|
|
throw new Exception('api-unknown_error');
|
|
}
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $data,
|
|
];
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = $e->getMessage();
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
}
|
|
|
|
return output($response);
|
|
|
|
|
|
}
|
|
|
|
public function addPropertyRoomRateMapping($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
$checkRoomRateMappingRequest = [
|
|
'criteria' => [
|
|
['field' => 'room_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'room_id')],
|
|
['field' => 'room_rate_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'room_rate_id')],
|
|
],
|
|
];
|
|
|
|
$checkRoomRateMapping = $this->propertyRoomRateMappingRepository->findByCriteria($checkRoomRateMappingRequest);
|
|
$checkRoomRateMapping = $checkRoomRateMapping ? $checkRoomRateMapping : null;
|
|
|
|
if ($checkRoomRateMapping) {
|
|
|
|
throw new ApiErrorException('This data was previously added');
|
|
}
|
|
$insertData =
|
|
[
|
|
'room_id' => fillOnUndefined($params, 'room_id'),
|
|
'room_rate_id' => fillOnUndefined($params, 'room_rate_id'),
|
|
'description' => fillOnUndefined($params, 'description'),
|
|
'rack_rate' => fillOnUndefined($params, 'rack_rate'),
|
|
'included_occupancy' => fillOnUndefined($params, 'included_occupancy'),
|
|
"status" => fillOnUndefined($params, "status", 1),
|
|
"created_by" => fillOnUndefined($params, "user_id"),
|
|
"updated_by" => fillOnUndefined($params, "user_id")
|
|
];
|
|
|
|
|
|
$userCreateResult = $this->create($insertData);
|
|
if ($userCreateResult['status'] != 'success') {
|
|
throw new ApiErrorException($userCreateResult['message']);
|
|
}
|
|
$userData = $userCreateResult["data"];
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $userData,
|
|
];
|
|
|
|
} 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();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function addPropertyRoomRateMappingWithSetup($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
DB::beginTransaction();
|
|
|
|
$validationResult = $this->propertyRoomRateMappingAddWithSetupValidator->validate($params);
|
|
|
|
if ($validationResult->errors()->first()) {
|
|
$errors = $validationResult->errors()->all();
|
|
throw new ApiErrorException($errors);
|
|
}
|
|
|
|
$checkRoomRateMappingRequest = [
|
|
'criteria' => [
|
|
['field' => 'room_rate_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'room_rate_id')],
|
|
],
|
|
];
|
|
|
|
$checkRoomRateMapping = $this->propertyRoomRateMappingRepository->findByCriteria($checkRoomRateMappingRequest);
|
|
$checkRoomRateMapping = $checkRoomRateMapping ? $checkRoomRateMapping : [];
|
|
$oldRoomRateRooms = collect($checkRoomRateMapping)->keyBy('room_id')->keys()->toArray();
|
|
$insertRoomRateMappingSetupData = [];
|
|
foreach ($params['room_id'] as $room) {
|
|
|
|
if (in_array($room, $oldRoomRateRooms)) {
|
|
throw new ApiErrorException('This data was previously added');
|
|
}
|
|
$insertRoomRateMappingData =
|
|
[
|
|
'room_id' => $room,
|
|
'room_rate_id' => fillOnUndefined($params, 'room_rate_id'),
|
|
'rack_rate' => fillOnUndefined($params, 'rack_rate'),
|
|
'included_occupancy' => fillOnUndefined($params, 'included_occupancy'),
|
|
"status" => fillOnUndefined($params, "status", 1),
|
|
"created_by" => fillOnUndefined($params, "user_id"),
|
|
"updated_by" => fillOnUndefined($params, "user_id")
|
|
];
|
|
|
|
$insertRoomRateMappingResult = $this->propertyRoomRateMappingRepository->create($insertRoomRateMappingData);
|
|
if ($insertRoomRateMappingResult['status'] != 'success') {
|
|
throw new ApiErrorException($insertRoomRateMappingResult['message']);
|
|
}
|
|
|
|
/* $insertRoomRateMapping = $insertRoomRateMappingResult['data'];
|
|
|
|
foreach ($params['room_rate_mapping_setup'] as $mappingSetup){
|
|
$insertRoomRateMappingSetupData[] = [
|
|
'room_rate_mapping_id' => $insertRoomRateMapping['id'] ,
|
|
'setup_type' => $mappingSetup['setup_type'],
|
|
'value_type' => $mappingSetup['value_type'],
|
|
'value' => $mappingSetup['value'],
|
|
'status' => 1,
|
|
"created_by" => fillOnUndefined($params, "user_id") ,
|
|
"updated_by" => fillOnUndefined($params, "user_id") ,
|
|
'created_at' => Carbon::now()->timestamp,
|
|
'updated_at' => Carbon::now()->timestamp,
|
|
];
|
|
}*/
|
|
|
|
|
|
}
|
|
|
|
/* $insertRoomRateMappingSetupResult = $this->propertyRoomRateMappingSetupRepository->insert($insertRoomRateMappingSetupData);
|
|
if ($insertRoomRateMappingSetupResult['status'] != 'success') {
|
|
throw new Exception('api-unknown_error');
|
|
}*/
|
|
|
|
|
|
$response = [
|
|
'status' => true,
|
|
'data' => null,
|
|
];
|
|
DB::commit();
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = implode(', ', $e->getMessageArr());
|
|
DB::rollBack();
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
DB::rollBack();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function getPropertyRoomRateMapping($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
$criteria = [
|
|
'criteria' => [
|
|
['field' => 'status', 'condition' => '=', 'value' => 1],
|
|
['field' => 'room_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'room_id')],
|
|
|
|
],
|
|
'with' => ['propertyRoomRate', 'propertyRoomRateChannel']
|
|
];
|
|
|
|
$data = $this->propertyRoomRateMappingRepository->findByCriteria($criteria, ['id', 'room_id', 'room_rate_id', 'description', 'rack_rate', 'included_occupancy']);
|
|
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $data,
|
|
];
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = $e->getMessage();
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function getPropertyRoomRateMappingConnected($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
$criteria = [
|
|
'criteria' => [
|
|
['field' => 'status', 'condition' => '=', 'value' => 1],
|
|
['field' => 'room_rate_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'room_rate_id')],
|
|
|
|
],
|
|
'with' => ['propertyRoom']
|
|
];
|
|
|
|
$relationalRoomsByRate = $this->propertyRoomRateMappingRepository->findByCriteria($criteria, ['id', 'room_id', 'room_rate_id']);
|
|
$relationalRoomIds = pickItemFromArray('room_id', $relationalRoomsByRate);
|
|
|
|
|
|
$criteriaRoomRate = [
|
|
'criteria' => [
|
|
['field' => 'status', 'condition' => '=', 'value' => 1],
|
|
],
|
|
'whereIn' =>
|
|
[
|
|
['field' => 'room_id', "value" => $relationalRoomIds]
|
|
],
|
|
'with' => ['propertyRoom.propertyRoomType', 'propertyRoomRate']
|
|
];
|
|
|
|
$roomRates = $this->propertyRoomRateMappingRepository->findByCriteria($criteriaRoomRate);
|
|
|
|
|
|
$connectedValue = [];
|
|
foreach ($roomRates as $roomRate) {
|
|
if ($roomRate['room_rate_id'] == $params['room_rate_id'] && !empty($roomRate['connected_rate_id'])) {
|
|
|
|
$connectedValue[$roomRate['room_id']] = [
|
|
'connected_rate_id' => $roomRate['connected_rate_id'],
|
|
'is_affected_price' => $roomRate['is_affected_price'],
|
|
'affect_price_action_type' => $roomRate['affect_price_action_type'],
|
|
'affect_price_type' => $roomRate['affect_price_type'],
|
|
'affect_price_value' => $roomRate['affect_price_value'],
|
|
];
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$roomRateList = [];
|
|
foreach ($roomRates as $roomRate) {
|
|
|
|
if ($roomRate['room_rate_id'] == $params['room_rate_id']) {
|
|
continue;
|
|
}
|
|
|
|
$roomRateList[$roomRate['room_id']]['room'] = [
|
|
'room_id' => $roomRate['room_id'],
|
|
'room_name' => $roomRate['property_room']['name'],
|
|
'room_type' => $roomRate['property_room']['property_room_type']['name'],
|
|
'status' => $roomRate['property_room']['status'],
|
|
];
|
|
|
|
if (isset($connectedValue[$roomRate['room_id']]) && $connectedValue[$roomRate['room_id']]['connected_rate_id'] == $roomRate['room_rate_id']) {
|
|
$roomRateList[$roomRate['room_id']]['rates'][] = [
|
|
'id' => $roomRate['id'],
|
|
'room_rate_id' => $roomRate['room_rate_id'],
|
|
'room_rate_name' => $roomRate['property_room_rate']['name'],
|
|
'connected_rate_id' => $connectedValue[$roomRate['room_id']]['connected_rate_id'],
|
|
'is_affected_price' => $connectedValue[$roomRate['room_id']]['is_affected_price'],
|
|
'affect_price_action_type' => $connectedValue[$roomRate['room_id']]['affect_price_action_type'],
|
|
'affect_price_type' => $connectedValue[$roomRate['room_id']]['affect_price_type'],
|
|
'affect_price_value' => $connectedValue[$roomRate['room_id']]['affect_price_value'],
|
|
];
|
|
} else {
|
|
$roomRateList[$roomRate['room_id']]['rates'][] = [
|
|
'id' => $roomRate['id'],
|
|
'room_rate_id' => $roomRate['room_rate_id'],
|
|
'room_rate_name' => $roomRate['property_room_rate']['name'],
|
|
'connected_rate_id' => null,
|
|
'is_affected_price' => null,
|
|
'affect_price_action_type' => null,
|
|
'affect_price_type' => null,
|
|
'affect_price_value' => null,
|
|
];
|
|
}
|
|
|
|
}
|
|
|
|
$roomRateList = array_values($roomRateList);
|
|
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $roomRateList,
|
|
];
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = $e->getMessage();
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function syncPropertyRoomRateMappingConnected($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
|
|
DB::beginTransaction();
|
|
|
|
try {
|
|
|
|
$validationResult = $this->propertyRoomRateMappingConnectedValidator->validate($params);
|
|
|
|
if ($validationResult->errors()->first()) {
|
|
$errors = $validationResult->errors()->all();
|
|
throw new ApiErrorException($errors);
|
|
}
|
|
|
|
|
|
$criteria = [
|
|
'criteria' => [
|
|
['field' => 'status', 'condition' => '=', 'value' => 1],
|
|
['field' => 'room_rate_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'room_rate_id')],
|
|
|
|
],
|
|
];
|
|
|
|
$relationalRoomsByRate = $this->propertyRoomRateMappingRepository->findByCriteria($criteria);
|
|
$relationalRoomIds = pickItemFromArray('room_id', $relationalRoomsByRate);
|
|
|
|
//ResetRoomRateConnectParam
|
|
foreach ($relationalRoomsByRate as $roomRate) {
|
|
|
|
$resetRoomRateConnectParam = [
|
|
'connected_rate_id' => null,
|
|
'is_affected_price' => null,
|
|
'affect_price_action_type' => null,
|
|
'affect_price_type' => null,
|
|
'affect_price_value' => null,
|
|
];
|
|
|
|
$this->propertyRoomRateMappingRepository->update($roomRate['id'], $resetRoomRateConnectParam);
|
|
|
|
foreach ($params['connected_room_rate'] as $connectedRoomRate) {
|
|
|
|
if ($roomRate['room_id'] == $connectedRoomRate['room_id'] && $connectedRoomRate['room_rate_id']) {
|
|
|
|
$roomRateConnectParam = [
|
|
'connected_rate_id' => fillOnUndefined($connectedRoomRate, 'room_rate_id'),
|
|
'is_affected_price' => fillOnUndefined($connectedRoomRate, 'is_affected_price'),
|
|
'affect_price_action_type' => fillOnUndefined($connectedRoomRate, 'affect_price_action_type'),
|
|
'affect_price_type' => fillOnUndefined($connectedRoomRate, 'affect_price_type'),
|
|
'affect_price_value' => fillOnUndefined($connectedRoomRate, 'affect_price_value'),
|
|
];
|
|
|
|
$roomRateConnect = $this->propertyRoomRateMappingRepository->update($roomRate['id'], $roomRateConnectParam);
|
|
|
|
if ($roomRateConnect['status'] != 'success') {
|
|
throw new ApiErrorException($roomRateConnect['message']);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
$response = [
|
|
'status' => true
|
|
];
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = $e->getMessage();
|
|
} 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 output($response);
|
|
}
|
|
|
|
public function updatePropertyRoomRateMapping($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
$validationResult = $this->propertyRoomRateMappingUpdateValidator->validate($params);
|
|
|
|
if ($validationResult->errors()->first()) {
|
|
$errors = $validationResult->errors()->all();
|
|
throw new ApiErrorException($errors);
|
|
}
|
|
$updateData =
|
|
[
|
|
'room_id' => fillOnUndefined($params, 'room_id'),
|
|
'room_rate_id' => fillOnUndefined($params, 'room_rate_id'),
|
|
'description' => fillOnUndefined($params, 'description'),
|
|
'rack_rate' => fillOnUndefined($params, 'rack_rate'),
|
|
'included_occupancy' => fillOnUndefined($params, 'included_occupancy'),
|
|
"updated_by" => fillOnUndefined($params, "user_id"),
|
|
];
|
|
|
|
if (isset($params['status'])) {
|
|
$updateData['status'] = fillOnUndefined($params, "status", 0);
|
|
}
|
|
|
|
|
|
$updateResult = $this->update($params['id'], $updateData);
|
|
if ($updateResult['status'] != 'success') {
|
|
throw new ApiErrorException($updateResult['message']);
|
|
}
|
|
$userData = $updateResult["data"];
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $userData,
|
|
];
|
|
|
|
} 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();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function deletePropertyRoomRateMapping($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
$validationResult = $this->propertyRoomRateMappingDeleteValidator->validate($params);
|
|
|
|
if ($validationResult->errors()->first()) {
|
|
$errors = $validationResult->errors()->all();
|
|
throw new ApiErrorException($errors);
|
|
}
|
|
$updateData =
|
|
[
|
|
'status' => 0,
|
|
"updated_by" => fillOnUndefined($params, "user_id")
|
|
];
|
|
|
|
$updateResult = $this->update($params['id'], $updateData);
|
|
if ($updateResult['status'] != 'success') {
|
|
throw new ApiErrorException($updateResult['message']);
|
|
}
|
|
$userData = $updateResult["data"];
|
|
$response = [
|
|
'status' => true,
|
|
'data' => $userData,
|
|
];
|
|
|
|
} 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();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
public function setStatusPropertyRoomRateMapping($params = [])
|
|
{
|
|
$response = ['status' => -1, 'message' => '', 'data' => null];
|
|
try {
|
|
|
|
DB::beginTransaction();
|
|
|
|
$validationResult = $this->propertyRoomRateMappingSetStatusValidator->validate($params);
|
|
|
|
if ($validationResult->errors()->first()) {
|
|
$errors = $validationResult->errors()->all();
|
|
throw new ApiErrorException($errors);
|
|
}
|
|
$updateData =
|
|
[
|
|
'status' => $params['is_selected'],
|
|
"updated_by" => fillOnUndefined($params, "user_id"),
|
|
"updated_at" => time(),
|
|
];
|
|
|
|
$updateResult = $this->propertyRoomRateMappingRepository->update($params['room_rate_mapping_id'], $updateData);
|
|
if ($updateResult['status'] != 'success') {
|
|
throw new Exception('api-unknown_error');
|
|
}
|
|
|
|
if ($params['is_selected'] == false) {
|
|
$updateCriteria = [
|
|
'criteria' => [
|
|
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
|
|
['field' => 'room_rate_mapping_id', 'condition' => '=', 'value' => $params['room_rate_mapping_id']],
|
|
]
|
|
];
|
|
|
|
$updateData = [
|
|
"status" => 0,
|
|
"updated_by" => $params['user_id']
|
|
];
|
|
|
|
$updateResult = $this->propertyRoomRateChannelMappingRepository->updateWhere($updateCriteria, $updateData);
|
|
if ($updateResult['status'] != 'success') {
|
|
throw new Exception('api-unknown_error');
|
|
}
|
|
}
|
|
|
|
|
|
$response = [
|
|
'status' => true,
|
|
'data' => null,
|
|
];
|
|
DB::commit();
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = implode(', ', $e->getMessageArr());
|
|
DB::rollBack();
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
DB::rollBack();
|
|
}
|
|
|
|
return output($response);
|
|
}
|
|
|
|
|
|
}
|