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
}
}