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_work_orders(material_request): mr= frappe.get_doc("Material Request", material_request) errors =[] work_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}): wo_order = frappe.new_doc("Work Order") wo_order.production_item = d.item_code wo_order.qty = d.qty - d.ordered_qty wo_order.fg_warehouse = d.warehouse wo_order.wip_warehouse = default_wip_warehouse wo_order.description = d.description wo_order.stock_uom = d.stock_uom wo_order.expected_delivery_date = d.schedule_date wo_order.sales_order = d.sales_order wo_order.bom_no = get_item_details(d.item_code).bom_no wo_order.material_request = mr.name wo_order.material_request_item = d.name wo_order.planned_start_date = mr.transaction_date wo_order.company = mr.company wo_order.save() work_orders.append(wo_order.name) else: errors.append(_("Row {0}: Bill of Materials not found for the Item {1}").format(d.idx, d.item_code)) if work_orders: message = ["""<a href="#Form/Work Order/%s" target="_blank">%s</a>""" % \ (p, p) for p in work_orders] msgprint(_("The following Work Orders were created:") + '\n' + new_line_sep(message)) if errors: frappe.throw(_("Productions Orders cannot be raised for:") + '\n' + new_line_sep(errors)) return work_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 raise_work_orders(material_request): mr = frappe.get_doc("Material Request", material_request) errors = [] work_orders = [] default_wip_warehouse = frappe.db.get_single_value( "Manufacturing Settings", "default_wip_warehouse") for d in mr.items: if (d.stock_qty - d.ordered_qty) > 0: if frappe.db.exists("BOM", {"item": d.item_code, "is_default": 1}): wo_order = frappe.new_doc("Work Order") wo_order.update({ "production_item": d.item_code, "qty": d.stock_qty - d.ordered_qty, "production_plan": d.production_plan, "production_plan_item": d.production_plan_item, "fg_warehouse": d.warehouse, "wip_warehouse": default_wip_warehouse, "description": d.description, "stock_uom": d.stock_uom, "expected_delivery_date": d.schedule_date, "sales_order": d.sales_order, "bom_no": get_item_details(d.item_code).bom_no, "material_request": mr.name, "material_request_item": d.name, "material_request_plan_item": d.material_request_plan_item, "planned_start_date": mr.transaction_date, "company": mr.company }) wo_order.set_work_order_operations() wo_order.save() work_orders.append(wo_order.name) else: errors.append( _("Row {0}: Bill of Materials not found for the Item {1}"). format(d.idx, d.item_code)) if work_orders: message = ["""<a href="#Form/Work Order/%s" target="_blank">%s</a>""" % \ (p, p) for p in work_orders] msgprint( _("The following Work Orders were created:") + '\n' + new_line_sep(message)) if errors: frappe.throw( _("Work Order cannot be created for following reason:") + '\n' + new_line_sep(errors)) return work_orders
def raise_work_orders(material_request): mr = frappe.get_doc("Material Request", material_request) errors = [] work_orders = [] default_wip_warehouse = frappe.db.get_single_value( "Manufacturing Settings", "default_wip_warehouse") for d in mr.items: if (d.stock_qty - d.ordered_qty) > 0: if frappe.db.exists("BOM", {"item": d.item_code, "is_default": 1}): wo_order = frappe.new_doc("Work Order") wo_order.update({ "production_item": d.item_code, "qty": d.stock_qty - d.ordered_qty, "fg_warehouse": d.warehouse, "wip_warehouse": default_wip_warehouse, "description": d.description, "stock_uom": d.stock_uom, "expected_delivery_date": d.schedule_date, "sales_order": d.sales_order, "sales_order_item": d.get("sales_order_item"), "bom_no": get_item_details(d.item_code).bom_no, "material_request": mr.name, "material_request_item": d.name, "planned_start_date": mr.transaction_date, "company": mr.company, }) wo_order.set_work_order_operations() wo_order.save() work_orders.append(wo_order.name) else: errors.append( _("Row {0}: Bill of Materials not found for the Item {1}"). format(d.idx, get_link_to_form("Item", d.item_code))) if work_orders: work_orders_list = [ get_link_to_form("Work Order", d) for d in work_orders ] if len(work_orders) > 1: msgprint( _("The following {0} were created: {1}").format( frappe.bold(_("Work Orders")), "<br>" + ", ".join(work_orders_list))) else: msgprint( _("The {0} {1} created sucessfully").format( frappe.bold(_("Work Order")), work_orders_list[0])) if errors: frappe.throw( _("Work Order cannot be created for following reason: <br> {0}"). format(new_line_sep(errors))) return work_orders
def raise_work_orders(material_request): mr= frappe.get_doc("Material Request", material_request) errors =[] work_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.exists("BOM", {"item": d.item_code, "is_default": 1}): wo_order = frappe.new_doc("Work Order") wo_order.update({ "production_item": d.item_code, "qty": d.qty - d.ordered_qty, "fg_warehouse": d.warehouse, "wip_warehouse": default_wip_warehouse, "description": d.description, "stock_uom": d.stock_uom, "expected_delivery_date": d.schedule_date, "sales_order": d.sales_order, "bom_no": get_item_details(d.item_code).bom_no, "material_request": mr.name, "material_request_item": d.name, "planned_start_date": mr.transaction_date, "company": mr.company }) wo_order.set_work_order_operations() wo_order.save() work_orders.append(wo_order.name) else: errors.append(_("Row {0}: Bill of Materials not found for the Item {1}").format(d.idx, d.item_code)) if work_orders: message = ["""<a href="#Form/Work Order/%s" target="_blank">%s</a>""" % \ (p, p) for p in work_orders] msgprint(_("The following Work Orders were created:") + '\n' + new_line_sep(message)) if errors: frappe.throw(_("Productions Orders cannot be raised for:") + '\n' + new_line_sep(errors)) return work_orders