[Partial] Fixed the issue for Territory Item Group Variance report
This commit is contained in:
parent
95760a7db6
commit
cbc18ffdbf
@ -13,10 +13,10 @@ def execute(filters=None):
|
|||||||
|
|
||||||
columns = get_columns(filters)
|
columns = get_columns(filters)
|
||||||
period_month_ranges = get_period_month_ranges(filters["period"], filters["fiscal_year"])
|
period_month_ranges = get_period_month_ranges(filters["period"], filters["fiscal_year"])
|
||||||
tim_map = get_territory_item_month_map(filters)
|
territory_item_group_dict = get_territory_item_month_map(filters)
|
||||||
|
|
||||||
data = []
|
data = []
|
||||||
for territory, territory_items in tim_map.items():
|
for territory, territory_items in territory_item_group_dict.items():
|
||||||
for item_group, monthwise_data in territory_items.items():
|
for item_group, monthwise_data in territory_items.items():
|
||||||
row = [territory, item_group]
|
row = [territory, item_group]
|
||||||
totals = [0, 0, 0]
|
totals = [0, 0, 0]
|
||||||
@ -77,20 +77,37 @@ def get_target_distribution_details(filters):
|
|||||||
return target_details
|
return target_details
|
||||||
|
|
||||||
#Get achieved details from sales order
|
#Get achieved details from sales order
|
||||||
def get_achieved_details(filters):
|
def get_achieved_details(filters, territory):
|
||||||
start_date, end_date = get_fiscal_year(fiscal_year = filters["fiscal_year"])[1:]
|
start_date, end_date = get_fiscal_year(fiscal_year = filters["fiscal_year"])[1:]
|
||||||
|
|
||||||
item_details = frappe.db.sql("""select soi.item_code, soi.qty, soi.base_net_amount, so.transaction_date,
|
lft, rgt = frappe.db.get_value("Territory", territory, ["lft", "rgt"])
|
||||||
so.territory, MONTHNAME(so.transaction_date) as month_name
|
|
||||||
from `tabSales Order Item` soi, `tabSales Order` so
|
item_details = frappe.db.sql("""
|
||||||
where soi.parent=so.name and so.docstatus=1 and so.transaction_date>=%s and
|
select
|
||||||
so.transaction_date<=%s""" % ('%s', '%s'),
|
soi.item_code, sum(soi.qty) as qty, sum(soi.base_net_amount) as amount,
|
||||||
(start_date, end_date), as_dict=1)
|
MONTHNAME(so.transaction_date) as month_name
|
||||||
|
from
|
||||||
|
`tabSales Order Item` soi, `tabSales Order` so
|
||||||
|
where
|
||||||
|
soi.parent=so.name and so.docstatus=1
|
||||||
|
and so.transaction_date>=%s and so.transaction_date<=%s
|
||||||
|
and exists(select name from `tabTerritory` where lft >=%s and rgt <= %s and name=so.territory)
|
||||||
|
group by
|
||||||
|
month_name, item_code
|
||||||
|
""", (start_date, end_date, lft, rgt), as_dict=1)
|
||||||
|
|
||||||
item_actual_details = {}
|
item_actual_details = {}
|
||||||
for d in item_details:
|
for d in item_details:
|
||||||
item_actual_details.setdefault(d.territory, {}).setdefault(\
|
item_group = get_item_group(d.item_code)
|
||||||
get_item_group(d.item_code), []).append(d)
|
item_actual_details.setdefault(item_group, frappe._dict())\
|
||||||
|
.setdefault(d.month_name, frappe._dict({
|
||||||
|
"quantity": 0,
|
||||||
|
"amount": 0
|
||||||
|
}))
|
||||||
|
|
||||||
|
value_dict = item_actual_details[item_group][d.month_name]
|
||||||
|
value_dict.quantity += flt(d.qty)
|
||||||
|
value_dict.amount += flt(d.amount)
|
||||||
|
|
||||||
return item_actual_details
|
return item_actual_details
|
||||||
|
|
||||||
@ -98,35 +115,34 @@ def get_territory_item_month_map(filters):
|
|||||||
import datetime
|
import datetime
|
||||||
territory_details = get_territory_details(filters)
|
territory_details = get_territory_details(filters)
|
||||||
tdd = get_target_distribution_details(filters)
|
tdd = get_target_distribution_details(filters)
|
||||||
achieved_details = get_achieved_details(filters)
|
|
||||||
|
|
||||||
tim_map = {}
|
territory_item_group_dict = {}
|
||||||
|
|
||||||
for td in territory_details:
|
for td in territory_details:
|
||||||
|
achieved_details = get_achieved_details(filters, td.name)
|
||||||
|
|
||||||
for month_id in range(1, 13):
|
for month_id in range(1, 13):
|
||||||
month = datetime.date(2013, month_id, 1).strftime('%B')
|
month = datetime.date(2013, month_id, 1).strftime('%B')
|
||||||
|
|
||||||
tim_map.setdefault(td.name, {}).setdefault(td.item_group, {})\
|
territory_item_group_dict.setdefault(td.name, {}).setdefault(td.item_group, {})\
|
||||||
.setdefault(month, frappe._dict({
|
.setdefault(month, frappe._dict({
|
||||||
"target": 0.0, "achieved": 0.0
|
"target": 0.0, "achieved": 0.0
|
||||||
}))
|
}))
|
||||||
|
|
||||||
tav_dict = tim_map[td.name][td.item_group][month]
|
target_achieved = territory_item_group_dict[td.name][td.item_group][month]
|
||||||
month_percentage = tdd.get(td.distribution_id, {}).get(month, 0) \
|
month_percentage = tdd.get(td.distribution_id, {}).get(month, 0) \
|
||||||
if td.distribution_id else 100.0/12
|
if td.distribution_id else 100.0/12
|
||||||
|
|
||||||
for ad in achieved_details.get(td.name, {}).get(td.item_group, []):
|
|
||||||
if (filters["target_on"] == "Quantity"):
|
|
||||||
tav_dict.target = flt(td.target_qty) * month_percentage / 100
|
|
||||||
if ad.month_name == month:
|
|
||||||
tav_dict.achieved += ad.qty
|
|
||||||
|
|
||||||
if (filters["target_on"] == "Amount"):
|
if (filters["target_on"] == "Quantity"):
|
||||||
tav_dict.target = flt(td.target_amount) * month_percentage / 100
|
target_achieved.target = flt(td.target_qty) * month_percentage / 100
|
||||||
if ad.month_name == month:
|
else:
|
||||||
tav_dict.achieved += ad.base_net_amount
|
target_achieved.target = flt(td.target_amount) * month_percentage / 100
|
||||||
|
|
||||||
return tim_map
|
target_achieved.achieved = achieved_details.get(td.item_group, {}).get(month, {})\
|
||||||
|
.get(filters["target_on"].lower())
|
||||||
|
|
||||||
|
return territory_item_group_dict
|
||||||
|
|
||||||
def get_item_group(item_name):
|
def get_item_group(item_name):
|
||||||
return frappe.db.get_value("Item", item_name, "item_group")
|
return frappe.db.get_value("Item", item_name, "item_group")
|
||||||
|
@ -80,10 +80,6 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.frm.fields_dict.sales_team && this.frm.fields_dict.sales_team.grid.get_field("sales_person")) {
|
|
||||||
this.frm.set_query("sales_person", "sales_team", erpnext.queries.not_a_group_filter);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
refresh: function() {
|
refresh: function() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user