From 5e0b0b4b971e692efd35f9fb866f0599ab404698 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 20 Oct 2015 16:27:16 +0530 Subject: [PATCH] [enhance] make PO from SO if supplier is specified --- .../doctype/sales_invoice/sales_invoice.py | 2 +- .../sales_invoice_item/sales_invoice_item.json | 7 ++++--- erpnext/controllers/status_updater.py | 2 +- erpnext/selling/doctype/sales_order/sales_order.py | 14 ++++++++++++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 60fdc1a710..11cd5d8073 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -668,7 +668,7 @@ def make_delivery_note(source_name, target_doc=None): "so_detail": "so_detail" }, "postprocess": update_item, - "condition": lambda doc: doc.is_drop_ship!=1 + "condition": lambda doc: (doc.is_drop_ship!=1 and not doc.supplier) }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json index c8a65f5995..44f69cb923 100644 --- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json +++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json @@ -683,7 +683,8 @@ { "allow_on_submit": 0, "bold": 0, - "collapsible": 0, + "collapsible": 1, + "collapsible_depends_on": "eval:doc.is_drop_ship==1", "fieldname": "drop_ship", "fieldtype": "Section Break", "hidden": 0, @@ -1370,8 +1371,8 @@ "is_submittable": 0, "issingle": 0, "istable": 1, - "modified": "2015-10-19 03:04:52.093181", - "modified_by": "Administrator", + "modified": "2015-10-20 15:54:03.318846", + "modified_by": "saurabh6790@gmail.com", "module": "Accounts", "name": "Sales Invoice Item", "owner": "Administrator", diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 0861f37f5b..f7a0939444 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -221,7 +221,7 @@ class StatusUpdater(Document): else: if self.doctype=="Delivery Note": - args["drop_ship_cond"] = " and is_drop_ship!=1 " + args["drop_ship_cond"] = " and is_drop_ship!=1 and supplier = '' " for name in unique_transactions: if not name: diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 69ec248dd9..630494a6cf 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -31,6 +31,7 @@ class SalesOrder(SellingController): self.validate_uom_is_integer("stock_uom", "qty") self.validate_for_items() self.validate_warehouse() + self.validate_drop_ship() from erpnext.stock.doctype.packed_item.packed_item import make_packing_list make_packing_list(self) @@ -147,6 +148,11 @@ class SalesOrder(SellingController): doc.set_status(update=True) doc.update_opportunity() + def validate_drop_ship(self): + for d in self.get('items'): + if d.is_drop_ship and not d.supplier: + frappe.throw(_("#{0} Set Supplier for item {1}").format(d.idx, d.item_code)) + def on_submit(self): super(SalesOrder, self).on_submit() @@ -252,6 +258,9 @@ class SalesOrder(SellingController): def on_update(self): pass + + def before_update_after_submit(self): + self.validate_drop_ship() def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context @@ -350,7 +359,7 @@ def make_delivery_note(source_name, target_doc=None): "parent": "against_sales_order", }, "postprocess": update_item, - "condition": lambda doc: doc.delivered_qty < doc.qty and doc.is_drop_ship!=1 + "condition": lambda doc: doc.delivered_qty < doc.qty and (doc.is_drop_ship!=1 and not doc.supplier) }, "Sales Taxes and Charges": { "doctype": "Sales Taxes and Charges", @@ -378,6 +387,7 @@ def make_sales_invoice(source_name, target_doc=None): target.run_method("calculate_taxes_and_totals") def update_item(source, target, source_parent): + target.supplier = source.supplier target.amount = flt(source.amount) - flt(source.billed_amt) target.base_amount = target.amount * flt(source_parent.conversion_rate) target.qty = target.amount / flt(source.rate) if (source.rate and source.billed_amt) else source.qty @@ -538,7 +548,7 @@ def make_drop_shipment(source_name, for_supplier, target_doc=None): ["delivery_date", "schedule_date"] ], "postprocess": update_item, - "condition": lambda doc: doc.ordered_qty < doc.qty and doc.is_drop_ship==1 and doc.supplier == for_supplier + "condition": lambda doc: doc.ordered_qty < doc.qty and doc.supplier == for_supplier or (doc.is_drop_ship==1 and doc.supplier == for_supplier) }, "Sales Taxes and Charges": { "doctype": "Purchase Taxes and Charges",