package br.com.caelum.stella.gateway.visa; import br.com.caelum.stella.gateway.core.InvalidCheckoutException; public class VISAFormaPagamento { private VISATipoTransacao tipoTransacao; private int numeroDeParcelas; public VISAFormaPagamento( VISATipoTransacao formaParcelamento, int numeroDeParcelas) { super(); if(numeroDeParcelas<=0){ throw new InvalidCheckoutException("O número de parcelas não pode ser igual ou menor que 0"); } else{ if((formaParcelamento.equals(VISATipoTransacao.DEBITO) || formaParcelamento.equals(VISATipoTransacao.CREDITO_A_VISTA)) && numeroDeParcelas>1){ throw new InvalidCheckoutException("Com débito ou crédito a vista só pode pagar em 1 parcela"); } } this.tipoTransacao = formaParcelamento; this.numeroDeParcelas = numeroDeParcelas; } public static VISAFormaPagamento newPagamentoAVistaComCredito(){ return new VISAFormaPagamento(VISATipoTransacao.CREDITO_A_VISTA,1); } public static VISAFormaPagamento newPagamentoComDebito(){ return new VISAFormaPagamento(VISATipoTransacao.DEBITO,1); } public VISAFormaPagamento newPagamentoParceladoJurosLojista(int numeroDeParcelas){ return new VISAFormaPagamento(VISATipoTransacao.PARCELADO_JUROS_LOJISTA,numeroDeParcelas); } public VISAFormaPagamento newPagamentoParceladoJurosEmissor(int numeroDeParcelas){ return new VISAFormaPagamento(VISATipoTransacao.PARCELADO_JUROS_EMISSOR,numeroDeParcelas); } public VISATipoTransacao getTipoTransacao() { return tipoTransacao; } public int getNumeroDeParcelas() { return numeroDeParcelas; } /** * Retorna o codigo levando em consideracao a forma do parcelamento e o numero de parcelas * @return * @throws InvalidCheckoutException caso algum atributo do parcelamento esteja em estado inválido */ public String getCodigoDePagamento(){ String numeroDeParcelasFormatadoParaTresDigitos = String.format("%03d",numeroDeParcelas); return tipoTransacao.getCodigo()+numeroDeParcelasFormatadoParaTresDigitos; } }