From 3353b5ee627d6253680e8a715bf5ff1526daa8ec Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 19 Jan 2016 17:26:49 +0530 Subject: [PATCH 01/15] Added material request type Manufacture --- erpnext/stock/doctype/material_request/material_request.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/material_request/material_request.json b/erpnext/stock/doctype/material_request/material_request.json index 41b667291d6..723452255d3 100644 --- a/erpnext/stock/doctype/material_request/material_request.json +++ b/erpnext/stock/doctype/material_request/material_request.json @@ -70,7 +70,7 @@ "label": "Type", "length": 0, "no_copy": 0, - "options": "Purchase\nMaterial Transfer\nMaterial Issue", + "options": "Purchase\nMaterial Transfer\nMaterial Issue\nManufacture", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -554,7 +554,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2015-12-01 00:49:28.148834", + "modified": "2016-01-19 06:56:12.592797", "modified_by": "Administrator", "module": "Stock", "name": "Material Request", From 966e5643c9d94e709fa3d139567fab17b9268cda Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 21 Jan 2016 16:00:46 +0530 Subject: [PATCH 02/15] Added Material Request Link to Production Order --- .../production_order/production_order.json | 77 +++++++++++++++++-- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index ee39e049310..997a6179e02 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -24,6 +24,7 @@ "options": "icon-gift", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -48,6 +49,7 @@ "options": "PRO-", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -75,6 +77,7 @@ "options": "\nDraft\nSubmitted\nStopped\nIn Process\nCompleted\nCancelled", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 1, @@ -100,6 +103,7 @@ "options": "Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -127,6 +131,7 @@ "options": "BOM", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -151,6 +156,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -173,6 +179,7 @@ "oldfieldtype": "Column Break", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -199,6 +206,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -225,6 +233,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -252,6 +261,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -275,6 +285,7 @@ "options": "icon-building", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -298,6 +309,7 @@ "options": "Warehouse", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -319,6 +331,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -344,6 +357,7 @@ "options": "Warehouse", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -368,6 +382,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -391,6 +406,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -415,6 +431,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -438,6 +455,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -460,6 +478,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -483,6 +502,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -506,6 +526,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -531,6 +552,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -556,6 +578,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -581,6 +604,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -605,6 +629,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -629,6 +654,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -653,6 +679,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -675,6 +702,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -699,6 +727,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -722,6 +751,7 @@ "options": "icon-file-text", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -744,6 +774,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -770,6 +801,7 @@ "options": "UOM", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -777,6 +809,32 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "oldfieldname": "company", + "oldfieldtype": "Link", + "options": "Company", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -791,6 +849,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -817,6 +876,7 @@ "options": "Project", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -841,6 +901,7 @@ "options": "Sales Order", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -852,23 +913,24 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "company", + "description": "Manufacture against Material Request", + "fieldname": "material_request", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Company", + "label": "Material Request", "length": 0, "no_copy": 0, - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", + "options": "Material Request", "permlevel": 0, + "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -891,6 +953,7 @@ "options": "Production Order", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -909,7 +972,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2015-11-16 06:29:52.334735", + "modified": "2016-01-21 04:30:33.561347", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Order", From cc23bc054978a7b0ba137fa1edc04654e636f065 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 21 Jan 2016 16:01:17 +0530 Subject: [PATCH 03/15] Removed Material Request type validation --- erpnext/stock/doctype/material_request/material_request.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 6f6f78e2a03..bd1f4d9c276 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -70,9 +70,7 @@ class MaterialRequest(BuyingController): from erpnext.controllers.status_updater import validate_status validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"]) - - self.validate_value("material_request_type", "in", ["Purchase", "Material Transfer", "Material Issue"]) - + pc_obj = frappe.get_doc('Purchase Common') pc_obj.validate_for_items(self) From 9739dc3639545c2816e8a6785111883e40780b85 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Wed, 27 Jan 2016 12:19:51 +0530 Subject: [PATCH 04/15] Added make Production Order button against Material Request --- .../production_order/production_order.js | 18 +++--- .../material_request/material_request.js | 64 ++++++++++++++++++- .../material_request/material_request.py | 20 ++++++ 3 files changed, 93 insertions(+), 9 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js index ad8b7760c32..399d576a6bc 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.js +++ b/erpnext/manufacturing/doctype/production_order/production_order.js @@ -139,16 +139,18 @@ erpnext.production_order = { }, set_default_warehouse: function(frm) { - frappe.call({ - method: "erpnext.manufacturing.doctype.production_order.production_order.get_default_warehouse", + if (!(frm.doc.wip_warehouse || frm.doc.fg_warehouse)) { + frappe.call({ + method: "erpnext.manufacturing.doctype.production_order.production_order.get_default_warehouse", - callback: function(r) { - if(!r.exe) { - frm.set_value("wip_warehouse", r.message.wip_warehouse); - frm.set_value("fg_warehouse", r.message.fg_warehouse) + callback: function(r) { + if(!r.exe) { + frm.set_value("wip_warehouse", r.message.wip_warehouse); + frm.set_value("fg_warehouse", r.message.fg_warehouse) + } } - } - }); + }); + } } } diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 922eb5a4352..29968d8d68b 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -52,7 +52,11 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten if(doc.material_request_type === "Purchase") cur_frm.add_custom_button(__("Supplier Quotation"), this.make_supplier_quotation, __("Make")); - + + if(doc.material_request_type === "Manufacture" && doc.status === "Submitted") + cur_frm.add_custom_button(__("Production Order"), + this.make_production_order, __("Make")); + cur_frm.page.set_inner_btn_group_as_primary(__("Make")); // stop @@ -165,6 +169,64 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten method: "erpnext.stock.doctype.material_request.material_request.make_stock_entry", frm: cur_frm }); + }, + + + make_production_order: function() { + var items = [] + $.each(cur_frm.doc["items"] || [], function(i, d) { + items.push(d.item_code); + }); + var d = new frappe.ui.Dialog({ + title: __("Production Order"), + fields: [ + { + "fieldtype": "Link", + "label": __("Production Item"), + "fieldname": "item", + "options": "Item", + "reqd": 1, + "get_query": function() { + return { + "filters": [ + ['item_code', 'in', items], + ] + } + } + } + ] + + }); + + d.set_primary_action(__("Make"), function() { + frappe.call({ + method:"erpnext.stock.doctype.material_request.material_request.validate_production_item", + args: { + "item_code": d.get_values().item + }, + callback: function(r) { + if(!r.message) { + msgprint("Cannot create Production Order for selected Item.") + } + else { + frappe.call({ + method:"erpnext.stock.doctype.material_request.material_request.make_production_order", + args: { + "source_name": cur_frm.doc.name, + "item_code": d.get_values().item, + }, + callback: function(r) { + if(!r.exe) { + var doclist = frappe.model.sync(r.message); + frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + } + } + }); + } + } + }); + }); + d.show(); } }); diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index bd1f4d9c276..2fcf91d9a2d 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -327,3 +327,23 @@ def make_stock_entry(source_name, target_doc=None): }, target_doc, set_missing_values) return doclist + + +@frappe.whitelist() +def validate_production_item(item_code): + return frappe.db.get_value("Item", item_code, "is_pro_applicable") + +@frappe.whitelist() +def make_production_order(source_name, item_code): + material_request= frappe.get_doc("Material Request", source_name) + prod_order = frappe.new_doc("Production Order") + prod_order.production_item = item_code + prod_order.qty = 0 + for d in material_request.items: + if d.item_code == item_code: + prod_order.qty = d.qty - d.ordered_qty + prod_order.fg_warehouse = d.warehouse + prod_order.expected_delivery_date = d.schedule_date + prod_order.sales_order = d.sales_order_no + prod_order.material_request = material_request.name + return prod_order From e9cd22aff9965a690ae4bd2863885aba1ac40250 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 28 Jan 2016 15:56:59 +0530 Subject: [PATCH 05/15] Fixed make Prod_order from Material Request --- erpnext/stock/doctype/material_request/material_request.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 2fcf91d9a2d..c6c6fe5a6ab 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -12,6 +12,7 @@ from frappe import _ from frappe.model.mapper import get_mapped_doc from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty from erpnext.controllers.buying_controller import BuyingController +from erpnext.manufacturing.doctype.production_order.production_order import get_item_details form_grid_templates = { @@ -343,7 +344,10 @@ def make_production_order(source_name, item_code): if d.item_code == item_code: prod_order.qty = d.qty - d.ordered_qty prod_order.fg_warehouse = d.warehouse + prod_order.description = d.description + prod_order.stock_uom = d.uom prod_order.expected_delivery_date = d.schedule_date prod_order.sales_order = d.sales_order_no + prod_order.bom_no = get_item_details(item_code).bom_no prod_order.material_request = material_request.name return prod_order From 695bf47a1d0a518e0b7f15167eee0b1696e5c4a2 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Fri, 29 Jan 2016 16:40:15 +0530 Subject: [PATCH 06/15] changed image feild (type attach) to attach image, removed Image view --- .../material_request_item.json | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/erpnext/stock/doctype/material_request_item/material_request_item.json b/erpnext/stock/doctype/material_request_item/material_request_item.json index 3e260656377..74792697db2 100644 --- a/erpnext/stock/doctype/material_request_item/material_request_item.json +++ b/erpnext/stock/doctype/material_request_item/material_request_item.json @@ -26,6 +26,7 @@ "options": "Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 0, "report_hide": 0, @@ -49,6 +50,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -73,6 +75,7 @@ "oldfieldtype": "Data", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 0, "report_hide": 0, @@ -98,6 +101,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -122,6 +126,7 @@ "oldfieldtype": "Text", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "250px", "read_only": 0, "report_hide": 0, @@ -146,6 +151,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -158,8 +164,8 @@ "bold": 0, "collapsible": 0, "fieldname": "image", - "fieldtype": "Attach", - "hidden": 1, + "fieldtype": "Attach Image", + "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, @@ -169,31 +175,8 @@ "permlevel": 0, "precision": "", "print_hide": 1, - "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, - "fieldname": "image_view", - "fieldtype": "Image", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Image View", - "length": 0, - "no_copy": 0, - "options": "image", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "read_only": 0, + "print_hide_if_no_value": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -215,6 +198,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -239,6 +223,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "80px", "read_only": 0, "report_hide": 0, @@ -266,6 +251,7 @@ "options": "UOM", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "70px", "read_only": 1, "report_hide": 0, @@ -293,6 +279,7 @@ "options": "Warehouse", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 0, "report_hide": 0, @@ -316,6 +303,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -340,6 +328,7 @@ "oldfieldtype": "Date", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 0, "report_hide": 0, @@ -364,6 +353,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -390,6 +380,7 @@ "options": "Item Group", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -415,6 +406,7 @@ "options": "Brand", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 1, "report_hide": 0, @@ -441,6 +433,7 @@ "oldfieldtype": "Date", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -464,6 +457,7 @@ "options": "Sales Order", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -485,6 +479,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -509,6 +504,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "print_width": "70px", "read_only": 1, "report_hide": 0, @@ -535,6 +531,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "print_width": "70px", "read_only": 1, "report_hide": 0, @@ -561,6 +558,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -585,6 +583,7 @@ "oldfieldtype": "Check", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -602,12 +601,13 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2015-11-16 06:29:50.238167", + "modified": "2016-01-29 06:03:41.424851", "modified_by": "Administrator", "module": "Stock", "name": "Material Request Item", "owner": "Administrator", "permissions": [], "read_only": 0, - "read_only_onload": 0 + "read_only_onload": 0, + "sort_order": "DESC" } \ No newline at end of file From 0b40ccc43c772cb139f30fa8d13723e0d8115672 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Wed, 3 Feb 2016 18:32:44 +0530 Subject: [PATCH 07/15] Removed unwanted code --- .../doctype/delivery_note/delivery_note.js | 42 ------------------- 1 file changed, 42 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index 0b6f47e09fa..3365fa2a95a 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -193,48 +193,6 @@ cur_frm.cscript.print_without_amount = function(doc, cdt, cdn) { erpnext.stock.delivery_note.set_print_hide(doc, cdt, cdn); } - -//****************** For print sales order no and date************************* -cur_frm.pformat.sales_order_no= function(doc, cdt, cdn){ - //function to make row of table - - var make_row = function(title,val1, val2, bold){ - var bstart = ''; var bend = ''; - - return ''+(bold?bstart:'')+title+(bold?bend:'')+'' - +''+val1+(val2?' ('+dateutil.str_to_user(val2)+')':'')+'' - +'' - } - - out =''; - - var cl = doc.items || []; - - // outer table - var out='
- + - - - - - - - - - + @@ -158,7 +144,7 @@ - + @@ -170,7 +156,7 @@ - + @@ -191,7 +177,7 @@ - + @@ -212,7 +198,7 @@ - + @@ -224,7 +210,7 @@ - + @@ -236,7 +222,7 @@ - + @@ -248,7 +234,7 @@ - + @@ -269,7 +255,7 @@ - + @@ -290,7 +276,7 @@ - + @@ -302,7 +288,7 @@ - + @@ -323,7 +309,7 @@ - + @@ -335,7 +321,7 @@ - + @@ -347,7 +333,7 @@ - + @@ -359,7 +345,7 @@ - + @@ -371,7 +357,7 @@ - + diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 80ec589d469..c1a52811009 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -355,6 +355,7 @@ def raise_production_orders(source_name): prod_order.material_request = material_request.name prod_order.material_request_item = d.name prod_order.planned_start_date = material_request.transaction_date + prod_order.company = material_request.company prod_order.save() production_orders.append(prod_order.name) else: @@ -364,4 +365,5 @@ def raise_production_orders(source_name): (p, p) for p in production_orders] msgprint(_("Production Orders {0} created").format(comma_and(message))) if errors: - msgprint(_("Could not Raise Production Orders for {0}").format(comma_and(errors))) \ No newline at end of file + msgprint(_("Could not Raise Production Orders for {0}").format(comma_and(errors))) + return production_orders \ No newline at end of file diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py index 37d985edb04..c675224cebb 100644 --- a/erpnext/stock/doctype/material_request/test_material_request.py +++ b/erpnext/stock/doctype/material_request/test_material_request.py @@ -7,6 +7,7 @@ from __future__ import unicode_literals import frappe, unittest from frappe.utils import flt +from erpnext.stock.doctype.material_request.material_request import raise_production_orders class TestMaterialRequest(unittest.TestCase): def setUp(self): @@ -436,6 +437,25 @@ class TestMaterialRequest(unittest.TestCase): #testing bin requested qty after issuing stock against material request self.assertEquals(_get_requested_qty(), existing_requested_qty) + + def test_completed_qty_for__manufacture(self): + mr = frappe.copy_doc(test_records[1]).insert() + mr = frappe.get_doc("Material Request", mr.name) + mr.submit() + completed_qty = mr.items[0].ordered_qty + + prod_order = raise_production_orders(mr.name) + po = frappe.get_doc("Production Order", prod_order[0]) + po.wip_warehouse = "_Test Warehouse 1 - _TC" + po.submit() + + mr = frappe.get_doc("Material Request", mr.name) + self.assertEquals(completed_qty + po.qty, mr.items[0].ordered_qty) + + po.cancel() + mr = frappe.get_doc("Material Request", mr.name) + self.assertEquals(completed_qty, mr.items[0].ordered_qty) + test_dependencies = ["Currency Exchange"] test_records = frappe.get_test_records('Material Request') diff --git a/erpnext/stock/doctype/material_request/test_records.json b/erpnext/stock/doctype/material_request/test_records.json index 152d1443a34..09d1912ed74 100644 --- a/erpnext/stock/doctype/material_request/test_records.json +++ b/erpnext/stock/doctype/material_request/test_records.json @@ -30,5 +30,26 @@ "material_request_type": "Purchase", "naming_series": "_T-Material Request-", "transaction_date": "2013-02-18" + }, + { + "company": "_Test Company", + "doctype": "Material Request", + "fiscal_year": "_Test Fiscal Year 2013", + "items": [ + { + "description": "_Test FG Item", + "doctype": "Material Request Item", + "item_code": "_Test FG Item", + "item_name": "_Test FG Item", + "parentfield": "items", + "qty": 5, + "schedule_date": "2013-02-18", + "uom": "_Test UOM 1", + "warehouse": "_Test Warehouse - _TC" + } + ], + "material_request_type": "Manufacture", + "naming_series": "_T-Material Request-", + "transaction_date": "2013-02-18" } ] \ No newline at end of file From 0dd850039385978af51176db9fa9a8b5e00c0c49 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 16 Feb 2016 18:08:25 +0530 Subject: [PATCH 14/15] Fixed Documentation --- erpnext/docs/assets/img/manufacturing/ppt.png | Bin 99277 -> 75749 bytes .../tools/production-planning-tool.md | 30 +++++++++------ .../user/manual/en/stock/material-request.md | 1 + .../production_order/production_order.py | 3 +- .../production_planning_tool.json | 22 ++++++----- .../production_planning_tool.py | 36 +++++++++--------- 6 files changed, 51 insertions(+), 41 deletions(-) diff --git a/erpnext/docs/assets/img/manufacturing/ppt.png b/erpnext/docs/assets/img/manufacturing/ppt.png index f5018b75499fd0f8b2c0ae2dfb3ee8c8ab6444ac..30096fff83617eaef4ef81f16ad74820fd0fbf2d 100644 GIT binary patch literal 75749 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 H2H*Y~9MI9Hck^06L+CkdVBDkPyDSqn)XR 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 rQ7~gVxC6ULm`&zLw8b^;61kB+zK? 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

K-UyWjD7s;@miz2 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 +#### Step 1: Specify source to get Production Items + +* You can select Sales Order or Material Request according to where you want to source the items from +* If you plan to add items manually, keep the "Get items from" field empty -#### Step 1: Select and get Sales Order -* Select sales orders for MRP using filters (Time, Item, and Customer) -* Click on Get Sales Order to generate a list. +#### Step 2: Select and get Sales Order / Material Request + +* Use filters to get the Sales Order / Material Request +* Click on Get Sales Order / Get Material Requests to generate a list. Production Planing Tool -#### Step 2: Get Item from Sales Orders. +#### Step 3: Get Items -You can add/remove or change quantity of these Items. +* Get the items for the Sales Order / Material request list +* You can add/remove or change quantity of these Items. Production Planing Tool -#### Step 3: Create Production Orders +#### Step 4: Create Production Orders Production Planing Tool -#### Step 4: Create Material Request +#### Step 5: Create Material Request Create Material Request for Items with projected shortfall. @@ -46,11 +52,11 @@ Create Material Request for Items with projected shortfall. The Production Planning Tool is used in two stages: - * Selection of Open Sales Orders for the period based on “Expected Delivery Date”. - * Selection of Items from those Sales Orders. + * Selection of open Sales Orders / pending Material Request for the period based on “Expected Delivery Date”. + * Selection of Items from those Sales Orders / Material Requests -The tool will update if you have already created Production Orders for a -particular Item against its Sales Order (“Planned Quantity”). +The tool will update if you have already created Production Orde rs for a +particular Item against its Sales Order (“Planned Quantity”) or Material Request. You can always edit the Item list and increase / reduce quantities to plan your production. diff --git a/erpnext/docs/user/manual/en/stock/material-request.md b/erpnext/docs/user/manual/en/stock/material-request.md index a609756d3e3..8afda601736 100644 --- a/erpnext/docs/user/manual/en/stock/material-request.md +++ b/erpnext/docs/user/manual/en/stock/material-request.md @@ -23,6 +23,7 @@ A Material Request can be of type: * Purchase - If the request material is to be purchased. * Material Transfer - If the requested material is to be shifted from one warehouse to another. * Material Issue - If the requested material is to be Issued. +* Manufacture - If the requested material is to be Produced. > Info: Material Request is not mandatory. It is ideal if you have centralized buying so that you can collect this information from various departments. diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index ead8105a923..b1678f15b7f 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -314,7 +314,8 @@ class ProductionOrder(Document): def set_actual_dates(self): if self.get("operations"): - actual_date = frappe.db.sql("""select min(actual_start_time) as start_date, max(actual_end_time) as end_date from `tabProduction Order Operation` + actual_date = frappe.db.sql("""select min(actual_start_time) as start_date, + max(actual_end_time) as end_date from `tabProduction Order Operation` where parent = %s and docstatus=1""", self.name, as_dict=1)[0] self.actual_start_date = actual_date.start_date self.actual_end_date = actual_date.end_date diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json index 19b5fd97845..699fb2a583c 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json @@ -13,16 +13,16 @@ "bold": 0, "collapsible": 0, "default": "Sales Order", - "fieldname": "plan_using", + "fieldname": "get_items_from", "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Plan Using", + "label": "Get Items From", "length": 0, "no_copy": 0, - "options": "Sales Order\nMaterial Request", + "options": "\nSales Order\nMaterial Request", "permlevel": 0, "precision": "", "print_hide": 0, @@ -38,7 +38,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "depends_on": "", + "depends_on": "get_items_from", "description": "", "fieldname": "filters", "fieldtype": "Section Break", @@ -87,7 +87,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "depends_on": "eval: doc.plan_using == \"Sales Order\"", + "depends_on": "eval: doc.get_items_from == \"Sales Order\"", "fieldname": "customer", "fieldtype": "Link", "hidden": 0, @@ -112,7 +112,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "depends_on": "eval: doc.plan_using == \"Material Request\"", + "depends_on": "eval: doc.get_items_from == \"Material Request\"", "fieldname": "warehouse", "fieldtype": "Link", "hidden": 0, @@ -138,7 +138,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "depends_on": "eval: doc.plan_using == \"Sales Order\"", + "depends_on": "eval: doc.get_items_from == \"Sales Order\"", "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -232,7 +232,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "depends_on": "eval: doc.plan_using == \"Sales Order\"", + "depends_on": "eval: doc.get_items_from == \"Sales Order\"", "fieldname": "section_break1", "fieldtype": "Section Break", "hidden": 0, @@ -305,7 +305,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "depends_on": "eval: doc.plan_using == \"Material Request\"", + "depends_on": "eval: doc.get_items_from == \"Material Request\"", "fieldname": "section_break_16", "fieldtype": "Section Break", "hidden": 0, @@ -403,6 +403,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "depends_on": "get_items_from", "fieldname": "get_items", "fieldtype": "Button", "hidden": 0, @@ -428,6 +429,7 @@ "bold": 0, "collapsible": 0, "default": "1", + "depends_on": "get_items_from", "description": "If checked, BOM for sub-assembly items will be considered for getting raw materials. Otherwise, all sub-assembly items will be treated as a raw material.", "fieldname": "use_multi_level_bom", "fieldtype": "Check", @@ -629,7 +631,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-02-11 06:18:45.077263", + "modified": "2016-02-16 06:56:08.244906", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Planning Tool", diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index bec97d1c03c..ee5e4e75902 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -115,9 +115,9 @@ class ProductionPlanningTool(Document): mr.material_request_date = cstr(r['transaction_date']) def get_items(self): - if self.plan_using == "Sales Order": + if self.get_items_from == "Sales Order": self.get_so_items() - elif self.plan_using == "Material Request": + elif self.get_items_from == "Material Request": self.get_mr_items() def get_so_items(self): @@ -191,9 +191,9 @@ class ProductionPlanningTool(Document): pi.planned_qty = flt(p['pending_qty']) pi.pending_qty = flt(p['pending_qty']) - if self.plan_using == "Sales Order": + if self.get_items_from == "Sales Order": pi.sales_order = p['parent'] - elif self.plan_using == "Material Request": + elif self.get_items_from == "Material Request": pi.material_request = p['parent'] pi.material_request_item = p['name'] @@ -252,18 +252,18 @@ class ProductionPlanningTool(Document): } """ Club similar BOM and item for processing in case of Sales Orders """ - if self.plan_using == "Sales Order": + if self.get_items_from == "Material Request": + item_details.update({ + "qty": d.planned_qty + }) + item_dict[(d.item_code, d.material_request_item, d.warehouse)] = item_details + + else: item_details.update({ "qty":flt(item_dict.get((d.item_code, d.sales_order, d.warehouse),{}) .get("qty")) + flt(d.planned_qty) }) item_dict[(d.item_code, d.sales_order, d.warehouse)] = item_details - - elif self.plan_using == "Material Request": - item_details.update({ - "qty": d.planned_qty - }) - item_dict[(d.item_code, d.material_request_item, d.warehouse)] = item_details return item_dict @@ -293,11 +293,12 @@ class ProductionPlanningTool(Document): """ bom_dict = {} for d in self.get("items"): - if self.plan_using == "Sales Order": - bom_dict.setdefault(d.bom_no, []).append({d.sales_order: flt(d.planned_qty)}) - elif self.plan_using == "Material Request": - bom_dict.setdefault(d.bom_no, []).append({d.material_request_item: flt(d.planned_qty)}) - + if self.get_items_from == "Material Request": + bom_dict.setdefault(d.bom_no, []).append([d.material_request_item, flt(d.planned_qty)]) + else: + bom_dict.setdefault(d.bom_no, []).append([d.sales_order, flt(d.planned_qty)]) + return bom_dict + def download_raw_materials(self): """ Create csv data for required raw material to produce finished goods""" self.validate_data() @@ -341,7 +342,6 @@ class ProductionPlanningTool(Document): and item.is_stock_item = 1 group by item_code""", bom, as_dict=1): bom_wise_item_details.setdefault(d.item_code, d) - for item, item_details in bom_wise_item_details.items(): for so_qty in so_wise_qty: item_list.append([item, flt(item_details.qty) * so_qty[1], item_details.description, @@ -405,7 +405,7 @@ class ProductionPlanningTool(Document): for item_details in so_item_qty: if requested_qty: sales_order = item_details[4] or "No Sales Order" - if self.plan_using == "Material Request": + if self.get_items_from == "Material Request": sales_order = "No Sales Order" if requested_qty <= item_details[0]: adjusted_qty = requested_qty From f79760ce2d4c953f7bfd626b592924be7899c1bb Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 23 Feb 2016 18:35:20 +0530 Subject: [PATCH 15/15] Mumtiple fixes --- .../production_order/production_order.json | 4 +- .../production_order/production_order.py | 4 +- .../production_plan_material_request.json | 6 +- .../production_plan_sales_order.json | 16 ++--- .../production_planning_tool.js | 62 ++++++++++++++++--- .../production_planning_tool.json | 14 ++--- .../production_planning_tool.py | 16 ++--- .../v6_21/rename_material_request_fields.py | 7 ++- .../doctype/sales_order/sales_order.py | 12 +--- .../material_request/material_request.js | 2 +- .../material_request/material_request.py | 18 +++--- .../material_request/test_material_request.py | 15 ++++- .../maintenance_schedule.py | 6 +- .../maintenance_schedule_item.json | 21 +++++-- 14 files changed, 134 insertions(+), 69 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index 2ad2a3ba28f..4a809cf439c 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -928,7 +928,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -996,7 +996,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-02-08 04:36:35.071206", + "modified": "2016-02-23 07:29:38.091748", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Order", diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index b1678f15b7f..210597ee98f 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -155,16 +155,16 @@ class ProductionOrder(Document): frappe.db.set(self,'status', 'Submitted') self.make_time_logs() - self.update_planned_qty() self.update_completed_qty_in_material_request() + self.update_planned_qty() def on_cancel(self): self.validate_cancel() frappe.db.set(self,'status', 'Cancelled') self.delete_time_logs() - self.update_planned_qty() self.update_completed_qty_in_material_request() + self.update_planned_qty() def validate_cancel(self): if self.status == "Stopped": diff --git a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json index 1a7c89485cd..739c97f943a 100644 --- a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json +++ b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json @@ -66,7 +66,7 @@ "bold": 0, "collapsible": 0, "fieldname": "material_request_date", - "fieldtype": "Read Only", + "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -76,7 +76,7 @@ "no_copy": 0, "oldfieldname": "document_date", "oldfieldtype": "Date", - "options": "material_request.transaction_date", + "options": "", "permlevel": 0, "precision": "", "print_hide": 0, @@ -100,7 +100,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-02-11 04:21:34.372317", + "modified": "2016-02-23 02:06:15.169120", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Material Request", diff --git a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json index 85bf7d6d60a..5eaa2746106 100644 --- a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json +++ b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json @@ -41,7 +41,7 @@ "bold": 0, "collapsible": 0, "fieldname": "sales_order_date", - "fieldtype": "Read Only", + "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -51,12 +51,12 @@ "no_copy": 0, "oldfieldname": "document_date", "oldfieldtype": "Date", - "options": "sales_order.transaction_date", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, "print_width": "120px", - "read_only": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -92,7 +92,7 @@ "bold": 0, "collapsible": 0, "fieldname": "customer", - "fieldtype": "Read Only", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -100,7 +100,7 @@ "label": "Customer", "length": 0, "no_copy": 0, - "options": "sales_order.customer", + "options": "Customer", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -119,7 +119,7 @@ "collapsible": 0, "default": "", "fieldname": "grand_total", - "fieldtype": "Read Only", + "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -127,7 +127,7 @@ "label": "Grand Total", "length": 0, "no_copy": 0, - "options": "sales_order.base_grand_total", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -150,7 +150,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-02-11 04:17:42.849873", + "modified": "2016-02-23 02:13:07.340323", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Sales Order", diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js index 3fa1160d7e4..6824013d68d 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js @@ -3,7 +3,7 @@ frappe.require("assets/erpnext/js/utils.js"); -cur_frm.cscript.onload = function(doc, cdt, cdn) { +cur_frm.cscript.onload = function(doc) { cur_frm.set_value("company", frappe.defaults.get_user_default("Company")) } @@ -11,6 +11,58 @@ cur_frm.cscript.refresh = function(doc) { cur_frm.disable_save(); } +cur_frm.add_fetch("material_request", "transaction_date", "material_request_date"); + +cur_frm.add_fetch("sales_order", "transaction_date", "sales_order_date"); +cur_frm.add_fetch("sales_order", "customer", "customer"); +cur_frm.add_fetch("sales_order", "base_grand_total", "grand_total"); + +frappe.ui.form.on("Production Planning Tool", { + get_sales_orders: function(frm) { + frappe.call({ + doc: frm.doc, + method: "get_open_sales_orders", + callback: function(r) { + refresh_field("sales_orders"); + } + }); + }, + + get_material_request: function(frm) { + frappe.call({ + doc: frm.doc, + method: "get_pending_material_requests", + callback: function(r) { + refresh_field("material_requests"); + } + }); + }, + + get_items: function(frm) { + frappe.call({ + doc: frm.doc, + method: "get_items", + callback: function(r) { + refresh_field("items"); + } + }); + }, + + create_production_order: function(frm) { + frappe.call({ + doc: frm.doc, + method: "raise_production_orders" + }); + }, + + create_material_requests: function(frm) { + frappe.call({ + doc: frm.doc, + method: "raise_material_requests" + }); + } +}); + cur_frm.cscript.item_code = function(doc,cdt,cdn) { var d = locals[cdt][cdn]; if (d.item_code) { @@ -27,13 +79,6 @@ cur_frm.cscript.item_code = function(doc,cdt,cdn) { } } -cur_frm.cscript.raise_purchase_request = function(doc, cdt, cdn) { - return frappe.call({ - method: "raise_purchase_request", - doc:doc - }) -} - cur_frm.cscript.download_materials_required = function(doc, cdt, cdn) { return $c_obj(doc, 'validate_data', '', function(r, rt) { if (!r['exc']) @@ -41,7 +86,6 @@ cur_frm.cscript.download_materials_required = function(doc, cdt, cdn) { }); } - cur_frm.fields_dict['sales_orders'].grid.get_field('sales_order').get_query = function(doc) { var args = { "docstatus": 1 }; if(doc.customer) { diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json index 699fb2a583c..9ccd55e9ae3 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json @@ -266,7 +266,7 @@ "label": "Get Sales Orders", "length": 0, "no_copy": 0, - "options": "get_open_sales_orders", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -339,7 +339,7 @@ "label": "Get Material Request", "length": 0, "no_copy": 0, - "options": "get_pending_material_requests", + "options": "", "permlevel": 0, "precision": "", "print_hide": 0, @@ -413,7 +413,7 @@ "label": "Get Items", "length": 0, "no_copy": 0, - "options": "get_items", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -503,7 +503,7 @@ "bold": 0, "collapsible": 0, "description": "Separate production order will be created for each finished good item.", - "fieldname": "raise_production_order", + "fieldname": "create_production_order", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, @@ -512,7 +512,7 @@ "label": "Create Production Orders", "length": 0, "no_copy": 0, - "options": "raise_production_orders", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -576,7 +576,7 @@ "bold": 0, "collapsible": 0, "description": "Items to be requested which are \"Out of Stock\" considering all warehouses based on projected qty and minimum order qty", - "fieldname": "raise_purchase_request", + "fieldname": "create_material_requests", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, @@ -631,7 +631,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-02-16 06:56:08.244906", + "modified": "2016-02-23 02:37:51.260645", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Planning Tool", diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index ee5e4e75902..ea7e660dd52 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -63,7 +63,7 @@ class ProductionPlanningTool(Document): """ Add sales orders in the table""" self.clear_table("sales_orders") - so_list = [d.sales_order for d in self.get('sales_orders')] + so_list = [] for r in open_so: if cstr(r['name']) not in so_list: pp_so = self.append('sales_orders', {}) @@ -107,7 +107,7 @@ class ProductionPlanningTool(Document): """ Add Material Requests in the table""" self.clear_table("material_requests") - mr_list = [d.material_request for d in self.get('material_requests')] + mr_list = [] for r in pending_mr: if cstr(r['name']) not in mr_list: mr = self.append('material_requests', {}) @@ -121,7 +121,7 @@ class ProductionPlanningTool(Document): self.get_mr_items() def get_so_items(self): - so_list = filter(None, [d.sales_order for d in self.get('sales_orders')]) + so_list = [d.sales_order for d in self.get('sales_orders') if d.sales_order] if not so_list: msgprint(_("Please enter Sales Orders in the above table")) return [] @@ -157,14 +157,14 @@ class ProductionPlanningTool(Document): self.add_items(items + packed_items) def get_mr_items(self): - mr_list = filter(None, [d.material_request for d in self.get('material_requests')]) + mr_list = [d.material_request for d in self.get('material_requests') if d.material_request] if not mr_list: msgprint(_("Please enter Material Requests in the above table")) return [] item_condition = "" if self.fg_item: - item_condition = ' and mr_item.item_code = "' + self.fg_item + '"' + item_condition = ' and mr_item.item_code = "' + frappe.db.escape(self.fg_item, percent=False) + '"' items = frappe.db.sql("""select distinct parent, name, item_code, warehouse, (qty - ordered_qty) as pending_qty @@ -371,7 +371,7 @@ class ProductionPlanningTool(Document): return item_list - def raise_purchase_request(self): + def raise_material_requests(self): """ Raise Material Request if projected qty is less than qty required Requested qty should be shortage qty considering minimum order qty @@ -384,7 +384,7 @@ class ProductionPlanningTool(Document): self.get_raw_materials(bom_dict) if self.item_dict: - self.insert_purchase_request() + self.create_material_request() def get_requested_items(self): item_projected_qty = self.get_projected_qty() @@ -433,7 +433,7 @@ class ProductionPlanningTool(Document): return dict(item_projected_qty) - def insert_purchase_request(self): + def create_material_request(self): items_to_be_requested = self.get_requested_items() material_request_list = [] diff --git a/erpnext/patches/v6_21/rename_material_request_fields.py b/erpnext/patches/v6_21/rename_material_request_fields.py index a65b2eb26e8..07be27a5d6d 100644 --- a/erpnext/patches/v6_21/rename_material_request_fields.py +++ b/erpnext/patches/v6_21/rename_material_request_fields.py @@ -6,6 +6,9 @@ import frappe from frappe.model.utils.rename_field import rename_field def execute(): - frappe.reload_doc('Stock', 'doctype', 'material_request_item') - rename_field("Material Request Item", "sales_order", "sales_order") + frappe.reload_doc('stock', 'doctype', 'material_request_item') + rename_field("Material Request Item", "sales_order_no", "sales_order") + + frappe.reload_doc('support', 'doctype', 'maintenance_schedule_item') + rename_field("Maintenance Schedule Item", "prevdoc_docname", "sales_order") \ No newline at end of file diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index bafdb34ecca..ac5e21edc95 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -193,7 +193,7 @@ class SalesOrder(SellingController): #check maintenance schedule submit_ms = frappe.db.sql_list("""select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 - where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1""", self.name) + where t2.parent=t1.name and t2.sales_order = %s and t1.docstatus = 1""", self.name) if submit_ms: frappe.throw(_("Maintenance Schedule {0} must be cancelled before cancelling this Sales Order").format(comma_and(submit_ms))) @@ -464,15 +464,12 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): def make_maintenance_schedule(source_name, target_doc=None): maint_schedule = frappe.db.sql("""select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 - where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1""", source_name) + where t2.parent=t1.name and t2.sales_order=%s and t1.docstatus=1""", source_name) if not maint_schedule: doclist = get_mapped_doc("Sales Order", source_name, { "Sales Order": { "doctype": "Maintenance Schedule", - "field_map": { - "name": "sales_order" - }, "validation": { "docstatus": ["=", 1] } @@ -480,7 +477,7 @@ def make_maintenance_schedule(source_name, target_doc=None): "Sales Order Item": { "doctype": "Maintenance Schedule Item", "field_map": { - "parent": "prevdoc_docname" + "parent": "sales_order" }, "add_if_empty": True } @@ -499,9 +496,6 @@ def make_maintenance_visit(source_name, target_doc=None): doclist = get_mapped_doc("Sales Order", source_name, { "Sales Order": { "doctype": "Maintenance Visit", - "field_map": { - "name": "sales_order" - }, "validation": { "docstatus": ["=", 1] } diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 559b954963e..3f3eb99784e 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -176,7 +176,7 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten frappe.call({ method:"erpnext.stock.doctype.material_request.material_request.raise_production_orders", args: { - "source_name": cur_frm.doc.name + "material_request": cur_frm.doc.name } }); } diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index c1a52811009..ff280fd835b 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -7,7 +7,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import cstr, flt, getdate, comma_and +from frappe.utils import cstr, flt, getdate, new_line_sep from frappe import msgprint, _ from frappe.model.mapper import get_mapped_doc from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty @@ -336,11 +336,11 @@ def make_stock_entry(source_name, target_doc=None): return doclist @frappe.whitelist() -def raise_production_orders(source_name): - material_request= frappe.get_doc("Material Request", source_name) +def raise_production_orders(material_request): + mr= frappe.get_doc("Material Request", material_request) errors =[] production_orders = [] - for d in material_request.items: + for d in mr.items: if (d.qty - d.ordered_qty) >0 : if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): prod_order = frappe.new_doc("Production Order") @@ -352,10 +352,10 @@ def raise_production_orders(source_name): prod_order.expected_delivery_date = d.schedule_date prod_order.sales_order = d.sales_order prod_order.bom_no = get_item_details(d.item_code).bom_no - prod_order.material_request = material_request.name + prod_order.material_request = mr.name prod_order.material_request_item = d.name - prod_order.planned_start_date = material_request.transaction_date - prod_order.company = material_request.company + prod_order.planned_start_date = mr.transaction_date + prod_order.company = mr.company prod_order.save() production_orders.append(prod_order.name) else: @@ -363,7 +363,7 @@ def raise_production_orders(source_name): if production_orders: message = ["""%s""" % \ (p, p) for p in production_orders] - msgprint(_("Production Orders {0} created").format(comma_and(message))) + msgprint(_("The following Production Orders were created : \n {0} ").format(new_line_sep(message))) if errors: - msgprint(_("Could not Raise Production Orders for {0}").format(comma_and(errors))) + msgprint(_("Productions Orders cannot be raised for : \n {0}").format(new_line_sep(errors))) return production_orders \ No newline at end of file diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py index c675224cebb..ebdfa5a4599 100644 --- a/erpnext/stock/doctype/material_request/test_material_request.py +++ b/erpnext/stock/doctype/material_request/test_material_request.py @@ -438,12 +438,14 @@ class TestMaterialRequest(unittest.TestCase): #testing bin requested qty after issuing stock against material request self.assertEquals(_get_requested_qty(), existing_requested_qty) - def test_completed_qty_for__manufacture(self): + def test_material_request_type_manufacture(self): mr = frappe.copy_doc(test_records[1]).insert() mr = frappe.get_doc("Material Request", mr.name) mr.submit() completed_qty = mr.items[0].ordered_qty - + requested_qty = frappe.db.sql("""select indented_qty from `tabBin` where \ + item_code= %s and warehouse= %s """, (mr.items[0].item_code, mr.items[0].warehouse))[0][0] + prod_order = raise_production_orders(mr.name) po = frappe.get_doc("Production Order", prod_order[0]) po.wip_warehouse = "_Test Warehouse 1 - _TC" @@ -451,11 +453,20 @@ class TestMaterialRequest(unittest.TestCase): mr = frappe.get_doc("Material Request", mr.name) self.assertEquals(completed_qty + po.qty, mr.items[0].ordered_qty) + + new_requested_qty = frappe.db.sql("""select indented_qty from `tabBin` where \ + item_code= %s and warehouse= %s """, (mr.items[0].item_code, mr.items[0].warehouse))[0][0] + + self.assertEquals(requested_qty - po.qty, new_requested_qty) po.cancel() mr = frappe.get_doc("Material Request", mr.name) self.assertEquals(completed_qty, mr.items[0].ordered_qty) + new_requested_qty = frappe.db.sql("""select indented_qty from `tabBin` where \ + item_code= %s and warehouse= %s """, (mr.items[0].item_code, mr.items[0].warehouse))[0][0] + self.assertEquals(requested_qty, new_requested_qty) + test_dependencies = ["Currency Exchange"] test_records = frappe.get_test_records('Material Request') diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py index 14cad8e787f..d7ba1463d50 100644 --- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py @@ -158,12 +158,12 @@ class MaintenanceSchedule(TransactionBase): def validate_sales_order(self): for d in self.get('items'): - if d.prevdoc_docname: + if d.sales_order: chk = frappe.db.sql("""select ms.name from `tabMaintenance Schedule` ms, `tabMaintenance Schedule Item` msi where msi.parent=ms.name and - msi.prevdoc_docname=%s and ms.docstatus=1""", d.prevdoc_docname) + msi.sales_order=%s and ms.docstatus=1""", d.sales_order) if chk: - throw(_("Maintenance Schedule {0} exists against {0}").format(chk[0][0], d.prevdoc_docname)) + throw(_("Maintenance Schedule {0} exists against {0}").format(chk[0][0], d.sales_order)) def validate(self): self.validate_maintenance_detail() diff --git a/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json b/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json index f20cccb22cd..6879f0675b6 100644 --- a/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json +++ b/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json @@ -26,6 +26,7 @@ "options": "Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -50,6 +51,7 @@ "oldfieldtype": "Data", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -74,6 +76,7 @@ "oldfieldtype": "Data", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "300px", "read_only": 1, "report_hide": 0, @@ -98,6 +101,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -122,6 +126,7 @@ "oldfieldtype": "Date", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -146,6 +151,7 @@ "oldfieldtype": "Date", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -171,6 +177,7 @@ "options": "\nWeekly\nMonthly\nQuarterly\nHalf Yearly\nYearly\nRandom", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -195,6 +202,7 @@ "oldfieldtype": "Int", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -220,6 +228,7 @@ "options": "Sales Person", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -242,6 +251,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -266,6 +276,7 @@ "oldfieldtype": "Small Text", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -277,19 +288,21 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "prevdoc_docname", - "fieldtype": "Data", + "fieldname": "sales_order", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 1, "in_list_view": 0, - "label": "Against Docname", + "label": "Sales Order", "length": 0, "no_copy": 1, "oldfieldname": "prevdoc_docname", "oldfieldtype": "Data", + "options": "Sales Order", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "print_width": "150px", "read_only": 1, "report_hide": 0, @@ -309,7 +322,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2015-11-16 06:29:49.903875", + "modified": "2016-02-23 04:59:32.924534", "modified_by": "Administrator", "module": "Support", "name": "Maintenance Schedule Item",

'; - - // main table - out +=''; - - // add rows - if(cl.length){ - prevdoc_list = new Array(); - for(var i=0;i Date: Wed, 3 Feb 2016 18:33:43 +0530 Subject: [PATCH 08/15] Rename sales_order_no to sales_order in Material Request Item --- .../models/stock/material_request_item.html | 407 ++++++++++++++++++ .../production_planning_tool.py | 2 +- erpnext/patches.txt | 1 + erpnext/patches/v6_21/__init__.py | 1 + .../v6_21/rename_material_request_fields.py | 11 + .../doctype/sales_order/sales_order.py | 6 +- ...pending_so_items_for_purchase_request.json | 2 +- .../material_request/material_request.py | 16 +- .../material_request_item.json | 6 +- erpnext/translations/ar.csv | 2 +- erpnext/translations/bg.csv | 2 +- erpnext/translations/bn.csv | 2 +- erpnext/translations/bs.csv | 2 +- erpnext/translations/ca.csv | 2 +- erpnext/translations/cs.csv | 2 +- erpnext/translations/da-DK.csv | 2 +- erpnext/translations/da.csv | 2 +- erpnext/translations/de.csv | 2 +- erpnext/translations/el.csv | 2 +- erpnext/translations/es-PE.csv | 2 +- erpnext/translations/es.csv | 2 +- erpnext/translations/et.csv | 2 +- erpnext/translations/fa.csv | 2 +- erpnext/translations/fi.csv | 2 +- erpnext/translations/fr.csv | 2 +- erpnext/translations/gu.csv | 2 +- erpnext/translations/he.csv | 2 +- erpnext/translations/hi.csv | 2 +- erpnext/translations/hr.csv | 2 +- erpnext/translations/hu.csv | 2 +- erpnext/translations/id.csv | 2 +- erpnext/translations/it.csv | 2 +- erpnext/translations/ja.csv | 2 +- erpnext/translations/km.csv | 2 +- erpnext/translations/kn.csv | 2 +- erpnext/translations/ko.csv | 2 +- erpnext/translations/lv.csv | 2 +- erpnext/translations/mk.csv | 2 +- erpnext/translations/ml.csv | 2 +- erpnext/translations/mr.csv | 2 +- erpnext/translations/ms.csv | 2 +- erpnext/translations/my.csv | 2 +- erpnext/translations/nl.csv | 2 +- erpnext/translations/no.csv | 2 +- erpnext/translations/pl.csv | 4 +- erpnext/translations/pt-BR.csv | 2 +- erpnext/translations/pt.csv | 2 +- erpnext/translations/ro.csv | 2 +- erpnext/translations/ru.csv | 2 +- erpnext/translations/sk.csv | 2 +- erpnext/translations/sl.csv | 2 +- erpnext/translations/sq.csv | 2 +- erpnext/translations/sr.csv | 2 +- erpnext/translations/sv.csv | 2 +- erpnext/translations/ta.csv | 2 +- erpnext/translations/te.csv | 2 +- erpnext/translations/th.csv | 2 +- erpnext/translations/tr.csv | 4 +- erpnext/translations/uk.csv | 2 +- erpnext/translations/ur.csv | 2 +- erpnext/translations/vi.csv | 2 +- erpnext/translations/zh-cn.csv | 2 +- erpnext/translations/zh-tw.csv | 2 +- 63 files changed, 492 insertions(+), 72 deletions(-) create mode 100644 erpnext/docs/current/models/stock/material_request_item.html create mode 100644 erpnext/patches/v6_21/rename_material_request_fields.py diff --git a/erpnext/docs/current/models/stock/material_request_item.html b/erpnext/docs/current/models/stock/material_request_item.html new file mode 100644 index 00000000000..2988065b2a5 --- /dev/null +++ b/erpnext/docs/current/models/stock/material_request_item.html @@ -0,0 +1,407 @@ + + + + + + + + + +Child Table + + +

Table Name: tabMaterial Request Item

+ + + + +

Fields

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SrFieldnameTypeLabelOptions
1item_code + Link + Item Code + + + + + + +Item + + + +
2col_break1 + Column Break + + +
3item_name + Data + Item Name + +
4section_break_4 + Section Break + Description + +
5description + Text Editor + Description + +
6column_break_6 + Column Break + + +
7image + Attach + Image + +
8image_view + Image + Image View + + +
image
+
9quantity_and_warehouse + Section Break + Quantity and Warehouse + +
10qty + Float + Quantity + +
11uom + Link + Stock UOM + + + + + + +UOM + + + +
12warehouse + Link + For Warehouse + + + + + + +Warehouse + + + +
13col_break2 + Column Break + + +
14schedule_date + Date + Required Date + +
15more_info + Section Break + More Information + +
16item_group + Link + Item Group + + + + + + +Item Group + + + +
17brand + Link + Brand + + + + + + +Brand + + + +
18lead_time_date + Date + Lead Time Date + +
19sales_order + Link + Sales Order + + + + + + +Sales Order + + + +
20col_break3 + Column Break + + +
21min_order_qty + Float + Min Order Qty + +
22projected_qty + Float + Projected Qty + +
23ordered_qty + Float + Completed Qty + +
24page_break + Check + Page Break + +
+ + + + +

Child Table Of

+ + + + + + + \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index 46396ba1038..67eab40ddce 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -383,7 +383,7 @@ class ProductionPlanningTool(Document): "qty": requested_qty, "schedule_date": add_days(nowdate(), cint(item_wrapper.lead_time_days)), "warehouse": self.purchase_request_for_warehouse, - "sales_order_no": sales_order if sales_order!="No Sales Order" else None + "sales_order": sales_order if sales_order!="No Sales Order" else None }) pr_doc.flags.ignore_permissions = 1 diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 2239f0a48d7..e5ec4548d00 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -248,3 +248,4 @@ execute:frappe.db.sql("update `tabPricing Rule` set title=name where title='' or erpnext.patches.v6_20.set_party_account_currency_in_orders erpnext.patches.v6_19.comment_feed_communication erpnext.patches.v6_21.fix_reorder_level +erpnext.patches.v6_21.rename_material_request_fields diff --git a/erpnext/patches/v6_21/__init__.py b/erpnext/patches/v6_21/__init__.py index e69de29bb2d..baffc488252 100644 --- a/erpnext/patches/v6_21/__init__.py +++ b/erpnext/patches/v6_21/__init__.py @@ -0,0 +1 @@ +from __future__ import unicode_literals diff --git a/erpnext/patches/v6_21/rename_material_request_fields.py b/erpnext/patches/v6_21/rename_material_request_fields.py new file mode 100644 index 00000000000..a65b2eb26e8 --- /dev/null +++ b/erpnext/patches/v6_21/rename_material_request_fields.py @@ -0,0 +1,11 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.utils.rename_field import rename_field + +def execute(): + frappe.reload_doc('Stock', 'doctype', 'material_request_item') + rename_field("Material Request Item", "sales_order", "sales_order") + \ No newline at end of file diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index e692d6bb0e9..bafdb34ecca 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -353,7 +353,7 @@ def make_material_request(source_name, target_doc=None): item_table: { "doctype": "Material Request Item", "field_map": { - "parent": "sales_order_no", + "parent": "sales_order", "stock_uom": "uom" } } @@ -471,7 +471,7 @@ def make_maintenance_schedule(source_name, target_doc=None): "Sales Order": { "doctype": "Maintenance Schedule", "field_map": { - "name": "sales_order_no" + "name": "sales_order" }, "validation": { "docstatus": ["=", 1] @@ -500,7 +500,7 @@ def make_maintenance_visit(source_name, target_doc=None): "Sales Order": { "doctype": "Maintenance Visit", "field_map": { - "name": "sales_order_no" + "name": "sales_order" }, "validation": { "docstatus": ["=", 1] diff --git a/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.json b/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.json index 6d431faa217..6b19b6394bc 100644 --- a/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.json +++ b/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.json @@ -12,7 +12,7 @@ "module": "Selling", "name": "Pending SO Items For Purchase Request", "owner": "Administrator", - "query": "select so_item.item_code as \"Item Code:Link/Item:120\",\n so_item.item_name as \"Item Name::120\",\n so_item.description as \"Description::120\",\n so.`name` as \"S.O. No.:Link/Sales Order:120\",\n so.`transaction_date` as \"Date:Date:120\",\n mr.name as \"Material Request:Link/Material Request:120\",\n so.customer as \"Customer:Link/Customer:120\",\n so.territory as \"Terretory:Link/Territory:120\",\n sum(so_item.qty) as \"SO Qty:Float:100 \",\n sum(mr_item.qty) as \"Requested Qty:Float:100\",\n sum(so_item.qty) - sum(mr_item.qty) as \"Pending Qty:Float:100 \", \n so.company as \"Company:Link/Company:\"\nfrom\n `tabSales Order` so, `tabSales Order Item` so_item, \n `tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere \n so_item.`parent` = so.`name` \n and mr_item.parent = mr.name\n and mr_item.sales_order_no = so.name\n and mr_item.item_code = so_item.item_code\n and so.docstatus = 1 and so.status != \"Stopped\" \n and mr.docstatus = 1 and mr.status != \"Stopped\"\ngroup by so.name, so_item.item_code\nhaving sum(so_item.qty) > sum(mr_item.qty)\norder by so.name desc, so_item.item_code asc", + "query": "select so_item.item_code as \"Item Code:Link/Item:120\",\n so_item.item_name as \"Item Name::120\",\n so_item.description as \"Description::120\",\n so.`name` as \"S.O. No.:Link/Sales Order:120\",\n so.`transaction_date` as \"Date:Date:120\",\n mr.name as \"Material Request:Link/Material Request:120\",\n so.customer as \"Customer:Link/Customer:120\",\n so.territory as \"Terretory:Link/Territory:120\",\n sum(so_item.qty) as \"SO Qty:Float:100 \",\n sum(mr_item.qty) as \"Requested Qty:Float:100\",\n sum(so_item.qty) - sum(mr_item.qty) as \"Pending Qty:Float:100 \", \n so.company as \"Company:Link/Company:\"\nfrom\n `tabSales Order` so, `tabSales Order Item` so_item, \n `tabMaterial Request` mr, `tabMaterial Request Item` mr_item\nwhere \n so_item.`parent` = so.`name` \n and mr_item.parent = mr.name\n and mr_item.sales_order = so.name\n and mr_item.item_code = so_item.item_code\n and so.docstatus = 1 and so.status != \"Stopped\" \n and mr.docstatus = 1 and mr.status != \"Stopped\"\ngroup by so.name, so_item.item_code\nhaving sum(so_item.qty) > sum(mr_item.qty)\norder by so.name desc, so_item.item_code asc", "ref_doctype": "Sales Order", "report_name": "Pending SO Items For Purchase Request", "report_type": "Query Report" diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index c6c6fe5a6ab..f7dee98b3b9 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -29,20 +29,20 @@ class MaterialRequest(BuyingController): def validate_qty_against_so(self): so_items = {} # Format --> {'SO/00001': {'Item/001': 120, 'Item/002': 24}} for d in self.get('items'): - if d.sales_order_no: - if not so_items.has_key(d.sales_order_no): - so_items[d.sales_order_no] = {d.item_code: flt(d.qty)} + if d.sales_order: + if not so_items.has_key(d.sales_order): + so_items[d.sales_order] = {d.item_code: flt(d.qty)} else: - if not so_items[d.sales_order_no].has_key(d.item_code): - so_items[d.sales_order_no][d.item_code] = flt(d.qty) + if not so_items[d.sales_order].has_key(d.item_code): + so_items[d.sales_order][d.item_code] = flt(d.qty) else: - so_items[d.sales_order_no][d.item_code] += flt(d.qty) + so_items[d.sales_order][d.item_code] += flt(d.qty) for so_no in so_items.keys(): for item in so_items[so_no].keys(): already_indented = frappe.db.sql("""select sum(qty) from `tabMaterial Request Item` - where item_code = %s and sales_order_no = %s and + where item_code = %s and sales_order = %s and docstatus = 1 and parent != %s""", (item, so_no, self.name)) already_indented = already_indented and flt(already_indented[0][0]) or 0 @@ -347,7 +347,7 @@ def make_production_order(source_name, item_code): prod_order.description = d.description prod_order.stock_uom = d.uom prod_order.expected_delivery_date = d.schedule_date - prod_order.sales_order = d.sales_order_no + prod_order.sales_order = d.sales_order prod_order.bom_no = get_item_details(item_code).bom_no prod_order.material_request = material_request.name return prod_order diff --git a/erpnext/stock/doctype/material_request_item/material_request_item.json b/erpnext/stock/doctype/material_request_item/material_request_item.json index 74792697db2..eecb42a9528 100644 --- a/erpnext/stock/doctype/material_request_item/material_request_item.json +++ b/erpnext/stock/doctype/material_request_item/material_request_item.json @@ -445,13 +445,13 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "sales_order_no", + "fieldname": "sales_order", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Sales Order No", + "label": "Sales Order", "length": 0, "no_copy": 0, "options": "Sales Order", @@ -601,7 +601,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-01-29 06:03:41.424851", + "modified": "2016-01-30 06:03:41.424851", "modified_by": "Administrator", "module": "Stock", "name": "Material Request Item", diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv index 90a19efbe97..79a1134f5c7 100644 --- a/erpnext/translations/ar.csv +++ b/erpnext/translations/ar.csv @@ -1224,7 +1224,7 @@ DocType: Employee External Work History,Total Experience,مجموع الخبرة apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,زلة التعبئة (ق ) إلغاء apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,تدفق النقد من الاستثمار apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,الشحن و التخليص الرسوم -DocType: Material Request Item,Sales Order No,ترتيب المبيعات لا +DocType: Material Request Item,Sales Order,ترتيب المبيعات لا DocType: Item Group,Item Group Name,البند اسم المجموعة apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,مأخوذ apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,المواد نقل لصناعة diff --git a/erpnext/translations/bg.csv b/erpnext/translations/bg.csv index 645234f7fb8..61bb51d0c06 100644 --- a/erpnext/translations/bg.csv +++ b/erpnext/translations/bg.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Общо Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Приемо-предавателен протокол (и) анулиране apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Парични потоци от инвестиционна apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Товарни и спедиция Такси -DocType: Material Request Item,Sales Order No,Продажбите Заповед № +DocType: Material Request Item,Sales Order,Продажбите Заповед № DocType: Item Group,Item Group Name,Име на артикул Group apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Взети apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Прехвърляне Материали за Производство diff --git a/erpnext/translations/bn.csv b/erpnext/translations/bn.csv index 8947059cb04..eb653f9c0fc 100644 --- a/erpnext/translations/bn.csv +++ b/erpnext/translations/bn.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,মোট অভিজ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,বাতিল প্যাকিং স্লিপ (গুলি) apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,বিনিয়োগ থেকে ক্যাশ ফ্লো apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,মাল ও ফরোয়ার্ডিং চার্জ -DocType: Material Request Item,Sales Order No,বিক্রয় আদেশ কোন +DocType: Material Request Item,Sales Order,বিক্রয় আদেশ কোন DocType: Item Group,Item Group Name,আইটেমটি গ্রুপ নাম apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,ধরা apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,প্রস্তুত জন্য স্থানান্তর সামগ্রী diff --git a/erpnext/translations/bs.csv b/erpnext/translations/bs.csv index 98b176e627d..6c9deaf4d6e 100644 --- a/erpnext/translations/bs.csv +++ b/erpnext/translations/bs.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,Ukupno Iskustvo apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Pakiranje proklizavanja ( s) otkazan apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Novčani tok iz ulagačkih apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Teretni i Forwarding Optužbe -DocType: Material Request Item,Sales Order No,Narudžba kupca br +DocType: Material Request Item,Sales Order,Narudžba kupca br DocType: Item Group,Item Group Name,Naziv grupe artikla apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taken apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transfer Materijali za Proizvodnja diff --git a/erpnext/translations/ca.csv b/erpnext/translations/ca.csv index e438744a8fa..8a8d4bf02a8 100644 --- a/erpnext/translations/ca.csv +++ b/erpnext/translations/ca.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,Experiència total apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Fulla(s) d'embalatge cancel·lat apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Flux d'efectiu d'inversió apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Freight and Forwarding Charges -DocType: Material Request Item,Sales Order No,Ordre de Venda No +DocType: Material Request Item,Sales Order,Ordre de Venda No DocType: Item Group,Item Group Name,Nom del Grup d'Articles apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Pres apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Materials de transferència per Fabricació diff --git a/erpnext/translations/cs.csv b/erpnext/translations/cs.csv index 31e1002e621..09ae9491692 100644 --- a/erpnext/translations/cs.csv +++ b/erpnext/translations/cs.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,Celková zkušenost apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Balení Slip (y) zrušeno apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Peněžní tok z investičních apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Nákladní a Spediční Poplatky -DocType: Material Request Item,Sales Order No,Prodejní objednávky No +DocType: Material Request Item,Sales Order,Prodejní objednávky No DocType: Item Group,Item Group Name,Položka Název skupiny apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Zaujatý apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Přenos Materiály pro výrobu diff --git a/erpnext/translations/da-DK.csv b/erpnext/translations/da-DK.csv index 335518b8a07..e99c8414a0e 100644 --- a/erpnext/translations/da-DK.csv +++ b/erpnext/translations/da-DK.csv @@ -1076,7 +1076,7 @@ apps/erpnext/erpnext/public/js/setup_wizard.js +65,Financial Year Start Date,Reg DocType: Employee External Work History,Total Experience,Total Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Packing Slip (r) annulleret apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Fragt og Forwarding Afgifter -DocType: Material Request Item,Sales Order No,Salg bekendtgørelse nr +DocType: Material Request Item,Sales Order,Salg bekendtgørelse nr DocType: Item Group,Item Group Name,Item Group Name apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taget apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Overfør Materialer til Fremstilling diff --git a/erpnext/translations/da.csv b/erpnext/translations/da.csv index f5f62d5e18e..044288120b3 100644 --- a/erpnext/translations/da.csv +++ b/erpnext/translations/da.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Total Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Packing Slip (r) annulleret apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Pengestrømme fra investeringsaktivitet apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Fragt og Forwarding Afgifter -DocType: Material Request Item,Sales Order No,Salg bekendtgørelse nr +DocType: Material Request Item,Sales Order,Salg bekendtgørelse nr DocType: Item Group,Item Group Name,Item Group Name apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taget apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Overfør Materialer til Fremstilling diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index 8458e887738..33ea1a3959a 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -1222,7 +1222,7 @@ DocType: Employee External Work History,Total Experience,Gesamterfahrung apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Packzettel storniert apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Cashflow aus Investitionen apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Fracht- und Versandkosten -DocType: Material Request Item,Sales Order No,Kundenauftrags-Nr. +DocType: Material Request Item,Sales Order,Kundenauftrags-Nr. DocType: Item Group,Item Group Name,Name der Artikelgruppe apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Genommen apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Material der Fertigung übergeben diff --git a/erpnext/translations/el.csv b/erpnext/translations/el.csv index bca0d08ec23..f0dba78aac7 100644 --- a/erpnext/translations/el.csv +++ b/erpnext/translations/el.csv @@ -1222,7 +1222,7 @@ DocType: Employee External Work History,Total Experience,Συνολική εμπ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Το(α) δελτίο(α) συσκευασίας ακυρώθηκε(αν) apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Ταμειακές ροές από επενδυτικές apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Χρεώσεις μεταφοράς και προώθησης -DocType: Material Request Item,Sales Order No,Αρ. παραγγελίας πώλησης +DocType: Material Request Item,Sales Order,Αρ. παραγγελίας πώλησης DocType: Item Group,Item Group Name,Όνομα ομάδας ειδών apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Πάρθηκε apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Μεταφορά υλικών για μεταποίηση diff --git a/erpnext/translations/es-PE.csv b/erpnext/translations/es-PE.csv index e562fee3a6d..14f4d780d8a 100644 --- a/erpnext/translations/es-PE.csv +++ b/erpnext/translations/es-PE.csv @@ -1099,7 +1099,7 @@ apps/erpnext/erpnext/public/js/setup_wizard.js +65,Financial Year Start Date,Ini DocType: Employee External Work History,Total Experience,Experiencia Total apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Lista(s) de embalaje cancelada(s) apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Cargos por transporte de mercancías y transito -DocType: Material Request Item,Sales Order No,Orden de Venta No +DocType: Material Request Item,Sales Order,Orden de Venta No DocType: Item Group,Item Group Name,Nombre del grupo de artículos apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Tomado apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transferenca de Materiales para Fabricación diff --git a/erpnext/translations/es.csv b/erpnext/translations/es.csv index a8a3db64784..d39c77c0c2c 100644 --- a/erpnext/translations/es.csv +++ b/erpnext/translations/es.csv @@ -1221,7 +1221,7 @@ DocType: Employee External Work History,Total Experience,Experiencia total apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Lista(s) de embalaje cancelada(s) apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Flujo de efectivo de inversión apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,CARGOS DE TRANSITO Y TRANSPORTE -DocType: Material Request Item,Sales Order No,Orden de venta No. +DocType: Material Request Item,Sales Order,Orden de venta No. DocType: Item Group,Item Group Name,Nombre del grupo de productos apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Tomado apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transferir materiales para producción diff --git a/erpnext/translations/et.csv b/erpnext/translations/et.csv index b726df2cb8f..a593e3536a5 100644 --- a/erpnext/translations/et.csv +++ b/erpnext/translations/et.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Kokku Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Pakkesedel (s) tühistati apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Rahavood investeerimistegevusest apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Kaubavedu ja Edasitoimetuskulude -DocType: Material Request Item,Sales Order No,Müük korraldusega nr +DocType: Material Request Item,Sales Order,Müük korraldusega nr DocType: Item Group,Item Group Name,Punkt Group Nimi apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Võtnud apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transfer Materjalid Tootmine diff --git a/erpnext/translations/fa.csv b/erpnext/translations/fa.csv index ad09467d956..8cc353ebd3f 100644 --- a/erpnext/translations/fa.csv +++ b/erpnext/translations/fa.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,تجربه ها apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,بسته بندی لغزش (بازدید کنندگان) لغو apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,جریان وجوه نقد از سرمایه گذاری apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,حمل و نقل و حمل و نقل اتهامات -DocType: Material Request Item,Sales Order No,سفارش فروش بدون +DocType: Material Request Item,Sales Order,سفارش فروش بدون DocType: Item Group,Item Group Name,مورد نام گروه apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,گرفته apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,انتقال مواد برای تولید diff --git a/erpnext/translations/fi.csv b/erpnext/translations/fi.csv index b0240393c40..a73b0586c84 100644 --- a/erpnext/translations/fi.csv +++ b/erpnext/translations/fi.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,kustannukset yhteensä apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,pakkauslaput peruttu apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Investointien rahavirta apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,rahdin ja huolinnan maksut -DocType: Material Request Item,Sales Order No,"myyntitilaus, numero" +DocType: Material Request Item,Sales Order,"myyntitilaus, numero" DocType: Item Group,Item Group Name,"tuoteryhmä, nimi" apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,otettu apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,materiaalisiirto tuotantoon diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv index da23c14f008..267a876b14c 100644 --- a/erpnext/translations/fr.csv +++ b/erpnext/translations/fr.csv @@ -1225,7 +1225,7 @@ DocType: Employee External Work History,Total Experience,Total Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Bordereau(x) annulé apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Flux de trésorerie d'investissement apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Fret et d'envoi en sus -DocType: Material Request Item,Sales Order No,Ordonnance n ° de vente +DocType: Material Request Item,Sales Order,Ordonnance n ° de vente DocType: Item Group,Item Group Name,Nom du groupe d'article apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Pris apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Matériaux de transfert pour la fabrication diff --git a/erpnext/translations/gu.csv b/erpnext/translations/gu.csv index 170cc452e33..ee4e87e13fa 100644 --- a/erpnext/translations/gu.csv +++ b/erpnext/translations/gu.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,કુલ અનુભ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,રદ પેકિંગ કાપલી (ઓ) apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,રોકાણ કેશ ફ્લો apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,નૂર અને ફોરવર્ડિંગ સમાયોજિત -DocType: Material Request Item,Sales Order No,વેચાણ ઓર્ડર કોઈ +DocType: Material Request Item,Sales Order,વેચાણ ઓર્ડર કોઈ DocType: Item Group,Item Group Name,વસ્તુ ગ્રુપ નામ apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,લેવામાં apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,ઉત્પાદન માટે ટ્રાન્સફર સામગ્રી diff --git a/erpnext/translations/he.csv b/erpnext/translations/he.csv index cb1810389a6..9e663cfdd38 100644 --- a/erpnext/translations/he.csv +++ b/erpnext/translations/he.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,"ניסיון סה""כ" apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Slip אריזה (ים) בוטל apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,תזרים מזומנים מהשקעות apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,הוצאות הובלה והשילוח -DocType: Material Request Item,Sales Order No,להזמין ללא מכירות +DocType: Material Request Item,Sales Order,להזמין ללא מכירות DocType: Item Group,Item Group Name,שם קבוצת פריט apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,לקחתי apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,העברת חומרים לייצור diff --git a/erpnext/translations/hi.csv b/erpnext/translations/hi.csv index 26b72935b66..14fedb0b0d7 100644 --- a/erpnext/translations/hi.csv +++ b/erpnext/translations/hi.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,कुल अनुभ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,पैकिंग पर्ची (ओं ) को रद्द कर दिया apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,निवेश से कैश फ्लो apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,फ्रेट और अग्रेषण शुल्क -DocType: Material Request Item,Sales Order No,बिक्री आदेश नहीं +DocType: Material Request Item,Sales Order,बिक्री आदेश नहीं DocType: Item Group,Item Group Name,आइटम समूह का नाम apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,में ले ली apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,निर्माण के लिए हस्तांतरण सामग्री diff --git a/erpnext/translations/hr.csv b/erpnext/translations/hr.csv index d8864ccd95b..1699e39c4fa 100644 --- a/erpnext/translations/hr.csv +++ b/erpnext/translations/hr.csv @@ -1224,7 +1224,7 @@ DocType: Employee External Work History,Total Experience,Ukupno Iskustvo apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Pakiranje proklizavanja ( s) otkazan apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Novčani tijek iz investicijskih apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Teretni i Forwarding Optužbe -DocType: Material Request Item,Sales Order No,Broj narudžbe kupca +DocType: Material Request Item,Sales Order,Broj narudžbe kupca DocType: Item Group,Item Group Name,Proizvod - naziv grupe apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taken apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Prijenos Materijali za izradu diff --git a/erpnext/translations/hu.csv b/erpnext/translations/hu.csv index b94fae5ed43..cb55a8f5cff 100644 --- a/erpnext/translations/hu.csv +++ b/erpnext/translations/hu.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Összesen Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Csomagjegy(ek) törölve apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Cash Flow Befektetési apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Freight Forwarding és díjak -DocType: Material Request Item,Sales Order No,Sales Order No +DocType: Material Request Item,Sales Order,Sales Order DocType: Item Group,Item Group Name,Anyagcsoport neve apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taken apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transfer anyagok gyártása diff --git a/erpnext/translations/id.csv b/erpnext/translations/id.csv index a0c208c09a0..51221c28a00 100644 --- a/erpnext/translations/id.csv +++ b/erpnext/translations/id.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,Jumlah Pengalaman apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Packing slip (s) dibatalkan apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Arus Kas dari Investasi apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Pengangkutan dan Forwarding Biaya -DocType: Material Request Item,Sales Order No,No Order Penjualan +DocType: Material Request Item,Sales Order,Sales Order DocType: Item Group,Item Group Name,Nama Item Grup apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Diambil apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transfer Material untuk Produksi diff --git a/erpnext/translations/it.csv b/erpnext/translations/it.csv index d9f30725e8b..2c824722b28 100644 --- a/erpnext/translations/it.csv +++ b/erpnext/translations/it.csv @@ -1223,7 +1223,7 @@ DocType: Employee External Work History,Total Experience,Esperienza totale apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Bolla di accompagnamento ( s ) annullato apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Cash Flow da investimenti apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Freight Forwarding e spese -DocType: Material Request Item,Sales Order No,Ordine di vendita No +DocType: Material Request Item,Sales Order,Ordine di vendita No DocType: Item Group,Item Group Name,Nome Gruppo Articoli apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Preso apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Trasferimento Materiali per Produzione diff --git a/erpnext/translations/ja.csv b/erpnext/translations/ja.csv index 67c855e00b6..fad54750dc1 100644 --- a/erpnext/translations/ja.csv +++ b/erpnext/translations/ja.csv @@ -1234,7 +1234,7 @@ DocType: Employee External Work History,Total Experience,実績合計 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,梱包伝票(S)をキャンセル apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,投資活動によるキャッシュフロー apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,運送・転送料金 -DocType: Material Request Item,Sales Order No,受注番号 +DocType: Material Request Item,Sales Order,受注番号 DocType: Item Group,Item Group Name,アイテムグループ名 apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,売上高 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,製造用資材配送 diff --git a/erpnext/translations/km.csv b/erpnext/translations/km.csv index b0ba2f41daa..1db6cf58aeb 100644 --- a/erpnext/translations/km.csv +++ b/erpnext/translations/km.csv @@ -1200,7 +1200,7 @@ DocType: Employee External Work History,Total Experience,បទពិសោធ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,គ្រូពេទ្យប្រហែលជាវេចខ្ចប់ (s) បានត្រូវបានលុបចោល apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,លំហូរសាច់ប្រាក់ចេញពីការវិនិយោគ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,ការចោទប្រកាន់ការដឹកជញ្ជូននិងការបញ្ជូនបន្ត -DocType: Material Request Item,Sales Order No,គ្មានការលក់សណ្តាប់ធ្នាប់ +DocType: Material Request Item,Sales Order,គ្មានការលក់សណ្តាប់ធ្នាប់ DocType: Item Group,Item Group Name,ធាតុឈ្មោះក្រុម apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,គេយក apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,ផ្ទេរសម្រាប់ការផលិតសម្ភារៈ diff --git a/erpnext/translations/kn.csv b/erpnext/translations/kn.csv index 9de8a599379..34143a7a426 100644 --- a/erpnext/translations/kn.csv +++ b/erpnext/translations/kn.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,ಒಟ್ಟು ಅನ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,ಪ್ಯಾಕಿಂಗ್ ಸ್ಲಿಪ್ (ಗಳು) ರದ್ದು apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,ಹೂಡಿಕೆ ಹಣದ ಹರಿವನ್ನು apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,ಸರಕು ಮತ್ತು ಸಾಗಣೆಯನ್ನು ಚಾರ್ಜಸ್ -DocType: Material Request Item,Sales Order No,ಮಾರಾಟದ ಆದೇಶ ಸಂಖ್ಯೆ +DocType: Material Request Item,Sales Order,ಮಾರಾಟದ ಆದೇಶ ಸಂಖ್ಯೆ DocType: Item Group,Item Group Name,ಐಟಂ ಗುಂಪು ಹೆಸರು apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,ಟೇಕನ್ apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,ತಯಾರಿಕೆಗೆ ವರ್ಗಾವಣೆ ಮೆಟೀರಿಯಲ್ಸ್ diff --git a/erpnext/translations/ko.csv b/erpnext/translations/ko.csv index 3c39d728d4a..32b3582c8c5 100644 --- a/erpnext/translations/ko.csv +++ b/erpnext/translations/ko.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,총 체험 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,포장 명세서 (들) 취소 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,투자의 현금 흐름 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,화물 운송 및 포워딩 요금 -DocType: Material Request Item,Sales Order No,판매 주문 번호 +DocType: Material Request Item,Sales Order,판매 주문 번호 DocType: Item Group,Item Group Name,항목 그룹 이름 apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,촬영 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,제조에 대한 전송 재료 diff --git a/erpnext/translations/lv.csv b/erpnext/translations/lv.csv index 0678cd273a7..8e3bc6ee5ed 100644 --- a/erpnext/translations/lv.csv +++ b/erpnext/translations/lv.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Kopā pieredze apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Packing Slip (s) atcelts apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Naudas plūsma no ieguldījumu apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Kravu un Ekspedīcijas maksājumi -DocType: Material Request Item,Sales Order No,Pasūtījumu Nr +DocType: Material Request Item,Sales Order,Pasūtījumu Nr DocType: Item Group,Item Group Name,Postenis Grupas nosaukums apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taken apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transfer Materiāli Ražošana diff --git a/erpnext/translations/mk.csv b/erpnext/translations/mk.csv index db945cc149b..c773189958d 100644 --- a/erpnext/translations/mk.csv +++ b/erpnext/translations/mk.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Вкупно Искус apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Пакување фиш (и) откажани apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Парични текови од инвестициони apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Товар и товар пријави -DocType: Material Request Item,Sales Order No,Продај Побарувања Не +DocType: Material Request Item,Sales Order,Продај Побарувања Не DocType: Item Group,Item Group Name,Точка име на група apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Земени apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Пренос на материјали за изработка diff --git a/erpnext/translations/ml.csv b/erpnext/translations/ml.csv index 7fbf00cba9c..ea56eb7c098 100644 --- a/erpnext/translations/ml.csv +++ b/erpnext/translations/ml.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,ആകെ അനുഭ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,പായ്ക്കിംഗ് ജി (കൾ) റദ്ദാക്കി apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,നിക്ഷേപം മുതൽ ക്യാഷ് ഫ്ളോ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,ചരക്കുഗതാഗതം കൈമാറലും ചുമത്തിയിട്ടുള്ള -DocType: Material Request Item,Sales Order No,സെയിൽസ് ഓർഡർ ഇല്ല +DocType: Material Request Item,Sales Order,സെയിൽസ് ഓർഡർ ഇല്ല DocType: Item Group,Item Group Name,ഇനം ഗ്രൂപ്പ് പേര് apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,എടുത്ത apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,ഉല്പാദനത്തിനുള്ള മെറ്റീരിയൽസ് കൈമാറുക diff --git a/erpnext/translations/mr.csv b/erpnext/translations/mr.csv index a7ec841b0ff..1c01841b7a6 100644 --- a/erpnext/translations/mr.csv +++ b/erpnext/translations/mr.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,एकूण अनु apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,रद्द पॅकिंग स्लिप (चे) apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,गुंतवणूक रोख प्रवाह apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,वाहतुक आणि अग्रेषित शुल्क -DocType: Material Request Item,Sales Order No,विक्री ऑर्डर नाही +DocType: Material Request Item,Sales Order,विक्री ऑर्डर नाही DocType: Item Group,Item Group Name,आयटम गट नाव apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,घेतले apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,उत्पादन हस्तांतरण सामुग्री diff --git a/erpnext/translations/ms.csv b/erpnext/translations/ms.csv index f563902dffb..cc6153af6b2 100644 --- a/erpnext/translations/ms.csv +++ b/erpnext/translations/ms.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Jumlah Pengalaman apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Slip pembungkusan (s) dibatalkan apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Aliran tunai daripada Pelaburan apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Freight Forwarding dan Caj -DocType: Material Request Item,Sales Order No,Pesanan Jualan No +DocType: Material Request Item,Sales Order,Pesanan Jualan No DocType: Item Group,Item Group Name,Perkara Kumpulan Nama apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Diambil apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Bahan Pemindahan bagi Pembuatan diff --git a/erpnext/translations/my.csv b/erpnext/translations/my.csv index a555cfb7428..7cfef14f6ec 100644 --- a/erpnext/translations/my.csv +++ b/erpnext/translations/my.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,စုစုပေါ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,ထုပ်ပိုးစလစ်ဖြတ်ပိုင်းပုံစံ (s) ဖျက်သိမ်း apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,ရင်းနှီးမြုပ်နှံထံမှငွေကြေးစီးဆင်းမှု apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,ကုန်တင်နှင့် Forwarding စွပ်စွဲချက် -DocType: Material Request Item,Sales Order No,အရောင်းအမိန့်မရှိပါ +DocType: Material Request Item,Sales Order,အရောင်းအမိန့်မရှိပါ DocType: Item Group,Item Group Name,item Group မှအမည် apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,ယူ apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Manufacturing သည်ပစ္စည်းများလွှဲပြောင်း diff --git a/erpnext/translations/nl.csv b/erpnext/translations/nl.csv index 708b68b031f..697f3a298f0 100644 --- a/erpnext/translations/nl.csv +++ b/erpnext/translations/nl.csv @@ -1223,7 +1223,7 @@ DocType: Employee External Work History,Total Experience,Total Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Pakbon(en) geannuleerd apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,De kasstroom uit investeringsactiviteiten apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Vracht-en verzendkosten -DocType: Material Request Item,Sales Order No,Verkooporder nr. +DocType: Material Request Item,Sales Order,Verkooporder nr. DocType: Item Group,Item Group Name,Artikel groepsnaam apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Ingenomen apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Verplaats Materialen voor Productie diff --git a/erpnext/translations/no.csv b/erpnext/translations/no.csv index 8e458f42ab3..98f5fb33359 100644 --- a/erpnext/translations/no.csv +++ b/erpnext/translations/no.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Total Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Pakking Slip (s) kansellert apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Kontantstrøm fra investerings apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Spedisjons- og Kostnader -DocType: Material Request Item,Sales Order No,Salgsordre Nei +DocType: Material Request Item,Sales Order,Salgsordre Nei DocType: Item Group,Item Group Name,Sak Gruppenavn apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Tatt apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transfer Materialer for produksjon diff --git a/erpnext/translations/pl.csv b/erpnext/translations/pl.csv index 6e481a92574..0557923db6e 100644 --- a/erpnext/translations/pl.csv +++ b/erpnext/translations/pl.csv @@ -1225,8 +1225,8 @@ DocType: Employee External Work History,Total Experience, apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,List(y) przewozowe anulowane apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Przepływy środków pieniężnych z Inwestowanie apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Koszty dostaw i przesyłek -DocType: Material Request Item,Sales Order No,Nr Zlecenia Sprzedaży -DocType: Item Group,Item Group Name,Element Nazwa grupy +DocType: Material Request Item,Sales Order,Nr Zlecenia Sprzedaży +DocType: Item Group,Item Group Name, apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Wzięty apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Materiały transferowe dla Produkcja DocType: Pricing Rule,For Price List,Dla Listy Cen diff --git a/erpnext/translations/pt-BR.csv b/erpnext/translations/pt-BR.csv index 57b1596105b..f5ed6866e19 100644 --- a/erpnext/translations/pt-BR.csv +++ b/erpnext/translations/pt-BR.csv @@ -1223,7 +1223,7 @@ DocType: Employee External Work History,Total Experience,Experiência total apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Deslizamento (s) de embalagem cancelado apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Fluxo de Caixa de Investimentos apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Freight Forwarding e Encargos -DocType: Material Request Item,Sales Order No,Nº da Ordem de Venda +DocType: Material Request Item,Sales Order,Nº da Ordem de Venda DocType: Item Group,Item Group Name,Nome do Grupo de Itens apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Tomado apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Materiais de transferência para Fabricação diff --git a/erpnext/translations/pt.csv b/erpnext/translations/pt.csv index 5a19503f66e..44e3ee8f566 100644 --- a/erpnext/translations/pt.csv +++ b/erpnext/translations/pt.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,Experiência total apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Deslizamento (s) de embalagem cancelado apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Fluxo de Caixa de Investimentos apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Freight Forwarding e Encargos -DocType: Material Request Item,Sales Order No,Vendas decreto n º +DocType: Material Request Item,Sales Order,Vendas decreto n º DocType: Item Group,Item Group Name,Nome do Grupo item apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Tomado apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Materiais de transferência para Fabricação diff --git a/erpnext/translations/ro.csv b/erpnext/translations/ro.csv index 163616879f3..6b2993eefab 100644 --- a/erpnext/translations/ro.csv +++ b/erpnext/translations/ro.csv @@ -1221,7 +1221,7 @@ DocType: Employee External Work History,Total Experience,Experiența totală apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Slip de ambalare (e) anulate apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Cash Flow de la Investiții apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Incarcatura și Taxe de Expediere -DocType: Material Request Item,Sales Order No,Vânzări Ordinul nr +DocType: Material Request Item,Sales Order,Vânzări Ordinul nr DocType: Item Group,Item Group Name,Denumire Grup Articol apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Luate apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Materiale de transfer de Fabricare diff --git a/erpnext/translations/ru.csv b/erpnext/translations/ru.csv index 0d5e8350497..bf2887b2f14 100644 --- a/erpnext/translations/ru.csv +++ b/erpnext/translations/ru.csv @@ -1225,7 +1225,7 @@ DocType: Employee External Work History,Total Experience,Суммарный оп apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Упаковочный лист (ы) отменяется apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Поток денежных средств от инвестиционной apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Грузовые и экспедиторские Сборы -DocType: Material Request Item,Sales Order No,Номер Заказа клиента +DocType: Material Request Item,Sales Order,Номер Заказа клиента DocType: Item Group,Item Group Name,Пункт Название группы apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Взятый apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Передача материалов для производства diff --git a/erpnext/translations/sk.csv b/erpnext/translations/sk.csv index 21b736bc366..51714af63b0 100644 --- a/erpnext/translations/sk.csv +++ b/erpnext/translations/sk.csv @@ -1224,7 +1224,7 @@ DocType: Employee External Work History,Total Experience,Celková zkušenost apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Balení Slip (y) zrušeno apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Peňažný tok z investičných apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Nákladní a Spediční Poplatky -DocType: Material Request Item,Sales Order No,Prodejní objednávky No +DocType: Material Request Item,Sales Order,Prodejní objednávky No DocType: Item Group,Item Group Name,Položka Název skupiny apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Zaujatý apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Přenos Materiály pro výrobu diff --git a/erpnext/translations/sl.csv b/erpnext/translations/sl.csv index d7d8e8ef26f..baa405e703b 100644 --- a/erpnext/translations/sl.csv +++ b/erpnext/translations/sl.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Skupaj Izkušnje apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Dobavnico (e) odpovedan apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Denarni tokovi iz naložbenja apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Tovorni in Forwarding Stroški -DocType: Material Request Item,Sales Order No,Prodaja Zaporedna številka +DocType: Material Request Item,Sales Order,Prodaja Zaporedna številka DocType: Item Group,Item Group Name,Item Name Group apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taken apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Transferji Materiali za Izdelava diff --git a/erpnext/translations/sq.csv b/erpnext/translations/sq.csv index 9eea645f389..9852f769939 100644 --- a/erpnext/translations/sq.csv +++ b/erpnext/translations/sq.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Përvoja Total apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Paketimi Shqip (s) anulluar apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Cash Flow nga Investimi apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Mallrave dhe Forwarding Pagesat -DocType: Material Request Item,Sales Order No,Rendit Sales Asnjë +DocType: Material Request Item,Sales Order,Rendit Sales Asnjë DocType: Item Group,Item Group Name,Item Emri i Grupit apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Marrë apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Materialet Transferimi për prodhimin e diff --git a/erpnext/translations/sr.csv b/erpnext/translations/sr.csv index c582b528a25..6d6028a4606 100644 --- a/erpnext/translations/sr.csv +++ b/erpnext/translations/sr.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,Укупно Искус apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Упаковочный лист (ы) отменяется apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Новчани ток од Инвестирање apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Грузовые и экспедиторские Сборы -DocType: Material Request Item,Sales Order No,Продаја Наручите Нема +DocType: Material Request Item,Sales Order,Продаја Наручите Нема DocType: Item Group,Item Group Name,Ставка Назив групе apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Такен apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Трансфер материјал за производњу diff --git a/erpnext/translations/sv.csv b/erpnext/translations/sv.csv index d3d05248f9c..b019ed4288c 100644 --- a/erpnext/translations/sv.csv +++ b/erpnext/translations/sv.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Total Experience apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Följesedlar avbryts apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Kassaflöde från investeringsverksamheten apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,"Frakt, spedition Avgifter" -DocType: Material Request Item,Sales Order No,Kundorder Ingen +DocType: Material Request Item,Sales Order,Kundorder Ingen DocType: Item Group,Item Group Name,Produkt Gruppnamn apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Taken apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Överför Material Tillverkning diff --git a/erpnext/translations/ta.csv b/erpnext/translations/ta.csv index 933ea271acd..0de536f3bfa 100644 --- a/erpnext/translations/ta.csv +++ b/erpnext/translations/ta.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,மொத்த அ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,மூட்டை சீட்டு (கள்) ரத்து apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,முதலீடு இருந்து பண பரிமாற்ற apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,சரக்கு மற்றும் அனுப்புதல் கட்டணம் -DocType: Material Request Item,Sales Order No,விற்பனை ஆணை இல்லை +DocType: Material Request Item,Sales Order,விற்பனை ஆணை இல்லை DocType: Item Group,Item Group Name,உருப்படியை குழு பெயர் apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,எடுக்கப்பட்ட apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,உற்பத்தி இடமாற்றத் பொருட்கள் diff --git a/erpnext/translations/te.csv b/erpnext/translations/te.csv index 34be9881d42..656e7dd90b7 100644 --- a/erpnext/translations/te.csv +++ b/erpnext/translations/te.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,మొత్తం ఎ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,రద్దు ప్యాకింగ్ స్లిప్ (లు) apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,ఇన్వెస్టింగ్ నుండి నగదు ప్రవాహ apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,ఫ్రైట్ మరియు ఫార్వార్డింగ్ ఛార్జీలు -DocType: Material Request Item,Sales Order No,సేల్స్ ఆర్డర్ సంఖ్య +DocType: Material Request Item,Sales Order,సేల్స్ ఆర్డర్ సంఖ్య DocType: Item Group,Item Group Name,అంశం గ్రూప్ పేరు apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,తీసుకోబడినది apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,తయారీకి ట్రాన్స్ఫర్ మెటీరియల్స్ diff --git a/erpnext/translations/th.csv b/erpnext/translations/th.csv index fb0e9e074de..1847549ab5f 100644 --- a/erpnext/translations/th.csv +++ b/erpnext/translations/th.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,ประสบกา apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,บรรจุ สลิป (s) ยกเลิก apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,กระแสเงินสดจากการลงทุน apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,การขนส่งสินค้าและ การส่งต่อ ค่าใช้จ่าย -DocType: Material Request Item,Sales Order No,สั่งซื้อยอดขาย +DocType: Material Request Item,Sales Order,สั่งซื้อยอดขาย DocType: Item Group,Item Group Name,ชื่อกลุ่มสินค้า apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,ยึด apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,วัสดุการโอนเงินสำหรับการผลิต diff --git a/erpnext/translations/tr.csv b/erpnext/translations/tr.csv index 1153bd06592..3b17a30f548 100644 --- a/erpnext/translations/tr.csv +++ b/erpnext/translations/tr.csv @@ -1495,8 +1495,8 @@ DocType: Employee External Work History,Total Experience,Toplam Deneyim apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Ambalaj Makbuzları İptal Edildi apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Yatırım Nakit Akışı apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Navlun ve Sevkiyat Ücretleri -DocType: Material Request Item,Sales Order No,Satış Sipariş No -DocType: Material Request Item,Sales Order No,Satış Sipariş No +DocType: Material Request Item,Sales Order,Satış Sipariş No +DocType: Material Request Item,Sales Order,Satış Sipariş No DocType: Item Group,Item Group Name,Ürün Grup Adı DocType: Item Group,Item Group Name,Ürün Grup Adı apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Alınmış diff --git a/erpnext/translations/uk.csv b/erpnext/translations/uk.csv index 54384ce94fb..82678f1f5fd 100644 --- a/erpnext/translations/uk.csv +++ b/erpnext/translations/uk.csv @@ -1201,7 +1201,7 @@ DocType: Employee External Work History,Total Experience,Загальний до apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Упаковка ковзання (и) скасовується apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Потік грошових коштів від інвестиційної apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Вантажні та експедиторські Збори -DocType: Material Request Item,Sales Order No,Продажі Замовити Немає +DocType: Material Request Item,Sales Order,Продажі Замовити Немає DocType: Item Group,Item Group Name,Назва товару Група apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Взятий apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Передача матеріалів для виробництва diff --git a/erpnext/translations/ur.csv b/erpnext/translations/ur.csv index fdab335d49f..6170b73a12b 100644 --- a/erpnext/translations/ur.csv +++ b/erpnext/translations/ur.csv @@ -1199,7 +1199,7 @@ DocType: Employee External Work History,Total Experience,کل تجربہ apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,منسوخ پیکنگ پرچی (ے) apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,سرمایہ کاری سے کیش فلو apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,فریٹ فارورڈنگ اور چارجز -DocType: Material Request Item,Sales Order No,سیلز آرڈر نہیں +DocType: Material Request Item,Sales Order,سیلز آرڈر نہیں DocType: Item Group,Item Group Name,آئٹم گروپ کا نام apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,لیا apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,تیاری کے لئے کی منتقلی کی معدنیات diff --git a/erpnext/translations/vi.csv b/erpnext/translations/vi.csv index 623866b7a3c..ec6f5d7c387 100644 --- a/erpnext/translations/vi.csv +++ b/erpnext/translations/vi.csv @@ -1226,7 +1226,7 @@ DocType: Employee External Work History,Total Experience,Tổng số kinh nghi apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,Đóng gói trượt (s) bị hủy bỏ apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,Lưu chuyển tiền tệ từ đầu tư apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,Vận tải hàng hóa và chuyển tiếp phí -DocType: Material Request Item,Sales Order No,Không bán hàng đặt hàng +DocType: Material Request Item,Sales Order,Không bán hàng đặt hàng DocType: Item Group,Item Group Name,Mục Group Name apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,Lấy apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,Chuyển Vật liệu cho sản xuất diff --git a/erpnext/translations/zh-cn.csv b/erpnext/translations/zh-cn.csv index a4073d355bb..2d6fd4a8b40 100644 --- a/erpnext/translations/zh-cn.csv +++ b/erpnext/translations/zh-cn.csv @@ -1212,7 +1212,7 @@ DocType: Employee External Work History,Total Experience,总经验 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,装箱单( S)取消 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,从投资现金流 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,货运及转运费 -DocType: Material Request Item,Sales Order No,销售订单编号 +DocType: Material Request Item,Sales Order,销售订单编号 DocType: Item Group,Item Group Name,品目群组名称 apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,已经过 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,转移制造材料 diff --git a/erpnext/translations/zh-tw.csv b/erpnext/translations/zh-tw.csv index 5074cddda98..4a2f1469bcb 100644 --- a/erpnext/translations/zh-tw.csv +++ b/erpnext/translations/zh-tw.csv @@ -1225,7 +1225,7 @@ DocType: Employee External Work History,Total Experience,總經驗 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +261,Packing Slip(s) cancelled,包裝單( S)已取消 apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +29,Cash Flow from Investing,從投資現金流 apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +96,Freight and Forwarding Charges,貨運代理費 -DocType: Material Request Item,Sales Order No,銷售訂單號 +DocType: Material Request Item,Sales Order,銷售訂單號 DocType: Item Group,Item Group Name,項目群組名稱 apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Taken,拍攝 apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +86,Transfer Materials for Manufacture,轉移製造材料 From dddf42560fa23f0b3a447c4bcf62dac4f1a52b12 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Wed, 10 Feb 2016 13:09:09 +0530 Subject: [PATCH 09/15] Added code to update Material Request on Submission of Production Order --- .../doctype/purchase_order/purchase_order.py | 1 - .../production_order/production_order.json | 29 +++++- .../production_order/production_order.py | 14 ++- .../material_request/material_request.js | 62 ++----------- .../material_request/material_request.py | 92 +++++++++++-------- 5 files changed, 99 insertions(+), 99 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index caefe53ac3d..44fe7cf600a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -145,7 +145,6 @@ class PurchaseOrder(BuyingController): and frappe.db.get_value("Item", d.item_code, "is_stock_item") \ and d.warehouse and not d.delivered_by_supplier: item_wh_list.append([d.item_code, d.warehouse]) - for item_code, warehouse in item_wh_list: update_bin_qty(item_code, warehouse, { "ordered_qty": get_ordered_qty(item_code, warehouse) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index 997a6179e02..2ad2a3ba28f 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -928,7 +928,31 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "material_request_item", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Material Request Item", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -972,7 +996,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-01-21 04:30:33.561347", + "modified": "2016-02-08 04:36:35.071206", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Order", @@ -1021,5 +1045,6 @@ ], "read_only": 0, "read_only_onload": 0, + "sort_order": "ASC", "title_field": "production_item" } \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 59d371a7c1b..ead8105a923 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -152,17 +152,19 @@ class ProductionOrder(Document): frappe.throw(_("Work-in-Progress Warehouse is required before Submit")) if not self.fg_warehouse: frappe.throw(_("For Warehouse is required before Submit")) + frappe.db.set(self,'status', 'Submitted') self.make_time_logs() self.update_planned_qty() - + self.update_completed_qty_in_material_request() def on_cancel(self): self.validate_cancel() frappe.db.set(self,'status', 'Cancelled') - self.update_planned_qty() self.delete_time_logs() + self.update_planned_qty() + self.update_completed_qty_in_material_request() def validate_cancel(self): if self.status == "Stopped": @@ -178,6 +180,14 @@ class ProductionOrder(Document): update_bin_qty(self.production_item, self.fg_warehouse, { "planned_qty": get_planned_qty(self.production_item, self.fg_warehouse) }) + + if self.material_request: + mr_obj = frappe.get_doc("Material Request", self.material_request) + mr_obj.update_requested_qty([self.material_request_item]) + + def update_completed_qty_in_material_request(self): + if self.material_request: + frappe.get_doc("Material Request", self.material_request).update_completed_qty([self.material_request_item]) def set_production_order_operations(self): """Fetch operations from BOM and set in 'Production Order'""" diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 29968d8d68b..559b954963e 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -55,7 +55,7 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten if(doc.material_request_type === "Manufacture" && doc.status === "Submitted") cur_frm.add_custom_button(__("Production Order"), - this.make_production_order, __("Make")); + this.raise_production_orders, __("Make")); cur_frm.page.set_inner_btn_group_as_primary(__("Make")); @@ -172,61 +172,13 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten }, - make_production_order: function() { - var items = [] - $.each(cur_frm.doc["items"] || [], function(i, d) { - items.push(d.item_code); + raise_production_orders: function() { + frappe.call({ + method:"erpnext.stock.doctype.material_request.material_request.raise_production_orders", + args: { + "source_name": cur_frm.doc.name + } }); - var d = new frappe.ui.Dialog({ - title: __("Production Order"), - fields: [ - { - "fieldtype": "Link", - "label": __("Production Item"), - "fieldname": "item", - "options": "Item", - "reqd": 1, - "get_query": function() { - return { - "filters": [ - ['item_code', 'in', items], - ] - } - } - } - ] - - }); - - d.set_primary_action(__("Make"), function() { - frappe.call({ - method:"erpnext.stock.doctype.material_request.material_request.validate_production_item", - args: { - "item_code": d.get_values().item - }, - callback: function(r) { - if(!r.message) { - msgprint("Cannot create Production Order for selected Item.") - } - else { - frappe.call({ - method:"erpnext.stock.doctype.material_request.material_request.make_production_order", - args: { - "source_name": cur_frm.doc.name, - "item_code": d.get_values().item, - }, - callback: function(r) { - if(!r.exe) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - } - }); - } - } - }); - }); - d.show(); } }); diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index f7dee98b3b9..80ec589d469 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -7,8 +7,8 @@ from __future__ import unicode_literals import frappe -from frappe.utils import cstr, flt, getdate -from frappe import _ +from frappe.utils import cstr, flt, getdate, comma_and +from frappe import msgprint, _ from frappe.model.mapper import get_mapped_doc from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty from erpnext.controllers.buying_controller import BuyingController @@ -107,35 +107,41 @@ class MaterialRequest(BuyingController): frappe.db.set(self,'status','Cancelled') - def update_completed_qty(self, mr_items=None): + def update_completed_qty(self, mr_items=None, update_modified=True): if self.material_request_type == "Purchase": return if not mr_items: mr_items = [d.name for d in self.get("items")] - per_ordered = 0.0 for d in self.get("items"): if d.name in mr_items: - d.ordered_qty = flt(frappe.db.sql("""select sum(transfer_qty) - from `tabStock Entry Detail` where material_request = %s - and material_request_item = %s and docstatus = 1""", - (self.name, d.name))[0][0]) + if self.material_request_type in ("Material Issue", "Material Transfer"): + d.ordered_qty = flt(frappe.db.sql("""select sum(transfer_qty) + from `tabStock Entry Detail` where material_request = %s + and material_request_item = %s and docstatus = 1""", + (self.name, d.name))[0][0]) - if d.ordered_qty and d.ordered_qty > d.qty: - frappe.throw(_("The total Issue / Transfer quantity {0} in Material Request {1} cannot be greater than requested quantity {2} for Item {3}").format(d.ordered_qty, d.parent, d.qty, d.item_code)) + if d.ordered_qty and d.ordered_qty > d.qty: + frappe.throw(_("The total Issue / Transfer quantity {0} in Material Request {1} \ + cannot be greater than requested quantity {2} for Item {3}").format(d.ordered_qty, d.parent, d.qty, d.item_code)) + + elif self.material_request_type == "Manufacture": + d.ordered_qty = flt(frappe.db.sql("""select sum(qty) + from `tabProduction Order` where material_request = %s + and material_request_item = %s and docstatus = 1""", + (self.name, d.name))[0][0]) frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty) - - # note: if qty is 0, its row is still counted in len(self.get("items")) - # hence adding 1 to per_ordered - if (d.ordered_qty > d.qty) or not d.qty: - per_ordered += 1.0 - elif d.qty > 0: - per_ordered += flt(d.ordered_qty / flt(d.qty)) - - self.per_ordered = flt((per_ordered / flt(len(self.get("items")))) * 100.0, 2) - frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered) + + self._update_percent_field({ + "target_dt": "Material Request Item", + "target_parent_dt": self.doctype, + "target_parent_field": "per_ordered", + "target_ref_field": "qty", + "target_field": "ordered_qty", + "name": self.name, + }, update_modified) def update_requested_qty(self, mr_item_rows=None): """update requested qty (before ordered_qty is updated)""" @@ -329,25 +335,33 @@ def make_stock_entry(source_name, target_doc=None): return doclist - @frappe.whitelist() -def validate_production_item(item_code): - return frappe.db.get_value("Item", item_code, "is_pro_applicable") - -@frappe.whitelist() -def make_production_order(source_name, item_code): +def raise_production_orders(source_name): material_request= frappe.get_doc("Material Request", source_name) - prod_order = frappe.new_doc("Production Order") - prod_order.production_item = item_code - prod_order.qty = 0 + errors =[] + production_orders = [] for d in material_request.items: - if d.item_code == item_code: - prod_order.qty = d.qty - d.ordered_qty - prod_order.fg_warehouse = d.warehouse - prod_order.description = d.description - prod_order.stock_uom = d.uom - prod_order.expected_delivery_date = d.schedule_date - prod_order.sales_order = d.sales_order - prod_order.bom_no = get_item_details(item_code).bom_no - prod_order.material_request = material_request.name - return prod_order + if (d.qty - d.ordered_qty) >0 : + if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): + prod_order = frappe.new_doc("Production Order") + prod_order.production_item = d.item_code + prod_order.qty = d.qty - d.ordered_qty + prod_order.fg_warehouse = d.warehouse + prod_order.description = d.description + prod_order.stock_uom = d.uom + prod_order.expected_delivery_date = d.schedule_date + prod_order.sales_order = d.sales_order + prod_order.bom_no = get_item_details(d.item_code).bom_no + prod_order.material_request = material_request.name + prod_order.material_request_item = d.name + prod_order.planned_start_date = material_request.transaction_date + prod_order.save() + production_orders.append(prod_order.name) + else: + errors.append(d.item_code + " in Row " + cstr(d.idx)) + if production_orders: + message = ["""%s""" % \ + (p, p) for p in production_orders] + msgprint(_("Production Orders {0} created").format(comma_and(message))) + if errors: + msgprint(_("Could not Raise Production Orders for {0}").format(comma_and(errors))) \ No newline at end of file From 43114bab71c5ea65a9b9f65163c810801e7d5549 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Wed, 10 Feb 2016 13:10:25 +0530 Subject: [PATCH 10/15] renamed label of Quantity Requested for Purchase to Requested Quantity in Bin --- erpnext/stock/doctype/bin/bin.json | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/bin/bin.json b/erpnext/stock/doctype/bin/bin.json index 37fe0a47778..9eb3995cc98 100644 --- a/erpnext/stock/doctype/bin/bin.json +++ b/erpnext/stock/doctype/bin/bin.json @@ -26,6 +26,7 @@ "options": "Warehouse", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -51,6 +52,7 @@ "options": "Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -76,6 +78,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -101,6 +104,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -126,6 +130,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -144,13 +149,14 @@ "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Quantity Requested for Purchase", + "label": "Requested Quantity", "length": 0, "no_copy": 0, "oldfieldname": "indented_qty", "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -175,6 +181,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -199,6 +206,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -223,6 +231,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 1, "reqd": 0, @@ -248,6 +257,7 @@ "options": "UOM", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -272,6 +282,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 1, "reqd": 0, @@ -296,6 +307,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -320,6 +332,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -337,7 +350,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2015-11-16 06:29:42.363502", + "modified": "2016-02-10 02:39:45.738623", "modified_by": "Administrator", "module": "Stock", "name": "Bin", @@ -406,5 +419,6 @@ ], "read_only": 0, "read_only_onload": 0, - "search_fields": "item_code,warehouse" + "search_fields": "item_code,warehouse", + "sort_order": "ASC" } \ No newline at end of file From 877e2ebff8f459f82f80358b95e1ad3ff82a03e7 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 11 Feb 2016 12:06:31 +0530 Subject: [PATCH 11/15] Fixed Production PLanning Tool --- .../production_plan_item.json | 69 ++++++- .../__init__.py | 0 .../production_plan_material_request.json | 113 +++++++++++ .../production_plan_material_request.py | 10 + .../production_plan_sales_order.json | 12 +- .../production_planning_tool.json | 187 ++++++++++++++++-- .../production_planning_tool.py | 143 +++++++++++--- 7 files changed, 481 insertions(+), 53 deletions(-) create mode 100644 erpnext/manufacturing/doctype/production_plan_material_request/__init__.py create mode 100644 erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json create mode 100644 erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.py diff --git a/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json b/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json index 49d31c961c3..6596e234011 100644 --- a/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json +++ b/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json @@ -26,6 +26,7 @@ "options": "Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "150px", "read_only": 0, "report_hide": 0, @@ -53,6 +54,7 @@ "options": "BOM", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 0, "report_hide": 0, @@ -79,6 +81,7 @@ "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 0, "report_hide": 0, @@ -105,6 +108,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -121,7 +125,7 @@ "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, - "in_list_view": 1, + "in_list_view": 0, "label": "Sales Order", "length": 0, "no_copy": 0, @@ -130,6 +134,7 @@ "options": "Sales Order", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -141,19 +146,45 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "so_pending_qty", + "fieldname": "material_request", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Material Request", + "length": 0, + "no_copy": 0, + "options": "Material Request", + "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": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "pending_qty", "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 1, - "label": "SO Pending Qty", + "label": "Pending Qty", "length": 0, "no_copy": 0, "oldfieldname": "prevdoc_reqd_qty", "oldfieldtype": "Currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "100px", "read_only": 1, "report_hide": 0, @@ -180,6 +211,7 @@ "options": "Warehouse", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -205,6 +237,7 @@ "options": "UOM", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "80px", "read_only": 1, "report_hide": 0, @@ -231,6 +264,7 @@ "oldfieldtype": "Text", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "200px", "read_only": 1, "report_hide": 0, @@ -239,6 +273,30 @@ "set_only_once": 0, "unique": 0, "width": "200px" + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "material_request_item", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "material_request_item", + "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 } ], "hide_heading": 0, @@ -250,12 +308,13 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2015-11-16 06:29:52.572122", + "modified": "2016-02-10 07:08:38.461787", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Item", "owner": "Administrator", "permissions": [], "read_only": 0, - "read_only_onload": 0 + "read_only_onload": 0, + "sort_order": "ASC" } \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_plan_material_request/__init__.py b/erpnext/manufacturing/doctype/production_plan_material_request/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json new file mode 100644 index 00000000000..0522e7a3473 --- /dev/null +++ b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json @@ -0,0 +1,113 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "hash", + "creation": "2016-02-10 05:09:11.983251", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "material_request", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Material Request", + "length": 0, + "no_copy": 0, + "oldfieldname": "prevdoc_docname", + "oldfieldtype": "Data", + "options": "Material Request", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "150px", + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "150px" + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "col_break1", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 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": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "material_request_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Material Request Date", + "length": 0, + "no_copy": 0, + "oldfieldname": "document_date", + "oldfieldtype": "Date", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "120px", + "read_only": 1, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "120px" + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2016-02-10 05:13:07.529068", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "Production Plan Material Request", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "ASC" +} \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.py b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.py new file mode 100644 index 00000000000..44786f8388d --- /dev/null +++ b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class ProductionPlanMaterialRequest(Document): + pass diff --git a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json index d7fdea5a0ae..bed893f9210 100644 --- a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json +++ b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json @@ -26,6 +26,7 @@ "options": "Sales Order", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "150px", "read_only": 0, "report_hide": 0, @@ -45,13 +46,14 @@ "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 1, - "label": "SO Date", + "label": "Salse Order Date", "length": 0, "no_copy": 0, "oldfieldname": "document_date", "oldfieldtype": "Date", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "120px", "read_only": 1, "report_hide": 0, @@ -76,6 +78,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -99,6 +102,7 @@ "options": "Customer", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "150px", "read_only": 1, "report_hide": 0, @@ -124,6 +128,7 @@ "options": "Company:company:default_currency", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "120px", "read_only": 1, "report_hide": 0, @@ -143,12 +148,13 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2015-11-16 06:29:52.629618", + "modified": "2016-02-10 05:13:30.301297", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Sales Order", "owner": "Administrator", "permissions": [], "read_only": 0, - "read_only_onload": 0 + "read_only_onload": 0, + "sort_order": "ASC" } \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json index e54b168776f..3f047138fd2 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json @@ -12,17 +12,21 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "description": "Select Sales Orders from which you want to create Production Orders.", - "fieldname": "select_sales_orders", - "fieldtype": "Section Break", + "default": "Sales Order", + "fieldname": "plan_using", + "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Select Sales Orders", + "label": "Plan Using", + "length": 0, "no_copy": 0, + "options": "Sales Order\nMaterial Request", "permlevel": 0, + "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -34,22 +38,26 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "column_break0", - "fieldtype": "Column Break", + "depends_on": "", + "description": "", + "fieldname": "filters", + "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, + "label": "Filters", + "length": 0, "no_copy": 0, "permlevel": 0, "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, - "width": "50%" + "unique": 0 }, { "allow_on_submit": 0, @@ -61,11 +69,13 @@ "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 1, - "label": "Filter based on item", + "label": "Item", + "length": 0, "no_copy": 0, "options": "Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -77,17 +87,20 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "depends_on": "eval: doc.plan_using == \"Sales Order\"", "fieldname": "customer", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 1, - "label": "Filter based on customer", + "label": "Customer", + "length": 0, "no_copy": 0, "options": "Customer", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -99,6 +112,33 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "depends_on": "eval: doc.plan_using == \"Material Request\"", + "fieldname": "warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Warehouse", + "length": 0, + "no_copy": 0, + "options": "Warehouse", + "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": 0, + "bold": 0, + "collapsible": 0, + "depends_on": "eval: doc.plan_using == \"Sales Order\"", "fieldname": "company", "fieldtype": "Link", "hidden": 0, @@ -106,13 +146,15 @@ "in_filter": 0, "in_list_view": 1, "label": "Company", + "length": 0, "no_copy": 0, "options": "Company", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -127,9 +169,11 @@ "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -149,9 +193,11 @@ "in_filter": 0, "in_list_view": 0, "label": "From Date", + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -170,9 +216,11 @@ "in_filter": 0, "in_list_view": 0, "label": "To Date", + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -184,16 +232,19 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "depends_on": "eval: doc.plan_using == \"Sales Order\"", "fieldname": "section_break1", "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, + "length": 0, "no_copy": 0, - "options": "Simple", + "options": "", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -213,10 +264,12 @@ "in_filter": 0, "in_list_view": 0, "label": "Get Sales Orders", + "length": 0, "no_copy": 0, "options": "get_open_sales_orders", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -235,10 +288,87 @@ "in_filter": 0, "in_list_view": 0, "label": "Sales Orders", + "length": 0, "no_copy": 0, "options": "Production Plan Sales Order", "permlevel": 0, "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": 0, + "bold": 0, + "collapsible": 0, + "depends_on": "eval: doc.plan_using == \"Material Request\"", + "fieldname": "section_break_16", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 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": 0, + "bold": 0, + "collapsible": 0, + "description": "Pull Material Request of type Manufacture based on the above criteria", + "fieldname": "get_material_request", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Get Material Request", + "length": 0, + "no_copy": 0, + "options": "get_pending_material_requests", + "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": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "material_requests", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Material Requests", + "length": 0, + "no_copy": 0, + "options": "Production Plan Material Request", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -257,9 +387,11 @@ "in_filter": 0, "in_list_view": 0, "label": "Select Items", + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -271,17 +403,19 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "get_items_from_so", + "fieldname": "get_items", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Get Items From Sales Orders", + "label": "Get Items", + "length": 0, "no_copy": 0, - "options": "get_items_from_so", + "options": "get_items", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -302,9 +436,11 @@ "in_filter": 0, "in_list_view": 0, "label": "Use Multi-Level BOM", + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -323,10 +459,12 @@ "in_filter": 0, "in_list_view": 0, "label": "Items", + "length": 0, "no_copy": 0, "options": "Production Plan Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -346,9 +484,11 @@ "in_filter": 0, "in_list_view": 0, "label": "Production Orders", + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -368,10 +508,12 @@ "in_filter": 0, "in_list_view": 0, "label": "Create Production Orders", + "length": 0, "no_copy": 0, "options": "raise_production_order", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -383,6 +525,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "depends_on": "", "fieldname": "sb5", "fieldtype": "Section Break", "hidden": 0, @@ -390,9 +533,11 @@ "in_filter": 0, "in_list_view": 0, "label": "Material Requirement", + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -411,10 +556,12 @@ "in_filter": 0, "in_list_view": 0, "label": "Material Request For Warehouse", + "length": 0, "no_copy": 0, "options": "Warehouse", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -434,10 +581,12 @@ "in_filter": 0, "in_list_view": 0, "label": "Create Material Requests", + "length": 0, "no_copy": 0, "options": "", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -457,9 +606,11 @@ "in_filter": 0, "in_list_view": 0, "label": "Download Materials Required", + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -477,7 +628,8 @@ "is_submittable": 0, "issingle": 1, "istable": 0, - "modified": "2015-06-05 11:44:31.629114", + "max_attachments": 0, + "modified": "2016-02-10 07:28:50.298538", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Planning Tool", @@ -505,5 +657,6 @@ } ], "read_only": 1, - "read_only_onload": 0 + "read_only_onload": 0, + "sort_order": "ASC" } \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index 67eab40ddce..4be22e40807 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -33,6 +33,9 @@ class ProductionPlanningTool(Document): def clear_so_table(self): self.set('sales_orders', []) + def clear_mr_table(self): + self.set('material_requests', []) + def clear_item_table(self): self.set('items', []) @@ -88,19 +91,59 @@ class ProductionPlanningTool(Document): pp_so.sales_order_date = cstr(r['transaction_date']) pp_so.customer = cstr(r['customer']) pp_so.grand_total = flt(r['base_grand_total']) + + def get_pending_material_requests(self): + """ Pull Material Requests that are pending based on criteria selected""" + mr_filter = item_filter = "" + if self.from_date: + mr_filter += " and mr.transaction_date >= %(from_date)s" + if self.to_date: + mr_filter += " and mr.transaction_date <= %(to_date)s" + if self.warehouse: + mr_filter += " and mr_item.warehouse = %(warehouse)s" + + if self.fg_item: + item_filter += " and item.name = %(item)s" - def get_items_from_so(self): - """ Pull items from Sales Order, only proction item - and subcontracted item will be pulled from Packing item - and add items in the table - """ - items = self.get_items() - self.add_items(items) + pending_mr = frappe.db.sql(""" + select distinct mr.name, mr.transaction_date + from `tabMaterial Request` mr, `tabMaterial Request Item` mr_item + where mr_item.parent = mr.name + and mr.material_request_type = "Manufacture" + and mr.docstatus = 1 + and mr_item.qty > mr_item.ordered_qty {0} + and (exists (select name from `tabItem` item where item.name=mr_item.item_code + and (item.is_pro_applicable = 1 or item.is_sub_contracted_item = 1 {1}))) + """.format(mr_filter, item_filter), { + "from_date": self.from_date, + "to_date": self.to_date, + "warehouse": self.warehouse, + "item": self.fg_item + }, as_dict=1) + + self.add_mr_in_table(pending_mr) + + def add_mr_in_table(self, pending_mr): + """ Add Material Requests in the table""" + self.clear_mr_table() + + mr_list = [d.material_request for d in self.get('material_requests')] + for r in pending_mr: + if cstr(r['name']) not in mr_list: + mr = self.append('material_requests', {}) + mr.material_request = r['name'] + mr.material_request_date = cstr(r['transaction_date']) def get_items(self): + if self.plan_using == "Sales Order": + self.get_so_items() + elif self.plan_using == "Material Request": + self.get_mr_items() + + def get_so_items(self): so_list = filter(None, [d.sales_order for d in self.get('sales_orders')]) if not so_list: - msgprint(_("Please enter sales order in the above table")) + msgprint(_("Please enter Sales Orders in the above table")) return [] item_condition = "" @@ -131,24 +174,49 @@ class ProductionPlanningTool(Document): or item.is_sub_contracted_item = 1)) %s""" % \ (", ".join(["%s"] * len(so_list)), item_condition), tuple(so_list), as_dict=1) - return items + packed_items + self.add_items(items + packed_items) + + def get_mr_items(self): + mr_list = filter(None, [d.material_request for d in self.get('material_requests')]) + if not mr_list: + msgprint(_("Please enter Material Requests in the above table")) + return [] + item_condition = "" + if self.fg_item: + item_condition = ' and mr_item.item_code = "' + self.fg_item + '"' + + items = frappe.db.sql("""select distinct parent, name, item_code, warehouse, + (qty - ordered_qty) as pending_qty + from `tabMaterial Request Item` mr_item + where parent in (%s) and docstatus = 1 and qty > ordered_qty + and exists (select * from `tabItem` item where item.name=mr_item.item_code + and (item.is_pro_applicable = 1 + or item.is_sub_contracted_item = 1)) %s""" % \ + (", ".join(["%s"] * len(mr_list)), item_condition), tuple(mr_list), as_dict=1) + + self.add_items(items) + def add_items(self, items): self.clear_item_table() - for p in items: item_details = get_item_details(p['item_code']) pi = self.append('items', {}) - pi.sales_order = p['parent'] pi.warehouse = p['warehouse'] pi.item_code = p['item_code'] pi.description = item_details and item_details.description or '' pi.stock_uom = item_details and item_details.stock_uom or '' pi.bom_no = item_details and item_details.bom_no or '' - pi.so_pending_qty = flt(p['pending_qty']) pi.planned_qty = flt(p['pending_qty']) - + pi.pending_qty = flt(p['pending_qty']) + + if self.plan_using == "Sales Order": + pi.sales_order = p['parent'] + elif self.plan_using == "Material Request": + pi.material_request = p['parent'] + pi.material_request_item = p['name'] + def validate_data(self): self.validate_company() for d in self.get('items'): @@ -181,21 +249,38 @@ class ProductionPlanningTool(Document): item_dict, bom_dict = {}, {} for d in self.get("items"): if d.bom_no: - bom_dict.setdefault(d.bom_no, []).append([d.sales_order, flt(d.planned_qty)]) - if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): - item_dict[(d.item_code, d.sales_order, d.warehouse)] = { - "production_item" : d.item_code, - "sales_order" : d.sales_order, - "qty" : flt(item_dict.get((d.item_code, d.sales_order, d.warehouse), - {}).get("qty")) + flt(d.planned_qty), - "bom_no" : d.bom_no, - "description" : d.description, - "stock_uom" : d.stock_uom, - "company" : self.company, - "wip_warehouse" : "", - "fg_warehouse" : d.warehouse, - "status" : "Draft", - } + if self.plan_using == "Sales Order": + bom_dict.setdefault(d.bom_no, []).append([d.sales_order, flt(d.planned_qty)]) + if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): + item_dict[(d.item_code, d.sales_order, d.warehouse)] = { + "production_item" : d.item_code, + "sales_order" : d.sales_order, + "qty" : flt(item_dict.get((d.item_code, d.sales_order, d.warehouse), + {}).get("qty")) + flt(d.planned_qty), + "bom_no" : d.bom_no, + "description" : d.description, + "stock_uom" : d.stock_uom, + "company" : self.company, + "wip_warehouse" : "", + "fg_warehouse" : d.warehouse, + "status" : "Draft", + } + elif self.plan_using == "Material Request": + bom_dict.setdefault(d.bom_no, []).append([d.material_request_item, flt(d.planned_qty)]) + if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): + item_dict[(d.item_code, d.material_request_item, d.warehouse)] = { + "production_item" : d.item_code, + "material_request" : d.material_request, + "material_request_item" : d.material_request_item, + "qty" : d.planned_qty, + "bom_no" : d.bom_no, + "description" : d.description, + "stock_uom" : d.stock_uom, + "company" : self.company, + "wip_warehouse" : "", + "fg_warehouse" : d.warehouse, + "status" : "Draft", + } return bom_dict, item_dict def create_production_order(self, items): @@ -329,6 +414,8 @@ class ProductionPlanningTool(Document): for item_details in so_item_qty: if requested_qty: sales_order = item_details[4] or "No Sales Order" + if self.plan_using == "Material Request": + sales_order = "No Sales Order" if requested_qty <= item_details[0]: adjusted_qty = requested_qty else: From fd9dc5e9f5bb8da881bd9e7c10190448f269ea3e Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Fri, 12 Feb 2016 14:32:23 +0530 Subject: [PATCH 12/15] refactor code in Production Planning Tool --- .../production_plan_item.json | 77 ++++--- .../production_plan_material_request.json | 5 +- .../production_plan_sales_order.json | 16 +- .../production_planning_tool.js | 19 +- .../production_planning_tool.json | 4 +- .../production_planning_tool.py | 207 +++++++++--------- 6 files changed, 173 insertions(+), 155 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json b/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json index 6596e234011..6138435ae77 100644 --- a/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json +++ b/erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json @@ -116,6 +116,54 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "column_break_6", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 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": 0, + "bold": 0, + "collapsible": 0, + "description": "Reserved Warehouse in Sales Order / Finished Goods Warehouse", + "fieldname": "warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Warehouse", + "length": 0, + "no_copy": 0, + "options": "Warehouse", + "permlevel": 0, + "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": 0, "bold": 0, @@ -160,7 +208,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -194,31 +242,6 @@ "unique": 0, "width": "100px" }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "description": "Reserved Warehouse in Sales Order / Finished Goods Warehouse", - "fieldname": "warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Warehouse", - "length": 0, - "no_copy": 0, - "options": "Warehouse", - "permlevel": 0, - "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": 0, "bold": 0, @@ -308,7 +331,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-02-10 07:08:38.461787", + "modified": "2016-02-11 05:08:19.492712", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Item", diff --git a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json index 0522e7a3473..1a7c89485cd 100644 --- a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json +++ b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json @@ -66,7 +66,7 @@ "bold": 0, "collapsible": 0, "fieldname": "material_request_date", - "fieldtype": "Date", + "fieldtype": "Read Only", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -76,6 +76,7 @@ "no_copy": 0, "oldfieldname": "document_date", "oldfieldtype": "Date", + "options": "material_request.transaction_date", "permlevel": 0, "precision": "", "print_hide": 0, @@ -99,7 +100,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-02-10 05:13:07.529068", + "modified": "2016-02-11 04:21:34.372317", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Material Request", diff --git a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json index bed893f9210..85bf7d6d60a 100644 --- a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json +++ b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json @@ -41,7 +41,7 @@ "bold": 0, "collapsible": 0, "fieldname": "sales_order_date", - "fieldtype": "Date", + "fieldtype": "Read Only", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -51,11 +51,12 @@ "no_copy": 0, "oldfieldname": "document_date", "oldfieldtype": "Date", + "options": "sales_order.transaction_date", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, "print_width": "120px", - "read_only": 1, + "read_only": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -91,7 +92,7 @@ "bold": 0, "collapsible": 0, "fieldname": "customer", - "fieldtype": "Link", + "fieldtype": "Read Only", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -99,7 +100,7 @@ "label": "Customer", "length": 0, "no_copy": 0, - "options": "Customer", + "options": "sales_order.customer", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -116,8 +117,9 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "default": "", "fieldname": "grand_total", - "fieldtype": "Currency", + "fieldtype": "Read Only", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -125,7 +127,7 @@ "label": "Grand Total", "length": 0, "no_copy": 0, - "options": "Company:company:default_currency", + "options": "sales_order.base_grand_total", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -148,7 +150,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-02-10 05:13:30.301297", + "modified": "2016-02-11 04:17:42.849873", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Sales Order", diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js index 15c4245fe5e..3fa1160d7e4 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js @@ -5,24 +5,25 @@ frappe.require("assets/erpnext/js/utils.js"); cur_frm.cscript.onload = function(doc, cdt, cdn) { cur_frm.set_value("company", frappe.defaults.get_user_default("Company")) - cur_frm.set_value("use_multi_level_bom", 1) } cur_frm.cscript.refresh = function(doc) { cur_frm.disable_save(); } -cur_frm.cscript.sales_order = function(doc,cdt,cdn) { - var d = locals[cdt][cdn]; - if (d.sales_order) { - return get_server_fields('get_so_details', d.sales_order, 'sales_orders', doc, cdt, cdn, 1); - } -} - cur_frm.cscript.item_code = function(doc,cdt,cdn) { var d = locals[cdt][cdn]; if (d.item_code) { - return get_server_fields('get_item_details', d.item_code, 'items', doc, cdt, cdn, 1); + frappe.call({ + method: "erpnext.manufacturing.doctype.production_order.production_order.get_item_details", + args: { + "item" : d.item_code + }, + callback: function(r) { + $.extend(d, r.message); + refresh_field("items"); + } + }); } } diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json index 3f047138fd2..19b5fd97845 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json @@ -510,7 +510,7 @@ "label": "Create Production Orders", "length": 0, "no_copy": 0, - "options": "raise_production_order", + "options": "raise_production_orders", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -629,7 +629,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-02-10 07:28:50.298538", + "modified": "2016-02-11 06:18:45.077263", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Planning Tool", diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index 4be22e40807..bec97d1c03c 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -16,28 +16,8 @@ class ProductionPlanningTool(Document): super(ProductionPlanningTool, self).__init__(arg1, arg2) self.item_dict = {} - def get_so_details(self, so): - """Pull other details from so""" - so = frappe.db.sql("""select transaction_date, customer, base_grand_total - from `tabSales Order` where name = %s""", so, as_dict = 1) - ret = { - 'sales_order_date': so and so[0]['transaction_date'] or '', - 'customer' : so[0]['customer'] or '', - 'grand_total': so[0]['base_grand_total'] - } - return ret - - def get_item_details(self, item_code): - return get_item_details(item_code) - - def clear_so_table(self): - self.set('sales_orders', []) - - def clear_mr_table(self): - self.set('material_requests', []) - - def clear_item_table(self): - self.set('items', []) + def clear_table(self, table_name): + self.set(table_name, []) def validate_company(self): if not self.company: @@ -81,7 +61,7 @@ class ProductionPlanningTool(Document): def add_so_in_table(self, open_so): """ Add sales orders in the table""" - self.clear_so_table() + self.clear_table("sales_orders") so_list = [d.sales_order for d in self.get('sales_orders')] for r in open_so: @@ -125,7 +105,7 @@ class ProductionPlanningTool(Document): def add_mr_in_table(self, pending_mr): """ Add Material Requests in the table""" - self.clear_mr_table() + self.clear_table("material_requests") mr_list = [d.material_request for d in self.get('material_requests')] for r in pending_mr: @@ -199,7 +179,7 @@ class ProductionPlanningTool(Document): def add_items(self, items): - self.clear_item_table() + self.clear_table("items") for p in items: item_details = get_item_details(p['item_code']) pi = self.append('items', {}) @@ -220,97 +200,108 @@ class ProductionPlanningTool(Document): def validate_data(self): self.validate_company() for d in self.get('items'): - validate_bom_no(d.item_code, d.bom_no) + if not d.bom_no: + frappe.throw(_("Please select BOM for Item in Row {0}".format(d.idx))) + else: + validate_bom_no(d.item_code, d.bom_no) + if not flt(d.planned_qty): frappe.throw(_("Please enter Planned Qty for Item {0} at row {1}").format(d.item_code, d.idx)) - def raise_production_order(self): + def raise_production_orders(self): """It will raise production order (Draft) for all distinct FG items""" self.validate_data() from erpnext.utilities.transaction_base import validate_uom_is_integer validate_uom_is_integer(self, "stock_uom", "planned_qty") - items = self.get_distinct_items_and_boms()[1] - pro = self.create_production_order(items) - if pro: - pro = ["""%s""" % \ - (p, p) for p in pro] - msgprint(_("{0} created").format(comma_and(pro))) + items = self.get_production_items() + + pro_list = [] + frappe.flags.mute_messages = True + + for key in items: + production_order = self.create_production_order(items[key]) + if production_order: + pro_list.append(production_order) + + frappe.flags.mute_messages = False + + if pro_list: + pro_list = ["""%s""" % \ + (p, p) for p in pro_list] + msgprint(_("{0} created").format(comma_and(pro_list))) else : msgprint(_("No Production Orders created")) - def get_distinct_items_and_boms(self): - """ Club similar BOM and item for processing + def get_production_items(self): + item_dict = {} + for d in self.get("items"): + item_details= { + "production_item" : d.item_code, + "sales_order" : d.sales_order, + "material_request" : d.material_request, + "material_request_item" : d.material_request_item, + "bom_no" : d.bom_no, + "description" : d.description, + "stock_uom" : d.stock_uom, + "company" : self.company, + "wip_warehouse" : "", + "fg_warehouse" : d.warehouse, + "status" : "Draft", + } + + """ Club similar BOM and item for processing in case of Sales Orders """ + if self.plan_using == "Sales Order": + item_details.update({ + "qty":flt(item_dict.get((d.item_code, d.sales_order, d.warehouse),{}) + .get("qty")) + flt(d.planned_qty) + }) + item_dict[(d.item_code, d.sales_order, d.warehouse)] = item_details + + elif self.plan_using == "Material Request": + item_details.update({ + "qty": d.planned_qty + }) + item_dict[(d.item_code, d.material_request_item, d.warehouse)] = item_details + + return item_dict + + def create_production_order(self, item_dict): + """Create production order. Called from Production Planning Tool""" + from erpnext.manufacturing.doctype.production_order.production_order import OverProductionError, get_default_warehouse + warehouse = get_default_warehouse() + pro = frappe.new_doc("Production Order") + pro.update(item_dict) + pro.set_production_order_operations() + if warehouse: + pro.wip_warehouse = warehouse.get('wip_warehouse') + if not pro.fg_warehouse: + pro.fg_warehouse = warehouse.get('fg_warehouse') + + try: + pro.insert() + return pro.name + except OverProductionError: + pass + + def get_so_wise_planned_qty(self): + """ bom_dict { bom_no: ['sales_order', 'qty'] } """ - item_dict, bom_dict = {}, {} + bom_dict = {} for d in self.get("items"): - if d.bom_no: - if self.plan_using == "Sales Order": - bom_dict.setdefault(d.bom_no, []).append([d.sales_order, flt(d.planned_qty)]) - if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): - item_dict[(d.item_code, d.sales_order, d.warehouse)] = { - "production_item" : d.item_code, - "sales_order" : d.sales_order, - "qty" : flt(item_dict.get((d.item_code, d.sales_order, d.warehouse), - {}).get("qty")) + flt(d.planned_qty), - "bom_no" : d.bom_no, - "description" : d.description, - "stock_uom" : d.stock_uom, - "company" : self.company, - "wip_warehouse" : "", - "fg_warehouse" : d.warehouse, - "status" : "Draft", - } - elif self.plan_using == "Material Request": - bom_dict.setdefault(d.bom_no, []).append([d.material_request_item, flt(d.planned_qty)]) - if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): - item_dict[(d.item_code, d.material_request_item, d.warehouse)] = { - "production_item" : d.item_code, - "material_request" : d.material_request, - "material_request_item" : d.material_request_item, - "qty" : d.planned_qty, - "bom_no" : d.bom_no, - "description" : d.description, - "stock_uom" : d.stock_uom, - "company" : self.company, - "wip_warehouse" : "", - "fg_warehouse" : d.warehouse, - "status" : "Draft", - } - return bom_dict, item_dict - - def create_production_order(self, items): - """Create production order. Called from Production Planning Tool""" - from erpnext.manufacturing.doctype.production_order.production_order import OverProductionError, get_default_warehouse - warehouse = get_default_warehouse() - pro_list = [] - for key in items: - pro = frappe.new_doc("Production Order") - pro.update(items[key]) - pro.set_production_order_operations() - if warehouse: - pro.wip_warehouse = warehouse.get('wip_warehouse') - if not pro.fg_warehouse: - pro.fg_warehouse = warehouse.get('fg_warehouse') - frappe.flags.mute_messages = True - - try: - pro.insert() - pro_list.append(pro.name) - except OverProductionError: - pass - - frappe.flags.mute_messages = False - return pro_list - + if self.plan_using == "Sales Order": + bom_dict.setdefault(d.bom_no, []).append({d.sales_order: flt(d.planned_qty)}) + elif self.plan_using == "Material Request": + bom_dict.setdefault(d.bom_no, []).append({d.material_request_item: flt(d.planned_qty)}) + def download_raw_materials(self): """ Create csv data for required raw material to produce finished goods""" self.validate_data() - bom_dict = self.get_distinct_items_and_boms()[0] + bom_dict = self.get_so_wise_planned_qty() self.get_raw_materials(bom_dict) return self.get_csv() @@ -389,7 +380,7 @@ class ProductionPlanningTool(Document): if not self.purchase_request_for_warehouse: frappe.throw(_("Please enter Warehouse for which Material Request will be raised")) - bom_dict = self.get_distinct_items_and_boms()[0] + bom_dict = self.get_so_wise_planned_qty() self.get_raw_materials(bom_dict) if self.item_dict: @@ -445,12 +436,12 @@ class ProductionPlanningTool(Document): def insert_purchase_request(self): items_to_be_requested = self.get_requested_items() - purchase_request_list = [] + material_request_list = [] if items_to_be_requested: for item in items_to_be_requested: item_wrapper = frappe.get_doc("Item", item) - pr_doc = frappe.new_doc("Material Request") - pr_doc.update({ + material_request = frappe.new_doc("Material Request") + material_request.update({ "transaction_date": nowdate(), "status": "Draft", "company": self.company, @@ -458,7 +449,7 @@ class ProductionPlanningTool(Document): "material_request_type": "Purchase" }) for sales_order, requested_qty in items_to_be_requested[item].items(): - pr_doc.append("items", { + material_request.append("items", { "doctype": "Material Request Item", "__islocal": 1, "item_code": item, @@ -473,13 +464,13 @@ class ProductionPlanningTool(Document): "sales_order": sales_order if sales_order!="No Sales Order" else None }) - pr_doc.flags.ignore_permissions = 1 - pr_doc.submit() - purchase_request_list.append(pr_doc.name) + material_request.flags.ignore_permissions = 1 + material_request.submit() + material_request_list.append(material_request.name) - if purchase_request_list: - pur_req = ["""%s""" % \ - (p, p) for p in purchase_request_list] - msgprint(_("Material Requests {0} created").format(comma_and(pur_req))) + if material_request_list: + message = ["""%s""" % \ + (p, p) for p in material_request_list] + msgprint(_("Material Requests {0} created").format(comma_and(message))) else: msgprint(_("Nothing to request")) From d5e15eaadfdfb05292219fcb0453dc0e790b6971 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 16 Feb 2016 15:41:43 +0530 Subject: [PATCH 13/15] Added test cases --- .../erpnext/material-request-workflow.jpg | Bin 11600 -> 37471 bytes .../models/stock/material_request_item.html | 50 +++++++----------- .../material_request/material_request.py | 4 +- .../material_request/test_material_request.py | 20 +++++++ .../material_request/test_records.json | 21 ++++++++ 5 files changed, 62 insertions(+), 33 deletions(-) diff --git a/erpnext/docs/assets/old_images/erpnext/material-request-workflow.jpg b/erpnext/docs/assets/old_images/erpnext/material-request-workflow.jpg index 6846fa5baac84ed2655008cb9a2f03e2b3c662e1..c462e209f1a1b0331d39ed382541e866370c4c1a 100644 GIT binary patch literal 37471 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

|cmcq}CcKr&XYI_UHsl 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 diff --git a/erpnext/docs/current/models/stock/material_request_item.html b/erpnext/docs/current/models/stock/material_request_item.html index 2988065b2a5..d1d8f6fbcab 100644 --- a/erpnext/docs/current/models/stock/material_request_item.html +++ b/erpnext/docs/current/models/stock/material_request_item.html @@ -123,30 +123,16 @@

7 image - Attach + Attach Image Image
8image_view - Image - Image View - - -
image
-
98 quantity_and_warehouse Section Break
109 qty Float
1110 uom Link
1211 warehouse Link
1312 col_break2 Column Break
1413 schedule_date Date
1514 more_info Section Break
1615 item_group Link
1716 brand Link
1817 lead_time_date Date
1918 sales_order Link
2019 col_break3 Column Break
2120 min_order_qty Float
2221 projected_qty Float
2322 ordered_qty Float
2423 page_break Check