/// <summary> /// Valida que los pesos de interface sean correctos /// </summary> /// <param name="entradaGanadoCosteo"></param> /// <param name="pesoNeto"></param> private void ValidarPeso(EntradaGanadoCosteoInfo entradaGanadoCosteo, int pesoNeto) { decimal pesoTotal = entradaGanadoCosteo.ListaEntradaDetalle.Sum(peso => peso.PesoOrigen); decimal diferencia = pesoNeto - pesoTotal; EntradaDetalleInfo entradaDetalle = entradaGanadoCosteo.ListaEntradaDetalle.FirstOrDefault(); if (entradaDetalle == null) { entradaDetalle = new EntradaDetalleInfo(); } if (diferencia >= 0) { entradaDetalle.PesoOrigen += diferencia; } else { entradaDetalle.PesoOrigen -= diferencia; } }
/// <summary> /// Obtiene /// </summary> /// <param name="organizacionID"> </param> /// <param name="folioOrigen"> </param> /// <returns></returns> internal EntradaGanadoCosteoInfo ObtenerDatosInterfaceSalidaTraspaso(int organizacionID, int folioOrigen) { EntradaGanadoCosteoInfo entradaGanadoCosteo = null; try { Logger.Info(); var interfaceSalidaTraspaspBl = new InterfaceSalidaTraspasoDAL(); InterfaceSalidaTraspasoInfo interfaceSalidaTraspaso = interfaceSalidaTraspaspBl.ObtenerDatosInterfaceSalidaTraspaso(organizacionID, folioOrigen); if (interfaceSalidaTraspaso != null) { entradaGanadoCosteo = new EntradaGanadoCosteoInfo { ListaCalidadGanado = new List <EntradaGanadoCalidadInfo>(), ListaCostoEntrada = new List <EntradaGanadoCostoInfo>(), ListaEntradaDetalle = new List <EntradaDetalleInfo>(), }; var animalBL = new AnimalBL(); var interfaceSalidaTraspasoCostoBL = new InterfaceSalidaTraspasoCostoBL(); List <InterfaceSalidaTraspasoCostoInfo> interfaceSalidaTraspasoCosto = interfaceSalidaTraspasoCostoBL.ObtenerCostosInterfacePorDetalle(interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle); var animalesID = new HashSet <long>(interfaceSalidaTraspasoCosto.Select(id => id.AnimalID)); List <AnimalInfo> animalesTraspaso = animalesID.Select(ani => new AnimalInfo { AnimalID = ani, Activo = false }).ToList(); List <AnimalInfo> animalesMovimientoSalidaTraspaso = animalBL.ObtenerMovimientosPorXML(animalesTraspaso); if (animalesMovimientoSalidaTraspaso != null && animalesMovimientoSalidaTraspaso.Any()) { var animalesMovimiento = new List <AnimalMovimientoInfo>(); animalesMovimientoSalidaTraspaso.ForEach( movs => animalesMovimiento.AddRange(movs.ListaAnimalesMovimiento)); int pesoNeto = interfaceSalidaTraspaso.PesoBruto - interfaceSalidaTraspaso.PesoTara; decimal pesoLote = 0; int totalCabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Sum(cab => cab.Cabezas); var costoBL = new CostoBL(); IList <CostoInfo> costos = costoBL.ObtenerTodos(EstatusEnum.Activo); int cabezas = interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.Sum(cabe => cabe.Cabezas); entradaGanadoCosteo.ListaCalidadGanado.AddRange( animalesMovimientoSalidaTraspaso.GroupBy(tipo => tipo.TipoGanado.TipoGanadoID).Select( calidad => new EntradaGanadoCalidadInfo { CalidadGanado = new CalidadGanadoInfo { CalidadGanadoID = calidad.Select( id => id.CalidadGanado.CalidadGanadoID). FirstOrDefault(), 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.Count(), })); pesoLote = (pesoNeto * cabezas) / totalCabezas; int pesoPromedio = Convert.ToInt32(pesoLote / totalCabezas); entradaGanadoCosteo.ListaEntradaDetalle.AddRange( interfaceSalidaTraspaso.ListaInterfaceSalidaTraspasoDetalle.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.Select(des => des.Cabezas).FirstOrDefault(), PesoOrigen = detalle.Select(des => des.Cabezas).FirstOrDefault() * pesoPromedio, FechaSalidaInterface = interfaceSalidaTraspaso.FechaEnvio, })); int pesoTotalAgrupado = Convert.ToInt32(entradaGanadoCosteo.ListaEntradaDetalle.Sum(det => det.PesoOrigen)); if (pesoTotalAgrupado != pesoNeto) { int diferencia = pesoNeto - pesoTotalAgrupado; EntradaDetalleInfo primerDetalle = entradaGanadoCosteo.ListaEntradaDetalle.FirstOrDefault(); if (primerDetalle != null) { primerDetalle.PesoOrigen = primerDetalle.PesoOrigen + diferencia; } } //entradaGanadoCosteo.ListaEntradaDetalle.AddRange( // animalesMovimientoSalidaTraspaso.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.Count(), // PesoOrigen = pesoLote, // FechaSalidaInterface = interfaceSalidaTraspaso.FechaEnvio, // })); entradaGanadoCosteo.ListaCostoEntrada.AddRange(interfaceSalidaTraspasoCosto .GroupBy(cos => cos.Costo.CostoID).Select(grp => new EntradaGanadoCostoInfo { Costo = new CostoInfo { CostoID = grp.Key, ImporteCosto = grp.Sum(imp => imp.Importe), ClaveContable = costos.Where(id => id.CostoID == grp.Key) .Select(clave => clave.ClaveContable) .FirstOrDefault(), Descripcion = costos.Where(id => id.CostoID == grp.Key) .Select(desc => desc.Descripcion) .FirstOrDefault() }, Importe = grp.Sum(imp => imp.Importe), })); ValidarPeso(entradaGanadoCosteo, pesoNeto); AgruparValoresInterfaz(entradaGanadoCosteo, organizacionID, interfaceSalidaTraspaso, interfaceSalidaTraspasoCosto); CompletarCalidadGanado(entradaGanadoCosteo); AsignarProveedorSuKarne300(entradaGanadoCosteo); } } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(entradaGanadoCosteo); }
/// <summary> /// Obtiene una Interface de Salida por SalidaID y OrganizacionID /// </summary> /// <param name="entradaGanado"></param> /// <returns></returns> internal EntradaGanadoCosteoInfo ObtenerPorSalidaOrganizacion(EntradaGanadoInfo entradaGanado) { var entradaGanadoCosteo = new EntradaGanadoCosteoInfo(); try { Logger.Info(); var interfaceSalidaDAL = new InterfaceSalidaDAL(); var interfacesSalidaInfo = interfaceSalidaDAL.ObtenerPorSalidaOrganizacion(entradaGanado); entradaGanadoCosteo.ListaEntradaDetalle = new List <EntradaDetalleInfo>(); entradaGanadoCosteo.ListaCostoEntrada = new List <EntradaGanadoCostoInfo>(); var diasEstancia = new List <double>(); var listaEntradaGanadoCostoAuxiliar = new List <EntradaGanadoCostoInfo>(); var tipoGanadoBL = new TipoGanadoBL(); List <TipoGanadoInfo> tiposGanado = tipoGanadoBL.ObtenerTodos(); if (interfacesSalidaInfo == null) { return(entradaGanadoCosteo); } interfacesSalidaInfo.ListaInterfaceDetalle.ForEach(det => { var entradaGanadoDetalle = new EntradaDetalleInfo { TipoGanado = det.TipoGanado, Cabezas = det.Cabezas, Importe = det.Importe, PrecioKilo = det.PrecioKG, PesoOrigen = det.ListaInterfaceSalidaAnimal.Sum(ani => ani.PesoOrigen), ListaTiposGanado = tiposGanado, FechaSalidaInterface = interfacesSalidaInfo.FechaSalida, }; entradaGanadoCosteo.ListaEntradaDetalle.Add(entradaGanadoDetalle); if (det.ListaInterfaceSalidaAnimal != null) { det.ListaInterfaceSalidaAnimal.ForEach(animal => { if (animal.ListaSalidaCostos != null) { var listaCostosAnimal = (from costo in animal.ListaSalidaCostos select new EntradaGanadoCostoInfo { Costo = costo.Costo, Importe = costo.Importe, TieneCuenta = true, //CuentaProvision = claveContable.Valor, //DescripcionCuenta = claveContable.Descripcion }); listaEntradaGanadoCostoAuxiliar.AddRange(listaCostosAnimal); var span = interfacesSalidaInfo.FechaSalida - animal.FechaCompra; diasEstancia.Add(span.TotalDays); } }); } }); var costosAgrupados = (from costos in listaEntradaGanadoCostoAuxiliar group costos by costos.Costo.CostoID into costoAgrupado let interfaceSalidaCostoInfo = costoAgrupado.FirstOrDefault() let claveContable = ObtenerCuentaInventario(interfaceSalidaCostoInfo.Costo, entradaGanado. OrganizacionOrigenID, ClaveCuenta.CuentaInventarioTransito) 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.ListaCostoEntrada.AddRange(costosAgrupados); entradaGanadoCosteo.DiasEstancia = Convert.ToInt32(diasEstancia.Average()); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(entradaGanadoCosteo); }