From d1055ce1bc06f62378017f5991c4f24175eec1f8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 12 Aug 2013 15:15:19 +0530 Subject: [PATCH] [fix] [minor] Target variance report if distribution id is not specified --- .../budget_variance_report.py | 38 +++++++------- ..._person_target_variance_item_group_wise.py | 49 +++++++++---------- ...rritory_target_variance_item_group_wise.py | 39 ++++++++------- 3 files changed, 65 insertions(+), 61 deletions(-) diff --git a/accounts/report/budget_variance_report/budget_variance_report.py b/accounts/report/budget_variance_report/budget_variance_report.py index 158ff3a818..015e2c01b3 100644 --- a/accounts/report/budget_variance_report/budget_variance_report.py +++ b/accounts/report/budget_variance_report/budget_variance_report.py @@ -47,18 +47,20 @@ def get_columns(filters): msgprint(_("Please specify") + ": " + label, raise_exception=True) - columns = ["Cost Center:Link/Cost Center:100", "Account:Link/Account:100"] + columns = ["Cost Center:Link/Cost Center:120", "Account:Link/Account:120"] group_months = False if filters["period"] == "Monthly" else True for from_date, to_date in get_period_date_ranges(filters["period"], filters["fiscal_year"]): for label in ["Target (%s)", "Actual (%s)", "Variance (%s)"]: if group_months: - columns.append(label % (from_date.strftime("%b") + " - " + to_date.strftime("%b"))) + label = label % (from_date.strftime("%b") + " - " + to_date.strftime("%b")) else: - columns.append(label % from_date.strftime("%b")) + label = label % from_date.strftime("%b") + + columns.append(label+":Float:120") - return columns + ["Total Target::80", "Total Actual::80", "Total Variance::80"] + return columns + ["Total Target::120", "Total Actual::120", "Total Variance::120"] #Get cost center & target details def get_costcenter_target_details(filters): @@ -66,19 +68,17 @@ def get_costcenter_target_details(filters): cc.parent_cost_center, bd.account, bd.budget_allocated from `tabCost Center` cc, `tabBudget Detail` bd where bd.parent=cc.name and bd.fiscal_year=%s and - cc.company=%s and ifnull(cc.distribution_id, '')!='' - order by cc.name""" % ('%s', '%s'), + cc.company=%s order by cc.name""" % ('%s', '%s'), (filters.get("fiscal_year"), filters.get("company")), as_dict=1) #Get target distribution details of accounts of cost center def get_target_distribution_details(filters): target_details = {} - for d in webnotes.conn.sql("""select bdd.month, bdd.percentage_allocation \ - from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd, \ - `tabCost Center` cc where bdd.parent=bd.name and cc.distribution_id=bd.name and \ - bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1): - target_details.setdefault(d.month, d) + for d in webnotes.conn.sql("""select bd.name, bdd.month, bdd.percentage_allocation \ + from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd + where bdd.parent=bd.name and bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1): + target_details.setdefault(d.name, {}).setdefault(d.month, d.percentage_allocation) return target_details @@ -99,15 +99,19 @@ def get_costcenter_account_month_map(filters): cam_map = {} for ccd in costcenter_target_details: - for month in tdd: + for month_id in range(1, 13): + month = datetime.date(2013, month_id, 1).strftime('%B') + cam_map.setdefault(ccd.name, {}).setdefault(ccd.account, {})\ - .setdefault(month, webnotes._dict({ - "target": 0.0, "actual": 0.0 - })) + .setdefault(month, webnotes._dict({ + "target": 0.0, "actual": 0.0 + })) tav_dict = cam_map[ccd.name][ccd.account][month] - tav_dict.target = flt(ccd.budget_allocated) * \ - (tdd[month]["percentage_allocation"]/100) + month_percentage = ccd.distribution_id and \ + tdd.get(ccd.distribution_id, {}).get(month, 0) or 100.0/12 + + tav_dict.target = flt(flt(ccd.budget_allocated) * month_percentage /100) for ad in actual_details: if ad.month_name == month and ad.account == ccd.account \ diff --git a/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py b/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py index 96c147fd64..6fdafe083d 100644 --- a/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py +++ b/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py @@ -8,6 +8,7 @@ from webnotes.utils import flt import time from accounts.utils import get_fiscal_year from controllers.trends import get_period_date_ranges, get_period_month_ranges +from webnotes.model.meta import get_field_precision def execute(filters=None): if not filters: filters = {} @@ -16,10 +17,7 @@ def execute(filters=None): period_month_ranges = get_period_month_ranges(filters["period"], filters["fiscal_year"]) sim_map = get_salesperson_item_month_map(filters) - precision = webnotes.conn.get_value("Global Defaults", None, "float_precision") or 2 - data = [] - for salesperson, salesperson_items in sim_map.items(): for item_group, monthwise_data in salesperson_items.items(): row = [salesperson, item_group] @@ -29,7 +27,7 @@ def execute(filters=None): for month in relevant_months: month_data = monthwise_data.get(month, {}) for i, fieldname in enumerate(["target", "achieved", "variance"]): - value = flt(month_data.get(fieldname), precision) + value = flt(month_data.get(fieldname)) period_data[i] += value totals[i] += value period_data[2] = period_data[0] - period_data[1] @@ -47,37 +45,37 @@ def get_columns(filters): msgprint(_("Please specify") + ": " + label, raise_exception=True) - columns = ["Sales Person:Link/Sales Person:80", "Item Group:Link/Item Group:80"] + columns = ["Sales Person:Link/Sales Person:120", "Item Group:Link/Item Group:120"] group_months = False if filters["period"] == "Monthly" else True for from_date, to_date in get_period_date_ranges(filters["period"], filters["fiscal_year"]): for label in ["Target (%s)", "Achieved (%s)", "Variance (%s)"]: if group_months: - columns.append(label % (from_date.strftime("%b") + " - " + to_date.strftime("%b"))) + label = label % (from_date.strftime("%b") + " - " + to_date.strftime("%b")) else: - columns.append(label % from_date.strftime("%b")) + label = label % from_date.strftime("%b") + + columns.append(label+":Float:120") - return columns + ["Total Target::80", "Total Achieved::80", "Total Variance::80"] + return columns + ["Total Target::120", "Total Achieved::120", "Total Variance::120"] #Get sales person & item group details def get_salesperson_details(filters): return webnotes.conn.sql("""select sp.name, td.item_group, td.target_qty, td.target_amount, sp.distribution_id from `tabSales Person` sp, `tabTarget Detail` td - where td.parent=sp.name and td.fiscal_year=%s and - ifnull(sp.distribution_id, '')!='' order by sp.name""", + where td.parent=sp.name and td.fiscal_year=%s order by sp.name""", (filters["fiscal_year"]), as_dict=1) #Get target distribution details of item group def get_target_distribution_details(filters): target_details = {} - for d in webnotes.conn.sql("""select bdd.month, bdd.percentage_allocation \ - from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd, \ - `tabTerritory` t where bdd.parent=bd.name and t.distribution_id=bd.name and \ - bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1): - target_details.setdefault(d.month, d) + for d in webnotes.conn.sql("""select bd.name, bdd.month, bdd.percentage_allocation + from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd + where bdd.parent=bd.name and bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1): + target_details.setdefault(d.name, {}).setdefault(d.month, d.percentage_allocation) return target_details @@ -94,32 +92,33 @@ def get_achieved_details(filters): (start_date, end_date), as_dict=1) def get_salesperson_item_month_map(filters): + import datetime salesperson_details = get_salesperson_details(filters) tdd = get_target_distribution_details(filters) achieved_details = get_achieved_details(filters) sim_map = {} - for sd in salesperson_details: - for month in tdd: + for month_id in range(1, 13): + month = datetime.date(2013, month_id, 1).strftime('%B') sim_map.setdefault(sd.name, {}).setdefault(sd.item_group, {})\ - .setdefault(month, webnotes._dict({ - "target": 0.0, "achieved": 0.0 - })) + .setdefault(month, webnotes._dict({ + "target": 0.0, "achieved": 0.0 + })) tav_dict = sim_map[sd.name][sd.item_group][month] - + month_percentage = sd.distribution_id and \ + tdd.get(sd.distribution_id, {}).get(month, 0) or 100.0/12 + for ad in achieved_details: if (filters["target_on"] == "Quantity"): - tav_dict.target = flt(sd.target_qty) * \ - (tdd[month]["percentage_allocation"]/100) + tav_dict.target = flt(flt(sd.target_qty) * month_percentage/100, 2) if ad.month_name == month and get_item_group(ad.item_code) == sd.item_group \ and ad.sales_person == sd.name: tav_dict.achieved += ad.qty if (filters["target_on"] == "Amount"): - tav_dict.target = flt(sd.target_amount) * \ - (tdd[month]["percentage_allocation"]/100) + tav_dict.target = flt(flt(sd.target_amount) * month_percentage/100, 2) if ad.month_name == month and get_item_group(ad.item_code) == sd.item_group \ and ad.sales_person == sd.name: tav_dict.achieved += ad.amount diff --git a/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py b/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py index 4a8cc7c888..829f7818e3 100644 --- a/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py +++ b/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.py @@ -46,37 +46,36 @@ def get_columns(filters): label = (" ".join(fieldname.split("_"))).title() msgprint(_("Please specify") + ": " + label, raise_exception=True) - columns = ["Territory:Link/Territory:80", "Item Group:Link/Item Group:80"] + columns = ["Territory:Link/Territory:120", "Item Group:Link/Item Group:120"] group_months = False if filters["period"] == "Monthly" else True for from_date, to_date in get_period_date_ranges(filters["period"], filters["fiscal_year"]): for label in ["Target (%s)", "Achieved (%s)", "Variance (%s)"]: if group_months: - columns.append(label % (from_date.strftime("%b") + " - " + to_date.strftime("%b"))) + label = label % (from_date.strftime("%b") + " - " + to_date.strftime("%b")) else: - columns.append(label % from_date.strftime("%b")) + label = label % from_date.strftime("%b") + columns.append(label+":Float:120") - return columns + ["Total Target::80", "Total Achieved::80", "Total Variance::80"] + return columns + ["Total Target::120", "Total Achieved::120", "Total Variance::120"] #Get territory & item group details def get_territory_details(filters): return webnotes.conn.sql("""select t.name, td.item_group, td.target_qty, td.target_amount, t.distribution_id from `tabTerritory` t, `tabTarget Detail` td - where td.parent=t.name and td.fiscal_year=%s and - ifnull(t.distribution_id, '')!='' order by t.name""", + where td.parent=t.name and td.fiscal_year=%s order by t.name""", (filters["fiscal_year"]), as_dict=1) #Get target distribution details of item group def get_target_distribution_details(filters): target_details = {} - for d in webnotes.conn.sql("""select bdd.month, bdd.percentage_allocation \ - from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd, \ - `tabTerritory` t where bdd.parent=bd.name and t.distribution_id=bd.name and \ - bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1): - target_details.setdefault(d.month, d) + for d in webnotes.conn.sql("""select bd.name, bdd.month, bdd.percentage_allocation + from `tabBudget Distribution Detail` bdd, `tabBudget Distribution` bd + where bdd.parent=bd.name and bd.fiscal_year=%s""", (filters["fiscal_year"]), as_dict=1): + target_details.setdefault(d.name, {}).setdefault(d.month, d.percentage_allocation) return target_details @@ -99,25 +98,27 @@ def get_territory_item_month_map(filters): tim_map = {} for td in territory_details: - for month in tdd: + for month_id in range(1, 13): + month = datetime.date(2013, month_id, 1).strftime('%B') + tim_map.setdefault(td.name, {}).setdefault(td.item_group, {})\ - .setdefault(month, webnotes._dict({ - "target": 0.0, "achieved": 0.0 - })) + .setdefault(month, webnotes._dict({ + "target": 0.0, "achieved": 0.0 + })) tav_dict = tim_map[td.name][td.item_group][month] + month_percentage = td.distribution_id and \ + tdd.get(td.distribution_id, {}).get(month, 0) or 100.0/12 for ad in achieved_details: if (filters["target_on"] == "Quantity"): - tav_dict.target = flt(td.target_qty) * \ - (tdd[month]["percentage_allocation"]/100) + tav_dict.target = flt(flt(td.target_qty) * month_percentage /100) if ad.month_name == month and get_item_group(ad.item_code) == td.item_group \ and ad.territory == td.name: tav_dict.achieved += ad.qty if (filters["target_on"] == "Amount"): - tav_dict.target = flt(td.target_amount) * \ - (tdd[month]["percentage_allocation"]/100) + tav_dict.target = flt(flt(td.target_amount) * month_percentage / 100) if ad.month_name == month and get_item_group(ad.item_code) == td.item_group \ and ad.territory == td.name: tav_dict.achieved += ad.amount