Beispiel #1
0
        private void mnuAceptar_Click(object sender, EventArgs e)
        {
            if (!DatosOk())
            {
                return;
            }
            Cursor.Current = Cursors.WaitCursor;
            CntSciTerminal.TOpen(this.conn);
            SaveDatosRevision(conn);
            if (!DescargarPantalla())
            {
                return;
            }
            if (!SaveRevision(conn))
            {
                return;
            }
            CntSciTerminal.TClose(this.conn);
            Cursor.Current = Cursors.Default;
            MessageBox.Show("Revisión guardada", "AVISO");
            Cursor.Current = Cursors.WaitCursor;
            switch (caller)
            {
            case "programa":
                RevisionesGrid revGrid = new RevisionesGrid(tr.TPrograma, usuario);
                revGrid.Show();
                break;

            case "dispositivoGrid":
                DispForm dspFormGrid = new DispForm(usuario, tr.Dispositivo);
                dspFormGrid.Show();
                break;

            case "dispRev":
                CntSciTerminal.TOpen(this.conn);
                IList <TRevision> ltr = CntSciTerminal.GetTRevisiones(true, tr.Dispositivo, conn);
                CntSciTerminal.TClose(this.conn);
                if (ltr.Count > 0)
                {
                    RevisionesGrid Grid = new RevisionesGrid("dispRev", tr.Dispositivo, usuario);
                    Grid.Show();
                }
                else
                {
                    Cursor.Current = Cursors.WaitCursor;
                    CodBarrasForm frmCodBarras = new CodBarrasForm(usuario, true);
                    frmCodBarras.Show();
                    this.Close();
                }
                this.Close();
                break;
            }
            this.Close();
        }
Beispiel #2
0
 private void btnAceptar_Click(object sender, EventArgs e)
 {
     if (!DatosOk())
     {
         return;
     }
     Cursor.Current = Cursors.WaitCursor;
     // miramos si hay algún dispositivo que coincida
     CntSciTerminal.TOpen(this.conn);
     if ((dispositivo = CntSciTerminal.GetTDispositivo(txtCaptura.Text, conn)) == null)
     {
         MessageBox.Show("No hay ningún dispositivo con ese código", "AVISO",
                         MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
         Cursor.Current = Cursors.Default;
         return;
     }
     else
     {
         //Miramos si el usuario quiere informaciçon del dispositivo o realizar revisiones
         if (task)
         {
             IList <TRevision> ltr = CntSciTerminal.GetTRevisiones(true, dispositivo, conn);
             if (ltr.Count > 0)
             {
                 if (ltr.Count >= 2)
                 {
                     RevisionesGrid Grid = new RevisionesGrid("dispRev", dispositivo, usuario);
                     Grid.Show();
                 }
                 else
                 {
                     TRevision        tr      = CntSciTerminal.GetTRevision(ltr[0].RevisionId, conn);
                     DistribuidorForm frmDist = new DistribuidorForm(tr, 0, "dispRev", usuario);
                 }
                 this.Close();
             }
             else
             {
                 MessageBox.Show("El dispositivo no tiene revisiones pendientes", "AVISO",
                                 MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
             }
         }
         else
         {
             DispForm frmgrdDispositivo = new DispForm(usuario, dispositivo);
             frmgrdDispositivo.Show();
             this.Close();
         }
     }
     CntSciTerminal.TClose(this.conn);
     Cursor.Current = Cursors.Default;
 }
Beispiel #3
0
        private void GuardarRevisiones(TDispositivo disp, SqlCeConnection conn)
        {
            IList <TRevision> revisiones = CntSciTerminal.GetTRevisiones(disp, conn);

            foreach (TRevision rev in revisiones)
            {
                Revision revision;
                var      rs = (from d in ctx.Revisions
                               where d.RevisionId == rev.RevisionId
                               select d).FirstOrDefault <Revision>();
                //siempre existirá la revisión ya que no se permite la creación de nuevas en TERMINAL
                if (rs != null)
                {
                    revision = rs;
                    if (rev.FechaRevision != null)
                    {
                        revision.FechaRevision = rev.FechaRevision;
                    }
                    revision.FechaPlanificada = rev.FechaPlanificada;
                    revision.Resultado        = rev.Resultado;
                    revision.Observaciones    = rev.Comentario;
                    if (rev.Usuario != null)
                    {
                        revision.Usuario = CntLainsaSci.GetUsuario(rev.Usuario.UsuarioId, ctx);
                    }
                    revision.Estado = rev.Estado;
                    if (rev.TTipoAnomalia != null)
                    {
                        revision.TipoAnomalia = CntLainsaSci.GetTipoAnomalia(rev.TTipoAnomalia.TipoAnomaliaId, ctx);
                    }
                }
                else
                {
                    // revision = new Revision();
                    // revision.FechaRevision = rev.FechaRevision;
                    // revision.Resultado = rev.Resultado;
                    // if (rev.Usuario != DBNull.Value)
                    //     revision.Usuario = CntLainsaSci.GetUsuario(rev.Usuario.UsuarioId, ctx);
                    // revision.ResumenInforme = CntLainsaSci.GetResumenInforme(revision, ctx);
                    // revision.Estado = rev.Estado;
                    // if (rev.TTipoAnomalia != DBNull.Value)
                    //     revision.TipoAnomalia = CntLainsaSci.GetTipoAnomalia(rev.TTipoAnomalia.TipoAnomaliaId, ctx);
                    // revision.Dispositivo = CntLainsaSci.GetDispositivo(rev.Dispositivo.DispositivoId, ctx);

                    //// revision.ResumenInforme = CntLainsaSci.GetResumenInforme(revision, ctx);
                    // ctx.Add(revision);
                }
                ctx.SaveChanges();
                CargarDatosRevision(rev, conn);
            }
        }
        //private void GuardarRevisiones(TDispositivo disp, SqlCeConnection conn)
        //{
        //    IList<TRevision> revisiones = CntSciTerminal.GetTRevisiones(disp, conn);
        //    foreach (TRevision rev in revisiones)
        //    {
        //        Revision revision = null;
        //        var rs = (from d in ctx.Revisions
        //                  where d.RevisionId == rev.RevisionId
        //                  select d).FirstOrDefault<Revision>();
        //        //siempre existirá la revisión ya que no se permite la creación de nuevas en TERMINAL
        //        if (rs != null)
        //        {
        //            revision = rs;
        //            if (rev.FechaRevision != null)
        //                revision.FechaRevision = rev.FechaRevision;
        //            revision.FechaPlanificada = rev.FechaPlanificada;
        //            revision.Resultado = rev.Resultado;
        //            revision.Observaciones = rev.Comentario;
        //            if (rev.Usuario != null)
        //                revision.Usuario = CntLainsaSci.GetUsuario(rev.Usuario.UsuarioId, ctx);
        //            revision.Estado = rev.Estado;
        //            if (rev.TTipoAnomalia != null)
        //                revision.TipoAnomalia = CntLainsaSci.GetTipoAnomalia(rev.TTipoAnomalia.TipoAnomaliaId, ctx);
        //            if (rev.Dispositivo.CodBarras != null)
        //                revision.CodBarras = rev.Dispositivo.CodBarras;
        //            CargarDatosRevision(rev, conn);
        //            revision.ResumenInforme = CntLainsaSci.GetResumenInforme(revision, ctx);

        //            ctx.SaveChanges();

        //            // ahora esta secuencia solo tiene sentido en el caso de periodicas
        //            if (!revision.PlantillaRevision.NoPeriodica)
        //            {
        //                CntLainsaSci.EliminarInferiores(revision, ctx);
        //                CntLainsaSci.ProgramarSiguienteRevision(revision, ctx, true);
        //                CntLainsaSci.ProgramarInferiores(revision, ctx);
        //            }
        //        }
        //        else
        //        {
        //            // revision = new Revision();
        //            // revision.FechaRevision = rev.FechaRevision;
        //            // revision.Resultado = rev.Resultado;
        //            // if (rev.Usuario != DBNull.Value)
        //            //     revision.Usuario = CntLainsaSci.GetUsuario(rev.Usuario.UsuarioId, ctx);
        //            // revision.ResumenInforme = CntLainsaSci.GetResumenInforme(revision, ctx);
        //            // revision.Estado = rev.Estado;
        //            // if (rev.TTipoAnomalia != DBNull.Value)
        //            //     revision.TipoAnomalia = CntLainsaSci.GetTipoAnomalia(rev.TTipoAnomalia.TipoAnomaliaId, ctx);
        //            // revision.Dispositivo = CntLainsaSci.GetDispositivo(rev.Dispositivo.DispositivoId, ctx);

        //            //// revision.ResumenInforme = CntLainsaSci.GetResumenInforme(revision, ctx);
        //            // ctx.Add(revision);
        //        }
        //    }
        //}
        private void GuardarRevisiones(SqlCeConnection conn)
        {
            IList <TRevision> revisiones = CntSciTerminal.GetTRevisiones(conn);

            foreach (TRevision rev in revisiones)
            {
                Revision revision = null;
                var      rs       = (from d in ctx.Revisions
                                     where d.RevisionId == rev.RevisionId
                                     select d).FirstOrDefault <Revision>();
                //siempre existirá la revisión ya que no se permite la creación de nuevas en TERMINAL
                if (rs != null)
                {
                    revision = rs;
                    if (rev.FechaRevision != null)
                    {
                        revision.FechaRevision = rev.FechaRevision;
                    }
                    revision.Resultado     = rev.Resultado;
                    revision.Observaciones = rev.Comentario;
                    if (rev.Usuario != null)
                    {
                        revision.Usuario = CntLainsaSci.GetUsuario(rev.Usuario.UsuarioId, ctx);
                    }
                    CargarDatosRevision(rev, conn);
                    revision.ResumenInforme = CntLainsaSci.GetResumenInforme(revision, ctx);
                    revision.Estado         = rev.Estado;
                    if (revision.Programa != null)
                    {
                        revision.Programa.Estado = CntLainsaSci.EstadoPrograma(revision.Programa);
                    }
                    if (rev.TTipoAnomalia != null)
                    {
                        revision.TipoAnomalia = CntLainsaSci.GetTipoAnomalia(rev.TTipoAnomalia.TipoAnomaliaId, ctx);
                    }



                    ctx.SaveChanges();

                    // ahora esta secuencia solo tiene sentido en el caso de periodicas
                    if (!revision.PlantillaRevision.NoPeriodica)
                    {
                        CntLainsaSci.EliminarInferiores(revision, ctx);
                        CntLainsaSci.ProgramarSiguienteRevision(revision, ctx, true);
                        CntLainsaSci.ProgramarInferiores(revision, ctx);
                    }
                }
            }
        }
Beispiel #5
0
        public void CargarGrid()
        {
            IList <TRevision> ltr;

            CntSciTerminal.TOpen(this.conn);
            if (vPrograma != null)
            {
                ltr = CntSciTerminal.GetTRevisiones(vPrograma, conn);
            }
            else
            {
                ltr = CntSciTerminal.GetTRevisiones(false, vDispositivo, conn);
            }
            CntSciTerminal.TClose(this.conn);
            grdRevisiones.DataSource = ltr.ToArray <TRevision>();
            CrearEstiloColumnas();
            MostrarResumen(ltr);
        }
Beispiel #6
0
        public void CargarGrid()
        {
            IList <TRevision> ltr = CntSciTerminal.GetTRevisiones(vDispositivo, conn);

            grdRevisiones.DataSource = ltr.ToArray <TRevision>();
            IList <TIncidencia> lti = CntSciTerminal.GetTIncidencias(vDispositivo, conn);

            grdIncidencias.DataSource = lti.ToArray <TIncidencia>();
            IList <TSustitucion> lts = CntSciTerminal.GetTSustituciones(vDispositivo, conn);

            grdSustituciones.DataSource = lts.ToArray <TSustitucion>();
            IList <TTipoAnomalia> lta = CntSciTerminal.GetTTipoAnomalias(vDispositivo, conn);

            grdTipoA.DataSource = lta.ToArray <TTipoAnomalia>();
            CrearEstiloColumnasRev();
            CrearEstiloColumnasInc();
            CrearEstiloColumnasSust();
            CrearEstiloColumnasTipoA();
        }
        public void CargarGrid()
        {
            IList <TRevision> ltr;
            IList <TRevision> ltr2;

            CntSciTerminal.TOpen(this.conn);
            if (vPrograma != null)
            {
                ltr = CntSciTerminal.GetTRevisiones(vPrograma, conn);
            }
            else
            {
                ltr = CntSciTerminal.GetTRevisiones(false, vDispositivo, conn);
            }
            foreach (TRevision r in ltr)
            {
                r.HayIncidencia = CntSciTerminal.HayIncidencias(r, conn).HayIncidencia;
            }
            CntSciTerminal.TClose(this.conn);

            // Filtrar las revisiones para las que se tiene permiso.
            //if (usuario.Instalaciones.Count > 0)
            //{
            //    ltr2 = new List<TRevision>();
            //    foreach (TRevision r in ltr)
            //    {
            //        if (usuario.Instalaciones.Count > 0 && CntSciTerminal.checkInstalacion(usuario, r.NInstalacion))
            //        {
            //            ltr2.Add(r);
            //        }
            //    }
            //    ltr = ltr2;
            //}
            grdRevisiones.DataSource = ltr.ToArray <TRevision>();
            CrearEstiloColumnas();
            CntSciTerminal.pLtr = ltr;
            MostrarResumen(ltr);
        }
Beispiel #8
0
        private void mnuSalir_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;

            switch (caller)
            {
            case "programa":
                RevisionesGrid revGrid = new RevisionesGrid(tr.TPrograma, usuario);
                revGrid.Show();
                break;

            case "dispositivoGrid":
                DispForm dspFormGrid = new DispForm(usuario, tr.Dispositivo);
                dspFormGrid.Show();
                break;

            case "dispRev":
                CntSciTerminal.TOpen(this.conn);
                IList <TRevision> ltr = CntSciTerminal.GetTRevisiones(true, tr.Dispositivo, this.conn);
                CntSciTerminal.TClose(this.conn);
                if (ltr.Count >= 2)
                {
                    RevisionesGrid Grid = new RevisionesGrid("dispRev", tr.Dispositivo, usuario);
                    Grid.Show();
                }
                else
                {
                    Cursor.Current = Cursors.WaitCursor;
                    CodBarrasForm frmCodBarras = new CodBarrasForm(usuario, true);
                    frmCodBarras.Show();
                    this.Close();
                }
                this.Close();
                break;
            }
            this.Close();
        }
        private void PantallaValidacion(SqlCeConnection conn)
        {
            pantalla = new StringBuilder();
            pantalla.Append(String.Format("<b>Empresa: {0}</b><br/>", empresa.Nombre));
            //Incidencias
            IList <TIncidencia> incis = CntSciTerminal.GetTIncidencias(conn);

            pantalla.Append("<b>Incidencias:</b><br/>");
            if (incis != null)
            {
                foreach (TIncidencia inc in incis)
                {
                    var rs = (from d in ctx.Incidencias
                              where d.IncidenciaId == inc.IncidenciaId && d.Dispositivo.DispositivoId == inc.Dispositivo.DispositivoId
                              select d).FirstOrDefault <Incidencia>();
                    if (rs == null)
                    {
                        pantalla.AppendLine(String.Format("Incidencia en dispositivo: {0}<br/>", inc.Dispositivo.Nombre));
                    }
                }
            }

            //Sustituciones
            IList <TSustitucion> sustituciones = CntSciTerminal.GetTSustituciones(conn);

            pantalla.AppendLine("<b>Sustituciones:</b><br/>");
            if (sustituciones != null)
            {
                foreach (TSustitucion sust in sustituciones)
                {
                    var rs = (from d in ctx.Sustitucions
                              where d.SustitucionId == sust.SustitucionId && d.DispositivoOriginal.DispositivoId == sust.TDispositivoOriginal.DispositivoId
                              select d).FirstOrDefault <Sustitucion>();
                    if (rs == null)
                    {
                        pantalla.AppendLine(String.Format("Disp. Original: {0} / Disp. Sustituto: {1}<br/>", sust.TDispositivoOriginal.Nombre, sust.TDispositivoSustituto.Nombre));
                    }
                }
            }

            //Revisiones
            IList <TRevision> revisiones = CntSciTerminal.GetTRevisiones(conn);

            pantalla.AppendLine("<b>Revisiones:</b><br/>");
            if (revisiones != null)
            {
                TPrograma p    = null;
                int       p_id = 0;
                foreach (TRevision rev in revisiones)
                {
                    if ((p = rev.TPrograma) != null)
                    {
                        p_id = p.ProgramaId;
                    }
                    pantalla.AppendLine(String.Format("Revisión realizada en: {1} del dispositivo: {0}. Programa: {2}<br/>", rev.NDispositivo, rev.FechaRevision.ToShortDateString(), p_id));
                }
            }
            if (conn.State != System.Data.ConnectionState.Closed)
            {
                conn.Close();
            }

            RadNotification2.Text = String.Format("<b>{0}</b><br/>{1}",
                                                  (string)GetGlobalResourceObject("ResourceLainsaSci", "Warning"),
                                                  pantalla.ToString());
            RadNotification2.Show();

            RadAjaxManager1.ResponseScripts.Add(String.Format("return radconfirm('¿Desea continuar con la importación?', confirmCallBackFn, 330, 100, null,'Importación', '');"));
        }
        private void PantallaValidacion(SqlCeConnection conn)
        {
            pantalla = new StringBuilder();
            pantalla.Append(String.Format("<b>Empresa: {0}</b><br/>", empresa.Nombre));
            //Incidencias
            IList <TIncidencia> incis = CntSciTerminal.GetTIncidencias(conn);

            pantalla.Append("--- INCIDENCIAS ------<br/>");
            if (incis != null)
            {
                foreach (TIncidencia inc in incis)
                {
                    // solo las incidencias que se han creado modificado o eliminado en el terminal
                    if (inc.Abm != 0)
                    {
                        pantalla.AppendLine(String.Format("ID:{6} Dispositivo: {0} ABM: {1} Apertura:{2:dd/MM/yyyy} Cierre:{3:dd/MM/yyyy} Prevista:{4:dd/MM/yyyy} Comentarios:{5} <br/>",
                                                          inc.TDispositivo.Nombre,
                                                          inc.Abm,
                                                          inc.FechaApertura,
                                                          inc.FechaCierre,
                                                          inc.FechaPrevista,
                                                          inc.Comentarios,
                                                          inc.IncidenciaId));
                    }
                }
            }

            //Incidencias (Evolución)
            IList <TIncidenciaEvolucion> incievos = CntSciTerminal.GetTIncidenciaEvolucions(conn);

            pantalla.Append("--- INCIDENCIAS EVOLUCIONES ------<br/>");
            if (incievos != null)
            {
                foreach (TIncidenciaEvolucion inc in incievos)
                {
                    // solo las incidencias que se han creado modificado o eliminado en el terminal
                    if (inc.Abm != 0)
                    {
                        pantalla.AppendLine(String.Format("IDEVO:{4} IDINCI:{5} Dispositivo: {0} ABM: {1} Fecha:{2:dd/MM/yyyy} Comentarios:{3} <br/>",
                                                          inc.Incidencia.TDispositivo.Nombre,
                                                          inc.Abm,
                                                          inc.FechaEvolucion,
                                                          inc.Comentarios,
                                                          inc.IncidenciaEvolucionId,
                                                          inc.Incidencia.IncidenciaId));
                    }
                }
            }

            //Sustituciones
            IList <TSustitucion> sustituciones = CntSciTerminal.GetTSustituciones(conn);

            pantalla.AppendLine("--- SUSTITUCIONES ------<br/>");
            if (sustituciones != null)
            {
                foreach (TSustitucion sust in sustituciones)
                {
                    if (sust.Abm != 0)
                    {
                        var rs = (from d in ctx.Sustitucions
                                  where d.SustitucionId == sust.SustitucionId && d.DispositivoOriginal.DispositivoId == sust.TDispositivoOriginal.DispositivoId
                                  select d).FirstOrDefault <Sustitucion>();
                        if (rs == null)
                        {
                            if (sust.TDispositivoSustituto != null)
                            {
                                pantalla.AppendLine(String.Format("IDSUS:{0} Disp. Original:{1}  Disp. Sustituto:{2} Fecha:{3:dd/MM/yyyy} Comentarios:{4}<br/>",
                                                                  sust.SustitucionId,
                                                                  sust.TDispositivoOriginal.Nombre,
                                                                  sust.TDispositivoSustituto.Nombre,
                                                                  sust.Fecha,
                                                                  sust.Comentarios));
                            }
                            else
                            {
                                // Si el sustituto es nulo el problema es que no se ha hecho la sustitución
                                pantalla.AppendLine(String.Format("IDSUS:{0} Disp. Original: {1} Fecha:{2:dd/MM/yyyy} Comentarios:{3} / Disp. ¿Sustitución no realizada?<br/>",
                                                                  sust.SustitucionId,
                                                                  sust.TDispositivoOriginal.Nombre,
                                                                  sust.Fecha,
                                                                  sust.Comentarios));
                            }
                        }
                    }
                }
            }

            //Revisiones
            IList <TRevision> revisiones = CntSciTerminal.GetTRevisiones(conn);

            pantalla.AppendLine("--- REVISIONES ------<br/>");
            if (revisiones != null)
            {
                TPrograma p    = null;
                int       p_id = 0;
                foreach (TRevision rev in revisiones)
                {
                    if (rev.Abm != 0)
                    {
                        if ((p = rev.TPrograma) != null)
                        {
                            p_id = p.ProgramaId;
                        }
                        else
                        {
                            p_id = 0;
                        }
                        pantalla.AppendLine(String.Format("IDREV:{0} Dispositivo:{1} Fecha:{2:dd/MM/yyyy} Programa: {3} ABM:{4} Estado:{5} Comentario:{6}<br/>",
                                                          rev.RevisionId,
                                                          rev.NDispositivo,
                                                          rev.FechaRevision,
                                                          p_id,
                                                          rev.Abm,
                                                          rev.Estado,
                                                          rev.Comentario));
                    }
                }
            }

            //Nuevos dispositivos
            IList <TDispositivo> dispositivos = CntSciTerminal.GetTNuevosDispositivos(conn);

            pantalla.Append("--- NUEVOS DISPOSITIVOS ------<br/>");
            if (dispositivos != null)
            {
                foreach (TDispositivo disp in dispositivos)
                {
                    pantalla.AppendLine(String.Format("ID:{0} Nombre:{1} Instalacion: {2} Tipo:{3} Modelo:{4} CodBarras:{5}<br/>",
                                                      disp.DispositivoId,
                                                      disp.Nombre,
                                                      disp.Instalacion.Nombre,
                                                      disp.Tipo.Nombre,
                                                      disp.Modelo.Nombre,
                                                      disp.CodBarras));
                }
            }

            if (conn.State != System.Data.ConnectionState.Closed)
            {
                conn.Close();
            }

            string msg = pantalla.ToString();

            msg         = msg.Replace("'", "");
            msg         = msg.Replace("<b>", "");
            msg         = msg.Replace("</b>", "");
            msg         = msg.Replace("<br/>", "\n");
            txtInf.Text = msg;

            //RadNotification2.Text = String.Format("<b>{0}</b><br/>{1}",
            //                                     (string)GetGlobalResourceObject("ResourceLainsaSci", "Warning"),
            //                                     pantalla.ToString());
            //RadNotification2.Show();

            // RadAjaxManager1.ResponseScripts.Add(String.Format("return radconfirm('¿Desea continuar con la importación?', confirmCallBackFn, 330, 100, null,'Importación', '');"));
            btnCargar.Visible   = false;
            btnImportOK.Visible = true;
        }
        private void GuardarRevisiones(SqlCeConnection conn)
        {
            IList <TRevision> revisiones = CntSciTerminal.GetTRevisiones(conn);

            foreach (TRevision rev in revisiones)
            {
                // no tiene sentido modificar revisiones que no se han tocado
                if (rev.Abm == 0)
                {
                    continue;
                }
                Revision revision = null;
                var      rs       = (from d in ctx.Revisions
                                     where d.RevisionId == rev.RevisionId
                                     select d).FirstOrDefault <Revision>();
                // si no corresponde a un programa la omitimos (no se como la han dado de alta)
                if (rev.TPrograma == null)
                {
                    continue;
                }
                if (rs == null)
                {
                    // por si ha habido cambios de ID debido a
                    // a generaciones, tenemos este control para a pesar de eso
                    // intentar encontrar la resiion
                    rs = (from r in ctx.Revisions
                          where r.Dispositivo.DispositivoId == rev.Dispositivo.DispositivoId &&
                          r.Programa.ProgramaId == rev.TPrograma.ProgramaId &&
                          r.PlantillaRevision.Descripcion == rev.Plantilla
                          select r).FirstOrDefault <Revision>();
                }
                if (rs == null)
                {
                    // un último intento con el mínimo de informacion
                    rs = (from r in ctx.Revisions
                          where r.Dispositivo.DispositivoId == rev.Dispositivo.DispositivoId &&
                          r.Programa.ProgramaId == rev.TPrograma.ProgramaId &&
                          r.Estado != "REALIZADA"
                          select r).FirstOrDefault <Revision>();
                }
                //siempre existirá la revisión ya que no se permite la creación de nuevas en TERMINAL
                if (rs != null)
                {
                    revision = rs;
                    if (rev.FechaRevision != null)
                    {
                        revision.FechaRevision = rev.FechaRevision;
                    }
                    revision.Resultado     = rev.Resultado;
                    revision.Observaciones = rev.Comentario;
                    if (rev.Usuario != null)
                    {
                        revision.Usuario = CntLainsaSci.GetUsuario(rev.Usuario.UsuarioId, ctx);
                    }
                    CargarDatosRevision(rev, conn);
                    revision.ResumenInforme = CntLainsaSci.GetResumenInforme(revision, ctx);
                    revision.Estado         = rev.Estado;
                    if (revision.Programa != null)
                    {
                        revision.Programa.Estado = CntLainsaSci.EstadoPrograma(revision.Programa);
                    }
                    if (rev.TTipoAnomalia != null)
                    {
                        revision.TipoAnomalia = CntLainsaSci.GetTipoAnomalia(rev.TTipoAnomalia.TipoAnomaliaId, ctx);
                    }
                    ctx.SaveChanges();
                    // ahora esta secuencia solo tiene sentido en el caso de periodicas
                    if (!revision.PlantillaRevision.NoPeriodica)
                    {
                        CntLainsaSci.EliminarInferiores(revision, ctx);
                        CntLainsaSci.ProgramarSiguienteRevision(revision, ctx, true);
                        CntLainsaSci.ProgramarInferiores(revision, ctx);
                    }
                }
            }
        }