/// <summary>
        /// Inserción de datos de repetitivas
        /// </summary>
        /// <param name="loopTaskSchedule"></param>
        private void InsertAssignmentForThisWeek(LoopTaskSchedule loopTaskSchedule)
        {
            int?     selectedDayOfWeek = loopTaskSchedule.DayOfWeek;
            int?     dayOfMonth        = loopTaskSchedule.DayOfMonth;
            int?     idMonth           = loopTaskSchedule.IdMonth;
            int?     numberOfWeek      = loopTaskSchedule.NumberOfWeek;
            DateTime now             = DateTime.Now;
            DateTime startTime       = (DateTime)loopTaskSchedule.LoopTask.StartTime;
            DateTime endTime         = loopTaskSchedule.LoopTask.EndTime;
            int      actualDayOfWeek = DateTime.Today.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)DateTime.Today.DayOfWeek;

            if (idMonth == 13 || MonthBelongsToActualWeek(idMonth))
            {
                if (dayOfMonth == null)
                {
                    if ((numberOfWeek == null || numberOfWeek == GetWeekNumberOfMonth(now)) && selectedDayOfWeek > actualDayOfWeek || (selectedDayOfWeek == actualDayOfWeek && TimeSpan.Compare(startTime.TimeOfDay, now.TimeOfDay) > 0))
                    {
                        int differenceBetweenDays = ((int)selectedDayOfWeek) - actualDayOfWeek;
                        CreateProcessedTask(loopTaskSchedule, startTime, endTime, differenceBetweenDays);
                    }
                }
                else
                {
                    DateTime firstDayOfWeek = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
                    DateTime lastDayOfWeek  = firstDayOfWeek.AddDays(6);
                    int      day            = (int)dayOfMonth;
                    DateTime wishedDay      = new DateTime();
                    if (firstDayOfWeek.Month == lastDayOfWeek.Month)
                    {
                        try
                        {
                            wishedDay = new DateTime(now.Year, now.Month, day);
                        }
                        catch (Exception e) { }
                    }
                    else if ((firstDayOfWeek.Month < lastDayOfWeek.Month) || (firstDayOfWeek.Month > lastDayOfWeek.Month && firstDayOfWeek.Year != lastDayOfWeek.Year))
                    {
                        try
                        {
                            if (day > firstDayOfWeek.Day)
                            {
                                wishedDay = new DateTime(now.Year, firstDayOfWeek.Month, day);
                            }
                            else if (day <= lastDayOfWeek.Day)
                            {
                                wishedDay = new DateTime(now.Year, lastDayOfWeek.Month, day);
                            }
                        }
                        catch (Exception e) { }
                    }

                    if (wishedDay >= firstDayOfWeek && wishedDay <= lastDayOfWeek)
                    {
                        DateTime startDate = wishedDay.Date + startTime.TimeOfDay;
                        DateTime endDate   = wishedDay.Date + endTime.TimeOfDay;
                        CreateProcessedTask(loopTaskSchedule, startDate, endDate);
                    }
                }
            }
        }
        private bool CreateProcessedTask(LoopTaskSchedule loopTaskSchedule, DateTime startDate, DateTime endDate)
        {
            int           assignedStatusId = 1;
            ProcessedTask processedTask    = new ProcessedTask()
            {
                Commentary       = null,
                AssignationDate  = DateTime.Now,
                IdTaskStatus     = assignedStatusId,
                TaskAssignment   = loopTaskSchedule.LoopTask.TaskAssignment,
                LoopTaskSchedule = loopTaskSchedule,
                StartDate        = startDate,
                EndDate          = endDate
            };

            return(processedTask.Create());
        }
        private bool CreateProcessedTask(LoopTaskSchedule loopTaskSchedule, DateTime startTime, DateTime endTime, int differenceBetweenDays)
        {
            int      assignedStatusId = 1;
            DateTime startDate        = DateTime.Now.AddDays(differenceBetweenDays);

            startDate = startDate.Date + startTime.TimeOfDay;
            DateTime      endDate       = startDate.Date + endTime.TimeOfDay;
            ProcessedTask processedTask = new ProcessedTask()
            {
                Commentary       = null,
                AssignationDate  = DateTime.Now,
                IdTaskStatus     = assignedStatusId,
                TaskAssignment   = loopTaskSchedule.LoopTask.TaskAssignment,
                LoopTaskSchedule = loopTaskSchedule,
                StartDate        = startDate,
                EndDate          = endDate
            };

            return(processedTask.Create());
        }
        private List <LoopTaskSchedule> ScheduleLoopTask(LoopTask loopTask)
        {
            List <LoopTaskSchedule> ltsList = new List <LoopTaskSchedule>();
            int month = int.Parse(ddlMeses.SelectedValue);

            if (loopTask.IsDayOfWeek())
            {
                List <string> selectedDaysOfWeek = cbxDiaSemana.Items.Cast <ListItem>().Where(li => li.Selected).Select(li => li.Value).ToList();
                List <string> selectedWeeks      = cbxNumeroSemana.Items.Cast <ListItem>().Where(li => li.Selected).Select(li => li.Value).ToList();

                loopTask.DeleteScheduledTasks();

                if (selectedWeeks.Count > 0 && selectedWeeks.Count < 6)
                {
                    foreach (string dayOfWeek in selectedDaysOfWeek)
                    {
                        foreach (string numberOfWeek in selectedWeeks)
                        {
                            LoopTaskSchedule lts = new LoopTaskSchedule()
                            {
                                LoopTask     = loopTask,
                                DayOfMonth   = null,
                                DayOfWeek    = int.Parse(dayOfWeek),
                                NumberOfWeek = int.Parse(numberOfWeek),
                                IdMonth      = month
                            };
                            ltsList.Add(lts);
                        }
                    }
                }
                else
                {
                    foreach (string dayOfWeek in selectedDaysOfWeek)
                    {
                        LoopTaskSchedule lts = new LoopTaskSchedule()
                        {
                            LoopTask     = loopTask,
                            DayOfMonth   = null,
                            DayOfWeek    = int.Parse(dayOfWeek),
                            NumberOfWeek = null,
                            IdMonth      = month
                        };
                        ltsList.Add(lts);
                    }
                }
            }
            else
            {
                loopTask.DeleteScheduledTasks();
                string           SelectedDay = ddlDiaDelMes.SelectedValue;
                LoopTaskSchedule lts         = new LoopTaskSchedule()
                {
                    LoopTask     = loopTask,
                    DayOfWeek    = null,
                    NumberOfWeek = null,
                    DayOfMonth   = int.Parse(SelectedDay),
                    IdMonth      = month
                };
                ltsList.Add(lts);
            }
            return(ltsList);
        }
        private List <LoopTaskSchedule> CreateRepetitiveTask(User user)
        {
            LoopTask loopTask = createLoopTask(user);
            List <LoopTaskSchedule> ltsList = new List <LoopTaskSchedule>();

            if (loopTask.TaskAssignment.Task.Create() && loopTask.TaskAssignment.Create() && loopTask.Create())
            {
                int month = int.Parse(ddlMeses.SelectedValue);
                if (rbtlTipoRepeticion.SelectedValue == "diaSemana")
                {
                    List <string> selectedDaysOfWeek = cbxDiaSemana.Items.Cast <ListItem>().Where(li => li.Selected).Select(li => li.Value).ToList();
                    List <string> selectedWeeks      = cbxNumeroSemana.Items.Cast <ListItem>().Where(li => li.Selected).Select(li => li.Value).ToList();


                    if (selectedWeeks.Count > 0 && selectedWeeks.Count < 6)
                    {
                        foreach (string dayOfWeek in selectedDaysOfWeek)
                        {
                            foreach (string numberOfWeek in selectedWeeks)
                            {
                                LoopTaskSchedule lts = new LoopTaskSchedule()
                                {
                                    LoopTask     = loopTask,
                                    DayOfMonth   = null,
                                    DayOfWeek    = int.Parse(dayOfWeek),
                                    NumberOfWeek = int.Parse(numberOfWeek),
                                    IdMonth      = month
                                };
                                ltsList.Add(lts);
                            }
                        }
                    }
                    else
                    {
                        foreach (string dayOfWeek in selectedDaysOfWeek)
                        {
                            LoopTaskSchedule lts = new LoopTaskSchedule()
                            {
                                LoopTask     = loopTask,
                                DayOfMonth   = null,
                                DayOfWeek    = int.Parse(dayOfWeek),
                                NumberOfWeek = null,
                                IdMonth      = month
                            };

                            ltsList.Add(lts);
                        }
                    }
                }
                else if (rbtlTipoRepeticion.SelectedValue == "diaMes")
                {
                    string           SelectedDay = ddlDiaDelMes.SelectedValue;
                    LoopTaskSchedule lts         = new LoopTaskSchedule()
                    {
                        LoopTask     = loopTask,
                        DayOfWeek    = null,
                        NumberOfWeek = null,
                        DayOfMonth   = int.Parse(SelectedDay),
                        IdMonth      = int.Parse(ddlMeses.SelectedValue)
                    };
                    ltsList.Add(lts);
                }
            }
            return(ltsList);
        }