public ActionResult Nuevo()
        {
            var objPlanSemanal = new mPlanSemanal();

            ViewBag.Titulo = "Nuevo plan semanal";
            return(PartialView("_Nuevo", objPlanSemanal));
        }
        public JsonResult Nuevo(int idUsuario)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    DateTime fecha = Convert.ToDateTime(DateTime.Now.ToShortDateString());

                    var result = (from cat in db.cPeriodos
                                  where cat.EstatusId == 5 &&
                                  (fecha >= cat.FechaInicio && fecha <= cat.FechaFin)
                                  select new
                    {
                        id = cat.PeriodoId,
                        nombre = cat.DecripcionPeriodo,
                        fechaFin = cat.FechaFin,
                    }).ToList();

                    int idPeriodoNew = result.FirstOrDefault().id;

                    //Valida Plan existente
                    var existePlan = (from p in db.mPlanSemanal
                                      where p.PeriodoId == idPeriodoNew &&
                                      p.UsuarioCreacionId == idUsuario
                                      select p).ToList();

                    if (existePlan.Count() > 0)
                    {
                        DateTime fechaFin = result.FirstOrDefault().fechaFin.AddDays(1);

                        var periodoSiguiente = (from cat in db.cPeriodos
                                                where cat.EstatusId == 5 &&
                                                cat.FechaInicio == fechaFin
                                                select new
                        {
                            id = cat.PeriodoId,
                            nombre = cat.DecripcionPeriodo,
                        }).ToList();



                        if (periodoSiguiente.Count > 0)
                        {
                            int idPeriodoSiguiente = periodoSiguiente.FirstOrDefault().id;

                            var existePlanSiguiente = (from p in db.mPlanSemanal
                                                       where p.PeriodoId == idPeriodoSiguiente &&
                                                       p.UsuarioCreacionId == idUsuario
                                                       select p).ToList();

                            if (existePlanSiguiente.Count() == 0)
                            {
                                var periodo = (from p in db.cPeriodos
                                               where p.PeriodoId == idPeriodoSiguiente
                                               select p).FirstOrDefault();
                                mPlanSemanal plan = new mPlanSemanal();
                                plan.FechaCreacion         = DateTime.Now;
                                plan.DescripcionPlaneacion = "Plan Semanal del " + periodo.DecripcionPeriodo;
                                plan.EstatusId             = 7;
                                plan.PeriodoId             = idPeriodoSiguiente;
                                plan.UsuarioCreacionId     = idUsuario;
                                db.mPlanSemanal.Add(plan);
                                db.SaveChanges();

                                return(Json(new { Success = true, id = plan.PlanSemanalId, Message = "guardado correctamente " }));
                            }
                            else
                            {
                                return(Json(new { Success = false, Message = " No es posible crear mas de un plan por periodo." }));
                            }
                        }
                        else
                        {
                            return(Json(new { Success = false, Message = " No es posible crear el plan, no se encuentra periodo registrado para la semana en curso." }));
                        }
                    }
                    else
                    {
                        //var PeriodoValidaPromo = (from cat in db.cPeriodos
                        //                          where cat.PeriodoId < idPeriodoNew && cat.EstatusId == 5
                        //                          select cat).ToList();

                        //var maxPeriodoId = PeriodoValidaPromo.Max(x => x.PeriodoId);

                        //var planExistePromoSinAsignar = (from a in db.dDetallePlanSemanal
                        //                                 join b in db.mPlanSemanal on a.PlanSemanalId equals b.PlanSemanalId
                        //                                 where a.TipoActividadId == 8
                        //                                 && a.UsuarioCreacionId == idUsuario
                        //                                 && b.PeriodoId == maxPeriodoId
                        //                                 select a).ToList();
                        //int countSinAsig = 0;
                        //foreach (dDetallePlanSemanal tc in planExistePromoSinAsignar)
                        //{
                        //    if (tc.InaebaPreregistros.Count() == 0)
                        //    {
                        //        if (tc.SinProspectos == null)
                        //        {
                        //            countSinAsig += 1;
                        //        }
                        //    }
                        //}
                        //if (countSinAsig == 0)
                        //{
                        if (result.Count() > 0)
                        {
                            int idPeriodo = result.FirstOrDefault().id;

                            //var existePlan = (from ps in db.mPlanSemanal
                            //                  where ps.PeriodoId == idPeriodo
                            //                  && ps.UsuarioCreacionId == idUsuario
                            //                  select ps).ToList();
                            if (existePlan.Count() == 0)
                            {
                                var periodo = (from p in db.cPeriodos
                                               where p.PeriodoId == idPeriodo
                                               select p).FirstOrDefault();
                                mPlanSemanal plan = new mPlanSemanal();
                                plan.FechaCreacion         = DateTime.Now;
                                plan.DescripcionPlaneacion = "Plan Semanal del " + periodo.DecripcionPeriodo;
                                plan.EstatusId             = 7;
                                plan.PeriodoId             = idPeriodo;
                                plan.UsuarioCreacionId     = idUsuario;
                                db.mPlanSemanal.Add(plan);
                                db.SaveChanges();

                                return(Json(new { Success = true, id = plan.PlanSemanalId, Message = "guardado correctamente " }));
                            }
                            else
                            {
                                return(Json(new { Success = false, Message = " No es posible crear mas de un plan por periodo." }));
                            }
                        }
                        else
                        {
                            return(Json(new { Success = false, Message = " No es posible crear el plan, no se encuentra periodo registrado para la semana en curso." }));
                        }
                        //}
                        //else
                        //{
                        //    return Json(new { Success = false, Message = " No es posible crear el plan semanal, existen actividades de Promoción y difusión del plan anterior abiertas" });
                        //}
                    }
                }
#pragma warning disable CS0168 // La variable 'exp' se ha declarado pero nunca se usa
                catch (Exception exp)
#pragma warning restore CS0168 // La variable 'exp' se ha declarado pero nunca se usa
                {
                    return(Json(new { Success = false, Message = "Error al guardar la información" }));
                }
            }

            return(Json(new { Success = false, Message = "Informacion incompleta" }));
        }