using ExportToExcel; using GODATA.Models.Report; using GODATA.Models.Ticket; using LoggingHelper; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Globalization; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.UI; namespace GODATA.Controllers { [GODATA.MvcApplication.SessionExpire] public class AnalysisController : Controller { /// /// Global variable for Analysis Repository. /// private AnalysisRepository objAnalysisRepository = null; #region Global Variables /// /// Represent object of LoggingUtility class /// LoggingUtility objLog = new LoggingUtility(); /// /// Global variable for Ticket administration CCE portal repository. /// private TicketAdministrationRepository objTicketAdministrationRepository = null; /// /// Absolute Path on server in which excel files are saved /// private static string _excelExportPathOnServer = ConfigurationManager.AppSettings["excelExportPathOnServer"].ToString(); /// /// URI to Path to Excel Export location. /// private static string _exportLocation = ConfigurationManager.AppSettings["excelExportPath"].ToString(); /// /// Represent string object contain log file path /// //string path = "~/Log/"; string path = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["PathLog"]); /// /// Represent string object contain Error log status /// string errorlogtf = (ConfigurationManager.AppSettings["ErrorLog"]); /// /// Represent string object contain log status /// string logtf = (ConfigurationManager.AppSettings["Log"]); #endregion /// /// The Geo Analysis View /// /// Returns view of Geo analysis public ActionResult Index() { return View(); } /// /// Get Analysis Report Data based Year, Open Ticket, Close Ticket, Dealer,EOS Van /// /// Contain Month, IsDealer,IsVan, IsOpenTicket and IsCloseTicket /// return JSON Result view Of Analysis Model Object [HttpGet] //[OutputCache(Duration = 120, VaryByParam = "None", Location = OutputCacheLocation.Client)] public JsonResult Analysis_GetAnalysisRprtDetl(Analysis objAnalysis) { Analysis objAnalysisNew = new Analysis(); objLog.AddLogFile("Analysis_GetAnalysisRprtDetl", DateTime.Now.ToString(ConfigurationManager.AppSettings["dateTimeFormat"]), path, logtf); try { objAnalysisRepository = new AnalysisRepository(); //Set First and Last Date of Year If No value comes from Javascript else get value that comes From js object if (objAnalysis.Month == "" || objAnalysis.Month == null) { objAnalysis.FromDate = "01-Jan-" + objAnalysis.Year; objAnalysis.ToDate = "31-Dec-" + objAnalysis.Year; } else { objAnalysis.FromDate = "01-" + objAnalysis.Month + "-" + objAnalysis.Year; objAnalysis.ToDate = DateTime.DaysInMonth(Convert.ToInt32(objAnalysis.Year), DateTime.ParseExact(objAnalysis.Month, "MMM", CultureInfo.InvariantCulture).Month).ToString() + "-" + objAnalysis.Month + "-" + objAnalysis.Year; } //Get Analysis Report Data From Repository based Year, Open Ticket, Close Ticket, Dealer,EOS Van objAnalysisNew = objAnalysisRepository.GetAllRecords(objAnalysis); //Get Distinct Result Of EOS Van Detail List oEosVanList = objAnalysisNew.GeoAnalysisModelReport.lsEOSVAN.GroupBy(x => x.Id).Select(y => y.First()).Distinct().ToList(); oEosVanList.ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["DealerDetl"])); objAnalysisNew.GeoAnalysisModelReport.lsEOSVAN.Clear(); oEosVanList.Where(i => i.DefaultLongitude == "0" || i.DefaultLongitude == null).ToList().ForEach(i => i.DefaultLongitude = System.Configuration.ConfigurationManager.AppSettings["DefaultLongitude"]); oEosVanList.Where(i => i.DefaultLattitude == "0" || i.DefaultLattitude == null).ToList().ForEach(i => i.DefaultLattitude = System.Configuration.ConfigurationManager.AppSettings["DefaultLatitude"]); objAnalysisNew.GeoAnalysisModelReport.lsEOSVAN = oEosVanList; //Set EOS Van lstype so that we can identify in Javascript the Result is for EOS Van objAnalysisNew.GeoAnalysisModelReport.lsEOSVAN.ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["EOSVan"])); //Get Distinct Result Of Dealer Detail List oDealerList = objAnalysisNew.GeoAnalysisModelReport.lsDealerDetl.GroupBy(x => x.Id).Select(y => y.First()).Distinct().ToList(); //Set Dealer lstype so that we can identify in Javascript the Result is for Dealer oDealerList.Where(i => i.DefaultLongitude == "0" || i.DefaultLongitude == null).ToList().ForEach(i => i.DefaultLongitude = System.Configuration.ConfigurationManager.AppSettings["DefaultLongitude"]); oDealerList.Where(i => i.DefaultLattitude == "0" || i.DefaultLattitude == null).ToList().ForEach(i => i.DefaultLattitude = System.Configuration.ConfigurationManager.AppSettings["DefaultLatitude"]); oDealerList.ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["DealerDetl"])); objAnalysisNew.GeoAnalysisModelReport.lsDealerDetl.Clear(); objAnalysisNew.GeoAnalysisModelReport.lsDealerDetl = oDealerList; //Set Open Ticket lstype so that we can identify in Javascript the Result is for Open Ticket objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket.ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["OpenTicket"])); //Set Close Ticket lstype so that we can identify in Javascript the Result is for Close Ticket objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["CloseTicket"])); //Set Opportunity Lost oppurLost so that we can identify in Javascript the Result is for Opportunity Lost objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(i => i.TicketStatusAlias == "Opportunity Lost").ToList().ForEach(i => i.oppurLost = true); string _LoginUserId = Session["UserId"].ToString(); string _timeOffSetMinutes = Session["UtcMinute"].ToString(); // Set View Bag Data that is used in Javascript ViewBag.SecurityToken = ConfigurationManager.AppSettings["RESTfulSecurityToken"].ToString(); ViewBag.UtcMinutes = _timeOffSetMinutes; ViewBag.Userid = _LoginUserId; var jsonResult = Json(objAnalysisNew, JsonRequestBehavior.AllowGet); jsonResult.MaxJsonLength = int.MaxValue; return jsonResult; //return Json(objAnalysisNew, JsonRequestBehavior.AllowGet); } catch (Exception ex) { objLog.ErrorLogFile("Analysis_GetAnalysisRprtDetl", ex.Message, path, errorlogtf); objLog.AddLogFile(DateTime.Now.ToString(ConfigurationManager.AppSettings["dateTimeFormat"]), path, logtf); throw ex; } } /// /// Get Analysis Report Data SLA Met ,SLA Not Met, State and Duration /// /// Contain State, IsSLANotMet, IsSLAMet, FromDate and ToDate /// return JSON Result view Of Analysis Model Object [HttpGet] public JsonResult Analysis_GetPositioningRprtDetl(Analysis objAnalysis) { Analysis objAnalysisNew = new Analysis(); objLog.AddLogFile("Analysis_GetAnalysisRprtDetl", DateTime.Now.ToString(ConfigurationManager.AppSettings["dateTimeFormat"]), path, logtf); try { objAnalysisRepository = new AnalysisRepository(); //It Means That if the Todate != -12 we have to substract the months that comes from javascript else Fromdate = 01-Jan-1947 And Substract 12 Months from Today if (objAnalysis.ToDate != "-12") { objAnalysis.FromDate = "01-" + DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.FromDate)).ToString("MMM") + "-" + DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.FromDate)).ToString("yyyy"); objAnalysis.ToDate = DateTime.DaysInMonth(DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.ToDate)).Year, DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.ToDate)).Month).ToString() + "-" + DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.ToDate)).ToString("MMM") + "-" + DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.ToDate)).ToString("yyyy"); } else { objAnalysis.ToDate = DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.ToDate)).ToString("dd") + "-" + DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.ToDate)).ToString("MMM") + "-" + DateTime.Now.AddMonths(Convert.ToInt32(objAnalysis.ToDate)).ToString("yyyy"); } //Get Analysis Report Data From Repository based Year, Open Ticket, Close Ticket, Dealer,EOS Van objAnalysisNew = objAnalysisRepository.GetAllRecords(objAnalysis); //if sla not met is not checked then we get only results of sla met and vice versa if (objAnalysis.IsSLANotMet == false) { objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket = objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket.Where(p => p.SlaMet == "True").ToList(); objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket = objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(p => p.SlaMet == "True").ToList(); } else if (objAnalysis.IsSLAMet == false) { objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket = objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket.Where(p => p.SlaMet == "False").ToList(); objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket = objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(p => p.SlaMet == "False").ToList(); } //Set SLA met and sla not met value in open and close ticket list so we can identify in javascript objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket.Where(p => p.SlaMet == "True").ToList().ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SLAMet"])); objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket.Where(p => p.SlaMet == "False").ToList().ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SLANotMet"])); objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(p => p.SlaMet == "True").ToList().ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SLAMet"])); objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(p => p.SlaMet == "False").ToList().ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SLANotMet"])); //get total SLA met and SLA Not Met Count so that we show it on Client Side objAnalysisNew.SLAMetCount = objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket.Where(p => p.SlaMet == "True").Count() + objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(p => p.SlaMet == "True").Count(); objAnalysisNew.SLANotMetCount = objAnalysisNew.GeoAnalysisModelReport.lsOpenTicket.Where(p => p.SlaMet == "False").Count() + objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(p => p.SlaMet == "False").Count(); string _LoginUserId = Session["UserId"].ToString(); string _timeOffSetMinutes = Session["UtcMinute"].ToString(); // Set View Bag Data that is used in Javascript ViewBag.SecurityToken = ConfigurationManager.AppSettings["RESTfulSecurityToken"].ToString(); ViewBag.UtcMinutes = _timeOffSetMinutes; ViewBag.Userid = _LoginUserId; return Json(objAnalysisNew, JsonRequestBehavior.AllowGet); } catch (Exception ex) { objLog.ErrorLogFile("Analysis_GetAnalysisRprtDetl", ex.Message, path, errorlogtf); objLog.AddLogFile(DateTime.Now.ToString(ConfigurationManager.AppSettings["dateTimeFormat"]), path, logtf); throw ex; } } #region Route wise geo analysis report /// /// The Geo Analysis View /// /// Returns view of Geo analysis public ActionResult Analysis_RouteWiseBreakdownReport_Index() { objTicketAdministrationRepository = new TicketAdministrationRepository(); //Get route List List oRouteList = objTicketAdministrationRepository.GetRoutesList(); //Bind route list to route drop down list List oRouteNameList = new List(); foreach (RouteModel items in oRouteList) { oRouteNameList.Add(new SelectListItem { Text = items.Name, Value = items.Id.ToString() }); } return View(oRouteNameList.OrderBy(o => o.Text)); } /// /// Get Analysis Report Data based Year, Open Ticket, Close Ticket, Dealer,EOS Van /// /// Contain Month, IsDealer,IsVan, IsOpenTicket and IsCloseTicket /// return JSON Result view Of Analysis Model Object [HttpGet] //[OutputCache(Duration = 120, VaryByParam = "None", Location = OutputCacheLocation.Client)] public JsonResult Analysis_RouteWiseBreakdownReport_GetReport(Analysis objAnalysis) { Analysis objAnalysisNew = new Analysis(); Analysis objReportKpiAnalysisData = new Analysis(); objLog.AddLogFile("Analysis_RouteWiseBreakdownReport_GetReport", DateTime.Now.ToString(ConfigurationManager.AppSettings["dateTimeFormat"]), path, logtf); try { objAnalysisRepository = new AnalysisRepository(); //Get Analysis Report Data From Repository based Year, Open Ticket, Close Ticket, Dealer,EOS Van objAnalysisNew = objAnalysisRepository.GetAllRouteWiseBreakdownRecords(objAnalysis); //Set Close Ticket lstype so that we can identify in Javascript the Result is for Close Ticket objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.ForEach(i => i.lstType = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["CloseTicket"])); //Set Opportunity Lost oppurLost so that we can identify in Javascript the Result is for Opportunity Lost objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.Where(i => i.TicketStatusAlias == "Opportunity Lost").ToList().ForEach(i => i.oppurLost = true); //Get kpi's data of analysis report objReportKpiAnalysisData = objAnalysisRepository.GetRouteWiseBreakdownKpiData(objAnalysis); string _LoginUserId = Session["UserId"].ToString(); string _timeOffSetMinutes = Session["UtcMinute"].ToString(); // Set View Bag Data that is used in Javascript ViewBag.SecurityToken = ConfigurationManager.AppSettings["RESTfulSecurityToken"].ToString(); ViewBag.UtcMinutes = _timeOffSetMinutes; ViewBag.Userid = _LoginUserId; var jsonResult = Json(new { data = objAnalysisNew, kpiData = objReportKpiAnalysisData }, JsonRequestBehavior.AllowGet); jsonResult.MaxJsonLength = int.MaxValue; return jsonResult; //return Json(objAnalysisNew, JsonRequestBehavior.AllowGet); } catch (Exception ex) { objLog.ErrorLogFile("Analysis_RouteWiseBreakdownReport_GetReport", ex.Message, path, errorlogtf); objLog.AddLogFile(DateTime.Now.ToString(ConfigurationManager.AppSettings["dateTimeFormat"]), path, logtf); throw ex; } } /// /// Export to excel consolidated Report /// /// Analysis Model /// Returns excel file [HttpPost] public string Analysis_RouteWiseBreakdownReport_ExportToExcel(Analysis objAnalysis) { Analysis objAnalysisNew = new Analysis(); objLog.AddLogFile("Analysis_RouteWiseBreakdownReport_ExportToExcel", DateTime.Now.ToString(ConfigurationManager.AppSettings["dateTimeFormat"]), path, logtf); try { string fileName = null; objAnalysisRepository = new AnalysisRepository(); //Get Analysis Report Data From Repository based Year, Open Ticket, Close Ticket, Dealer,EOS Van objAnalysisNew = objAnalysisRepository.GetAllRouteWiseBreakdownRecords(objAnalysis); DataTable ConsolidatedDataTable = objAnalysisNew.GeoAnalysisModelReport.lsCloseTicket.ToDataTable(); Int32 ConsolidatedDataTableColumnCount = ConsolidatedDataTable.Columns.Count - 1; for (var count = ConsolidatedDataTableColumnCount; count >= 12; count--) { ConsolidatedDataTable.Columns.RemoveAt(count); } // getting required dataset DataSet ds = new DataSet(); ds.Tables.Add(ConsolidatedDataTable); //Give column names ds.Tables[0].Columns[0].ColumnName = "Ticket Id"; ds.Tables[0].Columns[1].ColumnName = "Assigned To"; ds.Tables[0].Columns[2].ColumnName = "Creation Time"; ds.Tables[0].Columns[3].ColumnName = "Route"; ds.Tables[0].Columns[4].ColumnName = "VASTeam Member / Van Reg No."; ds.Tables[0].Columns[5].ColumnName = "State"; ds.Tables[0].Columns[6].ColumnName = "City"; ds.Tables[0].Columns[7].ColumnName = "Customer Name"; ds.Tables[0].Columns[8].ColumnName = "Customer Contact No."; ds.Tables[0].Columns[9].ColumnName = "Dealer Name"; ds.Tables[0].Columns[10].ColumnName = "Dealer Contact No."; ds.Tables[0].Columns[11].ColumnName = "Vehicle Model"; fileName = "RouteWiseConsolidatedReport_" + DateTime.Now.ToString("ddMMMyyyyhhmmss") + ".xlsx"; string SaveCsvAs = Server.MapPath(_excelExportPathOnServer + fileName); bool isCreated = CreateExcelFile.CreateExcelDocument(ds, SaveCsvAs); if (isCreated == true) { return _exportLocation + fileName; } else { return "error"; } } catch (Exception ex) { objLog.ErrorLogFile("Analysis_RouteWiseBreakdownReport_ExportToExcel", ex.Message, path, errorlogtf); throw ex; } } #endregion } }