Update sales_order.py

1. filter out the suppliers by which the dropship purchase order already created
2. allow create multi dropship draft purchase orders
This commit is contained in:
Fisher Yu
2018-07-27 23:45:23 +08:00
committed by Nabin Hait
parent 102bc7f5cf
commit 2e5c776293

View File

@@ -732,12 +732,12 @@ def get_events(start, end, filters=None):
@frappe.whitelist() @frappe.whitelist()
def make_purchase_order_for_drop_shipment(source_name, for_supplier, target_doc=None): def make_purchase_order_for_drop_shipment(source_name, for_supplier, target_doc=None):
def set_missing_values(source, target): def set_missing_values(source, target):
target.supplier = for_supplier target.supplier = supplier
target.apply_discount_on = "" target.apply_discount_on = ""
target.additional_discount_percentage = 0.0 target.additional_discount_percentage = 0.0
target.discount_amount = 0.0 target.discount_amount = 0.0
default_price_list = frappe.get_value("Supplier", for_supplier, "default_price_list") default_price_list = frappe.get_value("Supplier", supplier, "default_price_list")
if default_price_list: if default_price_list:
target.buying_price_list = default_price_list target.buying_price_list = default_price_list
@@ -767,41 +767,61 @@ def make_purchase_order_for_drop_shipment(source_name, for_supplier, target_doc=
target.stock_qty = (flt(source.qty) - flt(source.ordered_qty)) * flt(source.conversion_factor) target.stock_qty = (flt(source.qty) - flt(source.ordered_qty)) * flt(source.conversion_factor)
target.project = source_parent.project target.project = source_parent.project
doclist = get_mapped_doc("Sales Order", source_name, { suppliers =[]
"Sales Order": { if for_supplier:
"doctype": "Purchase Order", suppliers.append(for_supplier)
"field_no_map": [ else:
"address_display", sales_order = frappe.get_doc("Sales Order", source_name)
"contact_display", for item in sales_order.items:
"contact_mobile", if item.supplier and item.supplier not in suppliers:
"contact_email", suppliers.append(item.supplier)
"contact_person", for supplier in suppliers:
"taxes_and_charges" po =frappe.get_list("Purchase Order", filters={"sales_order":source_name, "supplier":supplier, "docstatus": ("<", "2")})
], if len(po) == 0:
"validation": { doc = get_mapped_doc("Sales Order", source_name, {
"docstatus": ["=", 1] "Sales Order": {
} "doctype": "Purchase Order",
}, "field_no_map": [
"Sales Order Item": { "address_display",
"doctype": "Purchase Order Item", "contact_display",
"field_map": [ "contact_mobile",
["name", "sales_order_item"], "contact_email",
["parent", "sales_order"], "contact_person",
["stock_uom", "stock_uom"], "taxes_and_charges"
["uom", "uom"], ],
["conversion_factor", "conversion_factor"], "validation": {
["delivery_date", "schedule_date"] "docstatus": ["=", 1]
], }
"field_no_map": [ },
"rate", "Sales Order Item": {
"price_list_rate" "doctype": "Purchase Order Item",
], "field_map": [
"postprocess": update_item, ["name", "sales_order_item"],
"condition": lambda doc: doc.ordered_qty < doc.qty and doc.supplier == for_supplier ["parent", "sales_order"],
} ["stock_uom", "stock_uom"],
}, target_doc, set_missing_values) ["uom", "uom"],
["conversion_factor", "conversion_factor"],
["delivery_date", "schedule_date"]
],
"field_no_map": [
"rate",
"price_list_rate"
],
"postprocess": update_item,
"condition": lambda doc: doc.ordered_qty < doc.qty and doc.supplier == supplier
}
}, target_doc, set_missing_values)
if not for_supplier:
doc.insert()
else:
suppliers =[]
if suppliers:
if not for_supplier:
frappe.db.commit()
return doc
else:
frappe.msgprint(_("PO already created for all sales order items"))
return doclist
@frappe.whitelist() @frappe.whitelist()
def get_supplier(doctype, txt, searchfield, start, page_len, filters): def get_supplier(doctype, txt, searchfield, start, page_len, filters):
@@ -817,6 +837,8 @@ def get_supplier(doctype, txt, searchfield, start, page_len, filters):
and ({key} like %(txt)s and ({key} like %(txt)s
or supplier_name like %(txt)s) or supplier_name like %(txt)s)
and name in (select supplier from `tabSales Order Item` where parent = %(parent)s) and name in (select supplier from `tabSales Order Item` where parent = %(parent)s)
and name not in (select supplier from `tabPurchase Order` po inner join `tabPurchase Order Item` poi
on po.name=poi.parent where po.docstatus<2 and poi.sales_order=%(parent)s)
order by order by
if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999),
if(locate(%(_txt)s, supplier_name), locate(%(_txt)s, supplier_name), 99999), if(locate(%(_txt)s, supplier_name), locate(%(_txt)s, supplier_name), 99999),