/// <summary> /// CalculaBalance. Función de uso interno en la clase para calcular el balance. Se ejecuta una única vez para añadir las líneas de balance. /// </summary> /// <param name="actualizaEtapas">The actualizaEtapas<see cref="bool"/>.</param> /// <param name="fechaFinalEstudio">.</param> private void CalculaBalance(bool actualizaEtapas, DateTime fechaFinalEstudio) { LineaBalance lbAnt = new LineaBalance(); DateTime fecha = unidadCultivoDatosHidricos.FechaSiembra(); //DateTime fechaFinalEstudio = unidadCultivoDatosHidricos.FechaFinalDeEstudio(); int diasDesdeSiembra = 1; if (unidadCultivoDatosHidricos.nEtapas <= 0) { throw new Exception("No se han definido etapas para la unidad de cultivo: " + unidadCultivoDatosHidricos.IdUnidadCultivo); } while (fecha <= fechaFinalEstudio) { LineaBalance lineaBalance = CalculosHidricos.CalculaLineaBalance(unidadCultivoDatosHidricos, lbAnt, fecha); lineaBalance.DiasDesdeSiembra = diasDesdeSiembra++; LineasBalance.Add(lineaBalance); lbAnt = lineaBalance; fecha = fecha.AddDays(1); if (lineaBalance.NumeroEtapaDesarrollo < unidadCultivoDatosHidricos.UnidadCultivoCultivoEtapasList.Count) { fechaFinalEstudio = fecha.AddDays(1); } else { int duracionEtapa = unidadCultivoDatosHidricos.UnidadCultivoCultivoEtapasList[unidadCultivoDatosHidricos.UnidadCultivoCultivoEtapasList.Count - 1].DuracionDiasEtapa; fechaFinalEstudio = unidadCultivoDatosHidricos.UnidadCultivoCultivoEtapasList[unidadCultivoDatosHidricos.UnidadCultivoCultivoEtapasList.Count - 1].FechaInicioEtapa.AddDays(duracionEtapa); } } if (actualizaEtapas) { DB.FechasEtapasSave(unidadCultivoDatosHidricos.UnidadCultivoCultivoEtapasList); } LineasBalance.RemoveAll(x => x.Fecha > DateTime.Today.AddDays(-1)); }
/// <summary> /// Retorna listado de datos hídricos filtrados por los parámetros indicados. /// Pasar '' como parametro en blanco si no se desea filtrar. /// </summary> /// <param name="idRegante">idCliente<see cref="int?"/>.</param> /// <param name="idUnidadCultivo">idUnidadCultivo<see cref="string"/>.</param> /// <param name="idMunicipio">idMunicipio<see cref="int?"/>.</param> /// <param name="idCultivo">idCultivo<see cref="string"/>.</param> /// <param name="fechaStr">fecha.</param> /// <param name="roleUsuario">.</param> /// <param name="idUsuario">.</param> /// <returns><see cref="object"/>.</returns> public static object DatosHidricosList(int?idRegante, string idUnidadCultivo, int?idMunicipio, string idCultivo, string fechaStr, string roleUsuario, int idUsuario) { List <DatosEstadoHidrico> ret = new List <DatosEstadoHidrico>(); List <string> lIdUnidadCultivo = null; idUnidadCultivo = idUnidadCultivo.Unquoted(); if (idUnidadCultivo != "") { lIdUnidadCultivo = new List <string> { idUnidadCultivo } } ; else { lIdUnidadCultivo = DB.ListaUnidadesCultivoQueCumplenFiltro(idMunicipio, idCultivo, idRegante); } if (!DateTime.TryParse(fechaStr, out DateTime dFecha)) { dFecha = DateTime.Now.Date; } // De todas las Unidades de Cultivo quitar las que el usuario no puede ver. List <string> lValidas = new List <string>(); if (roleUsuario == "admin") { lValidas = lIdUnidadCultivo; } else if (roleUsuario == "asesor") { List <string> lAsesorUCList = DB.AsesorUnidadCultivoList(idUsuario); lValidas = lIdUnidadCultivo.Intersect(lAsesorUCList).ToList(); } else // usuario { foreach (string uc in lIdUnidadCultivo) { string idTemporada = DB.TemporadaDeFecha(uc, dFecha); if (DB.LaUnidadDeCultivoPerteneceAlReganteEnLaTemporada(uc, idUsuario, idTemporada)) { lValidas.Add(uc); } } } DatosEstadoHidrico datosEstadoHidrico = null; UnidadCultivoDatosHidricos dh = null; BalanceHidrico bh = null; List <GeoLocParcela> lGeoLocParcelas = null; foreach (string idUc in lValidas) { try { lGeoLocParcelas = null; string idTemporada = DB.TemporadaDeFecha(idUc, dFecha); if (idTemporada != null) { lGeoLocParcelas = DB.GeoLocParcelasList(idUc, idTemporada); bh = BalanceHidrico.Balance(idUc, dFecha); datosEstadoHidrico = bh.DatosEstadoHidrico(dFecha); datosEstadoHidrico.GeoLocJson = Newtonsoft.Json.JsonConvert.SerializeObject(lGeoLocParcelas); ret.Add(datosEstadoHidrico); } } catch (Exception ex) { dh = bh.unidadCultivoDatosHidricos; dh.ObtenerMunicicioParaje(out string provincias, out string municipios, out string parajes); datosEstadoHidrico = new DatosEstadoHidrico { Fecha = dFecha, Pluviometria = dh.Pluviometria, TipoRiego = dh.TipoRiego, FechaSiembra = dh.FechaSiembra(), Cultivo = dh.CultivoNombre, Estacion = dh.EstacionNombre, IdEstacion = dh.IdEstacion, IdRegante = dh.IdRegante, IdUnidadCultivo = idUc, Municipios = municipios, Parajes = parajes, Regante = dh.ReganteNombre, Alias = dh.Alias, Eficiencia = dh.EficienciaRiego, IdCultivo = dh.IdCultivo, IdTemporada = dh.IdTemporada, IdTipoRiego = dh.IdTipoRiego, NIF = dh.ReganteNif, Telefono = dh.ReganteTelefono, TelefonoSMS = dh.ReganteTelefonoSMS, SuperficieM2 = dh.UnidadCultivoExtensionM2, NParcelas = dh.NParcelas, Textura = "", GeoLocJson = Newtonsoft.Json.JsonConvert.SerializeObject(lGeoLocParcelas), Status = "ERROR:" + ex.Message }; ret.Add(datosEstadoHidrico); } } return(ret); }