Files
api-extranetwork/app/Core/Service/MyWebContentService.php
ExtraNetwork e5c4b6aa13 first commit
2026-05-12 17:04:54 +03:00

2597 lines
137 KiB
PHP

<?php
namespace App\Core\Service;
use App\Core\Mail\AffiliateRequestMail;
use App\Core\Repository\Property\PropertyRepository;
use App\Core\Repository\PropertyRoomRatePrice\PropertyRoomRatePriceRepository;
use App\Core\Repository\PropertyWeb\PropertyWebReviewRepository;
use App\Core\Repository\PropertyWebContent\PropertyWebContentRepository;
use App\Core\Repository\PropertyWebPhotoMapping\PropertyWebPhotoMappingRepository;
use App\Core\Service\PropertyAdditionalInfo\PropertyAdditionalInfoService;
use App\Core\Service\PropertyExecutiveService;
use App\Core\Service\PropertyPhotoService\PropertyPhotoService;
use App\Core\Service\PropertyRoomService;
use App\Core\Service\PropertyWebAboutUsService;
use App\Core\Validator\PropertyWeb\PropertyWebContactFormValidator;
use Illuminate\Mail\Mailer;
use App\Core\Mail\ContactFormMail;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
use \App\Core\Service\PropertyFactService;
use \App\Core\Service\PropertyWebColorMappingService;
use Intervention\Image\Facades\Image;
use App\Core\Service\PropertyPlaceService;
use Illuminate\Support\Facades\Log;
use Exception;
use App\Exceptions\ApiErrorException;
use Illuminate\Support\Facades\Config;
use Carbon\Carbon;
class MyWebContentService
{
private $propertyRepository;
private $propertyAdditionalInfoService;
private $propertyContactService;
private $propertyFactService;
private $propertyPhotoService;
private $propertyRoomService;
private $propertyExecutiveService;
private $propertyWebPhotoMappingRepository;
private $propertyWebColorMappingService;
private $propertyWebAboutUsService;
private $mailer;
private $propertyWebContactFormValidator;
private $propertyPlaceService;
private $propertyWebContentRepository;
private $propertyWebReviewRepository;
public function __construct(
Mailer $mailer,
PropertyRepository $propertyRepository,
PropertyAdditionalInfoService $propertyAdditionalInfoService,
PropertyContactService $propertyContactService,
PropertyFactService $propertyFactService,
PropertyPhotoService $propertyPhotoService,
PropertyRoomService $propertyRoomService,
PropertyExecutiveService $propertyExecutiveService,
PropertyWebPhotoMappingRepository $propertyWebPhotoMappingRepository,
PropertyWebColorMappingService $propertyWebColorMappingService,
PropertyWebContactFormValidator $propertyWebContactFormValidator,
PropertyPlaceService $propertyPlaceService,
PropertyWebAboutUsService $propertyWebAboutUsService,
PropertyWebRoomMappingService $propertyWebRoomMappingService,
PropertyFactMappingService $propertyFactMappingService,
PropertyWebContentRepository $propertyWebContentRepository,
PropertyWebReviewRepository $propertyWebReviewRepository,
PropertyRoomRatePriceRepository $propertyRoomRatePriceRepository
)
{
$this->propertyRepository = $propertyRepository;
$this->propertyAdditionalInfoService = $propertyAdditionalInfoService;
$this->propertyContactService = $propertyContactService;
$this->propertyFactService = $propertyFactService;
$this->propertyPhotoService = $propertyPhotoService;
$this->propertyRoomService = $propertyRoomService;
$this->propertyExecutiveService = $propertyExecutiveService;
$this->propertyWebPhotoMappingRepository = $propertyWebPhotoMappingRepository;
$this->propertyWebColorMappingService = $propertyWebColorMappingService;
$this->propertyWebAboutUsService = $propertyWebAboutUsService;
$this->mailer = $mailer;
$this->propertyWebContactFormValidator = $propertyWebContactFormValidator;
$this->propertyPlaceService = $propertyPlaceService;
$this->propertyWebRoomMappingService = $propertyWebRoomMappingService;
$this->propertyFactMappingService = $propertyFactMappingService;
$this->propertyWebContentRepository = $propertyWebContentRepository;
$this->propertyWebReviewRepository = $propertyWebReviewRepository;
$this->propertyRoomRatePriceRepository = $propertyRoomRatePriceRepository;
}
public function home($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyRooms.propertyRoomViewMapping.propertyRoomViewType',
'propertyChain', 'propertyRooms.propertyRoomPhotoMapping.propertyRoomPhoto',
'propertyWeb', 'propertyRooms.propertyRoomType', 'propertyAwardsCertificates.awardsCertificateCategory',
'propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlaceCategory',
'propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlacePhotoMapping.propertyPlacePhoto',
'propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlaceFactMapping.propertyPlaceFactTitleFactMapping.placeFact',
'propertyWeb.propertyWebPlaceMapping.placeDetail.propertyPlaceFactMapping.propertyPlaceFactTitleFactMapping.placeFactTitle',
'propertyWebComponent'
],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$propertyWebRoomCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
]
];
$propertyWebRoom = $this->propertyWebRoomMappingService->select($propertyWebRoomCriteria, ['property_room_id']);
if ($propertyWebRoom['status'] != 'success') {
throw new ApiErrorException($propertyWebRoom['message']);
}
$propertyWebRoomIds = collect($propertyWebRoom['data'])->pluck('property_room_id')->toArray();
$rooms = [];
foreach ($propertyWebRoom['data'] as $roomMappingData) {
$roomCheck = collect($property['property_rooms'])->where('id', $roomMappingData['property_room_id'])->first();
if ($roomCheck) {
$rooms[$roomMappingData['property_room_id']] = $roomCheck;
$rooms[$roomMappingData['property_room_id']]['slug'] = Str::slug($roomCheck['name'], $separator = '-', $language = 'en');
unset($rooms[$roomMappingData['property_room_id']]['property_room_photo_mapping']);
$roomThumbnailPhoto = NULL;
$rooms[$roomMappingData['property_room_id']]['property_room_photos'] = collect($roomCheck['property_room_photo_mapping'])->map(function ($value, $key) use ($property, &$roomThumbnailPhoto) {
$photoUrlFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_1024x768.' . $value['property_room_photo']['file_ext'];
if (File::exists($photoUrlFilePath)) {
$photoUrlFilePath = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_1024x768.' . $value['property_room_photo']['file_ext'];
} else {
$photoUrlFilePath = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_medium.' . $value['property_room_photo']['file_ext'];
}
if ($key === 0) {
$photoThumbUrlFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_200x200.' . $value['property_room_photo']['file_ext'];
if (File::exists($photoThumbUrlFilePath)) {
$roomThumbnailPhoto = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_200x200.' . $value['property_room_photo']['file_ext'];
} else {
$roomThumbnailPhoto = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_thumbnail.' . $value['property_room_photo']['file_ext'];
}
}
return $photoUrlFilePath;
})->all();
$rooms[$roomMappingData['property_room_id']]['cover_photo'] = $rooms[$roomMappingData['property_room_id']]['property_room_photos'] != null ? $rooms[$roomMappingData['property_room_id']]['property_room_photos'][0] : null;
$rooms[$roomMappingData['property_room_id']]['room_thumbnail_photo'] = $roomThumbnailPhoto;
}
}
$rooms = array_values($rooms);
/*
$rooms = collect($property['property_rooms'])
->filter(function ($value) use ($propertyWebRoomIds) {
if (!empty($propertyWebRoomIds)) {
if (in_array($value['id'], $propertyWebRoomIds)) {
return $value;
}
} else {
return $value;
}
})
->map(function ($value, $valueKey) use ($property, $propertyWebRoomIds) {
$room = $value;
unset($room['property_room_photo_mapping']);
$roomThumbnailPhoto = NULL;
$room['property_room_photos'] = collect($value['property_room_photo_mapping'])->map(function ($value, $key) use ($property, &$roomThumbnailPhoto) {
$photoUrlFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_1024x768.' . $value['property_room_photo']['file_ext'];
if (File::exists($photoUrlFilePath)) {
$photoUrlFilePath = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_1024x768.' . $value['property_room_photo']['file_ext'];
} else {
$photoUrlFilePath = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_medium.' . $value['property_room_photo']['file_ext'];
}
if ($key === 0) {
$photoThumbUrlFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_200x200.' . $value['property_room_photo']['file_ext'];
if (File::exists($photoThumbUrlFilePath)) {
$roomThumbnailPhoto = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_200x200.' . $value['property_room_photo']['file_ext'];
} else {
$roomThumbnailPhoto = Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . '/' . $value['property_room_photo']['photo_name'] . '_thumbnail.' . $value['property_room_photo']['file_ext'];
}
}
return $photoUrlFilePath;
})->all();
$room['cover_photo'] = $room['property_room_photos'] != null ? $room['property_room_photos'][0] : null;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
$room['room_thumbnail_photo'] = $roomThumbnailPhoto;
return $room;
})->values()->all();
*/
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$coverPhotos = $this->coverPhotos($params);
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$propertyAwardsCertificates = collect($property['property_awards_certificates'])
->where('status', '=', 1)
->where('awards_certificate_category.type', '!=', 'PLC')
//->where('awards_certificate_category.type', '!=', 'MNU')
->map(function ($value) {
$return = $value;
unset($return['awards_certificate_category']);
$image = null;
if ($value['file_path']) {
$urlPath = '/property-photos/' . $value['property_id'] . "/awards-certificates/";
$image = Config::get('app.imageUrl') . $urlPath . $value['file_path'];
}
$catLogo = null;
if ($value['awards_certificate_category']['id']) {
$urlPath = '/assets/img/awards/';
$catLogo = Config::get('app.client_server') . $urlPath . $value['awards_certificate_category']['id'] . '.png';
}
$return['file_path'] = $image ? $image : null;
$category = [
'category_name' => $value['awards_certificate_category']['name'],
'category_language_key' => $value['awards_certificate_category']['language_key'],
'category_country_code' => $value['awards_certificate_category']['country_code'],
'category_logo' => $catLogo,
'category_type' => $value['awards_certificate_category']['type'],
'category_status' => $value['awards_certificate_category']['status'],
];
return array_merge($return, $category);
})->values()->all();
array_multisort(
array_column($propertyAwardsCertificates, 'date'), SORT_DESC,
array_column($propertyAwardsCertificates, 'name'), SORT_ASC,
$propertyAwardsCertificates
);
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_language_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'landing_photo' => $coverPhotos,
'description' => $property['name'],
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'awards_certificate_category' => $propertyAwardsCertificates,
'property_contact' => $property['property_contact']
];
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if (isset($propertyAdditionalInfo['data'])) {
$responseData['additional_info'] = $propertyAdditionalInfo['data'];
}
$propertyPlace = [];
/** Property Place **/
foreach ($property['property_web']['property_web_place_mapping'] as $place) {
$place = $place['place_detail'];
if ($place['status'] != 1) {
continue;
}
$propertyPlace[$place['id']]['id'] = $place['id'];
$propertyPlace[$place['id']]['name'] = $place['name'];
$propertyPlace[$place['id']]['slug'] = Str::slug($place['name'], $separator = '-', $language = 'en');
$propertyPlace[$place['id']]['category']['name'] = $place['property_place_category']['name'];
$propertyPlace[$place['id']]['category']['language_key'] = $place['property_place_category']['language_key'];
$propertyPlace[$place['id']]['photo'] = [
'thumb' => '/assets/img/placeholder.webp',
'fixed' => '/assets/img/placeholder.webp'
];
if (isset($place['property_place_photo_mapping'])) {
$propertyPlacePhotoMapping = collect($place['property_place_photo_mapping'])->sortBy('id')->first();
if ($propertyPlacePhotoMapping) {
$propertyPlace[$place['id']]['photo'] = [
'thumb' => $propertyPlacePhotoMapping['property_place_photo']['photoUrl']['thumb'],
'fixed' => $propertyPlacePhotoMapping['property_place_photo']['photoUrl']['fixed'],
];
}
}
$propertyPlaceFact = [];
foreach ($place['property_place_fact_mapping'] as $fact) {
$factId = $fact['property_place_fact_title_fact_mapping']['place_fact_id'];
$factCategoryId = $fact['property_place_fact_title_fact_mapping']['place_fact_title_id'];
$propertyPlaceFact[$factCategoryId]['category'] = [
'name' => $fact['property_place_fact_title_fact_mapping']['place_fact_title']['name'],
'language_key' => $fact['property_place_fact_title_fact_mapping']['place_fact_title']['language_key'],
];
$propertyPlaceFact[$factCategoryId]['fact'][] = [
'name' => $fact['property_place_fact_title_fact_mapping']['place_fact']['name'],
'language_key' => $fact['property_place_fact_title_fact_mapping']['place_fact']['language_key'],
'icon' => $fact['property_place_fact_title_fact_mapping']['place_fact']['icon'],
];
}
$propertyPlace[$place['id']]['feature'] = !empty($propertyPlaceFact) ? array_values($propertyPlaceFact) : [];
if (count($propertyPlace) == 2) {
//break;
}
}
/** Property Place **/
$responseData['property_place'] = !empty($propertyPlace) ? array_values($propertyPlace) : [];
/** Property Facts **/
$getPropertyFact = $this->propertyFactService->getPropertyFact($params);
if ($getPropertyFact['status'] != 'success') {
throw new ApiErrorException($getPropertyFact['message']);
}
$getPropertyFact = $this->getPropertyFactForHtml($getPropertyFact['data']);
if ($getPropertyFact['status'] != 'success') {
throw new ApiErrorException($getPropertyFact['message']);
}
$responseData['property_facts'] = $getPropertyFact['data'];
/** Property Facts **/
/** Property Review **/
$propertyWebReviewData = [];
$propertyWebComponentCheck = collect($property['property_web_component'])->where('component_id', 3)->count();
if ($propertyWebComponentCheck) {
$propertyWebReviewRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'orderBy' => [
['field' => 'time', 'value' => 'DESC']
]
];
$propertyWebReview = $this->propertyWebReviewRepository->findByCriteria($propertyWebReviewRequest);
$currentLanguageCheck = [];
if (fillOnUndefined($params, 'currentLanguage')) {
$currentLanguageCheck = collect($propertyWebReview)->where('language_code', $params['currentLanguage'])->toArray();
}
if (count($currentLanguageCheck) > 4) {
$propertyWebReviewData = collect($currentLanguageCheck)->take(10)->toArray();
} else {
$propertyWebReviewData = collect($propertyWebReview)->take(10)->toArray();
}
$propertyWebReviewData = $propertyWebReviewData ? array_values($propertyWebReviewData) : [];
}
$responseData['property_review'] = $propertyWebReviewData;
/** Property Review **/
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function aboutUs($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$responseData = [];
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain',
'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates.awardsCertificateCategory',
'propertyLanguageSpoken.languageCode',
],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$coverPhotos = $this->coverPhotos($params);
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$propertyWebAboutUsParams = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'mode' => $params['mode'] === "preview" ? 2 : 1, // live : 1 preview : 2
];
$propertyWebAboutUs = $this->propertyWebAboutUsService->getPropertyWebAboutUs($propertyWebAboutUsParams);
if ($propertyWebAboutUs['status'] != 'success') {
throw new ApiErrorException($propertyWebAboutUs['message']);
}
$aboutUs = isset($propertyWebAboutUs['data']) && !empty($propertyWebAboutUs['data']) ? $propertyWebAboutUs['data'] : [];
$aboutUsFiltred = collect($aboutUs)->first(function ($value, $key) use ($params) {
if ($value['language_code'] == $params['currentLanguage']) {
return $value['value'];
}
});
$propertyAwardsCertificates = collect($property['property_awards_certificates'])
->where('awards_certificate_category.type', '!=', 'PLC')
->where('status', '=', 1)
->map(function ($value) {
$return = $value;
unset($return['awards_certificate_category']);
$image = null;
if ($value['file_path']) {
$urlPath = '/property-photos/' . $value['property_id'] . "/awards-certificates/";
$image = Config::get('app.imageUrl') . $urlPath . $value['file_path'];
}
$catLogo = null;
if ($value['awards_certificate_category']['id']) {
$urlPath = '/assets/img/awards/';
$catLogo = Config::get('app.client_server') . $urlPath . $value['awards_certificate_category']['id'] . '.png';
}
$return['file_path'] = $image ? $image : null;
$category = [
'category_name' => $value['awards_certificate_category']['name'],
'category_language_key' => $value['awards_certificate_category']['language_key'],
'category_country_code' => $value['awards_certificate_category']['country_code'],
'category_logo' => $catLogo,
'category_type' => $value['awards_certificate_category']['type'],
'category_status' => $value['awards_certificate_category']['status'],
];
return array_merge($return, $category);
})->values()->all();
array_multisort(
array_column($propertyAwardsCertificates, 'date'), SORT_DESC,
array_column($propertyAwardsCertificates, 'name'), SORT_ASC,
$propertyAwardsCertificates
);
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$propertyLanguageSpoken = null;
$propertyLanguageSpoken = collect($property['property_language_spoken'])->map(function ($spokenLanguage) {
return [
'code' => $spokenLanguage['language_code']['code'],
'name' => $spokenLanguage['language_code']['name'],
'language_key' => $spokenLanguage['language_code']['language_key']
];
});
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => isset($aboutUsFiltred['value']) ? $aboutUsFiltred['value'] : "",
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'property_contact' => $property['property_contact'],
'landing_photo' => $coverPhotos,
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'awards_certificate_category' => $propertyAwardsCertificates,
'property_language_spoken' => $propertyLanguageSpoken,
];
$getPropertyFact = $this->propertyFactService->getPropertyFact($params);
if ($getPropertyFact['status'] != 'success') {
throw new ApiErrorException($getPropertyFact['message']);
}
$getPropertyFact = $this->getPropertyFactForHtml($getPropertyFact['data']);
if ($getPropertyFact['status'] != 'success') {
throw new ApiErrorException($getPropertyFact['message']);
}
$responseData['property_facts'] = $getPropertyFact['data'];
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if (isset($propertyAdditionalInfo['data'])) {
$responseData['additional_info'] = $propertyAdditionalInfo['data'];
}
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function getPropertyFactForHtml($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$categories = $params;
$responseArray = [];
foreach ($categories as $category) {
$categoryArray = [];
$categoryItem = $category;
foreach ($category['fact_subcategory'] as $subCategory) {
$subCategoryItem = $subCategory;
$facts = collect($subCategory['fact'])
->where('is_selected', '=', true)
->map(function ($value) {
return $value;
})->values()->all();
$subCategoryItem['fact'] = $facts ? $facts : [];
if ($facts) {
$categoryArray[$subCategory['id']] = $subCategoryItem;
}
}
$categoryItem['fact_subcategory'] = $categoryArray;
$responseArray[$category['id']] = $categoryItem;
}
$response = [
'status' => true,
'data' => $responseArray,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function gallery($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
];
$responseData['photos'] = $this->photos($params);;
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function rooms($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$propertyWebRoomCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
]
];
$propertyWebRoom = $this->propertyWebRoomMappingService->select($propertyWebRoomCriteria, ['property_room_id']);
if ($propertyWebRoom['status'] != 'success') {
throw new ApiErrorException($propertyWebRoom['message']);
}
$propertyWebRoomIds = collect($propertyWebRoom['data'])->pluck('property_room_id')->toArray();
$rooms = [];
foreach ($propertyWebRoom['data'] as $roomMappingData) {
$roomCheck = collect($property['property_rooms'])->where('id', $roomMappingData['property_room_id'])->first();
if ($roomCheck) {
$rooms[$roomMappingData['property_room_id']] = $roomCheck;
$rooms[$roomMappingData['property_room_id']]['slug'] = Str::slug($roomCheck['name'], $separator = '-', $language = 'en');
}
}
$rooms = array_values($rooms);
/*$rooms = collect($property['property_rooms'])
->filter(function ($value) use ($propertyWebRoomIds) {
if (!empty($propertyWebRoomIds)) {
if (in_array($value['id'], $propertyWebRoomIds)) {
return $value;
}
} else {
return $value;
}
})
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();*/
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
];
$criteria = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
],
'with' => ['propertyRoomType', 'propertyRoomDefaultPhoto.propertyRoomPhoto', 'propertyRoomFactMapping.propertyFact', 'propertyRoomViewMapping.propertyRoomViewType']
];
$propertyRooms = $this->propertyRoomService->select($criteria, ['id', 'name', 'room_type_id', 'max_occupancy', 'max_adult', 'max_child', 'room_size', 'room_size_type', 'room_type_count', 'room_count', 'bathroom_count', 'toilet_count', 'lounge_count', 'max_child_number']);
if ($propertyRooms['status'] != 'success') {
throw new ApiErrorException($propertyRooms['message']);
}
if (!$propertyRooms['data']) {
throw new ApiErrorException('room data not found');
}
$rooms = [];
foreach ($propertyWebRoom['data'] as $roomMappingData) {
$roomCheck = collect($propertyRooms['data'])->where('id', $roomMappingData['property_room_id'])->first();
if ($roomCheck) {
$rooms[$roomMappingData['property_room_id']] = $roomCheck;
$rooms[$roomMappingData['property_room_id']]['slug'] = Str::slug($roomCheck['name'], $separator = '-', $language = 'en');
}
}
$newRoomMapping = [];
foreach ($rooms as $room) {
$roomPhoto = $room['property_room_default_photo'];
$photoUrlFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_1024x768.' . $roomPhoto['property_room_photo']['file_ext'];
$photoUrlThumbFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_200x200.' . $roomPhoto['property_room_photo']['file_ext'];
$photoItem['photo_original'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '.' . $roomPhoto['property_room_photo']['file_ext'];
if (File::exists($photoUrlFilePath)) {
$photoItem['photo_large'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_1024x768.' . $roomPhoto['property_room_photo']['file_ext'];
} else {
$photoItem['photo_large'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_medium.' . $roomPhoto['property_room_photo']['file_ext'];
}
if (File::exists($photoUrlThumbFilePath)) {
$photoItem['photo_thumbnail'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_200x200.' . $roomPhoto['property_room_photo']['file_ext'];
} else {
$photoItem['photo_thumbnail'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_thumbnail.' . $roomPhoto['property_room_photo']['file_ext'];
}
$room['default_photo'] = $photoItem;
unset($room['property_room_default_photo']);
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
$roomFacts = $room['property_room_fact_mapping'];
$newFacts = [];
foreach ($roomFacts as $fact) {
$factItem['id'] = $fact['id'];
$factItem['fact_id'] = $fact['fact_id'];
$factItem['name'] = $fact['property_fact']['name'];
$factItem['language_key'] = $fact['property_fact']['language_key'];
$factItem['type'] = $fact['property_fact']['type'];
$factItem['order_number'] = $fact['property_fact']['order_number'];
$factItem['icon'] = $fact['property_fact']['icon'];
$factItem['is_feature'] = $fact['is_feature'];
$newFacts[] = $factItem;
}
unset($room['property_room_fact_mapping']);
$room['facts'] = $newFacts;
// Room Views
$roomViews = $room['property_room_view_mapping'];
$newViews = [];
foreach ($roomViews as $view) {
$viewItem['id'] = $view['property_room_view_type']['id'];
$viewItem['name'] = $view['property_room_view_type']['name'];
$viewItem['language_key'] = $view['property_room_view_type']['language_key'];
$newViews[] = $viewItem;
}
unset($room['property_room_view_mapping']);
$room['views'] = $newViews;
$newRoomMapping[] = $room;
}
$responseData['room_detailed_list'] = $newRoomMapping;
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function roomDetail($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain',
//'propertyRooms.propertyRoomDefaultPhoto.propertyRoomPhoto',
//'propertyRooms.propertyRoomType',
//'propertyRooms.propertyRoomFactMapping.propertyFact',
'propertyWebRooms.roomDetail.propertyRoomDefaultPhoto.propertyRoomPhoto',
'propertyWebRooms.roomDetail.propertyRoomType',
'propertyWeb', 'propertyAwardsCertificates'
],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_web_rooms'])
->map(function ($value) use ($property) {
$room = $value['room_detail'];
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
$room['property_room_default_photo'] = $room['property_room_default_photo']['property_room_photo']['photoUrl'];
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
];
$criteria = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'id', 'condition' => '=', 'value' => $params['room_id']],
],
'with' => ['propertyRoomType', 'propertyRoomBedGroup.propertyRoomBedType', 'propertyRoomPhotoMapping.propertyRoomPhoto', 'propertyRoomFactMapping.propertyFact', 'propertyRoomViewMapping.propertyRoomViewType'],
'firstRow' => 1
];
$propertyRooms = $this->propertyRoomService->select($criteria, ['id', 'name', 'room_type_id', 'max_occupancy', 'max_adult', 'max_child', 'room_size', 'room_size_type', 'room_type_count', 'room_count', 'bathroom_count', 'toilet_count', 'lounge_count', 'max_child_number', 'description']);
if ($propertyRooms['status'] != 'success') {
throw new ApiErrorException($propertyRooms['message']);
}
if (!$propertyRooms['data']) {
throw new ApiErrorException('room data not found');
}
$room = $propertyRooms['data'];
$bedGroups = collect($room['property_room_bed_group'])->keyBy('bed_group')->keys();
$group = [];
foreach ($bedGroups as $bedGroup) {
$thisGroup = collect($room['property_room_bed_group'])->where('bed_group', '=', $bedGroup)->map(function ($bedItem) use ($bedGroup) {
$responseMapping = $bedItem;
$responseMapping['bed_type_name'] = $bedItem['property_room_bed_type']['name'];
unset($responseMapping['property_room_bed_type']);
return $responseMapping;
})->toArray();
$newItem = [];
foreach ($thisGroup as $item) {
$newItem[] = $item;
}
$group[] = $newItem;
}
$room['property_room_bed_group'] = $group;
$roomDescriptions = json_decode($room['description'], true);
$roomDescription = null;
$currentLanguage = isset($params['currentLanguage']) ? $params['currentLanguage'] : 'en';
if (isset($roomDescriptions[$currentLanguage]) && $roomDescriptions[$currentLanguage]) {
$roomDescription = $roomDescriptions[$currentLanguage];
}
$room['description'] = $roomDescription;
$roomPhotos = $room['property_room_photo_mapping'];
$newRoomPhotos = [];
foreach ($roomPhotos as $roomPhoto) {
$photoUrlFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_1024x768.' . $roomPhoto['property_room_photo']['file_ext'];
$photoUrlThumbFilePath = Config::get('app.fileSystemDriver') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_200x200.' . $roomPhoto['property_room_photo']['file_ext'];
$photoItem['photo_original'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '.' . $roomPhoto['property_room_photo']['file_ext'];
if (File::exists($photoUrlFilePath)) {
$photoItem['photo_large'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_1024x768.' . $roomPhoto['property_room_photo']['file_ext'];
} else {
$photoItem['photo_large'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_medium.' . $roomPhoto['property_room_photo']['file_ext'];
}
if (File::exists($photoUrlThumbFilePath)) {
$photoItem['photo_thumbnail'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_200x200.' . $roomPhoto['property_room_photo']['file_ext'];
} else {
$photoItem['photo_thumbnail'] = Config::get('app.imageUrl') . '/property-photos/' . $roomPhoto['property_id'] . '/' . $roomPhoto['property_room_photo']['photo_name'] . '_thumbnail.' . $roomPhoto['property_room_photo']['file_ext'];
}
$newRoomPhotos[] = $photoItem;
}
$room['default_photo'] = $newRoomPhotos ? $newRoomPhotos[0] : [];
unset($room['property_room_photo_mapping']);
$room['photos'] = $newRoomPhotos;
$roomFacts = $room['property_room_fact_mapping'];
$newFacts = [];
foreach ($roomFacts as $fact) {
$factItem['id'] = $fact['id'];
$factItem['fact_id'] = $fact['fact_id'];
$factItem['name'] = $fact['property_fact']['name'];
$factItem['language_key'] = $fact['property_fact']['language_key'];
$factItem['type'] = $fact['property_fact']['type'];
$factItem['order_number'] = $fact['property_fact']['order_number'];
$factItem['icon'] = $fact['property_fact']['icon'];
$newFacts[] = $factItem;
}
unset($room['property_room_photo_mapping']);
unset($room['property_room_fact_mapping']);
$room['photos'] = $newRoomPhotos;
$room['facts'] = $newFacts;
// Room Views
$roomViews = $room['property_room_view_mapping'];
$newViews = [];
foreach ($roomViews as $view) {
$viewItem['id'] = $view['property_room_view_type']['id'];
$viewItem['name'] = $view['property_room_view_type']['name'];
$viewItem['language_key'] = $view['property_room_view_type']['language_key'];
$newViews[] = $viewItem;
}
unset($room['property_room_view_mapping']);
$room['views'] = $newViews;
$room['minPrice'] = null;
$room['priceRange'] = null;
$roomRatesCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'property_room_id', 'condition' => '=', 'value' => $params['room_id']],
['field' => 'amount', 'condition' => '>', 'value' => 0],
['field' => 'date', 'condition' => '>=', 'value' => Carbon::now()->format('Y-m-d')],
['field' => 'date', 'condition' => '<=', 'value' => Carbon::now()->addMonth()->format('Y-m-d')],
],
'orderBy' => [
['field' => 'amount', 'value' => 'ASC']
]
];
$minRoomRatePrice = $this->propertyRoomRatePriceRepository->findbyCriteria($roomRatesCriteria, ['id', 'property_id', 'property_room_id', 'date', 'amount', 'currency']);
$lowPrice = collect($minRoomRatePrice)->sortBy('amount')->first();
$highPrice = collect($minRoomRatePrice)->sortByDesc('amount')->first();
if($lowPrice && $highPrice) {
$room['lowPrice'] = [
'amount' => $lowPrice['amount'],
'currency' => $lowPrice['currency'],
];
$room['highPrice'] = [
'amount' => $highPrice['amount'],
'currency' => $highPrice['currency'],
];
}
$responseData['room_detail'] = $room;
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function contact($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyType', 'propertyChain', 'propertyExecutive.executiveType', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$newExecutiveArray = [];
foreach ($property['property_executive'] as $propertyExecutive) {
$executiveItem = [
'id' => $propertyExecutive['id'],
'executive_type_name' => $propertyExecutive['executive_type']['name'],
'executive_type_locale_key' => $propertyExecutive['executive_type']['language_key'],
'executive_type_icon' => $propertyExecutive['executive_type']['icon'],
'name_surname' => $propertyExecutive['name_surname'],
'email' => $propertyExecutive['email'],
'phone_code' => $propertyExecutive['phone_code'],
'phone' => $propertyExecutive['phone'],
'extension' => $propertyExecutive['extension'],
'mobile_code' => $propertyExecutive['mobile_code'],
'mobile' => $propertyExecutive['mobile'],
'fax_code' => $propertyExecutive['fax_code'],
'fax' => $propertyExecutive['fax'],
'view_full_phone' => $propertyExecutive['view_full_phone'],
'view_full_mobile' => $propertyExecutive['view_full_mobile'],
'view_full_fax' => $propertyExecutive['view_full_fax'],
];
if ($propertyExecutive['status'] == 1) {
$newExecutiveArray[] = $executiveItem;
}
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$additionalInfoRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'additional_info_key_id', 'condition' => '=', 'value' => 10]
],
'firstRow' => true
];
$myWebContactEmail = $this->propertyAdditionalInfoService->select($additionalInfoRequest);
if ($myWebContactEmail['status'] != 'success') {
throw new ApiErrorException($myWebContactEmail['message']);
}
$myWebContactEmail = isset($myWebContactEmail['data']['value']) && !empty($myWebContactEmail['data']['value']) ? $myWebContactEmail['data']['value'] : null;
$property['property_contact']['myweb_contact_email'] = $myWebContactEmail;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$distances = [];
$factDistancesCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
],
'with' => ['fact']
];
$factDistances = $this->propertyFactMappingService->select($factDistancesCriteria);
if ($factDistances['status'] == 'success') {
$factDistances = collect($factDistances['data'])->where('fact.parent_id', 735)->toArray();
foreach ($factDistances as $factDistance) {
$distances[] = [
'name' => $factDistance['fact']['name'],
'icon' => $factDistance['fact']['icon'],
'language_key' => $factDistance['fact']['language_key'],
'description' => $factDistance['descriptionArray'],
];
}
}
$coverPhotos = $this->coverPhotos($params);
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'property_executive' => $newExecutiveArray,
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'landing_photo' => $coverPhotos,
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
'distances' => $distances
];
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function executiveDetail($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$executiveRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'id', 'condition' => '=', 'value' => $params['executive_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'firstRow' => true,
'with' => ['executiveType']
];
$getExecutiveFields = ['id', 'property_id', 'executive_type_id', 'name_surname', 'email', 'phone_code', 'phone', 'extension', 'mobile_code', 'mobile', 'fax_code', 'fax'];
$executive = $this->propertyExecutiveService->select($executiveRequest, $getExecutiveFields);
if ($executive['status'] != 'success' || !$executive['data']) {
throw new ApiErrorException($executive['message']);
}
$propertyExecutive = $executive['data'];
$executiveItem = [
'id' => $propertyExecutive['id'],
'executive_type_name' => $propertyExecutive['executive_type']['name'],
'executive_type_locale_key' => $propertyExecutive['executive_type']['language_key'],
'executive_type_icon' => $propertyExecutive['executive_type']['icon'],
'name_surname' => $propertyExecutive['name_surname'],
'email' => $propertyExecutive['email'],
'phone_code' => $propertyExecutive['phone_code'],
'phone' => $propertyExecutive['phone'],
'extension' => $propertyExecutive['extension'],
'mobile_code' => $propertyExecutive['mobile_code'],
'mobile' => $propertyExecutive['mobile'],
'fax_code' => $propertyExecutive['fax_code'],
'fax' => $propertyExecutive['fax'],
'view_full_phone' => $propertyExecutive['view_full_phone'],
'view_full_mobile' => $propertyExecutive['view_full_mobile'],
'view_full_fax' => $propertyExecutive['view_full_fax'],
];
$response = [
'status' => true,
'data' => $executiveItem,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function 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->propertyWebPhotoMappingRepository->findByCriteria($propertyWebPhotoMappingRequest);
$propertyWebMappingPhotos = $propertyWebMappingPhotos ? $propertyWebMappingPhotos : [];
$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 photos($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' => 0],
['field' => 'status', 'condition' => '=', 'value' => $params['mode'] == 'preview' ? 2 : 1],
],
'with' => ['propertyPhoto']
];
$propertyWebMappingPhotos = $this->propertyWebPhotoMappingRepository->findByCriteria($propertyWebPhotoMappingRequest);
$propertyWebMappingPhotos = $propertyWebMappingPhotos ? $propertyWebMappingPhotos : [];
$responsePhotos = [];
foreach ($propertyWebMappingPhotos as $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'];
}
$responsePhotos[] = [
'id' => $photo['id'],
'photo_url_thump' => $photoUrlThumbFilePath,
'photo_url' => $photoUrlFilePath,
'is_cover' => $photo['is_cover'],
/*'medium_photo_size' => [
'width' => Image::make($photoUrlFilePath)->width(),
'height' => Image::make($photoUrlFilePath)->height()
] ,*/
];
}
return $responsePhotos;
}
private function checkWebColorMapping($params, $status)
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$webColorRequestData = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'status' => $status
];
$webColorDatas = $this->propertyWebColorMappingService->getPropertyWebColorMappingWithStatus($webColorRequestData, ['id', 'color_code', 'order_number', 'status']);
if ($webColorDatas['status'] != 'success') {
throw new ApiErrorException($webColorDatas['message']);
}
$data = [];
if (!empty($webColorDatas['data']['property_web_color_mapping'])) {
foreach ($webColorDatas['data']['property_web_color_mapping'] as $key => $webColorMappingData) {
$data[$key]['color_number'] = $webColorMappingData['order_number'];
$data[$key]['color_code'] = $webColorMappingData['color_code'];
}
}
$response = [
'status' => true,
'data' => $data
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function contactForm($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$validationResult = $this->propertyWebContactFormValidator->validate($params);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyExecutive.executiveType', 'propertyWeb'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if ($propertyAdditionalInfo['status'] != 'success') {
throw new ApiErrorException('api-unknown-error');
}
$myWebContactEmail = $propertyAdditionalInfo['data']['myweb_contact_email'];
if (!$myWebContactEmail) {
throw new ApiErrorException('api-unknown-error');
}
$bcc = [];
$mailData = [
'to' => [
'name' => $property['name'],
'email' => $myWebContactEmail,
],
'bcc' => $bcc
];
$mailViewParams = $params;
$mailViewParams['logo'] = 'https://www.extranetwork.com/assets/img/logo/logo.png';
$mailParams = [
'mailData' => $mailData,
'mailViewParams' => $mailViewParams
];
$this->mailer->onQueue(
'contactFormMail',
new ContactFormMail($mailParams)
);
$response = [
'status' => true,
'data' => null,
'message' => 'myweb-contact_form-success_message',
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function placeCategoryPlaces($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'property_contact' => $property['property_contact'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
];
$categoryMapping = $this->propertyPlaceService->getCategoriesInList($params);
if ($categoryMapping['status'] != 'success') {
throw new ApiErrorException('api-unknown-error');
}
$responseData['places'] = $categoryMapping['data']['places'];
$responseData['category'] = $categoryMapping['data']['category'];
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function getPlace($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
];
$getPlace = $this->propertyPlaceService->getPlace($params);
if ($getPlace['status'] != 'success') {
throw new ApiErrorException('api-unknown-error');
}
if (isset($getPlace['data']['description']) && !is_null($getPlace['data']['description'])) {
$description = json_decode($getPlace['data']['description'], 1);
$getPlace['data']['description'] = null;
if (isset($description[$params['currentLanguage']])) {
$getPlace['data']['description'] = $description[$params['currentLanguage']];
}
}
$responseData['place'] = $getPlace['data'];
//Category's Other Places
$categoryPlaces = $this->propertyPlaceService->getCategoriesInList(['property_id' => $params['property_id'], 'place_category_id' => $getPlace['data']['category']['id']]);
$responseData['categoryPlace'] = $categoryPlaces['status'] == 'success' && !empty($categoryPlaces['data']) && isset($categoryPlaces['data']['places']) ? $categoryPlaces['data']['places'] : [];
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function kvkk($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
];
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if (isset($propertyAdditionalInfo['data'])) {
$responseData['additional_info'] = collect($propertyAdditionalInfo['data'])->only(['kvkk_mersis_no', 'kvkk_data_controller', 'kvkk_contact_person', 'kvkk_addres', 'kvkk_phone', 'kvkk_tax_office', 'kvkk_tax_number', 'kvkk_email', 'kvkk_web_site', 'kvkk_contact_email', 'kvkk_contact_address'])->toArray();
}
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function multimedia($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyType', 'propertyChain', 'propertyExecutive.executiveType', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country', 'content_code'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$newExecutiveArray = [];
foreach ($property['property_executive'] as $propertyExecutive) {
$executiveItem = [
'id' => $propertyExecutive['id'],
'executive_type_name' => $propertyExecutive['executive_type']['name'],
'executive_type_locale_key' => $propertyExecutive['executive_type']['language_key'],
'executive_type_icon' => $propertyExecutive['executive_type']['icon'],
'name_surname' => $propertyExecutive['name_surname'],
'email' => $propertyExecutive['email'],
'phone_code' => $propertyExecutive['phone_code'],
'phone' => $propertyExecutive['phone'],
'extension' => $propertyExecutive['extension'],
'mobile_code' => $propertyExecutive['mobile_code'],
'mobile' => $propertyExecutive['mobile'],
'fax_code' => $propertyExecutive['fax_code'],
'fax' => $propertyExecutive['fax'],
'view_full_phone' => $propertyExecutive['view_full_phone'],
'view_full_mobile' => $propertyExecutive['view_full_mobile'],
'view_full_fax' => $propertyExecutive['view_full_fax'],
];
if ($propertyExecutive['status'] == 1) {
$newExecutiveArray[] = $executiveItem;
}
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$additionalInfoRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'additional_info_key_id', 'condition' => '=', 'value' => 10]
],
'firstRow' => true
];
$myWebContactEmail = $this->propertyAdditionalInfoService->select($additionalInfoRequest);
if ($myWebContactEmail['status'] != 'success') {
throw new ApiErrorException($myWebContactEmail['message']);
}
$myWebContactEmail = isset($myWebContactEmail['data']['value']) && !empty($myWebContactEmail['data']['value']) ? $myWebContactEmail['data']['value'] : null;
$property['property_contact']['myweb_contact_email'] = $myWebContactEmail;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$distances = [];
$factDistancesCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
],
'with' => ['fact']
];
$factDistances = $this->propertyFactMappingService->select($factDistancesCriteria);
if ($factDistances['status'] == 'success') {
$factDistances = collect($factDistances['data'])->where('fact.parent_id', 735)->toArray();
foreach ($factDistances as $factDistance) {
$distances[] = [
'name' => $factDistance['fact']['name'],
'icon' => $factDistance['fact']['icon'],
'language_key' => $factDistance['fact']['language_key'],
'description' => $factDistance['descriptionArray'],
];
}
}
$responseData = [
'id' => $property['id'],
'name' => $property['name'],
'content_code' => $property['content_code'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'property_executive' => $newExecutiveArray,
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
'distances' => $distances
];
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function content($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
];
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if (isset($propertyAdditionalInfo['data'])) {
$responseData['additional_info'] = collect($propertyAdditionalInfo['data'])->only(['kvkk_mersis_no', 'kvkk_data_controller', 'kvkk_contact_person', 'kvkk_addres', 'kvkk_phone', 'kvkk_tax_office', 'kvkk_tax_number', 'kvkk_email', 'kvkk_web_site', 'kvkk_contact_email', 'kvkk_contact_address'])->toArray();
}
$columns = ['id', 'property_id', 'content_category_id', 'title', 'slug', 'image', 'language_code', 'status', 'created_at'];
$propertyWebContentCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'content_category_id', 'condition' => '=', 'value' => $params['content_category_id']],
['field' => 'language_code', 'condition' => '=', 'value' => $params['language_code']],
],
'with' => ['ContentCategory'],
'orderBy' => [
['field' => 'id', 'value' => 'DESC']
]
];
$propertyWebContent = $this->propertyWebContentRepository->findByCriteria($propertyWebContentCriteria, $columns);
$responseData['property_content'] = $propertyWebContent;
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function contentDetail($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => '',
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'property_contact' => $property['property_contact'],
];
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if (isset($propertyAdditionalInfo['data'])) {
$responseData['additional_info'] = collect($propertyAdditionalInfo['data'])->only(['kvkk_mersis_no', 'kvkk_data_controller', 'kvkk_contact_person', 'kvkk_addres', 'kvkk_phone', 'kvkk_tax_office', 'kvkk_tax_number', 'kvkk_email', 'kvkk_web_site', 'kvkk_contact_email', 'kvkk_contact_address'])->toArray();
}
$columns = ['id', 'property_id', 'content_category_id', 'title', 'slug', 'image', 'language_code', 'content', 'status', 'created_at'];
$propertyWebContentCriteria = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'slug', 'condition' => '=', 'value' => $params['slug']]
],
'with' => ['ContentCategory'],
'firstRow' => true
];
$propertyWebContent = $this->propertyWebContentRepository->findByCriteria($propertyWebContentCriteria, $columns);
$responseData['property_content'] = $propertyWebContent;
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function policy($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$responseData = [];
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyPhotos', 'propertyType', 'propertyChain', 'propertyRooms', 'propertyWeb', 'propertyAwardsCertificates.awardsCertificateCategory'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$property['property_brand']['logo_url'] = $property['property_brand'] ? Config::get('app.imageUrl') . '/property-photos/' . $property['id'] . "/logo/" . $property['property_brand']['logo_name'] . '_250x250.' . $property['property_brand']['logo_file_ext'] : null;
$property['property_contact']['social_media_addresses'] = json_decode($property['property_contact']['social_media_addresses'], 1);
$rooms = collect($property['property_rooms'])
->map(function ($value) use ($property) {
$room = $value;
$room['slug'] = Str::slug($room['name'], $separator = '-', $language = 'en');
return $room;
})->values()->all();
$coverPhotos = $this->coverPhotos($params);
$myWebServiceMode = fillOnUndefined($params, 'mode', 'live'); // preview or live
$myWebServiceModeStatus = $myWebServiceMode === "live" ? 1 : 2;
$webColormappingRequestData = [
'property_id' => $property['id'],
'property_web_id' => $property['property_web']['id']
];
$webColormappingDatas = $this->checkWebColorMapping($webColormappingRequestData, $myWebServiceModeStatus);
if (empty($webColormappingDatas['data'])) {
$property['property_brand']['color_codes'] = isset($property['property_brand']['color_codes']) ? json_decode($property['property_brand']['color_codes'], true) : json_decode('[{"color_number":1,"color_code":"#000"},{"color_number":2,"color_code":"#000"}]');
} else {
$property['property_brand']['color_codes'] = $webColormappingDatas['data'];
}
$property['property_brand']['title'] = isset($property['property_brand']['title']) ? $property['property_brand']['title'] : '{"en":null,"de":null,"es":null,"tr":null}';
$property['property_brand']['logo_name'] = isset($property['property_brand']['logo_name']) ? $property['property_brand']['logo_name'] : null;
$propertyWebAboutUsParams = [
'property_id' => fillOnUndefined($params, 'property_id'),
'property_web_id' => fillOnUndefined($params, 'property_web_id'),
'mode' => $params['mode'] === "preview" ? 2 : 1, // live : 1 preview : 2
];
$propertyWebAboutUs = $this->propertyWebAboutUsService->getPropertyWebAboutUs($propertyWebAboutUsParams);
if ($propertyWebAboutUs['status'] != 'success') {
throw new ApiErrorException($propertyWebAboutUs['message']);
}
$aboutUs = isset($propertyWebAboutUs['data']) && !empty($propertyWebAboutUs['data']) ? $propertyWebAboutUs['data'] : [];
$aboutUsFiltred = collect($aboutUs)->first(function ($value, $key) use ($params) {
if ($value['language_code'] == $params['currentLanguage']) {
return $value['value'];
}
});
$propertyAwardsCertificates = collect($property['property_awards_certificates'])
->where('awards_certificate_category.type', '=', 'PLC')
->where('status', '=', 1)
->map(function ($value) {
$return = $value;
unset($return['awards_certificate_category']);
$image = null;
if ($value['file_path']) {
$urlPath = '/property-photos/' . $value['property_id'] . "/awards-certificates/";
$image = Config::get('app.imageUrl') . $urlPath . $value['file_path'];
}
$catLogo = null;
if ($value['awards_certificate_category']['id']) {
$urlPath = '/assets/img/awards/';
$catLogo = Config::get('app.client_server') . $urlPath . $value['awards_certificate_category']['id'] . '.png';
}
$return['file_path'] = $image ? $image : null;
$category = [
'category_name' => $value['awards_certificate_category']['name'],
'category_language_key' => $value['awards_certificate_category']['language_key'],
'category_country_code' => $value['awards_certificate_category']['country_code'],
'category_logo' => $catLogo,
'category_type' => $value['awards_certificate_category']['type'],
'category_status' => $value['awards_certificate_category']['status'],
];
return array_merge($return, $category);
})->values()->all();
array_multisort(
array_column($propertyAwardsCertificates, 'date'), SORT_DESC,
array_column($propertyAwardsCertificates, 'name'), SORT_ASC,
$propertyAwardsCertificates
);
$haveSafeCertificate = collect($property['property_awards_certificates'])->where('category_id', '=', 2)->where('status', '=', 1)->first();
$responseData = [
'name' => $property['name'],
'property_type' => fillOnUndefined($property['property_type'], 'name'),
'property_type_key' => fillOnUndefined($property['property_type'], 'language_key'),
'property_chain' => fillOnUndefined($property['property_chain'], 'name'),
'official_name' => $property['official_name'],
'tax_office' => $property['tax_office'],
'tax_number' => $property['tax_number'],
'currency_type' => $property['currency_type'],
'country' => $property['country'],
'about_us' => isset($aboutUsFiltred['value']) ? $aboutUsFiltred['value'] : "",
'rooms' => $rooms,
'property_brand' => $property['property_brand'],
'property_contact' => $property['property_contact'],
'landing_photo' => $coverPhotos,
'have_safe_tourism_cert' => isset($haveSafeCertificate),
'policy' => $propertyAwardsCertificates
];
$getPropertyFact = $this->propertyFactService->getPropertyFact($params);
if ($getPropertyFact['status'] != 'success') {
throw new ApiErrorException($getPropertyFact['message']);
}
$getPropertyFact = $this->getPropertyFactForHtml($getPropertyFact['data']);
if ($getPropertyFact['status'] != 'success') {
throw new ApiErrorException($getPropertyFact['message']);
}
$responseData['property_facts'] = $getPropertyFact['data'];
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if (isset($propertyAdditionalInfo['data'])) {
$responseData['additional_info'] = $propertyAdditionalInfo['data'];
}
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function promotion($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$responseData = [];
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => [
'propertyPromotionMapping.propertyPromotion.promotionType',
'propertyPromotionMapping.propertyRoomRateChannelMapping.propertyRoomRateMapping.propertyRoom',
'propertyPromotionMapping.propertyRoomRateChannelMapping.propertyRoomRateMapping.propertyRoomRate.propertyRoomRateAccommodation'
],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$promotionList = [];
$responseData['promotion'] = [];
if (!empty($property['property_promotion_mapping'])) {
//Web Channel
$propertyPromotionMapping = collect($property['property_promotion_mapping'])->where('property_room_rate_channel_mapping.channel_id', 1)->toArray();
foreach ($propertyPromotionMapping as $promotion) {
$promotionList[$promotion['property_promotion_id']]['id'] = $promotion['property_promotion']['id'];
$promotionList[$promotion['property_promotion_id']]['title'] = __($promotion['property_promotion']['promotion_type']['language_key'], [], $params['language']);
$promotionList[$promotion['property_promotion_id']]['type_code'] = $promotion['property_promotion']['promotion_type']['type_code'];
$promotionList[$promotion['property_promotion_id']]['order_number'] = $promotion['property_promotion']['promotion_type']['order_number'];
$promotionList[$promotion['property_promotion_id']]['detail'] = [
'start_date' => $promotion['property_promotion']['start_date'],
'end_date' => $promotion['property_promotion']['end_date'],
'reservation_start_date' => $promotion['property_promotion']['reservation_start_date'],
'reservation_end_date' => $promotion['property_promotion']['reservation_end_date'],
'is_time' => $promotion['property_promotion']['is_time'],
'start_time' => $promotion['property_promotion']['start_time'],
'end_time' => $promotion['property_promotion']['end_time'],
'day_before' => $promotion['property_promotion']['day_before'],
'amount' => $promotion['property_promotion']['amount'],
'min_stay' => $promotion['property_promotion']['min_stay'],
'is_mobile' => $promotion['property_promotion']['is_mobile'],
'days' => $promotion['property_promotion']['daysArray'],
];
$propertyRoomRateMapping = $promotion['property_room_rate_channel_mapping']['property_room_rate_mapping'];
$promotionList[$promotion['property_promotion_id']]['room'][$propertyRoomRateMapping['property_room']['id']]['id'] = $propertyRoomRateMapping['property_room']['id'];
$promotionList[$promotion['property_promotion_id']]['room'][$propertyRoomRateMapping['property_room']['id']]['title'] = $propertyRoomRateMapping['property_room']['name'];
$promotionList[$promotion['property_promotion_id']]['room'][$propertyRoomRateMapping['property_room']['id']]['rate'][$propertyRoomRateMapping['property_room_rate']['id']]['id'] = $propertyRoomRateMapping['property_room_rate']['id'];
$promotionList[$promotion['property_promotion_id']]['room'][$propertyRoomRateMapping['property_room']['id']]['rate'][$propertyRoomRateMapping['property_room_rate']['id']]['title'] = $propertyRoomRateMapping['property_room_rate']['name'];
$promotionList[$promotion['property_promotion_id']]['room'][$propertyRoomRateMapping['property_room']['id']]['rate'][$propertyRoomRateMapping['property_room_rate']['id']]['accommodation'] = __($propertyRoomRateMapping['property_room_rate']['property_room_rate_accommodation']['language_key'], [], $params['language']);
//dd($promotionList, $promotion);
}
foreach ($promotionList as $promotionKey => $promotion) {
foreach ($promotion['room'] as $promotionRoomKey => $promotionRoom) {
$promotionList[$promotionKey]['room'][$promotionRoomKey]['rate'] = array_values($promotionList[$promotionKey]['room'][$promotionRoomKey]['rate']);
}
$promotionList[$promotionKey]['room'] = array_values($promotionList[$promotionKey]['room']);
}
$promotionList = array_values($promotionList);
$responseData['promotion'] = $promotionList;
}
$response = [
'status' => true,
'data' => $responseData,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function affiliateRequestMail($params = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$propertyRequest = [
'criteria' => [
['field' => 'id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1],
],
'with' => ['propertyBrand', 'propertyContact', 'propertyExecutive.executiveType', 'propertyWeb'],
'firstRow' => true
];
$getPropertyFields = ['id', 'name', 'property_type_id', 'chain_id', 'rating', 'official_name', 'tax_office', 'tax_number', 'currency_type', 'country'];
$property = $this->propertyRepository->findByCriteria($propertyRequest, $getPropertyFields);
if (!$property) {
throw new ApiErrorException('property not found');
}
$propertyAdditionalInfo = $this->propertyAdditionalInfoService->getPropertyAdditionalInfo2KeyBy($params);
if ($propertyAdditionalInfo['status'] != 'success') {
throw new ApiErrorException('api-unknown-error');
}
$myWebContactEmail = $propertyAdditionalInfo['data']['myweb_contact_email'];
if (!$myWebContactEmail) {
throw new ApiErrorException('api-unknown-error');
}
$propertyExecutives = collect($property['property_executive'])->where('status', 1)->where('executive_type_id', 8)->pluck('email')->toArray();
$bcc = [];
$mailData = [
'to' => [
'name' => $property['name'],
'email' => $myWebContactEmail,
],
'bcc' => $propertyExecutives
];
$mailViewParams = $params;
$mailViewParams['logo'] = 'https://www.extranetwork.com/assets/img/logo/logo.png';
$mailParams = [
'mailData' => $mailData,
'mailViewParams' => $mailViewParams
];
$this->mailer->onQueue(
'affiliateRequestMail',
new AffiliateRequestMail($mailParams)
);
$response = [
'status' => true,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
}