mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 07:54:46 +00:00
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:
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user