Пример #1
0
        /// <summary>
        /// Asigna a los componentes del form la información de la vaca seleccionada.
        /// </summary>
        private void LlenarInformcionVaca()
        {
            textBoxNumeroTrazableVaca.Text = this.informacionVacaSeleccionada.pkNumeroTrazable.ToString();
            textBoxNombre.Text             = this.informacionVacaSeleccionada.nombre;
            textBoxCaracteristicas.Text    = this.informacionVacaSeleccionada.caracteriscas;
            textBoxFechaNacimiento.Text    = this.informacionVacaSeleccionada.fecha.ToString();
            textBoxModoPrennes.Text        = this.informacionVacaSeleccionada.modoPrennes;
            textBoxIdMadre.Text            = this.informacionVacaSeleccionada.fkNumeroTrazableMadre.ToString();
            textBoxIdPadre.Text            = this.informacionVacaSeleccionada.fkNumeroTrazablePadre.ToString();
            textBoxRaza.Text = this.informacionVacaSeleccionada.razaStr;
            int edad = -1;

            if (this.informacionVacaSeleccionada.fecha != null)
            {
                edad = DateTime.Today.Year - ((DateTime)this.informacionVacaSeleccionada.fecha).Year;
                if (((DateTime)this.informacionVacaSeleccionada.fecha).Date > DateTime.Today.AddYears(-edad))
                {
                    edad--;
                }
            }
            textBoxEdad.Text       = edad.ToString();
            textBoxPeso.Text       = this.informacionVacaSeleccionada.peso.ToString();
            textBoxDesarrollo.Text = this.informacionVacaSeleccionada.desarrollo;
            if (this.informacionVacaSeleccionada.activa)
            {
                checkBoxActiva.Checked     = true;
                textBoxCausaDeBaja.Visible = false;
                labelCausaDeBaja.Visible   = false;
            }
            else
            {
                checkBoxActiva.Checked     = false;
                textBoxCausaDeBaja.Visible = true;
                textBoxCausaDeBaja.Text    = this.informacionVacaSeleccionada.causaDeBaja;
            }
            // Se calculan los parametros reproductivos de la vaca.
            ProgramConfiguration config = new ProgramConfiguration();
            string unidadDeTiempo       = config.ObtenerConfig(ProgramConfiguration.LLAVE_UNIDAD_DE_TIEMPO);

            try
            {
                double resultado = ProcedimientosAlmacenados.ProcObtenerUltimoIEP(this.informacionVacaSeleccionada.pkNumeroTrazable);
                if ((int)resultado == Utilities.RESULTADO_ERROR)
                {
                    textBoxUltimoIEP.Text = "Error";
                }
                else
                {
                    switch (unidadDeTiempo)
                    {
                    case "Meses":
                        labelIEPUltimo.Text   = "Ultimo IEP (meses)";
                        textBoxUltimoIEP.Text = (resultado / Utilities.DIAS_MES).ToString("0.##");
                        break;

                    case "Semanas":
                        labelIEPUltimo.Text   = "Ultimo IEP (semanas)";
                        textBoxUltimoIEP.Text = (resultado / Utilities.DIAS_SEMANA).ToString("0.##");
                        break;

                    default:
                        labelIEPUltimo.Text   = "Ultimo IEP (días)";
                        textBoxUltimoIEP.Text = resultado.ToString("0.##");
                        break;
                    }
                }
            }
            catch
            {
                textBoxUltimoIEP.Text = "Error";
            }
            try
            {
                double resultado = ProcedimientosAlmacenados.ProcObtenerIEP(this.informacionVacaSeleccionada.pkNumeroTrazable);
                if ((int)resultado == Utilities.RESULTADO_ERROR)
                {
                    textBoxIEPPromedio.Text = "Error";
                }
                else
                {
                    switch (unidadDeTiempo)
                    {
                    case "Meses":
                        labelIEPPromedio.Text   = "IEP promedio (meses)";
                        textBoxIEPPromedio.Text = (resultado / Utilities.DIAS_MES).ToString("0.##");
                        break;

                    case "Semanas":
                        labelIEPPromedio.Text   = "Ultimo promedio (semanas)";
                        textBoxIEPPromedio.Text = (resultado / Utilities.DIAS_SEMANA).ToString("0.##");
                        break;

                    default:
                        labelIEPPromedio.Text   = "Ultimo promedio (días)";
                        textBoxIEPPromedio.Text = resultado.ToString();
                        break;
                    }
                }
            }
            catch
            {
                textBoxIEPPromedio.Text = "Error";
            }
            // Se calcula una fecha de parto tentativa.
            Object resultadoQuery = Utilities.ObtenerAtributoTabla(QUERY_SELECT_FECHA_ULTIMO_CELO_VACA, VACA_PARAM, this.informacionVacaSeleccionada.pkNumeroTrazable);

            if (this.informacionVacaSeleccionada.modoPrennes != "No preñada")
            {
                if (resultadoQuery.GetType().ToString() != "System.DBNull")
                {
                    labelFechaTentativaParto.Visible = textBoxFechaTentativaParto.Visible = true;
                    labelFechaTentativaParto.Text    = "Fecha tentativa de parto";
                    if (resultadoQuery.GetType().ToString() != "System.DateTime")
                    {
                        textBoxFechaTentativaParto.Text = "Error";
                    }
                    else
                    {
                        try
                        {
                            DateTime fechaUltimoCeloVaca = (DateTime)resultadoQuery;
                            DateTime fechaTentativaParto = fechaUltimoCeloVaca.AddMonths(Utilities.TIEMPO_GESTACION_VACA_MESES);
                            textBoxFechaTentativaParto.Text = fechaTentativaParto.ToShortDateString();
                        }
                        catch
                        {
                            textBoxFechaTentativaParto.Text = "Error";
                        }
                    }
                }
                else
                {
                    labelFechaTentativaParto.Visible = textBoxFechaTentativaParto.Visible = false;
                }
            }
            else
            {
                if (resultadoQuery.GetType().ToString() != "System.DBNull")
                {
                    labelFechaTentativaParto.Visible = textBoxFechaTentativaParto.Visible = true;
                    labelFechaTentativaParto.Text    = "Fecha de palpación";
                    if (resultadoQuery.GetType().ToString() != "System.DateTime")
                    {
                        textBoxFechaTentativaParto.Text = "Error";
                    }
                    else
                    {
                        try
                        {
                            DateTime fechaUltimoCeloVaca = (DateTime)resultadoQuery;
                            DateTime fechaTentativaParto = fechaUltimoCeloVaca.AddDays(Int32.Parse(config.ObtenerConfig(ProgramConfiguration.LLAVE_ALERTA_PALPACION)));
                            textBoxFechaTentativaParto.Text = fechaTentativaParto.ToShortDateString();
                        }
                        catch
                        {
                            textBoxFechaTentativaParto.Text = "Error";
                        }
                    }
                }
                else
                {
                    labelFechaTentativaParto.Visible = textBoxFechaTentativaParto.Visible = false;
                }
            }
        }
Пример #2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="informacionVacaSeleccionada">VacaModel con la información de la vaca a mostrar</param>
 public FormDetallesVaca(VacaModel informacionVacaSeleccionada = null)
 {
     InitializeComponent();
     this.informacionVacaSeleccionada = informacionVacaSeleccionada;
     config = new ProgramConfiguration();
 }
Пример #3
0
        /// <summary>
        /// Método para obtener de la BD todos los datos a utilzar en el resumen y actualizar los valores del form
        /// </summary>
        private void CargarDatosResumen()
        {
            //Se obtiene la configuración actual de la aplicación
            ProgramConfiguration config = new ProgramConfiguration();
            string unidadDeTiempo       = config.ObtenerConfig(ProgramConfiguration.LLAVE_UNIDAD_DE_TIEMPO);

            //Se obtienen los datos a cargar
            datosResumen.fechaActual = DateTime.Now.ToShortDateString();

            //Si el resumen es por fechas se obtienen las fechas seleccionadas
            if (datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_POR_FECHAS)
            {
                datosResumen.fechaInicioResumen = dateTimePickerInicio.Value;
                datosResumen.fechaFinalResumen  = dateTimePickerFinal.Value;
            }
            try
            {
                datosResumen.hembrasConsideradas = Utilities.EjecutarConsultaCount((datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_GENERAL) ? CONSULTA_HEMBRAS_CONSIDERADAS : CONSULTA_HEMBRAS_CONSIDERADAS_FECHAS.Replace(PARAM_FECHA_INICIO, datosResumen.fechaInicioResumen.ToString("yyyy-MM-dd")).Replace(PARAM_FECHA_FIN, datosResumen.fechaFinalResumen.ToString("yyyy-MM-dd")));
            }
            catch
            {
                datosResumen.hembrasConsideradas = Utilities.RESULTADO_ERROR;
            }
            try
            {
                datosResumen.hembrasParido = Utilities.EjecutarConsultaCount((datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_GENERAL) ? CONSULTA_HEMBRAS_PARIDO : CONSULTA_HEMBRAS_PARIDO_FECHAS.Replace(PARAM_FECHA_INICIO, datosResumen.fechaInicioResumen.ToString("yyyy-MM-dd")).Replace(PARAM_FECHA_FIN, datosResumen.fechaFinalResumen.ToString("yyyy-MM-dd")));
            }
            catch
            {
                datosResumen.hembrasParido = Utilities.RESULTADO_ERROR;
            }
            try
            {
                double IEPHistorico = (datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_GENERAL) ? ProcedimientosAlmacenados.ProcObtenerIEPHistorico() : ProcedimientosAlmacenados.ProcObtenerIEPHistoricoPeriodo(datosResumen.fechaInicioResumen, datosResumen.fechaFinalResumen);
                if (IEPHistorico != Utilities.RESULTADO_ERROR)
                {
                    switch (unidadDeTiempo)
                    {
                    case "Meses":
                        labelIEPPromHistoricoMeses.Text    = "IEP Prom.Histórico (meses)";
                        datosResumen.iepPromHistoricoMeses = IEPHistorico / Utilities.DIAS_MES;
                        break;

                    case "Semanas":
                        labelIEPPromHistoricoMeses.Text    = "IEP Prom.Histórico (semanas)";
                        datosResumen.iepPromHistoricoMeses = IEPHistorico / Utilities.DIAS_SEMANA;
                        break;

                    default:
                        labelIEPPromHistoricoMeses.Text    = "IEP Prom.Histórico (días)";
                        datosResumen.iepPromHistoricoMeses = IEPHistorico;
                        break;
                    }
                }
                else
                {
                    datosResumen.iepPromHistoricoMeses = Utilities.RESULTADO_ERROR;
                }
            }
            catch
            {
                datosResumen.iepPromHistoricoMeses = Utilities.RESULTADO_ERROR;
            }
            try
            {
                int resultadoPartos = Utilities.EjecutarConsultaCount((datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_GENERAL) ? CONSULTA_PARTOS : CONSULTA_PARTOS_FECHAS.Replace(PARAM_FECHA_INICIO, datosResumen.fechaInicioResumen.ToString("yyyy-MM-dd")).Replace(PARAM_FECHA_FIN, datosResumen.fechaFinalResumen.ToString("yyyy-MM-dd")));
                if (resultadoPartos != Utilities.RESULTADO_ERROR && datosResumen.hembrasConsideradas != Utilities.RESULTADO_ERROR)
                {
                    if (datosResumen.hembrasConsideradas != 0)
                    {
                        datosResumen.promPartosHato = Math.Round((double)resultadoPartos / (double)datosResumen.hembrasConsideradas, 2);
                    }
                    else
                    {
                        datosResumen.promPartosHato = 0;
                    }
                }
                else
                {
                    datosResumen.promPartosHato = Utilities.RESULTADO_ERROR;
                }
            }
            catch
            {
                datosResumen.promPartosHato = Utilities.RESULTADO_ERROR;
            }
            try
            {
                double ultimoIEPHistorico = (datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_GENERAL) ? ProcedimientosAlmacenados.ProcObtenerUltimoIEPHistorico() : ProcedimientosAlmacenados.ProcObtenerUltimoIEPHistoricoPeriodo(datosResumen.fechaInicioResumen, datosResumen.fechaFinalResumen);
                if (ultimoIEPHistorico != Utilities.RESULTADO_ERROR)
                {
                    switch (unidadDeTiempo)
                    {
                    case "Meses":
                        labelUltimoIEPVacaMeses.Text    = "Último IEP cada vaca (meses)";
                        datosResumen.ultimoIEPVacaMeses = ultimoIEPHistorico / Utilities.DIAS_MES;
                        break;

                    case "Semanas":
                        labelUltimoIEPVacaMeses.Text    = "Último IEP cada vaca (semanas)";
                        datosResumen.ultimoIEPVacaMeses = ultimoIEPHistorico / Utilities.DIAS_SEMANA;
                        break;

                    default:
                        labelUltimoIEPVacaMeses.Text    = "Último IEP cada vaca (días)";
                        datosResumen.ultimoIEPVacaMeses = ultimoIEPHistorico;
                        break;
                    }
                }
                else
                {
                    datosResumen.ultimoIEPVacaMeses = Utilities.RESULTADO_ERROR;
                }
            }
            catch
            {
                datosResumen.ultimoIEPVacaMeses = Utilities.RESULTADO_ERROR;
            }
            if (datosResumen.hembrasParido != Utilities.RESULTADO_ERROR && datosResumen.hembrasConsideradas != Utilities.RESULTADO_ERROR && datosResumen.hembrasConsideradas != 0)
            {
                datosResumen.porcParicionHistorico = Math.Round(((double)datosResumen.hembrasParido / (double)datosResumen.hembrasConsideradas) * 100, 2);
            }
            //Último % de parición
            if (datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_POR_FECHAS)
            {
                try
                {
                    //Se obtiene la cantidad de hembras servidas
                    int resultadoHembrasServidas           = Utilities.EjecutarConsultaCount(CONSULTA_HEMBRAS_SERVIDAS.Replace(PARAM_FECHA_INICIO, datosResumen.fechaInicioResumen.ToString("yyyy-MM-dd")).Replace(PARAM_FECHA_FIN, datosResumen.fechaFinalResumen.ToString("yyyy-MM-dd")));
                    int resultadoHembrasParidoConPalpacion = Utilities.EjecutarConsultaCount(CONSULTA_HEMBRAS_PARIDO_FECHAS_CON_PALPACION.Replace(PARAM_FECHA_INICIO, datosResumen.fechaInicioResumen.ToString("yyyy-MM-dd")).Replace(PARAM_FECHA_FIN, datosResumen.fechaFinalResumen.ToString("yyyy-MM-dd")));
                    if (resultadoHembrasParidoConPalpacion != Utilities.RESULTADO_ERROR && resultadoHembrasServidas != Utilities.RESULTADO_ERROR)
                    {
                        if (resultadoHembrasServidas != 0)
                        {
                            datosResumen.ultimoPorcParicion = Math.Round(((double)resultadoHembrasParidoConPalpacion / (double)resultadoHembrasServidas) * 100, 2);
                        }
                        else
                        {
                            datosResumen.ultimoPorcParicion = 0;
                        }
                    }
                    else
                    {
                        datosResumen.ultimoPorcParicion = Utilities.RESULTADO_ERROR;
                    }
                }
                catch
                {
                    datosResumen.ultimoPorcParicion = Utilities.RESULTADO_ERROR;
                }
            }
        }
Пример #4
0
 /// <summary>
 /// Constructor
 /// </summary>
 public FormConfiguracion()
 {
     InitializeComponent();
     config = new ProgramConfiguration();
 }
Пример #5
0
        /// <summary>
        /// Método para generar el documento excel del resumen
        /// </summary>
        /// <param name="datosResumen">Los datos a utilizar para el resumen general</param>
        public static void CrearDocumentoResumenExcel(DatosGeneralesResumen datosResumen, List <VacaModel> listaVacas, double promedioIEPHato, List <DatosVacaGraficos> listaDatosVacas)
        {
            //Se crea una instancia del paquete de excel del documento a utilizar
            ExcelPackage documentoExcel = new ExcelPackage();

            //Se crea la hoja que se va a generar
            ExcelWorksheet hojaResumen = documentoExcel.Workbook.Worksheets.Add(TITULO_RESUMEN);

            //Se establece el primer rango de celdas a utilizar para la información general, con sus colores
            ExcelRange celdasInformacionGeneral = hojaResumen.Cells[1, 1, 8, 4];

            celdasInformacionGeneral.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
            celdasInformacionGeneral.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(204, 255, 204));
            celdasInformacionGeneral[1, 4, 8, 4].Style.Font.Color.SetColor(Color.Red);

            //Se completan las celdas con sus valores respectivos

            //Se obtiene la configuración actual de la aplicación
            ProgramConfiguration config = new ProgramConfiguration();
            string unidadDeTiempo       = config.ObtenerConfig(ProgramConfiguration.LLAVE_UNIDAD_DE_TIEMPO);

            switch (unidadDeTiempo)
            {
            case "Meses":
                celdasInformacionGeneral[6, 1].Value = "Último IEP cada vaca (meses)";
                celdasInformacionGeneral[4, 1].Value = "IEP Prom. Histórico (meses)";
                break;

            case "Semanas":
                celdasInformacionGeneral[6, 1].Value = "Último IEP cada vaca (semanas)";
                celdasInformacionGeneral[4, 1].Value = "IEP Prom. Histórico (semanas)";
                break;

            default:
                celdasInformacionGeneral[6, 1].Value = "Último IEP cada vaca (días)";
                celdasInformacionGeneral[4, 1].Value = "IEP Prom. Histórico (días)";
                break;
            }

            switch (datosResumen.tipoResumen)
            {
            case LLAVE_TIPO_RESUMEN_POR_FECHAS:
                celdasInformacionGeneral[1, 1].Value = "Periodo";
                celdasInformacionGeneral[1, 2].Style.Font.Color.SetColor(Color.Red);
                celdasInformacionGeneral[1, 2].Value = "Desde " + datosResumen.fechaInicioResumen.ToShortDateString() + " hasta " + datosResumen.fechaFinalResumen.ToShortDateString();
                break;

            default:
                celdasInformacionGeneral[1, 1].Value = "Fecha referencia";
                celdasInformacionGeneral[1, 4].Value = datosResumen.fechaActual;
                break;
            }
            celdasInformacionGeneral[2, 1].Value = "Número hembras consideradas";
            celdasInformacionGeneral[2, 4].Value = datosResumen.hembrasConsideradas;
            celdasInformacionGeneral[3, 1].Value = "Hembras que han parido";
            celdasInformacionGeneral[3, 4].Value = datosResumen.hembrasParido;
            celdasInformacionGeneral[4, 4].Value = datosResumen.iepPromHistoricoMeses;
            celdasInformacionGeneral[5, 1].Value = "% parición histórico";
            celdasInformacionGeneral[5, 4].Value = datosResumen.porcParicionHistorico;
            celdasInformacionGeneral[6, 4].Value = datosResumen.ultimoIEPVacaMeses;
            celdasInformacionGeneral[7, 1].Value = "Promedio partos hato";
            celdasInformacionGeneral[7, 4].Value = datosResumen.promPartosHato;
            if (datosResumen.tipoResumen == LLAVE_TIPO_RESUMEN_POR_FECHAS)
            {
                celdasInformacionGeneral[8, 1].Value = "Último % parición ";
                celdasInformacionGeneral[8, 4].Value = datosResumen.ultimoPorcParicion;
            }


            //Generación de la lista de las vacas con su respectiva información

            //Se establece el segundo rango de celdas a utilizar para la lista de vacas
            ExcelRange celdasListaVacas = hojaResumen.Cells[9, 1, 9 + listaVacas.Count, 12];

            //Estilos
            celdasListaVacas.Style.Fill.PatternType      = OfficeOpenXml.Style.ExcelFillStyle.Solid;
            celdasListaVacas[9, 1, 9, 12].Style.WrapText = true;
            celdasListaVacas.Style.VerticalAlignment     = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
            celdasListaVacas.Style.HorizontalAlignment   = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
            celdasListaVacas[9, 1, 9, 12].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(182, 221, 232));
            celdasListaVacas[9, 1, 9, 12].Style.Font.Bold           = true;
            celdasListaVacas[9, 1, 9, 12].Style.Border.Left.Style   = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            celdasListaVacas[9, 1, 9, 12].Style.Border.Right.Style  = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            celdasListaVacas[9, 1, 9, 12].Style.Border.Top.Style    = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
            celdasListaVacas[9, 1, 9, 12].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;

            //Titulos
            switch (unidadDeTiempo)
            {
            case "Meses":
                celdasListaVacas[9, 8].Value = "IEP promedio /cada/vaca (meses)";
                celdasListaVacas[9, 9].Value = "Último IEP cada vaca (meses)";
                break;

            case "Semanas":
                celdasListaVacas[9, 8].Value = "IEP promedio /cada/vaca (semanas)";
                celdasListaVacas[9, 9].Value = "Último IEP cada vaca (semanas)";
                break;

            default:
                celdasListaVacas[9, 8].Value = "IEP promedio /cada/vaca (días)";
                celdasListaVacas[9, 9].Value = "Último IEP cada vaca (días)";
                break;
            }

            celdasListaVacas[9, 1].Value  = "Número de orden";
            celdasListaVacas[9, 2].Value  = "Número de la vaca";
            celdasListaVacas[9, 3].Value  = "Número trazable de la vaca";
            celdasListaVacas[9, 4].Value  = "Edad a 1er parto, meses";
            celdasListaVacas[9, 5].Value  = "Nº partos";
            celdasListaVacas[9, 6].Value  = "Edad de la última cría, meses";
            celdasListaVacas[9, 7].Value  = "Fecha destete a 7 meses, última cría";
            celdasListaVacas[9, 10].Value = "Fecha de última monta o IA";
            celdasListaVacas[9, 11].Value = "Gestación días";
            celdasListaVacas[9, 12].Value = "Fecha parto";

            //Se agregan las filas con la información de las vacas
            if (listaVacas.Count > 0)
            {
                celdasListaVacas[10, 1, 9 + listaVacas.Count, 12].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(216, 216, 216));
                celdasListaVacas[10, 1, 9 + listaVacas.Count, 12].Style.VerticalAlignment   = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
                celdasListaVacas[10, 1, 9 + listaVacas.Count, 12].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
                for (int iterador = 0; iterador < listaVacas.Count; iterador++)
                {
                    celdasListaVacas[10 + iterador, 1].Value = iterador + 1;
                    celdasListaVacas[10 + iterador, 2].Value = listaVacas[iterador].nombre;
                    celdasListaVacas[10 + iterador, 3].Value = listaVacas[iterador].pkNumeroTrazable;
                    celdasListaVacas[10 + iterador, 4].Value = listaVacas[iterador].edadAPrimerPartoMeses;
                    celdasListaVacas[10 + iterador, 5].Value = listaVacas[iterador].numeroDePartos;
                    celdasListaVacas[10 + iterador, 6].Value = listaVacas[iterador].edadUltimaCria;
                    celdasListaVacas[10 + iterador, 7].Value = listaVacas[iterador].fechaDesteteUltimaCria;
                    switch (unidadDeTiempo)
                    {
                    case "Meses":
                        celdasListaVacas[10 + iterador, 8].Value = Math.Round(listaVacas[iterador].iepPromedioDias / Utilities.DIAS_MES, 2);
                        celdasListaVacas[10 + iterador, 9].Value = Math.Round(listaVacas[iterador].ultimoIEPDias / Utilities.DIAS_MES, 2);
                        break;

                    case "Semanas":
                        celdasListaVacas[10 + iterador, 8].Value = Math.Round(listaVacas[iterador].iepPromedioDias / Utilities.DIAS_SEMANA, 2);
                        celdasListaVacas[10 + iterador, 9].Value = Math.Round(listaVacas[iterador].ultimoIEPDias / Utilities.DIAS_SEMANA, 2);
                        break;

                    default:
                        celdasListaVacas[10 + iterador, 8].Value = Math.Round(listaVacas[iterador].iepPromedioDias, 2);
                        celdasListaVacas[10 + iterador, 9].Value = Math.Round(listaVacas[iterador].ultimoIEPDias, 2);
                        break;
                    }
                    celdasListaVacas[10 + iterador, 10].Value = listaVacas[iterador].fechaUltimaMonta;
                    celdasListaVacas[10 + iterador, 11].Value = listaVacas[iterador].gestacionDias;
                    celdasListaVacas[10 + iterador, 12].Value = listaVacas[iterador].fechaParto;
                }
            }

            //-------------------------------Worksheet Gráfico-----------------------------

            //Aqui se crea el worksheet
            ExcelWorksheet grafico = documentoExcel.Workbook.Worksheets.Add("Gráficos");

            if (listaDatosVacas.Count > 0)
            {
                ExcelRange celdasListaVacasGraficos = grafico.Cells[1, 1, 1 + listaDatosVacas.Count, 6];

                //Se definen estilos
                celdasListaVacasGraficos.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                celdasListaVacasGraficos.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(255, 255, 255));
                celdasListaVacasGraficos[1, 1, 1, 6].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(211, 211, 211));
                celdasListaVacasGraficos[1, 1, 1, 6].Style.WrapText            = true;
                celdasListaVacasGraficos[1, 1, 1, 6].Style.Font.Bold           = true;
                celdasListaVacasGraficos[1, 1, 1, 6].Style.Border.Left.Style   = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
                celdasListaVacasGraficos[1, 1, 1, 6].Style.Border.Right.Style  = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
                celdasListaVacasGraficos[1, 1, 1, 6].Style.Border.Top.Style    = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
                celdasListaVacasGraficos[1, 1, 1, 6].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;


                //Se le da un valor a los encabezados
                celdasListaVacasGraficos[1, 1].Value = "Orden";
                celdasListaVacasGraficos[1, 2].Value = "Núm vaca";
                celdasListaVacasGraficos[1, 4].Value = "Partos/vaca";

                switch (unidadDeTiempo)
                {
                case "Meses":
                    celdasListaVacasGraficos[1, 3].Value = "Prom hato (meses)";
                    celdasListaVacasGraficos[1, 5].Value = "Prom/vaca (meses)";
                    celdasListaVacasGraficos[1, 6].Value = "Últ/vaca (meses)";
                    break;

                case "Semanas":
                    celdasListaVacasGraficos[1, 3].Value = "Prom hato (semanas)";
                    celdasListaVacasGraficos[1, 5].Value = "Prom/vaca (semanas)";
                    celdasListaVacasGraficos[1, 6].Value = "Últ/vaca (semanas)";
                    break;

                default:
                    celdasListaVacasGraficos[1, 3].Value = "Prom hato (días)";
                    celdasListaVacasGraficos[1, 5].Value = "Prom/vaca (días)";
                    celdasListaVacasGraficos[1, 6].Value = "Últ/vaca (días)";
                    break;
                }

                //Mas estilos
                celdasListaVacasGraficos.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                celdasListaVacasGraficos[2, 1, 1 + listaDatosVacas.Count, 1].Style.WrapText = true;
                celdasListaVacasGraficos.Style.VerticalAlignment   = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
                celdasListaVacasGraficos.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
                celdasListaVacasGraficos[2, 1, 1 + listaDatosVacas.Count, 1].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(182, 221, 232));
                celdasListaVacasGraficos[2, 1, 1 + listaDatosVacas.Count, 1].Style.Font.Bold           = true;
                celdasListaVacasGraficos[2, 1, 1 + listaDatosVacas.Count, 1].Style.Border.Left.Style   = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
                celdasListaVacasGraficos[2, 1, 1 + listaDatosVacas.Count, 1].Style.Border.Right.Style  = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
                celdasListaVacasGraficos[2, 1, 1 + listaDatosVacas.Count, 1].Style.Border.Top.Style    = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
                celdasListaVacasGraficos[2, 1, 1 + listaDatosVacas.Count, 1].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;

                //Se recorre la lista de vacas y se carga el worksheet
                for (int iterador = 0; iterador < listaDatosVacas.Count; iterador++)
                {
                    celdasListaVacasGraficos[2 + iterador, 1].Value = iterador + 1;
                    celdasListaVacasGraficos[2 + iterador, 2].Value = listaDatosVacas[iterador].pkNumeroTrazableVaca.ToString();
                    celdasListaVacasGraficos[2 + iterador, 4].Value = listaDatosVacas[iterador].partosVaca;
                    celdasListaVacasGraficos[2 + iterador, 5].Value = listaDatosVacas[iterador].iepPromedioVacaDias;
                    switch (unidadDeTiempo)
                    {
                    case "Meses":
                        celdasListaVacasGraficos[2 + iterador, 3].Value = Math.Round(promedioIEPHato / Utilities.DIAS_MES, 2);
                        celdasListaVacasGraficos[2 + iterador, 5].Value = Math.Round(listaDatosVacas[iterador].iepPromedioVacaDias / Utilities.DIAS_MES, 2);
                        celdasListaVacasGraficos[2 + iterador, 6].Value = Math.Round(listaDatosVacas[iterador].ultimoIEPVacaDias / Utilities.DIAS_MES, 2);
                        break;

                    case "Semanas":
                        celdasListaVacasGraficos[2 + iterador, 3].Value = Math.Round(promedioIEPHato / Utilities.DIAS_SEMANA, 2);
                        celdasListaVacasGraficos[2 + iterador, 5].Value = Math.Round(listaDatosVacas[iterador].iepPromedioVacaDias / Utilities.DIAS_SEMANA, 2);
                        celdasListaVacasGraficos[2 + iterador, 6].Value = Math.Round(listaDatosVacas[iterador].ultimoIEPVacaDias / Utilities.DIAS_SEMANA, 2);
                        break;

                    default:
                        celdasListaVacasGraficos[2 + iterador, 3].Value = Math.Round(promedioIEPHato, 2);
                        celdasListaVacasGraficos[2 + iterador, 5].Value = Math.Round(listaDatosVacas[iterador].iepPromedioVacaDias, 2);
                        celdasListaVacasGraficos[2 + iterador, 6].Value = Math.Round(listaDatosVacas[iterador].ultimoIEPVacaDias, 2);
                        break;
                    }
                }
            }


            //Se crea el gráfico
            var chartVacas = grafico.Drawings.AddChart("chart", OfficeOpenXml.Drawing.Chart.eChartType.ColumnClustered3D);

            //Valores maximos y minimos para los ejes "x" y "y"
            chartVacas.YAxis.MinValue = 0;
            chartVacas.XAxis.MaxValue = listaDatosVacas.Count;

            //Se declaran las series que se utilizarán para poblar el gráfico
            var serieHato = chartVacas.Series.Add("C2: C" + listaDatosVacas.Count + 1, "B2: B" + listaDatosVacas.Count + 1);

            serieHato.Header = "Promedio Hato";

            var ult = chartVacas.Series.Add("D2: D" + listaDatosVacas.Count + 1, "B2: B" + listaDatosVacas.Count + 1);

            ult.Header = "Partos/vaca";

            var prom = chartVacas.Series.Add("E2: E" + listaDatosVacas.Count + 1, "B2: B" + listaDatosVacas.Count + 1);

            prom.Header = "Prom c/vaca";

            var partos = chartVacas.Series.Add("F2: F" + listaDatosVacas.Count + 1, "B2: B" + listaDatosVacas.Count + 1);

            partos.Header = "Últ c/vaca";

            chartVacas.Border.Fill.Color = System.Drawing.Color.Green;
            chartVacas.Title.Text        = "Todo el hato: comparación IEP del hato, último c/vaca y prom c/vaca";

            //Tamaño del gráfico
            chartVacas.SetSize(500, 300);

            // Posicionamos el gráfico
            chartVacas.SetPosition(1, 1, 13, 1);


            //--------------------------------Worksheet Gráfico-----------------------------

            //Se guarda el documento
            string ubicacionDocumentos    = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string nombreDocumentoResumen = ubicacionDocumentos + @"\" + "Resumen_" + DateTime.Now.ToString().Replace("/", ".").Replace(":", ".").Replace(" ", "_").Replace("\\", ".") + ".xlsx";

            try
            {
                documentoExcel.SaveAs(new FileInfo(nombreDocumentoResumen));

                //Se muestra el mensaje que indica al usuario en donde quedó el documento
                Utilities.MostrarMessageBox(MENSAJE_CORRECTO + nombreDocumentoResumen, TITULO_MENSAJE, MessageBoxButtons.OK, MessageBoxIcon.None);
            }
            catch
            {
                //Se muestra el mensaje que indica al usuario en donde quedó el documento
                Utilities.MostrarMessageBox(Utilities.MENSAJE_ERROR, Utilities.TITULO_ERROR, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            //Se cierra el documento
            documentoExcel.Dispose();
        }