def create_group_in_hunterscamp(request_data):
	if request_data:
		request_data = json.loads(request_data)
		putil.validate_for_user_id_exists(request_data.get("user_id"))
		putil.validate_property_data(request_data, ["operation", "property_type", "property_subtype"])
		putil.init_for_location_or_city_creation(request_data)
		request_data["property_subtype_option"] = ','.join(request_data.get("property_subtype_option")) if request_data.get("property_subtype_option") else " "
		group_search_conditions = make_conditions_for_duplicate_group(request_data, "Group")
		group_result = frappe.db.sql(""" select  name from `tabGroup` {0} """.format(group_search_conditions),as_dict=True)
		if group_result:
			group_result = [ group.get("name") for group in group_result if group ]
			raise DuplicateEntryError("Group {0} with same configuration already exists".format(','.join(group_result)))
		try:
			gr_doc = frappe.new_doc("Group")
			gr_doc.group_title = request_data.get("group_title")
			gr_doc.operation = request_data.get("operation")
			gr_doc.property_type =  request_data.get("property_type")
			gr_doc.property_subtype = request_data.get("property_subtype")
			gr_doc.location = request_data.get("location")
			gr_doc.property_subtype_option = request_data.get("property_subtype_option")
			gr_doc.creation_via  = "Website"
			gr_doc.min_area = request_data.get("min_area")
			gr_doc.max_area = request_data.get("max_area")
			gr_doc.min_budget = request_data.get("min_budget")
			gr_doc.max_budget = request_data.get("max_budget")
			gr_doc.unit_of_area = request_data.get("unit_of_area")
			gr_doc.city =request_data.get("city")
			gr_doc.status = "Active"
			gr_doc.save()
			return {"operation":"Create", "group_id":gr_doc.name, "message":"Group Created"}
		except frappe.MandatoryError,e:
			raise MandatoryError("Mandatory Field {0} missing".format(e.message))
		except (frappe.LinkValidationError, frappe.ValidationError)  as e:
			raise InvalidDataError(e.message)
def create_alerts(request_data):
	request_data = json.loads(request_data)
	putil.validate_for_user_id_exists(request_data.get("user_id"))
	putil.validate_property_data(request_data, ["operation", "property_type", "property_subtype"])
	putil.init_for_location_or_city_creation(request_data)
	request_data["property_subtype_option"] = ','.join(request_data.get("property_subtype_option")) if request_data.get("property_subtype_option") else " "
	alert_search_conditions = make_conditions_for_duplicate_group(request_data, "Alerts")
	alert_result = frappe.db.sql(""" select  name from `tabAlerts` {0} """.format(alert_search_conditions),as_dict=True)
	if alert_result:
		alert_result = [ alert.get("name") for alert in alert_result if alert ]
		raise DuplicateEntryError("Alert {0} with same configuration already exists".format(','.join(alert_result)))
	try:
		alrt = frappe.new_doc("Alerts")
		alrt.alert_title = request_data.get("alert_title")
		alrt.operation = request_data.get("operation")
		alrt.property_type =  request_data.get("property_type")
		alrt.property_subtype = request_data.get("property_subtype")
		alrt.location = request_data.get("location")
		alrt.property_subtype_option = request_data.get("property_subtype_option")
		alrt.creation_via  = "Website"
		alrt.min_area = request_data.get("min_area")
		alrt.max_area = request_data.get("max_area")
		alrt.min_budget = request_data.get("min_budget")
		alrt.max_budget = request_data.get("max_budget")
		alrt.unit_of_area = request_data.get("unit_of_area")
		alrt.user_id = request_data.get("user_id")
		alrt.city = request_data.get("city")
		alrt.status = "Active"
		alrt.save()
		return {"operation":"Create", "alert_id":alrt.name, "message":"Alert Created"}
	except frappe.MandatoryError,e:
		raise MandatoryError("Mandatory Field {0} missing".format(e.message))
Beispiel #3
0
def create_group_in_hunterscamp(request_data):
    if request_data:
        request_data = json.loads(request_data)
        putil.validate_for_user_id_exists(request_data.get("user_id"))
        putil.validate_property_data(
            request_data, ["operation", "property_type", "property_subtype"])
        putil.init_for_location_or_city_creation(request_data)
        request_data["property_subtype_option"] = ','.join(
            request_data.get("property_subtype_option")) if request_data.get(
                "property_subtype_option") else " "
        group_search_conditions = make_conditions_for_duplicate_group(
            request_data, "Group")
        group_result = frappe.db.sql(
            """ select  name from `tabGroup` {0} """.format(
                group_search_conditions),
            as_dict=True)
        if group_result:
            group_result = [
                group.get("name") for group in group_result if group
            ]
            raise DuplicateEntryError(
                "Group {0} with same configuration already exists".format(
                    ','.join(group_result)))
        try:
            gr_doc = frappe.new_doc("Group")
            gr_doc.group_title = request_data.get("group_title")
            gr_doc.operation = request_data.get("operation")
            gr_doc.property_type = request_data.get("property_type")
            gr_doc.property_subtype = request_data.get("property_subtype")
            gr_doc.location = request_data.get("location")
            gr_doc.property_subtype_option = request_data.get(
                "property_subtype_option")
            gr_doc.creation_via = "Website"
            gr_doc.min_area = request_data.get("min_area")
            gr_doc.max_area = request_data.get("max_area")
            gr_doc.min_budget = request_data.get("min_budget")
            gr_doc.max_budget = request_data.get("max_budget")
            gr_doc.unit_of_area = request_data.get("unit_of_area")
            gr_doc.city = request_data.get("city")
            gr_doc.status = "Active"
            gr_doc.save()
            return {
                "operation": "Create",
                "group_id": gr_doc.name,
                "message": "Group Created"
            }
        except frappe.MandatoryError, e:
            raise MandatoryError("Mandatory Field {0} missing".format(
                e.message))
        except (frappe.LinkValidationError, frappe.ValidationError) as e:
            raise InvalidDataError(e.message)
Beispiel #4
0
def create_alerts(request_data):
    request_data = json.loads(request_data)
    putil.validate_for_user_id_exists(request_data.get("user_id"))
    putil.validate_property_data(
        request_data, ["operation", "property_type", "property_subtype"])
    putil.init_for_location_or_city_creation(request_data)
    request_data["property_subtype_option"] = ','.join(
        request_data.get("property_subtype_option")) if request_data.get(
            "property_subtype_option") else " "
    alert_search_conditions = make_conditions_for_duplicate_group(
        request_data, "Alerts")
    alert_result = frappe.db.sql(
        """ select  name from `tabAlerts` {0} """.format(
            alert_search_conditions),
        as_dict=True)
    if alert_result:
        alert_result = [alert.get("name") for alert in alert_result if alert]
        raise DuplicateEntryError(
            "Alert {0} with same configuration already exists".format(
                ','.join(alert_result)))
    try:
        alrt = frappe.new_doc("Alerts")
        alrt.alert_title = request_data.get("alert_title")
        alrt.operation = request_data.get("operation")
        alrt.property_type = request_data.get("property_type")
        alrt.property_subtype = request_data.get("property_subtype")
        alrt.location = request_data.get("location")
        alrt.property_subtype_option = request_data.get(
            "property_subtype_option")
        alrt.creation_via = "Website"
        alrt.min_area = request_data.get("min_area")
        alrt.max_area = request_data.get("max_area")
        alrt.min_budget = request_data.get("min_budget")
        alrt.max_budget = request_data.get("max_budget")
        alrt.unit_of_area = request_data.get("unit_of_area")
        alrt.user_id = request_data.get("user_id")
        alrt.city = request_data.get("city")
        alrt.status = "Active"
        alrt.save()
        return {
            "operation": "Create",
            "alert_id": alrt.name,
            "message": "Alert Created"
        }
    except frappe.MandatoryError, e:
        raise MandatoryError("Mandatory Field {0} missing".format(e.message))
def search_property(data):
	
	property_data = json.loads(data)
	property_data = putil.validate_property_posting_data(property_data, "property_json/property_search.json")
	putil.init_for_location_or_city_creation(property_data)
	putil.convert_area_to_sqft_for_search(property_data)
	try:	
		
		# generate search query & result generation & list of fields which should be excluded.

		exclude_list = putil.get_exclude_list_for_search(property_data.get("request_source", ""))

		search_query = putil.generate_search_query(property_data)
		adv_search_query = search_query
		search_query = cstr(search_query)
		putil.generate_advance_search_query(adv_search_query, property_data)

		es = ElasticSearchController()
		response_data, total_records = es.search_document(["property"], adv_search_query, property_data.get("page_number",1), 
										property_data.get("records_per_page",40), exclude_list)
		
		# post property-search operation

		if not property_data.get("request_id"):	
			request_id = store_request_in_elastic_search(property_data, search_query, "Property Search", adv_search_query)
		if property_data.get("user_id") != "Guest":				
			response_data = check_for_shortlisted_property(response_data,property_data.get("user_id"))
		response_data = putil.get_date_diff_and_count_from_posting(response_data)
		putil.convert_area_according_to_uom(response_data, property_data.get("unit_of_area", "Sq.Ft."))
		putil.show_amenities_with_yes_status(response_data)
		
		# response data & pagination logic

		msg = "Property found for specfied criteria" if len(response_data) else "Property not found"
		response_dict = putil.init_pagination_and_response_generatrion(property_data, response_data, msg, total_records)
		response_dict["request_id"] = property_data.get("request_id") if property_data.get("request_id") else request_id 
		return response_dict

	except elasticsearch.RequestError,e:
		raise ElasticInvalidInputFormatError(e.error)
Beispiel #6
0
def search_project(request_data):
	if request_data:
		project_data = json.loads(request_data)
		project_data = putil.validate_property_posting_data(project_data,"property_json/project_search.json")
		putil.init_for_location_or_city_creation(project_data)
		search_query = putil.generate_project_search_query(project_data)
		try:
			project_fields = get_project_include_fields(project_data.get("request_source", ""))
			exclude_list = putil.get_exclude_list_for_search(project_data.get("request_source", ""))

			es = ElasticSearchController()
			response_data, total_records = es.search_document(["project"], search_query, project_data.get("page_number",1), project_data.get("records_per_page",40), exclude_list, project_fields)
			if not project_data.get("request_id"):	
				request_id = store_request_in_elastic_search(project_data, search_query, "Project Search")
			response_data = putil.get_date_diff_and_count_from_posting(response_data)
			putil.show_amenities_with_yes_status(response_data)
			# property_subtype_option = project_data.get("property_subtype_option","") 
			# get_valid_property_subtype_option(response_data, property_subtype_option) if property_subtype_option else ""


			response_msg = "Project found for specfied criteria" if len(response_data) else "Project not found"
			from_record = (project_data.get("page_number",1) - 1) * cint(project_data.get("records_per_page",40)) + 1
			no_of_pages = math.ceil(flt(total_records)/project_data.get("records_per_page",40))
			to_record = from_record +  len(response_data) - 1 if response_data else from_record + project_data.get("records_per_page",40) - 1
			return {	
						"operation":"Search",
						 "message":response_msg ,
						 "total_records":total_records, 
						 "request_id":project_data.get("request_id") if project_data.get("request_id") else request_id, 
						 "records_per_page":project_data.get("records_per_page",40),
						 "from_record":from_record ,
						 "to_record":to_record,
						 "data":response_data, 
						 "user_id":project_data.get("user_id"), 
						 "no_of_pages":no_of_pages
					 }
		except elasticsearch.RequestError,e:
			raise ElasticInvalidInputFormatError(e.error)
		except elasticsearch.ElasticsearchException,e:
			raise ElasticSearchException(e.error)
def search_property(data):
	
	property_data = json.loads(data)
	property_data = putil.validate_property_posting_data(property_data, "property_json/property_search.json")
	putil.init_for_location_or_city_creation(property_data)
	putil.convert_area_to_sqft_for_search(property_data)
	try:	
		
		# generate search query & result generation & list of fields which should be excluded.

		exclude_list = putil.get_exclude_list_for_search(property_data.get("request_source", ""))

		search_query = putil.generate_search_query(property_data)
		adv_search_query = search_query
		search_query = cstr(search_query)
		putil.generate_advance_search_query(adv_search_query, property_data)

		es = ElasticSearchController()
		response_data, total_records = es.search_document(["property"], adv_search_query, property_data.get("page_number",1), 
										property_data.get("records_per_page",40), exclude_list)
		
		# post property-search operation

		if not property_data.get("request_id"):	
			request_id = store_request_in_elastic_search(property_data, search_query, "Property Search", adv_search_query)
		if property_data.get("user_id") != "Guest":				
			response_data = check_for_shortlisted_property(response_data,property_data.get("user_id"))
		response_data = putil.get_date_diff_and_count_from_posting(response_data)
		putil.convert_area_according_to_uom(response_data, property_data.get("unit_of_area", "Sq.Ft."))
		putil.show_amenities_with_yes_status(response_data)
		
		# response data & pagination logic

		msg = "Property found for specfied criteria" if len(response_data) else "Property not found"
		response_dict = putil.init_pagination_and_response_generatrion(property_data, response_data, msg, total_records)
		response_dict["request_id"] = property_data.get("request_id") if property_data.get("request_id") else request_id 
		return response_dict

	except elasticsearch.RequestError,e:
		raise ElasticInvalidInputFormatError(e.error)