def get_basic_details(args, item): if not item: item = frappe.get_doc("Item", args.get("item_code")) if item.variant_of: item.update_template_tables() from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('Warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list)==1 else "" warehouse = user_default_warehouse or item.default_warehouse or args.warehouse out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": cstr(item.description).strip(), "image": cstr(item.image).strip(), "warehouse": warehouse, "income_account": get_default_income_account(args, item), "expense_account": get_default_expense_account(args, item), "cost_center": get_default_cost_center(args, item), "batch_no": None, "item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in item.get("taxes")))), "uom": item.stock_uom, "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "conversion_factor": 1.0, "qty": args.qty or 1.0, "stock_qty": 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "net_rate": 0.0, "net_amount": 0.0, "discount_percentage": 0.0, "supplier": item.default_supplier, "delivered_by_supplier": item.delivered_by_supplier if args.get("doctype") in ["Sales Order", "Sales Invoice"] else 0, "is_fixed_asset": item.is_fixed_asset }) # if default specified in item is for another company, fetch from company for d in [["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""]]: company = frappe.db.get_value(d[0], out.get(d[1]), "company") if not out[d[1]] or (company and args.company != company): out[d[1]] = frappe.db.get_value("Company", args.company, d[2]) if d[2] else None for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) return out
def get_basic_details(args, item_doc): item = item_doc from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list)==1 else "" out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": cstr(item.description_html).strip() or cstr(item.description).strip(), "warehouse": user_default_warehouse or args.warehouse or item.default_warehouse, "income_account": (item.income_account or args.income_account or frappe.db.get_value("Item Group", item.item_group, "default_income_account")), "expense_account": (item.expense_account or args.expense_account or frappe.db.get_value("Item Group", item.item_group, "default_expense_account")), "cost_center": (frappe.db.get_value("Project", args.project_name, "cost_center") or (item.selling_cost_center if args.transaction_type == "selling" else item.buying_cost_center) or frappe.db.get_value("Item Group", item.item_group, "default_cost_center")), "batch_no": None, "item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in item_doc.get("item_tax")))), "uom": item.stock_uom, "min_order_qty": flt(item.min_order_qty) if args.parenttype == "Material Request" else "", "conversion_factor": 1.0, "qty": 1.0, "stock_qty": 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "discount_percentage": 0.0 }) # if default specified in item is for another company, fetch from company for d in [["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""]]: company = frappe.db.get_value(d[0], out.get(d[1]), "company") if not out[d[1]] or (company and args.company != company): out[d[1]] = frappe.db.get_value("Company", args.company, d[2]) if d[2] else None for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) return out
def get_default_company(user=None): '''Get default company for user''' from frappe.defaults import get_user_default_as_list if not user: user = frappe.session.user companies = get_user_default_as_list(user, 'company') if companies: default_company = companies[0] else: default_company = frappe.db.get_single_value('Global Defaults', 'default_company') return default_company
def get_default_company(user=None): """Get default company for user""" from frappe.defaults import get_user_default_as_list if not user: user = frappe.session.user companies = get_user_default_as_list(user, "company") if companies: default_company = companies[0] else: default_company = frappe.db.get_single_value("Global Defaults", "default_company") return default_company
def get_basic_details(args, item_doc): item = item_doc from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list)==1 else "" out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": item.description_html or item.description, "warehouse": user_default_warehouse or args.warehouse or item.default_warehouse, "income_account": item.income_account or args.income_account \ or frappe.db.get_value("Company", args.company, "default_income_account"), "expense_account": item.expense_account or args.expense_account \ or frappe.db.get_value("Company", args.company, "default_expense_account"), "cost_center": item.selling_cost_center \ if args.transaction_type == "selling" else item.buying_cost_center, "batch_no": None, "item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in item_doc.get("item_tax")))), "uom": item.stock_uom, "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "conversion_factor": 1.0, "qty": 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "discount_percentage": 0.0 }) for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) return out
def get_basic_details(args, item): if not item: item = frappe.get_doc("Item", args.get("item_code")) if item.variant_of: item.update_template_tables() from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list)==1 else "" out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": cstr(item.description_html).strip() or cstr(item.description).strip(), "warehouse": user_default_warehouse or args.warehouse or item.default_warehouse, "income_account": get_default_income_account(args, item), "expense_account": get_default_expense_account(args, item), "cost_center": get_default_cost_center(args, item), "batch_no": None, "item_tax_rate": json.dumps(dict( ([d.tax_type, d.tax_rate] for d in item.get("taxes")))), "uom": item.stock_uom, "min_order_qty": flt(item.min_order_qty) if args.parenttype == "Material Request" else "", "conversion_factor": 1.0, "qty": args.qty or 0.0, "stock_qty": 0.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "discount_percentage": 0.0 }) for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) return out
def get_basic_details(args, item): """ :param args: { "item_code": "", "warehouse": None, "customer": "", "conversion_rate": 1.0, "selling_price_list": None, "price_list_currency": None, "price_list_uom_dependant": None, "plc_conversion_rate": 1.0, "doctype": "", "name": "", "supplier": None, "transaction_date": None, "conversion_rate": 1.0, "buying_price_list": None, "is_subcontracted": "Yes" / "No", "ignore_pricing_rule": 0/1 "project": "", barcode: "", serial_no: "", currency: "", update_stock: "", price_list: "", company: "", order_type: "", is_pos: "", project: "", qty: "", stock_qty: "", conversion_factor: "" } :param item: `item_code` of Item object :return: frappe._dict """ if not item: item = frappe.get_doc("Item", args.get("item_code")) if item.variant_of: item.update_template_tables() from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('Warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list) == 1 else "" item_defaults = get_item_defaults(item.name, args.company) item_group_defaults = get_item_group_defaults(item.name, args.company) warehouse = args.get("set_warehouse") or user_default_warehouse or item_defaults.get("default_warehouse") or\ item_group_defaults.get("default_warehouse") or args.warehouse if args.get('doctype') == "Material Request" and not args.get('material_request_type'): args['material_request_type'] = frappe.db.get_value('Material Request', args.get('name'), 'material_request_type', cache=True) #Set the UOM to the Default Sales UOM or Default Purchase UOM if configured in the Item Master if not args.uom: if args.get('doctype') in sales_doctypes: args.uom = item.sales_uom if item.sales_uom else item.stock_uom elif (args.get('doctype') in ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']) or \ (args.get('doctype') == 'Material Request' and args.get('material_request_type') == 'Purchase'): args.uom = item.purchase_uom if item.purchase_uom else item.stock_uom else: args.uom = item.stock_uom out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": cstr(item.description).strip(), "image": cstr(item.image).strip(), "warehouse": warehouse, "income_account": get_default_income_account(args, item_defaults, item_group_defaults), "expense_account": get_default_expense_account(args, item_defaults, item_group_defaults), "cost_center": get_default_cost_center(args, item_defaults, item_group_defaults), 'has_serial_no': item.has_serial_no, 'has_batch_no': item.has_batch_no, "batch_no": None, "item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in item.get("taxes")))), "uom": args.uom, "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "qty": args.qty or 1.0, "stock_qty": args.qty or 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "net_rate": 0.0, "net_amount": 0.0, "discount_percentage": 0.0, "supplier": get_default_supplier(args, item_defaults, item_group_defaults), "update_stock": args.get("update_stock") if args.get('doctype') in ['Sales Invoice', 'Purchase Invoice'] else 0, "delivered_by_supplier": item.delivered_by_supplier if args.get("doctype") in ["Sales Order", "Sales Invoice"] else 0, "is_fixed_asset": item.is_fixed_asset, "weight_per_unit":item.weight_per_unit, "weight_uom":item.weight_uom, "last_purchase_rate": item.last_purchase_rate if args.get("doctype") in ["Purchase Order"] else 0, "transaction_date": args.get("transaction_date") }) if item.get("enable_deferred_revenue") or item.get("enable_deferred_expense"): out.update(calculate_service_end_date(args, item)) # calculate conversion factor if item.stock_uom == args.uom: out.conversion_factor = 1.0 else: out.conversion_factor = args.conversion_factor or \ get_conversion_factor(item.name, args.uom).get("conversion_factor") args.conversion_factor = out.conversion_factor out.stock_qty = out.qty * out.conversion_factor # calculate last purchase rate if args.get('doctype') in purchase_doctypes: from erpnext.buying.doctype.purchase_order.purchase_order import item_last_purchase_rate out.last_purchase_rate = item_last_purchase_rate(args.name, args.conversion_rate, item.name, out.conversion_factor) # if default specified in item is for another company, fetch from company for d in [ ["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""]]: if not out[d[1]]: out[d[1]] = frappe.get_cached_value('Company', args.company, d[2]) if d[2] else None for fieldname in ("item_name", "item_group", "barcodes", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) child_doctype = args.doctype + ' Item' meta = frappe.get_meta(child_doctype) if meta.get_field("barcode"): update_barcode_value(out) return out
def get_basic_details(args, item): """ :param args: { "item_code": "", "warehouse": None, "customer": "", "conversion_rate": 1.0, "selling_price_list": None, "price_list_currency": None, "price_list_uom_dependant": None, "plc_conversion_rate": 1.0, "doctype": "", "name": "", "supplier": None, "transaction_date": None, "conversion_rate": 1.0, "buying_price_list": None, "is_subcontracted": "Yes" / "No", "ignore_pricing_rule": 0/1 "project": "", barcode: "", serial_no: "", currency: "", update_stock: "", price_list: "", company: "", order_type: "", is_pos: "", project: "", qty: "", stock_qty: "", conversion_factor: "" } :param item: `item_code` of Item object :return: frappe._dict """ if not item: item = frappe.get_doc("Item", args.get("item_code")) if item.variant_of: item.update_template_tables() from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('Warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list) == 1 else "" item_defaults = get_item_defaults(item.name, args.company) item_group_defaults = get_item_group_defaults(item.name, args.company) warehouse = args.get("set_warehouse") or user_default_warehouse or item_defaults.get("default_warehouse") or\ item_group_defaults.get("default_warehouse") or args.warehouse if args.get('doctype') == "Material Request" and not args.get('material_request_type'): args['material_request_type'] = frappe.db.get_value('Material Request', args.get('name'), 'material_request_type', cache=True) #Set the UOM to the Default Sales UOM or Default Purchase UOM if configured in the Item Master if not args.uom: if args.get('doctype') in sales_doctypes: args.uom = item.sales_uom if item.sales_uom else item.stock_uom elif (args.get('doctype') in ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']) or \ (args.get('doctype') == 'Material Request' and args.get('material_request_type') == 'Purchase'): args.uom = item.purchase_uom if item.purchase_uom else item.stock_uom else: args.uom = item.stock_uom out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": cstr(item.description).strip(), "image": cstr(item.image).strip(), "warehouse": warehouse, "income_account": get_default_income_account(args, item_defaults, item_group_defaults), "expense_account": get_default_expense_account(args, item_defaults, item_group_defaults), "cost_center": get_default_cost_center(args, item_defaults, item_group_defaults), 'has_serial_no': item.has_serial_no, 'has_batch_no': item.has_batch_no, "batch_no": None, "item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in item.get("taxes")))), "uom": args.uom, "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "qty": args.qty or 1.0, "stock_qty": args.qty or 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "net_rate": 0.0, "net_amount": 0.0, "discount_percentage": 0.0, "supplier": get_default_supplier(args, item_defaults, item_group_defaults), "update_stock": args.get("update_stock") if args.get('doctype') in ['Sales Invoice', 'Purchase Invoice'] else 0, "delivered_by_supplier": item.delivered_by_supplier if args.get("doctype") in ["Sales Order", "Sales Invoice"] else 0, "is_fixed_asset": item.is_fixed_asset, "weight_per_unit":item.weight_per_unit, "weight_uom":item.weight_uom, "last_purchase_rate": item.last_purchase_rate if args.get("doctype") in ["Purchase Order"] else 0, "transaction_date": args.get("transaction_date") }) if item.get("enable_deferred_revenue") or item.get("enable_deferred_expense"): out.update(calculate_service_end_date(args, item)) # calculate conversion factor if item.stock_uom == args.uom: out.conversion_factor = 1.0 else: out.conversion_factor = args.conversion_factor or \ get_conversion_factor(item.name, args.uom).get("conversion_factor") args.conversion_factor = out.conversion_factor out.stock_qty = out.qty * out.conversion_factor # calculate last purchase rate if args.get('doctype') in purchase_doctypes: from erpnext.buying.doctype.purchase_order.purchase_order import item_last_purchase_rate out.last_purchase_rate = item_last_purchase_rate(args.name, args.conversion_rate, item.name, out.conversion_factor) # if default specified in item is for another company, fetch from company for d in [ ["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""]]: if not out[d[1]]: out[d[1]] = frappe.get_cached_value('Company', args.company, d[2]) if d[2] else None for fieldname in ("item_name", "item_group", "barcodes", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) return out
def get_basic_details(args, item): if not item: item = frappe.get_doc("Item", args.get("item_code")) if item.variant_of: item.update_template_tables() from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('Warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list)==1 else "" warehouse = user_default_warehouse or item.default_warehouse or args.warehouse #Set the UOM to the Default Sales UOM or Default Purchase UOM if configured in the Item Master if not args.uom: if args.get('doctype') in [ 'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice' ]: args.uom = item.sales_uom if item.sales_uom else item.stock_uom elif args.get('doctype') in [ 'Purchase Order', 'Purchase Receipt', 'Purchase Invoice' ]: args.uom = item.purchase_uom if item.purchase_uom else item.stock_uom else: args.uom = item.stock_uom out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": cstr(item.description).strip(), "image": cstr(item.image).strip(), "warehouse": warehouse, "income_account": get_default_income_account(args, item), "expense_account": get_default_expense_account(args, item), "cost_center": get_default_cost_center(args, item), 'has_serial_no': item.has_serial_no, 'has_batch_no': item.has_batch_no, "batch_no": None, "item_tax_rate": json.dumps(dict( ([d.tax_type, d.tax_rate] for d in item.get("taxes")))), "uom": args.uom, "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "qty": args.qty or 1.0, "stock_qty": args.qty or 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "net_rate": 0.0, "net_amount": 0.0, "discount_percentage": 0.0, "supplier": item.default_supplier, "update_stock": args.get("update_stock") if args.get('doctype') in ['Sales Invoice', 'Purchase Invoice'] else 0, "delivered_by_supplier": item.delivered_by_supplier if args.get("doctype") in ["Sales Order", "Sales Invoice"] else 0, "is_fixed_asset": item.is_fixed_asset }) # calculate conversion factor if item.stock_uom == args.uom: out.conversion_factor = 1.0 else: out.conversion_factor = args.conversion_factor or \ get_conversion_factor(item.item_code, args.uom).get("conversion_factor") or 1.0 args.conversion_factor = out.conversion_factor out.stock_qty = out.qty * out.conversion_factor # if default specified in item is for another company, fetch from company for d in [["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""]]: company = frappe.db.get_value(d[0], out.get(d[1]), "company") if not out[d[1]] or (company and args.company != company): out[d[1]] = frappe.db.get_value("Company", args.company, d[2]) if d[2] else None for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) return out
def get_item_details(args): """ custom script for returning the stock information for a item Parameters ---------- txt: search text string item_code: item_code, customer: frm.doc.customer, update_stock: frm.doc.update_stock, company: frm.doc.company, order_type: frm.doc.order_type, transaction_date: frm.doc.transaction_date, doctype: frm.doc.doctype, name: frm.doc.name Return ------ dict of warehouse wise all stocks """ if isinstance(args, basestring): args = json.loads(args) args = frappe._dict(args) item_list = [] if args.item_code: # if item code is given only search for the given field item_code = args.item_code item_warehouse = frappe.db.get_value("Item", item_code, "default_warehouse") user_default_warehouse_list = get_user_default_as_list('Warehouse') user_default_warehouse = user_default_warehouse_list[0] if len( user_default_warehouse_list) == 1 else "" warehouse = user_default_warehouse or item_warehouse or args.warehouse item_list = [item_code] else: # search the given items from the seach fields # doctype, txt, searchfield, start, page_len, filters, as_dict=False items = custom_item_query("Item", args.txt, "name", 0, 30, {"is_sales_item": 1}, True) item_dict = {d.name: ", ".join(d.values()) for d in items} item_list = item_dict.keys() custom_uom_info = frappe.get_all("Item", fields=["name", "boxes", "pieces"], filters=[["name", "in", item_list]]) out = defaultdict(dict) for item in custom_uom_info: out[item.name] = {} out[item.name]["item_details"] = item_dict[item.name] out[item.name]["item_stock_totals"] = { "actual_qty": 0, "reserved_qty": 0 } out[item.name]["uom_box"] = item.boxes out[item.name]["uom_pieces"] = item.pieces out[item.name]["warehouse_details"] = {} # for item in item_list: # out[item] = {} # out[item]["item_details"] = item_dict[item] # out[item]["item_stock_totals"] = {"actual_qty": 0, "reserved_qty": 0} # filters["filters"].push(["Warehouse", "rejected_warehouse", "!=", 1]); warehouses = frappe.db.get_all("Warehouse", fields=["name"], filters=[["company", "=", args.company], ["rejected_warehouse", "!=", 1]]) warehouses_list = [warehouse.name for warehouse in warehouses] item_details = frappe.db.get_all( "Bin", fields=[ "item_code", "warehouse", "actual_qty", "projected_qty", "reserved_qty" ], filters=[["item_code", "in", item_list], ["warehouse", "in", warehouses_list]]) for item in item_details: out[item.item_code]["warehouse_details"][item.warehouse] = item out[item.item_code]["warehouse_details"][ item.warehouse]["uom_box"] = out[item.item_code]["uom_box"] out[item.item_code]["warehouse_details"][ item.warehouse]["uom_pieces"] = out[item.item_code]["uom_pieces"] # out[item.item_code]["item_details"] = item_dict[item.item_code] # if "item_stock_totals" not in out[item.item_code]: # out[item.item_code].update({"item_stock_totals": {"actual_qty": 0, "reserved_qty": 0}}) out[item. item_code]["item_stock_totals"]["actual_qty"] += item.actual_qty out[item.item_code]["item_stock_totals"][ "reserved_qty"] += item.reserved_qty # item_details = frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, # ["projected_qty", "actual_qty"], as_dict=True) \ # or {"projected_qty": 0, "actual_qty": 0} # out.update({warehouse: item_details}) return out
def get_basic_details(args, item_doc): item = item_doc from frappe.defaults import get_user_default_as_list user_default_warehouse_list = get_user_default_as_list('warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list)==1 else "" out = frappe._dict({ "item_code": item.name, "item_name": item.item_name, "description": cstr(item.description_html).strip() or cstr(item.description).strip(), "warehouse": user_default_warehouse or args.warehouse or item.default_warehouse, "income_account": (item.income_account or args.income_account or frappe.db.get_value( "Item Group", item.item_group, "default_income_account")), "expense_account": (item.expense_account or args.expense_account or frappe.db.get_value( "Item Group", item.item_group, "default_expense_account")), "cost_center": (frappe.db.get_value("Project", args.project_name, "cost_center") or (item.selling_cost_center if args.transaction_type == "selling" else item.buying_cost_center) or frappe.db.get_value( "Item Group", item.item_group, "default_cost_center")), "batch_no": None, "item_tax_rate": json.dumps( dict( ([d.tax_type, d.tax_rate] for d in item_doc.get("item_tax")))), "uom": item.stock_uom, "min_order_qty": flt(item.min_order_qty) if args.parenttype == "Material Request" else "", "conversion_factor": 1.0, "qty": 1.0, "stock_qty": 1.0, "price_list_rate": 0.0, "base_price_list_rate": 0.0, "rate": 0.0, "base_rate": 0.0, "amount": 0.0, "base_amount": 0.0, "discount_percentage": 0.0 }) # if default specified in item is for another company, fetch from company for d in [["Account", "income_account", "default_income_account"], ["Account", "expense_account", "default_expense_account"], ["Cost Center", "cost_center", "cost_center"], ["Warehouse", "warehouse", ""]]: if not out[d[1]] or args.company != frappe.db.get_value( d[0], out.get(d[1]), "company"): out[d[1]] = frappe.db.get_value("Company", args.company, d[2]) if d[2] else None for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"): out[fieldname] = item.get(fieldname) return out