propertyConfigRepository = $propertyConfigRepository; $this->propertyConfigCreateValidator = $propertyConfigCreateValidator; $this->siteConfigRepository = $siteConfigRepository; $this->propertyFactService = $propertyFactService; $this->rateKey = 'profile_rate_value'; $this->siteConfigKey = 'profile_rate_mapping'; } public function create($param = []) { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $insertData = [ "property_id" => fillOnUndefined($param, "property_id"), "config_key" => fillOnUndefined($param, "config_key"), "config_value_json" => fillOnUndefined($param, "config_value_json"), "status" => fillOnUndefined($param, "status", 1), "created_by" => fillOnUndefined($param, "created_by"), "updated_by" => fillOnUndefined($param, "updated_by"), "created_at" => time(), "updated_at" => time(), ]; $validationResult = $this->propertyConfigCreateValidator->validate($insertData); if ($validationResult->errors()->first()) { $errors = $validationResult->errors()->all(); throw new ApiErrorException($errors); } $userCreateResult = $this->propertyConfigRepository->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->propertyConfigRepository->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 { $updateResult = $this->propertyConfigRepository->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->propertyConfigRepository->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 getPropertyConfig($params) { $response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500]; try { $return = []; $configRequest = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1], ['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']], ], ]; if ($params['config_keys']) { $configRequest['whereIn'] = [ ["field" => "config_key", "value" => $params['config_keys']] ]; } $configResponse = $this->select($configRequest, ['property_id', 'config_key', 'config_value_json']); if ($configResponse['status'] != 'success') { throw new ApiErrorException(lang('Executive Data Not Loaded')); } $configCollection = collect($configResponse['data']); foreach ($configCollection as $config) { $configItem['property_id'] = $config['property_id']; $configItem['config_key'] = $config['config_key']; $configItem['config_value_json'] = $config['config_value_json']; $return[] = $configItem; } $response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ['property_config' => $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 propertyConfigUpdate($params) { $response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500]; try { $return = []; $requestKeys = collect($params['config_keys'])->keyBy("config_key")->keys()->toArray(); $configRequest = [ 'criteria' => [ ['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']], ], "whereIn" => [ ["field" => "config_key", "value" => $requestKeys] ] ]; $configResponse = $this->select($configRequest); $configCollection = collect($configResponse['data']); foreach ($params['config_keys'] as $config_key) { $configKeyCheck = $configCollection->where('config_key', '=', $config_key['config_key']) ->first(); if ($configKeyCheck) { $updateData = [ 'config_value_json' => $config_key['config_value_json'], 'updated_by' => $params['user_id'], 'status' => 1, ]; $updateStatus = $this->update($configKeyCheck['id'], $updateData); if ($updateStatus['status'] != 'success') { throw new Exception($updateStatus['message']); } } else { $createData = [ 'property_id' => $params['property_id'], 'config_key' => $config_key['config_key'], 'config_value_json' => $config_key['config_value_json'], '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'), 'config_keys' => $requestKeys ]; $propertyConfig = $this->getPropertyConfig($requestParams); if ($propertyConfig['status'] != 'success') { throw new ApiErrorException($propertyConfig['message']); } $response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $propertyConfig['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 checkRateForId($params) { $response = $params; $response['property_rate_for'] = $response['property_rate_for'] == 'Property.Fact.SubCategoryFacts' ? 'Property.Fact.SubCategoryFacts' . '.' . $response['sub_category_id'] : $response['property_rate_for']; return $response; } public function rateProperty($rateParams) { $response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500]; try { $rateParams = $this->checkRateForId($rateParams); $selectProperty = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1], ['field' => 'property_id', 'condition' => '=', 'value' => $rateParams['property_id']], ['field' => 'config_key', 'condition' => '=', 'value' => $this->rateKey], ], 'firstRow' => 1 ]; $propertyRates = $this->select($selectProperty); if ($propertyRates['status'] != "success") { throw new Exception($propertyRates['message']); } if ($propertyRates['data'] == null) { $configValue[] = $rateParams['property_rate_for']; $configValueJson = json_encode($configValue); $updateParams = [ 'property_id' => $rateParams['property_id'], 'config_key' => $this->rateKey, 'config_value_json' => $configValueJson, 'status' => 1, 'created_by' => $rateParams['user_id'], 'updated_by' => $rateParams['user_id'], 'created_at' => time(), 'updated_at' => time() ]; $updateStatus = $this->create($updateParams); if ($updateStatus['status'] != 'success') { throw new Exception($updateStatus['message']); } } else { $propertyRates = $propertyRates['data'] ? $propertyRates['data'] : []; $configValue = json_decode($propertyRates['config_value_json'], 1); $configValue = is_array($configValue) ? $configValue : []; if (!in_array($rateParams['property_rate_for'], $configValue)) { array_push($configValue, $rateParams['property_rate_for']); $configValueJson = json_encode($configValue); $updateParams = [ 'config_value_json' => $configValueJson, 'updated_by' => $rateParams['user_id'], 'updated_at' => time() ]; $updateStatus = $this->update($propertyRates['id'], $updateParams); if ($updateStatus['status'] != 'success') { throw new Exception($updateStatus['message']); } } } $response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => $configValue]; } 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 propertyDashBoard($params) { $response = ['status' => false, 'message' => '', 'data' => null, 'statusCode' => 500]; try { $return = []; $siteConfigRequest = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1], ['field' => 'config_key', 'condition' => '=', 'value' => $this->siteConfigKey], ], 'firstRow' => 1 ]; $siteConfig = $this->siteConfigRepository->findByCriteria($siteConfigRequest); $siteConfig = $siteConfig ? $siteConfig : []; $rateConfig = fillOnUndefined($siteConfig, 'config_value_json', null); $rateConfig = json_decode($rateConfig, 1); $dashboardSections = is_array($rateConfig) && isset($rateConfig['dashboard_section']) ? $rateConfig['dashboard_section'] : []; foreach ($dashboardSections as $key => $value) { $return[$key]['title'] = $value['title']; $return[$key]['icon'] = $value['icon']; $return[$key]['description'] = $value['description']; if (isset($value['menus'])) { $return[$key]['menus'] = $value['menus']; } } $amenityMenu = $this->propertyFactService->getSubCategoryMenus(['parent_id' => 1, 'sub_category_id' => null]); if ($amenityMenu['status'] != 'success') { throw new ApiErrorException($amenityMenu['message']); } $facilityMenu = $this->propertyFactService->getSubCategoryMenus(['parent_id' => 44, 'sub_category_id' => null]); if ($facilityMenu['status'] != 'success') { throw new ApiErrorException($facilityMenu['message']); } $return['amenities']['menus'] = $amenityMenu['data']['menu']; $return['facility']['menus'] = $facilityMenu['data']['menu']; $wizardParams = [ 'menu_array' => $return, 'property_id' => $params['property_id'] ]; $return = $this->checkWizard($wizardParams); $response = ['status' => 1, 'statusCode' => 200, 'message' => null, 'data' => ['dashboard' => $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 checkWizard($params) { $selectProperty = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1], ['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']], ['field' => 'config_key', 'condition' => '=', 'value' => $this->rateKey], ], 'firstRow' => 1 ]; $propertyRates = $this->propertyConfigRepository->findByCriteria($selectProperty); $propertyRates = $propertyRates ? $propertyRates : []; $rates = fillOnUndefined($propertyRates, 'config_value_json', '[]'); $rates = json_decode($rates, 1); $return = []; foreach ($params['menu_array'] as $key => $value) { $return[$key] = $value; $menus = []; $completed = 0; if (isset($value['menus'])) { foreach ($value['menus'] as $menu) { $menu['wizard_completed'] = array_search($menu['alias'], $rates) > -1; $completed = array_search($menu['alias'], $rates) > -1 ? $completed + 1 : $completed; $menus[] = $menu; } $return[$key]['menus'] = $menus; $return[$key]['total_module'] = count($menus); $return[$key]['completed_module'] = $completed; } } return $return; } }