/// <summary> /// Obtiene una lista con los datos del reporte /// de venta de ganado /// </summary> /// <param name="organizacionID"></param> /// <param name="fechaInicial"></param> /// <param name="fechaFinal"></param> /// <returns></returns> internal ReporteVentaGanadoDatos GenerarReporteVentaGanado(int organizacionID, DateTime fechaInicial, DateTime fechaFinal) { try { Logger.Info(); Dictionary <string, object> parameters = AuxReporteVentaGanadoDAL.ObtenerParametrosReporte( organizacionID, fechaInicial, fechaFinal); DataSet ds = Retrieve("ReporteVentaGanado_Obtener", parameters); ReporteVentaGanadoDatos result = null; if (ValidateDataSet(ds)) { result = MapReporteVentaGanadoDAL.ObtenerDatosReporte(ds); } return(result); } catch (SqlException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (DataException ex) { Logger.Error(ex); throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene una lista con los datos del reporte /// de venta de ganado /// </summary> /// <param name="organizacionID"></param> /// <param name="fechaInicial"></param> /// <param name="fechaFinal"></param> /// <returns></returns> public List <ReporteVentaGanado> GenerarReporteVentaGanado(int organizacionID, DateTime fechaInicial, DateTime fechaFinal) { List <ReporteVentaGanado> lista = null; try { Logger.Info(); var reporteVentaGanadoDAL = new ReporteVentaGanadoDAL(); ReporteVentaGanadoDatos datosReporte = reporteVentaGanadoDAL.GenerarReporteVentaGanado(organizacionID, fechaInicial, fechaFinal); if (datosReporte != null) { lista = GenerarReporte(datosReporte); lista = lista.Where(tipo => !string.IsNullOrWhiteSpace(tipo.TipoGanado)).ToList(); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(lista); }
/// <summary> /// Obtiene los datos que seran /// mostrados en el reporte /// </summary> /// <param name="datosReporte"></param> /// <returns></returns> private List <ReporteVentaGanado> GenerarReporte(ReporteVentaGanadoDatos datosReporte) { var resultado = new List <ReporteVentaGanado>(); var foliosVentaPeso = datosReporte.Animales .GroupBy(grp => grp.FolioTicket) .Select(dato => new { FolioTicket = dato.Key, PesoAnimal = Convert.ToInt32(Math.Round( Convert.ToDecimal(dato.Select(peso => peso.Peso).FirstOrDefault() / dato.Count()), 0, MidpointRounding.AwayFromZero)) }).ToList(); datosReporte.MovimientosSalida.ForEach(salida => { var repoteVenta = new ReporteVentaGanado { Enfermeria = salida.Enfermeria, LugarDestino = salida.Corral, Fecha = salida.FechaMovimiento.ToShortDateString() }; repoteVenta.Codigo = datosReporte.MovimientosProduccion.Where( condicion => condicion.AnimalID == salida.AnimalID). Select(destino => destino.Corral).FirstOrDefault(); ReporteVentaGanadoAnimal animal = datosReporte.Animales.FirstOrDefault(condicion => condicion.AnimalID == salida.AnimalID); if (animal != null) { repoteVenta.TipoGanado = animal.TipoGanado; repoteVenta.Arete = animal.Arete; repoteVenta.Sexo = animal.Sexo; repoteVenta.Causa = animal.CausaSalida; repoteVenta.Partida = animal.FolioEntrada; repoteVenta.Peso = foliosVentaPeso.Where( folioTicket => folioTicket.FolioTicket == animal.FolioTicket) .Select(peso => peso.PesoAnimal).FirstOrDefault(); ReporteVentaGanadoFolio folio = datosReporte.Folios.FirstOrDefault( condicion => condicion.FolioEntrada == animal.FolioEntrada && condicion.AnimalID == animal.AnimalID); if (folio != null) { repoteVenta.FechaLlegada = folio.FechaEntrada.ToShortDateString(); TimeSpan diasEngorda = salida.FechaMovimiento - folio.FechaEntrada; repoteVenta.DiasEngorda = diasEngorda.Days; var tipoOrganizacion = (TipoOrganizacion)folio.TipoOrganizacionID; switch (tipoOrganizacion) { case TipoOrganizacion.CompraDirecta: repoteVenta.Origen = folio.Proveedor; break; case TipoOrganizacion.Centro: case TipoOrganizacion.Praderas: case TipoOrganizacion.Descanso: case TipoOrganizacion.Cadis: repoteVenta.Origen = folio.Organizacion; break; } } List <ReporteVentaGanadoTratamiento> tratamientos = datosReporte.Tratamientos.Where( condicion => condicion.AnimalID == salida.AnimalID). Select( tratamiento => tratamiento) .ToList(); if (tratamientos.Any()) { AsignarTratamientos(tratamientos, repoteVenta); } } repoteVenta.LugarDestino = salida.Corral; resultado.Add(repoteVenta); }); if (resultado.Any()) { resultado = resultado.OrderBy(registro => registro.Fecha).ToList(); } return(resultado); }
/// <summary> /// Obtiene una clase con los /// datos necesarios para generar /// el reporte de venta de ganado /// </summary> /// <param name="ds"></param> /// <returns></returns> internal static ReporteVentaGanadoDatos ObtenerDatosReporte(DataSet ds) { ReporteVentaGanadoDatos resultado; try { Logger.Info(); DataTable dtMovimientosEnfermeria = ds.Tables[ConstantesDAL.DtMovimientosEnfermeria]; DataTable dtMovimientosProduccion = ds.Tables[ConstantesDAL.DtMovimientosProduccion]; DataTable dtMovimientosTratamientos = ds.Tables[ConstantesDAL.DtTratamientos]; DataTable dtFolios = ds.Tables[ConstantesDAL.DtFolios]; DataTable dtAnimales = ds.Tables[ConstantesDAL.DtAnimalesReporteVenta]; resultado = new ReporteVentaGanadoDatos { MovimientosProduccion = (from movs in dtMovimientosProduccion.AsEnumerable() select new ReporteVentaGanadoMovimientosProduccion { AnimalID = movs.Field <long>("AnimalID"), AnimalMovimientoID = movs.Field <long>("AnimalMovimientoID"), Corral = movs.Field <string>("CorralProduccion"), FechaMovimiento = movs.Field <DateTime>("FechaMovimiento") }).ToList(), Folios = (from movs in dtFolios.AsEnumerable() select new ReporteVentaGanadoFolio { FolioEntrada = movs.Field <int>("FolioEntrada"), Organizacion = movs.Field <string>("Organizacion"), EntradaGanadoID = movs.Field <int>("EntradaGanadoID"), FechaEntrada = movs.Field <DateTime>("FechaEntrada"), OrganizacionOrigenID = movs.Field <int>("OrganizacionOrigenID"), Proveedor = movs.Field <string>("Proveedor"), TipoOrganizacionID = movs.Field <int>("TipoOrganizacionID"), AnimalID = movs.Field <int>("AnimalID") }).ToList(), Tratamientos = (from movs in dtMovimientosTratamientos.AsEnumerable() select new ReporteVentaGanadoTratamiento { AnimalID = movs.Field <long>("AnimalID"), AnimalMovimientoID = movs.Field <long>("AnimalMovimientoID"), FechaMovimiento = movs.Field <DateTime>("FechaMovimiento"), CodigoTratamiento = movs.Field <int>("CodigoTratamiento"), Producto = movs.Field <string>("Producto"), }).ToList(), Animales = (from movs in dtAnimales.AsEnumerable() select new ReporteVentaGanadoAnimal { AnimalID = movs.Field <long>("AnimalID"), Arete = movs.Field <string>("Arete"), CausaSalida = movs.Field <string>("CausaSalida"), FolioEntrada = movs.Field <long>("FolioEntrada"), OrganizacionIDEntrada = movs.Field <int>("OrganizacionIDEntrada"), Sexo = movs.Field <string>("Sexo"), TipoGanado = movs.Field <string>("TipoGanado"), TipoGanadoID = movs.Field <int>("TipoGanadoID"), Peso = movs.Field <int>("Peso"), FolioTicket = movs.Field <int>("FolioTicket") }).ToList(), MovimientosSalida = (from movs in dtMovimientosEnfermeria.AsEnumerable() select new ReporteVentaGanadoMovimientosSalida { AnimalID = movs.Field <long>("AnimalID"), AnimalMovimientoID = movs.Field <long>("AnimalMovimientoID"), Corral = movs.Field <string>("Corral"), Enfermeria = movs.Field <string>("Enfermeria"), FechaMovimiento = movs.Field <DateTime>("FechaMovimiento"), }).ToList() }; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(resultado); }