예제 #1
0
        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;
                    }
                }

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