742 lines
30 KiB
PHP
742 lines
30 KiB
PHP
<?php
|
|
|
|
|
|
namespace App\Http\Controllers\V1;
|
|
|
|
use App\Core\Mail\PropertyProductOfferMail;
|
|
use App\Core\Service\PdfContentService;
|
|
use App\Core\Service\PropertyRoomService;
|
|
use App\Exceptions\ApiErrorException;
|
|
use App\Jobs\PropertyCatalogServiceJob;
|
|
use App\Jobs\RunPropertyCatalogService;
|
|
use App\Models\PropertyProductOffer;
|
|
use App\Models\User;
|
|
use Carbon\Carbon;
|
|
use Exception;
|
|
use Illuminate\Mail\Mailer;
|
|
use Illuminate\Support\Facades\App;
|
|
use Barryvdh\DomPDF\PDF;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Http\Request;
|
|
|
|
class ExportPdfController
|
|
{
|
|
|
|
private $pdf;
|
|
private $pdfContentService;
|
|
private $propertyRoomService;
|
|
|
|
public function __construct(
|
|
PDF $pdf,
|
|
PdfContentService $pdfContentService,
|
|
PropertyRoomService $propertyRoomService,
|
|
Mailer $mailer
|
|
)
|
|
{
|
|
$this->pdf = $pdf;
|
|
$this->pdfContentService = $pdfContentService;
|
|
$this->propertyRoomService = $propertyRoomService;
|
|
$this->mailer = $mailer;
|
|
|
|
}
|
|
|
|
|
|
public function pdf(Request $request)
|
|
{
|
|
|
|
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
|
|
try {
|
|
|
|
if (is_null($request->getContent())) {
|
|
throw new ApiErrorException(lang('Parameter Error.'));
|
|
}
|
|
|
|
$params = json_decode($request->getContent(), 1);
|
|
$params = current($params);
|
|
|
|
|
|
if (isset($params['dataExport']) && $params['dataExport'] == 'json') {
|
|
|
|
$pdfDataRequest = [
|
|
'property_id' => fillOnUndefined($params, 'property_id', null),
|
|
'locale' => app('translator')->getLocale()
|
|
];
|
|
$factSheetDataResponse = $this->pdfContentService->factSheetData($pdfDataRequest);
|
|
if ($factSheetDataResponse['status'] != 'success') {
|
|
throw new Exception($factSheetDataResponse['message']);
|
|
}
|
|
$factSheetData = $factSheetDataResponse['data'];
|
|
|
|
return apiResponse(1, null, $factSheetData, 200);
|
|
}
|
|
|
|
|
|
if (isset($params['dataExport']) && $params['dataExport'] == 'catalog') {
|
|
|
|
/*$pdfDataRequest = [
|
|
'property_id' => fillOnUndefined($params, 'property_id', null),
|
|
'locale' => fillOnUndefined($params, 'language', 'en'),
|
|
];
|
|
$factSheetDataResponse = $this->pdfContentService->factSheetData($pdfDataRequest);
|
|
if ($factSheetDataResponse['status'] != 'success') {
|
|
throw new Exception($factSheetDataResponse['message']);
|
|
}
|
|
|
|
$pageContent = $factSheetDataResponse['data'];
|
|
$pdfLanguage = $pdfDataRequest['locale'];
|
|
|
|
app('translator')->setLocale($pdfLanguage);
|
|
$pdfService = $this->pdf->loadView('pdf.propertyCatalog', compact('pageContent'), [], 'UTF8');
|
|
//$pdfService->setOptions(['dpi' => 100, 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true]);
|
|
$hotelName = Str::slug($pageContent['name'], '_', 'en') . '_' . $pdfLanguage;
|
|
|
|
return $pdfService->download($hotelName . '.pdf');*/
|
|
|
|
|
|
dispatch(new PropertyCatalogServiceJob(
|
|
fillOnUndefined($params, 'property_id', null),
|
|
fillOnUndefined($params, 'language', app('translator')->getLocale()),
|
|
fillOnUndefined($params, 'email', null)
|
|
));
|
|
|
|
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => null];
|
|
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
|
|
|
|
}
|
|
|
|
$pdfDataRequest = [
|
|
'property_id' => fillOnUndefined($params, 'property_id', null),
|
|
'locale' => app('translator')->getLocale()
|
|
];
|
|
$pdfDataResponse = $this->pdfContentService->pdfData($pdfDataRequest);
|
|
if ($pdfDataResponse['status'] != 'success') {
|
|
throw new Exception($pdfDataResponse['message']);
|
|
}
|
|
|
|
$pdfData = $pdfDataResponse['data'];
|
|
$pdfLanguage = upperCase(app('translator')->getLocale());
|
|
|
|
$logoBase64 = null;
|
|
if ($pdfData['property_brand']) {
|
|
if ($pdfData['property_brand']['logo_name']) {
|
|
$logoFile = Config::get('app.imageUrl') . '/property-photos/' . $pdfData['property_brand']['property_id'] . '/logo/' . $pdfData['property_brand']['logo_name'] . '_250x250.' . $pdfData['property_brand']['logo_file_ext'];
|
|
$logoBase64 = 'data:image/' . $pdfData['property_brand']['logo_file_ext'] . ';base64,' . base64_encode(file_get_contents($logoFile));
|
|
}
|
|
}
|
|
|
|
$ip = $request->ip();
|
|
|
|
$pdf = $this->pdf->loadView('pdf.hotelContent', compact('pdfData', 'logoBase64', 'ip'), [], 'UTF8');
|
|
$hotelName = Str::slug($pdfData['name'], '_', 'en') . '_' . $pdfLanguage;
|
|
|
|
return $pdf->download($hotelName . '.pdf');
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = implode(', ', $e->getMessageArr());
|
|
$response['statusCode'] = 400;
|
|
} catch (\Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
$response['statusCode'] = 500;
|
|
}
|
|
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
|
|
// return $pdf->stream();
|
|
}
|
|
|
|
public function getPropertyPdfInventory(Request $request, $token)
|
|
{
|
|
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
|
|
try {
|
|
|
|
$requestParams = [
|
|
'token' => $token
|
|
];
|
|
|
|
$params = $this->propertyRoomService->getParamsForPdfInvenyory($requestParams);
|
|
$params = $params['data'];
|
|
|
|
$requestParams = [
|
|
'property_id' => fillOnUndefined($params, 'property_id'),
|
|
'channel_id' => fillOnUndefined($params, 'channel_id'),
|
|
'start_date' => fillOnUndefined($params, 'start_date'),
|
|
'end_date' => fillOnUndefined($params, 'end_date'),
|
|
|
|
];
|
|
|
|
$inventoryData = $this->propertyRoomService->getPropertyRoomInventory($requestParams);
|
|
if ($inventoryData['status'] != 'success') {
|
|
throw new ApiErrorException($inventoryData['message']);
|
|
}
|
|
|
|
$data = $inventoryData['data'];
|
|
|
|
foreach ($data as $dataKey => $dataVal) {
|
|
|
|
|
|
//room_availability
|
|
$i = 0;
|
|
$monthKey = null;
|
|
foreach ($dataVal['room_availability'] as $key => $val) {
|
|
|
|
$keyArr = explode('-', $key);
|
|
if ($monthKey != $keyArr[1]) {
|
|
$monthKey = $keyArr[1];
|
|
$i++;
|
|
}
|
|
|
|
if ($i > 6) {
|
|
continue;
|
|
}
|
|
|
|
$data[$dataKey]['monthly_room_availability'][$i][$key] = $val;
|
|
}
|
|
|
|
//room_stop_sell
|
|
$i = 0;
|
|
$monthKey = null;
|
|
foreach ($dataVal['room_stop_sell'] as $key => $val) {
|
|
|
|
$keyArr = explode('-', $key);
|
|
if ($monthKey != $keyArr[1]) {
|
|
$monthKey = $keyArr[1];
|
|
$i++;
|
|
}
|
|
|
|
if ($i > 6) {
|
|
continue;
|
|
}
|
|
|
|
$data[$dataKey]['monthly_room_stop_sell'][$i][$key] = $val;
|
|
}
|
|
|
|
|
|
foreach ($dataVal['property_room_rate_mapping'] as $propertyRoomRateMappingKey => $propertyRoomRateMappingVal) {
|
|
|
|
foreach ($propertyRoomRateMappingVal['prices'] as $pricesKey => $pricesVal) {
|
|
|
|
//price
|
|
$i = 0;
|
|
$monthKey = null;
|
|
foreach ($pricesVal['price'] as $key => $val) {
|
|
|
|
$keyArr = explode('-', $key);
|
|
if ($monthKey != $keyArr[1]) {
|
|
$monthKey = $keyArr[1];
|
|
$i++;
|
|
}
|
|
|
|
if ($i > 6) {
|
|
continue;
|
|
}
|
|
|
|
$data[$dataKey]['property_room_rate_mapping'][$propertyRoomRateMappingKey]['prices'][$pricesKey]['monthly_price'][$i][$key] = $val;
|
|
}
|
|
|
|
//stop_sell
|
|
$i = 0;
|
|
$monthKey = null;
|
|
foreach ($pricesVal['stop_sell'] as $key => $val) {
|
|
|
|
$keyArr = explode('-', $key);
|
|
if ($monthKey != $keyArr[1]) {
|
|
$monthKey = $keyArr[1];
|
|
$i++;
|
|
}
|
|
|
|
if ($i > 6) {
|
|
continue;
|
|
}
|
|
|
|
$data[$dataKey]['property_room_rate_mapping'][$propertyRoomRateMappingKey]['prices'][$pricesKey]['monthly_stop_sell'][$i][$key] = $val;
|
|
}
|
|
|
|
//min_stay
|
|
$i = 0;
|
|
$monthKey = null;
|
|
foreach ($pricesVal['min_stay'] as $key => $val) {
|
|
|
|
$keyArr = explode('-', $key);
|
|
if ($monthKey != $keyArr[1]) {
|
|
$monthKey = $keyArr[1];
|
|
$i++;
|
|
}
|
|
|
|
if ($i > 6) {
|
|
continue;
|
|
}
|
|
|
|
$data[$dataKey]['property_room_rate_mapping'][$propertyRoomRateMappingKey]['prices'][$pricesKey]['monthly_min_stay'][$i][$key] = $val;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
$propertyDataRequest = [
|
|
'property_id' => fillOnUndefined($params, 'property_id', null)
|
|
];
|
|
$propertyDataResponse = $this->pdfContentService->propertyBaseData($propertyDataRequest);
|
|
if ($propertyDataResponse['status'] != 'success') {
|
|
throw new Exception($propertyDataResponse['message']);
|
|
}
|
|
|
|
$propertyData = $propertyDataResponse['data'];
|
|
|
|
$logoBase64 = null;
|
|
if ($propertyData['property_brand']) {
|
|
if ($propertyData['property_brand']['logo_name']) {
|
|
$logoFile = Config::get('app.imageUrl') . '/property-photos/' . $propertyData['property_brand']['property_id'] . '/logo/' . $propertyData['property_brand']['logo_name'] . '_250x250.' . $propertyData['property_brand']['logo_file_ext'];
|
|
$logoBase64 = 'data:image/' . $propertyData['property_brand']['logo_file_ext'] . ';base64,' . base64_encode(file_get_contents($logoFile));
|
|
}
|
|
}
|
|
|
|
/*$pdf = $this->pdf->loadView('pdf.inventory', compact('data','propertyData','logoFile','logoBase64'), [], 'UTF8' )->setPaper('a4', 'landscape');
|
|
$pdfLanguage = upperCase(app('translator')->getLocale());
|
|
$fileName = Str::slug('inventory', '_','en').'_'.$pdfLanguage;*/
|
|
|
|
return view('pdf.inventory', compact('data', 'propertyData', 'logoFile', 'logoBase64'));
|
|
/*return $pdf->download($fileName.'.pdf');*/
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = implode(', ', $e->getMessageArr());
|
|
$response['statusCode'] = 400;
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
$response['statusCode'] = 500;
|
|
}
|
|
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
|
|
|
|
}
|
|
|
|
|
|
public function propertyProductOffer(Request $request)
|
|
{
|
|
|
|
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
|
|
|
|
|
|
try {
|
|
|
|
if (is_null($request->getContent())) {
|
|
throw new ApiErrorException(lang('Parameter Error.'));
|
|
}
|
|
|
|
$params = json_decode($request->getContent(), 1);
|
|
$params = current($params);
|
|
|
|
if (fillOnUndefined($params, 'version') == 'v2') {
|
|
|
|
$offerKey = [];
|
|
$offerKey[] = $params['propertyName'];
|
|
$offerKey[] = $params['executiveName'];
|
|
$offerKey[] = $params['executiveEmail'];
|
|
$offerKey[] = $params['executivePhone'];
|
|
$offerKey[] = $params['accountManager'];
|
|
$offerKey[] = hash('sha256', json_encode($params['detail'], JSON_UNESCAPED_UNICODE));
|
|
|
|
$offerKey = md5(implode('-', $offerKey));
|
|
|
|
} else {
|
|
$offerKey = md5($params['propertyName'] . '-' . $params['executiveName'] . '-' . $params['package'] . '-' . $params['numberOfRooms'] . '-' . $params['promotionCode']);
|
|
|
|
if ($offerKey != fillOnUndefined($params, 'hashKey')) {
|
|
throw new ApiErrorException('HASH verification error!');
|
|
}
|
|
}
|
|
|
|
|
|
$createParam = [
|
|
'offer_key' => $offerKey,
|
|
'property_name' => $params['propertyName'],
|
|
'executive_name' => $params['executiveName'],
|
|
'executive_email' => $params['executiveEmail'],
|
|
'executive_phone' => $params['executivePhone'],
|
|
'account_manager_name' => fillOnUndefined($params, 'accountManagerName'),
|
|
'account_manager_email' => fillOnUndefined($params, 'accountManagerEmail'),
|
|
'confirm' => fillOnUndefined($params, 'confirm'),
|
|
'offer_date' => Carbon::now()->toDateTimeString(),
|
|
'offer_expire_date' => Carbon::now()->addDays(2)->toDateTimeString(),
|
|
'package' => $params['package'],
|
|
'promotion_code' => $params['promotionCode'],
|
|
'detail' => fillOnUndefined($params, 'detail') ? json_encode($params['detail']) : json_encode($params),
|
|
'version' => fillOnUndefined($params, 'version', 'v1'),
|
|
'ip_address' => $params['ipAddress'],
|
|
'status' => 1,
|
|
'created_at' => time(),
|
|
'updated_at' => time()
|
|
];
|
|
|
|
|
|
$propertyProductOfferCheck = PropertyProductOffer::where('offer_key', $offerKey)->first();
|
|
if ($propertyProductOfferCheck) {
|
|
$propertyProductOfferSync = PropertyProductOffer::where('offer_key', $offerKey)->update($createParam);
|
|
} else {
|
|
$propertyProductOfferSync = PropertyProductOffer::insert($createParam);
|
|
}
|
|
|
|
if (!$propertyProductOfferSync) {
|
|
throw new ApiErrorException('Your offer could not be generated. Please try again.');
|
|
}
|
|
|
|
if(fillOnUndefined($params, 'sendEmail')) {
|
|
$propertyProductOfferMail = ['offerKey' => $offerKey];
|
|
$this->mailer->onQueue('propertyProductOfferMail', new PropertyProductOfferMail($propertyProductOfferMail));
|
|
}
|
|
|
|
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ['offer_key' => $offerKey]];
|
|
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = implode(', ', $e->getMessageArr());
|
|
$response['statusCode'] = 400;
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
//$response['message'] = $e->getMessage();
|
|
$response['message'] = 'Your offer could not be generated. Please try again.';
|
|
$response['statusCode'] = 500;
|
|
}
|
|
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
|
|
|
|
}
|
|
|
|
|
|
public function propertyProductOfferExport(Request $request, $offerKey)
|
|
{
|
|
|
|
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
|
|
|
|
$package = [
|
|
'LRG' => [
|
|
'commission' => 15,
|
|
'minFee' => 2,
|
|
'name' => 'Paket A',
|
|
'creditRange' => [
|
|
'25-50' => [
|
|
'min' => 25,
|
|
'max' => 50,
|
|
'monthly' => 250,
|
|
'annually' => 3000,
|
|
],
|
|
'51-75' => [
|
|
'min' => 51,
|
|
'max' => 75,
|
|
'monthly' => 500,
|
|
'annually' => 6000,
|
|
],
|
|
'76-100' => [
|
|
'min' => 76,
|
|
'max' => 100,
|
|
'monthly' => 750,
|
|
'annually' => 9000,
|
|
],
|
|
'101-150' => [
|
|
'min' => 101,
|
|
'max' => 150,
|
|
'monthly' => 1000,
|
|
'annually' => 12000,
|
|
],
|
|
'151-200' => [
|
|
'min' => 151,
|
|
'max' => 200,
|
|
'monthly' => 1500,
|
|
'annually' => 18000,
|
|
],
|
|
'201-250' => [
|
|
'min' => 201,
|
|
'max' => 250,
|
|
'monthly' => 2000,
|
|
'annually' => 24000,
|
|
],
|
|
'250+' => [
|
|
'min' => 251,
|
|
'max' => null,
|
|
'monthly' => 2500,
|
|
'annually' => 30000,
|
|
],
|
|
]
|
|
],
|
|
'MED' => [
|
|
'commission' => 10,
|
|
'minFee' => 3,
|
|
'name' => 'Paket B',
|
|
'creditRange' => [
|
|
'25-50' => [
|
|
'min' => 25,
|
|
'max' => 50,
|
|
'monthly' => 375,
|
|
'annually' => 4500,
|
|
],
|
|
'51-75' => [
|
|
'min' => 51,
|
|
'max' => 75,
|
|
'monthly' => 750,
|
|
'annually' => 9000,
|
|
],
|
|
'76-100' => [
|
|
'min' => 76,
|
|
'max' => 100,
|
|
'monthly' => 1125,
|
|
'annually' => 13500,
|
|
],
|
|
'101-150' => [
|
|
'min' => 101,
|
|
'max' => 150,
|
|
'monthly' => 1500,
|
|
'annually' => 18000,
|
|
],
|
|
'151-200' => [
|
|
'min' => 151,
|
|
'max' => 200,
|
|
'monthly' => 2250,
|
|
'annually' => 27000,
|
|
],
|
|
'201-250' => [
|
|
'min' => 201,
|
|
'max' => 250,
|
|
'monthly' => 3000,
|
|
'annually' => 36000,
|
|
],
|
|
'250+' => [
|
|
'min' => 251,
|
|
'max' => null,
|
|
'monthly' => 3750,
|
|
'annually' => 45000,
|
|
],
|
|
]
|
|
],
|
|
'SML' => [
|
|
'commission' => 5,
|
|
'minFee' => 4,
|
|
'name' => 'Paket C',
|
|
'creditRange' => [
|
|
'25-50' => [
|
|
'min' => 25,
|
|
'max' => 50,
|
|
'monthly' => 750,
|
|
'annually' => 9000,
|
|
],
|
|
'51-75' => [
|
|
'min' => 51,
|
|
'max' => 75,
|
|
'monthly' => 1500,
|
|
'annually' => 18000,
|
|
],
|
|
'76-100' => [
|
|
'min' => 76,
|
|
'max' => 100,
|
|
'monthly' => 2250,
|
|
'annually' => 27000,
|
|
],
|
|
'101-150' => [
|
|
'min' => 101,
|
|
'max' => 150,
|
|
'monthly' => 3000,
|
|
'annually' => 36000,
|
|
],
|
|
'151-200' => [
|
|
'min' => 151,
|
|
'max' => 200,
|
|
'monthly' => 4500,
|
|
'annually' => 54000,
|
|
],
|
|
'201-250' => [
|
|
'min' => 201,
|
|
'max' => 250,
|
|
'monthly' => 6000,
|
|
'annually' => 72000,
|
|
],
|
|
'250+' => [
|
|
'min' => 251,
|
|
'max' => null,
|
|
'monthly' => 7500,
|
|
'annually' => 90000,
|
|
],
|
|
],
|
|
]
|
|
];
|
|
|
|
$campaign = [
|
|
'promotion' => [
|
|
'code' => [/*'ITF2025','ATF2025','TTI2025'*/],
|
|
'percentage' => 50
|
|
],
|
|
'oneYearAnnually' => [
|
|
'percentage' => 10
|
|
],
|
|
'twoYearAnnually' => [
|
|
'percentage' => 20
|
|
]
|
|
];
|
|
|
|
|
|
$userListIds = [904, 941, 1485];//22-41
|
|
|
|
|
|
try {
|
|
|
|
if (is_null($request->getContent())) {
|
|
throw new ApiErrorException(lang('Parameter Error.'));
|
|
}
|
|
|
|
|
|
$userList = User::whereIn('id', $userListIds)->get()->toArray();
|
|
|
|
$offerDetail = PropertyProductOffer::where('offer_key', $offerKey)->first();
|
|
$offerDetail = $offerDetail ? $offerDetail->toArray() : null;
|
|
|
|
if (empty($offerDetail)) {
|
|
return redirect()->to(config('app.url'));
|
|
}
|
|
|
|
$pageContent = [
|
|
'name' => $offerDetail['property_name'],
|
|
'executiveName' => $offerDetail['executive_name'],
|
|
'executiveEmail' => $offerDetail['executive_email'],
|
|
'executivePhone' => $offerDetail['detailArray']['executivePhone'],
|
|
'offerTime' => $offerDetail['offer_date'],
|
|
'offerExpireTime' => $offerDetail['offer_expire_date'],
|
|
'offerTimeFormatted' => $offerDetail['offerTimeFormatted'],
|
|
'offerExpireTimeFormatted' => $offerDetail['offerExpireTimeFormatted'],
|
|
'numberOfRooms' => $offerDetail['detailArray']['numberOfRooms'],
|
|
'package' => $offerDetail['package'],
|
|
'promotionCode' => $offerDetail['promotion_code'],
|
|
];
|
|
|
|
|
|
$pageContent['package'] = !empty($request->get('package')) ? $request->get('package') : $pageContent['package'];
|
|
$pageContent['numberOfRooms'] = !empty($request->get('numberOfRooms')) ? $request->get('numberOfRooms') : $pageContent['numberOfRooms'];
|
|
|
|
|
|
$creditPackage = [];
|
|
if ((int)$pageContent['numberOfRooms'] < 25) {
|
|
$creditPackage = $package[$pageContent['package']]['creditRange']['25-50'];
|
|
} elseif ((int)$pageContent['numberOfRooms'] > 250) {
|
|
$creditPackage = $package[$pageContent['package']]['creditRange']['250+'];
|
|
} else {
|
|
$creditPackage = collect($package[$pageContent['package']]['creditRange'])
|
|
->where('min', '<=', (int)$pageContent['numberOfRooms'])
|
|
->where('max', '>=', (int)$pageContent['numberOfRooms'])
|
|
->first();
|
|
}
|
|
|
|
|
|
$pricing = [];
|
|
|
|
$pricing['minFee'] = $package[$pageContent['package']]['minFee'];
|
|
$pricing['minFeeBeforeDiscount'] = $package[$pageContent['package']]['minFee'];
|
|
|
|
if (in_array($pageContent['promotionCode'], $campaign['promotion']['code'])) {
|
|
$pricing['minFee'] = (int)($pricing['minFee'] * (1 - ($campaign['promotion']['percentage'] / 100)));
|
|
}
|
|
|
|
$pricing['commission'] = $package[$pageContent['package']]['commission'];
|
|
$pricing['minFee'] = $pricing['minFee'];
|
|
$pricing['minFeeBeforeDiscount'] = $pricing['minFeeBeforeDiscount'];
|
|
|
|
|
|
$pricing['monthly']['minFee'] = (int)$pricing['minFee'] * (int)$pageContent['numberOfRooms'];
|
|
$pricing['monthly']['minFeeBeforePromotion'] = (int)$pricing['minFeeBeforeDiscount'] * (int)$pageContent['numberOfRooms'];
|
|
$pricing['monthly']['commission'] = $package[$pageContent['package']]['commission'];
|
|
//$pricing['monthly']['minReservationTotal'] = number_format(((int)$pricing['monthly']['minFee'] * 100) / $package[$pageContent['package']]['commission'], 0, '', '.');
|
|
$pricing['monthly']['minReservationTotal'] = number_format(fillOnUndefined($creditPackage, 'monthly', 0), 0, '', '.');
|
|
|
|
|
|
$pricing['annually']['minFee'] = (int)$pricing['monthly']['minFee'] * 12;
|
|
$pricing['annually']['minFeeBeforePromotion'] = (int)$pricing['monthly']['minFeeBeforePromotion'] * 12;
|
|
$pricing['annually']['commission'] = $package[$pageContent['package']]['commission'];
|
|
|
|
$pricing['annually']['minFeeDiscount'] = (int)$pricing['annually']['minFee'] * (1 - ($campaign['oneYearAnnually']['percentage'] / 100));//%10
|
|
|
|
//$pricing['annually']['minReservationTotal'] = number_format(((int)$pricing['annually']['minFeeDiscount'] * 100) / $package[$pageContent['package']]['commission'], 0, '', '.');
|
|
$pricing['annually']['minReservationTotal'] = number_format(fillOnUndefined($creditPackage, 'annually', 0), 0, '', '.');
|
|
|
|
|
|
if ($pricing['minFee'] == $pricing['minFeeBeforeDiscount']) {
|
|
$pricing['monthly']['minFeeBeforePromotion'] = null;
|
|
$pricing['annually']['minFeeBeforePromotion'] = null;
|
|
}
|
|
|
|
$pageContent['packageName'] = $package[$pageContent['package']]['name'];
|
|
$pageContent['pricing'] = $pricing;
|
|
|
|
|
|
$accountUserDetail = collect($userList)->where('email', $offerDetail['detailArray']['accountManager'])->first();
|
|
$pageContent['accountManagerName'] = fillOnUndefined($accountUserDetail, 'nameSurname');
|
|
$pageContent['accountManagerEmail'] = fillOnUndefined($accountUserDetail, 'email');
|
|
$pageContent['accountManagerPhone'] = fillOnUndefined($accountUserDetail, 'phone');
|
|
|
|
|
|
$pdfService = $this->pdf->loadView('pdf.propertyProductOffer', compact('pageContent'), [], 'UTF8');
|
|
$pdfService->setOptions(['dpi' => 100, 'isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true]);
|
|
$hotelName = Str::slug($pageContent['name'], '_', 'en');
|
|
return $pdfService->stream($hotelName . '.pdf');
|
|
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = implode(', ', $e->getMessageArr());
|
|
$response['statusCode'] = 400;
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
$response['statusCode'] = 500;
|
|
}
|
|
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
|
|
|
|
}
|
|
|
|
public function propertyProductOfferData(Request $request, $offerKey)
|
|
{
|
|
|
|
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
|
|
|
|
|
|
$userListIds = [904, 941, 1485];//22-41
|
|
|
|
|
|
try {
|
|
|
|
if (is_null($request->getContent())) {
|
|
throw new ApiErrorException(lang('Parameter Error.'));
|
|
}
|
|
|
|
|
|
$userList = User::whereIn('id', $userListIds)->get()->toArray();
|
|
|
|
$offerDetail = PropertyProductOffer::where('offer_key', $offerKey)->first();
|
|
$offerDetail = $offerDetail ? $offerDetail->toArray() : null;
|
|
|
|
if (empty($offerDetail)) {
|
|
return redirect()->to(config('app.url'));
|
|
}
|
|
|
|
|
|
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $offerDetail];
|
|
|
|
|
|
} catch (ApiErrorException $e) {
|
|
$response['message'] = implode(', ', $e->getMessageArr());
|
|
$response['statusCode'] = 400;
|
|
} catch (Exception $e) {
|
|
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
|
Log::error($message);
|
|
$response['message'] = $e->getMessage();
|
|
$response['statusCode'] = 500;
|
|
}
|
|
return apiResponse($response['status'], $response['message'], $response['data'], $response['statusCode']);
|
|
|
|
}
|
|
|
|
|
|
}
|