diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 6ea06aeae1fb..c3501b7549b6 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -503,7 +503,7 @@ def on_submit(self): self.process_fixed_asset() self.update_fixed_asset(field) - if self.doctype in ['Purchase Order', 'Purchase Receipt']: + if self.doctype in ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']: update_last_purchase_rate(self, is_submit = 1) def on_cancel(self): @@ -512,7 +512,7 @@ def on_cancel(self): if self.get('is_return'): return - if self.doctype in ['Purchase Order', 'Purchase Receipt']: + if self.doctype in ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']: update_last_purchase_rate(self, is_submit = 0) if self.doctype in ['Purchase Receipt', 'Purchase Invoice']: diff --git a/erpnext/patches.txt b/erpnext/patches.txt index cf4b4be25b97..78b7e60b3725 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -367,4 +367,5 @@ erpnext.patches.v13_0.remove_old_hr_domains erpnext.patches.v13_0.release_1_8 erpnext.patches.v13_0.release_1_9 erpnext.patches.v13_0.naming_series_subs -erpnext.patches.v13_0.naming_series_subs_2 \ No newline at end of file +erpnext.patches.v13_0.naming_series_subs_2 +erpnext.patches.v13_0.update_last_purchase_rate \ No newline at end of file diff --git a/erpnext/patches/v13_0/update_last_purchase_rate.py b/erpnext/patches/v13_0/update_last_purchase_rate.py new file mode 100644 index 000000000000..825a6049e770 --- /dev/null +++ b/erpnext/patches/v13_0/update_last_purchase_rate.py @@ -0,0 +1,20 @@ +import frappe +from frappe.utils import flt + + +def execute(): + for item in frappe.get_all("Item", pluck="name"): + last_purchase_invoice = frappe.db.get_value( + "Purchase Invoice Item", + {"item_code": item}, + "name", + order_by="creation desc", + ) + last_purchase_rate = None + if last_purchase_invoice: + d = frappe.get_doc("Purchase Invoice Item", last_purchase_invoice) + if flt(d.conversion_factor): + last_purchase_rate = flt(d.base_net_rate) / flt(d.conversion_factor) + + frappe.db.set_value('Item', d.item_code, 'last_purchase_rate', flt(last_purchase_rate)) + frappe.db.commit() \ No newline at end of file diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index fd87403f98d2..3fa9b4798fb1 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -859,7 +859,21 @@ def get_last_purchase_details(item_code, doc_name=None, conversion_rate=1.0): purchase_date = purchase_receipt_date else: - return frappe._dict() + last_purchase_invoice = frappe.db.sql("""\ + select pi.name, pi.posting_date, pi.posting_time, pi.conversion_rate, + pi_item.conversion_factor, pi_item.base_price_list_rate, pi_item.discount_percentage, + pi_item.base_rate, pi_item.base_net_rate + from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item + where pi.docstatus = 1 and pi_item.item_code = %s and pi.name != %s and + pi.name = pi_item.parent + order by pi.posting_date desc, pi.posting_time desc, pi.name desc + limit 1""", (item_code, cstr(doc_name)), as_dict=1) + + if last_purchase_invoice: + last_purchase = last_purchase_invoice[0] + purchase_date = getdate(last_purchase.posting_date) + else: + return frappe._dict() conversion_factor = flt(last_purchase.conversion_factor) out = frappe._dict({