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