Files
api-extranetwork/app/Http/Controllers/V1/PropertyWebController.php
ExtraNetwork e5c4b6aa13 first commit
2026-05-12 17:04:54 +03:00

2419 lines
117 KiB
PHP

<?php
namespace App\Http\Controllers\V1;
use App\Core\Service\PropertyWebService;
use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\PDF;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Config;
use Exception;
use App\Exceptions\ApiErrorException;
use App\Core\Service\LanguageService;
use App\Core\Service\LanguageBaseService;
use App\Core\Service\PropertyWebMenuService;
use App\Core\Service\PropertyWebMenuMappingService;
use App\Core\Service\PropertyWebSetupService;
use App\Core\Service\PropertyWebLanguageMappingService;
use App\Core\Service\PropertyWebColorMappingService;
use App\Core\Service\PropertyBrandService;
use App\Core\Service\PropertyChannelMappingService;
use App\Core\Service\PropertyGroupMappingService;
use App\Core\Service\FindCountryCodeService;
use App\Core\Service\PropertyWebLogService;
use App\Core\Service\PropertyWebMetaService;
use App\Core\Service\BookingService;
use App\Core\Service\PropertyWebAboutUsService;
use App\Core\Service\PropertyPlaceService;
use App\Core\Service\PropertyAdditionalInfo\PropertyAdditionalInfoService;
use App\Core\Service\PropertyService;
use App\Core\Service\PropertyRoomService;
use App\Core\Service\PropertyWebContentService;
use Illuminate\Support\Str;
use App\Models\PropertyPriceComparison;
class PropertyWebController
{
private $request;
private $propertyWebService;
private $propertyWebMenuService;
private $propertyWebMenuMappingService;
private $propertyWebSetupService;
private $propertyWebLanguageMappingService;
private $propertyWebColorMappingService;
private $propertyBrandService;
private $propertyChannelMappingService;
private $propertyGroupMappingService;
private $findCountryCodeService;
private $propertyWebLogService;
private $propertyWebMetaService;
private $bookingService;
private $propertyWebAboutUsService;
private $propertyPlaceService;
private $propertyAdditionalInfoService;
private $propertyService;
private $propertyRoomService;
private $propertyWebContentService;
const WEB_ACTIVE_USER_MINUTE = 5;
const PLACE = "PLC";
const PLACE_CATEGORY = "PLCCAT";
const MAIN = "MAIN";
const MENU_CODE_LVL1 = "LVL1";
const MENU_CODE_TOP = "TOP";
public function __construct(
Request $request,
PropertyWebService $propertyWebService,
LanguageService $languageService,
LanguageBaseService $languageBaseService,
PropertyWebMenuService $propertyWebMenuService,
PropertyWebMenuMappingService $propertyWebMenuMappingService,
PropertyWebSetupService $propertyWebSetupService,
PropertyWebLanguageMappingService $propertyWebLanguageMappingService,
PropertyWebColorMappingService $propertyWebColorMappingService,
PropertyBrandService $propertyBrandService,
PropertyChannelMappingService $propertyChannelMappingService,
PropertyGroupMappingService $propertyGroupMappingService,
FindCountryCodeService $findCountryCodeService,
PropertyWebLogService $propertyWebLogService,
PropertyWebMetaService $propertyWebMetaService,
BookingService $bookingService,
PropertyPlaceService $propertyPlaceService,
PropertyAdditionalInfoService $propertyAdditionalInfoService,
PropertyWebAboutUsService $propertyWebAboutUsService,
PropertyService $propertyService,
PropertyRoomService $propertyRoomService,
PropertyWebContentService $propertyWebContentService,
PDF $pdf
)
{
$this->request = $request;
$this->propertyWebService = $propertyWebService;
$this->languageService = $languageService;
$this->languageBaseService = $languageBaseService;
$this->propertyWebMenuService = $propertyWebMenuService;
$this->propertyWebMenuMappingService = $propertyWebMenuMappingService;
$this->propertyWebSetupService = $propertyWebSetupService;
$this->propertyWebLanguageMappingService = $propertyWebLanguageMappingService;
$this->propertyWebColorMappingService = $propertyWebColorMappingService;
$this->propertyBrandService = $propertyBrandService;
$this->propertyChannelMappingService = $propertyChannelMappingService;
$this->propertyGroupMappingService = $propertyGroupMappingService;
$this->findCountryCodeService = $findCountryCodeService;
$this->propertyWebLogService = $propertyWebLogService;
$this->propertyWebMetaService = $propertyWebMetaService;
$this->bookingService = $bookingService;
$this->propertyWebAboutUsService = $propertyWebAboutUsService;
$this->propertyPlaceService = $propertyPlaceService;
$this->propertyAdditionalInfoService = $propertyAdditionalInfoService;
$this->propertyService = $propertyService;
$this->propertyRoomService = $propertyRoomService;
$this->propertyWebContentService = $propertyWebContentService;
$this->pdf = $pdf;
}
public function listPropertyWeb(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$propertyRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
],
"orderBy" => [
["field" => "id", "value" => "DESC"]
],
"with" => ['propertyWebTemplate', 'propertyWebLanguage'],
];
$propertyWebs = $this->propertyWebService->select($propertyRequest, ['id', 'domain', 'default_language', 'template_id', 'token', 'status', 'is_published', 'is_dns_checked']);
if ($propertyWebs['status'] != 'success') {
throw new ApiErrorException($propertyWebs['message']);
}
$web = [];
foreach ($propertyWebs['data'] as $key => $propertyWeb) {
//Cache
$dashboardCountablePlaceCacheKey = md5('dashboardCountablePlace-' . $params['property_id']);
if (Cache::has($dashboardCountablePlaceCacheKey)) {
$counts = Cache::get($dashboardCountablePlaceCacheKey);
} else {
$counts = $this->dashboardCountablePlace($params, $propertyWeb['id']);
}
if ($counts['status'] === false) {
throw new ApiErrorException($counts['message']);
}
$webData = [
'live_url' => Config::get('app.mainHostAddress') . '/live/' . $propertyWeb['token'] . '/' . $propertyWeb['default_language'],
'preview_url' => Config::get('app.mainHostAddress') . '/preview/' . $propertyWeb['token'] . '/' . $propertyWeb['default_language'],
'log' => $counts['data']
];
$web[$key] = array_merge($propertyWeb, $webData);
}
$web = reset($web);
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $web];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function getPropertyWeb(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$propertyWebRequest = [
'id' => fillOnUndefined($params, 'property_web_id'),
'property_id' => fillOnUndefined($params, 'property_id')
];
$propertyWeb = $this->propertyWebService->getPropertyWeb($propertyWebRequest);
if ($propertyWeb['status'] != 'success') {
throw new ApiErrorException($propertyWeb['message']);
}
$propertyWeb = $propertyWeb['data'];
$webData = [
'live_url' => Config::get('app.mainHostAddress') . '/live/' . $propertyWeb['token'] . '/' . $propertyWeb['default_language'],
'preview_url' => Config::get('app.mainHostAddress') . '/preview/' . $propertyWeb['token'] . '/' . $propertyWeb['default_language'],
];
$propertyWeb = array_merge($propertyWeb, $webData);
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWeb];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function createPropertyWeb(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($this->request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $this->request->params;
$requestParams = $params;
$requestParams['user_id'] = $this->request->auth->id;
$storePropertyWeb = $this->propertyWebService->create($requestParams);
if ($storePropertyWeb['status'] != 'success') {
throw new ApiErrorException($storePropertyWeb['message']);
}
$propertyWebRequest = [
'id' => $storePropertyWeb['data']['id'],
'property_id' => fillOnUndefined($params, 'property_id'),
'user_id' => $this->request->auth->id
];
$storePropertyWebPhotos = $this->propertyWebService->insertAllPropertyWebPhotosToMapping($propertyWebRequest);
if ($storePropertyWebPhotos['status'] != 'success') {
throw new ApiErrorException($storePropertyWebPhotos['message']);
}
$propertyWeb = $this->propertyWebService->getPropertyWeb($propertyWebRequest);
if ($propertyWeb['status'] != 'success') {
throw new ApiErrorException($propertyWeb['message']);
}
$propertyWeb['data']['log'] = [
'active_user_count' => 0,
'booking_count' => 0,
'country_count' => [],
'mobile_count' => 0,
'web_count' => 0
];
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWeb['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function updatePropertyWeb(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($this->request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $this->request->params;
$requestParams = $params;
$requestParams['user_id'] = $this->request->auth->id;
$propertyWebId = $params['property_web_id'];
$storePropertyWeb = $this->propertyWebService->update($propertyWebId, $requestParams);
if ($storePropertyWeb['status'] != 'success') {
throw new ApiErrorException($storePropertyWeb['message']);
}
$propertyWebRequest = [
'id' => $propertyWebId,
'property_id' => fillOnUndefined($params, 'property_id')
];
$propertyWeb = $this->propertyWebService->getPropertyWeb($propertyWebRequest);
if ($propertyWeb['status'] != 'success') {
throw new ApiErrorException($propertyWeb['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWeb['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function checkDomain(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$params['mode'] = fillOnUndefined($params, 'mode', null);
$propertyRequest = [
'criteria' => [
['field' => 'domain', 'condition' => '=', 'value' => fillOnUndefined($params, 'domain')],
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_published', 'condition' => '=', 'value' => 1],
],
'firstRow' => true,
"with" => [
'property', 'property.propertyAwardsCertificates.awardsCertificateCategory', 'propertyWebTemplate', 'propertyBookingEngine',
'propertyWebMenuMenuMapping', 'propertyWebLanguageMapping',
'propertyGroupMapping.propertyGroup', 'propertyWebAbout', 'propertyWebPopup', 'propertyWebWeather',
'propertyWebComponent', 'propertyWebRoomMapping.roomDetail', 'propertyWebColorMapping'
]
];
$propertyWeb = $this->propertyWebService->select($propertyRequest, ['id', 'property_id', 'domain', 'default_language', 'template_id', 'token', 'is_ssl_active', 'weather_active', 'cover_video_id']);
$propertyGroupId = NULL;
$propertyBookingEngineGroupId = NULL;
if (isset($propertyWeb['data']['property_group_mapping'])) {
foreach ($propertyWeb['data']['property_group_mapping'] as $propertyGroupMapping) {
if (!empty($propertyGroupMapping['property_group'] && $propertyGroupMapping['property_group']['type'] === "MYW")) {
$propertyGroupId = $propertyGroupMapping['property_group']['id'];
}
if (!empty($propertyGroupMapping['property_group'] && $propertyGroupMapping['property_group']['type'] === "MYW")) {
$propertyBookingEngineGroupId = $propertyGroupMapping['property_group']['id'];
}
}
}
if (!isset($propertyWeb['data']['property'])) {
throw new ApiErrorException('Property is not active!', 101);
//101: Passive Property
}
if ($propertyWeb['data']['property']['status'] != 1) {
throw new ApiErrorException('Property is not active!', 101);
//101: Passive Property
}
$propertyGroupMappingRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_group_id', 'condition' => '=', 'value' => $propertyGroupId],
['field' => 'property_id', 'condition' => '!=', 'value' => fillOnUndefined($propertyWeb['data'], 'property_id')]
],
'orderBy' => [
["field" => "order_number", "value" => "ASC"]
],
"with" => ['property.propertyWeb']
];
$propertyGroupWebSiteResult = $this->propertyGroupMappingService->getPropertyGroupMapping($propertyGroupMappingRequest);
if ($propertyGroupWebSiteResult['status'] != 'success') {
throw new ApiErrorException($propertyGroupWebSiteResult['message']);
}
$propertyGroupWebSites = $propertyGroupWebSiteResult['data'];
$groupWebSites = [];
foreach ($propertyGroupWebSites as $propertyGroupWebSite) {
if ($propertyGroupWebSite['property'] && $propertyGroupWebSite['property']['property_web']) {
$propertyGroupWebSite['property']['property_web']['name'] = $propertyGroupWebSite['property']['name'];
$groupWebSites[] = $propertyGroupWebSite['property']['property_web'];
}
}
$groupWebSites = collect($groupWebSites)/*->where('is_published', 1)*/ ->values()->toArray();
if (!empty($propertyWeb['data'])) {
$propertyWeb['data']['property_group_web_sites'] = $groupWebSites;
unset($propertyWeb['data']['property_group_mapping']);
}
$propertyBookingGroupMappingRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_group_id', 'condition' => '=', 'value' => $propertyBookingEngineGroupId],
],
'orderBy' => [
["field" => "order_number", "value" => "ASC"]
],
"with" => [
'property.propertyBookingEngineToken',
'property.propertyWeb.propertyWebPhotoMapping.propertyPhoto'
]
];
$propertyGroupBookingResult = $this->propertyGroupMappingService->getPropertyGroupMapping($propertyBookingGroupMappingRequest);
if ($propertyGroupBookingResult['status'] != 'success') {
throw new ApiErrorException($propertyGroupBookingResult['message']);
}
$propertyGroupBookings = $propertyGroupBookingResult['data'];
$bookingGroupProperties = [];
foreach ($propertyGroupBookings as $key => $propertyGroupBooking) {
if ($propertyGroupBooking['property']) {
$bookingGroupProperties[$key]['property_id'] = $propertyGroupBooking['property']['id'];
$bookingGroupProperties[$key]['name'] = $propertyGroupBooking['property']['name'];
$bookingGroupProperties[$key]['name'] = $propertyGroupBooking['property']['name'];
if ($propertyGroupBooking['property']['property_booking_engine_token']) {
$bookingGroupProperties[$key]['token'] = $propertyGroupBooking['property']['property_booking_engine_token']['token'];
} else {
$bookingGroupProperties[$key]['token'] = null;
}
$bookingGroupProperties[$key]['web'] = null;
if (!empty($propertyGroupBooking['property']['property_web'])) {
if ($propertyGroupBooking['property']['property_web']['status'] && $propertyGroupBooking['property']['property_web']['is_published']) {
$bookingGroupProperties[$key]['web'] = $propertyGroupBooking['property']['property_web']['webProtocolUrl'];
}
}
$propertyWebPhotoMapping = collect($propertyGroupBooking['property']['property_web']['property_web_photo_mapping'])
->where('status', 1)
->where('is_cover', 1)
->toArray();
$bookingGroupProperties[$key]['coverPhoto'] = [];
foreach ($propertyWebPhotoMapping as $propertyWebPhoto) {
$bookingGroupProperties[$key]['coverPhoto'][] = $propertyWebPhoto['property_photo']['photoUrl'];
}
}
}
if (!empty($bookingGroupProperties)) {
$propertyWeb['data']['property_booking_group'] = collect($bookingGroupProperties)->where('token', '!=', NULL)->toArray();
}
if (!empty($propertyWeb['data']['property_booking_engine'])) {
$propertyChannelMappingRequestData = [
'property_id' => $propertyWeb['data']['property_booking_engine']['property_id'],
'channel_id' => $propertyWeb['data']['property_booking_engine']['channel_id']
];
$propertyChannelMappingData = $this->propertyChannelMappingService->checkPropertyChannelMapping($propertyChannelMappingRequestData);
if ($propertyChannelMappingData['data'] === "") {
$propertyWeb['data']['property_booking_engine']['token'] = NULL;
}
}
$propertyWebPreviewOrLiveMenus = [];
if (isset($propertyWeb['data']['property_web_menu_menu_mapping'])) {
$propertyWebPreviewOrLiveMenus = collect($propertyWeb['data']['property_web_menu_menu_mapping'])
->where('status', 1)->toArray(); // live
}
if ($propertyWeb['status'] != 'success' || !$propertyWeb['data']) {
throw new ApiErrorException('Domain not found');
}
$availableLanguageRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_application', 'condition' => '=', 'value' => 1],
['field' => 'is_published', 'condition' => '=', 'value' => 1]
],
];
$availableLanguages = $this->languageService->select($availableLanguageRequest, ['code', 'name', 'language_key']);
$propertyWebLanguageMappings = $propertyWeb['data']['property_web_language_mapping'] ? $propertyWeb['data']['property_web_language_mapping'] : [];
$propertyWebLanguageMappings = collect($propertyWebLanguageMappings)->keyBy('language_code')->toArray();
if ($propertyWebLanguageMappings) {
foreach ($availableLanguages['data'] as $language) {
if (array_key_exists($language['code'], $propertyWebLanguageMappings)) {
$propertyWeb['data']['available_language_codes'][$language['code']] = $language;
}
}
} else {
foreach ($availableLanguages['data'] as $language) {
$propertyWeb['data']['available_language_codes'][$language['code']] = $language;
}
}
$webMenu = [];
if (empty($propertyWebPreviewOrLiveMenus)) {
$myWebMenus = $this->propertyWebMenuService->getPropertyWebMenu();
if ($myWebMenus['status'] != 'success') {
throw new ApiErrorException($myWebMenus['message']);
}
$propertyWeb['data']['web_menu']['LVL1'] = collect($myWebMenus['data']['property_web_menus'])->where('type', '=', '1')->keyBy('alias')->toArray();
$propertyWeb['data']['web_menu']['LEGAL'] = collect($myWebMenus['data']['property_web_menus'])->where('type', '=', '3')->keyBy('alias')->toArray();
unset($propertyWeb['data']['property_web_menu_menu_mapping']);
} else {
$webMenuTypes = collect($propertyWeb['data']['property_web_menu_menu_mapping'])
->where('status', 1)
->groupBy('menu_code')->toArray();
$allLevelData = [];
$allTopData = [];
foreach ($webMenuTypes as $menuTypeKey => $webMenuType) {
if ($menuTypeKey === self::MENU_CODE_LVL1) {
$allLevelData = $this->getTypeMenus($webMenuType, $menuTypeKey);
} elseif ($menuTypeKey === self::MENU_CODE_TOP) {
$allTopData = $this->getTypeMenus($webMenuType, $menuTypeKey);
}
}
$staticMenu = $this->propertyWebMenuService->getPropertyWebMenu();
if ($staticMenu['status'] != 'success') {
throw new ApiErrorException($staticMenu['message']);
}
unset($propertyWeb['data']['property_web_menu_menu_mapping']);
$propertyWeb['data']['web_menu'] = array_merge($allTopData, $allLevelData);
$propertyWeb['data']['web_menu']['LEGAL'] = collect($staticMenu['data']['property_web_menus'])->where('type', '=', '3')->keyBy('alias')->toArray();
}
if ($propertyWeb['data']['property']['country'] == 'TR') {
unset($propertyWeb['data']['web_menu']['LEGAL']['Protection']);
} else {
unset($propertyWeb['data']['web_menu']['LEGAL']['Kvkk']);
}
//property_web_room_mapping
$propertyWebRoomMapping = [];
$propertyWebRoomMappingTemp = $propertyWeb['data']['property_web_room_mapping'];
unset($propertyWeb['data']['property_web_room_mapping']);
foreach ($propertyWebRoomMappingTemp as $propertyWebRoom) {
$propertyWebRoomMapping[] = [
'id' => $propertyWebRoom['room_detail']['id'],
'name' => $propertyWebRoom['room_detail']['name'],
'slug' => Str::slug($propertyWebRoom['room_detail']['name'], $separator = '-', $language = 'en') . '-' . $propertyWebRoom['room_detail']['id']
];
}
$propertyWeb['data']['property_web_room_mapping'] = $propertyWebRoomMapping;
//property_web_room_mapping
$agentIp = !empty($params['agentInfo']) && $params['agentInfo']['ip'] ? $params['agentInfo']['ip'] : NULL;
if ($agentIp !== NULL) {
// Find Country Code with IP
$ipResponse = $this->findCountryCodeService->findCountryWithIpAddress($agentIp);
if ($ipResponse['status'] !== 'success') {
//throw new ApiErrorException('IP Not Found');
}
// Create or Update Web Log
if (!empty($params['agentInfo']) && !empty($ipResponse['data']) && !empty($ipResponse['data']['code']) && $ipResponse['status']) {
$agentParams = [
'web_id' => fillOnUndefined($propertyWeb['data'], 'id'),
'ip' => $agentIp,
'country_code' => $ipResponse['data'] ? $ipResponse['data']['code'] : null,
'isRobot' => $params['agentInfo']['isRobot'] === true ? $params['agentInfo']['isRobot'] : false,
'isDesktop' => $params['agentInfo']['isDesktop'] === true ? $params['agentInfo']['isDesktop'] : false,
'isPhone' => $params['agentInfo']['isPhone'] === true ? $params['agentInfo']['isPhone'] : false
];
if ($agentParams['isRobot'] === false) {
$webLogResponse = $this->propertyWebLogService->createPropertyWebLog($agentParams);
if ($webLogResponse['status'] != 'success') {
throw new ApiErrorException('Property Web Log Not Created');
}
}
}
}
//PropertyWebPopUp
$propertyWebPopUp = null;
if ($propertyWeb['data']['property_web_popup']) {
$propertyWebPopUp = collect($propertyWeb['data']['property_web_popup'])
->where('start_date', '<=', Carbon::now()->toDateString())
->where('end_date', '>=', Carbon::now()->toDateString())
->toArray();
$propertyWebPopUp = array_values($propertyWebPopUp);
}
$propertyWeb['data']['property_web_popup'] = $propertyWebPopUp;
//PropertyWebPopUp
//PropertyWebContent
$propertyWebContent = null;
$propertyWebContentCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $propertyWeb['data']['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1]
],
//'with' => ['ContentCategory'],
'orderBy' => [
['field' => 'id', 'value' => 'DESC']
]
];
$propertyWebContentCriteria['skip'] = 0;
$propertyWebContentCriteria['take'] = 100;
$propertyWebContent = $this->propertyWebContentService->select($propertyWebContentCriteria, ['id', 'title', 'property_id', 'content_category_id', 'slug', 'language_code', 'image']);
$propertyWebContent = ($propertyWebContent['status'] == 'success' && !empty($propertyWebContent['data'])) ? array_values($propertyWebContent['data']) : [];
$propertyWebContentGrouped = null;
foreach ($propertyWebContent as $content) {
if (isset($propertyWebContentGrouped[$content['language_code']]) && count($propertyWebContentGrouped[$content['language_code']]) > 2) {
continue;
}
$propertyWebContentGrouped[$content['language_code']][] = $content;
}
$propertyWeb['data']['property_web_content'] = $propertyWebContentGrouped;
//PropertyWebContent
//property_web_weather
$propertyWeb['data']['property_web_weather'] = $propertyWeb['data']['weather_active'] == 1 ? $propertyWeb['data']['property_web_weather'] : null;
//PropertyWebComponent
if ($propertyWeb['data']['property_web_component']) {
$propertyWebComponent = $propertyWeb['data']['property_web_component'];
unset($propertyWeb['data']['property_web_component']);
$propertyWebComponentGoogleTagManager = collect($propertyWebComponent)
->where('component_id', 1)
->first();
if ($propertyWebComponentGoogleTagManager) {
$propertyWeb['data']['property_web_component']['google_tag_manager'] = $propertyWebComponentGoogleTagManager['parameterArray'];
}
$propertyWebComponentGoogleAnalytics = collect($propertyWebComponent)
->where('component_id', 4)
->first();
if ($propertyWebComponentGoogleAnalytics) {
$propertyWeb['data']['property_web_component']['google_analytics'] = $propertyWebComponentGoogleAnalytics['parameterArray'];
}
$propertyWebComponentJotform = collect($propertyWebComponent)
->where('component_id', 5)
->first();
if ($propertyWebComponentJotform) {
$propertyWeb['data']['property_web_component']['jotform'] = $propertyWebComponentJotform['parameterArray'];
}
$propertyWebComponentMetaPixel = collect($propertyWebComponent)
->where('component_id', 6)
->first();
if ($propertyWebComponentMetaPixel) {
$propertyWeb['data']['property_web_component']['metapixel'] = $propertyWebComponentMetaPixel['parameterArray'];
}
$propertyWebComponentTawkTo = collect($propertyWebComponent)
->where('component_id', 7)
->first();
if ($propertyWebComponentTawkTo) {
$propertyWeb['data']['property_web_component']['tawkto'] = $propertyWebComponentTawkTo['parameterArray'];
}
$propertyWebComponentGoogleSiteVerification = collect($propertyWebComponent)
->where('component_id', 8)
->first();
if ($propertyWebComponentGoogleSiteVerification) {
$propertyWeb['data']['property_web_component']['googlesiteverification'] = $propertyWebComponentGoogleSiteVerification['parameterArray'];
}
$propertyWebComponentSojernWeb = collect($propertyWebComponent)
->where('component_id', 9)
->first();
if ($propertyWebComponentSojernWeb) {
$propertyWeb['data']['property_web_component']['sojernweb'] = $propertyWebComponentSojernWeb['parameterArray'];
}
$propertyWebComponentSojernBookingEngine = collect($propertyWebComponent)
->where('component_id', 10)
->first();
if ($propertyWebComponentSojernBookingEngine) {
$propertyWeb['data']['property_web_component']['sojernbookingengine'] = $propertyWebComponentSojernBookingEngine['parameterArray'];
}
$propertyWebComponentGoogleAds = collect($propertyWebComponent)
->where('component_id', 11)
->first();
if ($propertyWebComponentGoogleAds) {
$propertyWeb['data']['property_web_component']['googleads'] = $propertyWebComponentGoogleAds['parameterArray'];
}
$propertyWebComponentMetaVerification = collect($propertyWebComponent)
->where('component_id', 12)
->first();
if ($propertyWebComponentMetaVerification) {
$propertyWeb['data']['property_web_component']['metaverification'] = $propertyWebComponentMetaVerification['parameterArray'];
}
$propertyWebComponentClarityweb = collect($propertyWebComponent)
->where('component_id', 13)
->first();
if ($propertyWebComponentClarityweb) {
$propertyWeb['data']['property_web_component']['clarityweb'] = $propertyWebComponentClarityweb['parameterArray'];
}
$propertyWebComponentClarityBookingEngine = collect($propertyWebComponent)
->where('component_id', 14)
->first();
if ($propertyWebComponentClarityBookingEngine) {
$propertyWeb['data']['property_web_component']['claritybookingengine'] = $propertyWebComponentClarityBookingEngine['parameterArray'];
}
}
//PropertyWebComponent
//PropertyAwardsCertificates
if (!empty($propertyWeb['data']['property']['property_awards_certificates'])) {
$staticPolicyIds = [134, 177, 211, 232];
$staticPolicyGroup = [];
$propertyAwardsCertificates = collect($propertyWeb['data']['property']['property_awards_certificates'])->where('status', 1)->whereIn('category_id', $staticPolicyIds)->sortByDesc('id')->toArray();
if ($propertyAwardsCertificates) {
foreach ($propertyAwardsCertificates as $propertyAwardsCertificate) {
if (isset($staticPolicyGroup[$propertyAwardsCertificate['category_id']]['language'][$propertyAwardsCertificate['language_code']])) {
continue;
}
$staticPolicyGroup[$propertyAwardsCertificate['category_id']]['name'] = $propertyAwardsCertificate['awards_certificate_category']['name'];
$staticPolicyGroup[$propertyAwardsCertificate['category_id']]['language_key'] = $propertyAwardsCertificate['awards_certificate_category']['language_key'];
if (empty($propertyAwardsCertificate['language_code'])) {
$propertyAwardsCertificate['language_code'] = 'default';
}
$staticPolicyGroup[$propertyAwardsCertificate['category_id']]['language'][$propertyAwardsCertificate['language_code']] = [
'file' => $propertyAwardsCertificate['file_path'],
'url' => Config::get('app.imageUrl') . '/property-photos/' . $propertyWeb['data']['property']['id'] . '/awards-certificates/' . $propertyAwardsCertificate['file_path']
];
}
}
$propertyWeb['data']['static_policy'] = !empty($staticPolicyGroup) ? $staticPolicyGroup : null;
unset($propertyWeb['data']['property']['property_awards_certificates']);
}
//PropertyAwardsCertificates
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $propertyWeb['data']['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain',
'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates.awardsCertificateCategory',
'propertyPaymentMapping'
],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$propertyDetail = $this->propertyService->select($propertyRequest, $getPropertyFields);
$propertyDetail = $propertyDetail['data'];
$propertyDetail['property_brand']['logo_url'] = isset($propertyDetail['property_brand']) ? Config::get('app.imageUrl') . '/property-photos/' . $propertyDetail['id'] . "/logo/" . $propertyDetail['property_brand']['logo_name'] . '_250x250.' . $propertyDetail['property_brand']['logo_file_ext'] : null;
$propertyDetail['property_contact']['social_media_addresses'] = json_decode($propertyDetail['property_contact']['social_media_addresses'], 1);
$colorCodes = [];
foreach ($propertyWeb['data']['property_web_color_mapping'] as $color) {
$colorCodes[] = [
'color_number' => $color['order_number'],
'color_code' => $color['color_code'],
];
}
$colorCodes = $colorCodes ? $colorCodes : json_decode($propertyDetail['property_brand']['color_codes'], 1);
$propertyDetail['property_brand']['color_codes'] = $colorCodes;
$propertyAdditionalInfo = null;
$propertyAdditionalInfoRequest = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy(['property_id' => $propertyDetail['id']]);
if (isset($propertyAdditionalInfoRequest['data'])) {
$propertyAdditionalInfo = $propertyAdditionalInfoRequest['data'];
}
//coverPhotos
$coverPhotosParam = [
'property_id' => $propertyWeb['data']['property']['id'],
'property_web_id' => $propertyWeb['data']['id'],
'mode' => $params['mode'],
];
$landingPhoto = $this->coverPhotos($coverPhotosParam);
//coverPhotos
$propertyWeb['data']['property']['name'] = $propertyDetail['name'];
$propertyWeb['data']['property']['property_type'] = $propertyDetail['property_type']['name'];
$propertyWeb['data']['property']['property_type_key'] = $propertyDetail['property_type']['language_key'];
$propertyWeb['data']['property']['property_chain'] = $propertyDetail['property_chain']['name'];
$propertyWeb['data']['property']['official_name'] = $propertyDetail['official_name'];
$propertyWeb['data']['property']['tax_office'] = $propertyDetail['tax_office'];
$propertyWeb['data']['property']['tax_number'] = $propertyDetail['tax_number'];
$propertyWeb['data']['property']['currency_type'] = $propertyDetail['currency_type'];
$propertyWeb['data']['property']['property_brand'] = $propertyDetail['property_brand'];
$propertyWeb['data']['property']['property_contact'] = $propertyDetail['property_contact'];
$propertyWeb['data']['property']['description'] = $propertyDetail['name'];
$propertyWeb['data']['property']['additional_info'] = $propertyAdditionalInfo;
$propertyWeb['data']['property']['landing_photo'] = $landingPhoto;
$propertyWeb['data']['is_virtual_payment_active'] = collect($propertyDetail['property_payment_mapping'])->where('status', 1)->count() > 0 ? true : false;
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWeb['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
$response['errorCode'] = $e->getCode();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode'], fillOnUndefined($response, 'errorCode', null));
}
public function checkDomainToken(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$propertyRequest = [
'criteria' => [
['field' => 'token', 'condition' => '=', 'value' => fillOnUndefined($params, 'token')],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'firstRow' => true,
"with" => [
'property', 'propertyWebTemplate', 'propertyBookingEngine',
'propertyWebMenuMenuMapping', 'propertyWebLanguageMapping',
'propertyGroupMapping.propertyGroup', 'propertyWebAbout', 'propertyWebPopup', 'propertyWebWeather',
'propertyWebComponent', 'propertyWebRoomMapping.roomDetail'
]
];
$propertyWeb = $this->propertyWebService->select($propertyRequest, ['id', 'property_id', 'domain', 'default_language', 'template_id', 'token', 'is_ssl_active', 'weather_active', 'cover_video_id']);
$propertyGroupId = NULL;
$propertyBookingEngineGroupId = NULL;
if (isset($propertyWeb['data']['property_group_mapping'])) {
foreach ($propertyWeb['data']['property_group_mapping'] as $propertyGroupMapping) {
if (!empty($propertyGroupMapping['property_group'] && $propertyGroupMapping['property_group']['type'] === "MYW")) {
$propertyGroupId = $propertyGroupMapping['property_group']['id'];
}
if (!empty($propertyGroupMapping['property_group'] && $propertyGroupMapping['property_group']['type'] === "BEN")) {
$propertyBookingEngineGroupId = $propertyGroupMapping['property_group']['id'];
}
}
}
$propertyGroupMappingRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_group_id', 'condition' => '=', 'value' => $propertyGroupId],
['field' => 'property_id', 'condition' => '!=', 'value' => fillOnUndefined($propertyWeb['data'], 'property_id')]
],
'orderBy' => [
["field" => "order_number", "value" => "ASC"]
],
"with" => ['property.propertyWeb']
];
$propertyGroupWebSiteResult = $this->propertyGroupMappingService->getPropertyGroupMapping($propertyGroupMappingRequest);
if ($propertyGroupWebSiteResult['status'] != 'success') {
throw new ApiErrorException($propertyGroupWebSiteResult['message']);
}
$propertyGroupWebSites = $propertyGroupWebSiteResult['data'];
$groupWebSites = [];
foreach ($propertyGroupWebSites as $propertyGroupWebSite) {
if ($propertyGroupWebSite['property'] && $propertyGroupWebSite['property']['property_web']) {
$propertyGroupWebSite['property']['property_web']['name'] = $propertyGroupWebSite['property']['name'];
$groupWebSites[] = $propertyGroupWebSite['property']['property_web'];
}
}
$groupWebSites = collect($groupWebSites)/*->where('is_published', 1)*/ ->values()->toArray();
if (!empty($propertyWeb['data'])) {
$propertyWeb['data']['property_group_web_sites'] = $groupWebSites;
unset($propertyWeb['data']['property_group_mapping']);
}
$propertyBookingGroupMappingRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_group_id', 'condition' => '=', 'value' => $propertyBookingEngineGroupId],
],
'orderBy' => [
["field" => "order_number", "value" => "ASC"]
],
"with" => ['property.propertyBookingEngineToken', 'property.propertyWeb']
];
$propertyGroupBookingResult = $this->propertyGroupMappingService->getPropertyGroupMapping($propertyBookingGroupMappingRequest);
if ($propertyGroupBookingResult['status'] != 'success') {
throw new ApiErrorException($propertyGroupBookingResult['message']);
}
$propertyGroupBookings = $propertyGroupBookingResult['data'];
$bookingGroupProperties = [];
foreach ($propertyGroupBookings as $key => $propertyGroupBooking) {
if ($propertyGroupBooking['property']) {
$bookingGroupProperties[$key]['property_id'] = $propertyGroupBooking['property']['id'];
$bookingGroupProperties[$key]['name'] = $propertyGroupBooking['property']['name'];
if ($propertyGroupBooking['property']['property_booking_engine_token']) {
$bookingGroupProperties[$key]['token'] = $propertyGroupBooking['property']['property_booking_engine_token']['token'];
} else {
$bookingGroupProperties[$key]['token'] = NULL;
}
$bookingGroupProperties[$key]['web'] = null;
if (!empty($propertyGroupBooking['property']['property_web'])) {
if ($propertyGroupBooking['property']['property_web']['status'] && $propertyGroupBooking['property']['property_web']['is_published']) {
$bookingGroupProperties[$key]['web'] = $propertyGroupBooking['property']['property_web']['webProtocolUrl'];
}
}
}
}
if (!empty($bookingGroupProperties)) {
$propertyWeb['data']['property_booking_group'] = collect($bookingGroupProperties)->where('token', '!=', NULL)->toArray();
}
$mywebServiceMode = fillOnUndefined($params, 'serviceMode', 'live'); // preview or live
$mywebServiceModeStatus = $mywebServiceMode === "live" ? 1 : 2;
if (!empty($propertyWeb['data']['property_booking_engine'])) {
$propertyChannelMappingRequestData = [
'property_id' => $propertyWeb['data']['property_booking_engine']['property_id'],
'channel_id' => $propertyWeb['data']['property_booking_engine']['channel_id']
];
$propertyChannelMappingData = $this->propertyChannelMappingService->checkPropertyChannelMapping($propertyChannelMappingRequestData);
if ($propertyChannelMappingData['data'] === "") {
$propertyWeb['data']['property_booking_engine']['token'] = NULL;
}
}
$propertyWebPreviewOrLiveMenus = [];
if (isset($propertyWeb['data']['property_web_menu_menu_mapping'])) {
$propertyWebPreviewOrLiveMenus = collect($propertyWeb['data']['property_web_menu_menu_mapping'])
->where('status', $mywebServiceModeStatus)->toArray();
}
if ($propertyWeb['status'] != 'success' || !$propertyWeb['data']) {
throw new ApiErrorException('Domain not found');
}
$availableLanguageRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_application', 'condition' => '=', 'value' => 1],
['field' => 'is_published', 'condition' => '=', 'value' => 1]
],
];
$availableLanguages = $this->languageService->select($availableLanguageRequest, ['code', 'name', 'language_key']);
$propertyWebLanguageMappings = $propertyWeb['data']['property_web_language_mapping'] ? $propertyWeb['data']['property_web_language_mapping'] : [];
$propertyWebLanguageMappings = collect($propertyWebLanguageMappings)
->keyBy('language_code')
->where('status', $mywebServiceModeStatus)
->toArray();
if ($propertyWebLanguageMappings) {
foreach ($availableLanguages['data'] as $language) {
if (array_key_exists($language['code'], $propertyWebLanguageMappings)) {
$propertyWeb['data']['available_language_codes'][$language['code']] = $language;
}
}
} else {
foreach ($availableLanguages['data'] as $language) {
$propertyWeb['data']['available_language_codes'][$language['code']] = $language;
}
}
$webMenu = [];
if (empty($propertyWebPreviewOrLiveMenus)) {
$myWebMenus = $this->propertyWebMenuService->getPropertyWebMenu();
if ($myWebMenus['status'] != 'success') {
throw new ApiErrorException($myWebMenus['message']);
}
$propertyWeb['data']['web_menu']['LVL1'] = collect($myWebMenus['data']['property_web_menus'])->where('type', '=', '1')->keyBy('alias')->toArray();
$propertyWeb['data']['web_menu']['LEGAL'] = collect($myWebMenus['data']['property_web_menus'])->where('type', '=', '3')->keyBy('alias')->toArray();
unset($propertyWeb['data']['property_web_menu_menu_mapping']);
} else {
$webMenuTypes = collect($propertyWeb['data']['property_web_menu_menu_mapping'])
->where('status', $mywebServiceModeStatus)
->groupBy('menu_code')->toArray();
$allLevelData = [];
$allTopData = [];
foreach ($webMenuTypes as $menuTypeKey => $webMenuType) {
if ($menuTypeKey === self::MENU_CODE_LVL1) {
$allLevelData = $this->getTypeMenus($webMenuType, $menuTypeKey);
} elseif ($menuTypeKey === self::MENU_CODE_TOP) {
$allTopData = $this->getTypeMenus($webMenuType, $menuTypeKey);
}
}
unset($propertyWeb['data']['property_web_menu_menu_mapping']);
$propertyWeb['data']['web_menu'] = array_merge($allTopData, $allLevelData);
}
//property_web_room_mapping
$propertyWebRoomMapping = [];
$propertyWebRoomMappingTemp = $propertyWeb['data']['property_web_room_mapping'];
unset($propertyWeb['data']['property_web_room_mapping']);
foreach ($propertyWebRoomMappingTemp as $propertyWebRoom) {
$propertyWebRoomMapping[] = [
'id' => $propertyWebRoom['room_detail']['id'],
'name' => $propertyWebRoom['room_detail']['name'],
'slug' => Str::slug($propertyWebRoom['room_detail']['name'], $separator = '-', $language = 'en') . '-' . $propertyWebRoom['room_detail']['id']
];
}
$propertyWeb['data']['property_web_room_mapping'] = $propertyWebRoomMapping;
//property_web_room_mapping
//PropertyWebPopUp
$propertyWebPopUp = null;
if ($propertyWeb['data']['property_web_popup']) {
$propertyWebPopUp = collect($propertyWeb['data']['property_web_popup'])
->where('start_date', '<=', Carbon::now()->toDateString())
->where('end_date', '>=', Carbon::now()->toDateString())
->toArray();
$propertyWebPopUp = array_values($propertyWebPopUp);
}
$propertyWeb['data']['property_web_popup'] = $propertyWebPopUp;
//PropertyWebPopUp
//PropertyWebContent
$propertyWebContent = null;
$propertyWebContentCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $propertyWeb['data']['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1]
],
//'with' => ['ContentCategory'],
'orderBy' => [
['field' => 'id', 'value' => 'DESC']
]
];
$propertyWebContentCriteria['skip'] = 0;
$propertyWebContentCriteria['take'] = 100;
$propertyWebContent = $this->propertyWebContentService->select($propertyWebContentCriteria, ['id', 'title', 'property_id', 'slug', 'content_category_id', 'language_code', 'image']);
$propertyWebContent = ($propertyWebContent['status'] == 'success' && !empty($propertyWebContent['data'])) ? array_values($propertyWebContent['data']) : [];
$propertyWebContentGrouped = null;
foreach ($propertyWebContent as $content) {
if (isset($propertyWebContentGrouped[$content['language_code']]) && count($propertyWebContentGrouped[$content['language_code']]) > 2) {
continue;
}
$propertyWebContentGrouped[$content['language_code']][] = $content;
}
$propertyWeb['data']['property_web_content'] = $propertyWebContentGrouped;
//PropertyWebContent
//property_web_weather
$propertyWeb['data']['property_web_weather'] = $propertyWeb['data']['weather_active'] == 1 ? $propertyWeb['data']['property_web_weather'] : null;
//PropertyWebComponent
if ($propertyWeb['data']['property_web_component']) {
$propertyWebComponent = $propertyWeb['data']['property_web_component'];
unset($propertyWeb['data']['property_web_component']);
$propertyWebComponentGoogleTagManager = collect($propertyWebComponent)
->where('component_id', 1)
->first();
if ($propertyWebComponentGoogleTagManager) {
$propertyWeb['data']['property_web_component']['google_tag_manager'] = $propertyWebComponentGoogleTagManager['parameterArray'];
}
$propertyWebComponentGoogleAnalytics = collect($propertyWebComponent)
->where('component_id', 4)
->first();
if ($propertyWebComponentGoogleAnalytics) {
$propertyWeb['data']['property_web_component']['google_analytics'] = $propertyWebComponentGoogleAnalytics['parameterArray'];
}
$propertyWebComponentJotform = collect($propertyWebComponent)
->where('component_id', 5)
->first();
if ($propertyWebComponentJotform) {
$propertyWeb['data']['property_web_component']['jotform'] = $propertyWebComponentJotform['parameterArray'];
}
$propertyWebComponentMetaPixel = collect($propertyWebComponent)
->where('component_id', 6)
->first();
if ($propertyWebComponentMetaPixel) {
$propertyWeb['data']['property_web_component']['metapixel'] = $propertyWebComponentMetaPixel['parameterArray'];
}
$propertyWebComponentTawkTo = collect($propertyWebComponent)
->where('component_id', 7)
->first();
if ($propertyWebComponentTawkTo) {
$propertyWeb['data']['property_web_component']['tawkto'] = $propertyWebComponentTawkTo['parameterArray'];
}
$propertyWebComponentGoogleSiteVerification = collect($propertyWebComponent)
->where('component_id', 8)
->first();
if ($propertyWebComponentGoogleSiteVerification) {
$propertyWeb['data']['property_web_component']['googlesiteverification'] = $propertyWebComponentGoogleSiteVerification['parameterArray'];
}
$propertyWebComponentMetaVerification = collect($propertyWebComponent)
->where('component_id', 12)
->first();
if ($propertyWebComponentMetaVerification) {
$propertyWeb['data']['property_web_component']['metaverification'] = $propertyWebComponentMetaVerification['parameterArray'];
}
}
//PropertyWebComponent
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $propertyWeb['data']['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain',
'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates.awardsCertificateCategory',
'propertyPaymentMapping'
],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$propertyDetail = $this->propertyService->select($propertyRequest, $getPropertyFields);
$propertyDetail = $propertyDetail['data'];
$propertyDetail['property_brand']['logo_url'] = $propertyDetail['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $propertyDetail['id'] . "/logo/" . $propertyDetail['property_brand']['logo_name'] . '_250x250.' . $propertyDetail['property_brand']['logo_file_ext'] : null;
$propertyDetail['property_contact']['social_media_addresses'] = json_decode($propertyDetail['property_contact']['social_media_addresses'], 1);
$colorCodes = json_decode($propertyDetail['property_brand']['color_codes'], 1);
$propertyDetail['property_brand']['color_codes'] = $colorCodes;
$propertyAdditionalInfo = null;
$propertyAdditionalInfoRequest = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy(['property_id' => $propertyDetail['id']]);
if (isset($propertyAdditionalInfoRequest['data'])) {
$propertyAdditionalInfo = $propertyAdditionalInfoRequest['data'];
}
//coverPhotos
$coverPhotosParam = [
'property_id' => $propertyWeb['data']['property']['id'],
'property_web_id' => $propertyWeb['data']['id'],
'mode' => $mywebServiceModeStatus,
];
$landingPhoto = $this->coverPhotos($coverPhotosParam);
//coverPhotos
$propertyWeb['data']['property']['name'] = $propertyDetail['name'];
$propertyWeb['data']['property']['property_type'] = $propertyDetail['property_type']['name'];
$propertyWeb['data']['property']['property_type_key'] = $propertyDetail['property_type']['language_key'];
$propertyWeb['data']['property']['property_chain'] = $propertyDetail['property_chain']['name'];
$propertyWeb['data']['property']['official_name'] = $propertyDetail['official_name'];
$propertyWeb['data']['property']['tax_office'] = $propertyDetail['tax_office'];
$propertyWeb['data']['property']['tax_number'] = $propertyDetail['tax_number'];
$propertyWeb['data']['property']['currency_type'] = $propertyDetail['currency_type'];
$propertyWeb['data']['property']['property_brand'] = $propertyDetail['property_brand'];
$propertyWeb['data']['property']['property_contact'] = $propertyDetail['property_contact'];
$propertyWeb['data']['property']['description'] = $propertyDetail['name'];
$propertyWeb['data']['property']['additional_info'] = $propertyAdditionalInfo;
$propertyWeb['data']['property']['landing_photo'] = $landingPhoto;
$propertyWeb['data']['is_virtual_payment_active'] = collect($propertyDetail['property_payment_mapping'])->where('status', 1)->count() > 0 ? true : false;
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWeb['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function checkDomainWebGroup(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$propertyRequest = [
'criteria' => [
['field' => 'domain', 'condition' => '=', 'value' => fillOnUndefined($params, 'domain')],
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_published', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyGroupMapping.property.propertyWeb.propertyWebPhotoMapping.propertyPhoto',
'propertyGroupMapping.property.propertyBrand', 'propertyGroupMapping.property.propertyContact',
'propertyGroupMapping.property.propertyBookingEngineToken'
],
'firstRow' => true,
];
$propertyWebGroup = $this->propertyWebService->selectWebGroup($propertyRequest,
[
'id', 'title', 'property_group_id', 'domain', 'default_language',
'logo', 'is_ssl_active', 'address', 'email', 'phone', 'template', 'slogan'
]);
if ($propertyWebGroup['status'] != 'success') {
throw new ApiErrorException(lang('Domain not found.'));
}
$propertyWebGroup = !empty($propertyWebGroup['data']) ? $propertyWebGroup['data'] : null;
if (empty($propertyWebGroup)) {
throw new ApiErrorException(lang('Domain not found.'));
}
$propertyWebGroupData = [];
$propertyWebGroupData['title'] = $propertyWebGroup['title'];
$propertyWebGroupData['domain'] = $propertyWebGroup['domain'];
$propertyWebGroupData['template'] = $propertyWebGroup['template'];
$propertyWebGroupData['default_language'] = $propertyWebGroup['default_language'];
$propertyWebGroupData['logo'] = $propertyWebGroup['logo'];
$propertyWebGroupData['logoUrl'] = $propertyWebGroup['logoUrl'];
$propertyWebGroupData['address'] = $propertyWebGroup['address'];
$propertyWebGroupData['email'] = $propertyWebGroup['email'];
$propertyWebGroupData['phone'] = $propertyWebGroup['phone'];
$propertyWebGroupData['is_ssl_active'] = $propertyWebGroup['is_ssl_active'];
$propertyWebGroupData['slogan'] = $propertyWebGroup['slogan'];
if (!empty($propertyWebGroup['property_group_mapping'])) {
$propertyWebGroup['property_group_mapping'] = collect($propertyWebGroup['property_group_mapping'])->sortBy('order_number')->toArray();
}
$propertyGroupMapping = [];
foreach ($propertyWebGroup['property_group_mapping'] as $property) {
if (empty($property['property']['property_web'])) {
continue;
}
if ($property['property']['property_web']['status'] != 1 || $property['property']['property_web']['is_published'] != 1) {
continue;
}
$propertyGroupMapping[$property['property_id']]['id'] = $property['property']['id'];
$propertyGroupMapping[$property['property_id']]['title'] = $property['property']['name'];
$propertyGroupMapping[$property['property_id']]['domain'] = $property['property']['property_web']['domain'];
$propertyGroupMapping[$property['property_id']]['webProtocolUrl'] = $property['property']['property_web']['webProtocolUrl'];
$propertyGroupMapping[$property['property_id']]['logoUrl'] = $property['property']['property_brand']['logoUrl'];
$propertyGroupMapping[$property['property_id']]['address'] = $property['property']['property_contact']['address'];
$propertyGroupMapping[$property['property_id']]['email'] = $property['property']['property_contact']['email'];
$propertyGroupMapping[$property['property_id']]['phone'] = $property['property']['property_contact']['view_full_phone'];
$propertyGroupMapping[$property['property_id']]['content_code'] = $property['property']['content_code'];
$propertyGroupMapping[$property['property_id']]['token'] = $property['property']['property_booking_engine_token']['token'];
$colorCodes = json_decode($property['property']['property_brand']['color_codes'], 1);
$propertyGroupMapping[$property['property_id']]['colorCodes'] = $colorCodes;
$propertyWebPhotoMapping = collect($property['property']['property_web']['property_web_photo_mapping'])
->where('status', 1)
->where('is_cover', 1)
->toArray();
$propertyGroupMapping[$property['property_id']]['coverPhoto'] = [];
foreach ($propertyWebPhotoMapping as $propertyWebPhoto) {
$propertyGroupMapping[$property['property_id']]['coverPhoto'][] = $propertyWebPhoto['property_photo']['photoUrl'];
}
}
$propertyWebGroupData['propertyGroupMapping'] = array_values($propertyGroupMapping);
$availableLanguageRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_application', 'condition' => '=', 'value' => 1],
['field' => 'is_published', 'condition' => '=', 'value' => 1]
],
];
$availableLanguages = $this->languageService->select($availableLanguageRequest, ['code', 'name', 'language_key']);
foreach ($availableLanguages['data'] as $language) {
$propertyWebGroupData['available_language_codes'][$language['code']] = $language;
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWebGroupData];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function contentDomainWebGroup(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$propertyRequest = [
'criteria' => [
['field' => 'domain', 'condition' => '=', 'value' => fillOnUndefined($params, 'domain')],
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_published', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyGroupMapping.property.propertyWeb.propertyWebPhotoMapping.propertyPhoto',
'propertyGroupMapping.property.propertyWeb.propertyWebContentSummary.ContentCategory',
'propertyGroupMapping.property.propertyBrand', 'propertyGroupMapping.property.propertyContact',
'propertyGroupMapping.property.propertyBookingEngineToken',
'propertyGroupMapping.property.propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlaceCategory',
'propertyGroupMapping.property.propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlaceWorkingHour',
'propertyGroupMapping.property.propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlacePhotoMapping.propertyPlacePhoto',
'propertyGroupMapping.property.propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlaceFactMapping.propertyPlaceFactTitleFactMapping.placeFact',
'propertyGroupMapping.property.propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlaceFactMapping.propertyPlaceFactTitleFactMapping.placeFactTitle',
'propertyGroupMapping.property.propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlacePhotoMapping',
],
'firstRow' => true,
];
$propertyWebGroup = $this->propertyWebService->selectWebGroup($propertyRequest,
[
'id', 'title', 'property_group_id', 'domain', 'default_language',
'logo', 'is_ssl_active', 'address', 'email', 'phone', 'template', 'slogan'
]);
if ($propertyWebGroup['status'] != 'success') {
throw new ApiErrorException(lang('Domain not found.'));
}
$propertyWebGroup = !empty($propertyWebGroup['data']) ? $propertyWebGroup['data'] : null;
if (empty($propertyWebGroup)) {
throw new ApiErrorException(lang('Domain not found.'));
}
$propertyWebGroupData = [];
$propertyWebGroupData['title'] = $propertyWebGroup['title'];
$propertyWebGroupData['domain'] = $propertyWebGroup['domain'];
$propertyWebGroupData['template'] = $propertyWebGroup['template'];
$propertyWebGroupData['default_language'] = $propertyWebGroup['default_language'];
$propertyWebGroupData['logo'] = $propertyWebGroup['logo'];
$propertyWebGroupData['logoUrl'] = $propertyWebGroup['logoUrl'];
$propertyWebGroupData['address'] = $propertyWebGroup['address'];
$propertyWebGroupData['email'] = $propertyWebGroup['email'];
$propertyWebGroupData['phone'] = $propertyWebGroup['phone'];
$propertyWebGroupData['is_ssl_active'] = $propertyWebGroup['is_ssl_active'];
$propertyWebGroupData['slogan'] = $propertyWebGroup['slogan'];
if (!empty($propertyWebGroup['property_group_mapping'])) {
$propertyWebGroup['property_group_mapping'] = collect($propertyWebGroup['property_group_mapping'])->sortBy('order_number')->toArray();
}
$propertyGroupMapping = [];
foreach ($propertyWebGroup['property_group_mapping'] as $property) {
//dd($property);
if (empty($property['property']['property_web'])) {
continue;
}
if ($property['property']['property_web']['status'] != 1 || $property['property']['property_web']['is_published'] != 1) {
continue;
}
$propertyGroupMapping[$property['property_id']]['id'] = $property['property']['id'];
$propertyGroupMapping[$property['property_id']]['title'] = $property['property']['name'];
$propertyGroupMapping[$property['property_id']]['domain'] = $property['property']['property_web']['domain'];
$propertyGroupMapping[$property['property_id']]['webProtocolUrl'] = $property['property']['property_web']['webProtocolUrl'];
$propertyGroupMapping[$property['property_id']]['logoUrl'] = $property['property']['property_brand']['logoUrl'];
$propertyGroupMapping[$property['property_id']]['address'] = $property['property']['property_contact']['address'];
$propertyGroupMapping[$property['property_id']]['email'] = $property['property']['property_contact']['email'];
$propertyGroupMapping[$property['property_id']]['phone'] = $property['property']['property_contact']['view_full_phone'];
$propertyGroupMapping[$property['property_id']]['content_code'] = $property['property']['content_code'];
$propertyGroupMapping[$property['property_id']]['token'] = $property['property']['property_booking_engine_token']['token'];
$propertyGroupMapping[$property['property_id']]['property_place'] = $property['property']['property_web']['property_web_place_mapping'];
$propertyGroupMapping[$property['property_id']]['property_web_content'] = $property['property']['property_web']['property_web_content_summary'];
$colorCodes = json_decode($property['property']['property_brand']['color_codes'], 1);
$propertyGroupMapping[$property['property_id']]['colorCodes'] = $colorCodes;
$propertyWebPhotoMapping = collect($property['property']['property_web']['property_web_photo_mapping'])
->where('status', 1)
->toArray();
$propertyGroupMapping[$property['property_id']]['propertyWebPhoto'] = [];
foreach ($propertyWebPhotoMapping as $propertyWebPhoto) {
$propertyGroupMapping[$property['property_id']]['propertyWebPhoto'][] = $propertyWebPhoto['property_photo']['photoUrl'];
}
$propertyWebPhotoMapping = collect($property['property']['property_web']['property_web_photo_mapping'])
->where('status', 1)
->where('is_cover', 1)
->toArray();
$propertyGroupMapping[$property['property_id']]['coverPhoto'] = [];
foreach ($propertyWebPhotoMapping as $propertyWebPhoto) {
$propertyGroupMapping[$property['property_id']]['coverPhoto'][] = $propertyWebPhoto['property_photo']['photoUrl'];
}
}
$propertyWebGroupData['propertyGroupMapping'] = array_values($propertyGroupMapping);
$availableLanguageRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'is_application', 'condition' => '=', 'value' => 1],
['field' => 'is_published', 'condition' => '=', 'value' => 1]
],
];
$availableLanguages = $this->languageService->select($availableLanguageRequest, ['code', 'name', 'language_key']);
foreach ($availableLanguages['data'] as $language) {
$propertyWebGroupData['available_language_codes'][$language['code']] = $language;
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWebGroupData];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function test(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $params];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function getLanguages(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$languageData = $this->languageBaseService->createApplicationLanguageData();
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $languageData['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function getPropertyWebEditContent(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$propertyWebRequest = [
'id' => fillOnUndefined($params, 'property_web_id'),
'property_id' => fillOnUndefined($params, 'property_id')
];
$propertyWeb = $this->propertyWebService->getPropertyWeb($propertyWebRequest);
if ($propertyWeb['status'] != 'success') {
throw new ApiErrorException($propertyWeb['message']);
}
$propertyWebPhotos = $this->propertyWebService->getPropertyWebPhotos($propertyWebRequest);
if ($propertyWeb['status'] != 'success') {
throw new ApiErrorException($propertyWeb['message']);
}
$languages = $this->languageService->getApplicationLanguages();
if ($languages['status'] != 'success') {
throw new ApiErrorException($languages['message']);
}
$myWebMenus = $this->propertyWebMenuService->getPropertyWebMenu();
if ($myWebMenus['status'] != 'success') {
throw new ApiErrorException($myWebMenus['message']);
}
$myWebMenus = collect($myWebMenus['data']['property_web_menus'])->where('type', '!=', '3')->toArray();
$placeRequest = [
'property_id' => $params['property_id']
];
$myPlaces = $this->propertyPlaceService->webMenuPlaceCategoriesAndPlaces($placeRequest);
if ($myPlaces['status'] != 'success') {
throw new ApiErrorException($myPlaces['message']);
}
$myPlaces = $myPlaces['data'];
$myWebMenus = array_merge($myWebMenus, $myPlaces);
$myWebMenuMappingRequest = [
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'property_id' => fillOnUndefined($params, 'property_id')
];
$myWebMenuMapping = $this->propertyWebMenuMappingService->getPropertyWebMenuMapping($myWebMenuMappingRequest);
if ($myWebMenuMapping['status'] != 'success') {
throw new ApiErrorException($myWebMenuMapping['message']);
}
$menuIndex = 1;
$responseMenus = [];
$myWebMenuMappingCollection = collect($myWebMenuMapping['data']['property_web_menu_mapping']);
foreach ($myWebMenus as $myWebMenu) {
$checkMenuMapping = $myWebMenuMappingCollection->where('type', '=', $myWebMenu['menu_type'])
->where('property_web_menu_id', '=', $myWebMenu['id'])->first();
if ($checkMenuMapping) {
$myWebMenu['is_selected'] = true;
$myWebMenu['order_number_mapping'] = $checkMenuMapping['order_number'];
$myWebMenu['order_number'] = $menuIndex;
$myWebMenu['menu_code'] = $checkMenuMapping['menu_code'];
} else {
$myWebMenu['is_selected'] = false;
$myWebMenu['order_number_mapping'] = null;
$myWebMenu['order_number'] = $menuIndex;
}
$menuIndex++;
$responseMenus[] = $myWebMenu;
}
$myWebMenus = $responseMenus;
$myWebLanguageMapping = $this->propertyWebLanguageMappingService->getPropertyWebLanguageMapping($myWebMenuMappingRequest);
if ($myWebLanguageMapping['status'] != 'success') {
throw new ApiErrorException($myWebLanguageMapping['message']);
}
$myWebLanguageMapping = collect($myWebLanguageMapping['data']['property_web_language_mapping'])->keyBy('language_code')->toArray();
$myWebColorMapping = $this->propertyWebColorMappingService->getPropertyWebColorMapping($myWebMenuMappingRequest);
if ($myWebColorMapping['status'] != 'success') {
throw new ApiErrorException($myWebColorMapping['message']);
}
$myWebColors = [];
if ($myWebColorMapping['data']['property_web_color_mapping']) {
$myWebColorMapping = $myWebColorMapping['data']['property_web_color_mapping'];
foreach ($myWebColorMapping as $key => $myWebColorMappingData) {
$myWebColors[$key]['color_number'] = $myWebColorMappingData['order_number'];
$myWebColors[$key]['color_code'] = $myWebColorMappingData['color_code'];
}
} else {
$brandParam = [
'property_id' => fillOnUndefined($params, 'property_id')
];
$propertyBrand = $this->propertyBrandService->getPropertyBrand($brandParam);
if ($propertyBrand['status'] != 'success') {
throw new ApiErrorException($propertyBrand['message']);
}
$myWebColors = collect($propertyBrand['data']['color_codes'])->take(3)->toArray();
}
$propertyWebAboutUsParams = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'mode' => 1, // live
];
$propertyWebAboutUs = $this->propertyWebAboutUsService->getPropertyWebAboutUs($propertyWebAboutUsParams);
if ($propertyWebAboutUs['status'] != 'success') {
throw new ApiErrorException($propertyWebAboutUs['message']);
}
$languages = $languages['data'];
$propertyWebColors = $myWebColors ? $myWebColors : [];
foreach ($languages as &$language) {
if (array_key_exists($language['code'], $myWebLanguageMapping)) {
$language['is_selected'] = true;
} else {
$language['is_selected'] = false;
}
}
$propertyWeb = $propertyWeb['data'];
$webData = [
'live_url' => Config::get('app.mainHostAddress') . '/live/' . $propertyWeb['token'] . '/' . $propertyWeb['default_language'],
'preview_url' => Config::get('app.mainHostAddress') . '/preview/' . $propertyWeb['token'] . '/' . $propertyWeb['default_language'],
];
$propertyWeb = array_merge($propertyWeb, $webData);
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if ($propertyAdditionalInfo['status'] != 'success') {
throw new ApiErrorException('api-unknown-error');
}
$propertyRequest = [
'property_id' => fillOnUndefined($params, 'property_id')
];
$property = $this->propertyService->getProperty($propertyRequest);
if ($property['status'] != 'success') {
throw new ApiErrorException('api-unknown-error');
}
$propertyData = $property['data'] ? $property['data'] : [];
$propertyCountryCode = $propertyData['get_property']['property_info']['country'];
$myWebContactEmail = isset($propertyAdditionalInfo['data']['myweb_contact_email']) ? $propertyAdditionalInfo['data']['myweb_contact_email'] : null;
$kvkkMersisNo = isset($propertyAdditionalInfo['data']['kvkk_mersis_no']) ? $propertyAdditionalInfo['data']['kvkk_mersis_no'] : null;
$kvkkDataController = isset($propertyAdditionalInfo['data']['kvkk_data_controller']) ? $propertyAdditionalInfo['data']['kvkk_data_controller'] : null;
$kvkkContactPerson = isset($propertyAdditionalInfo['data']['kvkk_contact_person']) ? $propertyAdditionalInfo['data']['kvkk_contact_person'] : null;
$kvkkAddress = isset($propertyAdditionalInfo['data']['kvkk_address']) ? $propertyAdditionalInfo['data']['kvkk_address'] : null;
$kvkkPhone = isset($propertyAdditionalInfo['data']['kvkk_phone']) ? $propertyAdditionalInfo['data']['kvkk_phone'] : null;
$kvkkTaxOffice = isset($propertyAdditionalInfo['data']['kvkk_tax_office']) ? $propertyAdditionalInfo['data']['kvkk_tax_office'] : null;
$kvkkTaxNumber = isset($propertyAdditionalInfo['data']['kvkk_tax_number']) ? $propertyAdditionalInfo['data']['kvkk_tax_number'] : null;
$kvkkEmail = isset($propertyAdditionalInfo['data']['kvkk_email']) ? $propertyAdditionalInfo['data']['kvkk_email'] : null;
$kvkkWebSite = isset($propertyAdditionalInfo['data']['kvkk_web_site']) ? $propertyAdditionalInfo['data']['kvkk_web_site'] : null;
$kvkkContactEmail = isset($propertyAdditionalInfo['data']['kvkk_contact_email']) ? $propertyAdditionalInfo['data']['kvkk_contact_email'] : null;
$kvkkContactAddress = isset($propertyAdditionalInfo['data']['kvkk_contact_address']) ? $propertyAdditionalInfo['data']['kvkk_contact_address'] : null;
$propertyWeb['languages'] = $languages;
$propertyWeb['colors'] = $propertyWebColors;
$propertyWeb['property_country_code'] = $propertyCountryCode;
$propertyWeb['menus'] = $myWebMenus;
$propertyWeb['property_web_photos'] = $propertyWebPhotos['data'];
$propertyWeb['property_web_about_us'] = $propertyWebAboutUs['data'];
$propertyWeb['additional_info']['myweb_contact_email'] = $myWebContactEmail;
$propertyWeb['additional_info']['kvkk_mersis_no'] = $kvkkMersisNo;
$propertyWeb['additional_info']['kvkk_data_controller'] = $kvkkDataController;
$propertyWeb['additional_info']['kvkk_contact_person'] = $kvkkContactPerson;
$propertyWeb['additional_info']['kvkk_address'] = $kvkkAddress;
$propertyWeb['additional_info']['kvkk_phone'] = $kvkkPhone;
$propertyWeb['additional_info']['kvkk_tax_office'] = $kvkkTaxOffice;
$propertyWeb['additional_info']['kvkk_tax_number'] = $kvkkTaxNumber;
$propertyWeb['additional_info']['kvkk_email'] = $kvkkEmail;
$propertyWeb['additional_info']['kvkk_web_site'] = $kvkkWebSite;
$propertyWeb['additional_info']['kvkk_contact_email'] = $kvkkContactEmail;
$propertyWeb['additional_info']['kvkk_contact_address'] = $kvkkContactAddress;
$propertyRooms = [];
$getPropertyRoomCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'orderBy' => [
['field' => 'id', 'value' => 'ASC']
],
'with' => ['propertyRoomType', 'propertyWebRoomMapping'],
];
$getPropertyRoom = $this->propertyRoomService->select($getPropertyRoomCriteria);
if ($getPropertyRoom['status'] == 'success') {
$getPropertyRoom = $getPropertyRoom['data'];
foreach ($getPropertyRoom as $propertyRoom) {
$propertyRooms[] = [
'id' => $propertyRoom['id'],
'name' => $propertyRoom['name'],
'type' => $propertyRoom['property_room_type']['language_key'],
'is_selected' => !empty($propertyRoom['property_web_room_mapping']) ? true : false
];
}
}
$propertyWeb['rooms'] = $propertyRooms;
$propertyPlaces = [];
$getPropertyPlaceCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'orderBy' => [
['field' => 'id', 'value' => 'ASC']
],
'with' => ['propertyPlaceCategory', 'propertyWebPlaceMapping'],
];
$getPropertyPlace = $this->propertyPlaceService->select($getPropertyPlaceCriteria);
if ($getPropertyPlace['status'] == 'success') {
$getPropertyPlace = $getPropertyPlace['data'];
foreach ($getPropertyPlace as $propertyPlace) {
$propertyPlaces[] = [
'id' => $propertyPlace['id'],
'name' => $propertyPlace['name'],
'type' => $propertyPlace['property_place_category']['language_key'],
'is_selected' => !empty($propertyPlace['property_web_place_mapping']) ? true : false
];
}
}
$propertyWeb['places'] = $propertyPlaces;
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyWeb];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function updatePropertyWebContent(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$params['user_id'] = $this->request->auth->id;
$updateWeb = $this->propertyWebService->updatePropertyWebContent($params);
if ($updateWeb['status'] != 'success') {
throw new ApiErrorException($updateWeb['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $updateWeb['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function setPublishWeb(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
if (is_null($request->getContent())) {
throw new ApiErrorException(lang('Parameter Error.'));
}
$params = $request->params;
$params['user_id'] = $this->request->auth->id;
$updateWeb = $this->propertyWebService->setPublishWeb($params);
if ($updateWeb['status'] != 'success') {
throw new ApiErrorException($updateWeb['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $updateWeb['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function getPropertyWebMeta(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$params = $request->params ?? [];
$result = $this->propertyWebMetaService->select($params, ['id', 'name', 'status']);
if ($result['status'] != 'success') {
throw new ApiErrorException($result['message']);
}
foreach ($result['data'] as $key => $datum) {
$dataArray = null;
if ($datum['name'] == 'ContentDetail') {
$propertyWebContentCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1]
],
'orderBy' => [
['field' => 'id', 'value' => 'DESC']
]
];
$propertyWebContent = $this->propertyWebContentService->select($propertyWebContentCriteria, ['id', 'title']);
$propertyWebContent = ($propertyWebContent['status'] == 'success' && !empty($propertyWebContent['data'])) ? array_values($propertyWebContent['data']) : [];
foreach ($propertyWebContent as $propertyWebContentData) {
$dataArray[] = [
'code' => $propertyWebContentData['id'],
'name' => $propertyWebContentData['title'],
];
}
}
if ($datum['name'] == 'PlaceDetail') {
$propertyPlacetCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1]
],
'orderBy' => [
['field' => 'id', 'value' => 'DESC']
]
];
$propertyPlaces = $this->propertyPlaceService->select($propertyPlacetCriteria, ['id', 'name', 'language_name']);
$propertyPlaces = ($propertyPlaces['status'] == 'success' && !empty($propertyPlaces['data'])) ? array_values($propertyPlaces['data']) : [];
foreach ($propertyPlaces as $propertyPlacesData) {
$dataArray[] = [
'code' => $propertyPlacesData['id'],
'name' => $propertyPlacesData['name'],
];
}
}
if ($datum['name'] == 'RoomDetail') {
$propertyRoomtCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1]
],
'orderBy' => [
['field' => 'id', 'value' => 'DESC']
]
];
$propertyRooms = $this->propertyRoomService->select($propertyRoomtCriteria, ['id', 'name']);
$propertyRooms = ($propertyRooms['status'] == 'success' && !empty($propertyRooms['data'])) ? array_values($propertyRooms['data']) : [];
foreach ($propertyRooms as $propertyRoomsData) {
$dataArray[] = [
'code' => $propertyRoomsData['id'],
'name' => $propertyRoomsData['name'],
];
}
}
$result['data'][$key]['detail'] = $dataArray;
}
//dd($result);
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $result['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function getPropertyWebMetaTag(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$params = $request->params ?? [];
$result = $this->propertyWebMetaService->selectTag($params, ['id', 'name', 'status']);
if ($result['status'] != 'success') {
throw new ApiErrorException($result['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $result['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function syncPropertyWebMetaTag(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$params = $request->params ?? [];
$params['user_id'] = $this->request->auth->id;
$result = $this->propertyWebMetaService->syncTag($params);
if ($result['status'] != 'success') {
throw new ApiErrorException($result['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => $result['message'], 'data' => $result['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function listPropertyWebMetaTagMapping(Request $request)
{
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$params = $request->params ?? [];
$result = $this->propertyWebMetaService->selectMapping($params);
if ($result['status'] != 'success') {
throw new ApiErrorException($result['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $result['data']];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
}
public function dashboardCountablePlace($params, $propertyWebId)
{
$response = ["status" => false, "data" => null, "message" => ""];
try {
$propertyWebLog = DB::select("
SELECT property_web_log.country_code 'country_code', ip_nation_countries.country 'country', property_web_log.device_type 'device_type', count(property_web_log.id) 'count'
FROM property_web_log
INNER JOIN ip_nation_countries ON ip_nation_countries.code = property_web_log.country_code
WHERE property_web_log.web_id = $propertyWebId AND property_web_log.status = 1 GROUP BY property_web_log.country_code,ip_nation_countries.country, property_web_log.device_type;
");
$propertyWebLog = json_decode(json_encode($propertyWebLog), true);
$bookingCount = $this->bookingService->getBookingListCount(['property_id' => fillOnUndefined($params, 'property_id'), 'channel_id' => 1]);
if ($bookingCount['status'] != 'success') {
throw new ApiErrorException($bookingCount['message']);
}
$countryGroups = collect($propertyWebLog)->groupBy('country_code')->toArray();
$countyGroupCount = [];
foreach ($countryGroups as $countryGroupKey => $countryGroup) {
foreach ($countryGroup as $key => $groupData) {
if (!isset($countyGroupCount[$countryGroupKey]['value'])) {
$countyGroupCount[$countryGroupKey]['value'] = 0;
}
$countyGroupCount[$countryGroupKey]['value'] += $groupData['count'];
$countyGroupCount[$countryGroupKey]['country'] = $groupData['country_code'];
$countyGroupCount[$countryGroupKey]['country_name'] = $groupData['country'];
}
}
array_multisort(array_column($countyGroupCount, 'value'), SORT_DESC,
$countyGroupCount
);
$activeUser = DB::select("SELECT count(id) 'count' FROM property_web_log
WHERE web_id = $propertyWebId AND created_at > " . Carbon::now()->subMinutes(self::WEB_ACTIVE_USER_MINUTE)->timestamp);
$activeUser = json_decode(json_encode($activeUser), true);
$activeUser = reset($activeUser);
$response['data'] = [
'web_count' => collect($propertyWebLog)->where('device_type', 'web')->sum('count'),
'mobile_count' => collect($propertyWebLog)->where('device_type', 'mobile')->sum('count'),
'active_user_count' => $activeUser['count'],
'booking_count' => $bookingCount['data'],
'country_count' => collect($countyGroupCount)->values()->toArray(),
];
$response['status'] = true;
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['status'] = false;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = "Raw Query Error";
$response['status'] = false;
}
return $response;
}
private function getTypeMenus($menuType, $menuTypeKey)
{
$webMenuTypes = collect($menuType)->groupBy('type')->toArray();
$allData = [];
$allData[$menuTypeKey] = [];
foreach ($webMenuTypes as $webMenuTypeKey => $webMenuType) {
if ($webMenuTypeKey === self::PLACE) {
$placesIds = collect($webMenuTypes[$webMenuTypeKey])->pluck('property_web_menu_id')->toArray();
$checkPropertyMappingRequest = [
'criteria' => [['field' => 'status', 'condition' => '=', 'value' => 1]],
"whereIn" => [["field" => "id", "value" => $placesIds]]
];
$propertyPlaces = $this->propertyPlaceService->select($checkPropertyMappingRequest, ['id', 'name', 'order_number', 'language_name']);
if ($propertyPlaces['status'] != 'success') {
throw new ApiErrorException('Have a problem in Get Property Place ');
}
$myWebMenuMapping = collect($webMenuTypes[$webMenuTypeKey])->keyBy('property_web_menu_id')->toArray();
foreach ($propertyPlaces['data'] as $propertyPlace) {
$propertyPlace['order_number'] = $myWebMenuMapping[$propertyPlace['id']]['order_number'];
$propertyPlace['type'] = $myWebMenuMapping[$propertyPlace['id']]['type'];
$propertyPlace['menu_code'] = $myWebMenuMapping[$propertyPlace['id']]['menu_code'];
$propertyPlace['route'] = '/place/' . Str::slug($propertyPlace['name'], $separator = '-', $language = 'en') . '-' . $propertyPlace['id'];
$alias = $myWebMenuMapping[$propertyPlace['id']]['type'] . '-' . $propertyPlace['id'];
$propertyPlace['alias'] = $alias;
$propertyPlace['name'] = $this->appearanceTitle($menuTypeKey, $propertyPlace['name']);
$allData[$menuTypeKey][] = $propertyPlace;
}
} elseif ($webMenuTypeKey === self::MAIN) {
$myWebMenus = $this->propertyWebMenuService->getPropertyWebMenu();
$webMenus = $myWebMenus['data']['property_web_menus'];
$webMenuLevelIds = collect($webMenuTypes[$webMenuTypeKey])->keyBy('property_web_menu_id')->toArray();
foreach ($webMenus as $webMenu) {
if (isset($webMenuLevelIds[$webMenu['id']])) {
$webMenu['order_number'] = $webMenuLevelIds[$webMenu['id']]['order_number'];
$webMenu['name'] = $this->appearanceTitle($menuTypeKey, $webMenu['name']);
$allData[$menuTypeKey][] = $webMenu;
}
}
} elseif ($webMenuTypeKey === self::PLACE_CATEGORY) {
$placesIds = collect($webMenuTypes[$webMenuTypeKey])->pluck('property_web_menu_id')->toArray();
$checkPropertyMappingRequest = [
'criteria' => [['field' => 'status', 'condition' => '=', 'value' => 1]],
"whereIn" => [["field" => "id", "value" => $placesIds]]
];
$propertyPlaceCategories = $this->propertyPlaceService->propertyPlaceCategories($checkPropertyMappingRequest, ['id', 'name', 'language_key', 'order_number']);
if ($propertyPlaceCategories['status'] != 'success') {
throw new ApiErrorException('Have a problem in Get Property Place Category ');
}
$myWebMenuMapping = collect($webMenuTypes[$webMenuTypeKey])->keyBy('property_web_menu_id')->toArray();
foreach ($propertyPlaceCategories['data'] as $propertyPlaceCategory) {
$propertyPlaceCategory['order_number'] = $myWebMenuMapping[$propertyPlaceCategory['id']]['order_number'];
$propertyPlaceCategory['type'] = $myWebMenuMapping[$propertyPlaceCategory['id']]['type'];
$propertyPlaceCategory['menu_code'] = $myWebMenuMapping[$propertyPlaceCategory['id']]['menu_code'];
$propertyPlaceCategory['route'] = '/place-category/' . Str::slug($propertyPlaceCategory['name'], $separator = '-', $language = 'en') . '-' . $propertyPlaceCategory['id'];
$alias = $myWebMenuMapping[$propertyPlaceCategory['id']]['type'] . '-' . $propertyPlaceCategory['id'];
$propertyPlaceCategory['alias'] = $alias;
$propertyPlaceCategory['name'] = $this->appearanceTitle($menuTypeKey, $propertyPlaceCategory['name']);
$allData[$menuTypeKey][] = $propertyPlaceCategory;
}
}
$allData[$menuTypeKey] = collect($allData[$menuTypeKey])->sortBy('order_number')->keyBy('alias')->toArray();
}
return $allData;
}
private function appearanceTitle($type, $title)
{
if ($type === self::MENU_CODE_LVL1) {
$title = Str::upper($title);
} elseif ($type === self::MENU_CODE_TOP) {
$title = Str::title($title);
}
return $title;
}
public function coverPhotos($params = [])
{
$propertyWebPhotoMappingRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_id')],
['field' => 'property_web_id', 'condition' => '=', 'value' => fillOnUndefined($params, 'property_web_id')],
['field' => 'is_cover', 'condition' => '=', 'value' => 1],
['field' => 'status', 'condition' => '=', 'value' => $params['mode'] == 'preview' ? 2 : 1],
],
'with' => ['propertyPhoto']
];
$propertyWebMappingPhotos = $this->propertyWebService->selectPropertyWebPhotos($propertyWebPhotoMappingRequest);
$propertyWebMappingPhotos = $propertyWebMappingPhotos['status'] == 'success' && !empty($propertyWebMappingPhotos['status']) ? $propertyWebMappingPhotos['data'] : [];
$coverPhotos = [];
foreach ($propertyWebMappingPhotos as $key => $photo) {
$photoUrlFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $params['property_id'] . '/' . $photo['property_photo']['photo_name'] . '_1024x768.' . $photo['property_photo']['file_ext'];
$photoUrlThumbFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $params['property_id'] . '/' . $photo['property_photo']['photo_name'] . '_200x200.' . $photo['property_photo']['file_ext'];
if (File::exists($photoUrlFilePath)) {
$photoUrlFilePath = Config::get('app.imageUrl') . '/property-photos/' . $params['property_id'] . '/' . $photo['property_photo']['photo_name'] . '_1024x768.' . $photo['property_photo']['file_ext'];
} else {
$photoUrlFilePath = Config::get('app.imageUrl') . '/property-photos/' . $params['property_id'] . '/' . $photo['property_photo']['photo_name'] . '_medium.' . $photo['property_photo']['file_ext'];
}
if (File::exists($photoUrlThumbFilePath)) {
$photoUrlThumbFilePath = Config::get('app.imageUrl') . '/property-photos/' . $params['property_id'] . '/' . $photo['property_photo']['photo_name'] . '_200x200.' . $photo['property_photo']['file_ext'];
} else {
$photoUrlThumbFilePath = Config::get('app.imageUrl') . '/property-photos/' . $params['property_id'] . '/' . $photo['property_photo']['photo_name'] . '_thumbnail.' . $photo['property_photo']['file_ext'];
}
$coverPhotos[$key]['default'] = Config::get('app.imageUrl') . '/property-photos/' . $params['property_id'] . '/' . $photo['property_photo']['photo_name'] . '.' . $photo['property_photo']['file_ext'];
$coverPhotos[$key]['fixed'] = $photoUrlFilePath;
$coverPhotos[$key]['thumb'] = $photoUrlThumbFilePath;
}
return $coverPhotos;
}
public function propertyComparison(Request $request, $weekKey, $userId = null)
{
$daysCount = [1, 15, 45, 90];
$comparisonChannels = ['BookingEngine', 'Agoda.com', 'etstur.com', 'Booking.com'];
$response = ['status' => false, 'message' => '', 'data' => null];
try {
$userDetail = null;
$propertyPriceComparison = PropertyPriceComparison::where('week_key', $weekKey)->with('propertyDetail.propertyContractUser')->orderBy('property_id')->get();
$propertyPriceComparison = $propertyPriceComparison ? $propertyPriceComparison->toArray() : [];
if (!empty($userId)) {
$propertyPriceComparison = collect($propertyPriceComparison)->where('property_detail.property_contract_user.id', $userId)->toArray();
$userDetail = isset(reset($propertyPriceComparison)['property_detail']['property_contract_user']) ? reset($propertyPriceComparison)['property_detail']['property_contract_user'] : null;
}
$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 (!is_null($userId)) {
$pdf = $this->pdf
->setOptions(['isRemoteEnabled' => false, 'isHtml5ParserEnabled' => true, 'isFontSubsettingEnabled' => true])
//->setPaper('A4', 'landscape')
->loadView('pdf.priceComparison',
compact('response', 'daysCount', 'comparisonChannels', 'propertyPriceComparison', 'userDetail'),
[], 'UTF8');
return $pdf->stream();
}
return view('pdf.priceComparison', compact('response', 'daysCount', 'comparisonChannels', 'propertyPriceComparison', 'userDetail'));
}
}