def raise_production_orders(material_request): mr= frappe.get_doc("Material Request", material_request) errors =[] production_orders = [] 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") 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 = mr.name prod_order.material_request_item = d.name prod_order.planned_start_date = mr.transaction_date prod_order.company = mr.company prod_order.save() production_orders.append(prod_order.name) else: errors.append(d.item_code + " in Row " + cstr(d.idx)) if production_orders: message = ["""<a href="#Form/Production Order/%s" target="_blank">%s</a>""" % \ (p, p) for p in production_orders] msgprint(_("The following Production Orders were created:" + '\n' + new_line_sep(message))) if errors: msgprint(_("Productions Orders cannot be raised for:" + '\n' + new_line_sep(errors))) return production_orders
def raise_production_orders(material_request): mr= frappe.get_doc("Material Request", material_request) errors =[] production_orders = [] default_wip_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_wip_warehouse") for d in mr.items: if (d.qty - d.ordered_qty) >0: if frappe.db.get_value("BOM", {"item": d.item_code, "is_default": 1}): 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.wip_warehouse = default_wip_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 = mr.name prod_order.material_request_item = d.name prod_order.planned_start_date = mr.transaction_date prod_order.company = mr.company prod_order.requested_for = mr.requested_by prod_order.save() production_orders.append(prod_order.name) else: errors.append(d.item_code + " in Row " + cstr(d.idx)) if production_orders: message = ["""<a href="#Form/Production Order/%s" target="_blank">%s</a>""" % \ (p, p) for p in production_orders] msgprint(_("The following Production Orders were created:" + '\n' + new_line_sep(message))) if errors: msgprint(_("Productions Orders cannot be raised for:" + '\n' + new_line_sep(errors))) return production_orders
def raise_production_orders(material_request): mr= frappe.get_doc("Material Request", material_request) errors =[] production_orders = [] default_wip_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_wip_warehouse") for d in mr.items: if (d.qty - d.ordered_qty) >0: if frappe.db.get_value("BOM", {"item": d.item_code, "is_default": 1}): 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.wip_warehouse = default_wip_warehouse prod_order.description = d.description prod_order.stock_uom = d.stock_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 = mr.name prod_order.material_request_item = d.name prod_order.planned_start_date = mr.transaction_date prod_order.company = mr.company prod_order.save() production_orders.append(prod_order.name) else: errors.append(_("Row {0}: Bill of Materials not found for the Item {1}").format(d.idx, d.item_code)) if production_orders: message = ["""<a href="#Form/Production Order/%s" target="_blank">%s</a>""" % \ (p, p) for p in production_orders] msgprint(_("The following Production Orders were created:") + '\n' + new_line_sep(message)) if errors: frappe.throw(_("Productions Orders cannot be raised for:") + '\n' + new_line_sep(errors)) return production_orders
def raise_production_orders(material_request): mr = frappe.get_doc("Material Request", material_request) errors = [] production_orders = [] from erpnext.manufacturing.doctype.production_order.production_order import OverProductionError, get_default_warehouse warehouse = get_default_warehouse() # 2016-11-07 - JDLP for d in mr.items: if (d.qty - d.ordered_qty) > 0: if frappe.db.get_value("BOM", { "item": d.item_code, "is_default": 1 }): prod_order = frappe.new_doc("Production Order") prod_order.production_item = d.item_code prod_order.qty = d.qty - d.ordered_qty prod_order.sales_order = d.sales_order prod_order.sales_order_item = d.sales_order_item prod_order.fg_warehouse = d.warehouse prod_order.source_warehouse = frappe.db.get_single_value( "Manufacturing Settings", "default_raw_material_warehouse") prod_order.description = d.description prod_order.stock_uom = d.uom prod_order.expected_delivery_date = d.schedule_date prod_order.bom_no = get_item_details(d.item_code).bom_no prod_order.material_request = mr.name prod_order.material_request_item = d.name prod_order.planned_start_date = mr.transaction_date prod_order.company = mr.company prod_order.batch_no = d.batch_no # 2016-11-07 - JDLP prod_order.wip_warehouse = warehouse.get( 'wip_warehouse') # 2016-11-07 - JDLP prod_order.status = "Draft" prod_order.project = frappe.db.get_value( "Sales Order", d.sales_order, "project") prod_order.reference_client = frappe.db.get_value( "Sales Order", d.sales_order, "po_no") prod_order.customer = frappe.db.get_value( "Sales Order", d.sales_order, "customer") #prod_order.save() prod_order = set_production_order_materials_and_operations( prod_order.bom_no, prod_order) prod_order.save() production_orders.append(prod_order.name) else: errors.append(d.item_code + " in Row " + cstr(d.idx)) if production_orders: message = ["""<a href="#Form/Production Order/%s" target="_blank">%s</a>""" % \ (p, p) for p in production_orders] msgprint( _("The following Production Orders were created:" + '\n' + new_line_sep(message))) if errors: msgprint( _("Productions Orders cannot be raised for:" + '\n' + new_line_sep(errors))) return production_orders
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'])
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"])
def add_items(self, items): self.clear_table("items") for p in items: item_details = get_item_details(p['item_code']) pi = self.append('items', {}) 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.planned_qty = flt(p['pending_qty']) pi.pending_qty = flt(p['pending_qty']) if self.get_items_from == "Sales Order": pi.sales_order = p['parent'] elif self.get_items_from == "Material Request": pi.material_request = p['parent'] pi.material_request_item = p['name']
def get_item_details(self, item_code): return get_item_details(item_code)