public ActionResult Create(Cronograma cronograma)
        {
            if (ModelState.IsValid)
            {
                db.Cronogramas.Add(cronograma);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.IdRequerimiento = new SelectList(db.Requerimientos, "IdRequerimiento", "NumReq", cronograma.IdRequerimiento);
            return View(cronograma);
        }
        private void PlanificarRequerimiento(EFDbContext db, PersonalInterno ids, PersonalInterno lp, Requerimiento requerimientoPlanificado, DateTime planificacion)
        {
            //*****************************************************************
            //Generar Cronograma

            //Establecer Fecha de Inicio del Proyecto

            List <Fecha> Fechas = new List <Fecha>();

            Fecha fecha_ids = new Fecha();

            if (ids.Actividades.Count > 0)
            {
                fecha_ids.fecha = ids.Actividades[0].FechaFin;
                fecha_ids.tipo  = "2ids";
                Fechas.Add(fecha_ids);
            }


            Fecha fecha_lp = new Fecha();

            if (lp.Actividades.Count > 0)
            {
                fecha_lp.fecha = lp.Actividades[0].FechaFin;
                fecha_lp.tipo  = "3lp";
                Fechas.Add(fecha_lp);
            }

            Fecha fecha_planificacion = new Fecha();

            fecha_planificacion.fecha = planificacion;
            fecha_planificacion.tipo  = "1fecha_planificacion";
            Fechas.Add(fecha_planificacion);

            Fechas.Sort(delegate(Fecha f1, Fecha f2)
            {
                return(-DateTime.Compare(f1.fecha, f2.fecha) == 0 ? String.Compare(f1.tipo, f2.tipo) : -DateTime.Compare(f1.fecha, f2.fecha));
            });


            DateTime fechainicio;

            //**************************
            //Fecha Incio
            fechainicio = Fechas[0].fecha;

            //Se genera Cronograma

            Cronograma cronogramaPlanificado = new Cronograma();

            cronogramaPlanificado.IdRequerimiento  = requerimientoPlanificado.IdRequerimiento;
            cronogramaPlanificado.NumControlCambio = 0;
            cronogramaPlanificado.FechaInicio      = fechainicio;
            cronogramaPlanificado.FechaFin         = fechainicio;
            cronogramaPlanificado.Version          = 1;
            cronogramaPlanificado.Estado           = "Inicial";
            db.Cronogramas.Add(cronogramaPlanificado);
            db.SaveChanges();
            int id = cronogramaPlanificado.IdCronograma;


            //Se generan actividades
            //Analisis funcional

            Actividad analisisFuncional = new Actividad();

            analisisFuncional.IdCronograma      = cronogramaPlanificado.IdCronograma;
            analisisFuncional.IdPersonalInterno = ids.IdPersonalInterno;
            analisisFuncional.personalInterno   = ids;
            analisisFuncional.OrdenActividad    = 1;
            analisisFuncional.TipoActividad     = "Analisis Funcional";
            analisisFuncional.FechaInicio       = fechainicio;
            analisisFuncional.FechaFin          = fechainicio.AddDays(requerimientoPlanificado.Cotizaciones[0].DiasAnalisisFuncional);
            analisisFuncional.Avance            = 0;
            analisisFuncional.Asignacion        = 1;

            //Analisis tecnico
            Actividad analisisTecnico = new Actividad();

            analisisTecnico.IdCronograma      = cronogramaPlanificado.IdCronograma;
            analisisTecnico.IdPersonalInterno = ids.IdPersonalInterno;
            analisisTecnico.personalInterno   = ids;
            analisisTecnico.OrdenActividad    = 2;
            analisisTecnico.TipoActividad     = "Analisis Tecnico";
            analisisTecnico.FechaInicio       = analisisFuncional.FechaFin;
            analisisTecnico.FechaFin          = analisisTecnico.FechaInicio.AddDays(requerimientoPlanificado.Cotizaciones[0].DiasAnalisisTecnico);
            analisisTecnico.Avance            = 0;
            analisisTecnico.Asignacion        = 1;


            //Construccion
            Actividad construccion = new Actividad();

            construccion.IdCronograma = cronogramaPlanificado.IdCronograma;
            //construccion.IdPersonalInterno = null;
            //construccion.personalInterno = null;
            construccion.OrdenActividad = 3;
            construccion.TipoActividad  = "Construccion";
            construccion.FechaInicio    = analisisTecnico.FechaFin;
            construccion.FechaFin       = construccion.FechaInicio.AddDays(requerimientoPlanificado.Cotizaciones[0].DiasConstruccion);
            construccion.Avance         = 0;
            construccion.Asignacion     = 1;

            //Certificacion
            Actividad certificacion = new Actividad();

            certificacion.IdCronograma = cronogramaPlanificado.IdCronograma;
            //certificacion.IdPersonalInterno = null;
            //certificacion.personalInterno = null;
            certificacion.OrdenActividad = 4;
            certificacion.TipoActividad  = "Certificacion";
            certificacion.FechaInicio    = construccion.FechaFin;
            certificacion.FechaFin       = certificacion.FechaInicio.AddDays(requerimientoPlanificado.Cotizaciones[0].DiasCertificacion);
            certificacion.Avance         = 0;
            certificacion.Asignacion     = 1;

            //Seguimiento
            Actividad seguimiento = new Actividad();

            seguimiento.IdCronograma = cronogramaPlanificado.IdCronograma;
            //seguimiento.IdPersonalInterno = null;
            //seguimiento.personalInterno = null;
            seguimiento.OrdenActividad = 5;
            seguimiento.TipoActividad  = "Seguimiento";
            seguimiento.FechaInicio    = certificacion.FechaFin;
            seguimiento.FechaFin       = seguimiento.FechaInicio.AddDays(requerimientoPlanificado.Cotizaciones[0].DiasSeguimiento);
            seguimiento.Avance         = 0;
            seguimiento.Asignacion     = 1;


            //gestion
            Actividad gestion = new Actividad();

            gestion.IdCronograma      = cronogramaPlanificado.IdCronograma;
            gestion.IdPersonalInterno = lp.IdPersonalInterno;
            gestion.personalInterno   = lp;
            gestion.OrdenActividad    = 6;
            gestion.TipoActividad     = "Gestion";
            gestion.FechaInicio       = fechainicio;
            gestion.FechaFin          = seguimiento.FechaFin;
            gestion.Avance            = 0;
            gestion.Asignacion        = 0.15m;

            //grabando actividades
            db.Actividades.Add(analisisFuncional);
            db.Actividades.Add(analisisTecnico);
            db.Actividades.Add(construccion);
            db.Actividades.Add(certificacion);
            db.Actividades.Add(seguimiento);
            db.Actividades.Add(gestion);
            db.SaveChanges();

            //Se actualiza cronograma

            cronogramaPlanificado.FechaInicio     = gestion.FechaInicio;
            cronogramaPlanificado.FechaFin        = gestion.FechaFin;
            db.Entry(cronogramaPlanificado).State = EntityState.Modified;
            db.SaveChanges();

            //Se asocian IDS y LP e Actualiza Requerimiento
            requerimientoPlanificado.IdS             = ids;
            requerimientoPlanificado.IdIdS           = ids.IdPersonalInterno;
            requerimientoPlanificado.LiderProyecto   = lp;
            requerimientoPlanificado.IdLiderProyecto = lp.IdPersonalInterno;
            requerimientoPlanificado.Estado          = "Programado";
            db.Entry(requerimientoPlanificado).State = EntityState.Modified;
            db.SaveChanges();
        }
 public ActionResult Edit(Cronograma cronograma)
 {
     if (ModelState.IsValid)
     {
         db.Entry(cronograma).State = EntityState.Modified;
         db.SaveChanges();
         return RedirectToAction("Index");
     }
     ViewBag.IdRequerimiento = new SelectList(db.Requerimientos, "IdRequerimiento", "NumReq", cronograma.IdRequerimiento);
     return View(cronograma);
 }