private JsonTable BuildBondIssuMaturesChartDataForExcel(string rate, string columnType, DateTime start, DateTime end, string category, string itemList, string unit, int isUseSubCategory = 0, string subCategory = "Bond_Class", string subCategoryValue = "", bool isTotal = false) { var jTable = new JsonTable(); var typeName = "TypeCn"; var subTypeName = "SubTypeCn"; if (CultureHelper.IsEnglishCulture()) { typeName = "TypeEn"; subTypeName = "SubTypeEn"; } var yearsDic = new Dictionary <string, DataTable>(); var dates = PopulateRateTimes(start, end, rate); for (var i = 0; i < dates.Count; i += 2) { var currentStart = dates[i]; var currentEnd = dates[i + 1]; var summaryData = BondReportRepository.GetBondDepositoryBalanceChart(columnType, currentStart, currentEnd, category, itemList, unit, isUseSubCategory, subCategory, subCategoryValue); yearsDic.Add(rate == "y" ? currentEnd.ToString("yyyy") : currentEnd.ToString("yyyy-M"), summaryData); } var rows = yearsDic.FirstOrDefault().Value.Rows; var typeList = new Dictionary <string, string>(); string header; foreach (DataRow row in rows) { header = (string.IsNullOrEmpty(subCategoryValue) || subCategoryValue == "undefined") ? row[typeName].ToString() : String.Format("{0}({1})", row[typeName], row[subTypeName]); typeList.Add(row["Type"].ToString(), header); } jTable.ColumTemplate.Add(new JsonColumn { Name = Resources.Global.Date, ColumnName = "Date" }); if (!isTotal) { foreach (var t in typeList) { jTable.ColumTemplate.Add(new JsonColumn { Name = t.Value, ColumnName = t.Key + "_" + t.Value }); } } else { jTable.ColumTemplate.Add(new JsonColumn { Name = Resources.Global.Total, ColumnName = "Total" }); } foreach (var f in yearsDic) { var currentRow = new Dictionary <string, string>(); currentRow.Add("Date", f.Key); if (isTotal) { double total = 0; foreach (DataRow v in f.Value.Rows) { total += Convert.ToDouble(v[columnType]); } currentRow.Add("Total", total.ToString(CultureInfo.InvariantCulture)); } else { foreach (DataRow v in f.Value.Rows) { var name = (string.IsNullOrEmpty(subCategoryValue) || subCategoryValue == "undefined") ? v[typeName] : String.Format("{0}({1})", v[typeName], v[subTypeName]); currentRow.Add(v["Type"] + "_" + name, v[columnType].ToString()); } } jTable.RowData.Add(currentRow); } return(jTable); }
private ChartData GetIssuMaturesTopChart(string rate, string chartType, string columnType, DateTime start, DateTime end, string category, string itemList, string unit, int isUseSubCategory = 0, string subCategory = "Bond_Class", string subCategoryValue = "", bool isTotal = false) { if (start > end) { return(new ChartData()); } var chartData = new ChartData { ChartType = chartType, YText = Resources.Global.Unit + "(" + HtmlUtil.GetUnitOptionByKey(unit) + ")" }; switch (columnType) { case "InitialBalance": chartData.Decimal = 2; break; case "Issues": chartData.YText = string.Empty; chartData.Decimal = 0; break; case "IssuesPercent": chartData.YText = string.Empty; chartData.Decimal = 2; break; case "IssuesAmount": chartData.Decimal = 2; break; case "IssuesAmountPercent": chartData.YText = string.Empty; chartData.Decimal = 2; break; case "MaturityBonds": chartData.YText = string.Empty; chartData.Decimal = 0; break; case "MaturityAmount": chartData.Decimal = 2; break; case "EndBalance": chartData.Decimal = 2; break; case "EndIssuesPercent": chartData.YText = string.Empty; chartData.Decimal = 2; break; } var typeName = "TypeCn"; var subTypeName = "SubTypeCn"; if (CultureHelper.IsEnglishCulture()) { typeName = "TypeEn"; subTypeName = "SubTypeEn"; } if (chartType == "bar" || chartType == "line") { var yearsDic = new Dictionary <string, DataTable>(); var dates = PopulateRateTimes(start, end, rate); for (var i = 0; i < dates.Count; i += 2) { var currentStart = dates[i]; var currentEnd = dates[i + 1]; var summaryData = BondReportRepository.GetBondDepositoryBalanceChart(columnType, currentStart, currentEnd, category, itemList, unit, isUseSubCategory, subCategory, subCategoryValue); yearsDic.Add(rate == "y" ? currentEnd.ToString("yyyy") : currentEnd.ToString("yyyy-M"), summaryData); } chartData.ColumnCategories = yearsDic.Keys.Select(x => x.ToString()).ToArray(); var groupDic = new Dictionary <string, List <double> >(); if (isTotal) { groupDic.Add(Resources.Global.Total, new List <double>()); foreach (var keyValue in yearsDic) { double total = 0; for (var j = 0; j < keyValue.Value.Rows.Count; j++) { total += Convert.ToDouble(keyValue.Value.Rows[j][columnType]); } groupDic[Resources.Global.Total].Add(total); } } else { foreach (var keyValue in yearsDic) { for (var j = 0; j < keyValue.Value.Rows.Count; j++) { var name = keyValue.Value.Rows[j][typeName].ToString(); if (string.IsNullOrEmpty(subCategoryValue)) { if (!groupDic.ContainsKey(name)) { groupDic.Add(name, new List <double>()); } } else { name = string.Format("{0}({1})", keyValue.Value.Rows[j][typeName], keyValue.Value.Rows[j][subTypeName]); if (!groupDic.ContainsKey(name)) { groupDic.Add(name, new List <double>()); } } groupDic[name].Add(Convert.ToDouble(keyValue.Value.Rows[j][columnType])); } } } var seriesDataList = new List <SeriesData>(); foreach (var keyValue in groupDic) { var sData = new SeriesData { name = keyValue.Key }; if (keyValue.Value != null) { sData.data = keyValue.Value.ToArray(); seriesDataList.Add(sData); } } chartData.ColumnSeriesData = seriesDataList.ToArray(); } else { var groupData = BondReportRepository.GetBondDepositoryBalanceChart(columnType, start, end, category, itemList, unit, isUseSubCategory, subCategory, subCategoryValue); var pieData = new List <PieSectionData>(); for (int j = 0; j < groupData.Rows.Count; j++) { var currentSection = new PieSectionData { name = groupData.Rows[j][typeName].ToString(), y = Convert.ToDouble(groupData.Rows[j][columnType]) }; pieData.Add(currentSection); } chartData.PieSeriesData = pieData.ToArray(); } return(chartData); }