;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Logo Pagbenk Seu dinheiro rende mais
Topo

CEO da Hurb renuncia após xingar clientes nas redes sociais

Divulgação
Imagem: Divulgação

Do UOL, em São Paulo

24/04/2023 12h58Atualizada em 24/04/2023 15h14

O CEO da Hurb (ex-Hotel Urbano), João Ricardo Mendes, renunciou ao cargo, após ter xingado e ameaçado clientes insatisfeitos nas redes sociais.

O que aconteceu?

João Ricardo Mendes enviou uma carta, em que ite ter cometido erros e diz estar prejudicando muitas pessoas. "Esses recentes acontecimentos, na verdade, foram erros do "João Ricardo Mendes" e não de uma companhia inteira que é muito maior do que eu", diz o texto.

Otávio Brissant vai assumir o cargo interinamente. Chefe do conselho istrativo vai ocupar a posição até que a companhia vote em um nome definitivo.

Mendes segue como fundador e principal acionista da empresa. Ele disse que irá tirar uma licença para "aprender como liderar" e lidar com assuntos pessoais, como a morte da mãe há 18 meses.

Citou Eminem em carta que comunicou renúncia. Mendes encerrou o texto citando a música "Till I Collapse", do rapper Eminem. A letra diz que é preciso encontrar força e "procurar dentro de você" para "não desistir".

Vazamento de dados de cliente

No final de semana, Mendes vazou dados de um cliente em um grupo de WhatsApp com mais de mil pessoas. O cliente disse que comprou um pacote da Hurb, mas não recebeu as agens. "Tá arriscado alguém bater na m* da sua casa", disse o CEO em uma suposta ligação com o cliente, gravada em vídeo publicado nas redes sociais.

"Agora você não vai ter dinheiro para viajar para lugar nenhum", ironizou.

Não é a primeira vez que ele responde mal a críticas. No começo do mês, ele publicou um vídeo no LinkedIn, em que aparece pisando em uma faixa com uma reclamação de outro cliente insatisfeito.

Agência de viagens acumula queixas

O Hurb vendeu uma série de pacotes promocionais na pandemia com data de viagem em aberto. Nesse modelo de compra, o consumidor apresenta três opções de datas —e a agência busca promoções de parceiros no período.

Clientes dizem que não conseguem marcar o eio. Ao menos 20 mil reclamações já foram registradas contra o Hurb no Reclame Aqui.

Hotéis dizem não receber pagamento. Hospedagens mandaram emails para hóspedes avisando que não receberiam mais clientes que contrataram serviços pelo Hurb, porque não estavam mais recebendo da plataforma. As reservas de dezembro ainda não foram pagas, é um prejuízo muito grande, disse Daniel Junqueira, dono do hotel Canto do Ilé em Paraty (RJ) ao UOL.

Hurb diz que "se compromete a seguir as obrigações contratuais do pacote dentro do período vigente em contrato". Em relação aos hotéis que não estão sendo pagos, disse que irá conversar individualmente com cada parceiro. "Por questões legais, detalhes específicos não podem ser abertos. Cerca de 1.300 profissionais estão trabalhando em uma força-tarefa para reverter o cenário, a fim de regularizar toda a situação", disseram.