示例#1
0
        /// <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));
        }
示例#2
0
        /// <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);
        }