From cce16b29b05ccf7c5660c8184580a007c414bc71 Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Fri, 30 Sep 2016 17:19:10 +0530 Subject: [PATCH] Group similar items in PO --- .../purchase_order/purchase_order.json | 162 +++++++++++++++++- .../doctype/purchase_order/purchase_order.py | 24 +++ .../purchase_order/test_purchase_order.py | 31 ++++ 3 files changed, 216 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 923a3edf9b..8177b57e64 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -9,11 +9,13 @@ "docstatus": 0, "doctype": "DocType", "document_type": "Document", + "editable_grid": 0, "fields": [ { "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "supplier_section", "fieldtype": "Section Break", "hidden": 0, @@ -39,6 +41,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "default": "{supplier_name}", "fieldname": "title", "fieldtype": "Data", @@ -65,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "naming_series", "fieldtype": "Select", "hidden": 0, @@ -92,6 +96,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "supplier", "fieldtype": "Link", @@ -120,6 +125,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.supplier && doc.docstatus===0 && (!(doc.items && doc.items.length) || (doc.items.length==1 && !doc.items[0].item_code))", "fieldname": "get_items_from_open_material_requests", "fieldtype": "Button", @@ -146,6 +152,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "No", "fieldname": "is_subcontracted", "fieldtype": "Select", @@ -172,6 +179,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "fieldname": "supplier_name", "fieldtype": "Data", "hidden": 0, @@ -196,6 +204,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break1", "fieldtype": "Column Break", "hidden": 0, @@ -222,6 +231,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Today", "fieldname": "transaction_date", "fieldtype": "Date", @@ -249,6 +259,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "amended_from", "fieldtype": "Link", "hidden": 0, @@ -276,6 +287,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "company", "fieldtype": "Link", @@ -305,6 +317,7 @@ "bold": 0, "collapsible": 0, "collapsible_depends_on": "", + "columns": 0, "fieldname": "drop_ship", "fieldtype": "Section Break", "hidden": 0, @@ -330,6 +343,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "customer", "fieldtype": "Link", @@ -357,6 +371,7 @@ "allow_on_submit": 0, "bold": 1, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "customer_name", "fieldtype": "Data", @@ -383,6 +398,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_19", "fieldtype": "Column Break", "hidden": 0, @@ -407,6 +423,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "customer_contact_person", "fieldtype": "Link", @@ -434,6 +451,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_contact_display", "fieldtype": "Small Text", "hidden": 1, @@ -459,6 +477,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_contact_mobile", "fieldtype": "Small Text", "hidden": 1, @@ -484,6 +503,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "customer_contact_email", "fieldtype": "Code", "hidden": 1, @@ -510,6 +530,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "section_addresses", "fieldtype": "Section Break", "hidden": 0, @@ -535,6 +556,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "supplier_address", "fieldtype": "Link", "hidden": 0, @@ -560,6 +582,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_person", "fieldtype": "Link", "hidden": 0, @@ -585,6 +608,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "address_display", "fieldtype": "Small Text", @@ -610,6 +634,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_display", "fieldtype": "Small Text", "hidden": 0, @@ -634,6 +659,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_mobile", "fieldtype": "Small Text", "hidden": 0, @@ -658,6 +684,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "contact_email", "fieldtype": "Small Text", "hidden": 0, @@ -682,6 +709,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "col_break_address", "fieldtype": "Column Break", "hidden": 0, @@ -706,6 +734,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "", "fieldname": "shipping_address", "fieldtype": "Link", @@ -733,6 +762,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "shipping_address_display", "fieldtype": "Small Text", "hidden": 0, @@ -758,6 +788,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "currency_and_price_list", "fieldtype": "Section Break", "hidden": 0, @@ -783,6 +814,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "currency", "fieldtype": "Link", "hidden": 0, @@ -810,6 +842,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "conversion_rate", "fieldtype": "Float", @@ -838,6 +871,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "cb_price_list", "fieldtype": "Column Break", "hidden": 0, @@ -861,6 +895,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "buying_price_list", "fieldtype": "Link", "hidden": 0, @@ -886,6 +921,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "price_list_currency", "fieldtype": "Link", "hidden": 0, @@ -911,6 +947,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "plc_conversion_rate", "fieldtype": "Float", "hidden": 0, @@ -936,6 +973,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "ignore_pricing_rule", "fieldtype": "Check", "hidden": 0, @@ -960,6 +998,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items_section", "fieldtype": "Section Break", "hidden": 0, @@ -986,6 +1025,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "items", "fieldtype": "Table", "hidden": 0, @@ -1013,6 +1053,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.docstatus===0 && (doc.items && doc.items.length)", "fieldname": "get_last_purchase_rate", "fieldtype": "Button", @@ -1039,6 +1080,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "sb_last_purchase", "fieldtype": "Section Break", "hidden": 0, @@ -1062,6 +1104,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total", "fieldtype": "Currency", "hidden": 0, @@ -1088,6 +1131,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_net_total", "fieldtype": "Currency", "hidden": 0, @@ -1115,6 +1159,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_26", "fieldtype": "Column Break", "hidden": 0, @@ -1138,6 +1183,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total", "fieldtype": "Currency", "hidden": 0, @@ -1164,6 +1210,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "net_total", "fieldtype": "Currency", "hidden": 0, @@ -1191,6 +1238,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_section", "fieldtype": "Section Break", "hidden": 0, @@ -1217,6 +1265,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "taxes_and_charges", "fieldtype": "Link", @@ -1245,6 +1294,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes", "fieldtype": "Table", "hidden": 0, @@ -1272,6 +1322,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "other_charges_calculation", "fieldtype": "HTML", "hidden": 0, @@ -1297,6 +1348,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "totals", "fieldtype": "Section Break", "hidden": 0, @@ -1323,6 +1375,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_taxes_and_charges_added", "fieldtype": "Currency", "hidden": 0, @@ -1350,6 +1403,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_taxes_and_charges_deducted", "fieldtype": "Currency", "hidden": 0, @@ -1377,6 +1431,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1404,6 +1459,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_39", "fieldtype": "Column Break", "hidden": 0, @@ -1428,6 +1484,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_and_charges_added", "fieldtype": "Currency", "hidden": 0, @@ -1455,6 +1512,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "taxes_and_charges_deducted", "fieldtype": "Currency", "hidden": 0, @@ -1482,6 +1540,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "total_taxes_and_charges", "fieldtype": "Currency", "hidden": 0, @@ -1509,6 +1568,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "discount_amount", + "columns": 0, "fieldname": "discount_section", "fieldtype": "Section Break", "hidden": 0, @@ -1534,6 +1594,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Grand Total", "fieldname": "apply_discount_on", "fieldtype": "Select", @@ -1561,6 +1622,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1587,6 +1649,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_45", "fieldtype": "Column Break", "hidden": 0, @@ -1611,6 +1674,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "additional_discount_percentage", "fieldtype": "Float", "hidden": 0, @@ -1636,6 +1700,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "discount_amount", "fieldtype": "Currency", "hidden": 0, @@ -1662,6 +1727,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "totals_section", "fieldtype": "Section Break", "hidden": 0, @@ -1686,6 +1752,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1713,6 +1780,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "In Words will be visible once you save the Purchase Order.", "fieldname": "base_in_words", "fieldtype": "Data", @@ -1740,6 +1808,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "base_rounded_total", "fieldtype": "Currency", "hidden": 0, @@ -1767,6 +1836,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break4", "fieldtype": "Column Break", "hidden": 0, @@ -1791,6 +1861,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "grand_total", "fieldtype": "Currency", "hidden": 0, @@ -1818,6 +1889,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "in_words", "fieldtype": "Data", "hidden": 0, @@ -1844,6 +1916,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "advance_paid", "fieldtype": "Currency", "hidden": 0, @@ -1870,6 +1943,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "terms", + "columns": 0, "fieldname": "terms_section_break", "fieldtype": "Section Break", "hidden": 0, @@ -1896,6 +1970,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "tc_name", "fieldtype": "Link", "hidden": 0, @@ -1923,6 +1998,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "terms", "fieldtype": "Text Editor", "hidden": 0, @@ -1949,6 +2025,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "more_info", "fieldtype": "Section Break", "hidden": 0, @@ -1974,6 +2051,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Select", @@ -2002,6 +2080,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "ref_sq", "fieldtype": "Data", "hidden": 1, @@ -2028,6 +2107,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "party_account_currency", "fieldtype": "Link", "hidden": 1, @@ -2054,6 +2134,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_74", "fieldtype": "Column Break", "hidden": 0, @@ -2078,6 +2159,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.__islocal", "description": "", "fieldname": "per_received", @@ -2106,6 +2188,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:!doc.__islocal", "description": "", "fieldname": "per_billed", @@ -2134,6 +2217,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, + "columns": 0, "fieldname": "column_break5", "fieldtype": "Section Break", "hidden": 0, @@ -2161,6 +2245,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "letter_head", "fieldtype": "Link", "hidden": 0, @@ -2188,6 +2273,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "select_print_heading", "fieldtype": "Link", "hidden": 0, @@ -2215,6 +2301,59 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, + "fieldname": "column_break_86", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "group_same_items", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Group same items", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, "default": "", "fieldname": "language", "fieldtype": "Data", @@ -2243,6 +2382,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "supplied_items", + "columns": 0, "description": "", "fieldname": "raw_material_details", "fieldtype": "Section Break", @@ -2270,6 +2410,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "supplied_items", "fieldtype": "Table", "hidden": 0, @@ -2298,6 +2439,7 @@ "bold": 0, "collapsible": 1, "collapsible_depends_on": "is_recurring", + "columns": 0, "fieldname": "recurring_order", "fieldtype": "Section Break", "hidden": 0, @@ -2323,6 +2465,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break", "fieldtype": "Column Break", "hidden": 0, @@ -2347,6 +2490,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.docstatus<2", "description": "", "fieldname": "is_recurring", @@ -2373,6 +2517,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "recurring_id", @@ -2400,6 +2545,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "recurring_type", @@ -2427,6 +2573,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "repeat_on_day_of_month", @@ -2453,6 +2600,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "end_date", @@ -2479,6 +2627,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "fieldname": "submit_on_creation", "fieldtype": "Check", @@ -2505,6 +2654,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.recurring_id === doc.name", "description": "", "fieldname": "notify_by_email", @@ -2532,6 +2682,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.notify_by_email && doc.recurring_id === doc.name", "description": "", "fieldname": "notification_email_address", @@ -2559,6 +2710,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "eval:doc.is_recurring && doc.notify_by_email && doc.recurring_id === doc.name", "fieldname": "recurring_print_format", "fieldtype": "Link", @@ -2586,6 +2738,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break83", "fieldtype": "Column Break", "hidden": 0, @@ -2610,6 +2763,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "from_date", @@ -2636,6 +2790,7 @@ "allow_on_submit": 1, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "to_date", @@ -2662,6 +2817,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "depends_on": "is_recurring", "description": "", "fieldname": "next_date", @@ -2696,7 +2852,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-07-07 11:32:05.248626", + "modified": "2016-10-20 03:07:24.683178", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", @@ -2712,6 +2868,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 0, "print": 0, "read": 1, @@ -2732,6 +2889,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -2752,6 +2910,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, @@ -2772,6 +2931,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 1, "print": 0, "read": 1, diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 3230cd0f4a..54ca07b5dc 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -155,6 +155,30 @@ class PurchaseOrder(BuyingController): if date_diff and date_diff[0][0]: msgprint(_("{0} {1} has been modified. Please refresh.").format(self.doctype, self.name), raise_exception=True) + + def before_print(self): + if self.get("group_same_items"): + + group_item_qty = {} + group_item_amount = {} + + for item in self.items: + group_item_qty[item.item_code] = group_item_qty.get(item.item_code, 0) + item.qty + group_item_amount[item.item_code] = group_item_amount.get(item.item_code, 0) + item.amount + + duplicate_list = [] + + for item in self.items: + if item.item_code in group_item_qty: + item.qty = group_item_qty[item.item_code] + item.amount = group_item_amount[item.item_code] + del group_item_qty[item.item_code] + else: + duplicate_list.append(item) + + for item in duplicate_list: + self.remove(item) + def update_status(self, status): self.check_modified_date() diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index c24bcdcd92..d4a0d0737d 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -110,6 +110,37 @@ class TestPurchaseOrder(unittest.TestCase): po.update_status("Closed") self.assertEquals(get_ordered_qty(item_code="_Test Item", warehouse="_Test Warehouse - _TC"), existing_ordered_qty) + + def test_group_same_items(self): + frappe.get_doc({ + "doctype": "Purchase Order", + "company": "_Test Company", + "supplier" : "_Test Supplier", + "is_subcontracted" : "No", + "currency" : frappe.db.get_value("Company", "_Test Company", "default_currency"), + "conversion_factor" : 1, + "items" : get_same_items(), + "group_same_items": 1 + }).insert() + + +def get_same_items(): + return [ + { + "item_code": "_Test FG Item", + "warehouse": "_Test Warehouse - _TC", + "qty": 1, + "rate": 500, + "schedule_date": add_days(nowdate(), 1) + }, + { + "item_code": "_Test FG Item", + "warehouse": "_Test Warehouse - _TC", + "qty": 4, + "rate": 500, + "schedule_date": add_days(nowdate(), 1) + } + ] def create_purchase_order(**args): po = frappe.new_doc("Purchase Order")