# Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors # See license.txt from __future__ import unicode_literals from frappe.utils.bot import BotParser import frappe from frappe import _ 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}](#Form/Item/{1}) found in [{2}](#Form/Warehouse/{2})').format(qty, item[0], warehouse.name)) found = True if not found: out.append(_('[{0}](#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))