def get_alerts_based_on_alert_doctype(alert):
	
	"""
		Generate search query from alert set by user &
		check for properties which are posted after creation date of alert only.  
	"""

	uom = alert[0].get("unit_of_area")
	alert[0]["unit_of_area"] = "Sq.Ft." if uom not in ["Sq.Ft.", "Acres", "Hectares"] else uom
	putil.convert_area_to_sqft_for_search(alert[0])
	property_search_query = putil.generate_search_query(alert[0])
	new_query = property_search_query.get("query").get("bool").get("must")
	new_query.append({
					    "range" : {
					        "modified_datetime" : {
					            "gte": alert[0].get("creation").strftime("%Y-%m-%d %H:%M:%S"),
					        }
					    }
					})
	property_search_query["query"]["bool"]["must"] = new_query
	return property_search_query, alert[0].get("unit_of_area")
def get_alerts_based_on_alert_doctype(alert):
	
	"""
		Generate search query from alert set by user &
		check for properties which are posted after creation date of alert only.  
	"""

	uom = alert[0].get("unit_of_area")
	alert[0]["unit_of_area"] = "Sq.Ft." if uom not in ["Sq.Ft.", "Acres", "Hectares"] else uom
	putil.convert_area_to_sqft_for_search(alert[0])
	property_search_query = putil.generate_search_query(alert[0])
	new_query = property_search_query.get("query").get("bool").get("must")
	new_query.append({
					    "range" : {
					        "modified_datetime" : {
					            "gte": alert[0].get("creation").strftime("%Y-%m-%d %H:%M:%S"),
					        }
					    }
					})
	property_search_query["query"]["bool"]["must"] = new_query
	return property_search_query, alert[0].get("unit_of_area")
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)
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)