/// <summary>
        /// Lists this instance.
        /// </summary>
        /// <returns>List View.</returns>
        public ActionResult List()
        {
            IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
            IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();            

            return View(unitOfWork.List);
        }
        public ActionResult EditWebSite(int? webSiteId, string submitButton, WebSite webSite)
        {
            try
            {
                IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
                IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();

                SelectList list = this.CopyToSelectList(0, unitOfWork);
                ViewData["webSites"] = this.GetWebSiteList();

                switch (submitButton)
                {
                    case "Add New Web Site":
                        // reset so displays default value                        
                        return RedirectToAction("EditWebSite", new { WebSiteId = -1 });
                    case "Save":
                        unitOfWork.Save(webSite);
                        int? tempVal = null;
                        return RedirectToAction("EditWebSite", new { WebSiteId = tempVal });
                    case "Delete":
                        webSite = unitOfWork.GetById(webSiteId.Value);
                        unitOfWork.Delete(webSite);
                        tempVal = null;
                        return RedirectToAction("EditWebSite", new { WebSiteId = tempVal });
                    default: // Change of drop down list ...                                           
                        return RedirectToAction("EditWebSite", new { WebSiteId = webSiteId });
                }
            }
            catch (RuleException ex)
            {
                ViewData["webSites"] = this.GetWebSiteList();
                ex.CopyToModelState(ModelState);
                return View();
            }
        }
        /// <summary>
        /// Gets the web site list.
        /// </summary>
        /// <returns>List of Selected Items.</returns>
        private SelectList GetWebSiteList()
        {
            IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
            IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();

            SelectList list = this.CopyToSelectList(0, unitOfWork);
            return list;
        }
        /// <summary>
        /// Details the specified log event id.
        /// </summary>
        /// <param name="id">The log event id.</param>
        /// <returns>The view instance.</returns>
        public ActionResult Detail(long? id)
        {
            IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
            IlogEventUnitOfWork unitOfWork = factory.GetLogEventUnitOfWork();

            LogEvent logEvent = unitOfWork.GetById(id.Value);

            return View(logEvent);
        }
        /// <summary>
        /// Indexes the specified web site id.
        /// </summary>
        /// <param name="webSiteId">The web site id.</param>
        /// <returns>List of emails returned.</returns>
        public ActionResult Index(long? webSiteId)
        {
            IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
            IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();

            webSiteId = (webSiteId.HasValue == false) ? unitOfWork.List[0].Id : webSiteId;
            IList<WebSiteEMails> webSiteEmails = unitOfWork.GetWebSiteEMails(webSiteId.Value);

            ViewData["webSites"] = this.CopyToSelectList(webSiteId.Value, unitOfWork);

            return View(webSiteEmails);
        }
        public ActionResult Create([Bind(Exclude = "Id")] WebSite webSite)
        {
            try
            {
                IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
                IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();
                unitOfWork.Save(webSite);

                return RedirectToAction("List");
            }
            catch
            {
                return View();
            }
        }
        /// <summary>
        /// Edits the web site.
        /// </summary>
        /// <param name="webSiteId">The web site id.</param>
        /// <param name="submitButton">The submit button.</param>
        /// <returns>The view instance.</returns>
        public ActionResult EditWebSite(int? webSiteId, string submitButton)
        {
            IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
            IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();

            SelectList list = this.CopyToSelectList(0, unitOfWork);
            ViewData["webSites"] = list;

            // Deal with adding new Web Site
            if (webSiteId == -1)
            {
                return View(new WebSite { });
            }

            // if webSiteId supplied get search websites otherwise default to the first webSite.
            return View(webSiteId.HasValue ? unitOfWork.GetById(webSiteId.Value) : unitOfWork.List[0]);
        }
Exemple #8
0
        /// <summary>
        /// Emailses to be sent.
        /// </summary>
        /// <returns>list of mails</returns>
        public List<ScheduMail.Core.Domain.Mail> EmailsToBeSent()
        {
            IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
            IScheduleUnitOfWork scheduleUnitOfWork = factory.GetScheduleUnitOfWork();
            Mail mail = null;
            //get list of all mails 
            List<Mail> listOfMails = this.List.ToList();
            //generate the list of mails to be sent to users now
            List<Mail> listOfMailsToBeSent = new List<Mail>();
            DateTime date = DateTime.Now;
            bool toBeSent = false;
            List<ScheduMail.Core.Domain.Schedule> scheduleList = scheduleUnitOfWork.GetListOfSchedule(true);
            foreach (Schedule schedule in scheduleList)
            {
                //rset the value
                toBeSent = false;

                if (schedule.StartDateTime <= date && schedule.EndDateTime == null)
                    toBeSent = true;
                else
                {
                    //validate mails are not expired
                    if (schedule.StartDateTime <= date && schedule.EndDateTime >= date )
                    {
                        //validate if its not before the time
                        if (schedule.StartDateTime.Value.TimeOfDay <= date.TimeOfDay)
                        {
                            toBeSent = true;
                        }
                    }
                }

                if (toBeSent)
                {
                    //find the mail object from schedule.MailId
                    mail = listOfMails.Find(delegate(Mail searchMail) { return searchMail.Id == schedule.MailId; });
                    switch (schedule.DailyWeeklyOrMonthly)
                    {
                        // Single
                        case "1":
                            // if mail has not been sent before then send it now.
                            if (mail.LastSent == null)
                                toBeSent = true;
                            else
                                toBeSent = false;

                            break;
                        //Daily
                        case "2":
                            // if mail has not been sent on the day then send it now.
                            if (mail.LastSent == null)
                                toBeSent = true;
                            else if (mail.LastSent.Value.Subtract(date).Days <= -1)
                                toBeSent = true;
                            else
                                toBeSent = false;
                            break;
                        //Weekly
                        case "3":
                            // if no day has been selected then dont send the email
                            if (string.IsNullOrEmpty(schedule.DaysOfWeekToRun))
                                toBeSent = false;
                            else if (mail.LastSent == null) // if not be sent before then validate if its the right day of the week;
                            {
                                if (schedule.DaysOfWeekToRun.Contains(Convert.ToString(((int)date.DayOfWeek))))
                                {
                                    toBeSent = true;
                                }
                                else
                                    toBeSent = false;
                            }
                            else
                            {
                                // Validate the logic that mails need to be sent weekly on specific days
                                System.Globalization.Calendar calendar = System.Threading.Thread.CurrentThread.CurrentCulture.Calendar;
                                int lastWeek = calendar.GetWeekOfYear(mail.LastSent.Value, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
                                int currentWeek = calendar.GetWeekOfYear(date, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

                                // confirms that email has not been already sent
                                if (lastWeek <= currentWeek)
                                {
                                    if (schedule.DaysOfWeekToRun.Contains(Convert.ToString(((int)date.DayOfWeek))))
                                    {
                                        toBeSent = true;
                                    }
                                    else
                                        toBeSent = false;
                                }// if mail has already been sent on that day of current  week then validate the different days to send it again
                                else if (lastWeek == currentWeek && mail.LastSent.Value.DayOfWeek < date.DayOfWeek)
                                {
                                    if (schedule.DaysOfWeekToRun.Contains(Convert.ToString(((int)date.DayOfWeek))))
                                    {
                                        toBeSent = true;
                                    }
                                    else
                                        toBeSent = false;
                                }
                            }
                            break;
                        //Monthly
                        case "4":
                            if (mail.LastSent == null)
                                toBeSent = true;
                            else if (mail.LastSent.Value.Month.CompareTo(date.Month) <= -1)
                            {
                                if (mail.LastSent.Value.Day == date.Day)
                                {
                                    toBeSent = true;
                                }
                                else
                                    toBeSent = false;
                            }
                            else
                                toBeSent = false;
                            break;
                        //yearly
                        case "5":
                            // if not be sent before then prepare to send;
                            if (mail.LastSent == null)
                                toBeSent = true;
                            else if (mail.LastSent.Value.Month.CompareTo(date.Year) <= -1)
                            {
                                if (mail.LastSent.Value.Day == date.Day)
                                {
                                    toBeSent = true;
                                }
                                else
                                    toBeSent = false;
                            }
                            else
                                toBeSent = false;
                            break;

                    }
                }
                if (toBeSent)
                    listOfMailsToBeSent.Add(mail);
            }
            return listOfMailsToBeSent;
        }
        public ActionResult Edit(WebSite webSite)
        {
            try
            {
                IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
                IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();

                if (!ModelState.IsValid)
                {
                    return View();
                }

                unitOfWork.Save(webSite);
               
                return RedirectToAction("List");
            }
            catch
            {
                return View();
            }
        }
 /// <summary>
 /// Edits the specified id.
 /// </summary>
 /// <param name="id">The id instance.</param>
 /// <returns>View Instance.</returns>
 public ActionResult Edit(int id)
 {
     IUnitOfWorkFactory factory = new ScheduMail.UnitsOfWork.WebSiteUnitOfWorkFactory();
     IWebSiteUnitOfWork unitOfWork = factory.GetWebSiteUnitOfWork();
     return View(unitOfWork.GetById(id));
 }