propertyChannelRepository = $propertyChannelRepository; $this->propertyChannelAddValidator = $propertyChannelAddValidator; $this->propertyChannelUpdateValidator = $propertyChannelUpdateValidator; $this->propertyChannelDeleteValidator = $propertyChannelDeleteValidator; $this->propertyChannelMappingRepository = $propertyChannelMappingRepository; } public function create($params = []) { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $validationResult = $this->propertyChannelAddValidator->validate($params); if ($validationResult->errors()->first()) { $errors = $validationResult->errors()->all(); throw new ApiErrorException($errors); } $insertData = [ 'parent_id' => fillOnUndefined($params, 'parent_id'), 'name' => fillOnUndefined($params, 'name'), 'official_name' => fillOnUndefined($params, 'official_name'), 'description' => fillOnUndefined($params, 'description'), 'channel_category_id' => fillOnUndefined($params, 'channel_category_id'), 'country_code' => fillOnUndefined($params, 'country_code'), 'currency_code' => fillOnUndefined($params, 'currency_code'), 'logo' => fillOnUndefined($params, 'logo'), 'address' => fillOnUndefined($params, 'address'), 'zip_code' => fillOnUndefined($params, 'zip_code'), 'email' => fillOnUndefined($params, 'email'), 'phone' => fillOnUndefined($params, 'phone'), 'phone2' => fillOnUndefined($params, 'phone2'), 'fax' => fillOnUndefined($params, 'fax'), 'score' => fillOnUndefined($params, 'score'), "status" => fillOnUndefined($params, "status", 1), "created_by" => fillOnUndefined($params, "created_by", 0), "updated_by" => fillOnUndefined($params, "updated_by", 0) ]; $userCreateResult = $this->propertyChannelRepository->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->propertyChannelRepository->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->propertyChannelRepository->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 addPropertyChannel($params = []) { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $insertData = [ 'parent_id' => fillOnUndefined($params, 'parent_id'), 'name' => fillOnUndefined($params, 'name'), 'official_name' => fillOnUndefined($params, 'official_name'), 'description' => fillOnUndefined($params, 'description'), 'channel_category_id' => fillOnUndefined($params, 'channel_category_id'), 'country_code' => fillOnUndefined($params, 'country_code'), 'currency_code' => json_encode(fillOnUndefined($params, 'currency_code', [])), 'logo' => fillOnUndefined($params, 'logo'), 'address' => fillOnUndefined($params, 'address'), 'zip_code' => fillOnUndefined($params, 'zip_code'), 'email' => fillOnUndefined($params, 'email'), 'phone' => fillOnUndefined($params, 'phone'), 'phone2' => fillOnUndefined($params, 'phone2'), 'fax' => fillOnUndefined($params, 'fax'), 'score' => fillOnUndefined($params, 'score'), "status" => fillOnUndefined($params, "status", 1), "created_by" => fillOnUndefined($params, "user_id"), "updated_by" => fillOnUndefined($params, "user_id") ]; $userCreateResult = $this->create($insertData); if ($userCreateResult['status'] != 'success') { throw new ApiErrorException($userCreateResult['message']); } $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 getPropertyChannels($params = []) { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $mappingData = [] ; if(isset($params['property_id'])){ $criteria = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1], ['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']], ] ]; $mappingData = $this->propertyChannelMappingRepository->findByCriteria($criteria, ['id', 'property_id', 'channel_id','connected_channel_id', 'status']); $mappingData = $mappingData ? $mappingData : [] ; $mappingData = collect($mappingData)->keyBy('channel_id')->all() ; } $mappingDataPending = [] ; if(isset($params['property_id'])){ $criteria = [ 'criteria' => [ ['field' => 'property_id', 'condition' => '=', 'value' => $params['property_id']], ] ]; $mappingDataPending = $this->propertyChannelMappingRepository->findByCriteria($criteria, ['id', 'property_id', 'channel_id','connected_channel_id', 'status']); $mappingDataPending = $mappingDataPending ? $mappingDataPending : [] ; $mappingDataPending = collect($mappingDataPending)->keyBy('channel_id')->all() ; } $criteria = [ 'criteria' => [ ['field' => 'status', 'condition' => '=', 'value' => 1 ] ], 'with' => ['propertyChannelCategory', 'parentChannel'], 'orderBy' => [ ['field' => 'name', 'value' => 'ASC'] ] ]; if(isset($params['parent_id'])){ $params['parent_id'] = $params['parent_id'] == "null" ? null : $params['parent_id']; $criteria['criteria'][] = ['field' => 'parent_id', 'condition' => '=', 'value' => $params['parent_id'] ] ; } if(isset($params['type'])){ $criteria['criteria'][] = ['field' => 'type', 'condition' => '=', 'value' => $params['type'] ] ; } if(isset($params['channel_category_id'])){ $criteria['criteria'][] = ['field' => 'channel_category_id', 'condition' => '=', 'value' => $params['channel_category_id'] ] ; } if(isset($params['country_code'])){ $criteria['criteria'][] = ['field' => 'country_code', 'condition' => '=', 'value' => $params['country_code'] ] ; } $data = $this->propertyChannelRepository->findByCriteria($criteria,['id', 'parent_id', 'name', 'official_name', 'description', 'channel_category_id', 'country_code', 'restriction','currency_code', 'logo', 'address', 'zip_code', 'email', 'phone', 'phone2', 'fax', 'score', 'status']); $data = collect($data)->map(function ($channels) use ($params, $mappingData, $mappingDataPending){ if($params['property_id']){ $channels['is_selected'] = isset($mappingData[$channels['id']]) ; $channels['is_pending'] = isset($mappingDataPending[$channels['id']]) && $mappingDataPending[$channels['id']]['status'] == 2 ? true : false ; $channels['connected_channel_id'] = isset($mappingData[$channels['id']]) ? $mappingData[$channels['id']]['connected_channel_id'] : null; } $channels["currency_code"] = json_decode($channels["currency_code"], 1); $channels['has_children'] = in_array($channels['channel_category_id'], [3,4]) ? true : false; return $channels; }); $data = $data->keyBy('id')->toArray(); $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 updatePropertyChannel($params = []) { $response = ['status' => -1, 'message' => '', 'data' => null]; try { $validationResult = $this->propertyChannelUpdateValidator->validate($params); if ($validationResult->errors()->first()) { $errors = $validationResult->errors()->all(); throw new ApiErrorException($errors); } $updateData = [ 'parent_id' => fillOnUndefined($params, 'parent_id'), 'name' => fillOnUndefined($params, 'name'), 'official_name' => fillOnUndefined($params, 'official_name'), 'description' => fillOnUndefined($params, 'description'), 'channel_category_id' => fillOnUndefined($params, 'channel_category_id'), 'country_code' => fillOnUndefined($params, 'country_code'), 'currency_code' => json_encode(fillOnUndefined($params, 'currency_code', [])), 'logo' => fillOnUndefined($params, 'logo'), 'address' => fillOnUndefined($params, 'address'), 'zip_code' => fillOnUndefined($params, 'zip_code'), 'email' => fillOnUndefined($params, 'email'), 'phone' => fillOnUndefined($params, 'phone'), 'phone2' => fillOnUndefined($params, 'phone2'), 'fax' => fillOnUndefined($params, 'fax'), 'score' => fillOnUndefined($params, 'score'), "updated_by" => fillOnUndefined($params, "user_id", 0) ]; $updateResult = $this->update($params['id'], $updateData); if ($updateResult['status'] != 'success') { throw new ApiErrorException($updateResult['message']); } $userData = $updateResult["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 checkChannelCategory($channel_id=0, $category_id=0){ $response = false; $channel = $this->propertyChannelRepository->find($channel_id); if(isset($channel["channel_category_id"]) && $channel["channel_category_id"] == $category_id){ $response = true; } return $response; } }