def get_alerts(request_data):
	if request_data:
		request_data = json.loads(request_data)
		email = putil.validate_for_user_id_exists(request_data.get("user_id"))
		alert = frappe.db.sql("select * from `tabAlerts` where user_id='{0}' order by creation desc limit 1".format(request_data.get("user_id")),as_dict=1)
		try:
			if alert:
				property_search_query = putil.generate_search_query(alert[0])
				new_query = property_search_query.get("query").get("bool").get("must")
				new_query.append({
								    "range" : {
								        "posted_datetime" : {
								            "gte": alert[0].get("creation").strftime("%Y-%m-%d %H:%M:%S"),
								        }
								    }
								})
				property_search_query["query"]["bool"]["must"] = new_query
			else:
				search_query = {	
									"sort": [{ "posted_datetime": { "order": "desc" }}],
									"query":{ "bool":{ "must":[ {"match":{ "user_id":request_data.get("user_id")  } } ] }    } 
								}						
				es = ElasticSearchController()
				response_data, total_records = es.search_document(["request"], search_query, 1, 1)
				if response_data:
					last_month_date = add_months(datetime.datetime.now() ,-1).strftime("%Y-%m-%d %H:%M:%S")
					property_search_query = response_data[0].get("search_query")
					property_search_query = ast.literal_eval(property_search_query.encode("utf8"))
					new_query = property_search_query.get("query").get("bool").get("must")
					new_query.append({
										    "range" : {
										        "posted_datetime" : {
										            "gte":last_month_date,
										        }
										    }
										})
					property_search_query["query"]["bool"]["must"] = new_query
				else:
					raise OperationFailed("No Alerts and Request Id found against User {0}".format(email))
			es = ElasticSearchController()
			response_data, total_records = es.search_document(["property"], property_search_query, request_data.get("page_number",1), request_data.get("records_per_page",40))
			from_record =  ((request_data.get("page_number",1) - 1) * cint(request_data.get("records_per_page",40)) + 1 )
			response_msg = "Property Found" if response_data else "Property not found"
			no_of_pages = math.ceil(flt(total_records)/request_data.get("records_per_page",40))
			return {"operation":"Search", "message":response_msg ,"total_records":total_records,"records_per_page":request_data.get("records_per_page",40),"from_record":from_record ,"to_record": from_record +  len(response_data) - 1 if response_data else from_record + request_data.get("records_per_page",40) - 1 ,"data":response_data, "user_id":request_data.get("user_id"), "no_of_pages":no_of_pages}
		except elasticsearch.ElasticsearchException,e:
			raise ElasticSearchException(e.error)
		except Exception,e:
			raise e
Esempio n. 2
0
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):
	if data:
		old_property_data = json.loads(data)
		property_data = putil.validate_property_posting_data(old_property_data,"property_json/property_search.json")
		putil.isolate_city_from_location(property_data)
		try:	
			search_query = putil.generate_search_query(property_data)
			es = ElasticSearchController()
			response_data, total_records = es.search_document(["property"], search_query, old_property_data.get("page_number",1), old_property_data.get("records_per_page",40))
			request_id = store_request_in_elastic_search(property_data, search_query, "Property Search")
			if old_property_data.get("user_id") != "Guest":				
				response_data = check_for_shortlisted_property(response_data,old_property_data.get("user_id"))
			response_data = putil.get_date_diff_from_posting(response_data)
			response_msg = "Property found for specfied criteria" if len(response_data) else "Property not found"
			from_record = (old_property_data.get("page_number",1) - 1) * cint(old_property_data.get("records_per_page",40)) + 1
			no_of_pages = math.ceil(flt(total_records)/old_property_data.get("records_per_page",40))
			return {"operation":"Search", "message":response_msg ,"total_records":total_records, "request_id":request_id, "records_per_page":old_property_data.get("records_per_page",40),"from_record":from_record ,"to_record":from_record +  len(response_data) - 1 if response_data else from_record + old_property_data.get("records_per_page",40) - 1,"data":response_data, "user_id":old_property_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 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")
Esempio n. 5
0
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)