/// <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); } }
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); }
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); }
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); }
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); }