From 8f24ecb173d0f1b2618278c83caab1356bd79288 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Thu, 16 Jun 2016 18:01:58 +0530 Subject: [PATCH] [fix] set previous doc links for document flow --- .../purchase_invoice/purchase_invoice.py | 12 ++++++++++++ .../doctype/sales_invoice/sales_invoice.py | 12 ++++++++++++ .../doctype/purchase_order/purchase_order.py | 9 +++++++++ .../selling/doctype/sales_order/sales_order.py | 9 +++++++++ .../doctype/delivery_note/delivery_note.py | 9 +++++++++ .../purchase_receipt/purchase_receipt.py | 9 +++++++++ erpnext/utilities/transaction_base.py | 18 ++++++++++++++++++ 7 files changed, 78 insertions(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 71e9c420c04..ceba01ee372 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -663,6 +663,18 @@ class PurchaseInvoice(BuyingController): def on_recurring(self, reference_doc): self.due_date = None + + def get_link_filters(self, for_doctype): + self.prev_link_mapper = { + "Purchase Order": { + "fieldname": "purchase_order" + }, + "Purchase Receipt": { + "fieldname": "purchase_receipt" + } + } + + return super(PurchaseInvoice, self).get_link_filters(for_doctype) @frappe.whitelist() def make_debit_note(source_name, target_doc=None): diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 2584d407d56..377f9faea41 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -696,6 +696,18 @@ class SalesInvoice(SellingController): self.set(fieldname, reference_doc.get(fieldname)) self.due_date = None + + def get_link_filters(self, for_doctype): + self.prev_link_mapper = { + "Sales Order": { + "fieldname": "sales_order" + }, + "Delivery Note": { + "fieldname": "delivery_note" + } + } + + return super(SalesInvoice, self).get_link_filters(for_doctype) def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 61842363c34..49a44e99056 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -235,6 +235,15 @@ class PurchaseOrder(BuyingController): if item.delivered_by_supplier == 1: item.received_qty = item.qty + def get_link_filters(self, for_doctype): + self.prev_link_mapper = { + "Supplier Quotation": { + "fieldname": "supplier_quotation" + } + } + + return super(PurchaseOrder, self).get_link_filters(for_doctype) + @frappe.whitelist() def close_or_unclose_purchase_orders(names, status): if not frappe.has_permission("Purchase Order", "write"): diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 2e0a272ae56..63e307db30f 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -307,6 +307,15 @@ class SalesOrder(SellingController): self.set("delivery_date", get_next_date(reference_doc.delivery_date, mcount, cint(reference_doc.repeat_on_day_of_month))) + def get_link_filters(self, for_doctype): + self.prev_link_mapper = { + "Quotation": { + "fieldname": "prevdoc_docname" + } + } + + return super(SalesOrder, self).get_link_filters(for_doctype) + def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context list_context = get_list_context(context) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 6c6a3b3c97a..be6c7971e50 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -282,6 +282,15 @@ class DeliveryNote(SellingController): dn_doc.update_billing_percentage(update_modified=update_modified) self.load_from_db() + + def get_link_filters(self, for_doctype): + self.prev_link_mapper = { + "Sales Order": { + "fieldname": "against_sales_order" + } + } + + return super(DeliveryNote, self).get_link_filters(for_doctype) def update_billed_amount_based_on_so(so_detail, update_modified=True): # Billed against Sales Order directly diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 70cef3603a3..bfcecbde36d 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -333,6 +333,15 @@ class PurchaseReceipt(BuyingController): self.load_from_db() + def get_link_filters(self, for_doctype): + self.prev_link_mapper = { + "Purchase Order": { + "fieldname": "prevdoc_docname" + } + } + + return super(PurchaseReceipt, self).get_link_filters(for_doctype) + def update_billed_amount_based_on_po(po_detail, update_modified=True): # Billed against Sales Order directly billed_against_po = frappe.db.sql("""select sum(amount) from `tabPurchase Invoice Item` diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index d088f599adb..91055537b4d 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -107,6 +107,24 @@ class TransactionBase(StatusUpdater): frappe.throw(_("Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ") .format(d.idx, ref_dt, d.get(ref_dn_field), d.rate, ref_rate)) + def get_link_filters(self, for_doctype): + if self.prev_link_mapper.get(for_doctype): + fieldname = self.prev_link_mapper[for_doctype]["fieldname"] + + values = filter(None, tuple([item.as_dict()[fieldname] for item in self.items])) + + if values: + ret = { + for_doctype : { + "filters": [[for_doctype, "name", "in", values]] + } + } + else: + ret = None + else: + ret = None + + return ret def delete_events(ref_type, ref_name): frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent`