public IActionResult CollectionToExcel(CollectionRptQuery model) { if (ModelState.IsValid) { var currentRoleId = partnerManager.GetCurrentUserRole(this.HttpContext); var permission = partnerActivity.GetPartAct("Report.Collection.StatReport.ExportToExcel", currentRoleId); if (permission == null) { toastNotification.AddErrorToastMessage("ليس لديك الصلاحية الكافية", new ToastrOptions { Title = "" }); return(Redirect(Request.Headers["Referer"].ToString())); } var param = new CollectionRptQueryParam { ChannelId = model.Param.ChannelId, PosId = model.Param.PosId, StatusId = model.Param.StatusId, LevelId = model.Param.LevelId, StartDate = model.Param.StartDate, EndDate = model.Param.EndDate }; var result = new CollectionRepo(db).GetStatReport(param); model.Results = result; if (result != null) { using (var workbook = new XLWorkbook()) { var worksheet = workbook.AddWorksheet("Collections"); worksheet.SetRightToLeft(); worksheet.ColumnWidth = 15; var currRow = 1; worksheet.Range(1, 1, 1, 7).Merge().Value = param.Title; worksheet.Range(1, 1, 1, 7).Style.Fill.BackgroundColor = XLColor.LightYellow; worksheet.Cell(currRow, 1).Style.Alignment.SetVertical(XLAlignmentVerticalValues.Center); worksheet.Cell(currRow, 1).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); worksheet.Row(1).Height = 100; worksheet.Row(1).Style.Font.Bold = true; worksheet.Row(1).Style.Font.FontSize = 16; ++currRow; worksheet.Cell(currRow, 1).Value = "القناة"; worksheet.Cell(currRow, 2).Value = model.Param.LevelId == "pos" ? "رقم النقطة" : "اليوم"; worksheet.Cell(currRow, 3).Value = model.Param.LevelId == "pos" ? "رقم النقطة" : ""; worksheet.Cell(currRow, 4).Value = "الحالة"; worksheet.Cell(currRow, 5).Value = "عدد العمليات"; worksheet.Cell(currRow, 6).Value = "اجمالي المبلغ"; worksheet.Cell(currRow, 7).Value = "عدد النقاط"; worksheet.Row(currRow).Style.Font.Bold = true; worksheet.Row(currRow).Style.Font.FontSize = 14; worksheet.Row(currRow).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); worksheet.Row(currRow).Style.Alignment.SetVertical(XLAlignmentVerticalValues.Center); worksheet.Row(currRow).Height = 25; worksheet.Range(currRow, 1, currRow, 7).Style.Fill.BackgroundColor = XLColor.LightPastelPurple; foreach (var item in result) { ++currRow; worksheet.Columns(6, 6).Style.NumberFormat.SetFormat("#,##0.00"); worksheet.Columns(5, 5).Style.NumberFormat.SetFormat("#,##0"); worksheet.Columns(7, 7).Style.NumberFormat.SetFormat("#,##0"); worksheet.Row(currRow).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); worksheet.Row(currRow).Style.Alignment.SetVertical(XLAlignmentVerticalValues.Center); worksheet.Cell(currRow, 1).Value = item.Channel; worksheet.Cell(currRow, 2).Value = model.Param.LevelId == "pos" ? item.Partner.Id : item.CollDay; worksheet.Cell(currRow, 3).Value = model.Param.LevelId == "pos" ? item.Partner.Name : ""; worksheet.Cell(currRow, 4).Value = item.Status.Name; worksheet.Cell(currRow, 5).Value = item.Count; worksheet.Cell(currRow, 6).Value = item.Amount; worksheet.Cell(currRow, 7).Value = item.DistinctCount; worksheet.Row(currRow).Height = 20; } ++currRow; worksheet.Row(currRow).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); worksheet.Row(currRow).Style.Alignment.SetVertical(XLAlignmentVerticalValues.Center); worksheet.Row(currRow).Height = 25; worksheet.Row(currRow).Style.Font.Bold = true; worksheet.Row(currRow).Style.Font.FontSize = 12; worksheet.Cell(currRow, "E").SetFormulaA1("=SUM(E3:E" + (currRow - 1) + ")"); worksheet.Cell(currRow, "F").SetFormulaA1("=SUM(F3:F" + (currRow - 1) + ")"); worksheet.Cell(currRow, "G").SetFormulaA1("=SUM(G3:G" + (currRow - 1) + ")"); worksheet.Range(currRow, 1, currRow, 4).Merge().Value = "الاجــمـــالــي"; worksheet.Range(currRow, 1, currRow, 7).Style.Fill.BackgroundColor = XLColor.LightPastelPurple; worksheet.Range(1, 1, currRow, 7).Style.Border.BottomBorder = XLBorderStyleValues.Thick; worksheet.Range(1, 1, currRow, 7).Style.Border.BottomBorderColor = XLColor.Black; worksheet.Range(1, 1, currRow, 7).Style.Border.LeftBorder = XLBorderStyleValues.Thick; worksheet.Range(1, 1, currRow, 7).Style.Border.LeftBorderColor = XLColor.Black; worksheet.Range(1, 1, currRow, 7).Style.Border.RightBorder = XLBorderStyleValues.Thick; worksheet.Range(1, 1, currRow, 7).Style.Border.RightBorderColor = XLColor.Black; worksheet.Range(1, 1, currRow, 7).Style.Border.TopBorder = XLBorderStyleValues.Thick; worksheet.Range(1, 1, currRow, 7).Style.Border.TopBorderColor = XLColor.Black; worksheet.Range(1, 1, currRow, 7).Style.Border.InsideBorder = XLBorderStyleValues.Thin; worksheet.Range(1, 1, currRow, 7).Style.Border.InsideBorderColor = XLColor.LightGray; using (var stream = new MemoryStream()) { workbook.SaveAs(stream); var content = stream.ToArray(); return(File( content, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Collection" + DateTime.Today.ToString("yyyyMMdd") + ".xlsx" )); } } } } var channels = new CommonCodeRepo(db).GetCodesByType("access.channel"); var statuses = new CommonCodeRepo(db).GetCodesByType("Collection.Status"); model.Channels = channels; model.Statuses = statuses; return(View("Collection", model)); }
public List <CollectionRpt> GetStatReport(CollectionRptQueryParam param) { #region Parameters param.Title = "تقرير احصائي يوضح اجمالي التحصيلات"; var parameters = new List <OracleParameter>(); var whereCluase = new StringBuilder(); if (param != null) { if (!string.IsNullOrEmpty(param.PosId)) { whereCluase.Append(" WHERE pos_id = :PosId"); var p = new OracleParameter { ParameterName = "PosId", OracleDbType = OracleDbType.Varchar2, Value = param.PosId }; parameters.Add(p); param.Title += $"{Environment.NewLine} للرقم {param.PosId} "; } if (!string.IsNullOrEmpty(param.SubsNo)) { whereCluase.Append(whereCluase.Length > 0 ? " AND subs_no = :SubsNo" : " WHERE subs_no = :SubsNo"); var p = new OracleParameter { ParameterName = "SubsNo", OracleDbType = OracleDbType.Varchar2, Value = param.SubsNo }; parameters.Add(p); param.Title += $"{Environment.NewLine} للمشترك {param.SubsNo} "; } if (!string.IsNullOrEmpty(param.ChannelId) && param.ChannelId != "-1") { whereCluase.Append(whereCluase.Length > 0 ? " AND access_channel = :ChannelId" : " WHERE access_channel = :ChannelId"); var p = new OracleParameter { ParameterName = "ChannelId", OracleDbType = OracleDbType.Varchar2, Value = param.ChannelId }; parameters.Add(p); } if (!string.IsNullOrEmpty(param.StatusId) && param.StatusId != "-1") { whereCluase.Append(whereCluase.Length > 0 ? " AND status = :StatusId" : " WHERE status = :StatusId"); var p = new OracleParameter { ParameterName = "StatusId", OracleDbType = OracleDbType.Varchar2, Value = param.StatusId }; parameters.Add(p); } if (param.StartDate > DateTime.MinValue && param.StartDate != null) { whereCluase.Append(whereCluase.Length > 0 ? " AND createdon >= :StartDate" : " WHERE createdon >= :StartDate"); var p = new OracleParameter { ParameterName = "StartDate", OracleDbType = OracleDbType.Date, Value = param.StartDate }; parameters.Add(p); } if (param.EndDate > DateTime.MinValue && param.EndDate != null) { whereCluase.Append(whereCluase.Length > 0 ? " AND createdon <= :EndDate" : " WHERE createdon <= :EndDate"); var p = new OracleParameter { ParameterName = "EndDate", OracleDbType = OracleDbType.Date, Value = param.EndDate.AddDays(1) }; parameters.Add(p); } } #endregion string strSql = string.Empty; if (param.LevelId == "pos") { param.Title += $"{Environment.NewLine} للفترة من {param.StartDate.ToShortDateString()} الى {param.EndDate.ToShortDateString()} " + "على مستوى نقطة البيع"; strSql = $"select t.access_channel,t.access_channel_name, t.pos_id, t.pos_name,status, count(*) cnt, " + $"sum(t.amount) amt,count(distinct t.pos_id) dist_cnt from V_COLLECTION t {whereCluase}" + $" group by t.access_channel, t.pos_id, t.pos_name,t.access_channel_name,status "; } else { param.Title += $"{Environment.NewLine} للفترة من {param.StartDate.ToShortDateString()} الى {param.EndDate.ToShortDateString()} " + "على مستوى اليوم"; strSql = $"select t.access_channel,t.access_channel_name, to_char(createdon,'yyyy/mm/dd') d, count(*) cnt, sum(t.amount) amt,count(distinct t.pos_id) dist_cnt " + $" ,status from V_COLLECTION t {whereCluase}" + $" group by t.access_channel,to_char(createdon,'yyyy/mm/dd'),t.access_channel_name,status "; } DataTable masterDataTable; masterDataTable = db.GetData(strSql, parameters); if (masterDataTable == null) { return(null); } if (masterDataTable.Rows.Count == 0) { return(null); } var results = new List <CollectionRpt>(); foreach (DataRow row in masterDataTable.Rows) { var obj = new CollectionRpt(); obj.Amount = row["amt"] == DBNull.Value ? 0 : double.Parse(row["amt"].ToString()); obj.Count = row["cnt"] == DBNull.Value ? 0 : int.Parse(row["cnt"].ToString()); obj.DistinctCount = row["dist_cnt"] == DBNull.Value ? 0 : int.Parse(row["dist_cnt"].ToString()); obj.Channel = row["access_channel_name"] == DBNull.Value ? string.Empty : row["access_channel_name"].ToString(); var statusId = row["status"] == DBNull.Value ? string.Empty : row["status"].ToString(); obj.Status = new CommonCodeRepo(db).GetCodesById(statusId, "Collection.Status"); if (param.LevelId == "pos") { obj.Partner.Id = row["pos_id"] == DBNull.Value ? string.Empty : row["pos_id"].ToString(); obj.Partner.Name = row["pos_name"] == DBNull.Value ? string.Empty : row["pos_name"].ToString(); } else if (param.LevelId == "day") { obj.CollDay = row["d"] == DBNull.Value ? string.Empty : row["d"].ToString(); } results.Add(obj); } return(results); }