Replace c3 (#11112)

* [charts] replace in asset.js

* replace in reports
This commit is contained in:
Prateeksha Singh 2017-10-17 12:03:02 +05:30 committed by Rushabh Mehta
parent 53659cf0bd
commit bfb108d722
10 changed files with 139 additions and 167 deletions

View File

@ -55,13 +55,13 @@ frappe.ui.form.on('Asset', {
}); });
} }
frm.trigger("show_graph"); frm.trigger("setup_chart");
} }
}, },
show_graph: function(frm) { setup_chart: function(frm) {
var x_intervals = ["x", frm.doc.purchase_date]; var x_intervals = [frm.doc.purchase_date];
var asset_values = ["Asset Value", frm.doc.gross_purchase_amount]; var asset_values = [frm.doc.gross_purchase_amount];
var last_depreciation_date = frm.doc.purchase_date; var last_depreciation_date = frm.doc.purchase_date;
if(frm.doc.opening_accumulated_depreciation) { if(frm.doc.opening_accumulated_depreciation) {
@ -94,32 +94,21 @@ frappe.ui.form.on('Asset', {
last_depreciation_date = frm.doc.disposal_date; last_depreciation_date = frm.doc.disposal_date;
} }
frm.dashboard.setup_chart({ frm.dashboard.render_graph({
title: "Asset Value",
data: { data: {
x: 'x', labels: x_intervals,
columns: [x_intervals, asset_values], datasets: [{
regions: { color: 'green',
'Asset Value': [{'start': last_depreciation_date, 'style':'dashed'}] values: asset_values,
} formatted: asset_values.map(d => d.toFixed(2))
}]
}, },
legend: { type: 'line'
show: false
},
axis: {
x: {
type: 'timeseries',
tick: {
format: "%d-%m-%Y"
}
},
y: {
min: 0,
padding: {bottom: 10}
}
}
}); });
}, },
item_code: function(frm) { item_code: function(frm) {
if(frm.doc.item_code) { if(frm.doc.item_code) {
frappe.call({ frappe.call({

View File

@ -44,7 +44,7 @@ class ReceivablePayableReport(object):
}) })
columns += [_("Age (Days)") + ":Int:80"] columns += [_("Age (Days)") + ":Int:80"]
self.ageing_col_idx_start = len(columns) self.ageing_col_idx_start = len(columns)
if not "range1" in self.filters: if not "range1" in self.filters:
@ -53,7 +53,7 @@ class ReceivablePayableReport(object):
self.filters["range2"] = "60" self.filters["range2"] = "60"
if not "range3" in self.filters: if not "range3" in self.filters:
self.filters["range3"] = "90" self.filters["range3"] = "90"
for label in ("0-{range1}".format(range1=self.filters["range1"]), for label in ("0-{range1}".format(range1=self.filters["range1"]),
"{range1}-{range2}".format(range1=cint(self.filters["range1"])+ 1, range2=self.filters["range2"]), "{range1}-{range2}".format(range1=cint(self.filters["range1"])+ 1, range2=self.filters["range2"]),
"{range2}-{range3}".format(range2=cint(self.filters["range2"])+ 1, range3=self.filters["range3"]), "{range2}-{range3}".format(range2=cint(self.filters["range2"])+ 1, range3=self.filters["range3"]),
@ -74,14 +74,14 @@ class ReceivablePayableReport(object):
}) })
if args.get("party_type") == "Customer": if args.get("party_type") == "Customer":
columns += [ columns += [
_("Territory") + ":Link/Territory:80", _("Territory") + ":Link/Territory:80",
_("Customer Group") + ":Link/Customer Group:120" _("Customer Group") + ":Link/Customer Group:120"
] ]
if args.get("party_type") == "Supplier": if args.get("party_type") == "Supplier":
columns += [_("Supplier Type") + ":Link/Supplier Type:80"] columns += [_("Supplier Type") + ":Link/Supplier Type:80"]
columns.append(_("Remarks") + "::200") columns.append(_("Remarks") + "::200")
return columns return columns
def get_data(self, party_naming_by, args): def get_data(self, party_naming_by, args):
@ -97,13 +97,13 @@ class ReceivablePayableReport(object):
self.filters["company"] = frappe.db.get_single_value('Global Defaults', 'default_company') self.filters["company"] = frappe.db.get_single_value('Global Defaults', 'default_company')
company_currency = frappe.db.get_value("Company", self.filters.get("company"), "default_currency") company_currency = frappe.db.get_value("Company", self.filters.get("company"), "default_currency")
return_entries = self.get_return_entries(args.get("party_type")) return_entries = self.get_return_entries(args.get("party_type"))
data = [] data = []
for gle in self.get_entries_till(self.filters.report_date, args.get("party_type")): for gle in self.get_entries_till(self.filters.report_date, args.get("party_type")):
if self.is_receivable_or_payable(gle, dr_or_cr, future_vouchers): if self.is_receivable_or_payable(gle, dr_or_cr, future_vouchers):
outstanding_amount, credit_note_amount = self.get_outstanding_amount(gle, outstanding_amount, credit_note_amount = self.get_outstanding_amount(gle,
self.filters.report_date, dr_or_cr, return_entries, currency_precision) self.filters.report_date, dr_or_cr, return_entries, currency_precision)
if abs(outstanding_amount) > 0.1/10**currency_precision: if abs(outstanding_amount) > 0.1/10**currency_precision:
row = [gle.posting_date, gle.party] row = [gle.posting_date, gle.party]
@ -179,15 +179,15 @@ class ReceivablePayableReport(object):
# entries adjusted with future vouchers # entries adjusted with future vouchers
((gle.against_voucher_type, gle.against_voucher) in future_vouchers) ((gle.against_voucher_type, gle.against_voucher) in future_vouchers)
) )
def get_return_entries(self, party_type): def get_return_entries(self, party_type):
doctype = "Sales Invoice" if party_type=="Customer" else "Purchase Invoice" doctype = "Sales Invoice" if party_type=="Customer" else "Purchase Invoice"
return [d.name for d in frappe.get_all(doctype, filters={"is_return": 1, "docstatus": 1})] return [d.name for d in frappe.get_all(doctype, filters={"is_return": 1, "docstatus": 1})]
def get_outstanding_amount(self, gle, report_date, dr_or_cr, return_entries, currency_precision): def get_outstanding_amount(self, gle, report_date, dr_or_cr, return_entries, currency_precision):
payment_amount, credit_note_amount = 0.0, 0.0 payment_amount, credit_note_amount = 0.0, 0.0
reverse_dr_or_cr = "credit" if dr_or_cr=="debit" else "debit" reverse_dr_or_cr = "credit" if dr_or_cr=="debit" else "debit"
for e in self.get_gl_entries_for(gle.party, gle.party_type, gle.voucher_type, gle.voucher_no): for e in self.get_gl_entries_for(gle.party, gle.party_type, gle.voucher_type, gle.voucher_no):
if getdate(e.posting_date) <= report_date and e.name!=gle.name: if getdate(e.posting_date) <= report_date and e.name!=gle.name:
amount = flt(e.get(reverse_dr_or_cr)) - flt(e.get(dr_or_cr)) amount = flt(e.get(reverse_dr_or_cr)) - flt(e.get(dr_or_cr))
@ -195,11 +195,11 @@ class ReceivablePayableReport(object):
payment_amount += amount payment_amount += amount
else: else:
credit_note_amount += amount credit_note_amount += amount
outstanding_amount = flt((flt(gle.get(dr_or_cr)) - flt(gle.get(reverse_dr_or_cr)) \ outstanding_amount = flt((flt(gle.get(dr_or_cr)) - flt(gle.get(reverse_dr_or_cr)) \
- payment_amount - credit_note_amount), currency_precision) - payment_amount - credit_note_amount), currency_precision)
credit_note_amount = flt(credit_note_amount, currency_precision) credit_note_amount = flt(credit_note_amount, currency_precision)
return outstanding_amount, credit_note_amount return outstanding_amount, credit_note_amount
def get_party_name(self, party_type, party_name): def get_party_name(self, party_type, party_name):
@ -207,7 +207,7 @@ class ReceivablePayableReport(object):
def get_territory(self, party_name): def get_territory(self, party_name):
return self.get_party_map("Customer").get(party_name, {}).get("territory") or "" return self.get_party_map("Customer").get(party_name, {}).get("territory") or ""
def get_customer_group(self, party_name): def get_customer_group(self, party_name):
return self.get_party_map("Customer").get(party_name, {}).get("customer_group") or "" return self.get_party_map("Customer").get(party_name, {}).get("customer_group") or ""
@ -220,7 +220,7 @@ class ReceivablePayableReport(object):
select_fields = "name, customer_name, territory, customer_group" select_fields = "name, customer_name, territory, customer_group"
elif party_type == "Supplier": elif party_type == "Supplier":
select_fields = "name, supplier_name, supplier_type" select_fields = "name, supplier_name, supplier_type"
self.party_map = dict(((r.name, r) for r in frappe.db.sql("select {0} from `tab{1}`" self.party_map = dict(((r.name, r) for r in frappe.db.sql("select {0} from `tab{1}`"
.format(select_fields, party_type), as_dict=True))) .format(select_fields, party_type), as_dict=True)))
@ -250,8 +250,8 @@ class ReceivablePayableReport(object):
else: else:
select_fields = "sum(debit) as debit, sum(credit) as credit" select_fields = "sum(debit) as debit, sum(credit) as credit"
self.gl_entries = frappe.db.sql("""select name, posting_date, account, party_type, party, self.gl_entries = frappe.db.sql("""select name, posting_date, account, party_type, party,
voucher_type, voucher_no, against_voucher_type, against_voucher, voucher_type, voucher_no, against_voucher_type, against_voucher,
account_currency, remarks, {0} account_currency, remarks, {0}
from `tabGL Entry` from `tabGL Entry`
where docstatus < 2 and party_type=%s and (party is not null and party != '') {1} where docstatus < 2 and party_type=%s and (party is not null and party != '') {1}
@ -277,13 +277,13 @@ class ReceivablePayableReport(object):
if party_type_field=="customer": if party_type_field=="customer":
if self.filters.get("customer_group"): if self.filters.get("customer_group"):
lft, rgt = frappe.db.get_value("Customer Group", lft, rgt = frappe.db.get_value("Customer Group",
self.filters.get("customer_group"), ["lft", "rgt"]) self.filters.get("customer_group"), ["lft", "rgt"])
conditions.append("""party in (select name from tabCustomer conditions.append("""party in (select name from tabCustomer
where exists(select name from `tabCustomer Group` where lft >= {0} and rgt <= {1} where exists(select name from `tabCustomer Group` where lft >= {0} and rgt <= {1}
and name=tabCustomer.customer_group))""".format(lft, rgt)) and name=tabCustomer.customer_group))""".format(lft, rgt))
if self.filters.get("credit_days_based_on"): if self.filters.get("credit_days_based_on"):
conditions.append("party in (select name from tabCustomer where credit_days_based_on=%s)") conditions.append("party in (select name from tabCustomer where credit_days_based_on=%s)")
values.append(self.filters.get("credit_days_based_on")) values.append(self.filters.get("credit_days_based_on"))
@ -303,22 +303,22 @@ class ReceivablePayableReport(object):
return self.gl_entries_map.get(party, {})\ return self.gl_entries_map.get(party, {})\
.get(against_voucher_type, {})\ .get(against_voucher_type, {})\
.get(against_voucher, []) .get(against_voucher, [])
def get_chart_data(self, columns, data): def get_chart_data(self, columns, data):
ageing_columns = columns[self.ageing_col_idx_start : self.ageing_col_idx_start+4] ageing_columns = columns[self.ageing_col_idx_start : self.ageing_col_idx_start+4]
rows = [] rows = []
for d in data: for d in data:
rows.append(d[self.ageing_col_idx_start : self.ageing_col_idx_start+4]) rows.append(d[self.ageing_col_idx_start : self.ageing_col_idx_start+4])
if rows: if rows:
rows.insert(0, [[d.get("label")] for d in ageing_columns]) rows.insert(0, [[d.get("label")] for d in ageing_columns])
return { return {
"data": { "data": {
'rows': rows 'labels': rows
}, },
"chart_type": 'pie' "type": 'percentage'
} }
def execute(filters=None): def execute(filters=None):

View File

@ -8,18 +8,18 @@ from frappe.utils import flt, cint
from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data) from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data)
def execute(filters=None): def execute(filters=None):
period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year,
filters.periodicity, company=filters.company) filters.periodicity, company=filters.company)
asset = get_data(filters.company, "Asset", "Debit", period_list, asset = get_data(filters.company, "Asset", "Debit", period_list,
only_current_fiscal_year=False, filters=filters, only_current_fiscal_year=False, filters=filters,
accumulated_values=filters.accumulated_values) accumulated_values=filters.accumulated_values)
liability = get_data(filters.company, "Liability", "Credit", period_list, liability = get_data(filters.company, "Liability", "Credit", period_list,
only_current_fiscal_year=False, filters=filters, only_current_fiscal_year=False, filters=filters,
accumulated_values=filters.accumulated_values) accumulated_values=filters.accumulated_values)
equity = get_data(filters.company, "Equity", "Credit", period_list, equity = get_data(filters.company, "Equity", "Credit", period_list,
only_current_fiscal_year=False, filters=filters, only_current_fiscal_year=False, filters=filters,
accumulated_values=filters.accumulated_values) accumulated_values=filters.accumulated_values)
@ -43,17 +43,17 @@ def execute(filters=None):
unclosed[period.key] = opening_balance unclosed[period.key] = opening_balance
if provisional_profit_loss: if provisional_profit_loss:
provisional_profit_loss[period.key] = provisional_profit_loss[period.key] - opening_balance provisional_profit_loss[period.key] = provisional_profit_loss[period.key] - opening_balance
unclosed["total"]=opening_balance unclosed["total"]=opening_balance
data.append(unclosed) data.append(unclosed)
if provisional_profit_loss: if provisional_profit_loss:
data.append(provisional_profit_loss) data.append(provisional_profit_loss)
if total_credit: if total_credit:
data.append(total_credit) data.append(total_credit)
columns = get_columns(filters.periodicity, period_list, filters.accumulated_values, company=filters.company) columns = get_columns(filters.periodicity, period_list, filters.accumulated_values, company=filters.company)
chart = get_chart_data(filters, columns, asset, liability, equity) chart = get_chart_data(filters, columns, asset, liability, equity)
return columns, data, message, chart return columns, data, message, chart
@ -87,7 +87,7 @@ def get_provisional_profit_loss(asset, liability, equity, period_list, company):
total += flt(provisional_profit_loss[period.key]) total += flt(provisional_profit_loss[period.key])
provisional_profit_loss["total"] = total provisional_profit_loss["total"] = total
total_row_total += flt(total_row[period.key]) total_row_total += flt(total_row[period.key])
total_row["total"] = total_row_total total_row["total"] = total_row_total
@ -98,7 +98,7 @@ def get_provisional_profit_loss(asset, liability, equity, period_list, company):
"warn_if_negative": True, "warn_if_negative": True,
"currency": currency "currency": currency
}) })
return provisional_profit_loss, total_row return provisional_profit_loss, total_row
def check_opening_balance(asset, liability, equity): def check_opening_balance(asset, liability, equity):
@ -111,17 +111,17 @@ def check_opening_balance(asset, liability, equity):
opening_balance -= flt(liability[0].get("opening_balance", 0), float_precision) opening_balance -= flt(liability[0].get("opening_balance", 0), float_precision)
if equity: if equity:
opening_balance -= flt(equity[0].get("opening_balance", 0), float_precision) opening_balance -= flt(equity[0].get("opening_balance", 0), float_precision)
opening_balance = flt(opening_balance, float_precision) opening_balance = flt(opening_balance, float_precision)
if opening_balance: if opening_balance:
return _("Previous Financial Year is not closed"),opening_balance return _("Previous Financial Year is not closed"),opening_balance
return None,None return None,None
def get_chart_data(filters, columns, asset, liability, equity): def get_chart_data(filters, columns, asset, liability, equity):
x_intervals = ['x'] + [d.get("label") for d in columns[2:]] labels = [d.get("label") for d in columns[2:]]
asset_data, liability_data, equity_data = [], [], [] asset_data, liability_data, equity_data = [], [], []
for p in columns[2:]: for p in columns[2:]:
if asset: if asset:
asset_data.append(asset[-2].get(p.get("fieldname"))) asset_data.append(asset[-2].get(p.get("fieldname")))
@ -129,23 +129,25 @@ def get_chart_data(filters, columns, asset, liability, equity):
liability_data.append(liability[-2].get(p.get("fieldname"))) liability_data.append(liability[-2].get(p.get("fieldname")))
if equity: if equity:
equity_data.append(equity[-2].get(p.get("fieldname"))) equity_data.append(equity[-2].get(p.get("fieldname")))
columns = [x_intervals] datasets = []
if asset_data: if asset_data:
columns.append(["Assets"] + asset_data) datasets.append({'title':'Assets', 'values': asset_data})
if liability_data: if liability_data:
columns.append(["Liabilities"] + liability_data) datasets.append({'title':'Liabilities', 'values': liability_data})
if equity_data: if equity_data:
columns.append(["Equity"] + equity_data) datasets.append({'title':'Equity', 'values': equity_data})
chart = { chart = {
"data": { "data": {
'x': 'x', 'labels': labels,
'columns': columns 'datasets': datasets
} }
} }
if not filters.accumulated_values: if not filters.accumulated_values:
chart["chart_type"] = "bar" chart["type"] = "bar"
else:
chart["type"] = "line"
return chart return chart

View File

@ -8,15 +8,15 @@ from frappe.utils import flt
from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data) from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data)
def execute(filters=None): def execute(filters=None):
period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year, period_list = get_period_list(filters.from_fiscal_year, filters.to_fiscal_year,
filters.periodicity, filters.accumulated_values, filters.company) filters.periodicity, filters.accumulated_values, filters.company)
income = get_data(filters.company, "Income", "Credit", period_list, filters = filters, income = get_data(filters.company, "Income", "Credit", period_list, filters = filters,
accumulated_values=filters.accumulated_values, accumulated_values=filters.accumulated_values,
ignore_closing_entries=True, ignore_accumulated_values_for_fy= True) ignore_closing_entries=True, ignore_accumulated_values_for_fy= True)
expense = get_data(filters.company, "Expense", "Debit", period_list, filters=filters, expense = get_data(filters.company, "Expense", "Debit", period_list, filters=filters,
accumulated_values=filters.accumulated_values, accumulated_values=filters.accumulated_values,
ignore_closing_entries=True, ignore_accumulated_values_for_fy= True) ignore_closing_entries=True, ignore_accumulated_values_for_fy= True)
net_profit_loss = get_net_profit_loss(income, expense, period_list, filters.company) net_profit_loss = get_net_profit_loss(income, expense, period_list, filters.company)
@ -61,7 +61,7 @@ def get_net_profit_loss(income, expense, period_list, company):
def get_chart_data(filters, columns, income, expense, net_profit_loss): def get_chart_data(filters, columns, income, expense, net_profit_loss):
x_intervals = ['x'] + [d.get("label") for d in columns[2:]] labels = [d.get("label") for d in columns[2:]]
income_data, expense_data, net_profit = [], [], [] income_data, expense_data, net_profit = [], [], []
@ -73,27 +73,24 @@ def get_chart_data(filters, columns, income, expense, net_profit_loss):
if net_profit_loss: if net_profit_loss:
net_profit.append(net_profit_loss.get(p.get("fieldname"))) net_profit.append(net_profit_loss.get(p.get("fieldname")))
columns = [x_intervals] datasets = []
if income_data: if income_data:
columns.append(["Income"] + income_data) datasets.append({'title': 'Income', 'values': income_data})
if expense_data: if expense_data:
columns.append(["Expense"] + expense_data) datasets.append({'title': 'Expense', 'values': expense_data})
if net_profit: if net_profit:
columns.append(["Net Profit/Loss"] + net_profit) datasets.append({'title': 'Net Profit/Loss', 'values': net_profit})
chart = { chart = {
"data": { "data": {
'x': 'x', 'labels': labels,
'columns': columns, 'datasets': datasets
'colors': {
'Income': '#5E64FF',
'Expense': '#b8c2cc',
'Net Profit/Loss': '#ff5858'
}
} }
} }
if not filters.accumulated_values: if not filters.accumulated_values:
chart["chart_type"] = "bar" chart["type"] = "bar"
else:
chart["type"] = "line"
return chart return chart

View File

@ -21,23 +21,13 @@ frappe.query_reports["Minutes to First Response for Opportunity"] = {
get_chart_data: function (columns, result) { get_chart_data: function (columns, result) {
return { return {
data: { data: {
x: 'Date', labels: result.map(d => d[0]),
columns: [ datasets: [{
['Date'].concat($.map(result, function (d) { return d[0]; })), title: 'Mins to first response',
['Mins to first response'].concat($.map(result, function (d) { return d[1]; })) values: result.map(d => d[1])
] }]
// rows: [['Date', 'Mins to first response']].concat(result)
}, },
axis: { type: 'line',
x: {
type: 'timeseries',
tick: {
format: frappe.ui.py_date_format
}
}
},
chart_type: 'line',
} }
} }
} }

View File

@ -29,26 +29,26 @@ def get_columns():
def get_log_data(filters): def get_log_data(filters):
fy = frappe.db.get_value('Fiscal Year', filters.get('fiscal_year'), ['year_start_date', 'year_end_date'], as_dict=True) fy = frappe.db.get_value('Fiscal Year', filters.get('fiscal_year'), ['year_start_date', 'year_end_date'], as_dict=True)
data = frappe.db.sql("""select data = frappe.db.sql("""select
vhcl.license_plate as "License", vhcl.make as "Make", vhcl.model as "Model", vhcl.license_plate as "License", vhcl.make as "Make", vhcl.model as "Model",
vhcl.location as "Location", log.name as "Log", log.odometer as "Odometer", vhcl.location as "Location", log.name as "Log", log.odometer as "Odometer",
log.date as "Date", log.fuel_qty as "Fuel Qty", log.price as "Fuel Price" log.date as "Date", log.fuel_qty as "Fuel Qty", log.price as "Fuel Price"
from from
`tabVehicle` vhcl,`tabVehicle Log` log `tabVehicle` vhcl,`tabVehicle Log` log
where where
vhcl.license_plate = log.license_plate and log.docstatus = 1 and date between %s and %s vhcl.license_plate = log.license_plate and log.docstatus = 1 and date between %s and %s
order by date""" ,(fy.year_start_date, fy.year_end_date), as_dict=1) order by date""" ,(fy.year_start_date, fy.year_end_date), as_dict=1)
dl=list(data) dl=list(data)
for row in dl: for row in dl:
row["Service Expense"]= get_service_expense(row["Log"]) row["Service Expense"]= get_service_expense(row["Log"])
return dl return dl
def get_service_expense(logname): def get_service_expense(logname):
expense_amount = frappe.db.sql("""select sum(expense_amount) expense_amount = frappe.db.sql("""select sum(expense_amount)
from `tabVehicle Log` log,`tabVehicle Service` ser from `tabVehicle Log` log,`tabVehicle Service` ser
where ser.parent=log.name and log.name=%s""",logname) where ser.parent=log.name and log.name=%s""",logname)
return flt(expense_amount[0][0]) if expense_amount else 0 return flt(expense_amount[0][0]) if expense_amount else 0
def get_chart_data(data,period_list): def get_chart_data(data,period_list):
fuel_exp_data,service_exp_data,fueldata,servicedata = [],[],[],[] fuel_exp_data,service_exp_data,fueldata,servicedata = [],[],[],[]
service_exp_data = [] service_exp_data = []
@ -63,19 +63,25 @@ def get_chart_data(data,period_list):
fueldata.append([period.key,total_fuel_exp]) fueldata.append([period.key,total_fuel_exp])
servicedata.append([period.key,total_ser_exp]) servicedata.append([period.key,total_ser_exp])
x_intervals = ['x'] + [period.key for period in period_list] labels = [period.key for period in period_list]
fuel_exp_data= [row[1] for row in fueldata] fuel_exp_data= [row[1] for row in fueldata]
service_exp_data= [row[1] for row in servicedata] service_exp_data= [row[1] for row in servicedata]
columns = [x_intervals] datasets = []
if fuel_exp_data: if fuel_exp_data:
columns.append(["Fuel Expenses"]+ fuel_exp_data) datasets.append({
'title': 'Fuel Expenses',
'values': fuel_exp_data
})
if service_exp_data: if service_exp_data:
columns.append(["Service Expenses"]+ service_exp_data) datasets.append({
'title': 'Service Expenses',
'values': service_exp_data
})
chart = { chart = {
"data": { "data": {
'x': 'x', 'labels': labels,
'columns': columns 'datasets': datasets
} }
} }
chart["chart_type"] = "line" chart["type"] = "line"
return chart return chart

View File

@ -53,7 +53,7 @@ erpnext.ProductionAnalytics = frappe.views.GridReportWithPlot.extend({
this.show_zero_check() this.show_zero_check()
this.setup_chart_check(); this.setup_chart_check();
}, },
init_filter_values: function() { init_filter_values: function() {
this._super(); this._super();
@ -61,12 +61,13 @@ erpnext.ProductionAnalytics = frappe.views.GridReportWithPlot.extend({
}, },
setup_chart: function() { setup_chart: function() {
var me = this; var me = this;
var chart_data = this.get_chart_data ? this.get_chart_data() : null; var chart_data = this.get_chart_data ? this.get_chart_data() : null;
this.chart = new frappe.ui.Chart({ this.chart = new frappe.chart.FrappeChart({
wrapper: this.chart_area, parent: ".chart",
data: chart_data data: chart_data,
type: 'line'
}); });
}, },
set_default_values: function() { set_default_values: function() {
@ -95,7 +96,7 @@ erpnext.ProductionAnalytics = frappe.views.GridReportWithPlot.extend({
var pending = {name:"Pending", "id":"pending-pos", var pending = {name:"Pending", "id":"pending-pos",
checked:true}; checked:true};
var completed = {name:"Completed", "id":"completed-pos", var completed = {name:"Completed", "id":"completed-pos",
checked:true}; checked:true};
$.each(frappe.report_dump.data["Production Order"], function(i, d) { $.each(frappe.report_dump.data["Production Order"], function(i, d) {
var dateobj = frappe.datetime.str_to_obj(d.creation); var dateobj = frappe.datetime.str_to_obj(d.creation);
@ -109,10 +110,10 @@ erpnext.ProductionAnalytics = frappe.views.GridReportWithPlot.extend({
var planned_start_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.planned_start_date)); var planned_start_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.planned_start_date));
var aend_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.actual_end_date)); var aend_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.actual_end_date));
var modified = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.modified)); var modified = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.modified));
if (dateobj <= start_period || dateobj <= end_period) { if (dateobj <= start_period || dateobj <= end_period) {
all_open_orders[col.field] = flt(all_open_orders[col.field]) + 1; all_open_orders[col.field] = flt(all_open_orders[col.field]) + 1;
if(d.status=="Completed") { if(d.status=="Completed") {
if(aend_date < start_period || modified < start_period) { if(aend_date < start_period || modified < start_period) {
completed[col.field] = flt(completed[col.field]) + 1; completed[col.field] = flt(completed[col.field]) + 1;
@ -140,7 +141,7 @@ erpnext.ProductionAnalytics = frappe.views.GridReportWithPlot.extend({
}else{ }else{
not_started[col.field] = flt(not_started[col.field]) + 1; not_started[col.field] = flt(not_started[col.field]) + 1;
} }
} }
} }
} }
}); });
@ -151,6 +152,6 @@ erpnext.ProductionAnalytics = frappe.views.GridReportWithPlot.extend({
this.chart_area.toggle(false); this.chart_area.toggle(false);
} }
this.data = [all_open_orders, not_started, overdue, pending, completed]; this.data = [all_open_orders, not_started, overdue, pending, completed];
} }
}); });

View File

@ -172,20 +172,19 @@ def get_column(assessment_criteria, total_maximum_score):
def get_chart_data(grades, assessment_criteria_list, kounter): def get_chart_data(grades, assessment_criteria_list, kounter):
grades = sorted(grades) grades = sorted(grades)
chart_data = [] datasets = []
chart_data.append(["x"] + assessment_criteria_list)
for grade in grades: for grade in grades:
tmp = [grade] tmp = []
for ac in assessment_criteria_list: for ac in assessment_criteria_list:
if grade in kounter[ac]: if grade in kounter[ac]:
tmp.append(kounter[ac][grade]) tmp.append(kounter[ac][grade])
else: else:
tmp.append(0) tmp.append(0)
chart_data.append(tmp) datasets.append(tmp)
return { return {
"data": { "data": {
"x": "x", "labels": assessment_criteria_list,
"columns": chart_data "datasets": datasets
}, },
"chart_type": 'bar', "type": 'bar',
} }

View File

@ -18,23 +18,13 @@ frappe.query_reports["Minutes to First Response for Issues"] = {
get_chart_data: function(columns, result) { get_chart_data: function(columns, result) {
return { return {
data: { data: {
x: 'Date', labels: result.map(d => d[0]),
columns: [ datasets: [{
['Date'].concat($.map(result, function(d) { return d[0]; })), title: 'Mins to first response',
['Mins to first response'].concat($.map(result, function(d) { return d[1]; })) values: result.map(d => d[1])
] }]
// rows: [['Date', 'Mins to first response']].concat(result)
}, },
axis: { type: 'line',
x: {
type: 'timeseries',
tick: {
format: frappe.ui.py_date_format
}
}
},
chart_type: 'line',
} }
} }
} }

View File

@ -24,7 +24,7 @@ def execute(filters=None):
columns = get_columns() columns = get_columns()
data, timeslot_wise_count = get_data(filters) data, timeslot_wise_count = get_data(filters)
chart = get_chartdata(timeslot_wise_count) chart = get_chart_data(timeslot_wise_count)
return columns, data, None, chart return columns, data, None, chart
def get_data(filters): def get_data(filters):
@ -75,23 +75,21 @@ def get_columns():
return columns return columns
def get_chartdata(timeslot_wise_count): def get_chart_data(timeslot_wise_count):
x_interval = ['x'] total_count = []
total_count = ['Total']
timeslots = ['12AM - 3AM', '3AM - 6AM', '6AM - 9AM', timeslots = ['12AM - 3AM', '3AM - 6AM', '6AM - 9AM',
'9AM - 12PM', '12PM - 3PM', '3PM - 6PM', '6PM - 9PM', '9PM - 12AM'] '9AM - 12PM', '12PM - 3PM', '3PM - 6PM', '6PM - 9PM', '9PM - 12AM']
x_interval.extend(timeslots) datasets = []
columns = [x_interval]
for data in timeslots: for data in timeslots:
total_count.append(timeslot_wise_count.get(data, 0)) total_count.append(timeslot_wise_count.get(data, 0))
columns.append(total_count) datasets.append({'values': total_count})
chart = { chart = {
"data": { "data": {
'x': 'x', 'labels': timeslots,
'columns': columns 'datasets': datasets
} }
} }
chart["chart_type"] = "line" chart["type"] = "line"
return chart return chart