Beispiel #1
0
    def add_items(self, items):
        self.set('po_items', [])
        for data in items:
            item_details = get_item_details(data.item_code)
            pi = self.append(
                'po_items', {
                    'include_exploded_items': 1,
                    'warehouse': data.warehouse,
                    'item_code': data.item_code,
                    'description': item_details and item_details.description
                    or '',
                    'stock_uom': item_details and item_details.stock_uom or '',
                    'bom_no': item_details and item_details.bom_no or '',
                    'planned_qty': data.pending_qty,
                    'pending_qty': data.pending_qty,
                    'planned_start_date': now_datetime(),
                    'product_bundle_item': data.parent_item
                })

            if self.get_items_from == "Sales Order":
                pi.sales_order = data.parent
                pi.sales_order_item = data.name

            elif self.get_items_from == "Material Request":
                pi.material_request = data.parent
                pi.material_request_item = data.name
Beispiel #2
0
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
Beispiel #3
0
def get_item_data(item_code):
    item_details = get_item_details(item_code)

    return {
        "bom_no": item_details.get("bom_no"),
        "stock_uom": item_details.get("stock_uom"),
        "description": item_details.get("description")
    }
Beispiel #4
0
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
Beispiel #5
0
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 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']
Beispiel #7
0
def get_item_data(item_code):
	item_details = get_item_details(item_code)
	bom_no = item_details.get("bom_no")
	
	total_operating_hours = frappe.db.get_value(
		"BOM Operation", {"parent": bom_no}, "sum(time_in_mins) AS total_operating_time")
	total_operating_hours = flt(total_operating_hours) / 60.0

	total_workstations = frappe.db.count(
		"BOM Operation", {"parent": bom_no, "workstation": ["!=", ""]})
	return {
		"bom_no": item_details.get("bom_no"),
		"stock_uom": item_details.get("stock_uom"),
		"raw_material_cost": item_details.get("raw_material_cost"),
		"total_operational_cost": item_details.get("operating_cost"),
		"total_operational_hours": total_operating_hours,
		"total_workstations": total_workstations
#		"description": item_details.get("description")
	}
Beispiel #8
0
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
Beispiel #9
0
	def add_items(self, items):
		self.set('po_items', [])
		for data in items:
			item_details = get_item_details(data.item_code)
			pi = self.append('po_items', {
				'include_exploded_items': 1,
				'warehouse': data.warehouse,
				'item_code': data.item_code,
				'description': item_details and item_details.description or '',
				'stock_uom': item_details and item_details.stock_uom or '',
				'bom_no': item_details and item_details.bom_no or '',
				'planned_qty': data.pending_qty,
				'pending_qty': data.pending_qty,
				'planned_start_date': now_datetime(),
				'product_bundle_item': data.parent_item
			})

			if self.get_items_from == "Sales Order":
				pi.sales_order = data.parent
				pi.sales_order_item = data.name

			elif self.get_items_from == "Material Request":
				pi.material_request = data.parent
				pi.material_request_item = data.name
Beispiel #10
0
    def add_items(self, items):
        refs = {}
        for data in items:
            item_details = get_item_details(data.item_code)
            if self.combine_items:
                if item_details.bom_no in refs:
                    refs[item_details.bom_no]["so_details"].append({
                        "sales_order":
                        data.parent,
                        "sales_order_item":
                        data.name,
                        "qty":
                        data.pending_qty
                    })
                    refs[item_details.bom_no]["qty"] += data.pending_qty
                    continue

                else:
                    refs[item_details.bom_no] = {
                        "qty": data.pending_qty,
                        "po_item_ref": data.name,
                        "so_details": [],
                    }
                    refs[item_details.bom_no]["so_details"].append({
                        "sales_order":
                        data.parent,
                        "sales_order_item":
                        data.name,
                        "qty":
                        data.pending_qty
                    })

            pi = self.append(
                "po_items",
                {
                    "warehouse": data.warehouse,
                    "item_code": data.item_code,
                    "description": data.description
                    or item_details.description,
                    "stock_uom": item_details and item_details.stock_uom or "",
                    "bom_no": item_details and item_details.bom_no or "",
                    "planned_qty": data.pending_qty,
                    "pending_qty": data.pending_qty,
                    "planned_start_date": now_datetime(),
                    "product_bundle_item": data.parent_item,
                },
            )
            pi._set_defaults()

            if self.get_items_from == "Sales Order":
                pi.sales_order = data.parent
                pi.sales_order_item = data.name
                pi.description = data.description

            elif self.get_items_from == "Material Request":
                pi.material_request = data.parent
                pi.material_request_item = data.name
                pi.description = data.description

        if refs:
            for po_item in self.po_items:
                po_item.planned_qty = refs[po_item.bom_no]["qty"]
                po_item.pending_qty = refs[po_item.bom_no]["qty"]
                po_item.sales_order = ""
            self.add_pp_ref(refs)
Beispiel #11
0
    def add_items(self, items):
        refs = {}
        for data in items:
            item_details = get_item_details(data.item_code)
            if self.combine_items:
                if item_details.bom_no in refs:
                    refs[item_details.bom_no]['so_details'].append({
                        'sales_order':
                        data.parent,
                        'sales_order_item':
                        data.name,
                        'qty':
                        data.pending_qty
                    })
                    refs[item_details.bom_no]['qty'] += data.pending_qty
                    continue

                else:
                    refs[item_details.bom_no] = {
                        'qty': data.pending_qty,
                        'po_item_ref': data.name,
                        'so_details': []
                    }
                    refs[item_details.bom_no]['so_details'].append({
                        'sales_order':
                        data.parent,
                        'sales_order_item':
                        data.name,
                        'qty':
                        data.pending_qty
                    })

            pi = self.append(
                'po_items', {
                    'warehouse': data.warehouse,
                    'item_code': data.item_code,
                    'description': data.description
                    or item_details.description,
                    'stock_uom': item_details and item_details.stock_uom or '',
                    'bom_no': item_details and item_details.bom_no or '',
                    'planned_qty': data.pending_qty,
                    'pending_qty': data.pending_qty,
                    'planned_start_date': now_datetime(),
                    'product_bundle_item': data.parent_item,
                    'delivery_date': data.delivery_date or data.schedule_date
                    or ''
                })
            pi._set_defaults()

            if self.get_items_from == "Sales Order":
                pi.sales_order = data.parent
                pi.sales_order_item = data.name
                pi.description = data.description
                pi.delivery_date = data.delivery_date

            elif self.get_items_from == "Material Request":
                pi.material_request = data.parent
                pi.material_request_item = data.name
                pi.description = data.description
                pi.schedule_date = data.schedule_date

        if refs:
            for po_item in self.po_items:
                po_item.planned_qty = refs[po_item.bom_no]['qty']
                po_item.pending_qty = refs[po_item.bom_no]['qty']
                po_item.sales_order = ''
            self.add_pp_ref(refs)