private void AumentarStockConCantidadDevuelta(RendirConsignacionClienteData ventaData,
                                                      RemitosVentaDetalleDto remitoVentaDetalleActualizado, RemitosVentaDetalle remitoVentaDetalle)
        {
            //Sumar al stock si se devolvio algun libro del titulo
            if (remitoVentaDetalleActualizado.CntDevuelta > 0)
            {
                var tituloStock =
                    Uow.TitulosStock.Obtener(
                        ts => ts.TituloId == remitoVentaDetalleActualizado.TituloId && ts.SucursalId == ventaData.SucursalId);

                int?cantconsiganda    = 0;
                int?cantidadADevolver = remitoVentaDetalleActualizado.CntDevuelta;

                //Primero devuelvo los consignados
                if (remitoVentaDetalle.CntCn - (remitoVentaDetalle.CntDevuelta ?? 0) > 0)
                {
                    if ((remitoVentaDetalle.CntCn - (remitoVentaDetalle.CntDevuelta ?? 0)) >= remitoVentaDetalleActualizado.CntDevuelta)
                    {
                        tituloStock.StkCn += remitoVentaDetalleActualizado.CntDevuelta;
                        cantidadADevolver  = 0;
                    }
                    else
                    {
                        tituloStock.StkCn += (remitoVentaDetalleActualizado.CntDevuelta ?? 0) - (remitoVentaDetalle.CntCn - remitoVentaDetalle.CntDevuelta);
                        cantidadADevolver -= (remitoVentaDetalle.CntCn - (remitoVentaDetalle.CntDevuelta ?? 0));
                    }
                }
                //Despues los propios
                if (remitoVentaDetalle.CntPr > 0 && cantidadADevolver > 0)
                {
                    if (remitoVentaDetalle.CntPr >= cantidadADevolver)
                    {
                        tituloStock.StkPr += cantidadADevolver;
                    }
                }
            }
        }
Beispiel #2
0
        private void RealizarConsignacion()
        {
            _consignacion.Id = Guid.NewGuid();

            switch (_formMode)
            {
            case ActionFormMode.Create:
                _consignacion.NumeroComprobante = _consignacionNegocio.SiguienteNroConsignacion(Context.SucursalActual.Id).ToString();
                break;

            case ActionFormMode.Edit:
                TxtNroConsignacion.Text = _consignacion.NumeroComprobante;
                break;
            }

            _consignacion.LCN = "";

            _consignacion.ClienteId = _cliente.Id;

            _consignacion.PuntoVenta       = 1;//; "no encuentro, pero no es igual a sucursal"
            _consignacion.FechaComprobante = _clock.Now;
            _consignacion.FechaVencimiento = DtpFechaVencimiento.Value;
            _consignacion.ImporteNeto      = ucTitulosVenta.Titulos.Sum(x => x.PrecioVenta);
            _consignacion.ImporteIVA       = IvaHelper.CalcularIva(_consignacion.ImporteNeto.Value);
            _consignacion.FechaEmision     = _clock.Now;
            BtnRecargarNroFactura_Click(null, null);
            _consignacion.NumeroComprobante = TxtNroConsignacion.Text;
            _consignacion.LCN             = LcnHelper.ObtenerLcn(_consignacion.NumeroComprobante, Context.SucursalActual.SucursalNumero ?? 1, "X");
            _consignacion.Concepto        = "CONSIGNACION PARA CLIENTES";
            _consignacion.TipoComprobante = (int)Entidades.Enums.TipoComprobanteEnum.RemitosConsignacCliente;
            _consignacion.Observaciones   = TxtObservacion.Text;
            _consignacion.FechaAlta       = _clock.Now;
            _consignacion.SucursalAltaId  = Context.SucursalActual.Id; //Sucursal del operador
            _consignacion.OperadorAltaId  = Context.OperadorActual.Id; //Id el operador

            Uow.RemitosVentas.Agregar(_consignacion);


            //CONSIGNACION DETALLE
            foreach (var titulo in ucTitulosVenta.Titulos)
            {
                //Descontar stock
                var tituloStock =
                    Uow.TitulosStock.Obtener(ts => ts.TituloId == titulo.TituloId && ts.SucursalId == Context.SucursalActual.Id);
                var cantidadAVender = titulo.Cantidad;
                int?cantpropia      = 0;
                int?cantconsiganda  = 0;

                if (tituloStock.StkPr > 0)
                {
                    if (tituloStock.StkPr >= cantidadAVender)
                    {
                        tituloStock.StkPr -= cantidadAVender;
                        cantpropia         = cantidadAVender;
                        cantidadAVender    = 0;
                    }
                    else
                    {
                        cantpropia        = tituloStock.StkPr;
                        cantidadAVender  -= tituloStock.StkPr;
                        tituloStock.StkPr = 0;
                    }
                }

                if (cantidadAVender > 0 && tituloStock.StkCn > 0)
                {
                    if (tituloStock.StkCn >= cantidadAVender)
                    {
                        tituloStock.StkCn -= cantidadAVender;
                        cantconsiganda     = cantidadAVender;
                    }
                    else
                    {
                        _messageBoxDisplayService.ShowError("No hay suficiente stock para completar la consignación");
                        return;
                        //Deberia cancelar la venta completa
                    }
                }

                Uow.TitulosStock.Modificar(tituloStock);

                RemitosVentaDetalle remitoDetalle = new RemitosVentaDetalle();
                remitoDetalle.Id             = Guid.NewGuid();
                remitoDetalle.RemitoVentaId  = _consignacion.Id;
                remitoDetalle.TituloId       = titulo.TituloId;
                remitoDetalle.CntPr          = cantpropia;
                remitoDetalle.CntCn          = cantconsiganda;
                remitoDetalle.PrecioVenta    = titulo.PrecioVenta;
                remitoDetalle.PrecioBase     = titulo.PrecioBase;
                remitoDetalle.Descuento      = titulo.Descuento;
                remitoDetalle.FechaAlta      = _clock.Now;
                remitoDetalle.SucursalAltaId = Context.SucursalActual.Id;   //Sucursal del operador
                remitoDetalle.OperadorAltaId = (Context.OperadorActual.Id); //Id el operador

                Uow.RemitosVentasDetalle.Agregar(remitoDetalle);
            }

            Uow.Commit();

            _messageBoxDisplayService.ShowSuccess(Resources.MessageSuccessConsignacionExitosa);

            using (var crearConsignacion = FormFactory.Create <FrmComprobanteConsignacion>(_consignacion.Id))
            {
                crearConsignacion._descripcion = _consignacion.Concepto;
                crearConsignacion._formaPago   = "CONSIGNACION";
                crearConsignacion._recargo     = "";

                crearConsignacion.ShowDialog();
            }

            var pageTab = this.Parent as RadPageViewPage;

            if (pageTab != null)
            {
                pageTab.Dispose();
            }
            ;
        }