terça-feira, 6 de janeiro de 2009

Formatador de moeda - Padrão Brasileiro

Daew pessoal blz,
Hoje estarei trazendo um fast code para Flex.
O codigo abaixo ensina como formatar moedas para o padrão brasileiro.



package validadores{

import mx.validators.NumberValidator;

public class ValidFloatBrasileiro extends NumberValidator {

//este validador validara a faixa de min e max value
//pois existe um BUG em NumberValidator, que nao consegue validar um numero em formato brasileiro

private var validadorRangeNumero:NumberValidator;

//indica uma string que mesmo nao sendo numero nao gerara msg de erro de validacao
public var textoValido:String;

public function ValidFloatBrasileiro() {
super();
this.decimalSeparator = ",";
this.thousandsSeparator = ".";
this.requiredFieldError = "Este campo é obrigatório!";
this.decimalPointCountError = "O ponto decimal só pode ocorrer uma vez";
this.exceedsMaxError = "O número informado é maior que o máximo permitido.";
this.integerError = "O número deve ser inteiro.";
this.invalidCharError = "O campo possui caracteres inválidos (não numéricos).";
this.lowerThanMinError = "O número informado é menor que o mánimo permitido.";
this.negativeError = "O número deve ser maior do que 0.";
this.precisionError = "O número possui mais casas decimais do que o máximo permitido.";
this.separationError = "O separador de milhar deve ser seguido de trás dígitos.";

this.validadorRangeNumero = new NumberValidator();
this.validadorRangeNumero.requiredFieldError = "Este campo é obrigatório!";
this.validadorRangeNumero.decimalPointCountError = "O ponto decimal só pode ocorrer uma vez";
this.validadorRangeNumero.exceedsMaxError = "O número informado é maior que o máximo permitido.";
this.validadorRangeNumero.integerError = "O número deve ser inteiro.";
this.validadorRangeNumero.invalidCharError = "O campo possui caracteres inválidos (não numéricos).";
this.validadorRangeNumero.lowerThanMinError = "O número informado é menor que o mánimo permitido.";
this.validadorRangeNumero.negativeError = "O número deve ser maior do que 0.";
this.validadorRangeNumero.precisionError = "O número possui mais casas decimais do que o máximo permitido.";
this.validadorRangeNumero.separationError = "O separador de milhar deve ser seguido de trás dígitos.";
}

/**
* Valida um numero em formato brasileiro e
* retorna uma Array de ValidationResult.
*
* @param Object value
* @return Array
*/

override protected function doValidation(value:Object):Array {
if (textoValido != "" && value == this.textoValido)
return new Array();

//primeiro faz as validacoes de formato...
var resposta:Array = super.doValidation(value);

if (resposta != null && resposta.length > 0) {
//se nao deu problema na validacao acima
//deve transformar o numero no padrao americano, para poder testar o min e max value

this.validadorRangeNumero.minValue = this.minValue;
this.validadorRangeNumero.maxValue = this.maxValue;
this.validadorRangeNumero.allowNegative = this.allowNegative;
this.validadorRangeNumero.domain = this.domain;
this.validadorRangeNumero.precision = this.precision;

var numeroIngles:String;
if (value is String) {
numeroIngles = (value as String).replace(".", "?");
numeroIngles = numeroIngles.replace(",", ".");
numeroIngles = numeroIngles.replace("?", ",");
var results:Array = this.validadorRangeNumero.validate(numeroIngles).results;
if (FuncoesArray.naoEstaVazio(results))
resposta = resposta.concat( results );
}
}
return resposta;
}
}
}