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

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

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