Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        /// <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);
        }
Пример #8
0
        /// <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);
        }
Пример #9
0
        /// <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);
        }