示例#1
0
        public static void EliminarFueraDeIntervalo(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros)
        {
            MC_IntervaloMaestro intervaloMaestro = MC_IntervaloMaestroMgr.Instancia.GetIntervaloPorFecha(DateTime.Now.Date);
            DataTable           tabla            = MC_IntervaloDetalleMgr.Instancia.GetPorPkCodMaestro(intervaloMaestro.PkCodIntervaloMaestro);
            List <string>       horasIntervalos  = new List <string>();

            foreach (DataRow r in tabla.Rows)
            {
                horasIntervalos.Add((string)r[MC_IntervaloDetalle.C_HORA_INTERVALO]);
            }

            for (int i = 0; i < res.Registros.Count; i++)
            {
                RegistroLectura registro = res.Registros[i];
                if (!horasIntervalos.Contains(registro.Hora))
                {
                    res.Registros.RemoveAt(i);
                    foreach (DataRow r in registro.RowsItems)
                    {
                        res.Tabla.Rows.Remove(r);
                    }
                    i--;
                }
            }
        }
示例#2
0
        public RegistroLectura GetUltimoRegistroBD(long codPuntoMedicion)
        {
            RegistroLectura resultado = null;
            string          sql       =
                @"SELECT * FROM(SELECT d.*, i.hora_intervalo
            FROM f_mc_lectura_detalle d, p_mc_intervalo_detalle i
            WHERE d.pk_cod_lectura IN (SELECT l.pk_cod_lectura FROM f_mc_lectura l WHERE fk_cod_punto_medicion=:cod_punto_medicion)
            AND d.pk_cod_intervalo=i.pk_cod_intervalo            
            ORDER BY d.pk_fecha DESC)
            WHERE rownum<2";
            OracleCommand cmd = base.CrearCommand();

            cmd.CommandText = sql;
            cmd.BindByName  = true;
            cmd.Parameters.Add("cod_punto_medicion", OracleDbType.Int64, codPuntoMedicion, ParameterDirection.Input);
            DataTable tabla = base.EjecutarCmd(cmd);

            if (tabla.Rows.Count > 0)
            {
                resultado = new RegistroLectura
                {
                    Fecha = (DateTime)tabla.Rows[0]["PK_FECHA"],
                    Hora  = (string)tabla.Rows[0]["HORA_INTERVALO"]
                };
            }
            return(resultado);
        }
示例#3
0
 public static void EliminarMarcadosParaBorrar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros)
 {
     for (int i = 0; i < res.Registros.Count; i++)
     {
         RegistroLectura registro = res.Registros[i];
         if (registro.MarcadoParaBorrar)
         {
             res.Registros.RemoveAt(i);
             foreach (DataRow r in registro.RowsItems)
             {
                 res.Tabla.Rows.Remove(r);
             }
             i--;
         }
     }
 }
示例#4
0
        public static RegistroLectura GetRegistroLectura(DateTime fecha, TimeSpan hora, bool modificarFecha)
        {
            RegistroLectura reg = new RegistroLectura();

            reg.Fecha = fecha.Date.Add(hora);
            reg.Hora  = hora.ToString();
            if (hora.TotalDays == 0)
            {
                if (modificarFecha)
                {
                    reg.Fecha = reg.Fecha.AddDays(-1);
                }
                reg.Hora = "24:00";
            }
            return(reg);
        }
示例#5
0
        public List <RegistroLectura> GetRegistrosDesdeFecha(long codPuntoMedicion, DateTime fecha)
        {
            List <RegistroLectura> resultado = new List <RegistroLectura>();
            Dictionary <DateTime, Dictionary <long, RegistroLectura> > _dicRegistros = new Dictionary <DateTime, Dictionary <long, RegistroLectura> >();
            string sql =
                @"SELECT d.*, i.HORA_INTERVALO
            FROM f_mc_lectura_detalle d, P_MC_INTERVALO_DETALLE i
            WHERE d.pk_fecha>=:fecha
            AND d.fk_cod_punto_medicion     =:cod_punto_medicion
            AND d.pk_cod_intervalo=i.PK_COD_INTERVALO
            ORDER BY d.pk_fecha, d.pk_cod_intervalo";
            OracleCommand cmd = base.CrearCommand();

            cmd.CommandText = sql;
            cmd.BindByName  = true;
            cmd.Parameters.Add("fecha", OracleDbType.Date, fecha, ParameterDirection.Input);
            cmd.Parameters.Add("cod_punto_medicion", OracleDbType.Int64, codPuntoMedicion, ParameterDirection.Input);
            DataTable tabla = base.EjecutarCmd(cmd);

            foreach (DataRow r in tabla.Rows)
            {
                DateTime fechaLectura = (DateTime)r["PK_FECHA"];
                long     codIntervalo = (long)r["PK_COD_INTERVALO"];
                fechaLectura = fechaLectura.Date;
                if (!_dicRegistros.ContainsKey(fechaLectura))
                {
                    _dicRegistros[fechaLectura] = new Dictionary <long, RegistroLectura>();
                }
                if (!_dicRegistros[fechaLectura].ContainsKey(codIntervalo))
                {
                    _dicRegistros[fechaLectura][codIntervalo]       = new RegistroLectura();
                    _dicRegistros[fechaLectura][codIntervalo].Fecha = (DateTime)r["PK_FECHA"];
                    _dicRegistros[fechaLectura][codIntervalo].Hora  = (string)r["HORA_INTERVALO"];
                }
                _dicRegistros[fechaLectura][codIntervalo].AdicionarItem((long)r["PK_COD_MAGNITUD_ELEC"], new double?((double)r["VALOR"]));
            }
            foreach (Dictionary <long, RegistroLectura> item in _dicRegistros.Values)
            {
                foreach (RegistroLectura registro in item.Values)
                {
                    resultado.Add(registro);
                }
            }
            return(resultado);
        }
示例#6
0
        public bool Validar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros)
        {
            bool                resultado          = true;
            RegistroLectura     ultimoEnBD         = MC_LecturaMgr.Instancia.GetUltimoRegistroBD(resumen.PkCodPuntoMedicion);
            MC_IntervaloMaestro defIntervaloActual = MC_IntervaloMaestroMgr.Instancia.GetIntervaloPorFecha(DateTime.Now.Date);

            if (ultimoEnBD == null || ultimoEnBD.Fecha.AddMinutes(defIntervaloActual.PeriodoTiempo) == res.Registros[0].Fecha)
            {
                resumen[Nombre] = "OK";
            }
            else if (ultimoEnBD.Fecha.AddMinutes(defIntervaloActual.PeriodoTiempo) < res.Registros[0].Fecha)
            {//hay hueco
                resumen[Nombre] = "Faltan Registros";
                resultado       = false;
            }
            else
            {
                List <RegistroLectura> registrosAnteriores = MC_LecturaMgr.Instancia.GetRegistrosDesdeFecha(resumen.PkCodPuntoMedicion, res.Registros[0].Fecha.Date);
                MC_LecturaDetalle.EliminarDuplicados(resumen, res, parametros);
                MC_LecturaDetalle.EliminarFueraDeIntervalo(resumen, res, parametros);
                int i = 0, j = 0;
                for (; i < registrosAnteriores.Count && j < res.Registros.Count; i++)
                {
                    if (registrosAnteriores[i].Igual(res.Registros[j]))
                    {
                        res.Registros[j].MarcadoParaBorrar = true;
                    }
                    else
                    {
                        resumen[Nombre] = "Datos Inconsistentes";
                        resultado       = false;
                    }
                    j++;
                }
                if (resultado)
                {
                    resumen[Nombre] = "OK";
                }
            }
            return(resultado);
        }
示例#7
0
        public static void EliminarDuplicados(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros)
        {
            Dictionary <string, int> contadores = new Dictionary <string, int>();

            for (int i = 0; i < res.Registros.Count; i++)
            {
                RegistroLectura registro = res.Registros[i];
                string          llave    = registro.Fecha.Date.ToString("ddMMyy") + " " + registro.Hora;
                if (contadores.ContainsKey(llave))
                {
                    res.Registros.RemoveAt(i);
                    foreach (DataRow r in registro.RowsItems)
                    {
                        res.Tabla.Rows.Remove(r);
                    }
                    i--;
                }
                else
                {
                    contadores[llave] = 1;
                }
            }
        }
示例#8
0
        public bool Igual(RegistroLectura registroLectura)
        {
            bool resultado = true;

            if (registroLectura._items.Count == _items.Count)
            {
                var metodo = new Comparison <ItemRegistro>((x, y) => { return((int)(x.CodMagnitud - y.CodMagnitud)); });
                this._items.Sort(metodo);
                registroLectura._items.Sort(metodo);
                for (int i = 0; i < _items.Count; i++)
                {
                    if (_items[i].CodMagnitud != registroLectura._items[i].CodMagnitud || _items[i].Valor != registroLectura._items[i].Valor)
                    {
                        resultado = false;
                        break;
                    }
                }
            }
            else
            {
                resultado = false;
            }
            return(resultado);
        }