コード例 #1
0
        /// <summary>
        /// Termina la salida del producto
        /// </summary>
        /// <param name="salida"></param>
        /// <returns></returns>
        internal MemoryStream TerminarSalidaProducto(SalidaProductoInfo salida)
        {
            try
            {
                Logger.Info();
                bool         generaFactura = salida.GeneraFactura;
                MemoryStream resultado     = null;
                var          almacenBl     = new AlmacenBL();
                var          almacenMovimientoDetalleDAL = new AlmacenMovimientoDetalleDAL();
                var          almacenMovimiento           = new AlmacenMovimientoInfo();
                var          almacenInventarioLoteBl     = new AlmacenInventarioLoteBL();
                var          almacenInventarioBl         = new AlmacenInventarioBL();
                var          salidaProductoDal           = new SalidaProductoDAL();

                PolizaAbstract     poliza  = null;
                IList <PolizaInfo> polizas = null;
                using (var transaction = new TransactionScope())
                {
                    almacenMovimiento.AlmacenID         = salida.Almacen.AlmacenID;
                    almacenMovimiento.TipoMovimientoID  = salida.TipoMovimiento.TipoMovimientoID;
                    almacenMovimiento.UsuarioCreacionID = salida.UsuarioModificacionId;
                    almacenMovimiento.Status            = (int)EstatusInventario.Aplicado;

                    AlmacenMovimientoInfo almacenMovimientoGenerado =
                        almacenBl.GuardarAlmacenMovimiento(almacenMovimiento);

                    if (almacenMovimientoGenerado != null)
                    {
                        AlmacenInventarioLoteInfo almacenInventarioLote =
                            almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId(
                                salida.AlmacenInventarioLote.AlmacenInventarioLoteId);
                        var listaAlmacenInventarioDetalle = new List <AlmacenMovimientoDetalle>();

                        var movimientoDetalle = new AlmacenMovimientoDetalle
                        {
                            AlmacenMovimientoID =
                                almacenMovimientoGenerado.AlmacenMovimientoID,
                            AlmacenInventarioLoteId =
                                salida.AlmacenInventarioLote.AlmacenInventarioLoteId,
                            Precio     = almacenInventarioLote.PrecioPromedio,
                            ProductoID = salida.Producto.ProductoId,
                            Cantidad   = salida.PesoBruto - salida.PesoTara,
                            Piezas     = salida.Piezas,
                            Importe    =
                                (salida.PesoBruto - salida.PesoTara) *
                                almacenInventarioLote.PrecioPromedio,
                            UsuarioCreacionID = salida.UsuarioModificacionId
                        };
                        listaAlmacenInventarioDetalle.Add(movimientoDetalle);

                        almacenMovimientoDetalleDAL.GuardarAlmacenMovimientoDetalle(listaAlmacenInventarioDetalle,
                                                                                    almacenMovimientoGenerado.
                                                                                    AlmacenMovimientoID);
                        if (almacenInventarioLote != null)
                        {
                            almacenInventarioLote.Cantidad = almacenInventarioLote.Cantidad -
                                                             (salida.PesoBruto - salida.PesoTara);
                            almacenInventarioLote.Importe = almacenInventarioLote.PrecioPromedio *
                                                            almacenInventarioLote.Cantidad;

                            almacenInventarioLote.UsuarioModificacionId = salida.UsuarioModificacionId;
                            almacenInventarioLoteBl.Actualizar(almacenInventarioLote);

                            AlmacenInfo almacen = almacenBl.ObtenerPorID(almacenMovimiento.AlmacenID);
                            List <AlmacenInventarioInfo> listaAlmacenlmacenInventario =
                                almacenInventarioBl.ObtienePorAlmacenId(almacen);
                            if (listaAlmacenlmacenInventario != null)
                            {
                                AlmacenInventarioInfo inventarioProducto = listaAlmacenlmacenInventario.FirstOrDefault(
                                    registro => registro.ProductoID == salida.Producto.ProductoId);

                                if (inventarioProducto != null)
                                {
                                    inventarioProducto.Cantidad = inventarioProducto.Cantidad -
                                                                  (salida.PesoBruto - salida.PesoTara);
                                    inventarioProducto.Importe = (inventarioProducto.PrecioPromedio *
                                                                  inventarioProducto.Cantidad);
                                    //Actualiza inventario
                                    inventarioProducto.UsuarioModificacionID = salida.UsuarioModificacionId;
                                    inventarioProducto.ProductoID            = salida.Producto.ProductoId;
                                    inventarioProducto.AlmacenID             = almacen.AlmacenID;
                                    almacenInventarioBl.ActualizarPorProductoId(inventarioProducto);
                                    salida.GeneraFactura = generaFactura;
                                    salidaProductoDal.TerminarSalidaProducto(salida, almacenMovimientoGenerado);

                                    #region POLIZA

                                    poliza =
                                        FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(
                                            TipoPoliza.SalidaVentaProducto);
                                    salida.Importe = (salida.PesoBruto - salida.PesoTara) * salida.Precio;
                                    salida         = ObtenerFolioPorReimpresion(salida);
                                    polizas        = poliza.GeneraPoliza(salida);
                                    if (polizas != null)
                                    {
                                        var polizaBL = new PolizaBL();
                                        polizas.ToList().ForEach(datos =>
                                        {
                                            datos.OrganizacionID =
                                                salida.Organizacion.OrganizacionID;
                                            datos.UsuarioCreacionID =
                                                salida.UsuarioCreacionId;
                                            datos.ArchivoEnviadoServidor = 1;
                                        });
                                        polizaBL.GuardarServicioPI(polizas, TipoPoliza.SalidaVentaProducto);
                                        if (salida.Almacen == null)
                                        {
                                            salida.Almacen = new AlmacenInfo();
                                        }
                                        salida.Almacen.Organizacion = new OrganizacionInfo
                                        {
                                            OrganizacionID =
                                                salida.Organizacion.OrganizacionID
                                        };
                                        resultado = poliza.ImprimePoliza(salida, polizas);
                                    }

                                    #endregion POLIZA

                                    if (generaFactura)
                                    {
                                        #region FACTURA

                                        if (salida.TipoMovimiento.TipoMovimientoID ==
                                            TipoMovimiento.ProductoSalidaVenta.GetHashCode())
                                        {
                                            //Genera el xml y lo guarda en la ruta especificada en la configuración
                                            var facturaBl = new FacturaBL();
                                            facturaBl.GenerarDatosFacturaVentaDeMateriaPrima(salida);
                                        }

                                        #endregion
                                    }

                                    transaction.Complete();
                                }
                                else
                                {
                                    throw new ExcepcionDesconocida(
                                              Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                                }
                            }
                            else
                            {
                                throw new ExcepcionDesconocida(
                                          Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                            }
                        }
                        else
                        {
                            throw new ExcepcionDesconocida(
                                      Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                        }
                    }
                    else
                    {
                        throw new ExcepcionDesconocida(
                                  Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                    }
                }
                return(resultado);
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (ExcepcionDesconocida)
            {
                throw;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
コード例 #2
0
        private long GenerarMovimientoEntradaCancelacion(AlmacenMovimientoInfo info, UsuarioInfo usuario)
        {
            var almacenInventarioBL        = new AlmacenInventarioBL();
            var almacenInventarioLoteBL    = new AlmacenInventarioLoteBL();
            var almacenMovimientoBL        = new AlmacenMovimientoBL();
            var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();

            AlmacenMovimientoDetalle detalle = info.ListaAlmacenMovimientoDetalle.FirstOrDefault();

            if (detalle == null)
            {
                return(0);
            }

            //decimal cantidadTraspaso = detalle.Cantidad;

            List <AlmacenInventarioInfo> inventariosDestino       = almacenInventarioBL.ObtienePorAlmacenId(info.Almacen);
            AlmacenInventarioInfo        almacenInventarioDestino = null;

            if (inventariosDestino != null && inventariosDestino.Any())
            {
                almacenInventarioDestino =
                    inventariosDestino.FirstOrDefault(inv => inv.ProductoID == detalle.Producto.ProductoId);
                if (almacenInventarioDestino != null)
                {
                    almacenInventarioDestino.Cantidad              = almacenInventarioDestino.Cantidad + detalle.Cantidad;
                    almacenInventarioDestino.Importe               = almacenInventarioDestino.Importe + detalle.Importe;
                    almacenInventarioDestino.PrecioPromedio        = almacenInventarioDestino.Importe / almacenInventarioDestino.Cantidad;
                    almacenInventarioDestino.UsuarioModificacionID = usuario.UsuarioID;

                    almacenInventarioBL.Actualizar(almacenInventarioDestino);
                }
            }
            if (detalle.AlmacenInventarioLoteId != 0)
            {
                AlmacenInventarioLoteInfo loteDestino = almacenInventarioLoteBL.ObtenerAlmacenInventarioLotePorId(detalle.AlmacenInventarioLoteId);

                if (loteDestino != null)
                {
                    loteDestino.Cantidad              = loteDestino.Cantidad + detalle.Cantidad;
                    loteDestino.Importe               = loteDestino.Importe + detalle.Importe;
                    loteDestino.PrecioPromedio        = loteDestino.Importe / loteDestino.Cantidad;
                    loteDestino.UsuarioModificacionId = usuario.UsuarioID;

                    almacenInventarioLoteBL.Actualizar(loteDestino);
                }
            }
            var almacenMovimientoDestino = new AlmacenMovimientoInfo
            {
                AlmacenID         = info.Almacen.AlmacenID,
                TipoMovimientoID  = TipoMovimiento.EntradaAlmacen.GetHashCode(),
                ProveedorId       = info.ProveedorId,
                Status            = Estatus.AplicadoInv.GetHashCode(),
                UsuarioCreacionID = usuario.UsuarioID,
            };
            long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimientoDestino);

            if (almacenInventarioDestino != null)
            {
                var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle
                {
                    AlmacenMovimientoID     = almacenMovimientoID,
                    AlmacenInventarioLoteId = detalle.AlmacenInventarioLoteId,
                    //ContratoId = detalle.ContratoId,
                    Piezas            = 0,
                    ProductoID        = detalle.Producto.ProductoId,
                    Precio            = detalle.Precio,
                    Cantidad          = detalle.Cantidad,
                    Importe           = detalle.Importe,
                    UsuarioCreacionID = usuario.UsuarioID
                };
                almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalleInfo);
            }
            return(almacenMovimientoID);
        }
コード例 #3
0
        private long GenerarMovimientoSalida(TraspasoMpPaMedInfo info)
        {
            var     almacenInventarioBL        = new AlmacenInventarioBL();
            var     almacenInventarioLoteBL    = new AlmacenInventarioLoteBL();
            var     almacenMovimientoBL        = new AlmacenMovimientoBL();
            var     almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();
            decimal cantidadTraspaso           = info.CantidadTraspasarOrigen;

            List <AlmacenInventarioInfo> inventariosOrigen       = almacenInventarioBL.ObtienePorAlmacenId(info.AlmacenOrigen);
            AlmacenInventarioInfo        almacenInventarioOrigen = null;
            decimal precioPromedio = 0;
            decimal importe        = 0;

            if (inventariosOrigen != null && inventariosOrigen.Any())
            {
                almacenInventarioOrigen =
                    inventariosOrigen.FirstOrDefault(inv => inv.ProductoID == info.ProductoOrigen.ProductoId);
                if (almacenInventarioOrigen != null)
                {
                    almacenInventarioOrigen.Cantidad = almacenInventarioOrigen.Cantidad - cantidadTraspaso;
                    almacenInventarioOrigen.Importe  = almacenInventarioOrigen.Importe -
                                                       Math.Round(cantidadTraspaso * almacenInventarioOrigen.PrecioPromedio, 2);
                    if (almacenInventarioOrigen.Importe < 0)
                    {
                        almacenInventarioOrigen.Importe = 0;
                    }
                    if (almacenInventarioOrigen.Cantidad > 0)
                    {
                        almacenInventarioOrigen.PrecioPromedio = almacenInventarioOrigen.Importe / almacenInventarioOrigen.Cantidad;
                    }
                    almacenInventarioOrigen.UsuarioModificacionID = info.Usuario.UsuarioID;

                    almacenInventarioBL.Actualizar(almacenInventarioOrigen);
                    precioPromedio = almacenInventarioOrigen.PrecioPromedio;
                    importe        = precioPromedio * cantidadTraspaso;
                }
            }
            if (info.LoteMpOrigen.AlmacenInventarioLoteId != 0)
            {
                AlmacenInventarioLoteInfo loteOrigen = almacenInventarioLoteBL.ObtenerAlmacenInventarioLotePorId(info.LoteMpOrigen.AlmacenInventarioLoteId);

                if (loteOrigen != null)
                {
                    loteOrigen.Cantidad = loteOrigen.Cantidad - cantidadTraspaso;
                    loteOrigen.Importe  = loteOrigen.Importe - Math.Round(cantidadTraspaso * loteOrigen.PrecioPromedio, 2);
                    if (loteOrigen.Importe < 0)
                    {
                        loteOrigen.Importe = 0;
                    }
                    if (loteOrigen.Cantidad > 0)
                    {
                        loteOrigen.PrecioPromedio = loteOrigen.Importe / loteOrigen.Cantidad;
                    }
                    loteOrigen.UsuarioModificacionId = info.Usuario.UsuarioID;

                    almacenInventarioLoteBL.Actualizar(loteOrigen);
                    precioPromedio = loteOrigen.PrecioPromedio;
                    importe        = precioPromedio * cantidadTraspaso;
                }
            }
            var almacenMovimientoOrigen = new AlmacenMovimientoInfo
            {
                AlmacenID         = info.AlmacenOrigen.AlmacenID,
                TipoMovimientoID  = TipoMovimiento.ProductoSalidaTraspaso.GetHashCode(),
                ProveedorId       = info.ProveedorOrigen.ProveedorID,
                Status            = Estatus.AplicadoInv.GetHashCode(),
                UsuarioCreacionID = info.Usuario.UsuarioID,
                Observaciones     = info.JustificacionDestino
            };
            long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimientoOrigen);

            if (almacenInventarioOrigen != null)
            {
                var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle
                {
                    AlmacenMovimientoID     = almacenMovimientoID,
                    AlmacenInventarioLoteId = info.LoteMpOrigen.AlmacenInventarioLoteId,
                    Piezas            = 0,
                    ProductoID        = info.ProductoOrigen.ProductoId,
                    Precio            = precioPromedio,
                    Cantidad          = cantidadTraspaso,
                    Importe           = importe,
                    UsuarioCreacionID = info.Usuario.UsuarioID
                };
                almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalleInfo);
            }
            info.ImporteTraspaso = importe;
            return(almacenMovimientoID);
        }
コード例 #4
0
        private long GenerarMovimientoEntrada(TraspasoMpPaMedInfo info)
        {
            var     almacenInventarioBL        = new AlmacenInventarioBL();
            var     almacenInventarioLoteBL    = new AlmacenInventarioLoteBL();
            var     almacenMovimientoBL        = new AlmacenMovimientoBL();
            var     almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();
            decimal cantidadTraspaso           = info.CantidadTraspasarDestino;

            decimal precioPromedio = 0;

            List <AlmacenInventarioInfo> inventariosDestino = almacenInventarioBL.ObtienePorAlmacenId(info.AlmacenDestino);

            if (inventariosDestino != null && inventariosDestino.Any())
            {
                AlmacenInventarioInfo almacenInventarioDestino = inventariosDestino.FirstOrDefault(inv => inv.ProductoID == info.ProductoDestino.ProductoId);
                if (almacenInventarioDestino != null)
                {
                    almacenInventarioDestino.Cantidad              = almacenInventarioDestino.Cantidad + cantidadTraspaso;
                    almacenInventarioDestino.Importe               = almacenInventarioDestino.Importe + info.ImporteTraspaso;
                    almacenInventarioDestino.PrecioPromedio        = almacenInventarioDestino.Importe / almacenInventarioDestino.Cantidad;
                    almacenInventarioDestino.UsuarioModificacionID = info.Usuario.UsuarioID;

                    almacenInventarioBL.Actualizar(almacenInventarioDestino);
                }
                else
                {
                    //Crear el Inventario

                    var almacenInventarioGuardar = new AlmacenInventarioInfo
                    {
                        AlmacenID         = info.AlmacenDestino.AlmacenID,
                        ProductoID        = info.ProductoDestino.ProductoId,
                        Cantidad          = cantidadTraspaso,
                        Importe           = info.ImporteTraspaso,
                        PrecioPromedio    = info.ImporteTraspaso / cantidadTraspaso,
                        UsuarioCreacionID = info.Usuario.UsuarioID
                    };
                    almacenInventarioBL.Crear(almacenInventarioGuardar);
                }
            }
            else
            {
                //Crear el Inventario

                var almacenInventarioGuardar = new AlmacenInventarioInfo
                {
                    AlmacenID         = info.AlmacenDestino.AlmacenID,
                    ProductoID        = info.ProductoDestino.ProductoId,
                    Cantidad          = cantidadTraspaso,
                    Importe           = info.ImporteTraspaso,
                    PrecioPromedio    = info.ImporteTraspaso / cantidadTraspaso,
                    UsuarioCreacionID = info.Usuario.UsuarioID
                };
                almacenInventarioBL.Crear(almacenInventarioGuardar);
            }
            if (info.LoteMpDestino.AlmacenInventarioLoteId != 0)
            {
                AlmacenInventarioLoteInfo loteDestino = almacenInventarioLoteBL.ObtenerAlmacenInventarioLotePorId(info.LoteMpDestino.AlmacenInventarioLoteId);

                if (loteDestino != null)
                {
                    loteDestino.Cantidad              = loteDestino.Cantidad + cantidadTraspaso;
                    loteDestino.Importe               = loteDestino.Importe + info.ImporteTraspaso;
                    loteDestino.PrecioPromedio        = loteDestino.Importe / loteDestino.Cantidad;
                    loteDestino.UsuarioModificacionId = info.Usuario.UsuarioID;

                    almacenInventarioLoteBL.Actualizar(loteDestino);
                }
            }
            var almacenMovimientoDestino = new AlmacenMovimientoInfo
            {
                AlmacenID         = info.AlmacenDestino.AlmacenID,
                TipoMovimientoID  = TipoMovimiento.EntradaAlmacen.GetHashCode(),
                ProveedorId       = info.ProveedorDestino.ProveedorID,
                Status            = Estatus.AplicadoInv.GetHashCode(),
                UsuarioCreacionID = info.Usuario.UsuarioID,
                Observaciones     = info.JustificacionDestino
            };
            long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimientoDestino);

            precioPromedio = info.ImporteTraspaso / info.CantidadTraspasarDestino;

            var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle
            {
                AlmacenMovimientoID = almacenMovimientoID,
                //ContratoId = info.ContratoDestino.ContratoId,
                AlmacenInventarioLoteId = info.LoteMpDestino.AlmacenInventarioLoteId,
                Piezas            = 0,
                ProductoID        = info.ProductoDestino.ProductoId,
                Precio            = precioPromedio,
                Cantidad          = cantidadTraspaso,
                Importe           = info.ImporteTraspaso,
                UsuarioCreacionID = info.Usuario.UsuarioID
            };

            almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalleInfo);

            return(almacenMovimientoID);
        }
コード例 #5
0
        internal bool GuardarInventario(RecepcionProductoInfo recepcionProducto)
        {
            try
            {
                AlmacenBL           almacenBl           = new AlmacenBL();
                AlmacenInventarioBL almacenInventarioBl = new AlmacenInventarioBL();
                foreach (var recepcionProductodetalle in recepcionProducto.ListaRecepcionProductoDetalle)
                {
                    AlmacenInfo almacen = almacenBl.ObtenerPorID(recepcionProducto.Almacen.AlmacenID);
                    List <AlmacenInventarioInfo> listaAlmacenlmacenInventario =
                        almacenInventarioBl.ObtienePorAlmacenId(almacen);

                    if (listaAlmacenlmacenInventario != null)
                    {
                        List <AlmacenInventarioInfo> almacenInventarioListaResultado =
                            listaAlmacenlmacenInventario.Where(
                                registro => registro.ProductoID == recepcionProductodetalle.Producto.ProductoId)
                            .ToList();

                        if (almacenInventarioListaResultado.Count > 0)
                        {
                            var almacenInventario = almacenInventarioListaResultado[0];
                            almacenInventario.Cantidad = almacenInventario.Cantidad +
                                                         recepcionProductodetalle.Cantidad;
                            almacenInventario.Importe               = almacenInventario.Importe + recepcionProductodetalle.Importe;
                            almacenInventario.PrecioPromedio        = almacenInventario.Importe / almacenInventario.Cantidad;
                            almacenInventario.UsuarioModificacionID = recepcionProducto.UsuarioCreacion.UsuarioID;

                            almacenInventarioBl.Actualizar(almacenInventario);
                        }
                        else
                        {
                            var almacenInventarioNuevo = new AlmacenInventarioInfo();
                            almacenInventarioNuevo.Almacen        = recepcionProducto.Almacen;
                            almacenInventarioNuevo.AlmacenID      = recepcionProducto.Almacen.AlmacenID;
                            almacenInventarioNuevo.Producto       = recepcionProductodetalle.Producto;
                            almacenInventarioNuevo.ProductoID     = recepcionProductodetalle.Producto.ProductoId;
                            almacenInventarioNuevo.Cantidad       = recepcionProductodetalle.Cantidad;
                            almacenInventarioNuevo.Importe        = recepcionProductodetalle.Importe;
                            almacenInventarioNuevo.PrecioPromedio = almacenInventarioNuevo.Importe /
                                                                    almacenInventarioNuevo.Cantidad;
                            almacenInventarioNuevo.UsuarioCreacionID = recepcionProducto.UsuarioCreacion.UsuarioID;
                            almacenInventarioBl.Crear(almacenInventarioNuevo);
                        }
                    }
                    else
                    {
                        var almacenInventarioNuevo = new AlmacenInventarioInfo();
                        almacenInventarioNuevo.Almacen        = recepcionProducto.Almacen;
                        almacenInventarioNuevo.AlmacenID      = recepcionProducto.Almacen.AlmacenID;
                        almacenInventarioNuevo.Producto       = recepcionProductodetalle.Producto;
                        almacenInventarioNuevo.ProductoID     = recepcionProductodetalle.Producto.ProductoId;
                        almacenInventarioNuevo.Cantidad       = recepcionProductodetalle.Cantidad;
                        almacenInventarioNuevo.Importe        = recepcionProductodetalle.Importe;
                        almacenInventarioNuevo.PrecioPromedio = almacenInventarioNuevo.Importe /
                                                                almacenInventarioNuevo.Cantidad;
                        almacenInventarioNuevo.UsuarioCreacionID = recepcionProducto.UsuarioCreacion.UsuarioID;
                        almacenInventarioBl.Crear(almacenInventarioNuevo);
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            return(false);
        }