471 lines
18 KiB
PHP
471 lines
18 KiB
PHP
<?php
|
||
|
||
|
||
namespace App\Core\Service\PropertyAdditionalInfo;
|
||
|
||
use App\Core\Repository\GeneralTimezone\GeneralTimezoneRepository;
|
||
use App\Core\Repository\PropertyAdditionalInfo\PropertyAdditionalInfoRepository;
|
||
use App\Core\Repository\PropertyAdditionalInfo\PropertyAdditionalInfoKeyRepository;
|
||
use App\Exceptions\ApiErrorException;
|
||
use Exception;
|
||
use Illuminate\Support\Facades\Log;
|
||
|
||
|
||
class PropertyAdditionalInfoService
|
||
{
|
||
|
||
private $propertyAdditionalInfoRepository;
|
||
private $propertyAdditionalInfoKeyRepository;
|
||
|
||
public function __construct
|
||
(
|
||
PropertyAdditionalInfoRepository $additionalInfoRepository,
|
||
PropertyAdditionalInfoKeyRepository $additionalInfoKeyRepository,
|
||
GeneralTimezoneRepository $generalTimezoneRepository
|
||
)
|
||
{
|
||
$this->propertyAdditionalInfoRepository = $additionalInfoRepository;
|
||
$this->propertyAdditionalInfoKeyRepository = $additionalInfoKeyRepository;
|
||
$this->generalTimezoneRepository = $generalTimezoneRepository;
|
||
}
|
||
|
||
|
||
public function select($param = [], $column = ['*'])
|
||
{
|
||
|
||
$response = ['status' => -1, 'message' => '', 'data' => null];
|
||
|
||
try {
|
||
|
||
$data = $this->propertyAdditionalInfoRepository->findByCriteria($param, $column);
|
||
$response = [
|
||
'status' => true,
|
||
'data' => $data,
|
||
];
|
||
|
||
} catch (ApiErrorException $e) {
|
||
$response['message'] = $e->getMessage();
|
||
} catch (Exception $e) {
|
||
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
||
Log::error($message);
|
||
$response['message'] = $e->getMessage();
|
||
}
|
||
|
||
return output($response);
|
||
}
|
||
|
||
public function create($param = [])
|
||
{
|
||
$response = ['status' => -1, 'message' => '', 'data' => null];
|
||
try {
|
||
$insertData =
|
||
[
|
||
"property_id" => fillOnUndefined($param, "property_id"),
|
||
"additional_info_key_id" => fillOnUndefined($param, "additional_info_key_id"),
|
||
"value" => fillOnUndefined($param, "value"),
|
||
"status" => fillOnUndefined($param, "status", 1),
|
||
"created_by" => fillOnUndefined($param, "created_by"),
|
||
"updated_by" => fillOnUndefined($param, "updated_by"),
|
||
|
||
];
|
||
|
||
|
||
/*
|
||
$validationResult = $this->propertyExecutiveCreateValidator->validate($insertData);
|
||
|
||
if ($validationResult->errors()->first()) {
|
||
$errors = $validationResult->errors()->all();
|
||
throw new ApiErrorException($errors);
|
||
}
|
||
|
||
*/
|
||
|
||
|
||
$userCreateResult = $this->propertyAdditionalInfoRepository->create($insertData);
|
||
if ($userCreateResult['status'] != 'success') {
|
||
throw new Exception('api-unknown_error');
|
||
}
|
||
$userData = $userCreateResult["data"];
|
||
$response = [
|
||
'status' => true,
|
||
'data' => $userData,
|
||
];
|
||
|
||
} catch (ApiErrorException $e) {
|
||
$response['message'] = implode(', ', $e->getMessageArr());
|
||
} catch (Exception $e) {
|
||
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
||
Log::error($message);
|
||
$response['message'] = $e->getMessage();
|
||
}
|
||
|
||
return output($response);
|
||
}
|
||
|
||
public function update($id, $param = [])
|
||
{
|
||
$response = ['status' => -1, 'message' => '', 'data' => null];
|
||
try {
|
||
|
||
|
||
$updateResult = $this->propertyAdditionalInfoRepository->update($id, $param);
|
||
|
||
if ($updateResult['status'] != 'success') {
|
||
throw new Exception('api-unknown_error');
|
||
}
|
||
$updateData = $updateResult["data"];
|
||
|
||
|
||
$response = [
|
||
'status' => true,
|
||
'data' => $updateData,
|
||
];
|
||
|
||
} catch (ApiErrorException $e) {
|
||
$response['message'] = implode(', ', $e->getMessageArr());
|
||
} catch (Exception $e) {
|
||
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
||
Log::error($message);
|
||
$response['message'] = $e->getMessage();
|
||
}
|
||
|
||
return output($response);
|
||
}
|
||
|
||
/**
|
||
* @param array $params property_id and locale code
|
||
*
|
||
*/
|
||
public function getPropertyAdditionalInfo($params)
|
||
{
|
||
try {
|
||
$locale = $params['locale'];
|
||
$propertyId = $params['property_id'];
|
||
|
||
$getPropertyAdditionalInfoKeyCriteria =
|
||
[
|
||
'criteria' =>
|
||
[
|
||
['field' => 'status', 'condition' => '=', 'value' => 1],
|
||
],
|
||
];
|
||
$getPropertyAdditionalInfoKey = $this->propertyAdditionalInfoKeyRepository->findByCriteria($getPropertyAdditionalInfoKeyCriteria, ['id', 'additional_info_key']);
|
||
$getPropertyAdditionalInfoCriteria =
|
||
[
|
||
'criteria' =>
|
||
[
|
||
['field' => 'property_id', 'condition' => '=', 'value' => $propertyId],
|
||
['field' => 'status', 'condition' => '=', 'value' => 1],
|
||
],
|
||
];
|
||
$getPropertyAdditionalInfo = $this->propertyAdditionalInfoRepository->findByCriteria($getPropertyAdditionalInfoCriteria);
|
||
$getPropertyAdditionalInfoHasInfoKey = collect($getPropertyAdditionalInfo)->keyBy('additional_info_key_id')->toArray();
|
||
|
||
$filteredPropertyAdditionalInfo = [];
|
||
foreach ($getPropertyAdditionalInfoKey as $key => $propertyAdditionalInfoKeys) {
|
||
$value = null;
|
||
$additionalId = null;
|
||
|
||
$additionalId = $propertyAdditionalInfoKeys['id'];
|
||
if (array_key_exists($additionalId, $getPropertyAdditionalInfoHasInfoKey)) {
|
||
$value = $getPropertyAdditionalInfoHasInfoKey[$additionalId]['value'];
|
||
}
|
||
|
||
$filteredPropertyAdditionalInfo[$additionalId] =
|
||
[
|
||
'id' => $additionalId,
|
||
'name' => $propertyAdditionalInfoKeys['additional_info_key'],
|
||
'value' => $value,
|
||
];
|
||
}
|
||
|
||
|
||
} catch (ApiErrorException $e) {
|
||
$response['message'] = implode(', ', $e->getMessageArr());
|
||
} catch (Exception $e) {
|
||
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
|
||
Log::error($message);
|
||
$response['message'] = $e->getMessage();
|
||
}
|
||
|
||
return $filteredPropertyAdditionalInfo;
|
||
return output($response);
|
||
}
|
||
|
||
/**
|
||
* @param array $params
|
||
* @param string $locale 'en','tr', etc..
|
||
* @return array
|
||
*/
|
||
|
||
public function insertPropertyAdditionalInfo($params)
|
||
{
|
||
$response = ['status' => false, 'statusCode' => 500, 'message' => '', 'data' => null];
|
||
|
||
try {
|
||
$responseData = $params['data'];
|
||
$insertPropertyAdditionalInfoData = [];
|
||
|
||
foreach ($responseData as $perData) {
|
||
$insertPropertyAdditionalInfoData[] =
|
||
[
|
||
'property_id' => $params['property_id'],
|
||
'additional_info_key_id' => $perData['additional_info_key_id'],
|
||
'value' => $perData['value'],
|
||
'created_by' => $params['user_id'],
|
||
'updated_by' => $params['user_id'],
|
||
];
|
||
}
|
||
|
||
$response = $this->propertyAdditionalInfoRepository->createAll($insertPropertyAdditionalInfoData);
|
||
|
||
if ($response['status'] != 'success') {
|
||
throw new Exception('api-unknown_error');
|
||
}
|
||
|
||
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ''];
|
||
|
||
|
||
} catch (ApiErrorException $e) {
|
||
$response = ['status' => 0, 'statusCode' => 500, 'message' => $e->getMessage(), 'data' => null];
|
||
} catch (Exception $e) {
|
||
|
||
$message = $e->getFile() . ' ' . $e->getLine() . ' ' . $e->getMessage();
|
||
Log::error($message);
|
||
}
|
||
|
||
return output($response);
|
||
|
||
}
|
||
|
||
public function updatePropertyAdditionalInfo($params)
|
||
{
|
||
$response = ['status' => false, 'statusCode' => 500, 'message' => '', 'data' => null];
|
||
|
||
try {
|
||
$responseData = $params['data'];
|
||
$updatePropertyAdditionalInfoData = [];
|
||
$responseDataCount = count($responseData);
|
||
$countOfUpdatedData = 0;
|
||
//TODO : update'i gerçekleştirilmeyen datanında bildirilmesi gerekiyor.
|
||
foreach ($responseData as $perData) {
|
||
$id = $perData['id'];
|
||
|
||
$updatePropertyAdditionalInfoData =
|
||
[
|
||
'property_id' => $params['property_id'],
|
||
'additional_info_key_id' => $perData['additional_info_key_id'],
|
||
'value' => $perData['value'],
|
||
'updated_by' => $params['user_id'],
|
||
];
|
||
|
||
$update = $this->propertyAdditionalInfoRepository->update($id, $updatePropertyAdditionalInfoData);
|
||
if ($update['status'] != 'success') {
|
||
throw new Exception('api-unknown_error');
|
||
}
|
||
|
||
if ($update['status'] === "success" && !empty($update['data'])) {
|
||
$countOfUpdatedData++;
|
||
}
|
||
}
|
||
|
||
|
||
if ($countOfUpdatedData != $responseDataCount) {
|
||
throw new ApiErrorException(lang('Your update did not take place!'));
|
||
}
|
||
|
||
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ''];
|
||
|
||
|
||
} catch (ApiErrorException $e) {
|
||
$response = ['status' => 0, 'statusCode' => 500, 'message' => $e->getMessage(), 'data' => null];
|
||
} catch (Exception $e) {
|
||
|
||
$message = $e->getFile() . ' ' . $e->getLine() . ' ' . $e->getMessage();
|
||
Log::error($message);
|
||
}
|
||
|
||
return output($response);
|
||
}
|
||
|
||
public function updateOrCreatePropertyAdditionalInfo($params)
|
||
{
|
||
$response = ['status' => false, 'statusCode' => 500, 'message' => '', 'data' => null];
|
||
|
||
try {
|
||
|
||
|
||
// Get All Keys
|
||
$getPropertyAdditionalKeyCriteria = [
|
||
'criteria' =>
|
||
[
|
||
['field' => 'status', 'condition' => '=', 'value' => 1],
|
||
]
|
||
];
|
||
$getPropertyAdditionalKeyResponse = $this->propertyAdditionalInfoKeyRepository->findByCriteria($getPropertyAdditionalKeyCriteria, ['id', 'additional_info_key']);
|
||
$getPropertyAdditionalKeyResponse = $getPropertyAdditionalKeyResponse ? $getPropertyAdditionalKeyResponse : [];
|
||
$keyArray = collect($getPropertyAdditionalKeyResponse)->keyBy('additional_info_key')->all();
|
||
|
||
// get all property additional info
|
||
$propertyAdditionalInfoRequest = [
|
||
'criteria' => [
|
||
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
|
||
]
|
||
];
|
||
|
||
$propertyAdditionalInfoResponse = $this->select($propertyAdditionalInfoRequest);
|
||
if ($propertyAdditionalInfoResponse['status'] != 'success') {
|
||
throw new ApiErrorException(lang('Additional Data Not Loaded'));
|
||
}
|
||
$propertyAdditionalInfoCollection = collect($propertyAdditionalInfoResponse['data']);
|
||
foreach ($params['additional_info'] as $key => $value) {
|
||
|
||
if (!isset($keyArray[$key])) {
|
||
continue;
|
||
}
|
||
|
||
if (!isset($keyArray[$key])) {
|
||
throw new ApiErrorException($key . ' not found');
|
||
}
|
||
|
||
$value = $value != null ? $value : "";
|
||
|
||
|
||
$additionalInfoCheck = $propertyAdditionalInfoCollection
|
||
->where('additional_info_key_id', '=', $keyArray[$key]['id'])
|
||
->first();
|
||
/*
|
||
$kvkkKeys = ['kvkk_mersis_no', 'kvkk_data_controller', 'kvkk_contact_person'];
|
||
if(in_array($key, $kvkkKeys)){
|
||
if($value === "" || $value === NULL){
|
||
continue;
|
||
}
|
||
}
|
||
*/
|
||
if ($additionalInfoCheck) {
|
||
$updateData = [
|
||
'value' => $value,
|
||
'updated_by' => $params['user_id'],
|
||
'status' => 1,
|
||
];
|
||
$updateStatus = $this->update($additionalInfoCheck['id'], $updateData);
|
||
|
||
if ($updateStatus['status'] != 'success') {
|
||
throw new Exception($updateStatus['message']);
|
||
}
|
||
|
||
} else {
|
||
$createData = [
|
||
'property_id' => $params['property_id'],
|
||
'additional_info_key_id' => $keyArray[$key]['id'],
|
||
'value' => $value,
|
||
'updated_by' => $params['user_id'],
|
||
'created_by' => $params['user_id'],
|
||
];
|
||
$createStatus = $this->create($createData);
|
||
if ($createStatus['status'] != 'success') {
|
||
throw new Exception($createStatus['message']);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ''];
|
||
|
||
|
||
} catch (ApiErrorException $e) {
|
||
$response = ['status' => 0, 'statusCode' => 500, 'message' => $e->getMessage(), 'data' => null];
|
||
} catch (Exception $e) {
|
||
|
||
$message = $e->getFile() . ' ' . $e->getLine() . ' ' . $e->getMessage();
|
||
Log::error($message);
|
||
}
|
||
|
||
return output($response);
|
||
}
|
||
|
||
public function getPropertyAdditionalInfo2KeyBy($params)
|
||
{
|
||
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
|
||
try {
|
||
|
||
|
||
$getPropertyAdditionalKeyCriteria = [
|
||
'criteria' =>
|
||
[
|
||
['field' => 'status', 'condition' => '=', 'value' => 1],
|
||
]
|
||
];
|
||
$getPropertyAdditionalKeyResponse = $this->propertyAdditionalInfoKeyRepository->findByCriteria($getPropertyAdditionalKeyCriteria, ['id', 'additional_info_key']);
|
||
$getPropertyAdditionalKeyResponse = $getPropertyAdditionalKeyResponse ? $getPropertyAdditionalKeyResponse : [];
|
||
|
||
$getPropertyAdditionalInfoCriteria = [
|
||
'criteria' =>
|
||
[
|
||
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
|
||
['field' => 'status', 'condition' => '=', 'value' => 1],
|
||
]
|
||
];
|
||
$getPropertyAdditionalInfoResponse = $this->propertyAdditionalInfoRepository->findByCriteria($getPropertyAdditionalInfoCriteria, ['id', 'additional_info_key_id', 'value']);
|
||
$getPropertyAdditionalInfoResponse = $getPropertyAdditionalInfoResponse ? $getPropertyAdditionalInfoResponse : [];
|
||
$getPropertyAdditionalInfoResponse = collect($getPropertyAdditionalInfoResponse)->keyBy('additional_info_key_id')->all();
|
||
|
||
$newMap = [];
|
||
foreach ($getPropertyAdditionalKeyResponse as $keyItem) {
|
||
$newMap[$keyItem['additional_info_key']] = isset($getPropertyAdditionalInfoResponse[$keyItem['id']]) ? $getPropertyAdditionalInfoResponse[$keyItem['id']]['value'] : null;
|
||
|
||
//property_timezone
|
||
if ($keyItem['additional_info_key'] == 'property_timezone') {
|
||
$generalTimezoneRepositoryCriteria = [
|
||
'criteria' => [
|
||
['field' => 'id', 'condition' => '=', 'value' => $getPropertyAdditionalInfoResponse[$keyItem['id']]['value']],
|
||
],
|
||
'firstRow' => true
|
||
];
|
||
$propertyTimeZoneDetail = $this->generalTimezoneRepository->findByCriteria($generalTimezoneRepositoryCriteria, ['location', 'action_type', 'hour', 'minute']);
|
||
$newMap['property_timezone_detail'] = $propertyTimeZoneDetail ?? null;
|
||
}
|
||
}
|
||
|
||
$response = ['status' => true, 'data' => $newMap];
|
||
|
||
} 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 output($response);
|
||
}
|
||
|
||
public function deletePropertyAdditionalInfos($params)
|
||
{
|
||
|
||
$keyIdCriteria = [
|
||
'whereIn' =>
|
||
[
|
||
['field' => 'additional_info_key', 'value' => $params['key_array']],
|
||
],
|
||
];
|
||
$keyData = $this->propertyAdditionalInfoKeyRepository->findByCriteria($keyIdCriteria);
|
||
$keyIds = collect($keyData)->keyBy('id')->keys();
|
||
|
||
$propertyExecutiveDeleteRequest = [
|
||
'criteria' => [
|
||
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
|
||
],
|
||
'whereIn' => [
|
||
['field' => 'additional_info_key_id', 'value' => $keyIds],
|
||
]
|
||
];
|
||
|
||
$this->propertyAdditionalInfoRepository->delete($propertyExecutiveDeleteRequest);
|
||
|
||
}
|
||
|
||
}
|