47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors
 | |
| # See license.txt
 | |
| 
 | |
| 
 | |
| import frappe
 | |
| from frappe import _
 | |
| from frappe.utils.bot import BotParser
 | |
| 
 | |
| 
 | |
| class FindItemBot(BotParser):
 | |
| 	def get_reply(self):
 | |
| 		if self.startswith("where is", "find item", "locate"):
 | |
| 			if not frappe.has_permission("Warehouse"):
 | |
| 				raise frappe.PermissionError
 | |
| 
 | |
| 			item = "%{0}%".format(self.strip_words(self.query, "where is", "find item", "locate"))
 | |
| 			items = frappe.db.sql(
 | |
| 				"""select name from `tabItem` where item_code like %(txt)s
 | |
| 				or item_name like %(txt)s or description like %(txt)s""",
 | |
| 				dict(txt=item),
 | |
| 			)
 | |
| 
 | |
| 			if items:
 | |
| 				out = []
 | |
| 				warehouses = frappe.get_all("Warehouse")
 | |
| 				for item in items:
 | |
| 					found = False
 | |
| 					for warehouse in warehouses:
 | |
| 						qty = frappe.db.get_value(
 | |
| 							"Bin", {"item_code": item[0], "warehouse": warehouse.name}, "actual_qty"
 | |
| 						)
 | |
| 						if qty:
 | |
| 							out.append(
 | |
| 								_("{0} units of [{1}](/app/Form/Item/{1}) found in [{2}](/app/Form/Warehouse/{2})").format(
 | |
| 									qty, item[0], warehouse.name
 | |
| 								)
 | |
| 							)
 | |
| 							found = True
 | |
| 
 | |
| 					if not found:
 | |
| 						out.append(_("[{0}](/app/Form/Item/{0}) is out of stock").format(item[0]))
 | |
| 
 | |
| 				return "\n\n".join(out)
 | |
| 
 | |
| 			else:
 | |
| 				return _("Did not find any item called {0}").format(item)
 |