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
Exemple #3
0
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
Exemple #5
0
	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']
Exemple #8
0
	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']
Exemple #9
0
	def get_item_details(self, item_code):
		return get_item_details(item_code)