예제 #1
0
def create_production_plan(**args):
	args = frappe._dict(args)

	pln = frappe.get_doc({
		'doctype': 'Production Plan',
		'company': args.company or '_Test Company',
		'customer': args.customer or '_Test Customer',
		'posting_date': nowdate(),
		'include_non_stock_items': args.include_non_stock_items or 1,
		'include_subcontracted_items': args.include_subcontracted_items or 1,
		'ignore_existing_ordered_qty': args.ignore_existing_ordered_qty or 1,
		'po_items': [{
			'use_multi_level_bom': args.use_multi_level_bom or 1,
			'item_code': args.item_code,
			'bom_no': frappe.db.get_value('Item', args.item_code, 'default_bom'),
			'planned_qty': args.planned_qty or 1,
			'planned_start_date': args.planned_start_date or now_datetime()
		}]
	})
	mr_items = get_items_for_material_requests(pln.as_dict())
	for d in mr_items:
		pln.append('mr_items', d)

	if not args.do_not_save:
		pln.insert()
		if not args.do_not_submit:
			pln.submit()

	return pln
예제 #2
0
def create_production_plan(**args):
	args = frappe._dict(args)

	pln = frappe.get_doc({
		'doctype': 'Production Plan',
		'company': args.company or '_Test Company',
		'posting_date': nowdate(),
		'include_non_stock_items': args.include_non_stock_items or 1,
		'include_subcontracted_items': args.include_subcontracted_items or 1,
		'ignore_existing_ordered_qty': args.ignore_existing_ordered_qty or 1,
		'po_items': [{
			'use_multi_level_bom': args.use_multi_level_bom or 1,
			'item_code': args.item_code,
			'bom_no': frappe.db.get_value('Item', args.item_code, 'default_bom'),
			'planned_qty': args.planned_qty or 1,
			'planned_start_date': args.planned_start_date or now_datetime()
		}]
	})
	mr_items = get_items_for_material_requests(pln.as_dict())
	for d in mr_items:
		pln.append('mr_items', d)

	if not args.do_not_save:
		pln.insert()
		if not args.do_not_submit:
			pln.submit()

	return pln
예제 #3
0
def make_raw_material_request(items, company, sales_order, project=None):
	if not frappe.has_permission("Sales Order", "write"):
		frappe.throw(_("Not permitted"), frappe.PermissionError)

	if isinstance(items, str):
		items = frappe._dict(json.loads(items))

	for item in items.get("items"):
		item["include_exploded_items"] = items.get("include_exploded_items")
		item["ignore_existing_ordered_qty"] = items.get("ignore_existing_ordered_qty")
		item["include_raw_materials_from_sales_order"] = items.get(
			"include_raw_materials_from_sales_order"
		)

	items.update({"company": company, "sales_order": sales_order})

	raw_materials = get_items_for_material_requests(items)
	if not raw_materials:
		frappe.msgprint(
			_("Material Request not created, as quantity for Raw Materials already available.")
		)
		return

	material_request = frappe.new_doc("Material Request")
	material_request.update(
		dict(
			doctype="Material Request",
			transaction_date=nowdate(),
			company=company,
			material_request_type="Purchase",
		)
	)
	for item in raw_materials:
		item_doc = frappe.get_cached_doc("Item", item.get("item_code"))

		schedule_date = add_days(nowdate(), cint(item_doc.lead_time_days))
		row = material_request.append(
			"items",
			{
				"item_code": item.get("item_code"),
				"qty": item.get("quantity"),
				"schedule_date": schedule_date,
				"warehouse": item.get("warehouse"),
				"sales_order": sales_order,
				"project": project,
			},
		)

		if not (strip_html(item.get("description")) and strip_html(item_doc.description)):
			row.description = item_doc.item_name or item.get("item_code")

	material_request.insert()
	material_request.flags.ignore_permissions = 1
	material_request.run_method("set_missing_values")
	material_request.submit()
	return material_request
예제 #4
0
def make_raw_material_request(items, company, sales_order, project=None):
    if not frappe.has_permission("Sales Order", "write"):
        frappe.throw(_("Not permitted"), frappe.PermissionError)

    if isinstance(items, string_types):
        items = frappe._dict(json.loads(items))

    for item in items.get('items'):
        item["include_exploded_items"] = items.get('include_exploded_items')
        item["ignore_existing_ordered_qty"] = items.get(
            'ignore_existing_ordered_qty')
        item["include_raw_materials_from_sales_order"] = items.get(
            'include_raw_materials_from_sales_order')

    items.update({'company': company, 'sales_order': sales_order})

    raw_materials = get_items_for_material_requests(items)
    if not raw_materials:
        frappe.msgprint(
            _("Material Request not created, as quantity for Raw Materials already available."
              ))
        return

    material_request = frappe.new_doc('Material Request')
    material_request.update(
        dict(doctype='Material Request',
             transaction_date=nowdate(),
             company=company,
             requested_by=frappe.session.user,
             material_request_type='Purchase'))
    for item in raw_materials:
        item_doc = frappe.get_cached_doc('Item', item.get('item_code'))

        schedule_date = add_days(nowdate(), cint(item_doc.lead_time_days))
        row = material_request.append(
            'items', {
                'item_code': item.get('item_code'),
                'qty': item.get('quantity'),
                'schedule_date': schedule_date,
                'warehouse': item.get('warehouse'),
                'sales_order': sales_order,
                'project': project
            })

        if not (strip_html(item.get("description"))
                and strip_html(item_doc.description)):
            row.description = item_doc.item_name or item.get('item_code')

    material_request.insert()
    material_request.flags.ignore_permissions = 1
    material_request.run_method("set_missing_values")
    material_request.submit()
    return material_request
예제 #5
0
def make_raw_material_request(items, company, sales_order, project=None):
	if not frappe.has_permission("Sales Order", "write"):
		frappe.throw(_("Not permitted"), frappe.PermissionError)

	if isinstance(items, string_types):
		items = frappe._dict(json.loads(items))

	for item in items.get('items'):
		item["include_exploded_items"] = items.get('include_exploded_items')
		item["ignore_existing_ordered_qty"] = items.get('ignore_existing_ordered_qty')
		item["include_raw_materials_from_sales_order"] = items.get('include_raw_materials_from_sales_order')

	raw_materials = get_items_for_material_requests(items, sales_order, company)
	if not raw_materials:
		frappe.msgprint(_("Material Request not created, as quantity for Raw Materials already available."))
		return

	material_request = frappe.new_doc('Material Request')
	material_request.update(dict(
		doctype = 'Material Request',
		transaction_date = nowdate(),
		company = company,
		requested_by = frappe.session.user,
		material_request_type = 'Purchase'
	))
	for item in raw_materials:
		item_doc = frappe.get_cached_doc('Item', item.get('item_code'))
		schedule_date = add_days(nowdate(), cint(item_doc.lead_time_days))
		material_request.append('items', {
		'item_code': item.get('item_code'),
		'qty': item.get('quantity'),
		'schedule_date': schedule_date,
		'warehouse': item.get('warehouse'),
		'sales_order': sales_order,
		'project': project
		})
	material_request.insert()
	material_request.flags.ignore_permissions = 1
	material_request.run_method("set_missing_values")
	material_request.submit()
	return material_request
예제 #6
0
def create_production_plan(**args):
    """
	sales_order (obj): Sales Order Doc Object
	get_items_from (str): Sales Order/Material Request
	skip_getting_mr_items (bool): Whether or not to plan for new MRs
	"""
    args = frappe._dict(args)

    pln = frappe.get_doc({
        "doctype":
        "Production Plan",
        "company":
        args.company or "_Test Company",
        "customer":
        args.customer or "_Test Customer",
        "posting_date":
        nowdate(),
        "include_non_stock_items":
        args.include_non_stock_items or 0,
        "include_subcontracted_items":
        args.include_subcontracted_items or 0,
        "ignore_existing_ordered_qty":
        args.ignore_existing_ordered_qty or 0,
        "get_items_from":
        "Sales Order",
    })

    if not args.get("sales_order"):
        pln.append(
            "po_items",
            {
                "use_multi_level_bom":
                args.use_multi_level_bom or 1,
                "item_code":
                args.item_code,
                "bom_no":
                frappe.db.get_value("Item", args.item_code, "default_bom"),
                "planned_qty":
                args.planned_qty or 1,
                "planned_start_date":
                args.planned_start_date or now_datetime(),
            },
        )

    if args.get("get_items_from") == "Sales Order" and args.get("sales_order"):
        so = args.get("sales_order")
        pln.append(
            "sales_orders",
            {
                "sales_order": so.name,
                "sales_order_date": so.transaction_date,
                "customer": so.customer,
                "grand_total": so.grand_total,
            },
        )
        pln.get_items()

    if not args.get("skip_getting_mr_items"):
        mr_items = get_items_for_material_requests(pln.as_dict())
        for d in mr_items:
            pln.append("mr_items", d)

    if not args.do_not_save:
        pln.insert()
        if not args.do_not_submit:
            pln.submit()

    return pln