first commit

This commit is contained in:
ExtraNetwork
2026-05-12 17:04:54 +03:00
commit e5c4b6aa13
1425 changed files with 284735 additions and 0 deletions

View File

@@ -0,0 +1,625 @@
<?php
namespace App\Core\Service;
use App\Core\Repository\PropertyExecutive\PropertyExecutiveRepository;
use App\Core\Service\PropertyExecutiveTypeService;
use App\Core\Validator\PropertyExecutive\PropertyExecutiveCreateValidator;
use App\Core\Validator\PropertyExecutive\PropertyExecutiveUpdateValidator;
use App\Core\Repository\OfferContactMapping\OfferContactMappingRepository;
use App;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Config;
use Exception;
use App\Exceptions\ApiErrorException;
class PropertyExecutiveService
{
private $propertyExecutiveRepository;
private $propertyExecutiveTypeService;
private $propertyExecutiveCreateValidator ;
private $propertyExecutiveUpdateValidator ;
private $offerContactMappingRepository;
public function __construct(
PropertyExecutiveRepository $propertyExecutiveRepository,
PropertyExecutiveCreateValidator $propertyExecutiveCreateValidator,
PropertyExecutiveUpdateValidator $propertyExecutiveUpdateValidator,
OfferContactMappingRepository $offerContactMappingRepository,
PropertyExecutiveTypeService $propertyExecutiveTypeService
)
{
$this->propertyExecutiveRepository = $propertyExecutiveRepository;
$this->propertyExecutiveTypeService = $propertyExecutiveTypeService;
$this->propertyExecutiveCreateValidator = $propertyExecutiveCreateValidator;
$this->propertyExecutiveUpdateValidator = $propertyExecutiveUpdateValidator;
$this->offerContactMappingRepository = $offerContactMappingRepository;
}
public function create($param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$insertData =
[
"property_id" => fillOnUndefined($param, "property_id"),
"executive_type_id" => fillOnUndefined($param, "executive_type_id"),
"name_surname" => fillOnUndefined($param, "name_surname"),
"email" => fillOnUndefined($param, "email"),
"phone_code" => fillOnUndefined($param, "phone_code"),
"phone" => fillOnUndefined($param, "phone"),
'extension' => fillOnUndefined($param, 'extension'),
"mobile_code" => fillOnUndefined($param, "mobile_code"),
"mobile" => fillOnUndefined($param, "mobile"),
"fax_code" => fillOnUndefined($param, "fax_code"),
"fax" => fillOnUndefined($param, "fax"),
"status" => fillOnUndefined($param, "status", 1),
"created_by" => fillOnUndefined($param, "created_by"),
"updated_by" => fillOnUndefined($param, "updated_by"),
"created_at" => time(),
"updated_at" => time(),
];
$executiveTypeRequest = [
'criteria' => [
['field' => 'name_surname', 'condition' => '=', 'value' => $insertData['name_surname']],
['field' => 'property_id', 'condition' => '=', 'value' => $insertData['property_id']],
['field' => 'status', 'condition' => '=', 'value' => 1]
],
'firstRow' => true
];
$propertyExecutiveExist = $this->propertyExecutiveRepository->findByCriteria($executiveTypeRequest);
if(!empty($propertyExecutiveExist)){
throw new ApiErrorException(lang('Registered user in the system'));
}
$validationResult = $this->propertyExecutiveCreateValidator->validate($insertData);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$userCreateResult = $this->propertyExecutiveRepository->create($insertData);
if ($userCreateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$userData = $userCreateResult["data"];
$response = [
'status' => true,
'data' => $userData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function select($param = [], $column = ['*'])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyExecutiveRepository->findByCriteria($param, $column);
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function update($id, $param = [])
{
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$validationResult = $this->propertyExecutiveUpdateValidator->validate($param);
if ($validationResult->errors()->first()) {
$errors = $validationResult->errors()->all();
throw new ApiErrorException($errors);
}
$updateResult = $this->propertyExecutiveRepository->update($id, $param);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$updateData = $updateResult["data"];
$response = [
'status' => true,
'data' => $updateData,
];
} catch (ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function updateOrCreate($criteria = [], $saveData =[]){
$response = ['status' => -1, 'message' => '', 'data' => null];
try {
$data = $this->propertyExecutiveRepository->updateOrCreate($criteria, $saveData);
if ($data['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$response = [
'status' => true,
'data' => $data,
];
} catch (ApiErrorException $e) {
$response['message'] = $e->getMessage();
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
}
return output($response);
}
public function getPropertyExecutive($params){
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$return = [];
// get all executive types
$executiveTypeRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
],
];
$executiveTypeResponse = $this->propertyExecutiveTypeService->select($executiveTypeRequest);
if($executiveTypeResponse['status'] != 'success'){
throw new ApiErrorException(lang('Executive Data Not Loaded'));
}
$executiveTypeCollection = collect($executiveTypeResponse['data']);
// get all property executive types
$propertyExecutiveTypeRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
]
];
$propertyExecutiveTypeResponse = $this->select($propertyExecutiveTypeRequest);
if($propertyExecutiveTypeResponse['status'] != 'success'){
throw new ApiErrorException(lang('Executive Data Not Loaded'));
}
$propertyExecutiveTypeCollection = collect($propertyExecutiveTypeResponse['data']);
foreach ($executiveTypeCollection as $executiveType){
// get property_executive data
$propertyExecutiveItem = [];
$executiveTypeCheck = $propertyExecutiveTypeCollection->where('executive_type_id', '=', $executiveType['id'])
->toArray();
foreach ($executiveTypeCheck as $propertyExecutive){
$propertyExecutiveItem['name_surname'] = $propertyExecutive['name_surname'] ;
$propertyExecutiveItem['email'] = $propertyExecutive['email'] ;
$propertyExecutiveItem['phone_code'] = $propertyExecutive['phone_code'] ;
$propertyExecutiveItem['phone'] = $propertyExecutive['phone'] ;
$propertyExecutiveItem['mobile_code'] = $propertyExecutive['mobile_code'] ;
$propertyExecutiveItem['mobile'] = $propertyExecutive['mobile'] ;
$propertyExecutiveItem['fax_code'] = $propertyExecutive['fax_code'] ;
$propertyExecutiveItem['fax'] = $propertyExecutive['fax'] ;
$propertyExecutiveItem['view_full_phone'] = $propertyExecutive['view_full_phone'] ;
$propertyExecutiveItem['view_full_mobile'] = $propertyExecutive['view_full_mobile'] ;
$propertyExecutiveItem['view_full_fax'] = $propertyExecutive['view_full_fax'] ;
}
$executiveTypeItem['executive_type_id'] = $executiveType['id'] ;
$executiveTypeItem['name'] = $executiveType['name'];
$executiveTypeItem['data'] = $propertyExecutiveItem ;
$return[] = $executiveTypeItem ;
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ['executive_type' => $return]];
} 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 listPropertyExecutive($params){
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$return = [];
// get all executive types
$executiveTypeRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
],
];
$executiveTypeResponse = $this->propertyExecutiveTypeService->select($executiveTypeRequest);
if($executiveTypeResponse['status'] != 'success'){
throw new ApiErrorException(lang('Executive Data Not Loaded'));
}
$executiveTypeCollection = collect($executiveTypeResponse['data']);
// get all property executive types
$propertyExecutiveTypeRequest = [
'criteria' => [
['field' => 'status', 'condition' => '=', 'value' => 1],
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
],
'orderBy' => [['field' => 'updated_at', 'value' => 'DESC']],
'with' => ['executiveType']
];
$propertyExecutiveResponse = $this->select($propertyExecutiveTypeRequest);
if($propertyExecutiveResponse['status'] != 'success'){
throw new ApiErrorException(lang('Executive Data Not Loaded'));
}
$propertyExecutiveResponse = $propertyExecutiveResponse['data'] ;
$return['executive_type'] = [];
foreach ($executiveTypeCollection as $executiveType){
// Get Locale data
$executiveTypeItem['executive_type_id'] = $executiveType['id'] ;
$executiveTypeItem['name'] = $executiveType['name'];
$executiveTypeItem['language_key'] = $executiveType['language_key'];
$return['executive_type'][] = $executiveTypeItem ;
}
$return['executives'] = [] ;
foreach ($propertyExecutiveResponse as $executive){
$executiveItem = [
'id' => $executive['id'],
'property_id' => $executive['property_id'],
'executive_type_id' => $executive['executive_type_id'],
'executive_type_name' => $executive['executive_type']['name'],
'name_surname' => $executive['name_surname'],
'email' => $executive['email'],
'phone_code' => $executive['phone_code'],
'phone' => $executive['phone'],
'extension' => $executive['extension'],
'mobile_code' => $executive['mobile_code'],
'mobile' => $executive['mobile'],
'fax_code' => $executive['fax_code'],
'fax' => $executive['fax'],
'view_full_phone' => $executive['view_full_phone'],
'view_full_mobile' => $executive['view_full_mobile'],
'view_full_fax' => $executive['view_full_fax'],
];
$return['executives'][] = $executiveItem ;
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $return ];
} 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 propertyExecutiveAdd($params){
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$return = [];
foreach ($params['executive_type'] as $executive_type){
$createData = [
'property_id' => $params['property_id'],
'executive_type_id' => $executive_type['executive_type_id'],
'name_surname' => fillOnUndefined($executive_type, 'name_surname'),
'email' => fillOnUndefined($executive_type, 'email'),
'phone_code' => fillOnUndefined($executive_type, 'phone_code'),
'phone' => fillOnUndefined($executive_type, 'phone'),
'extension' => fillOnUndefined($executive_type, 'extension'),
'mobile_code' => fillOnUndefined($executive_type, 'mobile_code'),
'mobile' => fillOnUndefined($executive_type, 'mobile'),
'fax_code' => fillOnUndefined($executive_type, 'fax_code'),
'fax' => fillOnUndefined($executive_type, 'fax'),
'updated_by' => $params['user_id'],
'created_by' => $params['user_id'],
];
$createStatus = $this->create($createData);
if ($createStatus['status'] != 'success') {
throw new Exception($createStatus['message']);
}
}
$requestParams = [
'locale' => fillOnUndefined($params, 'locale'),
'property_id' => fillOnUndefined($params, 'property_id'),
];
$propertyExecutive = $this->listPropertyExecutive($requestParams);
if($propertyExecutive['status'] != 'success'){
throw new ApiErrorException($propertyExecutive['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyExecutive['data']];
} catch
(ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return output($response);
}
public function propertyExecutiveUpdate($params){
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$return = [];
foreach ($params['executive_type'] as $executive_type){
$updateData = [
'executive_type_id' => fillOnUndefined($executive_type, 'executive_type_id'),
'name_surname' => fillOnUndefined($executive_type, 'name_surname'),
'email' => fillOnUndefined($executive_type, 'email') ,
'phone_code' => fillOnUndefined($executive_type, 'phone_code'),
'phone' => fillOnUndefined($executive_type, 'phone'),
'extension' => fillOnUndefined($executive_type, 'extension'),
'mobile_code' => fillOnUndefined($executive_type, 'mobile_code'),
'mobile' => fillOnUndefined($executive_type, 'mobile') ,
'fax_code' => fillOnUndefined($executive_type, 'fax_code'),
'fax' => fillOnUndefined($executive_type, 'fax'),
'updated_by' => $params['user_id'],
'status' => 1,
];
$propertyExecutiveExistRequest = [
'criteria' => [
['field' => 'name_surname', 'condition' => '=', 'value' => $executive_type['name_surname']],
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'id', 'condition' => '!=', 'value' => $executive_type['id'] ],
['field' => 'status', 'condition' => '=', 'value' => 1]
],
'firstRow' => true
];
$propertyExecutiveExist = $this->propertyExecutiveRepository->findByCriteria($propertyExecutiveExistRequest);
if (isset($propertyExecutiveExist['id'])) {
throw new ApiErrorException(lang('Registered user in the system'));
}
$updateStatus = $this->update($executive_type['id'], $updateData) ;
if($updateStatus['status'] != 'success'){
throw new Exception($updateStatus['message']);
}
}
$requestParams = [
'locale' => fillOnUndefined($params, 'locale'),
'property_id' => fillOnUndefined($params, 'property_id'),
];
$propertyExecutive = $this->listPropertyExecutive($requestParams);
if($propertyExecutive['status'] != 'success'){
throw new ApiErrorException($propertyExecutive['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyExecutive['data']];
} catch
(ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return output($response);
}
public function propertyExecutiveDelete($params){
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$return = [];
if(!isset($params['property_executive_id']) || !is_numeric($params['property_executive_id']) ){
throw new ApiErrorException('property_executive_id field require');
}
$propertyExecutiveDeleteRequest = [
'criteria' => [
['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']],
['field' => 'id', 'condition' => '=', 'value' => $params['property_executive_id']],
]
];
$propertyExecutiveTypeResponse = $this->propertyExecutiveRepository->delete($propertyExecutiveDeleteRequest);
if(!$propertyExecutiveTypeResponse){
throw new ApiErrorException('No record to delete');
}
$requestParams = [
'locale' => fillOnUndefined($params, 'locale'),
'property_id' => fillOnUndefined($params, 'property_id'),
];
$propertyExecutive = $this->getPropertyExecutive($requestParams);
if($propertyExecutive['status'] != 'success'){
throw new ApiErrorException($propertyExecutive['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyExecutive['data']];
} catch
(ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return output($response);
}
public function propertyExecutivePassive($params){
$response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500];
try {
$updateParams = [
"status" => 0,
"updated_by" => $params['user_id'],
"updated_at" => time(),
];
$updateResult = $this->propertyExecutiveRepository->update($params['property_executive_id'], $updateParams);
if ($updateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$updateParams = [
"status" => 0,
"updated_by" => $params['user_id'],
"updated_at" => time(),
];
$updateCriteria = [
'criteria' => [
['field' => 'property_executive_id', 'condition' => '=', 'value' => $params['property_executive_id']],
]
];
$offerUpdateResult = $this->offerContactMappingRepository->findByCriteria($updateCriteria , ['id']);
$updateIds = collect($offerUpdateResult)->keyBy('id')->keys()->toArray();
$offerUpdateResult = $this->offerContactMappingRepository->updateWhereIn($updateIds , $updateParams);
if ($offerUpdateResult['status'] != 'success') {
throw new Exception('api-unknown_error');
}
$requestParams = [
'locale' => fillOnUndefined($params, 'locale'),
'property_id' => fillOnUndefined($params, 'property_id'),
];
$propertyExecutive = $this->listPropertyExecutive($requestParams);
if($propertyExecutive['status'] != 'success'){
throw new ApiErrorException($propertyExecutive['message']);
}
$response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyExecutive['data']];
} catch
(ApiErrorException $e) {
$response['message'] = implode(', ', $e->getMessageArr());
$response['statusCode'] = 400;
} catch (Exception $e) {
$message = $e->getFile() . " " . $e->getLine() . " " . $e->getMessage();
Log::error($message);
$response['message'] = $e->getMessage();
$response['statusCode'] = 500;
}
return output($response);
}
}