private void RealizarVenta() { CrearVentaData ventaData = new CrearVentaData(); ventaData.EsVentaReservada = _formMode == ActionFormMode.Edit; ventaData.OperadorId = Context.OperadorActual.Id; ventaData.SucursalId = Context.SucursalActual.Id; ventaData.NumeroComprobante = _id; ventaData.ClienteId = _cliente.Id; ventaData.TipoComprobanteSeleccionado = UcBuscadorCliente.TipoComprobanteSeleccionado; ventaData.CondicionVentaSeleccionada = UcBuscadorCliente.CondicionVentaSeleccionada; ventaData.TipoCajaMovimientoSeleccionado = UcBuscadorCliente.TipoCajaMovimientoSeleccionado; ventaData.TotalPagar = UcTotalesVenta.TotalPagar; ventaData.Senas = UcTotalesVenta.Senas; ventaData.CreditosDevolucion = UcTotalesVenta.CreditosDevolucion; ventaData.Titulos = UcTitulosVenta.Titulos; ventaData.CajaActualId = Context.CajaActual.Id; ventaData.Anticipo = UcCuentaCorrienteInfo.Anticipo; //ventaData.SubTotal = UcCuentaCorrienteInfo.SubTotal; ventaData.SubTotal = UcTotalesVenta.SubTotal; ventaData.Pagos = UcTotalesVenta.Pagos; ventaData.Cuotas = UcCuentaCorrienteInfo.Cuotas; ventaData.Montocuota = UcCuentaCorrienteInfo.Montocuota; ventaData.VencimientoCuota = UcCuentaCorrienteInfo.Vencimiento; ventaData.PcAlta = Environment.MachineName; ventaData.PuntoVenta = Context.SucursalActual.SucursalNumero ?? 1; CrearVentaResponse ventaResponse; try { ventaResponse = _ventaNegocio.CrearVenta(ventaData); } catch (ApplicationException ex) { _messageBoxDisplayService.ShowError(ex.Message); return; } 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.Descripcion = ventaResponse.FacturaInfo.Descripcion; _directPrint.FormaPago = ventaResponse.FacturaInfo.FormaPago; _directPrint.Recargo = UcTotalesVenta.Recargo.ToString(); _directPrint.GenerarFactura(ventaResponse.VentaId); } using (var crearVenta = FormFactory.Create<FrmFacturaVenta>(ventaResponse.VentaId)) { crearVenta._descripcion = ventaResponse.FacturaInfo.Descripcion; crearVenta._formaPago = ventaResponse.FacturaInfo.FormaPago; crearVenta._recargo = UcTotalesVenta.Recargo.ToString(); crearVenta.ShowDialog(); } OnVentaRealizada(); if (_formMode == ActionFormMode.Edit) { this.Close(); } //LimpiarFormularioVenta(); }
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; }