package gcom.arrecadacao.bean;
import java.util.Date;
import gcom.arrecadacao.ArrecadadorContrato;
import gcom.util.ControladorException;
import gcom.util.Util;
public class RegistroFichaCompensacaoHeaderHelper {
private String id;
private String tipoOperacao;
private String idTipoOperacao;
private String idTipoServico;
private String idExtensoTipoServico;
private String prefixoAgencia;
private String digitoVerificadorPrefixoAgencia;
private String numeroContaCorrente;
private String digitoVerificadorContaCorrenteCedente;
private String nomeCedente;
private String codigoBanco;
private String dataGravacao;
private String sequencialRetorno;
private String numeroConvenio;
private String sequencialRegistro;
private String idCodigoBanco;
private String nomeBanco;
public RegistroFichaCompensacaoHeaderHelper(String linha, ArrecadadorContrato arrecadadorContrato) throws ControladorException{
buildId(linha);
buildTipoOperacao(linha);
buildIdTipoOperacao(linha);
buildIdTipoServico(linha);
buildIdExtensoTipoServico(linha);
buildPrefixoAgencia(linha);
buildDigitoVerificadorPrefixoAgencia(linha);
buildNumeroContaCorrente(linha);
buildDigitoVerificadorContaCorrenteCedente(linha);
buildNomeCedente(linha);
buildCodigoBanco(linha);
buildDataGravacao(linha);
buildSequencialRetorno(linha, arrecadadorContrato);
buildNumeroConvenio(linha);
buildSequencialRegistro(linha);
}
public String getId() {
return id;
}
public String getTipoOperacao() {
return tipoOperacao;
}
public String getIdTipoOperacao() {
return idTipoOperacao;
}
public String getIdTipoServico() {
return idTipoServico;
}
public String getIdExtensoTipoServico() {
return idExtensoTipoServico;
}
public String getPrefixoAgencia() {
return prefixoAgencia;
}
public String getDigitoVerificadorPrefixoAgencia() {
return digitoVerificadorPrefixoAgencia;
}
public String getNumeroContaCorrente() {
return numeroContaCorrente;
}
public String getDigitoVerificadorContaCorrenteCedente() {
return digitoVerificadorContaCorrenteCedente;
}
public String getNomeCedente() {
return nomeCedente;
}
public String getCodigoBanco() {
return codigoBanco;
}
public String getDataGravacao() {
return dataGravacao;
}
public String getSequencialRetorno() {
return sequencialRetorno;
}
public String getNumeroConvenio() {
return numeroConvenio;
}
public String getSequencialRegistro() {
return sequencialRegistro;
}
public String getIdCodigoBanco() {
return idCodigoBanco;
}
public String getNomeBanco() {
return nomeBanco;
}
public Date getDataGravacaoFormatado() {
return Util.converteStringSemBarraParaDateAnoSimples(dataGravacao);
}
private void buildSequencialRegistro(String linha) {
this.sequencialRegistro = linha.substring(394,400);
}
private void buildNumeroConvenio(String linha) {
this.numeroConvenio = linha.substring(149,156);
}
private void buildSequencialRetorno(String linha, ArrecadadorContrato arrecadadorContrato) throws ControladorException {
this.sequencialRetorno = linha.substring(100,107);
Integer numeroSequecialArquivoRetornoFichaComp = arrecadadorContrato.getNumeroSequencialArquivoRetornoFichaCompensacao();
numeroSequecialArquivoRetornoFichaComp += 1;
if (!Integer.valueOf(sequencialRetorno).equals(numeroSequecialArquivoRetornoFichaComp)) {
throw new ControladorException("atencao.arquivo.movimento.fora.sequencia");
}
}
private void buildDataGravacao(String linha) {
this.dataGravacao = linha.substring(94,100);
}
private void buildCodigoBanco(String linha) throws ControladorException {
this.codigoBanco = linha.substring(76,94);
this.idCodigoBanco = linha.substring(76, 79);
this.nomeBanco = linha.substring(79, 94);
if(!this.codigoBanco.equals("001BANCO DO BRASIL")){
throw new ControladorException("C�digo do banco inv�lido.");
}
}
private void buildNomeCedente(String linha) {
this.nomeCedente = linha.substring(46,76);
}
private void buildDigitoVerificadorContaCorrenteCedente(String linha) {
this.digitoVerificadorContaCorrenteCedente = linha.substring(39,40);
}
private void buildNumeroContaCorrente(String linha) {
this.numeroContaCorrente = linha.substring(31,39);
}
private void buildDigitoVerificadorPrefixoAgencia(String linha) {
this.digitoVerificadorPrefixoAgencia = linha.substring(30,31);
}
private void buildPrefixoAgencia(String linha) {
this.prefixoAgencia = linha.substring(26,30);
}
private void buildIdExtensoTipoServico(String linha) throws ControladorException {
this.idExtensoTipoServico = linha.substring(11,19);
if(!this.idExtensoTipoServico.equals("COBRANCA")){
throw new ControladorException("Tipo servi�o por extenso inv�lido.");
}
}
private void buildIdTipoServico(String linha) throws ControladorException {
this.idTipoServico = linha.substring(9,11);
if(!this.idTipoServico.equals("01")){
throw new ControladorException("Tipo servi�o inv�lido.");
}
}
private void buildIdTipoOperacao(String linha) throws ControladorException {
this.idTipoOperacao = linha.substring(2,9);
if(!this.idTipoOperacao.equals("RETORNO")){
throw new ControladorException("Tipo opera��o inv�lido.");
}
}
private void buildTipoOperacao(String linha) throws ControladorException {
this.tipoOperacao = linha.substring(1,2);
if(!this.tipoOperacao.equals("2")){
throw new ControladorException("atencao.codigo.remessa.invalido");
}
}
private void buildId(String linha) throws ControladorException {
this.id = linha.substring(0,1);
if(!this.id.equals("0")){
throw new ControladorException("atencao.arquivo.movimento.sem.header");
}
}
}