Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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
Esempio n. 13
0
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
Esempio n. 14
0
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