예제 #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 RealizarVenta()
        {
            RendirConsignacionClienteData consignacionData = new RendirConsignacionClienteData();

            consignacionData.EsVentaReservada = _formMode == ActionFormMode.Edit;
            consignacionData.OperadorId = Context.OperadorActual.Id;
            consignacionData.SucursalId = Context.SucursalActual.Id;
            consignacionData.NumeroComprobante = _id;
            consignacionData.ClienteId = _cliente.Id;

            consignacionData.TipoComprobanteSeleccionado = UcBuscadorConsignacion.TipoComprobanteSeleccionado;
            consignacionData.CondicionVentaSeleccionada = UcBuscadorConsignacion.CondicionVentaSeleccionada;
            consignacionData.TipoCajaMovimientoSeleccionado = UcBuscadorConsignacion.TipoCajaMovimientoSeleccionado;

            consignacionData.TotalPagar = UcTotalesVenta.TotalPagar;
            consignacionData.Senas = UcTotalesVenta.Senas;
            consignacionData.CreditosDevolucion = UcTotalesVenta.CreditosDevolucion;

            UcTitulosConsignacionVenta.ActualizarInfo();
            consignacionData.RemitosVentaDetalle = UcTitulosConsignacionVenta.Titulos;

            consignacionData.CajaActualId = Context.CajaActual.Id;
            consignacionData.Anticipo = UcCuentaCorrienteInfo.Anticipo;
            //consignacionData.SubTotal = UcCuentaCorrienteInfo.SubTotal;
            consignacionData.SubTotal = UcTotalesVenta.SubTotal;

            consignacionData.Pagos = UcTotalesVenta.Pagos;
            consignacionData.Cuotas = UcCuentaCorrienteInfo.Cuotas;
            consignacionData.Montocuota = UcCuentaCorrienteInfo.Montocuota;
            consignacionData.VencimientoCuota = UcCuentaCorrienteInfo.Vencimiento;
            consignacionData.PcAlta = Environment.MachineName;
            consignacionData.PuntoVenta = Context.SucursalActual.SucursalNumero ?? 1;

            CrearVentaResponse ventaResponse;

            try
            {
                ventaResponse = _ventaNegocio.CrearVentaRendicionConsignacionCliente(consignacionData);
            }
            catch (ApplicationException ex)
            {
                _messageBoxDisplayService.ShowError(ex.Message);
                return;
            }

            //if (ventaResponse.Comprobantes.Count != 0)
            //{
                foreach (var comprobante in ventaResponse.Comprobantes)
                {
                    using (var crearComprobante = FormFactory.Create<FrmComprobante>())
                    {
                        crearComprobante._concepto = comprobante.Concepto;
                        crearComprobante._LCN = comprobante.LCN;
                        var conv = new Conversion();
                        crearComprobante._montoTexto = conv.enletras((comprobante.Importe - comprobante.ImpOcupado).ToString());
                        crearComprobante._montoActualizado = (comprobante.Importe - comprobante.ImpOcupado);
                        crearComprobante.ShowDialog();
                    }
                }

              //  _messageBoxDisplayService.ShowSuccess(Resources.MessageSuccessVentaExitosa);

                if (ChkImprimir.Checked)
                {
                    DirectPrint print = new DirectPrint(Uow);
                    print.Descripcion = ventaResponse.FacturaInfo.Descripcion;
                    print.FormaPago = ventaResponse.FacturaInfo.FormaPago;
                    print.Recargo = UcTotalesVenta.Recargo.ToString();
                    print.GenerarFactura(ventaResponse.VentaId);
                }

                using (var crearVenta = FormFactory.Create<FrmFacturaVenta>(ventaResponse.VentaId))
                {
                    if (ventaResponse.VentaId!=Guid.Empty)
                    {
                        crearVenta._descripcion = ventaResponse.FacturaInfo.Descripcion;
                        crearVenta._formaPago = ventaResponse.FacturaInfo.FormaPago;
                        crearVenta._recargo = UcTotalesVenta.Recargo.ToString();

                        crearVenta.ShowDialog();   
                    }

                    
                }

                OnVentaRealizada();
            //}
            //else
            //{
                _messageBoxDisplayService.ShowSuccess("Rendición guardada con éxito");
            //}

            var pageTab = this.Parent as RadPageViewPage;
            if (pageTab != null)
            {
                pageTab.Dispose();
            };

            if (_formMode == ActionFormMode.Edit)
            {
                this.Close();
            }
        }
예제 #3
0
        public CrearVentaResponse CrearVentaRendicionConsignacionCliente(RendirConsignacionClienteData ventaData)
        {
            CrearVentaResponse reponse = new CrearVentaResponse();

            var existeVenta =
                    ventaData.RemitosVentaDetalle.Any(r => r.CntVendida.HasValue && r.CntVendida.Value != 0);

            var existeDevolucion =
                ventaData.RemitosVentaDetalle.Any(r => r.CntDevuelta.HasValue && r.CntDevuelta.Value != 0);

            if(!existeVenta && existeDevolucion)
            {
                foreach (var remitoVentaDetalleActualizado in ventaData.RemitosVentaDetalle)
                {
                    var remitoVentaDetalle =
                        Uow.RemitosVentasDetalle.Obtener(r => r.Id == remitoVentaDetalleActualizado.Id);

                    AumentarStockConCantidadDevuelta(ventaData, remitoVentaDetalleActualizado, remitoVentaDetalle);
                    //Actualizar remito venta.
                    remitoVentaDetalle.CntVendida = remitoVentaDetalle.CntVendida ?? 0;
                    remitoVentaDetalle.CntDevuelta = remitoVentaDetalle.CntDevuelta ?? 0;
                    remitoVentaDetalle.CntVendida += remitoVentaDetalleActualizado.CntVendida;
                    remitoVentaDetalle.CntDevuelta += remitoVentaDetalleActualizado.CntDevuelta;

                    Uow.RemitosVentasDetalle.Modificar(remitoVentaDetalle);

                    Uow.Commit();

                    //return reponse;
                }
                return reponse;
            }

            var venta = AgregarVenta(ventaData);

            foreach (var remitoVentaDetalleActualizado in ventaData.RemitosVentaDetalle)
            {
                var remitoVentaDetalle = Uow.RemitosVentasDetalle.Obtener(r => r.Id == remitoVentaDetalleActualizado.Id);

                var cantidadVendidaPropia =
                    remitoVentaDetalle.CalcularNuevaCantidadVendidaPropia(remitoVentaDetalleActualizado.CntVendida.GetValueOrDefault());

                var cantidadVendidaConsignacion =
                    remitoVentaDetalle.CalcularNuevaCantidadVendidaConsignacion(remitoVentaDetalleActualizado.CntVendida.GetValueOrDefault());

                
                AumentarStockConCantidadDevuelta(ventaData, remitoVentaDetalleActualizado, remitoVentaDetalle);
                //Actualizar remito venta.
                remitoVentaDetalle.CntVendida = remitoVentaDetalle.CntVendida ?? 0;
                remitoVentaDetalle.CntDevuelta = remitoVentaDetalle.CntDevuelta ?? 0;
                remitoVentaDetalle.CntVendida += remitoVentaDetalleActualizado.CntVendida;
                remitoVentaDetalle.CntDevuelta += remitoVentaDetalleActualizado.CntDevuelta;

                Uow.RemitosVentasDetalle.Modificar(remitoVentaDetalle);


                //var cantidadVendidaPropia =
                //    remitoVentaDetalle.CalcularNuevaCantidadVendidaPropia(remitoVentaDetalleActualizado.CntVendida.GetValueOrDefault());

                //var cantidadVendidaConsignacion =
                //    remitoVentaDetalle.CalcularNuevaCantidadVendidaConsignacion(remitoVentaDetalleActualizado.CntVendida.GetValueOrDefault());

                if (remitoVentaDetalleActualizado.CntVendida > 0)
                {
        
                    AgregarVentaDetalle(venta, ventaData.SucursalId, ventaData.OperadorId,
                        remitoVentaDetalleActualizado.TituloId, remitoVentaDetalleActualizado.Cantidad,
                        remitoVentaDetalleActualizado.SubTotal,
                        remitoVentaDetalleActualizado.PrecioBase, remitoVentaDetalleActualizado.Descuento,
                        cantidadVendidaPropia, cantidadVendidaConsignacion);
                
                    if (cantidadVendidaConsignacion > 0)
                    {
                        var titulo = Uow.Titulos.Obtener(t => t.Id == remitoVentaDetalleActualizado.TituloId);

                        if (titulo != null)
                        {
                            AgregarTitulosConsignacionVendida(ventaData, titulo.Id, titulo.ProveedorId, venta, cantidadVendidaConsignacion);

                            ActualizarTitulosConsignaciones(ventaData, titulo.Id, titulo.ProveedorId, cantidadVendidaConsignacion);
                        }
                    }
                }
            }

            var caja = ActualizarCajaActual(ventaData, venta);

            var cajaMovimiento = CrearCajaMovimiento(ventaData, caja, venta);

            reponse.FacturaInfo.Descripcion += "Seña  $" + cajaMovimiento.Senia + ". ";

            foreach (var pago in ventaData.Pagos)
            {
                switch (pago.TipoPago)
                {
                    case FormaPago.Efectivo:
                        cajaMovimiento.Efectivo = pago.Importe;
                        reponse.FacturaInfo.FormaPago += "Efectivo $" + pago.Importe + ". ";
                        break;
                    case FormaPago.Tarjeta:
                        ProcesarPagoTarjeta(ventaData, pago, cajaMovimiento);
                        reponse.FacturaInfo.FormaPago += "Tarjeta " + pago.Descripcion + " $" + pago.Importe + ". ";
                        break;
                    case FormaPago.Cheque:
                        ProcesarPagoCheque(ventaData, pago, cajaMovimiento);
                        reponse.FacturaInfo.FormaPago += "Cheque " + pago.Descripcion + " $" + pago.Importe + ". ";
                        break;
                    case FormaPago.Deposito:
                        ProcesarPagoDeposito(ventaData, pago, cajaMovimiento, venta, caja);
                        reponse.FacturaInfo.FormaPago += "Deposito " + pago.Descripcion + " $" + pago.Importe + ". ";
                        break;

                    case FormaPago.CuentaCorriente:
                        ProcesarPagoCuentaCorriente(ventaData, reponse, venta);
                        reponse.FacturaInfo.Descripcion = "Anticipo $" + ventaData.Anticipo + ". " + reponse.FacturaInfo.Descripcion;
                        break;
                }
            }

            Uow.CajaMovimientos.Agregar(cajaMovimiento);

            AgregarClienteMovimiento(ventaData, venta);

            if (!ventaData.EsVentaReservada)
                AumentarNumeroFactura(ventaData.OperadorId, ventaData.SucursalId);

            ActualizarSeniasCliente(ventaData, reponse);

            ActualizarCreditosAFavorCliente(ventaData, reponse);

            reponse.VentaId = venta.Id;

            Uow.Commit();

            return reponse;
        }