/// <summary> /// Obtiene un flujo de datos /// con la poliza de compra /// </summary> /// <param name="contenedorEntradaMateriaPrima"></param> /// <param name="polizaClave"></param> /// <returns></returns> private MemoryStream ReimpresionPolizaCompra(ContenedorEntradaMateriaPrimaInfo contenedorEntradaMateriaPrima , TipoPolizaInfo polizaClave) { var polizaBL = new PolizaBL(); IList <PolizaInfo> polizasVenta = polizaBL.ObtenerPoliza(TipoPoliza.EntradaCompra, contenedorEntradaMateriaPrima.Contrato.Organizacion. OrganizacionID, contenedorEntradaMateriaPrima.Contrato.Fecha , contenedorEntradaMateriaPrima.Contrato.Folio. ToString(), polizaClave.ClavePoliza, 1); MemoryStream stream = null; if (polizasVenta != null) { var entradaProductoBL = new EntradaProductoBL(); contenedorEntradaMateriaPrima = entradaProductoBL.ObtenerPorFolioEntradaContrato(contenedorEntradaMateriaPrima.Contrato.Folio, contenedorEntradaMateriaPrima.Contrato.ContratoId, contenedorEntradaMateriaPrima.Contrato.Organizacion.OrganizacionID); var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.EntradaCompra); polizasVenta = poliza.GeneraPoliza(contenedorEntradaMateriaPrima); stream = poliza.ImprimePoliza(contenedorEntradaMateriaPrima, polizasVenta); } return(stream); }
/// <summary> /// Obtiene un flujo de datos /// para la generacion de la reimpresion /// de la poliza de Salida de Traspaso /// </summary> /// <param name="produccionFormula"></param> /// <param name="polizaClave"></param> /// <returns></returns> private MemoryStream ReimpresionPolizaProduccionAlimento(ProduccionFormulaInfo produccionFormula, TipoPolizaInfo polizaClave) { var polizaBL = new PolizaBL(); IList <PolizaInfo> polizasProduccionAlimento = polizaBL.ObtenerPoliza(TipoPoliza.ProduccionAlimento, produccionFormula.Organizacion.OrganizacionID, produccionFormula.FechaProduccion, produccionFormula.FolioFormula.ToString(CultureInfo.InvariantCulture), polizaClave.ClavePoliza, 1); MemoryStream stream = null; if (polizasProduccionAlimento != null) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.ProduccionAlimento); var produccionFormulaBL = new ProduccionFormulaBL(); using (var almacenDAL = new AlmacenDAL()) { var almacenMovimientoBL = new AlmacenMovimientoBL(); ProduccionFormulaInfo produccion = produccionFormulaBL.ObtenerPorIDCompleto(produccionFormula.ProduccionFormulaId); if (produccion != null) { AlmacenInfo almacenPlantaAlimento = almacenDAL.ObtenerAlmacenOrganizacionTipo(produccionFormula.Organizacion.OrganizacionID, TipoAlmacenEnum.PlantaDeAlimentos); AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerPorIDCompleto(produccion.AlmacenMovimientoSalidaID); var produccionFormulaDetalles = new List <ProduccionFormulaDetalleInfo>(); if (almacenMovimiento != null) { foreach (var detalle in produccion.ProduccionFormulaDetalle) { var movimiento = almacenMovimiento.ListaAlmacenMovimientoDetalle.FirstOrDefault( alm => alm.Producto.ProductoId == detalle.Producto.ProductoId && alm.AlmacenInventarioLoteId == detalle.AlmacenInventarioLoteID); if (movimiento == null) { continue; } detalle.CantidadProducto = movimiento.Cantidad; detalle.PrecioPromedio = movimiento.Precio; produccionFormulaDetalles.Add(detalle); } } if (almacenPlantaAlimento == null) { return(null); } produccion.ProduccionFormulaDetalle = produccionFormulaDetalles; produccion.Almacen = almacenPlantaAlimento; polizasProduccionAlimento = poliza.GeneraPoliza(produccion); stream = poliza.ImprimePoliza(produccion, polizasProduccionAlimento); } } } return(stream); }
/// <summary> /// Obtiene un flujo de datos /// para la generacion de la reimpresion /// de la poliza de Salida de Traspaso /// </summary> /// <param name="folioSolicitud"></param> /// <param name="polizaClave"></param> /// <returns></returns> private MemoryStream ReimpresionPolizaSalidaConsumo(FolioSolicitudInfo folioSolicitud, TipoPolizaInfo polizaClave) { var polizaBL = new PolizaBL(); IList <PolizaInfo> polizasSalidaConsumo = polizaBL.ObtenerPoliza(TipoPoliza.SalidaConsumo, folioSolicitud.OrganizacionID, folioSolicitud.FechaEntrega.HasValue ? folioSolicitud.FechaEntrega.Value : DateTime.MinValue, folioSolicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), polizaClave.ClavePoliza, 1); MemoryStream stream = null; if (polizasSalidaConsumo != null) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaConsumo); var solicitudProductoDAL = new SolicitudProductoDAL(); using (var almacenDAL = new AlmacenDAL()) { var almacenMovimientoBL = new AlmacenMovimientoBL(); SolicitudProductoInfo solicitud = solicitudProductoDAL.ObtenerPorID(folioSolicitud.FolioID); if (solicitud != null) { AlmacenInfo almacenGeneral = almacenDAL.ObtenerAlmacenGeneralOrganizacion(folioSolicitud.OrganizacionID); AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerPorIDCompleto(solicitud.AlmacenMovimientoID.HasValue ? solicitud.AlmacenMovimientoID.Value : 0); if (almacenMovimiento != null) { foreach (var detalle in solicitud.Detalle) { var movimiento = almacenMovimiento.ListaAlmacenMovimientoDetalle.FirstOrDefault( alm => alm.Producto.ProductoId == detalle.Producto.ProductoId); if (movimiento == null) { continue; } detalle.PrecioPromedio = movimiento.Precio; } } if (almacenGeneral == null) { return(null); } solicitud.AlmacenGeneralID = almacenGeneral.AlmacenID; polizasSalidaConsumo = poliza.GeneraPoliza(solicitud); stream = poliza.ImprimePoliza(solicitud, polizasSalidaConsumo); } } } return(stream); }
/// <summary> /// Obtiene los valores para la reimpresion de /// la poliza de salida por venta /// </summary> /// <param name="ventaGanado"></param> /// <param name="polizaClave"> </param> private MemoryStream ReimprimirPolizaVenta(VentaGanadoInfo ventaGanado, TipoPolizaInfo polizaClave) { var polizaBL = new PolizaBL(); int organizacionID = ventaGanado.Lote.OrganizacionID; var ventaGanadoBL = new VentaGanadoBL(); List <ContenedorVentaGanado> ventasGanado = ventaGanadoBL.ObtenerVentaGanadoPorTicketPoliza(ventaGanado.FolioTicket, organizacionID); MemoryStream pdf = null; var tipoPoliza = TipoPoliza.SalidaVenta; IList <PolizaInfo> polizasVenta = polizaBL.ObtenerPoliza(tipoPoliza, organizacionID, ventaGanado.FechaVenta , ventaGanado.FolioTicket.ToString(), polizaClave.ClavePoliza, 1); var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(tipoPoliza); var polizaGenerada = false; if (polizasVenta == null) { if (ventasGanado != null && ventasGanado.Any()) { var animalCostoBL = new AnimalCostoBL(); var detalleVentas = new List <VentaGanadoDetalleInfo>(); ventasGanado.ForEach(det => detalleVentas.Add(det.VentaGanadoDetalle)); List <AnimalInfo> animalesGenerarPoliza = detalleVentas.Select(ani => new AnimalInfo { AnimalID = ani.Animal.AnimalID, OrganizacionIDEntrada = organizacionID }).ToList(); List <AnimalCostoInfo> animalCosto = animalCostoBL.ObtenerCostosAnimal(animalesGenerarPoliza); if (animalCosto != null && !animalCosto.Any(id => id.CostoID == 1 && id.Importe == 0)) { polizasVenta = poliza.GeneraPoliza(ventasGanado); polizasVenta.ToList().ForEach(org => org.OrganizacionID = organizacionID); polizaBL.GuardarServicioPI(polizasVenta, tipoPoliza); polizaGenerada = true; } } } if (polizasVenta != null && polizasVenta.Any()) { if (ventasGanado != null && ventasGanado.Any()) { if (!polizaGenerada) { polizasVenta = poliza.GeneraPoliza(ventasGanado); } pdf = poliza.ImprimePoliza(ventasGanado, polizasVenta); } } return(pdf); }
/// <summary> /// Obtiene un flujo de datos /// para la generacion de la reimpresion /// de la poliza de venta de producto /// </summary> /// <param name="salidaProductoInfo"></param> /// <param name="polizaClave"></param> /// <returns></returns> private MemoryStream ReimpresionSalidaVentaProducto(SalidaProductoInfo salidaProductoInfo, TipoPolizaInfo polizaClave) { MemoryStream pdf = null; var polizaBL = new PolizaBL(); IList <PolizaInfo> polizasSalidaProducto = polizaBL.ObtenerPoliza(TipoPoliza.SalidaVentaProducto, salidaProductoInfo.Organizacion.OrganizacionID , salidaProductoInfo.FechaSalida, salidaProductoInfo.FolioSalida.ToString(), polizaClave.ClavePoliza, 1); if (polizasSalidaProducto != null && polizasSalidaProducto.Any()) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaVentaProducto); polizasSalidaProducto = poliza.GeneraPoliza(salidaProductoInfo); if (polizasSalidaProducto != null && polizasSalidaProducto.Any()) { pdf = poliza.ImprimePoliza(salidaProductoInfo, polizasSalidaProducto); } } return(pdf); }
/// <summary> /// Obtiene los valores para la reimpresion de /// la poliza de Salida por Muerte /// </summary> /// <param name="animal"></param> /// <param name="fecha"></param> /// <param name="polizaClave"> </param> private MemoryStream ReimprimirPolizaMuerte(AnimalInfo animal, DateTime fecha , TipoPolizaInfo polizaClave) { MemoryStream pdf = null; var animalCostoBL = new AnimalCostoBL(); var animalesGenerarPoliza = new List <AnimalInfo> { animal }; List <AnimalCostoInfo> animalCosto = animalCostoBL.ObtenerCostosAnimal(animalesGenerarPoliza); var animalCostoAgrupado = (from costo in animalCosto group costo by new { costo.AnimalID, costo.CostoID } into agrupado select new AnimalCostoInfo { AnimalID = agrupado.Key.AnimalID, CostoID = agrupado.Key.CostoID, Importe = agrupado.Sum(cos => cos.Importe), FolioReferencia = agrupado.Select(cos => cos.FolioReferencia).FirstOrDefault(), FechaCosto = agrupado.Select(cos => cos.FechaCosto).FirstOrDefault() }).ToList(); animalCosto = animalCostoAgrupado; if (animalCosto.Any()) { int organizacionID = animal.OrganizacionIDEntrada; int usuarioID = animal.UsuarioCreacionID; animalCosto.ForEach(org => { org.OrganizacionID = organizacionID; org.UsuarioCreacionID = usuarioID; }); var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaMuerte); var polizaBL = new PolizaBL(); for (int indexAnimal = 0; indexAnimal < animalesGenerarPoliza.Count; indexAnimal++) { IList <PolizaInfo> polizaSalidaMuerte = polizaBL.ObtenerPoliza(TipoPoliza.SalidaMuerte, organizacionID, fecha, animalesGenerarPoliza[indexAnimal]. AnimalID.ToString(), polizaClave.ClavePoliza, 1); animalCosto = animalCosto.Where(id => id.AnimalID == animalesGenerarPoliza[indexAnimal].AnimalID).ToList(); if (animalCosto.Any()) { animalCosto.ForEach(ani => ani.Arete = animalesGenerarPoliza[indexAnimal].Arete); } if (polizaSalidaMuerte == null) { if (animalCosto.Any(id => id.CostoID == 1)) { organizacionID = animal.OrganizacionIDEntrada; polizaSalidaMuerte = poliza.GeneraPoliza(animalCosto); polizaSalidaMuerte.ToList().ForEach(datos => { datos.OrganizacionID = organizacionID; datos.UsuarioCreacionID = usuarioID; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizaSalidaMuerte, TipoPoliza.SalidaMuerte); } } else { polizaSalidaMuerte = poliza.GeneraPoliza(animalCosto); } if ((polizaSalidaMuerte != null && polizaSalidaMuerte.Any()) && animalCosto.Any(id => id.CostoID == 1)) { pdf = poliza.ImprimePoliza(animalCosto, polizaSalidaMuerte); } } } return(pdf); }
/// <summary> /// Obtiene los valores para la reimpresion de /// la poliza de entrada de ganado /// </summary> /// <param name="entradaGanado"></param> /// <param name="polizaClave"> </param> private MemoryStream ReimprimirPolizaEntrada(EntradaGanadoInfo entradaGanado, TipoPolizaInfo polizaClave) { EntradaGanadoCosteoInfo entradaGanadoCosteo; var esGanadera = false; var entradaGanadoCosteoBL = new EntradaGanadoCosteoBL(); if (entradaGanado.TipoOrigen == TipoOrganizacion.Ganadera.GetHashCode()) { var interfaceSalidaTraspasoBL = new InterfaceSalidaTraspasoBL(); entradaGanadoCosteo = interfaceSalidaTraspasoBL.ObtenerDatosInterfaceSalidaTraspaso(entradaGanado.OrganizacionID, entradaGanado.FolioOrigen); esGanadera = true; EntradaGanadoCosteoInfo entradaGanadoCosteoComplementoCostos = entradaGanadoCosteoBL.ObtenerPorEntradaGanadoID(entradaGanado.EntradaGanadoID); entradaGanadoCosteo.ListaCostoEntrada.AddRange(entradaGanadoCosteoComplementoCostos.ListaCostoEntrada.Where(id => id.Costo.CostoID != 1)); } else { entradaGanadoCosteo = entradaGanadoCosteoBL.ObtenerPorEntradaGanadoID(entradaGanado.EntradaGanadoID); } MemoryStream pdf = null; if (entradaGanadoCosteo != null) { if (!esGanadera) { var cuentaPL = new CuentaBL(); const string CUENTA_INVENTARIO = "CTAINVTRAN"; entradaGanadoCosteo.ListaCostoEntrada.ForEach(costo => { if (!string.IsNullOrWhiteSpace(costo.DescripcionCuenta)) { return; } var claveContable = cuentaPL.ObtenerPorClaveCuentaOrganizacion(CUENTA_INVENTARIO, entradaGanado.OrganizacionOrigenID); if (claveContable != null) { costo.DescripcionCuenta = claveContable.Descripcion; } }); } var contenedorCosteoEntrada = new ContenedorCosteoEntradaGanadoInfo { EntradaGanado = entradaGanado, EntradaGanadoCosteo = entradaGanadoCosteo }; PolizaAbstract poliza; var tipoPoliza = esGanadera ? TipoPoliza.EntradaGanadoDurango : TipoPoliza.EntradaGanado; if (esGanadera) { poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(tipoPoliza); } else { poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(tipoPoliza); } var polizaBL = new PolizaBL(); int organizacionID = entradaGanado.OrganizacionID; IList <PolizaInfo> polizasEntrada = polizaBL.ObtenerPoliza(tipoPoliza, organizacionID, entradaGanado.FechaEntrada, entradaGanado.FolioEntrada.ToString(), polizaClave.ClavePoliza, 1); if (polizasEntrada != null) { polizasEntrada = poliza.GeneraPoliza(contenedorCosteoEntrada); pdf = poliza.ImprimePoliza(contenedorCosteoEntrada, polizasEntrada); } } return(pdf); }
/// <summary> /// Obtiene un flujo de datos /// para la generacion de la reimpresion /// de la poliza de pase a proceso /// </summary> /// <param name="pedidoInfo"></param> /// <param name="polizaClave"></param> /// <returns></returns> private IList <ResultadoPolizaModel> ReimpresionPolizaPaseProceso(PedidoInfo pedidoInfo, TipoPolizaInfo polizaClave) { var polizaBL = new PolizaBL(); IList <PolizaInfo> polizasVenta = polizaBL.ObtenerPoliza(TipoPoliza.PaseProceso, pedidoInfo.Organizacion.OrganizacionID, pedidoInfo.FechaPedido, pedidoInfo.FolioPedido.ToString(), polizaClave.ClavePoliza, 1); IList <ResultadoPolizaModel> resultadoPolizaModel = null; if (polizasVenta != null) { List <int> foliosPedidos = new List <int>(); foreach (var polizaventas in polizasVenta) { //PP-348-1 22,350 COSTOS int indiceFolio = 1; var conceptos = polizaventas.Concepto.Split('-'); int folio; int.TryParse(conceptos[indiceFolio], out folio); if (folio > 0) { foliosPedidos.Add(folio); } } foliosPedidos = foliosPedidos.Distinct().ToList(); resultadoPolizaModel = new List <ResultadoPolizaModel>(); foreach (var folio in foliosPedidos) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.PaseProceso); var pesajeMateriaPrimaBL = new PesajeMateriaPrimaBL(); List <PolizaPaseProcesoModel> datosPoliza = pesajeMateriaPrimaBL.ObtenerValoresPolizaPaseProcesoReimpresion(folio, pedidoInfo.Organizacion. OrganizacionID); if (datosPoliza != null && datosPoliza.Any()) { IList <PolizaPaseProcesoModel> polizasPaseProcesoModel; datosPoliza = datosPoliza.GroupBy( prod => new { prod.Producto.ProductoId, prod.ProveedorChofer.ProveedorChoferID, prod.PesajeMateriaPrima.Ticket }) .Select(grupo => new PolizaPaseProcesoModel { Organizacion = grupo.Select(org => org.Organizacion).FirstOrDefault(), Almacen = grupo.Select(alm => alm.Almacen).FirstOrDefault(), Producto = grupo.Select(pro => pro.Producto).FirstOrDefault(), Proveedor = grupo.Select(prov => prov.Proveedor).FirstOrDefault(), AlmacenMovimiento = grupo.Select(alm => alm.AlmacenMovimiento).FirstOrDefault(), AlmacenMovimientoDetalle = grupo.Select(alm => alm.AlmacenMovimientoDetalle). FirstOrDefault(), AlmacenInventarioLote = grupo.Select(alm => alm.AlmacenInventarioLote).FirstOrDefault(), FleteInterno = grupo.Select(flete => flete.FleteInterno).FirstOrDefault(), FleteInternoCosto = grupo.Select(flete => flete.FleteInternoCosto).FirstOrDefault(), Pedido = grupo.Select(ped => ped.Pedido).FirstOrDefault(), ProveedorChofer = grupo.Select(prov => prov.ProveedorChofer).FirstOrDefault(), PesajeMateriaPrima = grupo.Select(pesaje => pesaje.PesajeMateriaPrima). FirstOrDefault(), ProgramacionMateriaPrima = grupo.Select(prog => prog.ProgramacionMateriaPrima). FirstOrDefault(), ListaAlmacenMovimientoCosto = grupo.Select(prog => prog.ListaAlmacenMovimientoCosto). FirstOrDefault(), }).OrderBy(ticket => ticket.PesajeMateriaPrima.Ticket).ToList(); for (int indexPoliza = 0; indexPoliza < datosPoliza.Count; indexPoliza++) { polizasPaseProcesoModel = new List <PolizaPaseProcesoModel> { datosPoliza[indexPoliza] }; polizasVenta = poliza.GeneraPoliza(polizasPaseProcesoModel); MemoryStream stream = poliza.ImprimePoliza(polizasPaseProcesoModel, polizasVenta); PolizaPaseProcesoModel polizaActual = polizasPaseProcesoModel.FirstOrDefault(); string nomenclaturaArchivo = string.Empty; if (polizaActual != null) { nomenclaturaArchivo = String.Format("{0}-{1}", polizaActual.Pedido.FolioPedido, polizaActual.PesajeMateriaPrima.Ticket); } var resultadoPoliza = new ResultadoPolizaModel { NomenclaturaArchivo = nomenclaturaArchivo, PDF = stream }; //polizasVenta.ToList().ForEach(datos => // { // datos.OrganizacionID = 1; // datos.UsuarioCreacionID = 1; // }); //polizaBL.Guardar(polizasVenta, TipoPoliza.PaseProceso); resultadoPolizaModel.Add(resultadoPoliza); } } } } return(resultadoPolizaModel); }
/// <summary> /// Actualiza la recepcion de materia prima /// </summary> /// <param name="listaSurtido"></param> /// <param name="pedido"></param> /// <returns></returns> internal bool ActualizarRecepcionMateriaPrima(List <SurtidoPedidoInfo> listaSurtido, PedidoInfo pedido) { bool resultado; try { Logger.Info(); var almacenInventarioBl = new AlmacenInventarioBL(); var almacenInventarioLoteBl = new AlmacenInventarioLoteBL(); var almacenBl = new AlmacenBL(); var proveedorChofeBl = new ProveedorChoferBL(); int proveedorId = 0; var pesajeMateriaPrimaBl = new PesajeMateriaPrimaBL(); int organizacionID; PolizaAbstract poliza; IList <PolizaInfo> polizas; IList <ResultadoPolizaModel> resultadoPolizaModel; var contenedorAlmacenesMovimientos = new List <ContenedorAlmacenMovimientoCierreDia>(); ContenedorAlmacenMovimientoCierreDia contenedorAlmacenMovimiento; var surtidoGenerarPoliza = new List <SurtidoPedidoInfo>(); using (var transaction = new TransactionScope()) { ProgramacionMateriaPrimaInfo programacionMateriaPrima; var programacionMateriaPrimaBL = new ProgramacionMateriaPrimaBL(); foreach (var surtidoTmp in listaSurtido) { if (surtidoTmp.Seleccionado) { programacionMateriaPrima = programacionMateriaPrimaBL. ObtenerPorProgramacionMateriaPrimaTicket( surtidoTmp.ProgramacionMateriaPrima.ProgramacionMateriaPrimaId, surtidoTmp.PesajeMateriaPrima.Ticket); if (programacionMateriaPrima != null) { continue; } surtidoGenerarPoliza.Add(surtidoTmp); var pesaje = pesajeMateriaPrimaBl.ObtenerPorId(surtidoTmp.PesajeMateriaPrima); // Se consulta el proveedor del Proveedor chofer seleccionado para el pesaje. var proveedorChofeInfo = proveedorChofeBl.ObtenerProveedorChoferPorId( surtidoTmp.PesajeMateriaPrima.ProveedorChoferID); if (proveedorChofeInfo != null) { proveedorId = proveedorChofeInfo.Proveedor.ProveedorID; } //SE OBTIENEN LOS DATOS DEL LOTE DESTINO var almacenInventarioLoteDestino = almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId( surtidoTmp.PedidoDetalle.InventarioLoteDestino.AlmacenInventarioLoteId); //SE OBTIENEN LOS DATOS DEL LOTE ORIGEN var almacenInventarioLoteOrigen = almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId( surtidoTmp.ProgramacionMateriaPrima.InventarioLoteOrigen .AlmacenInventarioLoteId); #region INVENTARIO ORIGEN // GENERA MOVIMIENTO DE INVENTARIO var almacenMovimiento = almacenBl.GuardarAlmacenMovimiento(new AlmacenMovimientoInfo { AlmacenID = almacenInventarioLoteOrigen .AlmacenInventario. AlmacenID, TipoMovimientoID = (int) TipoMovimiento. PaseProceso, Observaciones = "", Status = (int)EstatusInventario.Aplicado, AnimalMovimientoID = 0, ProveedorId = proveedorId, UsuarioCreacionID = pedido. UsuarioModificacion. UsuarioID }); // SE LE ASIGNA EL MOVIMIENTO GENERADO AL PESAJE pesaje.AlmacenMovimientoOrigenId = almacenMovimiento.AlmacenMovimientoID; contenedorAlmacenMovimiento = new ContenedorAlmacenMovimientoCierreDia { AlmacenMovimiento = new AlmacenMovimientoInfo { AlmacenMovimientoID = almacenMovimiento. AlmacenMovimientoID } }; contenedorAlmacenesMovimientos.Add(contenedorAlmacenMovimiento); // GENERA EL DETALLE DEL MOVIMIENTO almacenBl.GuardarAlmacenMovimientoDetalleProducto( new AlmacenMovimientoDetalle { AlmacenMovimientoID = almacenMovimiento.AlmacenMovimientoID, ProductoID = surtidoTmp.Producto.ProductoId, Precio = almacenInventarioLoteOrigen.PrecioPromedio, Cantidad = surtidoTmp.CantidadEntregada, Importe = almacenInventarioLoteOrigen.PrecioPromedio * surtidoTmp.CantidadEntregada, AlmacenInventarioLoteId = almacenInventarioLoteOrigen.AlmacenInventarioLoteId, ContratoId = 0, Piezas = surtidoTmp.PesajeMateriaPrima.Piezas, UsuarioCreacionID = pedido.UsuarioModificacion.UsuarioID }); // GENERA LA SALIDA DEL INVENTARIO LOTE almacenInventarioLoteOrigen.Cantidad -= surtidoTmp.CantidadEntregada; almacenInventarioLoteOrigen.Piezas -= surtidoTmp.PesajeMateriaPrima.Piezas; almacenInventarioLoteOrigen.Importe = almacenInventarioLoteOrigen.PrecioPromedio * almacenInventarioLoteOrigen.Cantidad; almacenInventarioLoteOrigen.UsuarioModificacionId = pedido.UsuarioModificacion.UsuarioID; almacenInventarioLoteBl.Actualizar(almacenInventarioLoteOrigen); // GENERA LA SALIDA DEL ALMACEN INVENTARIO var almacenInventarioInfo = almacenInventarioBl.ObtenerAlmacenInventarioPorId( almacenInventarioLoteOrigen.AlmacenInventario.AlmacenInventarioID); almacenInventarioInfo.Cantidad = almacenInventarioInfo.Cantidad - surtidoTmp.CantidadEntregada; almacenInventarioInfo.Importe = almacenInventarioInfo.PrecioPromedio * almacenInventarioInfo.Cantidad; almacenInventarioInfo.UsuarioModificacionID = pedido.UsuarioModificacion.UsuarioID; almacenInventarioBl.Actualizar(almacenInventarioInfo); #endregion #region INVENTARIO DESTINO //Obtener costos de flete var fleteInternoPl = new FleteInternoPL(); var listadoCostos = fleteInternoPl.ObtenerCostosPorFleteConfiguracion(new FleteInternoInfo { Organizacion = new OrganizacionInfo { OrganizacionID = pedido.Organizacion.OrganizacionID }, AlmacenOrigen = new AlmacenInfo { AlmacenID = almacenInventarioLoteOrigen.AlmacenInventario.AlmacenID }, Producto = new ProductoInfo { ProductoId = surtidoTmp.Producto.ProductoId } }, new ProveedorInfo { ProveedorID = surtidoTmp.Proveedor.ProveedorID }); decimal importeCostos = 0; if (listadoCostos != null) { foreach (var fleteInternoCostoInfo in listadoCostos) { if (fleteInternoCostoInfo.TipoTarifaID == TipoTarifaEnum.Viaje.GetHashCode()) { importeCostos += fleteInternoCostoInfo.Tarifa; } else { importeCostos += (surtidoTmp.CantidadEntregada / 1000) * fleteInternoCostoInfo.Tarifa; } } //importeCostos = listadoCostos.Sum(fleteInternoCostoInfo => fleteInternoCostoInfo.Tarifa); } almacenMovimiento = almacenBl.GuardarAlmacenMovimiento(new AlmacenMovimientoInfo { AlmacenID = almacenInventarioLoteDestino .AlmacenInventario. AlmacenID, TipoMovimientoID = (int) TipoMovimiento. RecepcionAProceso, Observaciones = pedido.Observaciones, Status = (int)EstatusInventario.Aplicado, AnimalMovimientoID = 0, ProveedorId = proveedorId, UsuarioCreacionID = pedido. UsuarioModificacion. UsuarioID }); // SE LE ASIGNA EL MOVIMIENTO AL PESAJE pesaje.AlmacenMovimientoDestinoId = almacenMovimiento.AlmacenMovimientoID; // GENERA LA ENTRADA DEL INVENTARIO LOTE almacenInventarioLoteDestino.Piezas += surtidoTmp.PesajeMateriaPrima.Piezas; decimal importe = surtidoTmp.CantidadEntregada * almacenInventarioLoteOrigen.PrecioPromedio; almacenInventarioLoteDestino.Importe += importe; almacenInventarioLoteDestino.Cantidad += surtidoTmp.CantidadEntregada; almacenInventarioLoteDestino.PrecioPromedio = almacenInventarioLoteDestino.Importe / almacenInventarioLoteDestino.Cantidad; almacenInventarioLoteDestino.UsuarioModificacionId = pedido.UsuarioModificacion.UsuarioID; // //Se agregan los costos al importe del lote //importeCostos = importeCostos * surtidoTmp.CantidadEntregada; almacenInventarioLoteDestino.Importe = almacenInventarioLoteDestino.Importe + importeCostos; almacenInventarioLoteDestino.PrecioPromedio = almacenInventarioLoteDestino.Importe / almacenInventarioLoteDestino.Cantidad; // almacenInventarioLoteBl.Actualizar(almacenInventarioLoteDestino); // GENERA EL DETALLE DEL MOVIMIENTO almacenBl.GuardarAlmacenMovimientoDetalleProducto( new AlmacenMovimientoDetalle { AlmacenMovimientoID = almacenMovimiento.AlmacenMovimientoID, ProductoID = surtidoTmp.Producto.ProductoId, Precio = almacenInventarioLoteOrigen.PrecioPromedio, Cantidad = surtidoTmp.CantidadEntregada, Importe = importe, AlmacenInventarioLoteId = almacenInventarioLoteDestino.AlmacenInventarioLoteId, ContratoId = 0, Piezas = surtidoTmp.PesajeMateriaPrima.Piezas, UsuarioCreacionID = pedido.UsuarioModificacion.UsuarioID }); //Guarda almacen movimiento costo if (listadoCostos != null) { foreach (var fleteInternoCostoInfo in listadoCostos) { var almacenMovimientoCosto = new AlmacenMovimientoCostoBL(); decimal importeCostoFlete = 0; if (fleteInternoCostoInfo.TipoTarifaID == TipoTarifaEnum.Viaje.GetHashCode()) { importeCostoFlete = fleteInternoCostoInfo.Tarifa; } else { importeCostoFlete = (surtidoTmp.CantidadEntregada / 1000) * fleteInternoCostoInfo.Tarifa; } almacenMovimientoCosto.Crear(new AlmacenMovimientoCostoInfo { AlmacenMovimientoId = almacenMovimiento.AlmacenMovimientoID, ProveedorId = surtidoTmp.Proveedor.ProveedorID, CostoId = fleteInternoCostoInfo.Costo.CostoID, Importe = importeCostoFlete, Cantidad = surtidoTmp.CantidadEntregada, Activo = EstatusEnum.Activo, UsuarioCreacionId = pedido.UsuarioModificacion.UsuarioID }); } } // programacionMateriaPrimaBL.ActualizarAlmacenMovimiento( surtidoTmp.ProgramacionMateriaPrima.ProgramacionMateriaPrimaId, almacenMovimiento.AlmacenMovimientoID); // GENERA LA ENTRADA DEL ALMACEN INVENTARIO almacenInventarioInfo = almacenInventarioBl.ObtenerAlmacenInventarioPorId( almacenInventarioLoteDestino.AlmacenInventario.AlmacenInventarioID); List <AlmacenInventarioLoteInfo> listaAlmacenInventarioLote = almacenInventarioLoteBl.ObtenerPorAlmacenInventarioID(almacenInventarioInfo); var almacenInventario = new AlmacenInventarioInfo(); almacenInventario.AlmacenInventarioID = almacenInventarioInfo.AlmacenInventarioID; // SE SUMAN LAS CANTIDADES E IMPORTES QUE TIENE EL ALMACEN foreach (var almacenInventarioLoteInfo in listaAlmacenInventarioLote) { almacenInventario.Cantidad += almacenInventarioLoteInfo.Cantidad; almacenInventario.Importe += almacenInventarioLoteInfo.Importe; } almacenInventario.PrecioPromedio = almacenInventario.Importe / almacenInventario.Cantidad; almacenInventario.UsuarioModificacionID = pedido.UsuarioModificacion.UsuarioID; almacenInventario.ProductoID = surtidoTmp.Producto.ProductoId; almacenInventario.AlmacenID = almacenInventarioLoteDestino.AlmacenInventario.AlmacenID; almacenInventarioBl.ActualizarPorProductoId(almacenInventario); #endregion // SE ACTUALIZA EL PESAJE DE MATERIA PRIMA pesaje.EstatusID = (int)Estatus.PedidoCompletado; pesaje.Activo = false; pesaje.UsuarioModificacionID = pedido.UsuarioModificacion.UsuarioID; pesajeMateriaPrimaBl.ActualizarPesajePorId(pesaje); } } #region POLIZA organizacionID = pedido.Organizacion.OrganizacionID; string lotes = ObtenerXMLLote(listaSurtido); var pesajeMateriaPrimaBL = new PesajeMateriaPrimaBL(); List <PolizaPaseProcesoModel> datosPoliza = pesajeMateriaPrimaBL.ObtenerValoresPolizaPaseProceso(pedido.FolioPedido, organizacionID, lotes); if (datosPoliza != null) { datosPoliza = (from dp in datosPoliza from ls in surtidoGenerarPoliza where dp.Proveedor.ProveedorID == ls.Proveedor.ProveedorID && dp.Producto.ProductoId == ls.Producto.ProductoId && dp.PesajeMateriaPrima.Ticket == ls.PesajeMateriaPrima.Ticket select dp).ToList(); } if (datosPoliza != null && datosPoliza.Any()) { poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.PaseProceso); IList <PolizaPaseProcesoModel> polizasPaseProcesoModel; resultadoPolizaModel = new List <ResultadoPolizaModel>(); datosPoliza = datosPoliza.GroupBy(prod => new { prod.Producto, prod.ProveedorChofer, prod.PesajeMateriaPrima.Ticket }) .Select(grupo => new PolizaPaseProcesoModel { Organizacion = grupo.Select(org => org.Organizacion).FirstOrDefault(), Almacen = grupo.Select(alm => alm.Almacen).FirstOrDefault(), Producto = grupo.Key.Producto, Proveedor = grupo.Select(prov => prov.Proveedor).FirstOrDefault(), AlmacenMovimiento = grupo.Select(alm => alm.AlmacenMovimiento).FirstOrDefault(), AlmacenMovimientoDetalle = grupo.Select(alm => alm.AlmacenMovimientoDetalle).FirstOrDefault(), AlmacenInventarioLote = grupo.Select(alm => alm.AlmacenInventarioLote).FirstOrDefault(), FleteInterno = grupo.Select(flete => flete.FleteInterno).FirstOrDefault(), FleteInternoCosto = grupo.Select(flete => flete.FleteInternoCosto).FirstOrDefault(), Pedido = grupo.Select(ped => ped.Pedido).FirstOrDefault(), ProveedorChofer = grupo.Key.ProveedorChofer, PesajeMateriaPrima = grupo.Select(pesaje => pesaje.PesajeMateriaPrima).FirstOrDefault(), ProgramacionMateriaPrima = grupo.Select(prog => prog.ProgramacionMateriaPrima).FirstOrDefault(), ListaAlmacenMovimientoCosto = grupo.Select(prog => prog.ListaAlmacenMovimientoCosto).FirstOrDefault(), }).ToList(); IList <PolizaInfo> polizaExistente; var polizaBL = new PolizaBL(); for (var indexPoliza = 0; indexPoliza < datosPoliza.Count; indexPoliza++) { polizasPaseProcesoModel = new List <PolizaPaseProcesoModel> { datosPoliza[indexPoliza] }; polizas = poliza.GeneraPoliza(polizasPaseProcesoModel); if (polizas != null) { var resultadoPoliza = new ResultadoPolizaModel { Polizas = polizas }; polizas.ToList().ForEach(datos => { datos.OrganizacionID = organizacionID; datos.UsuarioCreacionID = pedido.UsuarioModificacion.UsuarioID; datos.ArchivoEnviadoServidor = 1; }); polizaExistente = polizaBL.ObtenerPoliza(TipoPoliza.PaseProceso, organizacionID, pedido.FechaPedido, string.Format("{0}-{1}", pedido.FolioPedido, datosPoliza[indexPoliza]. PesajeMateriaPrima.Ticket), "PP", 1); if (polizaExistente != null && polizaExistente.Any()) { List <PolizaInfo> excluir = (from existente in polizaExistente join guardar in polizas on existente.Concepto equals guardar.Concepto select guardar).ToList(); polizas = polizas.Except(excluir).ToList(); } if (polizas.Any()) { polizaBL.GuardarServicioPI(polizas, TipoPoliza.PaseProceso); resultadoPolizaModel.Add(resultadoPoliza); } } } var almacenMovimientoBL = new AlmacenMovimientoBL(); contenedorAlmacenesMovimientos.ForEach(alm => alm.Almacen = new AlmacenInfo { UsuarioModificacionID = pedido. UsuarioModificacion. UsuarioID }); almacenMovimientoBL.ActualizarGeneracionPoliza(contenedorAlmacenesMovimientos); } #endregion POLIZA transaction.Complete(); resultado = true; } } catch (ExcepcionGenerica exg) { resultado = false; Logger.Error(exg); } catch (Exception ex) { resultado = false; Logger.Error(ex); } return(resultado); }