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)
|