public static EMedioPago InstanciarDesde(DataRow registro) { if (registro == null) { throw new ApplicationException("Registro nulo o contiene campos nulos."); } var a = new EMedioPago( (string)registro["id_medio_pago"], (string)registro["tipo"], (string)registro["sub_tipo"], (byte)registro["solicita_autorizacion"], (byte)registro["solicita_banco"], (byte)registro["solicita_documento"], (byte)registro["solicita_fanqueo"], (byte)registro["solicita_nro_meses"], (byte)registro["permite_cambio"], (int)registro["valor_limite_cambio"], (decimal)registro["pctj_limite_cambio"], (string)registro["formato_franqueo"], (byte)registro["verifica_pago"], (byte)registro["abre_cajon"], (byte)registro["credito"] ); return(a); }
/// <summary> /// Constructor que instancia una factura. /// </summary> /// <param name="precioParcial">Precio parcial de la facutura.No es el final a cobrar.</param> /// <param name="medioPago">Medio de pago con el que se hace la compra.</param> public Factura(float precioParcial, EMedioPago medioPago) { this.nroFactura = new Random().Next(100, 10000); this.precioParcial = precioParcial; this.medioPago = medioPago; this.precioTotal = this.CalcularPrecio(); }
public Pedidos(EHamburguesas producto, EMedioPago pago, string domicilio, string numeroContacto) : this() { this.producto = producto; this.pago = pago; this.domicilio = domicilio; this.numeroContacto = numeroContacto; }
public static List <EMedioPago> ListarMedioPago() { List <EMedioPago> lista = new List <EMedioPago>(); using (SqlConnection cn = new SqlConnection(DConexion.Get_Connection(DConexion.DataBase.CnLasVegas))) { SqlCommand cmd = new SqlCommand("USP_LISTAR_MEDIO_PAGO", cn); cmd.CommandType = CommandType.StoredProcedure; cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { EMedioPago mItem = new EMedioPago(); mItem.ID_MEDIO_PAGO = dr.IsDBNull(dr.GetOrdinal("ID_MEDIO_PAGO")) ? 0 : dr.GetInt32(dr.GetOrdinal("ID_MEDIO_PAGO")); mItem.DESCRIPCION = dr.IsDBNull(dr.GetOrdinal("DESCRIPCION")) ? string.Empty : dr.GetString(dr.GetOrdinal("DESCRIPCION")); lista.Add(mItem); } } } return(lista); }
/// <summary> /// Constructor necesario para crear los objetos de tipo Factura traídos de la base de datos. /// Recibe un atributo por cada camo de la tabla. /// </summary> public Factura(int id, int nroFactura, float precioParcial, EMedioPago medioPago, float precioTotal) { this.id = id; this.nroFactura = nroFactura; this.precioParcial = precioParcial; this.medioPago = medioPago; this.precioTotal = precioTotal; }
public static bool NeedsCuentaBancaria(EMedioPago medio) { return((medio == EMedioPago.Cheque) || (medio == EMedioPago.Pagare) || (medio == EMedioPago.Transferencia) || (medio == EMedioPago.Giro) || (medio == EMedioPago.Ingreso) || (medio == EMedioPago.Domiciliacion) || (medio == EMedioPago.ComercioExterior) || (medio == EMedioPago.Tarjeta)); }
protected void SetMedioPago(EMedioPago selection) { switch (selection) { case EMedioPago.Efectivo: _entity.OidTpv = 0; _entity.TPV = string.Empty; TPV_BT.Enabled = false; break; case EMedioPago.Tarjeta: TPV_BT.Enabled = true; break; } }
public static InputInvoiceList GetPendientesList(DateTime expirationFrom, DateTime expirationTill, EMedioPago paymentMethod, bool childs) { QueryConditions conditions = new QueryConditions { TipoFacturas = ETipoFacturas.Pendientes, FechaAuxIni = expirationFrom, FechaAuxFin = expirationTill, MedioPago = paymentMethod }; return(GetList(InputInvoiceSQL.SELECT(conditions), childs)); }
public void GuardarRecogida(ERecogida recogida, ref Dictionary <string, string> IdsAcumulados, string tipo, ETerminal terminal, EUsuario usuario, EMedioPago medioPago, string contenido, string modeloImpresora, out Respuesta respuesta) { //1. Creamos el encabezado de la venta. string idVenta = Guid.NewGuid().ToString(); RRecogida rRecogida = new RRecogida(); respuesta = new Respuesta(false); try { using (TransactionScope scope = new TransactionScope()) { if (rRecogida.CrearRecogida(idVenta, recogida.Valor, terminal.Codigo, tipo, 1, terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, usuario.IdUsuario) == 1) { rRecogida.CrearVentaRecogida(recogida.CodigoRecogida.Codigo, recogida.CodigoRecogida.Descripcion, idVenta); //3. Creamos totales de venta(registro_venta). if (IdsAcumulados == null) { IdsAcumulados = new Dictionary <string, string>(); IdsAcumulados.Add("idRegistroVenta", Guid.NewGuid().ToString()); //Creamos el registro venta rRecogida.CrearRegistroVenta(IdsAcumulados["idRegistroVenta"], terminal.Codigo, usuario.IdUsuario); } //Actualizo registro venta rRecogida.ActualizarRegistroVenta(IdsAcumulados["idRegistroVenta"], recogida.Valor); //4. Creamos el detalle de los medios de pago. //List<EPago> pagos = re // prestamo.Pagos; rRecogida.CrearMedioPago(medioPago.Codigo, terminal.Codigo, (long)terminal.NumeroUltimaTransaccion + 1, recogida.Valor, idVenta); //Actualizamos el terminal rRecogida.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura, (long)terminal.NumeroUltimaTransaccion + 1); rVenta.ActualizarTerminal(terminal.Codigo, (long)terminal.NumeroUltimaFactura, (long)terminal.NumeroUltimaTransaccion + 1); rVenta.CrearCopiaImpresion("00", terminal.Localidad.Codigo, terminal.Codigo, tipo, usuario.IdUsuario, contenido, terminal.Localidad.Codigo, modeloImpresora, (long)terminal.NumeroUltimaFactura, (int)terminal.NumeroUltimaTransaccion + 1, terminal.Prefijo, terminal.Codigo, tipo, usuario.IdUsuario); respuesta.Valida = true; respuesta.Mensaje = idVenta; } else { throw new Exception("[GuardarRecogida]: Transaccion no pudo ser guardada."); } scope.Complete(); } } catch (SqlException e) { if (e.Number == -2 || e.Number == 121) { respuesta.Valida = false; respuesta.Mensaje = "Se perdió la conexión con el servidor."; log.Error("[GuardarRecogida]: No pudo ser guardada la transaccion: " + e.Message); } else { respuesta.Valida = false; respuesta.Mensaje = "Hubo un problema al momento de guardar la transaccion. Por favor contacte al administrador del sistema."; log.Error("[Guardarrecogida]: No pudo ser guardada la venta: " + e.Message); } Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } catch (Exception ex) { respuesta.Documentar(false, " No pudo ser guardada la recogida."); log.Error("[GuardarRecogida]: No pudo ser guardada la recogida. " + ex.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(ex)); } }
public Pedidos(EHamburguesas producto, int id, EMedioPago pago, string domicilio, string numeroContacto) : this(producto, pago, domicilio, numeroContacto) { this.Id = id; }
public Venta(float monto, List <Producto> productos, EMedioPago pago) : this(monto, productos) { this.Pago = pago; }
public override void Ejecutar() { string jsonCopiaVenta = JsonConvert.SerializeObject(Entorno.Instancia.Venta, Formatting.Indented); var copiaImpuestosIncluidos = Entorno.Instancia.Venta.ImpuestosIncluidos; try { Respuesta respuesta = new Respuesta(false); Core.Solicitudes.SolicitudVolver volver = new Core.Solicitudes.SolicitudVolver(Core.Enums.Solicitud.Volver); if (Entorno.Instancia.Venta.Pagos.IsNullOrEmptyList()) { Reactor.Instancia.Procesar(volver); return; } if (Entorno.Instancia.Venta.Pagos.Sum(x => x.Valor) == 0) { Reactor.Instancia.Procesar(volver); return; } if (Pago == null) { return; } // decimal valorCancelado = Pago.ValorMedioPago; if (valorCancelado < 0) { Entorno.Instancia.Vista.PanelPago.VisorMensaje = "No se puede cancelar el último pago"; // Reactor.Instancia.Procesar(volver); return; } else if (valorCancelado > 0) { decimal valor = Entorno.Instancia.Venta.PorPagar + valorCancelado; if (valor > Entorno.Instancia.Venta.TotalVenta) { Entorno.Instancia.Vista.PanelPago.VisorMensaje = "No se puede cancelar el pago seleccionado"; Reactor.Instancia.Procesar(volver); return; } } // EMedioPago medioPago = null; EPago ePago = null; if (Pago != null) { medioPago = new PMediosPago().GetAllMediosPago().MedioPago(Pago.CodigoMedioPago); } else { medioPago = new PMediosPago().GetAllMediosPago().MedioPago("1"); } ePago = new EPago(medioPago, -valorCancelado); Entorno.Instancia.Venta.AgregarPago(medioPago, ePago, out respuesta); // agregar a lista de .medio de pago Entorno.Instancia.Vista.PanelPago.AgregarMedioPagoUI(new DTOs.DItemMedioPago { CodigoMedioPago = ePago.MedioPago.Codigo, NombreMedioPago = ePago.MedioPago.Tipo, ValorMedioPago = ePago.Valor }); // Telemetria.Instancia.AgregaMetrica(new Evento("CancelarPago").AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("Valor", (ePago.Valor))); log.InfoFormat("[CmdCancelarPago] Pago Cancelado: {0}, Transacción: {1}, Factura {2}", ePago.Valor, (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); if (!respuesta.Valida) { throw new Exception(respuesta.Mensaje); } // iu.PanelVentas.VisorCliente.Total = Entorno.Instancia.Venta.PorPagar; iu.PanelPago.VisorCliente.Total = Entorno.Instancia.Venta.PorPagar; iu.PanelPago.VisorEntrada = string.Empty; iu.PanelPago.VisorMensaje = ""; // Reactor.Instancia.Procesar(volver); if (respuesta.Valida) { iu.MostrarDisplayCliente(DisplayCliente.FinVenta); } } catch (Exception ex) { // Telemetria.Instancia.AgregaMetrica(new Excepcion(ex)); log.ErrorFormat("[CmdCancelarPago] {0}", ex.Message); // iu.PanelOperador.MensajeOperador = ex.Message; EVenta copiaVenta = JsonConvert.DeserializeObject <EVenta>(jsonCopiaVenta); Entorno.Instancia.Venta = copiaVenta; Entorno.Instancia.Venta.ImpuestosIncluidos = copiaImpuestosIncluidos; } }
/// <summary> /// /// </summary> public override void Ejecutar() { log.Info("[CmdPagarVenta] Pago Ingresado: " + solicitud.ValorEntrada); bool implementaImpuestoCompuesto = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.definicion_impuesto_compuesta"); bool obligaIngresarValor = Entorno.Instancia.Parametros.ObtenerValorParametro <bool>("pdv.pago.obliga_ingresar_valor"); //copia de seguridad de venta por si algo falla. string jsonCopiaVenta = JsonConvert.SerializeObject(Entorno.Instancia.Venta, Formatting.Indented); //string jsonCopiaImpuestos = JsonConvert.SerializeObject(Entorno.Instancia.Venta.ImpuestosIncluidos, Formatting.Indented); var copiaImpuestosIncluidos = Entorno.Instancia.Venta.ImpuestosIncluidos; try { #region valida entrada de pago //obtiene el valor ingresado para pagar la venta. decimal pago = -1; string entrada = solicitud.ValorEntrada; if (string.IsNullOrEmpty(entrada)) { if (this.solicitud.Pago != null) { pago = this.solicitud.Pago.Valor; if (pago == 0) { pago = Entorno.Instancia.Vista.PanelPago.VisorCliente.Total; this.solicitud.Pago.Valor = pago; } } else { if (obligaIngresarValor) { Entorno.Instancia.Vista.PanelOperador.MensajeOperador = "Debe ingresar un valor a pagar."; log.Warn("Se obliga a ingresar un valor a pagar."); // Solicitudes.SolicitudPanelPago solVolver = new Solicitudes.SolicitudPanelPago(Enums.Solicitud.Pagar, "Debe ingresar un valor a pagar."); Reactor.Instancia.Procesar(solVolver); return; } else { //Toma el total de la venta. pago = Entorno.Instancia.Vista.PanelPago.VisorCliente.Total; } } } else { if (entrada == "VentaPagada") { //Se calcula el total ($) de artículos cancelados + el total de pagos realizados. log.Info("La venta ha sido pagada, se finaliza de la venta."); decimal totalPagos = (Entorno.Instancia.Venta.Pagos.Sum(p => p.Valor)); pago = totalPagos; } else if (!decimal.TryParse(entrada, out pago)) { log.Warn("El valor ingresado no es válido"); Entorno.Instancia.Vista.PanelPago.VisorMensaje = "El valor ingresado no es válido"; } } if (pago <= 0) { log.WarnFormat("Monto no válido [{0}]", pago); Entorno.Instancia.Vista.PanelPago.VisorMensaje = "Monto no válido"; // SolicitudPanelPago volver = new SolicitudPanelPago(Enums.Solicitud.Pagar, "Monto no válido"); Reactor.Instancia.Procesar(volver); return; } else { this.ValorPago = pago; } #endregion //valida el total de la venta. //pago total de la venta Respuesta respuesta = new Respuesta(); if (this.ValorPago == Entorno.Instancia.Venta.PorPagar) { // EMedioPago medioPago = null; EPago ePago = null; if (this.solicitud.Pago != null) { ePago = this.solicitud.Pago; medioPago = ePago.MedioPago; } else { if (this.solicitud.TipoSolicitud == Solicitud.PagoEfectivo) { if (entrada != "VentaPagada") { var medioPagoEfectivo = Entorno.Instancia.MediosPago.Where(m => m.MedioPago == MediosPago.Efectivo); if (!medioPagoEfectivo.IsNullOrEmptyList()) { medioPago = new PMediosPago().GetAllMediosPago().MedioPago(medioPagoEfectivo.FirstOrDefault().CodigoMedioPago); ePago = new EPago(medioPago, this.ValorPago); } else { throw new Exception($"No se encontró medio de pago {MediosPago.Efectivo} configurado en entorno"); } } } else { log.Error($"La solicitud contiene un pago nulo o vacío y el medio de pago no efectivo. Solicitud: {this.solicitud}"); throw new Exception($"No se encontró medio de pago {MediosPago.Efectivo} configurado en entorno"); } } if (entrada != "VentaPagada") { Entorno.Instancia.Venta.AgregarPago(medioPago, ePago, out respuesta); if (respuesta.Valida) { Telemetria.Instancia.AgregaMetrica(new Evento("AgregarPago").AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("Valor", (ePago.Valor))); log.InfoFormat("[CmdPagarVenta] Pago Agregado: {0}, Transaccion: {1}, Factura {2}", ePago.Valor, (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); } else { log.WarnFormat("[CmdPagarVenta.Ejecutar] {0}", respuesta.Mensaje); return; } } else { Entorno.Instancia.Venta.PorPagar = 0; } //Validar saldo pendiente por pagar. if (Entorno.Instancia.Venta.PorPagar == 0) { Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; string factura = ProcesarPlantilla.Factura(Entorno.Instancia.Venta, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; PVenta venta = new PVenta(); //Log a azure string tirillaActual = ""; iu.PanelVentas.Tirilla.ForEach(x => { tirillaActual += Environment.NewLine; tirillaActual += String.Format("Código: {0}, Descripción: {1} ({4}), Cantidad: {2}, Precio: {3} ", x.Codigo, x.Descripcion, x.Cantidad, x.Subtotal, x.PrecioVentaUnidad); }); log.Info("Items tirilla:" + tirillaActual + Environment.NewLine + "Total: " + Entorno.Instancia.Venta.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Venta.NumeroDeItemsVenta + Environment.NewLine); // log.InfoFormat("[CmdPagarVenta] Venta Finalizada, Transaccion: {0}, Factura {1}", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); var tiempoGuardarVenta = new MetricaTemporizador("TerminarVentaFinalizada"); venta.GuardarVenta(Entorno.Instancia.Venta, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Venta).ToString(), factura, modeloImpresora, implementaImpuestoCompuesto, out respuesta); if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta).AgregarPropiedad("Error", respuesta.Mensaje)); throw new Exception(respuesta.Mensaje); } else { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta)); Entorno.Instancia.IdsAcumulados = idsAcumulados; // Entorno.Instancia.Venta.EstaAbierta = false; // respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); if (respuesta.Valida) { Entorno.Instancia.Terminal = terminal; string mensaje = string.Empty; //Valida si debe abrir cajón monedero. bool abreCajon = false; var mediosPagoEntorno = new PMediosPago().GetAllMediosPago().ListaMediosPago; var mediosPagoVenta = (from m in mediosPagoEntorno join mp in Entorno.Instancia.Venta.Pagos on m.Codigo.ToLower() equals mp.MedioPago.Codigo.ToLower() select m); //Verifica si hay algún medio de pago configurado para abrir cajón entre los pagos realizados. var mediosPagoAbreCajon = mediosPagoVenta.Where(m => m.AbreCajon); if (!mediosPagoAbreCajon.IsNullOrEmptyList()) { abreCajon = true; } else { if (medioPago != null) { abreCajon = medioPago.AbreCajon; } } //Imprimir Respuesta resImpresion = Entorno.Instancia.Impresora.Imprimir(factura, true, abreCajon); // LimpiarVentaFinalizada(); // if (!resImpresion.Valida) { Entorno.Vista.PanelOperador.MensajeOperador = resImpresion.Mensaje; } // log.Info("[CmdPagarVenta.Ejecutar] --> Transaccion finalizada."); // iu.PanelOperador.CodigoCliente = ""; // decimal valorCambio = Entorno.Instancia.Venta.PorPagar * -1; iu.PanelVentas.VisorCliente.Total = 0; iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0}", valorCambio.ToCustomCurrencyFormat()); try { Respuesta respuesta2; bool checkFactura = Entorno.Instancia.Terminal.VerificarLimiteNumeracion(out respuesta); bool checkFecha = Entorno.Instancia.Terminal.VerificarFechaAutorizacion(out respuesta2); if (respuesta.Valida && !(respuesta.Mensaje.Equals(""))) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - " + respuesta.Mensaje, valorCambio.ToCustomCurrencyFormat()); } else if (respuesta2.Valida && !(respuesta2.Mensaje.Equals(""))) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - " + respuesta2.Mensaje, valorCambio.ToCustomCurrencyFormat()); } decimal valorLimite = Entorno.Instancia.Parametros.ObtenerValorParametro <Decimal>("pdv.aviso_monto_max_en_caja"); decimal valorCaja = venta.DineroEnCaja(Entorno.Instancia.Terminal.Codigo, Entorno.Instancia.Usuario.IdUsuario, out respuesta); log.InfoFormat("[CmdPagarVenta.Ejecutar] --> Valor en caja : {0}, Valor máximo: {1}", valorCaja.ToCustomCurrencyFormat(), valorLimite.ToCustomCurrencyFormat()); if (valorCaja > valorLimite) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - Tope máximo en caja excedido", valorCambio.ToCustomCurrencyFormat()); } } catch (Exception e) { log.ErrorFormat("[CmdPagarVenta] {0}", e.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } // iu.MostrarPanelVenta(); } } } } else if (this.ValorPago < Entorno.Instancia.Venta.PorPagar) { // EMedioPago medioPago = null; EPago ePago = null; if (this.solicitud.Pago != null) { ePago = this.solicitud.Pago; medioPago = ePago.MedioPago; } else { medioPago = new PMediosPago().GetAllMediosPago().MedioPago("1"); ePago = new EPago(medioPago, this.ValorPago); } Entorno.Instancia.Venta.AgregarPago(medioPago, ePago, out respuesta); if (!respuesta.Valida) { log.WarnFormat("[CmdPagarVenta.Ejecutar.277] {0}", respuesta.Mensaje); return; } else { // agregar a lista de medio de pago Entorno.Instancia.Vista.PanelPago.AgregarMedioPagoUI(new DTOs.DItemMedioPago { CodigoMedioPago = ePago.MedioPago.Codigo, NombreMedioPago = ePago.MedioPago.Tipo, ValorMedioPago = ePago.Valor }); // iu.PanelVentas.VisorCliente.Total = Entorno.Instancia.Venta.PorPagar; iu.PanelPago.VisorCliente.Total = Entorno.Instancia.Venta.PorPagar; iu.PanelPago.VisorEntrada = string.Empty; iu.PanelPago.VisorMensaje = ""; // log.InfoFormat("[CmdPagarVenta] Medio de pago agregado. Valor: [{0}]", this.ValorPago.ToCustomCurrencyFormat()); if (Reactor.Instancia.EstadoFSMActual != EstadosFSM.Pago) { Solicitudes.SolicitudPanelPago solicitud = new Solicitudes.SolicitudPanelPago(Solicitud.Pagar); Reactor.Instancia.Procesar(solicitud); } //Valida si no está el panel de pago activo. if (!(iu.PanelActivo is IPanelPago)) { if (iu.PanelPagoManual != null) { iu.PanelPagoManual.LimpiarPagoFinalizado(); } if (Reactor.Instancia.EstadoFSMActual != EstadosFSM.Pago) { Solicitudes.SolicitudPanelPago solicitud = new Solicitudes.SolicitudPanelPago(Solicitud.Pagar); Reactor.Instancia.Procesar(solicitud); } } } } else if (this.ValorPago > Entorno.Instancia.Venta.PorPagar) { // EMedioPago medioPago = null; EPago ePago = null; if (this.solicitud.Pago != null) { ePago = this.solicitud.Pago; medioPago = ePago.MedioPago; } else { medioPago = new PMediosPago().GetAllMediosPago().MedioPago("1"); ePago = new EPago(medioPago, this.ValorPago); } Entorno.Instancia.Venta.AgregarPago(medioPago, ePago, out respuesta); if (!respuesta.Valida) { log.WarnFormat("[CmdPagarVenta.Ejecutar.329] {0}", respuesta.Mensaje); return; } else { //Validar saldo pendiente por pagar. if (Entorno.Instancia.Venta.PorPagar < 0) { Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; PVenta venta = new PVenta(); respuesta = new Respuesta(); // string factura = ProcesarPlantilla.Factura(Entorno.Instancia.Venta, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; // log.InfoFormat("[CmdPagarVenta] Venta Finalizada, Transaccion: {0}, Factura {1}", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); string tirillaActual = ""; iu.PanelVentas.Tirilla.ForEach(x => { tirillaActual += Environment.NewLine; tirillaActual += String.Format("Codigo: {0}, Descripción: {1} ({4}), Cantidad: {2}, Precio: {3} ", x.Codigo, x.Descripcion, x.Cantidad, x.Subtotal, x.PrecioVentaUnidad); }); log.Info("Items tirilla:" + tirillaActual + Environment.NewLine + "Total: " + Entorno.Instancia.Venta.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Venta.NumeroDeItemsVenta + Environment.NewLine); var tiempoGuardarVenta = new MetricaTemporizador("TerminarVentaFinalizada"); venta.GuardarVenta(Entorno.Instancia.Venta, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Venta).ToString(), factura, modeloImpresora, implementaImpuestoCompuesto, out respuesta); if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta)); throw new Exception(respuesta.Mensaje); } //Log a azure Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta)); // decimal valorCambio = Entorno.Instancia.Venta.PorPagar * -1; // Entorno.Instancia.Impresora.Imprimir(factura, true, medioPago.AbreCajon); // Entorno.Instancia.Venta.EstaAbierta = false; Entorno.Instancia.IdsAcumulados = idsAcumulados; // respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); Entorno.Instancia.Terminal = terminal; // LimpiarVentaFinalizada(); // iu.PanelOperador.CodigoCliente = ""; // iu.PanelVentas.VisorCliente.Total = 0; iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0}", valorCambio.ToCustomCurrencyFormat()); try { decimal valorLimite = Entorno.Instancia.Parametros.ObtenerValorParametro <Decimal>("pdv.aviso_monto_max_en_caja"); decimal valorCaja = venta.DineroEnCaja(Entorno.Instancia.Terminal.Codigo, Entorno.Instancia.Usuario.IdUsuario, out respuesta); log.InfoFormat("[CmdPagarVenta.Ejecutar] --> Valor en caja : {0}, Valor máximo: {1}", valorCaja.ToCustomCurrencyFormat(), valorLimite.ToCustomCurrencyFormat()); if (valorCaja > valorLimite) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - Tope máximo en caja excedido", valorCambio.ToCustomCurrencyFormat()); } } catch (Exception e) { log.ErrorFormat("[CmdPagarVenta] {0}", e.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } // log.InfoFormat("[CmdPagarVenta] --> Transaccion finalizada, cambio {0}", valorCambio.ToCustomCurrencyFormat()); iu.MostrarPanelVenta(); } } } else if (this.ValorPago == -1) { Dictionary <string, string> idsAcumulados = Entorno.Instancia.IdsAcumulados; PVenta venta = new PVenta(); respuesta = new Respuesta(); // string factura = ProcesarPlantilla.Factura(Entorno.Instancia.Venta, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario); string modeloImpresora = Entorno.Instancia.Impresora.Marca ?? "impresora"; // log.InfoFormat("[CmdPagarVenta] Venta Finalizada, Transaccion: {0}, Factura {1}", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1), (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)); string tirillaActual = ""; iu.PanelVentas.Tirilla.ForEach(x => { tirillaActual += Environment.NewLine; tirillaActual += String.Format("Codigo: {0}, Descripción: {1} ({4}), Cantidad: {2}, Precio: {3} ", x.Codigo, x.Descripcion, x.Cantidad, x.Subtotal, x.PrecioVentaUnidad); }); log.Info("Items tirilla:" + tirillaActual + Environment.NewLine + "Total: " + Entorno.Instancia.Venta.TotalVenta + Environment.NewLine + "Totales Impuestos: " + Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2]) + Environment.NewLine + "Cant Artículos Vendidos: " + Entorno.Instancia.Venta.NumeroDeItemsVenta + Environment.NewLine); var tiempoGuardarVenta = new MetricaTemporizador("TerminarVentaFinalizada"); venta.GuardarVenta(Entorno.Instancia.Venta, ref idsAcumulados, Entorno.Instancia.Terminal, Entorno.Instancia.Usuario, ((int)TipoTransaccion.Venta).ToString(), factura, modeloImpresora, implementaImpuestoCompuesto, out respuesta); if (respuesta.Valida == false) { Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.Para().AgregarPropiedad("Exitoso", false).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta)); throw new Exception(respuesta.Mensaje); } //Log a azure Telemetria.Instancia.AgregaMetrica(tiempoGuardarVenta.Para().AgregarPropiedad("Exitoso", true).AgregarPropiedad("Transaccion", (Entorno.Instancia.Terminal.NumeroUltimaTransaccion + 1)).AgregarPropiedad("Factura", (Entorno.Instancia.Terminal.NumeroUltimaFactura + 1)).AgregarPropiedad("TotalVenta", Entorno.Instancia.Venta.TotalVenta).AgregarPropiedad("TotalImpuestoVenta", Entorno.Instancia.Venta.ImpuestosIncluidos.Sum(x => x.Value[2])).AgregarPropiedad("NroArticulosVenta", Entorno.Instancia.Venta.NumeroDeItemsVenta)); // Entorno.Instancia.Impresora.Imprimir(factura, true, true); if (!string.IsNullOrEmpty(respuesta.Mensaje)) { Entorno.Vista.PanelOperador.MensajeOperador = respuesta.Mensaje; log.ErrorFormat("[CmdPagarVenta]: {0}", respuesta.Mensaje); } Entorno.Instancia.IdsAcumulados = idsAcumulados; // Entorno.Instancia.Venta.EstaAbierta = false; // respuesta = new Respuesta(false); ETerminal terminal = new PTerminal().BuscarTerminalPorCodigo(Common.Config.Terminal, out respuesta); Entorno.Instancia.Terminal = terminal; // LimpiarVentaFinalizada(); // decimal valorCambio = Entorno.Instancia.Venta.PorPagar * -1; iu.PanelVentas.VisorCliente.Total = 0; iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0}", valorCambio.ToCustomCurrencyFormat()); try { decimal valorLimite = Entorno.Instancia.Parametros.ObtenerValorParametro <Decimal>("pdv.aviso_monto_max_en_caja"); decimal valorCaja = venta.DineroEnCaja(Entorno.Instancia.Terminal.Codigo, Entorno.Instancia.Usuario.IdUsuario, out respuesta); log.InfoFormat("[CmdPagarVenta.Ejecutar] --> Valor en caja : {0}, Valor máximo: {1}", valorCaja.ToCustomCurrencyFormat(), valorLimite.ToCustomCurrencyFormat()); if (valorCaja > valorLimite) { iu.PanelVentas.VisorMensaje = string.Format("Cambio: {0} - Tope máximo en caja excedido", valorCambio.ToCustomCurrencyFormat()); } } catch (Exception e) { log.ErrorFormat("[CmdPagarVenta] {0}", e.Message); Telemetria.Instancia.AgregaMetrica(new Excepcion(e)); } log.InfoFormat("[CmdPagarVenta] --> Transaccion finalizada, cambio {0}", valorCambio.ToCustomCurrencyFormat()); // iu.PanelOperador.CodigoCliente = ""; iu.MostrarPanelVenta(); } if (respuesta.Valida) { iu.MostrarDisplayCliente(DisplayCliente.FinVenta); } } catch (Exception ex) { // Telemetria.Instancia.AgregaMetrica(new Excepcion(ex)); log.ErrorFormat("[CmdPagarVenta] {0}", ex.Message); // iu.PanelOperador.MensajeOperador = ex.Message; EVenta copiaVenta = JsonConvert.DeserializeObject <EVenta>(jsonCopiaVenta); Entorno.Instancia.Venta = copiaVenta; Entorno.Instancia.Venta.ImpuestosIncluidos = copiaImpuestosIncluidos; // Solicitudes.SolicitudPagarVenta solVolver = new Solicitudes.SolicitudPagarVenta(Enums.Solicitud.Pagar, Entorno.Instancia.Vista.PanelPago.VisorEntrada); Reactor.Instancia.Procesar(solVolver); } }