Exemple #1
0
        public static void DeletePrograma(Programa p, LainsaSci ctx)
        {
            // buscamos las revisiones programadas que corresponde a
            // este programa
            var rs = (from rev1 in p.Revisions
                      where rev1.Estado == "PROGRAMADA"
                      select rev1);

            // primero desprogramamos las revisiones
            foreach (Revision r in rs)
            {
                r.Estado   = "PLANIFICADA";
                r.Programa = null;
                ctx.SaveChanges();
                // ahora buscamos revisiones del mismo dispositivo programadas
                var rs2 = (from rev2 in r.Dispositivo.Revisiones
                           where rev2.Estado == "PROGRAMADA"
                           select rev2);
                foreach (Revision r2 in rs2)
                {
                    r2.Estado   = "PLANIFICADA";
                    r2.Programa = null;
                    ctx.SaveChanges();
                }
            }
            foreach (Sustitucion s in p.Sustitucions)
            {
                ctx.Delete(s);
            }
            ctx.Delete(p);
            ctx.SaveChanges();
        }
Exemple #2
0
        public static void DelProceso(Proceso proc, LainsaSci ctx)
        {
            Permiso per = (from p in ctx.Permisos
                           where p.Proceso == proc
                           select p).FirstOrDefault <Permiso>();

            ctx.Delete(per);
            ctx.Delete(proc);
        }
Exemple #3
0
 public static void DeleteRevision(Revision r, LainsaSci ctx)
 {
     // primero eliminamos sus datos
     ctx.Delete(r.DatosRevisions);
     // y ahora la revisón
     ctx.Delete(r);
     // ok y guardamos
     ctx.SaveChanges();
 }
Exemple #4
0
 public static void BorrarDispositivo(Dispositivo dsp, LainsaSci ctx)
 {
     foreach (Revision rev in dsp.Revisiones)
     {
         ctx.Delete(rev.DatosRevisions);
     }
     ctx.Delete(dsp.Revisiones);
     ctx.Delete(dsp.ResumenesRevisones);
     ctx.Delete(dsp);
     ctx.SaveChanges();
 }
        private void GuardarIncidenciaEvolucions(TIncidencia ti, Incidencia inci, SqlCeConnection conn, LainsaSci ctx)
        {
            IList <TIncidenciaEvolucion> ltie = CntSciTerminal.GetTIncidenciaEvolucions(ti, conn);

            foreach (TIncidenciaEvolucion tie in ltie)
            {
                if (tie.Abm == 0)
                {
                    continue;               // no cambiada
                }
                switch (tie.Abm)
                {
                case 1:
                    // alta
                    // aqui no verificamos un doble pase de fcihero porque lo ha sido en la
                    // incidencia padre.
                    IncidenciaEvolucion ie = new IncidenciaEvolucion();
                    ie.Incidencia     = inci; // en esta rutina la incidencia es conocida
                    ie.FechaEvolucion = tie.FechaEvolucion;
                    ie.Usuario        = CntLainsaSci.GetUsuario(tie.Usuario.UsuarioId, ctx);
                    ie.Comentarios    = tie.Comentarios;
                    ie.Operativo      = tie.Operativo;
                    ctx.Add(ie);
                    break;

                case 2:
                    // baja
                    IncidenciaEvolucion ie2 = CntLainsaSci.GetIncidenciaEvolucion(tie.IncidenciaEvolucionId, ctx);
                    if (ie2 != null)
                    {
                        ctx.Delete(ie2);
                    }
                    break;

                case 3:
                    // modificada
                    // este caso no debería darse pero por si acaso
                    IncidenciaEvolucion ie3 = CntLainsaSci.GetIncidenciaEvolucion(tie.IncidenciaEvolucionId, ctx);
                    if (ie3 != null)
                    {
                        Incidencia i3 = CntLainsaSci.GetIncidencia(tie.Incidencia.IncidenciaId, ctx);
                        ie3.Incidencia     = i3;
                        ie3.FechaEvolucion = tie.FechaEvolucion;
                        ie3.Usuario        = CntLainsaSci.GetUsuario(tie.Usuario.UsuarioId, ctx);
                        ie3.Comentarios    = tie.Comentarios;
                        ie3.Operativo      = tie.Operativo;
                    }
                    break;

                default:
                    break;
                }
                ctx.SaveChanges();
            }
        }
        // guardar las evoluciones relacionadas con una incidencia.
        private void GuardarIncidenciaEvolucion(TIncidencia ti, int abm, SqlCeConnection conn, LainsaSci ctx)
        {
            Incidencia incidencia = CntLainsaSci.GetIncidencia(ti.IncidenciaId, ctx);

            if (incidencia == null)
            {
                return;
            }
            // caso de las bajas, se eliminan todas las asociadas.
            if (abm == 2)
            {
                ctx.Delete(incidencia.IncidenciaEvolucions);
            }
            else
            {
                IncidenciaEvolucion          ie;
                IList <TIncidenciaEvolucion> tlie = CntSciTerminal.GetTIncidenciaEvolucions(ti, conn);
                foreach (TIncidenciaEvolucion tie in tlie)
                {
                    if (tie.Abm == 0)
                    {
                        continue;
                    }
                    switch (tie.Abm)
                    {
                    case 1:
                        // alta
                        ie                = new IncidenciaEvolucion();
                        ie.Incidencia     = incidencia;
                        ie.FechaEvolucion = tie.FechaEvolucion;
                        ie.Comentarios    = tie.Comentarios;
                        ie.Usuario        = CntLainsaSci.GetUsuario(tie.Usuario.UsuarioId, ctx);
                        ctx.Add(ie);
                        break;

                    case 2:
                        // baja
                        // ya ha sido tratado en un paso anterior.
                        break;

                    case 3:
                        // modificación
                        ie = CntLainsaSci.GetIncidenciaEvolucion(tie.IncidenciaEvolucionId, ctx);
                        ie.FechaEvolucion = tie.FechaEvolucion;
                        ie.Comentarios    = tie.Comentarios;
                        ie.Usuario        = CntLainsaSci.GetUsuario(tie.Usuario.UsuarioId, ctx);
                        break;

                    default:
                        break;
                    }
                }
            }
        }
Exemple #7
0
        public static void EliminarRevisionesPendientes(Dispositivo d, LainsaSci ctx)
        {
            var rs = (from r in ctx.Revisions
                      where r.Dispositivo.DispositivoId == d.DispositivoId &&
                      r.Estado != "REALIZADA"
                      select r);

            foreach (Revision r in rs)
            {
                ctx.Delete(r.DatosRevisions);
                ctx.Delete(r.Sustitucions);
            }
            ctx.Delete(rs);
            // al haber eliminado todas las revisiones lo lógico es que los resúmenes
            // tengan fecha de siguiente nula
            foreach (ResumenRevision rr in d.ResumenesRevisones)
            {
                rr.FechaSiguiente = new DateTime(1, 1, 1);
            }
            ctx.SaveChanges();
        }
Exemple #8
0
 public static void DeleteGrupoTrabajo(GrupoTrabajo gt, LainsaSci ctx)
 {
     if (gt.Usuarios != null)
     {
         foreach (Usuario u in gt.Usuarios)
         {
             u.GrupoTrabajo = null;
         }
     }
     ctx.Delete(gt);
     ctx.SaveChanges();
 }
 protected void btnEliminar_Click(object sender, EventArgs e)
 {
     if (txtFiltro.Text != "")
     {
         Filtro f = CntLainsaSci.GetFiltro("Incidencia", txtFiltro.Text, usuario, ctx);
         if (f != null)
         {
             string nom = f.Nombre;
             ctx.Delete(f);
             ctx.SaveChanges();
             CargarFiltros(null);
             rdcFiltro.SelectedValue = "";
             RadNotification1.Text   = String.Format("El filtro '{0}' ha sido eliminado", nom);
             RadNotification1.Show();
         }
     }
 }
        private void GuardarDispositivos(SqlCeConnection conn)
        {
            IList <TDispositivo> disps   = CntSciTerminal.GetTDispositivos(conn);
            RadProgressContext   context = RadProgressContext.Current;

            context.PrimaryTotal   = 1;
            context.PrimaryValue   = 1;
            context.PrimaryPercent = 100;
            int total = disps.Count;

            context.SecondaryTotal = total;
            int i = 0;

            foreach (TDispositivo disp in disps)
            {
                i++;
                if (disp.Abm == 0)
                {
                    continue;
                }
                RadProgress(context, i, total, disp.Nombre);
                // hay tres casos posible segun el valor de ABM
                // 0 = No cambia
                // 1 = nuevo
                // 2 = baja
                // 3 = modificación
                Dispositivo dispositivo;
                switch (disp.Abm)
                {
                case 1:
                    // nuevo
                    // primero comprobamos que ese dispositivo no se ha dado de alta previamente
                    Dispositivo dsp = (from d in ctx.Dispositivos
                                       where d.CodBarras == disp.CodBarras
                                       select d).FirstOrDefault <Dispositivo>();
                    if (dsp != null)
                    {
                        break;                  // ya existe han cargado dos veces el fichero.
                    }
                    dispositivo                 = new Dispositivo();
                    dispositivo.Nombre          = disp.Nombre;
                    dispositivo.Instalacion     = CntLainsaSci.GetInstalacion(disp.Instalacion.InstalacionId, ctx);
                    dispositivo.Operativo       = disp.Operativo;
                    dispositivo.TipoDispositivo = CntLainsaSci.GetTipoDispositivo(disp.Tipo.TipoId, ctx);
                    if (disp.Modelo != null)
                    {
                        dispositivo.ModeloDispositivo = CntLainsaSci.GetModelodispositivo(disp.Modelo.ModeloId, ctx);
                    }
                    dispositivo.CodBarras = disp.CodBarras;
                    dispositivo.Funcion   = "";
                    dispositivo.Estado    = disp.Estado;
                    dispositivo.Caducado  = false;
                    dispositivo.CargaKg   = 0;
                    ctx.Add(dispositivo);
                    break;

                case 2:
                    // baja
                    dispositivo = CntLainsaSci.GetDispositivo(disp.DispositivoId, ctx);
                    if (dispositivo != null)
                    {
                        ctx.Delete(dispositivo);
                    }
                    break;

                case 3:
                    // modificación
                    dispositivo = CntLainsaSci.GetDispositivo(disp.DispositivoId, ctx);
                    if (dispositivo != null)
                    {
                        dispositivo.Operativo = disp.Operativo;
                        dispositivo.Estado    = disp.Estado;
                    }
                    break;

                default:
                    break;
                }
                ctx.SaveChanges();
            }
            context.CurrentOperationText = "Importación finalizada.";
            context.OperationComplete    = true;
        }
Exemple #11
0
 public static void CTXEliminar(Object o, LainsaSci ctx)
 {
     ctx.Delete(o);
 }
Exemple #12
0
 public static void DeleteGrupoUsuario(GrupoUsuario gu, LainsaSci ctx)
 {
     ctx.Delete(gu.Permisos);
     ctx.Delete(gu);
     ctx.SaveChanges();
 }
        //
        private void GuardarIncidenciaEvolucions(SqlCeConnection conn, LainsaSci ctx)
        {
            IList <TIncidenciaEvolucion> ltie = CntSciTerminal.GetTIncidenciaEvolucions(conn);

            foreach (TIncidenciaEvolucion tie in ltie)
            {
                if (tie.Abm == 0)
                {
                    continue;               // no cambiada
                }
                if (tie.Incidencia.Abm == 1)
                {
                    continue;                          // las evoluciones de las incidencias creadas ya han sido procesadas (GuardarIncidencias)
                }
                switch (tie.Abm)
                {
                case 1:
                    // alta
                    // primero evitar un doble procesamiento
                    IncidenciaEvolucion ie1 = (from ine in ctx.IncidenciaEvolucions
                                               where ine.Incidencia.IncidenciaId == tie.Incidencia.IncidenciaId &&
                                               ine.FechaEvolucion == tie.FechaEvolucion &&
                                               ine.Comentarios == tie.Comentarios
                                               select ine).FirstOrDefault <IncidenciaEvolucion>();
                    if (ie1 != null)
                    {
                        break;                  // la evolución entendemos que ya ha sido dada de alta
                    }
                    IncidenciaEvolucion ie = new IncidenciaEvolucion();
                    Incidencia          i  = CntLainsaSci.GetIncidencia(tie.Incidencia.IncidenciaId, ctx);
                    ie.Incidencia     = i;
                    ie.FechaEvolucion = tie.FechaEvolucion;
                    ie.Usuario        = CntLainsaSci.GetUsuario(tie.Usuario.UsuarioId, ctx);
                    ie.Comentarios    = tie.Comentarios;
                    ie.Operativo      = tie.Operativo;
                    ctx.Add(ie);
                    break;

                case 2:
                    // baja
                    IncidenciaEvolucion ie2 = CntLainsaSci.GetIncidenciaEvolucion(tie.IncidenciaEvolucionId, ctx);
                    if (ie2 != null)
                    {
                        ctx.Delete(ie2);
                    }
                    break;

                case 3:
                    // modificada
                    IncidenciaEvolucion ie3 = CntLainsaSci.GetIncidenciaEvolucion(tie.IncidenciaEvolucionId, ctx);
                    if (ie3 != null)
                    {
                        Incidencia i3 = CntLainsaSci.GetIncidencia(tie.Incidencia.IncidenciaId, ctx);
                        ie3.Incidencia     = i3;
                        ie3.FechaEvolucion = tie.FechaEvolucion;
                        ie3.Usuario        = CntLainsaSci.GetUsuario(tie.Usuario.UsuarioId, ctx);
                        ie3.Comentarios    = tie.Comentarios;
                        ie3.Operativo      = tie.Operativo;
                    }
                    break;

                default:
                    break;
                }
                ctx.SaveChanges();
            }
        }
        // lee secuancialmente las incidencias del fichero de terminal y las guarda en la base de datos
        private void GuardarIncidencias(SqlCeConnection conn, LainsaSci ctx)
        {
            IList <TIncidencia> lti = CntSciTerminal.GetTIncidencias(conn);
            Incidencia          incidencia;

            foreach (TIncidencia ti in lti)
            {
                // no ha sufrido cambios
                if (ti.Abm == 0)
                {
                    continue;
                }
                switch (ti.Abm)
                {
                case 1:
                    // alta
                    // comprobar que no se ha dado de alta previamente
                    // es el caso de recarga del mismo fichero
                    Incidencia inci = (from i in ctx.Incidencias
                                       where i.Dispositivo.DispositivoId == ti.TDispositivo.DispositivoId &&
                                       i.FechaApertura == ti.FechaApertura &&
                                       i.Comentarios == ti.Comentarios
                                       select i).FirstOrDefault <Incidencia>();
                    if (inci != null)
                    {
                        break;
                    }
                    incidencia = new Incidencia();
                    incidencia.FechaApertura = ti.FechaApertura;
                    incidencia.FechaPrevista = ti.FechaPrevista;
                    incidencia.FechaCierre   = ti.FechaCierre;
                    incidencia.Dispositivo   = CntLainsaSci.GetDispositivo(ti.TDispositivo.DispositivoId, ctx);
                    if (ti.TEstado != null)
                    {
                        incidencia.Estado = CntLainsaSci.GetEstado(ti.TEstado.EstadoId, ctx);
                    }
                    if (ti.TPrioridad != null)
                    {
                        incidencia.Prioridad = CntLainsaSci.GetPrioridad(ti.TPrioridad.PrioridadId, ctx);
                    }
                    if (ti.TResponsable != null)
                    {
                        incidencia.Responsable = CntLainsaSci.GetResponsable(ti.TResponsable.ResponsableId, ctx);
                    }
                    incidencia.Usuario     = CntLainsaSci.GetUsuario(ti.TUsuario.UsuarioId, ctx);
                    incidencia.Comentarios = ti.Comentarios;
                    incidencia.Operativo   = ti.Operativo;
                    incidencia.SiguePlan   = true;   // hasta que no se cambie el programa de terminal para que contemple ese campo.
                    ctx.Add(incidencia);
                    ctx.SaveChanges();
                    // Si es un alta hay que verificar que las evoluciones asociadas se cree contra
                    // la incidencia de servidor correcta.
                    GuardarIncidenciaEvolucions(ti, incidencia, conn, ctx);
                    break;

                case 2:
                    incidencia = CntLainsaSci.GetIncidencia(ti.IncidenciaId, ctx);
                    if (incidencia != null)
                    {
                        ctx.Delete(incidencia.IncidenciaEvolucions);
                        ctx.SaveChanges();
                        ctx.Delete(incidencia);
                        ctx.SaveChanges();
                    }
                    break;

                case 3:
                    incidencia = CntLainsaSci.GetIncidencia(ti.IncidenciaId, ctx);
                    incidencia.FechaApertura = ti.FechaApertura;
                    incidencia.FechaPrevista = ti.FechaPrevista;
                    incidencia.FechaCierre   = ti.FechaCierre;
                    incidencia.Dispositivo   = CntLainsaSci.GetDispositivo(ti.TDispositivo.DispositivoId, ctx);
                    if (ti.TEstado != null)
                    {
                        incidencia.Estado = CntLainsaSci.GetEstado(ti.TEstado.EstadoId, ctx);
                    }
                    if (ti.TPrioridad != null)
                    {
                        incidencia.Prioridad = CntLainsaSci.GetPrioridad(ti.TPrioridad.PrioridadId, ctx);
                    }
                    if (ti.TResponsable != null)
                    {
                        incidencia.Responsable = CntLainsaSci.GetResponsable(ti.TResponsable.ResponsableId, ctx);
                    }
                    incidencia.Usuario     = CntLainsaSci.GetUsuario(ti.TUsuario.UsuarioId, ctx);
                    incidencia.Comentarios = ti.Comentarios;
                    incidencia.Operativo   = ti.Operativo;
                    break;

                default:
                    break;
                }
                ctx.SaveChanges();
            }
        }
        protected void GuardarSustituciones(SqlCeConnection conn, LainsaSci ctx)
        {
            IList <TSustitucion> ltsu = CntSciTerminal.GetTSustituciones(conn);

            foreach (TSustitucion tsu in ltsu)
            {
                if (tsu.Abm == 0)
                {
                    continue;               // no hay cambios
                }
                Sustitucion sustitucion;
                switch (tsu.Abm)
                {
                case 1:
                    // alta
                    // hay que controlar el doble procesamiento del fichero
                    Sustitucion sus = (from st in ctx.Sustitucions
                                       where st.DispositivoOriginal.DispositivoId == tsu.TDispositivoOriginal.DispositivoId &&
                                       st.DispositivoSustituto.DispositivoId == tsu.TDispositivoSustituto.DispositivoId &&
                                       st.Fecha == tsu.Fecha
                                       select st).FirstOrDefault <Sustitucion>();
                    if (sus != null)
                    {
                        break;                  // entendemos que ya se ha dado de alta en otro procesamiento.
                    }
                    sustitucion = new Sustitucion();
                    // atributos directos
                    sustitucion.Fecha       = tsu.Fecha;
                    sustitucion.Comentarios = tsu.Comentarios;
                    sustitucion.Estado      = tsu.Estado;
                    // atributos como objetos
                    if (tsu.TUsuario != null)
                    {
                        sustitucion.Usuario = CntLainsaSci.GetUsuario(tsu.TUsuario.UsuarioId, ctx);
                    }
                    if (tsu.TDispositivoOriginal != null)
                    {
                        sustitucion.DispositivoOriginal = CntLainsaSci.GetDispositivo(tsu.TDispositivoOriginal.DispositivoId, ctx);
                    }
                    if (tsu.TDispositivoSustituto != null)
                    {
                        sustitucion.DispositivoSustituto = CntLainsaSci.GetDispositivo(tsu.TDispositivoSustituto.DispositivoId, ctx);
                    }
                    if (tsu.TRevision != null)
                    {
                        sustitucion.Revision = CntLainsaSci.GetRevision(tsu.TRevision.RevisionId, ctx);
                    }
                    if (tsu.TPrograma != null)
                    {
                        sustitucion.Programa = CntLainsaSci.GetPrograma(tsu.TPrograma.ProgramaId, ctx);
                    }
                    ctx.Add(sustitucion);
                    ctx.SaveChanges();
                    break;

                case 2:
                    // baja
                    sustitucion = CntLainsaSci.GetSustitucion(tsu.SustitucionId, ctx);
                    if (sustitucion != null)
                    {
                        ctx.Delete(sustitucion);
                        ctx.SaveChanges();
                    }
                    break;

                case 3:
                    // modificacion
                    sustitucion = CntLainsaSci.GetSustitucion(tsu.SustitucionId, ctx);
                    if (sustitucion != null)
                    {
                        // atributos directos
                        sustitucion.Fecha       = tsu.Fecha;
                        sustitucion.Comentarios = tsu.Comentarios;
                        sustitucion.Estado      = tsu.Estado;
                        // atributos como objetos
                        if (tsu.TUsuario != null)
                        {
                            sustitucion.Usuario = CntLainsaSci.GetUsuario(tsu.TUsuario.UsuarioId, ctx);
                        }
                        if (tsu.TDispositivoOriginal != null)
                        {
                            sustitucion.DispositivoOriginal = CntLainsaSci.GetDispositivo(tsu.TDispositivoOriginal.DispositivoId, ctx);
                        }
                        if (tsu.TDispositivoSustituto != null)
                        {
                            sustitucion.DispositivoSustituto = CntLainsaSci.GetDispositivo(tsu.TDispositivoSustituto.DispositivoId, ctx);
                        }
                        if (tsu.TRevision != null)
                        {
                            sustitucion.Revision = CntLainsaSci.GetRevision(tsu.TRevision.RevisionId, ctx);
                        }
                        if (tsu.TPrograma != null)
                        {
                            sustitucion.Programa = CntLainsaSci.GetPrograma(tsu.TPrograma.ProgramaId, ctx);
                        }
                        ctx.SaveChanges();
                    }
                    break;
                }
            }
        }
Exemple #16
0
 public static void BorrarTerminal(Terminal t, LainsaSci ctx)
 {
     t.Programas.Clear();
     ctx.Delete(t);
 }
Exemple #17
0
        public static void PlanificarRevisiones(ResumenRevision rr, LainsaSci ctx)
        {
            // Hay que evitar que un dispositivo que no sigue planificación planifique.
            if (!rr.Dispositivo.Operativo && !rr.Dispositivo.SiguePlan)
            {
                return;
            }
            // NO se planifican dispositivos caducados
            if (rr.Dispositivo.Caducado)
            {
                return;
            }
            // Eliminar todas las revisiones de ese dispositivo para esa plantilla, no realizadas
            var rs = from r in rr.Dispositivo.Revisiones
                     where r.PlantillaRevision.PlantillaId == rr.PlantillaRevision.PlantillaId
                     select r;
            IList <Revision> revisiones = new List <Revision>();

            foreach (Revision r in rs)
            {
                if (CntLainsaSci.FechaNula(r.FechaRevision))
                {
                    // hay que salvar las programadas para poder recargarlas
                    if (r.Programa != null)
                    {
                        Revision rev = new Revision
                        {
                            Dispositivo       = r.Dispositivo,
                            PlantillaRevision = r.PlantillaRevision,
                            FechaPlanificada  = r.FechaPlanificada,
                            Programa          = r.Programa,
                            FechaProgramada   = r.FechaPlanificada
                        };
                        revisiones.Add(rev);
                    }
                    ctx.Delete(r.DatosRevisions);
                    ctx.Delete(r.Sustitucions);
                    ctx.Delete(r);
                }
            }
            ctx.SaveChanges();
            if (CntLainsaSci.FechaNula(rr.FechaUltima))
            {
                return;
            }
            DateTime fechaBase      = rr.FechaUltima;
            DateTime fechaSiguiente = SiguienteFecha(fechaBase, rr.PlantillaRevision);
            // buscamos si ya había una revisión que coincida con la que vamos a dar de alta
            Revision rev2 = (from r in ctx.Revisions
                             where r.Dispositivo.DispositivoId == rr.Dispositivo.DispositivoId && r.PlantillaRevision.PlantillaId == rr.PlantillaRevision.PlantillaId && r.FechaRevision == fechaSiguiente && r.Dispositivo.Operativo == true
                             select r).FirstOrDefault <Revision>();

            if (rev2 == null)
            {
                rev2                  = new Revision();
                rev2.Dispositivo      = rr.Dispositivo;
                rev2.FechaPlanificada = fechaSiguiente;
                // Comprobamos si caemos en caducidad
                if (fechaSiguiente >= rev2.Dispositivo.FechaCaducidad)
                {
                    rev2.CaduProx = true;
                }
                else
                {
                    // calculamos en que fecha caerá la siguiente y si es fuera de caducidad
                    DateTime fechaSS = SiguienteFecha(fechaSiguiente, rr.PlantillaRevision);
                    if (fechaSS >= rev2.Dispositivo.FechaCaducidad)
                    {
                        rev2.CaduProx = true;
                    }
                }
                rev2.PlantillaRevision = rr.PlantillaRevision;
                rev2.Estado            = "PLANIFICADA";

                //Respetamos la programación en función de las revisiones anteriores
                foreach (Revision r in revisiones)
                {
                    if (r.Dispositivo.DispositivoId == rev2.Dispositivo.DispositivoId && r.PlantillaRevision.PlantillaId == rev2.PlantillaRevision.PlantillaId && r.FechaPlanificada == rev2.FechaPlanificada)
                    {
                        rev2.Programa        = r.Programa;
                        rev2.FechaProgramada = r.FechaProgramada;
                        rev2.Estado          = "PROGRAMADA";
                        r.Programa.Revisions.Add(rev2);
                    }
                }
                ctx.Add(rev2);
                // buscamos la revisión anterior que tenga datos
                Revision rva = (from rv in ctx.Revisions
                                where rv.Dispositivo.DispositivoId == rev2.Dispositivo.DispositivoId &&
                                rv.PlantillaRevision.PlantillaId == rev2.PlantillaRevision.PlantillaId &&
                                rv.Estado == "REALIZADA" &&
                                rv.FechaRevision < rev2.FechaPlanificada
                                select rv).FirstOrDefault <Revision>();

                foreach (Campo c in rr.PlantillaRevision.Campos)
                {
                    DatosRevision dr = new DatosRevision();
                    dr.Campo = c;
                    // si hay anterior copiamos
                    if (rva != null)
                    {
                        DatosRevision dr2 = (from d in rva.DatosRevisions
                                             where d.Campo.Nombre == c.Nombre
                                             select d).FirstOrDefault <DatosRevision>();
                        if (dr2 != null)
                        {
                            dr.Valor = dr2.Valor;
                        }
                    }
                    dr.Revision = rev2;
                    ctx.Add(dr);
                }

                ctx.SaveChanges();
            }
            // Actualizamos la fecha siguiente en esta plantilla
            rr.FechaSiguiente = fechaSiguiente;
            ctx.SaveChanges();
        }