public ActionResult Search(string txtDateFrom, string txtDateTo, string txtURLContains, string SelectedAgency, string Export, int? Page, string SortBy, string Order)
        {
            try
            {
                if (txtURLContains == "Enter Text")
                    txtURLContains = "";
                if (SelectedAgency == null)
                {
                    SelectedAgency = "DOL.Gov";
                }
                if (txtURLContains == null)
                {
                    txtURLContains = "";
                }

                int resultsPerPage = 10;

                if (txtDateFrom == null | txtDateTo == null)
                {
                    txtDateTo = System.DateTime.Today.ToShortDateString();
                    txtDateFrom = System.DateTime.Today.Subtract(TimeSpan.FromDays(30)).ToShortDateString();
                }

                ReportsDomain _reportsDomain = new ReportsDomain(ConfigurationManager.ConnectionStrings["FeedbackScriptConnectionString"].ConnectionString);

                bool mFromDateStatus = isDate(txtDateFrom);
                bool mToDateStatus = isDate(txtDateTo);

                if (mFromDateStatus == false)
                {
                    txtDateFrom = System.DateTime.Today.Subtract(TimeSpan.FromDays(30)).ToShortDateString();
                    ModelState.AddModelError("FromDateValidation", "Invalid Date Range");
                }
                if (mToDateStatus == false)
                {
                    txtDateTo = System.DateTime.Today.ToShortDateString();
                    ModelState.AddModelError("ToDateValidation", "Invalid Date Range");
                }

                txtURLContains = ReplaceBad(txtURLContains);
                ViewData["txtDateFrom"] = txtDateFrom;
                ViewData["txtDateTo"] = txtDateTo;
                ViewData["urlContains"] = txtURLContains;

                if (!ModelState.IsValid)
                {
                    ViewData["AgencyList"] = new SelectList(new[]
                                {
                                    new {Agency="Empty List",Val="Empty List"},
                                },
                                "Agency", "Agency", "Empty List");
                    return View();
                }
                else
                {
                    if (Convert.ToDateTime(txtDateFrom) > Convert.ToDateTime(txtDateTo))
                    {
                        ModelState.AddModelError("FromDateValidation", "Invalid Date Range");
                        ModelState.AddModelError("ToDateValidation", "Invalid Date Range");
                        ViewData["AgencyList"] = new SelectList(new[]
                                {
                                    new {Agency="Empty List",Val="Empty List"},
                                },
                               "Agency", "Agency", "Empty List");
                        return View();
                    }
                }

                var orderedResultsPerPage = _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency);

                if (Export == string.Empty | Export == null)
                {
                    if (!Page.HasValue || Page.Value < 1) { Page = 1; }
                    if (SortBy == "" || SortBy == null) { SortBy = "AgencyName"; }
                    if (Order == "" || Order == null) { Order = "Asc"; }

                    PaginationInfo pi = new PaginationInfo { CurrentPage = Page.Value, ResultPerPage = resultsPerPage, TotalCount = _reportsDomain.GetSearch(txtDateFrom,txtDateTo,txtURLContains,SelectedAgency).Count(), SortBy = SortBy, Order = Order, txtDateFrom = txtDateFrom,txtDateTo = txtDateTo,SelectedAgency = SelectedAgency,urlContains = txtURLContains};
                    ViewData["paging"] = pi;

                    switch (SortBy)
                    {
                        case "URLLinks":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderBy(a => a.URL) : _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderByDescending(a => a.URL);
                            break;
                        case "AgencyName":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderBy(a => a.Agency) : _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderByDescending(a => a.Agency);
                            break;
                        case "PositiveFeedback":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderBy(a => a.Pfeedback) : _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderByDescending(a => a.Pfeedback);
                            break;
                        case "NumOfPosComments":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderBy(a => a.NumOfPosComments) : _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderByDescending(a => a.NumOfPosComments);
                            break;
                        case "NumOfNegComments":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderBy(a => a.NumOfNegComments) : _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderByDescending(a => a.NumOfNegComments);
                            break;
                        case "VolumeOfFeedback":
                        default:
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderBy(a => a.VolumeFeedBack) : _reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).OrderByDescending(a => a.VolumeFeedBack);
                            break;
                    }

                    ViewData["SortBy"] = SortBy;
                    ViewData["Order"] = Order;
                    ViewData["AgencyList"] = new SelectList(_reportsDomain.GetAgencyList(txtDateFrom,txtDateTo).ToList(), "Agency", "Agency", SelectedAgency);

                    if (_reportsDomain.GetSearch(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency).Count() <= 0)
                        ModelState.AddModelError("RecordCount", "No results found for the specified search criteria");

                    return View(orderedResultsPerPage.Skip(resultsPerPage * (Page.Value - 1)).Take(resultsPerPage));
                }
                else
                {
                    //ExportToExcelSearchPage(orderedResultsPerPage.ToList(), txtDateFrom.ToString(), txtDateTo.ToString());
                    ExportToExcelSearchPage(orderedResultsPerPage.ToList(), txtDateFrom.ToString(), txtDateTo.ToString(), txtURLContains, SelectedAgency);
                    return View(orderedResultsPerPage);
                }
            }
            catch (Exception ex)
            {
                ViewData["ErrorMessage"] = ex.Message + ex.StackTrace;
                return View("Error");
            }
        }
        public ActionResult ViewComments(string txtDateFrom, string txtDateTo, string URL, int? Page, string SortBy, string Order, string Export, string urlContains, string SelectedAgency)
        {
            try
            {
                int resultsPerPage = 10;

                ReportsDomain _reportsDomain = new ReportsDomain(ConfigurationManager.ConnectionStrings["FeedbackScriptConnectionString"].ConnectionString);

                URL= ReplaceBad(URL);
                txtDateFrom = ReplaceBad(txtDateFrom);
                txtDateTo = ReplaceBad(txtDateTo);

                var orderedResultsPerPage = _reportsDomain.GetCommentsList(txtDateFrom, txtDateTo, URL);

                if (Export == string.Empty | Export == null)
                {
                    if (!Page.HasValue || Page.Value < 1) { Page = 1; }
                    if (SortBy == "" || SortBy == null) { SortBy = "utcDate"; }
                    if (Order == "" || Order == null) { Order = "Asc"; }

                    PaginationInfo pi = new PaginationInfo { CurrentPage = Page.Value, ResultPerPage = resultsPerPage, TotalCount = _reportsDomain.GetCommentsList(txtDateFrom, txtDateTo, URL).Count(), SortBy = SortBy, Order = Order, txtDateFrom = txtDateFrom, txtDateTo = txtDateTo, URL = URL};
                    ViewData["paging"] = pi;

                    switch (SortBy)
                    {
                        case "utcDate":
                        default:
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetCommentsList(txtDateFrom, txtDateTo, URL).OrderBy(a => a.utcDate) : _reportsDomain.GetCommentsList(txtDateFrom, txtDateTo, URL).OrderByDescending(a => a.utcDate);
                            break;
                    }

                    var CountViewPage = _reportsDomain.GetCommentsList(txtDateFrom, txtDateTo, URL);
                    if (CountViewPage.Count() == 0)
                    {
                        txtDateFrom = "";
                        txtDateTo = "";
                        URL = "";
                    }

                    ViewData["SortBy"] = SortBy;
                    ViewData["Order"] = Order;
                    ViewData["txtDateFrom"] = txtDateFrom;
                    ViewData["txtDateTo"] = txtDateTo;
                    ViewData["URL"] = URL;
                    ViewData["urlContains"] = urlContains;
                    ViewData["SelectedAgency"] = SelectedAgency;

                    return View(orderedResultsPerPage.Skip(resultsPerPage * (Page.Value - 1)).Take(resultsPerPage));
                }
                else
                {
                    ExportToExcelCommentsPage(orderedResultsPerPage.ToList(), txtDateFrom.ToString(), txtDateTo.ToString(),txtDateFrom,txtDateTo,URL);
                    return View(orderedResultsPerPage);
                }
            }
            catch (Exception ex)
            {
                ViewData["ErrorMessage"] = ex.Message + ex.StackTrace;
                return View("Error");
            }
        }
        public ActionResult Trends(string txtDateFrom, string txtDateTo, string txtURLContains, string SelectedAgency, string SelectedUnit, string Export, int? Page, string SortBy, string Order)
        {
            try
            {
                if (txtURLContains == "Enter Text")
                    txtURLContains = "";
                string sUnit = string.Empty;
                if (SelectedUnit == null)
                    SelectedUnit = "D";

                var list = new SelectList(new []
                                {
                                    new {ID="D",Name="Days"},
                                    new{ID="W",Name="Weeks"},
                                    new{ID="M",Name="Months"},
                                    new{ID="Q",Name="Quarters"},
                                    new{ID="Y",Name="Years"},
                                },
                "ID","Name",SelectedUnit);

                ViewData["UnitList"] = list;
                if (SelectedAgency == null)
                {
                    SelectedAgency = "DOL.Gov";
                }
                if (txtURLContains == null)
                {
                    txtURLContains = "";
                }

                int resultsPerPage = 10;

                if (txtDateFrom == null | txtDateTo == null)
                {
                    txtDateTo = System.DateTime.Today.ToShortDateString();
                    txtDateFrom = System.DateTime.Today.Subtract(TimeSpan.FromDays(30)).ToShortDateString();
                }

                ReportsDomain _reportsDomain = new ReportsDomain(ConfigurationManager.ConnectionStrings["FeedbackScriptConnectionString"].ConnectionString);

                bool mFromDateStatus = isDate(txtDateFrom);
                bool mToDateStatus = isDate(txtDateTo);

                if (mFromDateStatus == false)
                {
                    txtDateFrom = System.DateTime.Today.Subtract(TimeSpan.FromDays(30)).ToShortDateString();
                    ModelState.AddModelError("FromDateValidation", "Invalid Date Range");
                }
                if (mToDateStatus == false)
                {
                    txtDateTo = System.DateTime.Today.ToShortDateString();
                    ModelState.AddModelError("ToDateValidation", "Invalid Date Range");
                }

                txtURLContains = ReplaceBad (txtURLContains);
                ViewData["txtDateFrom"] = txtDateFrom;
                ViewData["txtDateTo"] = txtDateTo;
                ViewData["urlContains"] = txtURLContains;

                if (!ModelState.IsValid)
                {
                    ViewData["AgencyList"] = new SelectList(new[]
                                {
                                    new {Agency="Empty List",Val="Empty List"},
                                },
                               "Agency", "Agency", "Empty List");
                    return View();
                }
                else
                {
                    if (Convert.ToDateTime(txtDateFrom) > Convert.ToDateTime(txtDateTo))
                    {
                        ModelState.AddModelError("FromDateValidation", "Invalid Date Range");
                        ModelState.AddModelError("ToDateValidation", "Invalid Date Range");
                        ViewData["AgencyList"] = new SelectList(new[]
                                {
                                    new {Agency="Empty List",Val="Empty List"},
                                },
                                "Agency", "Agency", "Empty List");
                        return View();
                    }
                }

                var orderedResultsPerPage = _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,'D');

                if (Export == string.Empty | Export == null)
                {
                    if (!Page.HasValue || Page.Value < 1) { Page = 1; }
                    if (SortBy == "" || SortBy == null) { SortBy = "UnitName"; }
                    if (Order == "" || Order == null) { Order = "Asc"; }
                    char mEmpty = new char();
                    PaginationInfo pi = new PaginationInfo { CurrentPage = Page.Value, ResultPerPage = resultsPerPage, TotalCount = _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,mEmpty).Count(), SortBy = SortBy, Order = Order, txtDateFrom = txtDateFrom, txtDateTo = txtDateTo, SelectedAgency = SelectedAgency, urlContains = txtURLContains, UnitName = SelectedUnit};
                    ViewData["paging"] = pi;

                    switch (SortBy)
                    {
                        case "VolumeOfFeedback":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,mEmpty).OrderBy(a => a.VolumeFeedBack) : _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,mEmpty).OrderByDescending(a => a.VolumeFeedBack);
                            break;
                        case "NumOfPosComments":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit, mEmpty).OrderBy(a => a.NumOfPosComments) : _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit, mEmpty).OrderByDescending(a => a.NumOfPosComments);
                            break;
                        case "NumOfNegComments":
                            orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit, mEmpty).OrderBy(a => a.NumOfNegComments) : _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit, mEmpty).OrderByDescending(a => a.NumOfNegComments);
                            break;
                        case "UnitName":
                        default:
                            if (SelectedUnit == "M")
                                orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,'A') : _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,'D');
                            else
                                orderedResultsPerPage = Order == "Asc" ? _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit, mEmpty).OrderBy(a=>a.UnitName) : _reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit, mEmpty).OrderByDescending(a=>a.UnitName);
                            break;
                    }

                    ViewData["SortBy"] = SortBy;
                    ViewData["Order"] = Order;
                    ViewData["AgencyList"] = new SelectList(_reportsDomain.GetAgencyList(txtDateFrom,txtDateTo).ToList(), "Agency", "Agency", SelectedAgency);

                    if (_reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,mEmpty).Count() <= 0)
                    {
                        ModelState.AddModelError("RecordCount", "No results found for the specified search criteria");
                    }
                    else
                    {
                        int MaxRecSizeVolFeedBack = new int();
                        ViewData["graphData"] = GetGraphData(_reportsDomain.GetTrend(txtDateFrom, txtDateTo, txtURLContains, SelectedAgency, SelectedUnit,'A').ToList(), out MaxRecSizeVolFeedBack);
                        ViewData["MaxRecSizeVolFeedBack"] = MaxRecSizeVolFeedBack;
                    }

                    return View(orderedResultsPerPage.Skip(resultsPerPage * (Page.Value - 1)).Take(resultsPerPage));
                }
                else
                {
                    ExportToExcelTrendPage(orderedResultsPerPage.ToList(), txtDateFrom.ToString(), txtDateTo.ToString(),SelectedUnit,txtURLContains,SelectedAgency);
                    return View(orderedResultsPerPage);
                }
            }
            catch (Exception ex)
            {
                ViewData["ErrorMessage"] = ex.Message + ex.StackTrace;
                return View("Error");
            }
        }