public JsonResult LoadSavedParameters(int reportScheduleId)
        {
            var savedParameters = new SaveAndScheduleService();
            var oScheduleDate   = new SaveAndSchedule();
            int actionTypeId    = (int)WebConstants.ActionType.Edit;

            if (TempData["SavedParameters"] != null)
            {
                oScheduleDate = (SaveAndSchedule)TempData["SavedParameters"];
            }
            else
            {
                oScheduleDate = savedParameters.LoadUserSchedule(reportScheduleId);
            }

            if (TempData["ActionType"] != null && int.TryParse(TempData["ActionType"].ToString(), out actionTypeId))
            {
                if (actionTypeId == (int)WebConstants.ActionType.Copy)
                {
                    AppSession.ReportScheduleID   = 0;
                    AppSession.ReportScheduleName = String.Concat("Copy of ", oScheduleDate.ReportNameOverride);
                    AppSession.ReportScheduleDesc = oScheduleDate.ReportDescription != "" ? String.Concat("Copy of ", oScheduleDate.ReportDescription) : "";
                }
            }

            oScheduleDate.ReportMode = actionTypeId;

            return(Json(oScheduleDate));
        }
Exemplo n.º 2
0
        public ActionResult ERLevelSites()
        {
            string selectedSiteIds = "";
            var    reportService   = new SearchInputService();

            var sites    = AppSession.Sites.Where(m => m.IsTracersAccess == 1).ToList();
            var levelMap = reportService.GetLevelMap(sites);

            AppSession.SessionERLevelInformation = reportService.GetLevelInformation(AppSession.SelectedSiteId);
            levelMap = levelMap.OrderByDescending(l => l.ERLevel1.ERLevel1ID)
                       .ThenBy(l => l.ERLevel2.ERLevel2Name)
                       .ThenBy(l => l.ERLevel3.ERLevel3Name)
                       .ToList();

            bool hasLevel1 = levelMap.Where(l => l.ERLevel1ID > 0).Count() > 0 ? true : false;
            bool hasLevel2 = levelMap.Where(l => l.ERLevel2ID > 0).Count() > 0 ? true : false;
            bool hasLevel3 = levelMap.Where(l => l.ERLevel3ID > 0).Count() > 0 ? true : false;

            // if there are no level 1 names (or (None)), set to false
            if (hasLevel1)
            {
                if (levelMap.Where(l => !String.IsNullOrEmpty(l.ERLevel1.ERLevel1Name)).Count() == 0)
                {
                    hasLevel1 = false;
                }
            }

            //Get the selected sites for the saved report
            if (AppSession.ReportScheduleID > 0 && TempData["SavedParameters"] != null)
            {
                var oScheduleDate = new SaveAndSchedule();
                oScheduleDate   = (SaveAndSchedule)TempData["SavedParameters"];
                selectedSiteIds = string.Join(",", oScheduleDate.ReportSiteMaps.Select(siteMaps => siteMaps.SiteID).ToList());
            }

            var siteSelectorViewModel = new SiteSelectorViewModel
            {
                ERLevelMap      = levelMap,
                HasLevel1       = hasLevel1,
                HasLevel2       = hasLevel2,
                HasLevel3       = hasLevel3,
                SelectedSiteIds = selectedSiteIds
            };

            //var dataContext = new SampleEntities();

            //var employees = from e in dataContext.Employees
            //                where (id.HasValue ? e.ReportsTo == id : e.ReportsTo == null)
            //                select new
            //                {
            //                    id = e.EmployeeID,
            //                    Name = e.FirstName + " " + e.LastName,
            //                    hasChildren = e.Employees1.Any()
            //                };
            return(PartialView("Search/_SitesTree", siteSelectorViewModel));
            // return Json(siteSelectorViewModel, JsonRequestBehavior.AllowGet);
        }
Exemplo n.º 3
0
        public ActionResult ERLevelSites()
        {
            try
            {
                string selectedSiteIds = "";
                var    reportService   = new SearchInputService();
                //Not applying filter for Task Report
                var siteLst  = AppSession.ReportID == 42 ? CMSService.GetCMSSitesFiltered(AppSession.Sites.ToList()) : CMSService.GetCMSSitesFiltered(AppSession.Sites.Where(m => m.IsAMPAccess == 1).ToList());
                var levelMap = reportService.GetLevelMap(siteLst);

                AppSession.SessionERLevelInformation = reportService.GetLevelInformation(AppSession.SelectedSiteId);
                levelMap = levelMap.OrderByDescending(l => l.ERLevel1.ERLevel1ID)
                           .ThenBy(l => l.ERLevel2.ERLevel2Name)
                           .ThenBy(l => l.ERLevel3.ERLevel3Name)
                           .ToList();

                bool hasLevel1 = levelMap.Where(l => l.ERLevel1ID > 0).Count() > 0 ? true : false;
                bool hasLevel2 = levelMap.Where(l => l.ERLevel2ID > 0).Count() > 0 ? true : false;
                bool hasLevel3 = levelMap.Where(l => l.ERLevel3ID > 0).Count() > 0 ? true : false;

                // if there are no level 1 names (or (None)), set to false
                if (hasLevel1)
                {
                    if (levelMap.Where(l => !String.IsNullOrEmpty(l.ERLevel1.ERLevel1Name)).Count() == 0)
                    {
                        hasLevel1 = false;
                    }
                }

                //Get the selected sites for the saved report
                if (AppSession.ReportScheduleID > 0 && TempData["SavedParameters"] != null)
                {
                    var oScheduleDate = new SaveAndSchedule();
                    oScheduleDate   = (SaveAndSchedule)TempData["SavedParameters"];
                    selectedSiteIds = string.Join(",", oScheduleDate.ReportSiteMaps.Select(siteMaps => siteMaps.SiteID).ToList());
                }

                var sites = string.Join(",", levelMap.Select(levelM => levelM.SiteID).ToList());;

                var siteSelectorViewModel = new SiteSelectorViewModel
                {
                    ERLevelMap        = levelMap,
                    HasLevel1         = hasLevel1,
                    HasLevel2         = hasLevel2,
                    HasLevel3         = hasLevel3,
                    SelectedSiteIds   = selectedSiteIds,
                    IsCorporateAccess = new CommonService().CheckCorporateAccess(sites)
                };

                switch ((ReportsListEnum)AppSession.ReportID)
                {
                case ReportsListEnum.EPScoringReport:
                case ReportsListEnum.TaskAssignment:
                case ReportsListEnum.EPAssignmentScoring:
                case ReportsListEnum.CMSCompliance:
                case ReportsListEnum.EPsNotScoredinPeriod:
                case ReportsListEnum.EPScoringReportFinalMockSurvey:
                case ReportsListEnum.TaskReport:
                    return(PartialView("Search/_SitesTreeForEPScoring", siteSelectorViewModel));

                case ReportsListEnum.ComprehensiveScoringReport:
                    return(PartialView("Search/_SitesTreeForEPScoring", siteSelectorViewModel));

                default:
                    return(PartialView("Search/_SitesTree", siteSelectorViewModel));
                }
            }
            catch (Exception ex)
            {
                ExceptionLog exceptionLog = new ExceptionLog
                {
                    ExceptionText = "Reports: " + ex.Message,
                    PageName      = "CorporatePriorityFinding",
                    MethodName    = "ERLevelSites",
                    UserID        = Convert.ToInt32(AppSession.UserID),
                    SiteId        = Convert.ToInt32(AppSession.SelectedSiteId),
                    TransSQL      = "",
                    HttpReferrer  = null
                };
                exceptionService.LogException(exceptionLog);

                return(RedirectToAction("Error", "Transfer"));
            }
        }
Exemplo n.º 4
0
        public int SaveUserSchedule(SaveAndSchedule userSchedule)
        {
            int erReportUserScheduleID = -1;

            SqlTransaction tran                 = null;
            SqlCommand     cmdSchedule          = null;
            SqlCommand     cmdScheduleClear     = null;
            SqlCommand     cmdScheduleSiteMap   = null;
            SqlCommand     cmdScheduleParameter = null;

            using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                try
                {
                    cn.Open();
                    tran = cn.BeginTransaction();

                    cmdSchedule          = new SqlCommand("usmERReportUserScheduleUpdate", cn, tran);
                    cmdScheduleClear     = new SqlCommand("usmERReportUserScheduleClear", cn, tran);
                    cmdScheduleSiteMap   = new SqlCommand("usmERReportUserScheduleSiteMapUpdate", cn, tran);
                    cmdScheduleParameter = new SqlCommand("usmERReportUserScheduleParameterUpdate", cn, tran);

                    //Update report schedule
                    cmdSchedule.CommandType = CommandType.StoredProcedure;
                    cmdSchedule.Parameters.Add("@ERReportUserScheduleID", SqlDbType.Int);
                    cmdSchedule.Parameters["@ERReportUserScheduleID"].Direction = ParameterDirection.InputOutput;
                    if (userSchedule.ReportUserScheduleID > 0)
                    {
                        cmdSchedule.Parameters["@ERReportUserScheduleID"].Value = userSchedule.ReportUserScheduleID;
                    }
                    else
                    {
                        cmdSchedule.Parameters["@ERReportUserScheduleID"].Value = 0;
                    }

                    cmdSchedule.Parameters.AddWithValue("@ERReportID", userSchedule.ReportID);
                    cmdSchedule.Parameters.AddWithValue("@UserID", userSchedule.UserID);
                    cmdSchedule.Parameters.AddWithValue("@ERReportScheduleStatusID", userSchedule.ReportScheduleStatusID);
                    cmdSchedule.Parameters.AddWithValue("@ReportNameOverride", GetValue(userSchedule.ReportNameOverride));
                    cmdSchedule.Parameters.AddWithValue("@ReportDescription", GetValue(userSchedule.ReportDescription));
                    cmdSchedule.Parameters.AddWithValue("@EmailTo", userSchedule.EmailTo);
                    cmdSchedule.Parameters.AddWithValue("@CC", GetValue(userSchedule.EmailCC));
                    cmdSchedule.Parameters.AddWithValue("@BCC", GetValue(userSchedule.EmailBCC));
                    cmdSchedule.Parameters.AddWithValue("@ReplyTo", GetValue(userSchedule.ReplyTo));
                    cmdSchedule.Parameters.AddWithValue("@Subject", GetValue(userSchedule.Subject));
                    cmdSchedule.Parameters.AddWithValue("@RenderFormatTypeID", userSchedule.RenderFormatTypeID);
                    cmdSchedule.Parameters.AddWithValue("@Priority", userSchedule.Priority);
                    cmdSchedule.Parameters.AddWithValue("@Comment", GetValue(userSchedule.Comment));
                    cmdSchedule.Parameters.AddWithValue("@ERScheduleTypeID", userSchedule.ScheduleTypeID);
                    cmdSchedule.Parameters.AddWithValue("@DaysOfWeek", GetValue(userSchedule.DaysOfWeek));
                    cmdSchedule.Parameters.AddWithValue("@DayOfMonth", GetValue(userSchedule.DaysOfMonth));
                    cmdSchedule.Parameters.AddWithValue("@DayOfQuarter", GetValue(userSchedule.DaysOfQuarter));
                    cmdSchedule.Parameters.AddWithValue("@NextRunScheduled", GetValue(userSchedule.NextRunScheduled));
                    cmdSchedule.Parameters.AddWithValue("@LastRundate", GetValue(userSchedule.LastRundate));
                    cmdSchedule.Parameters.AddWithValue("@LastRunStatus", GetValue(userSchedule.LastRunStatus));
                    cmdSchedule.Parameters.AddWithValue("@LastRunMessage", GetValue(userSchedule.LastRunMessage));
                    cmdSchedule.Parameters.AddWithValue("@UpdateByUserId", userSchedule.UpdateByUserId);
                    cmdSchedule.Parameters.AddWithValue("@ReportLauncherID", GetValue(userSchedule.ReportLauncherID));
                    cmdSchedule.Parameters.AddWithValue("@ReportDelete", userSchedule.ReportDelete);
                    CreateSQLExecuted("usmERReportUserScheduleUpdate", cmdSchedule);

                    cmdSchedule.ExecuteNonQuery();

                    erReportUserScheduleID = (int)cmdSchedule.Parameters["@ERReportUserScheduleID"].Value;

                    //Clear any existing parameters and site map
                    CreateSQLExecuted("usmERReportUserScheduleClear", cmdScheduleClear);
                    cmdScheduleClear.CommandType = CommandType.StoredProcedure;
                    cmdScheduleClear.Parameters.AddWithValue("@ERReportUserScheduleID", erReportUserScheduleID);
                    cmdScheduleClear.ExecuteNonQuery();

                    //Update site map
                    cmdScheduleSiteMap.CommandType = CommandType.StoredProcedure;
                    cmdScheduleSiteMap.Parameters.Add("@ERReportUserScheduleID", SqlDbType.Int);
                    cmdScheduleSiteMap.Parameters.Add("@SiteID", SqlDbType.Int);

                    foreach (var siteMap in userSchedule.ReportSiteMaps)
                    {
                        siteMap.ERReportUserScheduleID = erReportUserScheduleID;
                        cmdScheduleSiteMap.Parameters["@ERReportUserScheduleID"].Value = erReportUserScheduleID;
                        cmdScheduleSiteMap.Parameters["@SiteID"].Value = siteMap.SiteID;

                        CreateSQLExecuted("usmERReportUserScheduleSiteMapUpdate", cmdScheduleSiteMap);
                        cmdScheduleSiteMap.ExecuteNonQuery();
                    }

                    //Update parameters
                    cmdScheduleParameter.CommandType = CommandType.StoredProcedure;
                    cmdScheduleParameter.Parameters.Add("@ERReportUserScheduleID", SqlDbType.Int);
                    cmdScheduleParameter.Parameters.Add("@ERReportParameterID", SqlDbType.Int);
                    cmdScheduleParameter.Parameters.Add("@DisplayTextOverride", SqlDbType.VarChar);
                    cmdScheduleParameter.Parameters.Add("@ParameterValue", SqlDbType.VarChar);
                    foreach (var pararmeter in userSchedule.ReportParameters)
                    {
                        pararmeter.ReportUserScheduleID = erReportUserScheduleID;
                        cmdScheduleParameter.Parameters["@ERReportUserScheduleID"].Value = erReportUserScheduleID;
                        cmdScheduleParameter.Parameters["@ERReportParameterID"].Value    = pararmeter.ReportParameterID;
                        cmdScheduleParameter.Parameters["@DisplayTextOverride"].Value    = pararmeter.DisplayTextOverride;
                        cmdScheduleParameter.Parameters["@ParameterValue"].Value         = pararmeter.ParameterValue;

                        CreateSQLExecuted("usmERReportUserScheduleParameterUpdate", cmdScheduleParameter);

                        cmdScheduleParameter.ExecuteNonQuery();
                    }

                    if (tran.Connection != null)
                    {
                        tran.Commit();
                    }
                }
                catch (Exception ex)
                {
                    if (tran != null)
                    {
                        tran.Rollback();
                    }
                    ex.Data.Add(TSQL, _SQLExecuted);
                    throw ex;
                }
            }

            return(erReportUserScheduleID);
        }
Exemplo n.º 5
0
        public SaveAndSchedule LoadUserSchedule(int reportScheduleID)
        {
            SaveAndSchedule savedParameters;

            try
            {
                SqlConnection cn = new SqlConnection(this.ConnectionString_WHSE);
                cn.Open();

                SqlCommand cmd = new SqlCommand("usmERReportUserScheduleSelect", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@ERReportUserScheduleID", reportScheduleID);

                CreateSQLExecuted("usmERReportUserScheduleSelect", cmd);

                // data set of three tables
                DataSet        ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);

                using (cn)
                    using (cmd)
                        using (da)
                        {
                            da.Fill(ds);
                        }

                DataRow drUserSchedule = ds.Tables[0].Rows[0];
                savedParameters = new SaveAndSchedule
                {
                    ReportUserScheduleID = Convert.ToInt32(drUserSchedule["ERReportUserScheduleID"]),
                    ReportID             = Convert.ToInt32(drUserSchedule["ERReportID"]),
                    UserID = Convert.ToInt32(drUserSchedule["UserID"]),
                    ReportScheduleStatusID = Convert.ToInt32(drUserSchedule["ERReportScheduleStatusID"]),
                    ReportNameOverride     = drUserSchedule["ReportNameOverride"].ToString(),
                    ReportDescription      = drUserSchedule["ReportDescription"].ToString(),
                    EmailTo            = drUserSchedule["EmailTo"].ToString(),
                    EmailCC            = drUserSchedule["CC"].ToString(),
                    EmailBCC           = drUserSchedule["BCC"].ToString(),
                    ReplyTo            = drUserSchedule["ReplyTo"].ToString(),
                    Subject            = drUserSchedule["Subject"].ToString(),
                    RenderFormatTypeID = Convert.ToInt32(drUserSchedule["RenderFormatTypeID"]),
                    Priority           = Convert.ToInt32(drUserSchedule["Priority"]),
                    Comment            = drUserSchedule["Comment"].ToString(),
                    ScheduleTypeID     = Convert.ToInt32(drUserSchedule["ERScheduleTypeID"]),
                    DaysOfWeek         = drUserSchedule["DaysOfWeek"].ToString(),
                    DaysOfMonth        = GetIntOrNull(drUserSchedule["DayOfMonth"]),
                    DaysOfQuarter      = GetIntOrNull(drUserSchedule["DayOfQuarter"]),
                    NextRunScheduled   = GetDateOrNull(drUserSchedule["NextRunScheduled"]),
                    LastRundate        = GetDateOrNull(drUserSchedule["LastRundate"]),
                    LastRunStatus      = GetIntOrNull(drUserSchedule["LastRunStatus"]),
                    LastRunMessage     = string.IsNullOrEmpty(drUserSchedule["LastRunMessage"].ToString()) == true ? null : drUserSchedule["LastRunMessage"].ToString(),
                    UpdateByUserId     = Convert.ToInt32(drUserSchedule["UpdateByUserId"]),
                    ReportLauncherID   = GetIntOrNull(drUserSchedule["ReportLauncherID"]),
                };


                // Site Map
                List <ReportUserScheduleSiteMap> siteMapList = new List <ReportUserScheduleSiteMap>();

                //Assign the site value
                if (ds.Tables[1].Rows.Count > 0)
                {
                    savedParameters.SiteID = Convert.ToInt32(ds.Tables[1].Rows[0]["SiteID"]);
                    foreach (DataRow row in ds.Tables[1].Rows)
                    {
                        siteMapList.Add(new ReportUserScheduleSiteMap
                        {
                            ERReportUserScheduleID = Convert.ToInt32(row["ERReportUserScheduleID"]),
                            SiteID       = Convert.ToInt32(row["SiteID"]),
                            ERLevelMapID = Convert.ToInt32(row["ERLevelMapID"]),
                            CreateDate   = Convert.ToDateTime(row["CreateDate"]),
                            UpdateDate   = Convert.ToDateTime(row["UpdateDate"])
                        });
                    }
                }

                savedParameters.ReportSiteMaps = siteMapList;

                //Load the parameters
                List <ReportUserScheduleParameter> parameterList = new List <ReportUserScheduleParameter>();
                if (ds.Tables[2].Rows.Count > 0)
                {
                    foreach (DataRow row in ds.Tables[2].Rows)
                    {
                        parameterList.Add(new ReportUserScheduleParameter
                        {
                            ReportUserScheduleID = Convert.ToInt32(row["ERReportUserScheduleID"]),
                            ReportParameterID    = Convert.ToInt32(row["ERReportParameterID"]),
                            ReportParameterName  = row["ParameterName"].ToString(),
                            DisplayTextOverride  = row["DisplayTextOverride"].ToString(),
                            ParameterValue       = row["ParameterValue"].ToString(),
                            CreateDate           = Convert.ToDateTime(row["CreateDate"]),
                            UpdateDate           = Convert.ToDateTime(row["UpdateDate"])
                        });
                    }
                }
                savedParameters.ReportParameters = parameterList;
            }
            catch (Exception ex)
            {
                ex.Data.Add(TSQL, _SQLExecuted);
                throw ex;
            }

            return(savedParameters);
        }
        public JsonResult SaveReport(List <Dictionary <string, string> > objDictionary)
        {
            string message = string.Empty;

            try
            {
                int             reportID   = AppSession.ReportID;
                SaveAndSchedule oSaveModel = new SaveAndSchedule();

                //Set the schedule information
                if (AppSession.ReportScheduleID > 0 && Convert.ToInt16(objDictionary.Find(p => p.ContainsKey("ReportDelete"))["ReportDelete"]) != 1)
                {
                    oSaveModel.ReportUserScheduleID = AppSession.ReportScheduleID;

                    SaveAndScheduleService oScheduleService = new SaveAndScheduleService();
                    oSaveModel = oScheduleService.LoadUserSchedule(AppSession.ReportScheduleID);
                }
                else
                {
                    oSaveModel.LastRunStatus = (int)LastRunStatus.NotRun;
                    oSaveModel.UserID        = AppSession.UserID;
                }
                oSaveModel.ReportParameters.Clear();

                oSaveModel.ReportID = AppSession.ReportID;

                //Get all the selected sites
                var selectedSites = objDictionary.Find(d => d.ContainsKey("SelectedSites")) != null?
                                    objDictionary.Find(d => d.ContainsKey("SelectedSites"))["SelectedSites"].ToString() : string.Empty;

                oSaveModel.ReportSiteMaps.Clear();
                if (!String.IsNullOrWhiteSpace(selectedSites))
                {
                    foreach (var site in selectedSites.Trim(',').Split(','))
                    {
                        oSaveModel.ReportSiteMaps.Add(new ReportUserScheduleSiteMap {
                            SiteID = Convert.ToInt32(site)
                        });
                    }
                }
                else
                {
                    oSaveModel.ReportSiteMaps.Add(new ReportUserScheduleSiteMap {
                        SiteID = AppSession.SelectedSiteId
                    });
                }

                var scheduledReportName = objDictionary.Find(d => d.ContainsKey("ScheduledReportName"));
                if (scheduledReportName != null && scheduledReportName.Count > 0)
                {
                    oSaveModel.ReportNameOverride = scheduledReportName["ScheduledReportName"];
                    AppSession.ReportScheduleName = scheduledReportName["ScheduledReportName"];
                }

                var scheduledReportDesc = objDictionary.Find(d => d.ContainsKey("ScheduledReportDesc"));
                if (scheduledReportDesc != null && scheduledReportDesc.Count > 0)
                {
                    oSaveModel.ReportDescription  = scheduledReportDesc["ScheduledReportDesc"];
                    AppSession.ReportScheduleDesc = scheduledReportDesc["ScheduledReportDesc"];
                }

                var reportType = objDictionary.Find(d => d.ContainsKey("ReportType"));
                if (reportType != null && reportType.Count > 0)
                {
                    if (string.Equals(reportType["ReportType"], "ExcelView"))
                    {
                        oSaveModel.RenderFormatTypeID = (int)RenderFormatType.Excel;
                    }
                    else
                    if (reportID == (int)ReportsListEnum.ComplianceByDepartment || reportID == (int)ReportsListEnum.TracerComplianceDepartment)
                    {
                        oSaveModel.RenderFormatTypeID = (int)RenderFormatType.Excel;
                    }
                    else
                    {
                        oSaveModel.RenderFormatTypeID = (int)RenderFormatType.PDF;
                    }
                }
                else
                {
                    //Only excel format for Monthly breakdowns reports
                    if (reportID == (int)ReportsListEnum.MonthlyQuestionBreakdown || reportID == (int)ReportsListEnum.MonthlyTracerBreakdown || reportID == (int)ReportsListEnum.ComplianceByDepartment)
                    {
                        oSaveModel.RenderFormatTypeID = (int)RenderFormatType.Excel;
                    }
                    else
                    {
                        oSaveModel.RenderFormatTypeID = (int)RenderFormatType.PDF;
                    }
                }
                oSaveModel.Priority = 1;

                //Recurrence information
                oSaveModel.EmailTo = objDictionary.Find(d => d.ContainsKey("EmailTo")) != null?objDictionary.Find(d => d.ContainsKey("EmailTo"))["EmailTo"].ToString() : String.Concat(AppSession.EmailAddress, "; ");

                //Check for Email place holder texts
                oSaveModel.EmailCC = objDictionary.Find(d => d.ContainsKey("EmailCC")) != null?objDictionary.Find(d => d.ContainsKey("EmailCC"))["EmailCC"].ToString() : String.Empty;

                if (!String.IsNullOrWhiteSpace(oSaveModel.EmailCC) && oSaveModel.EmailCC == EMAILPLACEHOLDER)
                {
                    oSaveModel.EmailCC = string.Empty;
                }

                oSaveModel.EmailBCC = objDictionary.Find(d => d.ContainsKey("EmailBCC")) != null?objDictionary.Find(d => d.ContainsKey("EmailBCC"))["EmailBCC"].ToString() : String.Empty;

                if (!String.IsNullOrWhiteSpace(oSaveModel.EmailBCC) && oSaveModel.EmailBCC == EMAILPLACEHOLDER)
                {
                    oSaveModel.EmailBCC = string.Empty;
                }

                oSaveModel.ReplyTo = string.Empty;
                oSaveModel.Subject = objDictionary.Find(d => d.ContainsKey("Subject")) != null?objDictionary.Find(d => d.ContainsKey("Subject"))["Subject"].ToString() : String.Empty;

                oSaveModel.Comment = objDictionary.Find(d => d.ContainsKey("Comment")) != null?objDictionary.Find(d => d.ContainsKey("Comment"))["Comment"].ToString() : String.Empty;

                var scheduleTypeID = objDictionary.Find(p => p.ContainsKey("ScheduleTypeID")) == null ? 0 : Convert.ToInt16(objDictionary.Find(p => p.ContainsKey("ScheduleTypeID"))["ScheduleTypeID"]);

                oSaveModel.DaysOfWeek  = null;
                oSaveModel.DaysOfMonth = null;

                if (scheduleTypeID == (int)ScheduleType.Weekly)
                {
                    oSaveModel.ScheduleTypeID         = (int)ScheduleType.Weekly;
                    oSaveModel.DaysOfWeek             = objDictionary.Find(p => p.ContainsKey("DaysOfWeek"))["DaysOfWeek"].ToString().TrimEnd(',');
                    oSaveModel.ReportScheduleStatusID = (int)ScheduleStatus.Scheduled;
                }
                else if (scheduleTypeID == (int)ScheduleType.Monthly)
                {
                    oSaveModel.ScheduleTypeID         = (int)ScheduleType.Monthly;
                    oSaveModel.DaysOfMonth            = Convert.ToInt16(objDictionary.Find(p => p.ContainsKey("DaysOfMonth"))["DaysOfMonth"]);
                    oSaveModel.ReportScheduleStatusID = (int)ScheduleStatus.Scheduled;
                }
                else if (scheduleTypeID == (int)ScheduleType.Quarterly)
                {
                    oSaveModel.ScheduleTypeID         = (int)ScheduleType.Quarterly;
                    oSaveModel.DaysOfQuarter          = Convert.ToInt16(objDictionary.Find(p => p.ContainsKey("PeriodOfQuarter"))["PeriodOfQuarter"]);
                    oSaveModel.ReportScheduleStatusID = (int)ScheduleStatus.Scheduled;
                }
                else if (scheduleTypeID == (int)ScheduleType.Daily)
                {
                    oSaveModel.ScheduleTypeID         = (int)ScheduleType.Daily;
                    oSaveModel.ReportScheduleStatusID = (int)ScheduleStatus.Scheduled;
                }
                else
                {
                    oSaveModel.ScheduleTypeID         = (int)ScheduleType.None;
                    oSaveModel.ReportScheduleStatusID = (int)ScheduleStatus.Complete;
                }
                if (Convert.ToInt16(objDictionary.Find(p => p.ContainsKey("ReportDelete"))["ReportDelete"]) == 1)
                {
                    // We hit report limit issue and want ReportLauncher to generate report for us
                    oSaveModel.ReportDelete   = 1;
                    oSaveModel.DaysOfWeek     = null;
                    oSaveModel.DaysOfMonth    = null;
                    oSaveModel.ScheduleTypeID = (int)ScheduleType.None;         // Should not be rescheduled

                    // Launch report immediately
                    oSaveModel.ReportScheduleStatusID = (int)ScheduleStatus.Pending;
                }
                else
                {
                    oSaveModel.ReportDelete = 0;
                }


                oSaveModel.NextRunScheduled = HelperClasses.CalculateNextRunDate(oSaveModel.ScheduleTypeID, oSaveModel.DaysOfWeek, oSaveModel.DaysOfMonth, oSaveModel.DaysOfQuarter);

                oSaveModel.UpdateByUserId   = AppSession.UserID;
                oSaveModel.ReportLauncherID = 1;

                //Set the parameters
                SaveAndScheduleService objSaveService = new SaveAndScheduleService();
                var lstReportParameters = objSaveService.GetReportParameters(reportID);

                foreach (var parameter in lstReportParameters)
                {
                    var param = objDictionary.Find(d => d.ContainsKey(parameter.ParameterName));
                    if (param != null && param.Count > 0)
                    {
                        oSaveModel.ReportParameters.Add(new ReportUserScheduleParameter
                        {
                            ReportParameterID   = parameter.ReportParameterID,
                            ParameterValue      = param[parameter.ParameterName],
                            DisplayTextOverride = parameter.DisplayText
                        });
                    }
                }

                SaveAndScheduleService oService = new SaveAndScheduleService();
                //  AppSession.ReportScheduleID = oService.SaveUserSchedule(oSaveModel);
                int ReportScheduleID = oService.SaveUserSchedule(oSaveModel);
                if (ReportScheduleID > 0)
                {
                    if (oSaveModel.ReportDelete == 0)
                    {
                        AppSession.ReportScheduleID = ReportScheduleID;
                        message = string.Format("{0} has been saved successfully!!", AppSession.ReportScheduleName);
                    }
                    else
                    {
                        message = "The report will be delivered to the recipient email addresses. It may take a few minutes for the report to show up in your email inbox.";
                    }
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Error", "Error saving the report");
                message = "Error saving the report";
            }

            return(Json(message));
        }