Ejemplo n.º 1
0
        private void ActualizarSeniasCliente(VentaDataBase ventaData, CrearVentaResponse reponse)
        {
            //Actulizar señas de cliente
            var monto = ventaData.Senas;
            var clientesMontosFavor = Uow.ClientesMontosFavor.Listado().Where((cm => cm.ClienteId == ventaData.ClienteId
                                                                               &&
                                                                               cm.TipoComprobanteId ==
                                                                               TipoComprobanteEnum.SeñaCliente &&
                                                                               cm.SucursalAltaId == ventaData.SucursalId &&
                                                                               !cm.FechaAnulacion.HasValue &&
                                                                               cm.ImpOcupado < cm.Importe))
                                      .OrderBy(cmf => cmf.FechaAlta)
                                      .ToList();


            foreach (ClienteMontoFavor clienteMontoFavor in clientesMontosFavor)
            {
                if (monto != null)
                {
                    if (monto > 0)
                    {
                        if ((clienteMontoFavor.Importe - clienteMontoFavor.ImpOcupado) >= monto)
                        {
                            clienteMontoFavor.ImpOcupado += monto;
                            monto = 0;
                        }
                        else
                        {
                            monto -= (clienteMontoFavor.Importe - clienteMontoFavor.ImpOcupado);
                            clienteMontoFavor.ImpOcupado = clienteMontoFavor.Importe;
                        }

                        clienteMontoFavor.FechaModificacion      = _clock.Now;
                        clienteMontoFavor.OperadorModificacionId = ventaData.OperadorId;
                        clienteMontoFavor.SucursalAltaId         = ventaData.SucursalId;

                        Uow.ClientesMontosFavor.Modificar(clienteMontoFavor);

                        if (clienteMontoFavor.Importe != clienteMontoFavor.ImpOcupado)
                        {
                            reponse.Comprobantes.Add(new ComprobanteVenta()
                            {
                                Concepto   = "Actualización de seña",
                                LCN        = clienteMontoFavor.LCN,
                                Importe    = clienteMontoFavor.Importe,
                                ImpOcupado = clienteMontoFavor.ImpOcupado
                            });
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void ProcesarPagoCuentaCorriente(VentaDataBase ventaData, CrearVentaResponse reponse, Venta venta)
        {
            var cuotas = ventaData.Cuotas;

            reponse.FacturaInfo.Descripcion += "Cuotas: " + cuotas + " de: $" + ventaData.Montocuota.ToString();
            for (int i = 1; i <= cuotas; i++)
            {
                ClienteCuentaCorriente clienteCuentaCorriente = new ClienteCuentaCorriente();
                clienteCuentaCorriente.Id        = Guid.NewGuid();
                clienteCuentaCorriente.VentaId   = venta.Id;
                clienteCuentaCorriente.ClienteId = ventaData.ClienteId;
                clienteCuentaCorriente.Cuota     = (byte)i;
                clienteCuentaCorriente.Fecha     = _clock.Now;
                DateTime venc = ventaData.VencimientoCuota;
                clienteCuentaCorriente.FechaVencimiento = venc.AddMonths(i - 1);
                clienteCuentaCorriente.Importe          = ventaData.Montocuota;
                clienteCuentaCorriente.Pagado           = 0;
                clienteCuentaCorriente.FechaGeneracion  = _clock.Now;
                clienteCuentaCorriente.FechaAlta        = _clock.Now;
                clienteCuentaCorriente.SucursalAltaId   = ventaData.SucursalId;
                clienteCuentaCorriente.OperadorAltaId   = ventaData.OperadorId;
                Uow.ClientesCuentasCorrientes.Agregar(clienteCuentaCorriente);
            }
        }
Ejemplo n.º 3
0
        public CrearVentaResponse CrearVenta(CrearVentaData ventaData)
        {
            CrearVentaResponse reponse = new CrearVentaResponse();

            var venta = AgregarVenta(ventaData);

            foreach (var titulo in ventaData.Titulos)
            {
                //Descontar stock
                var tituloStock =
                    Uow.TitulosStock.Obtener(ts => ts.TituloId == titulo.TituloId && ts.SucursalId == ventaData.SucursalId);
                var cantidadAVender = titulo.Cantidad;
                int?cantpropia      = 0;
                int?cantconsiganda  = 0;
                int actualPr        = tituloStock.StkPr ?? 0;
                int actualCn        = tituloStock.StkCn ?? 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 > 0)
                    {
                        tituloStock.StkCn -= cantidadAVender;
                        cantconsiganda     = cantidadAVender;
                    }
                    else
                    {
                        throw new ApplicationException("No hay suficiente stock para completar la venta");
                    }
                }
                titulo.CantidadPropia     = cantpropia;
                titulo.CantidadConsignada = cantconsiganda;

                AgregarTitulosMovimientos(ventaData, titulo, venta.Id, actualPr, actualCn);

                Uow.TitulosStock.Modificar(tituloStock);


                AgregarVentaDetalle(venta, ventaData.SucursalId, ventaData.OperadorId,
                                    titulo.TituloId, titulo.Cantidad, titulo.SubTotal,
                                    titulo.PrecioBase, titulo.Descuento, cantpropia, cantconsiganda);

                if (titulo.CantidadConsignada > 0 && cantconsiganda > 0)
                {
                    AgregarTitulosConsignacionVendida(ventaData, titulo.TituloId, titulo.ProveedorId, venta, cantconsiganda);

                    ActualizarTitulosConsignaciones(ventaData, titulo.TituloId, titulo.ProveedorId, cantconsiganda);
                }
            }

            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);
        }
Ejemplo n.º 4
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);
        }