[fix] total margin calculations

This commit is contained in:
mbauskar 2016-01-21 16:10:22 +05:30 committed by rohitwaghchaure
parent dcd8b7773d
commit 6f60339e75

View File

@ -87,24 +87,24 @@ def get_item_details(args):
get_gross_profit(out)
if args.document_type in ["Quotation Item", "Sales Order Item"]:
data = set_margin_fields(out.pricing_rule, out.price_list_rate)
out.update(data)
# calculate rate by appling discount to total_margin
if(args.total_margin):
out["rate"] = discount_on_total_margin(args.total_margin, out.discount_percentage);
else:
elif not args.type:
data = set_margin_fields(out.pricing_rule, out.price_list_rate)
out["rate"] = discount_on_total_margin(data.get("total_margin"), out.discount_percentage)
out.update(data)
return out
def set_margin_fields(pricing_rule=None, price_list_rate=None):
"""
Todo: get the values of Margin (type and rate)
calculate the the Margin Amount, discount etc
"""
# margin_details dict will hold the all data variable regrading margin
margin_details = frappe._dict({})
margin_details = frappe._dict({
"type":"",
"rate_or_amount": 0.0,
"total_margin": 0.0
})
if pricing_rule and price_list_rate:
margin_details.update(get_margin_details(pricing_rule))
margin_details.update(calculate_total_margin(margin_details.get("type"),margin_details.get("rate_or_amount"), price_list_rate))
@ -116,11 +116,11 @@ def get_margin_details(pricing_rule):
get the margin details from pricing_rule
"""
margin_details = frappe._dict({
"type":"Percentage",
"type":"",
"rate_or_amount":0.0,
})
records = frappe.db.sql("""SELECT type, rate FROM `tabPricing Rule` WHERE name = '%s'""" % pricing_rule, as_dict = 1)
records = frappe.db.get_values("Pricing Rule", pricing_rule, ["type", "rate"], as_dict=True)
for record in records:
margin_details["type"] = record.get("type")
@ -133,20 +133,14 @@ def calculate_total_margin(margin_type,rate_or_amount,price_list_rate):
calculate margin amount as follows
if type is percentage then calculate percentage of price_list_rate
"""
data = frappe._dict({
"total_margin":0.0,
"margin_amt":0.0,
})
if margin_type == "Amount":
data["margin_amt"] = rate_or_amount
default = frappe._dict({ "total_margin":0.0 })
if not margin_type:
return default
elif margin_type == "Amount":
default.total_margin = price_list_rate + rate_or_amount
else:
data["margin_amt"] = price_list_rate * ( rate_or_amount / 100 )
data["total_margin"] = price_list_rate + data["margin_amt"]
return data
default.total_margin = price_list_rate + ( price_list_rate * ( rate_or_amount / 100 ) )
return default
def discount_on_total_margin(total_margin, discount):
"""
@ -169,6 +163,8 @@ def process_args(args):
args.item_code = get_item_code(barcode=args.barcode)
elif not args.item_code and args.serial_no:
args.item_code = get_item_code(serial_no=args.serial_no)
set_transaction_type(args)
set_transaction_type(args)
@ -579,4 +575,4 @@ def get_gross_profit(out):
})
return out