/// <summary>
        /// Asigna el proveedor SuKarne al Costo del Ganado
        /// </summary>
        /// <param name="entradaGanadoCosteo"></param>
        private void AsignarProveedorSuKarne300(EntradaGanadoCosteoInfo entradaGanadoCosteo)
        {
            var parametroGeneralBL = new ParametroGeneralBL();
            ParametroGeneralInfo parametroGeneral =
                parametroGeneralBL.ObtenerPorClaveParametro(ParametrosEnum.PolizaSacrificio300.ToString());

            if (parametroGeneral != null)
            {
                var proveedor = new ProveedorInfo
                {
                    CodigoSAP = parametroGeneral.Valor
                };
                var proveedorBL = new ProveedorBL();
                proveedor = proveedorBL.ObtenerPorCodigoSAP(proveedor);
                if (proveedor != null)
                {
                    EntradaGanadoCostoInfo entradaGanadoCosto =
                        entradaGanadoCosteo.ListaCostoEntrada.FirstOrDefault(id => id.Costo.CostoID == 1);
                    if (entradaGanadoCosto != null)
                    {
                        entradaGanadoCosto.Proveedor   = proveedor;
                        entradaGanadoCosto.TieneCuenta = false;
                    }
                }
            }
        }
        /// <summary>
        /// Obtiene la Lista de los Costos Automaticos, para la funcionalidad de Costeo Entrada Ganado
        /// </summary>
        /// <param name="entradaGanado"></param>
        /// <returns></returns>
        internal List <EntradaGanadoCostoInfo> ObtenerCostosAutomaticos(EntradaGanadoInfo entradaGanado)
        {
            List <EntradaGanadoCostoInfo> listaEntradaGanadoCostos = new List <EntradaGanadoCostoInfo>();

            try
            {
                Logger.Info();
                var costoOrganizacionDAL = new CostoOrganizacionDAL();

                var listaCostos = costoOrganizacionDAL.ObtenerPorOrganizacion(entradaGanado);

                if (listaCostos == null)
                {
                    return(listaEntradaGanadoCostos);
                }

                listaCostos.ForEach(costo =>
                {
                    var entradaGanadoCosto = new EntradaGanadoCostoInfo
                    {
                        Costo   = costo.Costo,
                        Importe = costo.Importe
                    };
                    listaEntradaGanadoCostos.Add(entradaGanadoCosto);
                });
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(listaEntradaGanadoCostos);
        }
        /// <summary>
        /// Agrupa los costos de ganado de la interfaz
        /// </summary>
        /// <param name="entradaGanadoCosteo"></param>
        /// <param name="organizacionId"></param>
        /// <param name="interfaceSalidaTraspaso"></param>
        /// <param name="interfaceSalidaTraspasoCosto"></param>
        private void AgruparValoresInterfaz(EntradaGanadoCosteoInfo entradaGanadoCosteo, int organizacionId, InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso, List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto)
        {
            var interfaceSalidaBL = new InterfaceSalidaBL();
            var costosAgrupados   = (from costos in entradaGanadoCosteo.ListaCostoEntrada
                                     group costos by costos.Costo.CostoID
                                     into costoAgrupado
                                     let interfaceSalidaCostoInfo = costoAgrupado.FirstOrDefault()
                                                                    let claveContable =
                                         interfaceSalidaBL.ObtenerCuentaInventario(interfaceSalidaCostoInfo.Costo,
                                                                                   organizacionId,
                                                                                   ClaveCuenta.CuentaInventarioIntensivo)
                                         where interfaceSalidaCostoInfo != null
                                         select new EntradaGanadoCostoInfo
            {
                Costo = interfaceSalidaCostoInfo.Costo,
                TieneCuenta = true,
                Importe = costoAgrupado.Sum(cos => cos.Importe),
                CuentaProvision = claveContable.Valor,
                DescripcionCuenta = claveContable.Descripcion,
                Origen = true
            }).ToList();

            entradaGanadoCosteo.ListaCalidadGanado = entradaGanadoCosteo.ListaCalidadGanado
                                                     .GroupBy(calidad => calidad.CalidadGanado.CalidadGanadoID)
                                                     .Select(calidad => new EntradaGanadoCalidadInfo
            {
                CalidadGanado
                    = new CalidadGanadoInfo
                    {
                        CalidadGanadoID = calidad.Key,
                        Calidad         =
                            calidad.Select(cal => cal.CalidadGanado.Calidad).
                            FirstOrDefault(),
                        Descripcion =
                            calidad.Select(cal => cal.CalidadGanado.Descripcion).
                            FirstOrDefault(),
                        Sexo =
                            calidad.Select(
                                id => id.CalidadGanado.Sexo).
                            FirstOrDefault()
                    },
                Valor = calidad.Sum(cal => cal.Valor),
            }).ToList();
            decimal importeGanado =
                costosAgrupados.Where(imp => imp.Costo.CostoID == 1).Select(imp => imp.Importe).FirstOrDefault();
            int cabezas = entradaGanadoCosteo.ListaCalidadGanado.Sum(cab => cab.Valor);

            importeGanado = importeGanado + (320 * cabezas);

            EntradaGanadoCostoInfo costoGanado = costosAgrupados.FirstOrDefault(id => id.Costo.CostoID == 1);
            decimal costosNoGanado             = costosAgrupados.Where(id => id.Costo.CostoID != 1).Sum(imp => imp.Importe);

            importeGanado      += costosNoGanado;
            costoGanado.Importe = importeGanado;
            entradaGanadoCosteo.ListaCostoEntrada = costosAgrupados.Where(id => id.Costo.CostoID == 1).ToList();

            foreach (var entradaDetalle in entradaGanadoCosteo.ListaEntradaDetalle)
            {
                var interfaceDetalle =
                    interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.FirstOrDefault(
                        det => det.TipoGanado.TipoGanadoID == entradaDetalle.TipoGanado.TipoGanadoID);

                if (interfaceDetalle != null)
                {
                    decimal importeGanadoDetalle =
                        interfaceSalidaTraspasoCosto.Where(
                            cos =>
                            cos.InterfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoDetalleID ==
                            interfaceDetalle.InterfaceSalidaTraspasoDetalleID &&
                            cos.Costo.CostoID == Costo.CostoGanado.GetHashCode()).Sum(cos => cos.Importe);

                    importeGanadoDetalle = importeGanadoDetalle + (320 * entradaDetalle.Cabezas);

                    decimal importeGanadoDetalleNoGanado =
                        interfaceSalidaTraspasoCosto.Where(
                            cos =>
                            cos.InterfaceSalidaTraspasoDetalle.InterfaceSalidaTraspasoDetalleID ==
                            interfaceDetalle.InterfaceSalidaTraspasoDetalleID &&
                            cos.Costo.CostoID != Costo.CostoGanado.GetHashCode()).Sum(cos => cos.Importe);

                    importeGanadoDetalle = importeGanadoDetalle + importeGanadoDetalleNoGanado;

                    entradaDetalle.Importe    = importeGanadoDetalle;
                    entradaDetalle.PrecioKilo = entradaDetalle.Importe / entradaDetalle.PesoOrigen;
                }
            }

            //entradaGanadoCosteo.ListaEntradaDetalle =
            //    entradaGanadoCosteo.ListaEntradaDetalle.GroupBy(tipo => tipo.TipoGanado.TipoGanadoID).Select(
            //        detalle => new EntradaDetalleInfo
            //                       {
            //                           TipoGanado = new TipoGanadoInfo
            //                                            {
            //                                                TipoGanadoID = detalle.Key,
            //                                                Descripcion =
            //                                                    detalle.Select(
            //                                                        des =>
            //                                                        des.TipoGanado.Descripcion).
            //                                                    FirstOrDefault()
            //                                            },
            //                           Cabezas = detalle.Sum(cab => cab.Cabezas),
            //                           PesoOrigen = detalle.Sum(peso => peso.PesoOrigen),
            //                           FechaSalidaInterface =
            //                               detalle.Select(fecha => fecha.FechaSalidaInterface).FirstOrDefault(),
            //                           PrecioKilo = importeGanado / detalle.Sum(peso => peso.PesoOrigen),
            //                           Importe =
            //                               (importeGanado / detalle.Sum(peso => peso.PesoOrigen)) *
            //                               detalle.Sum(peso => peso.PesoOrigen)
            //                       }).ToList();
        }