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); } }