Durante a vida, a gente comete alguns erros. Faz algumas burrices. E comete outras tantas cagadas.
Esta é uma delas.
No dia 03 de dezembro de 2011, sábado, eu e minha namorada comparecemos à filial da Av. Itaquera da loja Garbellini Planejados para fazer um projeto de móveis planejados. No dia, fechamos um projeto no valor de R$17.280, que seria parcelado em 36X. A forma de pagamento acertada foi em cheques. Como no dia não estávamos com o talão de cheques, ficou acordado que os levaríamos no dia seguinte, domingo, ou mandaríamos entregar, já devidamente assinados.
No dia seguinte, ligamos na loja para solicitar o cancelamento do projeto, pois como estávamos perto da data da nossa mudança, pensamos que seria melhor adiar o projeto, pois teríamos muitos gastos com essa mudança. Ligamos perto do meio dia e falamos com o vendedor que nos atendeu, Vagner Nunes. O mesmo repassou o caso para o seu supervisor, um tal de Valdir. Ele disse que iria ver a possibilidade de fazer um ‘plano flex’ para facilitar as condições de pagamento, mas que precisava ver com o seu superior, e iria retornar a ligação no dia seguinte, mas que independente disso o projeto havia sido cancelado. Vale observar que faziam menos de 24 horas que o contrato havia sido assinado e, em uma das cláusulas do mesmo, constava um período de até 24 horas para solicitar o cancelamento do projeto sem que fosse necessário pagar multa.
No meio da semana, entre terça e quarta, recebemos uma ligação da Garbellini, onde nos informaram que o financiamento havia sido aceito pela Aymoré e perguntaram qual era o melhor dia para o vencimento das parcelas. Ficamos surpresos, pois além de termos solicitado o cancelamento, estávamos aguardando a proposta que o Valdir havia mencionado. Falei isso para a pessoa que me ligou, e pedi para falar com o Valdir. Após tentar ligar várias vezes e nunca o encontrar na loja, finalmente consegui falar com ele, e solicitei novamente o cancelamento. O mesmo me disse que havia acontecido algum engano, que havia feito uma observação no nosso projeto e que não deveria ter sido passado para a financiadora, e que não nos preocupássemos, pois ele iria resolver. “Deixa comigo” foram as palavras dele.
No dia 26 de dezembro, recebemos o carnê com as 36 parcelas para fazer os pagamentos, iniciando em fevereiro de 2012. Ficamos ainda mais surpresos, pois haviam nos garantido que era um engano, que o projeto havia sido cancelado. Também achamos estranho não termos recebido nenhum contato da Aymoré para confirmar que eu realmente havia feito um financiamento, ainda mais se tratando de um valor alto. Tentei novamente contato com a loja, mas como era final de ano, ninguém nos atendeu, então mandei um e-mail para o vendedor Vagner perguntando o que havia acontecido e o que deveria fazer.
Após isso, tentei contato telefônico, enviei e-mails, mas o Valdir nunca se encontrava na loja e nunca respondia os e-mails. No dia 19 de janeiro decidimos ir até a loja para falar pessoalmente com ele, mas o mesmo não se encontrava lá. Esperamos durante algumas horas, pois nos disseram que ele voltaria, mas nada de aparecer. Já estávamos impacientes com isso, então o vendedor Vagner nos propôs uma alteração no projeto inicial, para que não cancelássemos, e para que não esperássemos mais o Valdir, pois já não tinha mais certeza de que ele voltaria naquele dia.
Refizemos parte do projeto, diminuindo seu valor para R$11.040,00. Para que não fosse necessário enviar novamente para a financeira, ficou acordado que a loja pagaria as primeiras 13 parcelas, e nós as demais. Esse acordo foi aceito por nós porque eles se recusaram a cancelar e nós não queríamos ficar com pendências financeiras. O acordo foi feito e assinado pelo vendedor Vagner, que refez o pedido. À nosso pedido, ele colocou a observação que a loja ficaria responsável pelas parcelas e assinou. Eles também destacaram as primeiras 13 folhas do carnê para pagar mensalmente conforme acordado.
Após a data do vencimento da primeira parcela, a Aymoré entrou em contato conosco e assim descobrimos que o pagamento não havia sido feito, conforme o acordo. Entramos em contato com o Vagner que providenciou o pagamento das duas primeiras parcelas. Após o vencimento da terceira parcela, a Aymoré nos contatou novamente para cobrar a parcela em atraso. Tentamos entrar em contato novamente com o Vagner, mas o mesmo nos respondeu por e-mail que havia saído da empresa. Entramos em contato com o responsável pela loja através do e-mail garbelliniplanejados@hotmail.com e fomos respondidos por um tal de Cláudio Garbellini. O mesmo respondeu que iria verificar com o financeiro da loja e que faria o pagamento. Como o pagamento não foi feito, continuei tentando ligar e mandar e-mails, mas nunca era respondido. Após alguns dias, através de um e-mail que recebi do Vagner, soube que a loja havia fechado, e assim não consegui contato com mais ninguém.
No fim disso tudo, fiquei com uma dívida com a Aymoré e nunca soube se os meus móveis sequer haviam sido fabricados.
quarta-feira, 27 de fevereiro de 2013
quarta-feira, 30 de janeiro de 2013
Argumentos opcionais em Javascript
Ás vezes precisamos alterar uma função que já existe, adicionando mais parâmetros.
Pra não quebrar a compatibilidade com outras partes do sistema que estejam usando a função, e pra não precisar revisar tudo pra encontrar as chamadas à tal função, o jeito é criar os novos parâmetros como opcionais.
Pra não quebrar a compatibilidade com outras partes do sistema que estejam usando a função, e pra não precisar revisar tudo pra encontrar as chamadas à tal função, o jeito é criar os novos parâmetros como opcionais.
function war(enemy,reason) {
if(!enemy) { //The mandatory argument is not present - die with error(no pun intended)
alert("Please choose an enemy before starting a war");
return false;
}
if(!reason) { //If the optional argument is not there, create a new variable with that name.
var reason = "They have Nukes!";
}
/* ...Do what you want with the arguments... */
}
Fonte: http://www.openjs.com/articles/optional_function_arguments.php
quinta-feira, 24 de janeiro de 2013
quarta-feira, 23 de janeiro de 2013
terça-feira, 22 de janeiro de 2013
#4
4. Lei de Thoreau
Se alguém aproximar-se de você com a intenção declarada de lhe fazer o bem, é melhor correr para salvar sua vida.
Se alguém aproximar-se de você com a intenção declarada de lhe fazer o bem, é melhor correr para salvar sua vida.
#2
2. Lei de Mencken
Para cada problema na humanidade existe uma solução simples e clara, e esta será sempre a solução errada.
Para cada problema na humanidade existe uma solução simples e clara, e esta será sempre a solução errada.
#1
Se você não perde cabeça quando todos ao redor já perderem, talvez você apenas não esteja entendendo a situação.
Operações com datas em PHP do jeito quase certo
Há uns 2 meses atrás, fiz uma função que somava 10 dias em uma certa data.
Fiz assim:
É até vergonhoso ver que fiz algo de um jeito tão jurássico, há apenas 2 meses. Só percebi o problema porque um dos vendedores tentou cadastrar um orçamento com a data 32/01/2013...
Como agora tem toda essa história de 'php do jeito certo', decidi ver qual o jeito certo de se fazer, que é mais ou menos o seguinte:
Mas, ao testar em produção, deu erro, porque a versão do php do servidor está desatualizada (novidade...), e a função date_add só existe a partir da versão 5.3.0. Aí tive que tentar o segundo jeito certo, que é algo assim:
Fiz assim:
(date('d')+10).date('/m/Y');
É até vergonhoso ver que fiz algo de um jeito tão jurássico, há apenas 2 meses. Só percebi o problema porque um dos vendedores tentou cadastrar um orçamento com a data 32/01/2013...
Como agora tem toda essa história de 'php do jeito certo', decidi ver qual o jeito certo de se fazer, que é mais ou menos o seguinte:
$hoje = date_create();
date_add($hoje, date_interval_create_from_date_string('10 days'));
echo $hoje->format('d/m/Y');
Mas, ao testar em produção, deu erro, porque a versão do php do servidor está desatualizada (novidade...), e a função date_add só existe a partir da versão 5.3.0. Aí tive que tentar o segundo jeito certo, que é algo assim:
$date = date_create();
date_modify($date, '+10 day');
echo date_format($date, 'd/m/Y');
sexta-feira, 18 de janeiro de 2013
jQuery hasAttr
Um plugin simples para utilizar a função hasAttr com jQuery, que funciona do mesmo jeito que hasClass.
$.fn.hasAttr = function(name) {
return this.attr(name) !== undefined;
};
sexta-feira, 11 de janeiro de 2013
Exportando tabelas para excel e acertando o formato dos campos
Como 'gerar' um arquivo excel com php, todo mundo já sabe:
Simples:
Aqui tem os formatos aceitos:
http://cosicimiento.blogspot.com.br/2008/11/styling-excel-cells-with-mso-number.html
Fonte:
http://cosicimiento.blogspot.com.br/2008/11/styling-excel-cells-with-mso-number.html
http://stackoverflow.com/questions/354476/html-to-excel-how-can-tell-excel-to-treat-columns-as-numbers
Mas como fazer com que as colunas fiquem com os tipos de dados certos, como por exemplo, os campos de data?$arquivo = "export".date("dmY_His").".xls"; header("Content-Type: text/plain"); header("Content-Disposition: attachment; filename=\"$arquivo\";");
Simples:
Criando o seguinte css:.date {
mso-number-format:"Short Date";
}
E aplicando este estilo na célula da tabela que contém o valor que deve ser formatado.Aqui tem os formatos aceitos:
http://cosicimiento.blogspot.com.br/2008/11/styling-excel-cells-with-mso-number.html
Fonte:
http://cosicimiento.blogspot.com.br/2008/11/styling-excel-cells-with-mso-number.html
http://stackoverflow.com/questions/354476/html-to-excel-how-can-tell-excel-to-treat-columns-as-numbers
sexta-feira, 4 de janeiro de 2013
Colocando um elemento dentro de outro com Javascript
1: $.each($('input.check_red'), function(index, elemento){
2: var id_rand = Math.floor((Math.random()*1000)+1);
3: var id_rand2 = Math.floor((Math.random()*1000)+1);
4: var id_span = "span_"+id_rand+'_'+id_rand2;
5: $(elemento).before('<span class="check_red" id="'+id_span+'" title="Espaço do Corretor"></span>');
6: $(elemento).prependTo($('#'+id_span));
7: })
1: Seleciona os elementos que serão inseridos dentro do novo elemento criado
2: Gera um número aleatório para criar o ID do novo elemento
3: Gera outro número aleatório(porque, como é aleatório, pode acontecer de gerar duas vezes o mesmo número. Claro que é possível que os dois numeros aleatórios sejam iguais...
4: Concatena os dois números gerados para criar o id do elemento novo
5: Cria o novo elemento antes do elemento que será 'arrastado'
6: Arrasta o elemento para dentro do novo elemento
quarta-feira, 2 de janeiro de 2013
Acessando a página 'mãe' com javascript
Dentro da página que foi aberta (pop-up):
Um exemplo, para 'atualizar' a página que chamou o pop-up:
Outro exemplo, pra popular um campo na página mãe com o valor de um campo na página filha:
window.opener
Um exemplo, para 'atualizar' a página que chamou o pop-up:
window.opener.location = 'pagina_mae.html';
Outro exemplo, pra popular um campo na página mãe com o valor de um campo na página filha:
window.opener.document.getElementById('campo1').value = document.getElementById('campo1').value;
Sowilo Rune
Lord Summerisle: "Now, those children out there, they're jumping through the flames in the hope that the god of the fire will make them fruitful. Really, you can't blame them. After all, what girl would not prefer the child of a god to that of some acne-scarred artisan?"
Sergeant Howie: "And you encourage them in this?"
Lord Summerisle: "Actively! It's most important to teach new generation born of Summerisle be made aware that here the old gods aren't dead."
Sergeant Howie: "And what of the true God? To whose glory churches and monasteries have been built on these islands for generations past? Now shall what of Him?"
Lord Summerisle: "Oh, He's dead. He can't complain. He had his chance and in modern parlance. Blew it."
Sergeant Howie: "And you encourage them in this?"
Lord Summerisle: "Actively! It's most important to teach new generation born of Summerisle be made aware that here the old gods aren't dead."
Sergeant Howie: "And what of the true God? To whose glory churches and monasteries have been built on these islands for generations past? Now shall what of Him?"
Lord Summerisle: "Oh, He's dead. He can't complain. He had his chance and in modern parlance. Blew it."
quinta-feira, 20 de dezembro de 2012
Debugando erros Episódio 1
Pra quando o script trava sem nenhum motivo aparente:
error_reporting(E_ALL);
ini_set('display_errors','on');
error_reporting(E_ALL);
ini_set('display_errors','on');
quarta-feira, 12 de dezembro de 2012
Como tornar uma imagem em preto-e-branco com css
Update: O cara que disponibilizou a classe que eu copiei, atualizou o código. Segue abaixo:
.imagem{
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+ */
filter: gray; /* IE6-9 */
-webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */
-webkit-transition: all .6s ease; /* Fade to color for Chrome and Safari */
-webkit-backface-visibility: hidden; /* Fix for transition flickering */
}
Só não funcionou no Safari nem no Opera...
..com a seguinte classe:
.imagem{
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */
filter: gray; /* IE6-9 */
-webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */
}
Fonte: http://www.karlhorky.com/2012/06/cross-browser-image-grayscale-with-css.html
terça-feira, 11 de dezembro de 2012
Select Case no Mysql
Simples:
SELECT id, nome, descricao,
CASE status
WHEN 1 THEN 'Aprovado'
WHEN 2 THEN 'Vencido'
WHEN 3 THEN 'Pendente'
WHEN 0 THEN 'Reprovado'
END AS status
FROM tabela
Fonte:http://talibamartins.wordpress.com/2007/09/20/if-e-case-no-mysql/
SELECT id, nome, descricao,
CASE status
WHEN 1 THEN 'Aprovado'
WHEN 2 THEN 'Vencido'
WHEN 3 THEN 'Pendente'
WHEN 0 THEN 'Reprovado'
END AS status
FROM tabela
Fonte:http://talibamartins.wordpress.com/2007/09/20/if-e-case-no-mysql/
sexta-feira, 7 de dezembro de 2012
Zero entre aspas
Só uma coisinha rápida, pra eu lembrar mais tarde, e pro caso de alguém precisar:
Tem um site que eu 'fiz' (na verdade, personalizei) em wordpress.
Pra gerenciar as galerias de fotos, eu instalei o Nextgen Gallery, que é um plugin pra isso.
O bom de mexer com wordpress, e com coisas que muita gente usa, é que tem milhares de blogs falando como se usa esses negócios. O ruim é que nenhum deles é o que eu quero fazer.
Eu queria era ter uma página chamada 'fotos', onde ia mostrar automaticamente todos os albuns de fotos cadastrados. Do jeito que todo mundo mostrava, tinha que entrar na página e dizer pra mostrar tal álbum. Mas eu não queria isso, queria um jeito de mostrar todos os albuns.
Bueno, eu dei uma olhada no código e achei o que eu queria. Ou seja, a resposta tava bem debaixo do meu nariz.
Ou pra ser mais específico, na frente. Porque eu não fico com o nariz em cima do monitor, e sim de frente pra ele. Mas enfim.
Nos outros blogs, aparecia sempre pra colocar assim no post:
[album=#]
onde # é o id do álbum que eu quero mostrar. Mas eu não queria mostrar um álbum, queria mostrar todos. Daí no código eu achei esse comentário:
// in the case somebody uses the '0', it should be 'all' to show all galleries
Quer dizer, se eu colocar '0' como id do álbum que eu quero mostrar, ele mostra todos.
E eu tava desde ontem à noite tentando descobrir como fazer isso...
Assinar:
Postagens (Atom)