def remove_tag_of_property(data): request_data = json.loads(data) user_email = putil.validate_for_user_id_exists(request_data.get("user_id")) user_data = frappe.db.get_value("User", {"email": user_email}, "user_type", as_dict=True) if user_data.get("user_type") == "System User": try: es = ElasticSearchController() response = es.search_document_for_given_id( "property", request_data.get("property_id"), [], []) get_modified_datetime(response, user_email) update_query = get_update_tag_query(request_data, request_data.get('tags')[0], response) es = ElasticSearchController() update_response = es.update_docuemnt( "property", request_data.get("property_id"), update_query) es = ElasticSearchController() es.refresh_index() return { "operation": "update", "user_id": request_data.get("user_id"), "message": "Property Tags Updated Successfully" } except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except elasticsearch.ElasticsearchException, e: raise ElasticSearchException(e.error)
def get_location_details_for_map(request_data): request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) putil.validate_property_data(request_data, ["request_id"]) try: es = ElasticSearchController() response = es.search_document_for_given_id("request",request_data.get("request_id"),[], ["search_query", "unit_of_area", "adv_search_query"]) search_query = ast.literal_eval(response.get("adv_search_query").encode("utf8")) uom = response.get("unit_of_area") include_fields = ["property_title", "property_id", "location", "property_subtype_option", "operation", "carpet_area", "price", "geo_location_lat", "geo_location_lon" ] size = get_count_of_property_records(es) response_data, total_records = es.search_document(["property"], search_query, 1, size, [], include_fields) uom = "Sq.Ft." if uom not in ["Sq.Ft.", "Acres", "Hectares"] else uom putil.convert_area_according_to_uom(response_data, uom) response_msg = "User Property Found" if response_data else "User property not found" return { "operation":"Search", "user_id":request_data.get("user_id"), "message":response_msg, "data":response_data } except elasticsearch.TransportError: raise DoesNotExistError("Request Id does not exists") except elasticsearch.ElasticsearchException,e: raise ElasticSearchException(e.error)
def get_property_contact(request_data): """ Get Contact person name, contact_no form property & generate lead & enquiry against that user. """ if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) if not request_data.get("property_id"): raise MandatoryError("Mandatory Field Property Id missing") try: es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("property_id"),[],[]) new_response = { "contact_no": response.get("contact_no"), "contact_person":response.get("contact_person")} create_lead_from_userid(request_data, email, response) return { "operation":"Search", "message":"Contact Details found" if len(new_response) else "Contact Details Not Found", "user_id":request_data.get("user_id"), "data":new_response } except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except Exception,e: raise e
def get_property_of_given_id(request_data): if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) try: exclude_list = [ "agent_name", "agent_no", "created_by", "modified_by", "creation_date", "modified_date", "posted_datetime", "modified_datetime" ] es = ElasticSearchController() response = es.search_document_for_given_id( "property", request_data.get("property_id"), exclude_list) return { "operation": "Search", "message": "Property found" if len(response) else "Property Not Found", "user_id": request_data.get("user_id"), "data": response } except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except Exception, e: raise GetPropertyOperationFailed("Get Property Operation Failed")
def get_search_query_of_request_id(request_data): try: es = ElasticSearchController() response = es.search_document_for_given_id("request",request_data.get("id"),[],["search_query", "unit_of_area"]) search_query = ast.literal_eval(response.get("search_query").encode("utf8")) return search_query, response.get("unit_of_area") except elasticsearch.TransportError: raise DoesNotExistError("Request Id does not exists") except elasticsearch.ElasticsearchException,e: raise ElasticSearchException(e.error)
def get_search_query_of_property_id(request_data): try: es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("id")) search_query = putil.generate_search_query_from_property_data(response) return search_query, "Sq.Ft." except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except elasticsearch.ElasticsearchException,e: raise ElasticSearchException(e.error)
def get_project_details(request_data): user_email = putil.validate_for_user_id_exists(request_data.get("user_id")) include_list = request_data.get("fields",[]) try: es = ElasticSearchController() response = es.search_document_for_given_id("project",request_data.get("project_id"), [], include_list) return {"opeartion":"Search", "message":"Project details Found", "data":response} except elasticsearch.TransportError: raise DoesNotExistError("Project Id does not exists") except elasticsearch.ElasticsearchException,e: raise ElasticSearchException(e.error)
def get_property_of_given_id(request_data): if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) try: es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("property_id"), ["property_photos"]) return {"operation":"Search", "message":"Property found" if len(response) else "Property Not Found", "user_id":request_data.get("user_id"), "data":response} except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except Exception,e: raise GetPropertyOperationFailed("Get Property Operation Failed")
def get_property_contact(request_data): if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) if not request_data.get("property_id"): raise MandatoryError("Mandatory Field Property Id missing") try: es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("property_id"),[],["agent_name", "agent_no", "contact_no" ,"contact_person"]) return {"operation":"Search", "message":"Contact Details found" if len(response) else "Contact Details Not Found", "user_id":request_data.get("user_id"), "data":response} except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except Exception,e: raise OperationFailed("Get Property Contact Operation Failed")
def get_property_images(request_data): if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) if not request_data.get("property_id"): raise MandatoryError("Property Id not provided") try: es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("property_id"),[],["full_size_images", "thumbnails"]) return { "operation":"Search", "message":"Property Images Found" if response else "Property Images Not Found", "user_id":request_data.get("user_id"), "data":response } except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except elasticsearch.ElasticsearchException,e: raise ElasticSearchException(e.error) except Exception,e: raise OperationFailed("Get Property Images Operation Failed")
def search_group_with_given_criteria(request_data): if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) try: es = ElasticSearchController() response = es.search_document_for_given_id("request",request_data.get("request_id")) group_search_conditions = make_conditions_for_group_search(response) group_result = frappe.db.sql(""" select name as group_id, operation, property_type , property_subtype , ifnull(property_subtype_option,"") as property_subtype_option ,ifnull(location,"") as location, ifnull(city,"") as city, ifnull(min_budget,"") as min_budget, ifnull(max_budget,"") as max_budget, ifnull(min_area,"") as min_area, ifnull(max_area,"") as max_area from `tabGroup` {0} """.format(group_search_conditions),as_dict=True) for group in group_result: join_flag = frappe.db.get_value("Group User" , {"group_id":group.get("group_id"), "user_id":request_data.get("user_id")},"name") group["user_joined"] = 1 if join_flag else 0 return {"operation":"Search", "request_id":request_data.get("request_id"), "data":group_result, "message":"Matching Groups Found" if len(group_result) else "Group Not Found" } except elasticsearch.TransportError: raise DoesNotExistError("Request Id does not exists") except Exception,e: return SearchGroupOperationFailed("Search Group Operation Failed")
def get_project_of_given_id(request_data): request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) if not request_data.get("project_id"): raise MandatoryError("Project id does not exists") try: exclude_list = putil.get_exclude_list_for_search("Hunterscamp") es = ElasticSearchController() response = es.search_document_for_given_id("project", request_data.get("project_id"), exclude_list) response_data = putil.get_date_diff_and_count_from_posting([response]) # putil.show_amenities_with_yes_status(response_data) return {"operation":"Search", "message":"Project details found" if len(response) else "Project Not Found", "user_id":request_data.get("user_id"), "data":response_data[0]} except elasticsearch.TransportError: raise DoesNotExistError("Project Id does not exists") except Exception,e: raise OperationFailed("Get Project Operation Failed")
def get_property_of_given_id(request_data): if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) try: exclude_list = ["agent_name", "agent_no", "contact_no", "contact_person", "created_by", "modified_by", "creation_date", "modified_date", "posted_datetime", "modified_datetime", "full_size_images", "thumbnails"] es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("property_id"), exclude_list) return { "operation":"Search", "message":"Property found" if len(response) else "Property Not Found", "user_id":request_data.get("user_id"), "data":response } except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except Exception,e: raise GetPropertyOperationFailed("Get Property Operation Failed")
def get_project_of_given_id(request_data): request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) if not request_data.get("project_id"): raise MandatoryError("Project id does not exists") try: es = ElasticSearchController() response = es.search_document_for_given_id("project",request_data.get("project_id")) response["properties"]= {} for prop in response.get("property_details"): if not response["properties"].has_key(prop.get("property_type")): response["properties"][prop.get("property_type")] = { "option":{ prop.get("property_subtype_option"):{ "count":prop.get("count"), "area":prop.get("carpet_area")} }} else: response["properties"][prop.get("property_type")]["option"][prop.get("property_subtype_option")] = { "count":prop.get("count"), "area":prop.get("carpet_area")} response.pop("property_details") return {"operation":"Search", "message":"Project found" if len(response) else "Project Not Found", "user_id":request_data.get("user_id"), "data":response} except elasticsearch.TransportError: raise DoesNotExistError("Project Id does not exists") except Exception,e: raise OperationFailed("Get Project Operation Failed")
def remove_tag_of_property(data): request_data = json.loads(data) user_email = putil.validate_for_user_id_exists(request_data.get("user_id")) user_data = frappe.db.get_value("User",{"email":user_email}, "user_type", as_dict=True) if user_data.get("user_type") == "System User": try: es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("property_id"), [], []) get_modified_datetime(response, user_email) update_query = get_update_tag_query(request_data,request_data.get('tags')[0],response) es = ElasticSearchController() update_response = es.update_docuemnt("property", request_data.get("property_id"),update_query) es = ElasticSearchController() es.refresh_index() return { "operation":"update", "user_id":request_data.get("user_id"), "message":"Property Tags Updated Successfully" } except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except elasticsearch.ElasticsearchException,e: raise ElasticSearchException(e.error)
def search_group_with_given_criteria(request_data): if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) putil.validate_property_data(request_data, ["request_id"]) try: es = ElasticSearchController() response = es.search_document_for_given_id("request",request_data.get("request_id")) group_search_conditions = make_conditions_for_duplicate_group(response, "Group") group_result = frappe.db.sql(""" SELECT name AS group_id, operation, property_type, property_subtype, group_title, ifnull(property_subtype_option, "") AS property_subtype_option, ifnull(location, "") AS location, ifnull(city, "") AS city, ifnull(min_budget, "") AS min_budget, ifnull(max_budget, "") AS max_budget, ifnull(min_area, "") AS min_area, ifnull(max_area, "") AS max_area FROM `tabGroup` {0} """.format(group_search_conditions),as_dict=True) for group in group_result: join_flag = frappe.db.get_value("Group User" , {"group_id":group.get("group_id"), "user_id":request_data.get("user_id")},"name") group["user_joined"] = 1 if join_flag else 0 group_result = group_result[0] if group_result else {} return { "operation":"Search", "request_id":request_data.get("request_id"), "data":group_result, "message":"Matching Group Found" if len(group_result) else "Group Not Found" } except elasticsearch.TransportError: raise DoesNotExistError("Request Id does not exists") except Exception,e: raise SearchGroupOperationFailed("Search Group Operation Failed")
def get_property_contact(request_data): """ Get Contact person name, contact_no form property & generate lead & enquiry against that user. """ if request_data: request_data = json.loads(request_data) email = putil.validate_for_user_id_exists(request_data.get("user_id")) if not request_data.get("property_id"): raise MandatoryError("Mandatory Field Property Id missing") try: es = ElasticSearchController() response = es.search_document_for_given_id("property",request_data.get("property_id"),[],[]) mapper = {"Owner":["contact_person", "contact_no"], "Agent":["agent_name", "agent_no"], "Broker":["agent_name", "agent_no"] } person_key = response.get("listed_by") if response.get("listed_by") else "Owner" person_no_key = response.get("listed_by") if response.get("listed_by") else "Owner" new_response = { "contact_person": response.get(mapper.get(person_key)[0] ), "contact_no":response.get(mapper.get(person_no_key)[1] ), "listed_by":person_key } create_lead_from_userid(request_data, email, response) return { "operation":"Search", "message":"Contact Details found" if len(new_response) else "Contact Details Not Found", "user_id":request_data.get("user_id"), "data":new_response } except elasticsearch.TransportError: raise DoesNotExistError("Property Id does not exists") except Exception,e: print frappe.get_traceback() raise e