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
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
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
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
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
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