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--; } } }
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); }
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--; } } }
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); }
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); }
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); }
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; } } }
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); }