Skip to content

Commit

Permalink
added js code for including subtotal
Browse files Browse the repository at this point in the history
  • Loading branch information
dotnetreport committed Feb 15, 2020
1 parent 1037798 commit 01f5c6e
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 44 deletions.
1 change: 1 addition & 0 deletions Models/DotNetReportModel.cs
Expand Up @@ -165,6 +165,7 @@ public class DotNetReportApiCall
public bool SaveReport { get; set; }
public string ReportJson { get; set; }
public bool adminMode { get; set; }
public bool SubTotalMode { get; set; }
}

public class DotNetDasboardReportModel : DotNetReportModel
Expand Down
120 changes: 77 additions & 43 deletions Scripts/dotnetreport.js
@@ -1,4 +1,4 @@
/// .Net Report Builder view model v3.0.1
/// .Net Report Builder view model v3.0.3
/// License has to be purchased for use
/// 2015-2018 (c) www.dotnetreport.com

Expand Down Expand Up @@ -138,7 +138,7 @@ function scheduleBuilder() {
SelectedAmPm: self.selectedAmPm(),
EmailTo: self.emailTo()
} : null;
}
};

self.fromJs = function (data) {
self.hasSchedule(data ? true : false);
Expand Down Expand Up @@ -256,8 +256,8 @@ var manageAccess = function (options) {
setupList: function (x, value) {
_.forEach(x, function (e) { if (value.indexOf(e.value()) >= 0) e.selected(true); else e.selected(false); });
}
}
}
};
};

var reportViewModel = function (options) {
var self = this;
Expand Down Expand Up @@ -330,6 +330,7 @@ var reportViewModel = function (options) {
self.currentSql = ko.observable();
self.currentConnectKey = ko.observable();
self.adminMode = ko.observable(false);
self.subTotals = ko.observableArray([]);

self.x = ko.observable(0);
self.y = ko.observable(0);
Expand Down Expand Up @@ -816,7 +817,7 @@ var reportViewModel = function (options) {
self.RunReport(true);
};

self.BuildFilterData = function (filtergroup) {
self.BuildFilterData = function (filtergroup) {
var groups = [];
$.each(filtergroup, function (i, g) {
var filters = [];
Expand All @@ -836,18 +837,18 @@ var reportViewModel = function (options) {
}
if (f) filters.push(f);
});

groups.push({
SavedReportId: self.ReportID(),
isRoot: g.isRoot,
AndOr: g.AndOr(),
Filters: filters,
Filters: filters,
});

});

return groups;
}
};

self.BuildReportData = function (drilldown) {
drilldown = drilldown || [];
Expand Down Expand Up @@ -935,6 +936,7 @@ var reportViewModel = function (options) {
self.LoadAllSavedReports();
}
}

if (!saveOnly) {
if (self.ReportMode() == "execute" || self.ReportMode() == "dashboard") {
self.ExecuteReportQuery(result.sql, result.connectKey);
Expand Down Expand Up @@ -962,7 +964,7 @@ var reportViewModel = function (options) {
self.ExecuteReportQuery = function (reportSql, connectKey) {
if (!reportSql || !connectKey) return;

ajaxcall({
return ajaxcall({
url: options.execReportUrl,
type: "POST",
data: JSON.stringify({
Expand Down Expand Up @@ -1008,7 +1010,7 @@ var reportViewModel = function (options) {
pageSize: e.pager.pageSize(),
sortBy: e.pager.sortColumn() || '',
desc: e.pager.sortDescending() || false
}),
})
}).done(function (ddData) {
if (ddData.d) { ddData = ddData.d; }
ddData.ReportData.IsDrillDown = ko.observable(true);
Expand Down Expand Up @@ -1069,6 +1071,38 @@ var reportViewModel = function (options) {
google.charts.setOnLoadCallback(self.DrawChart);
}

if (self.IncludeSubTotal()) {
ajaxcall({
url: options.runReportApiUrl,
type: "POST",
data: JSON.stringify({
method: "/ReportApi/RunReport",
SaveReport: self.CanSaveReports() ? self.SaveReport() : false,
ReportJson: JSON.stringify(self.BuildReportData()),
adminMode: self.adminMode(),
SubTotalMode: true
})
}).done(function (subtotalsqlResult) {
if (subtotalsqlResult.d) { subtotalsqlResult = subtotalsqlResult.d; }
ajaxcall({
url: options.execReportUrl,
type: "POST",
data: JSON.stringify({
reportSql: subtotalsqlResult.sql,
connectKey: subtotalsqlResult.connectKey,
reportType: self.ReportType(),
pageNumber: 1,
pageSize: 1,
sortBy: '',
desc: false
})
}).done(function (subtotalResult) {
if (subtotalResult.d) { subtotalResult = subtotalResult.d; }
self.subTotals(subtotalResult.ReportData.Rows);
});
});
}

});
};

Expand Down Expand Up @@ -1113,38 +1147,38 @@ var reportViewModel = function (options) {

var rowArray = [];
var dataColumns = [];
$.each(reportData.Rows, function (i, e) {
_.forEach(reportData.Rows, function (e) {
var itemArray = [];

$.each(e.Items, function (n, r) {
_.forEach(e.Items, function (r, n) {
if (n == 0) {
if (subGroups.length > 0) {
itemArray = _.filter(rowArray, function (x) { return x[0] == r.Value; });
if (itemArray.length > 0) {
rowArray = rowArray.filter(function (x) { return x[0] != r.Value; });
itemArray = itemArray[0];
} else {
itemArray.push(r.Column.IsNumeric ? parseInt(r.Value) : r.Value);
itemArray.push((r.Column.IsNumeric ? parseInt(r.Value) : r.Value) || 0);
}
} else {
itemArray.push(r.Column.IsNumeric ? parseInt(r.Value) : r.Value);
itemArray.push((r.Column.IsNumeric ? parseInt(r.Value) : r.Value) || 0);
}
} else if (subGroups.length > 0) {
var subgroup = _.filter(subGroups, function (x) { return x.index == n; });
if (subgroup.length == 1) {
if (_.filter(dataColumns, function (x) { return x == r.Value; }).length == 0) {
dataColumns.push(r.Value);
dataColumns.push(r.Value || 0);

$.each(valColumns, function (j, c) {
data.addColumn('number', r.Value + (j == 0 ? '' : '-' + j));
});

}
} else if (r.Column.IsNumeric) {
itemArray.push(r.Column.IsNumeric ? parseInt(r.Value) : r.Value);
itemArray.push((r.Column.IsNumeric ? parseInt(r.Value) : r.Value) || 0);
}
} else if (r.Column.IsNumeric) {
itemArray.push(r.Column.IsNumeric ? parseInt(r.Value) : r.Value);
itemArray.push((r.Column.IsNumeric ? parseInt(r.Value) : r.Value) || 0);
}
});

Expand All @@ -1167,8 +1201,8 @@ var reportViewModel = function (options) {
animation: {
startup: true,
duration: 1000,
easing: 'out',
},
easing: 'out'
}
};

var chartDiv = document.getElementById('chart_div_' + self.ReportID());
Expand Down Expand Up @@ -1356,7 +1390,7 @@ var reportViewModel = function (options) {
data: {
method: "/ReportApi/GetSavedReports",
model: JSON.stringify({ adminMode: self.adminMode() })
},
}
}).done(function (reports) {
if (reports.d) { reports = reports.d; }
$.each(reports, function (i, e) {
Expand All @@ -1382,7 +1416,7 @@ var reportViewModel = function (options) {
self.CanEdit(true);
self.SaveReport(true);
});
}
};

e.runReport = function () {
e.runMode = true;
Expand Down Expand Up @@ -1487,7 +1521,7 @@ var reportViewModel = function (options) {
model: JSON.stringify({
adminMode: self.adminMode()
})
},
}
}).done(function (tables) {
if (tables.d) { tables = tables.d; }
self.Tables(tables);
Expand Down Expand Up @@ -1550,7 +1584,7 @@ var dashboardViewModel = function (options) {
r.selected(false);
});
});
}
};

self.editDashboard = function () {
self.dashboard.Id(self.currentDashboard().id);
Expand Down Expand Up @@ -1578,9 +1612,9 @@ var dashboardViewModel = function (options) {

var list = '';
_.forEach(self.reportsAndFolders(), function (f) {
_.forEach(f.reports, function(r) {
_.forEach(f.reports, function (r) {
if (r.selected()) list += (list ? ',' : '') + r.reportId;
});
});
});

var model = {
Expand All @@ -1593,24 +1627,24 @@ var dashboardViewModel = function (options) {
userRolesAccess: self.dashboard.manageAccess.getAsList(self.dashboard.manageAccess.userRoles),
viewOnlyUserRoles: self.dashboard.manageAccess.getAsList(self.dashboard.manageAccess.viewOnlyUserRoles),
adminMode: self.adminMode()
}
};

ajaxcall({
url: options.apiUrl,
data: {
method: "/ReportApi/SaveDashboard",
model: JSON.stringify(model)
}
}).done(function (result) {
}).done(function (result) {
if (result.d) { result = result.d; }
toastr.success("Dashboard saved successfully");
setTimeout(function () {
window.location = window.location.href.split("?")[0] + "?id=" + result.id;
}, 500)
}, 500);
});

return true;
}
};

self.deleteDashboard = function () {
bootbox.confirm("Are you sure you would like to Delete this Dashboard?", function (r) {
Expand All @@ -1621,15 +1655,15 @@ var dashboardViewModel = function (options) {
method: "/ReportApi/DeleteDashboard",
model: JSON.stringify({ id: self.currentDashboard().id, adminMode: self.adminMode() })
}
}).done(function (result) {
}).done(function (result) {
toastr.success("Dashboard deleted successfully");
setTimeout(function () {
window.location = window.location.href.split("?")[0];
}, 500)
}, 500);
});
}
});
}
};

self.reports = ko.observableArray([]);
var i = 0;
Expand Down Expand Up @@ -1662,7 +1696,7 @@ var dashboardViewModel = function (options) {
report.showFlyFilters = ko.observable(false);
report.toggleFlyFilters = function () {
report.showFlyFilters(!report.showFlyFilters());
}
};
});

self.drawChart = function () {
Expand All @@ -1687,7 +1721,7 @@ var dashboardViewModel = function (options) {
})
}
});
}
};

self.init = function () {
var getReports = function () {
Expand All @@ -1696,9 +1730,9 @@ var dashboardViewModel = function (options) {
data: {
method: "/ReportApi/GetSavedReports",
model: JSON.stringify({ adminMode: self.adminMode() })
},
}
});
}
};

var getFolders = function () {
return ajaxcall({
Expand All @@ -1710,14 +1744,14 @@ var dashboardViewModel = function (options) {
})
}
});
}
};

return $.when(getReports(), getFolders()).done(function(allReports, allFolders) {
var setup = [];
return $.when(getReports(), getFolders()).done(function (allReports, allFolders) {
var setup = [];
if (allFolders[0].d) { allFolders[0] = allFolders[0].d; }
if (allReports[0].d) { allReports[0] = allReports[0].d; }

_.forEach(allFolders[0], function (x) {
_.forEach(allFolders[0], function (x) {
var folderReports = _.filter(allReports[0], { folderId: x.Id });
setup.push({
folderId: x.Id,
Expand All @@ -1729,13 +1763,13 @@ var dashboardViewModel = function (options) {
reportDescription: r.reportDescription,
reportType: r.reportType,
selected: ko.observable(false)
}
};
})
});
});
self.reportsAndFolders(setup);
});
}
};

self.adminMode.subscribe(function (newValue) {
self.init();
Expand Down
2 changes: 1 addition & 1 deletion Views/Shared/_Layout.Report.cshtml
Expand Up @@ -335,7 +335,7 @@
<script src="~/Scripts/knockout-sortable.min.js"></script>
<script src="~/Scripts/select2.min.js"></script>
<script src="~/Scripts/dotnetreport-helper.js"></script>
<script src="~/Scripts/dotnetreport.js?v=2.5.0"></script>
<script src="~/Scripts/dotnetreport.js?v=3.0.3"></script>
<script src="~/Scripts/lodash.min.js"></script>
@RenderSection("scripts", required: false)
@Html.PageScripts()
Expand Down

0 comments on commit 01f5c6e

Please sign in to comment.