protected void btnAccept_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            if (!DataOk())
            {
                return;
            }
            if (newRecord)
            {
                revision = new Revision();
            }
            UnloadData(revision);
            CntLainsaSci.CTXGuardar(ctx);

            CntLainsaSci.EliminarInferiores(revision, ctx);
            CntLainsaSci.ProgramarSiguienteRevision(revision, ctx, true);
            CntLainsaSci.ProgramarInferiores(revision, ctx);

            if (newRecord)
            {
                RadAjaxManager1.ResponseScripts.Add(String.Format("closeWindowRefreshGrid('{0}', 'new');", caller));
            }
            else
            {
                RadAjaxManager1.ResponseScripts.Add(String.Format("closeWindowRefreshGrid('{0}', 'edit');", caller));
            }
        }
        catch (Exception ex)
        {
            ControlDeError(ex);
        }
    }
        //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);
                    }
                }
            }
        }
    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        string valor = e.Argument;
        string tipo  = valor.Substring(0, 1);

        valor = valor.Substring(1);
        switch (tipo)
        {
        case "A":
            DateTime fechaBaja;
            if (DateTime.TryParse(valor, out fechaBaja))
            {
                revision.Dispositivo.Caducado  = true;
                revision.Dispositivo.FechaBaja = fechaBaja;
                ctx.SaveChanges();
                CntLainsaSci.EliminarRevisionesPendientes(revision.Dispositivo, ctx, revision);
                string mensaje = String.Format("El dispositivo ha sido dado de baja con fecha {0:dd/MM/yyyy}", fechaBaja);
                RadWindowManager1.RadAlert(mensaje, 330, 110, "DADO DE BAJA", "retornoAlert");
                RadAjaxManager1.ResponseScripts.Add(String.Format("closeWindowRefreshGrid('{0}', 'edit');", caller));
                //string jCommand = String.Format("radalert('{0}');", mensaje);
                //RadAjaxManager1.ResponseScripts.Add(jCommand);
            }
            else
            {
                string mensaje = (string)GetGlobalResourceObject("ResourceLainsaSci", "DateNeeded");
                mensaje = "La fecha introducida es incorrecta";
                RadWindowManager1.RadAlert(mensaje, 330, 110, "AVISO", "retornoAlert");
                //string jCommand = String.Format("radalert('{0}');", mensaje);
                //RadAjaxManager1.ResponseScripts.Add(jCommand);
            }
            break;

        case "B":
            if (valor == "true")
            {
                // quiere descambiar
                Sustitucion s  = revision.Sustitucions[0];    // solo tiene que estar el cambio inicial
                Sustitucion ns = new Sustitucion()
                {
                    DispositivoOriginal  = s.DispositivoSustituto,
                    DispositivoSustituto = s.DispositivoOriginal,
                    Fecha    = DateTime.Now,
                    Revision = revision
                };
                ns.Estado = "REALIZADA";     // si llega aquí es realizada fijo.
                // control de estados
                Dispositivo dspo = ns.DispositivoOriginal;
                Dispositivo dsps = ns.DispositivoSustituto;
                dspo.Estado = "A";
                if (dsps.Funcion == "R")
                {
                    dsps.Estado = "S";
                }
                else
                {
                    dsps.Estado = "N";
                }
                dsps.Posicion = dsps.Posicion;
                dspo.Posicion = "SUSTITUIDOS";
                ctx.Add(ns);
            }
            else
            {
                Sustitucion s = revision.Sustitucions[0];     // solo tiene que estar el cambio inicial
                s.DispositivoOriginal.Funcion = "R";
            }
            // Como si hubiera pulsado el botón.
            UnloadData(revision);
            CntLainsaSci.CTXGuardar(ctx);

            CntLainsaSci.EliminarInferiores(revision, ctx);
            CntLainsaSci.ProgramarSiguienteRevision(revision, ctx, true);
            CntLainsaSci.ProgramarInferiores(revision, ctx);
            RadAjaxManager1.ResponseScripts.Add(String.Format("closeWindowRefreshGrid('{0}', 'edit');", caller));
            break;
        }
    }
        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);
                    }
                }
            }
        }