This repository has been archived by the owner on Jun 8, 2022. It is now read-only.
forked from manoelcampos/retorno-boletophp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRetornoFactory.php
62 lines (57 loc) · 2.65 KB
/
RetornoFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
require_once("RetornoCNAB240.php");
require_once("RetornoCNAB400Conv6.php");
require_once("RetornoCNAB400Conv7.php");
require_once("RetornoCNAB400Bradesco.php");
/**Classe que identifica o tipo de arquivo de retorno sendo carregado e instancia a classe
* específica para leitura do mesmo.
* @copyright GPLv2
* @package ArquivoRetornoTitulosBancarios
* @author Manoel Campos da Silva Filho. http://manoelcampos.com/contato
* @version 0.4
*/
class RetornoFactory {
/**Instancia um objeto de uma das sub-classes de RetornoBase,
* com base no tipo do arquivo de retorno indicado por $fileName
* @param string fileName Nome do arquivo de retorno a ser identificado
* para poder instancia a classe específica para leitura do mesmo.
* @param string $aoProcessarLinhaFunctionName @see RetornoBase
* @return RetornoBase Retorna um objeto de uma das sub-classes de RetornoBase.
*/
static function getRetorno($fileName, $aoProcessarLinhaFunctionName) {
if($fileName == "")
throw new Exception("Informe o nome do arquivo de retorno.");
if($arq = fopen($fileName, "r")) {
//Lê o header do arquivo
if($linha=fgets($arq, 500)) {
$len = strlen($linha);
if($len >= 240 and $len <= 242)
return new RetornoCNAB240($fileName, $aoProcessarLinhaFunctionName);
else if($len >= 400 and $len <= 402) {
if(strstr($linha, "BRADESCO"))
return new RetornoCNAB400Bradesco($fileName, $aoProcessarLinhaFunctionName);
//Lê o primeiro registro detalhe
if($linha=fgets($arq, 500)) {
switch ($linha[0]) {
case RetornoCNAB400Conv6::DETALHE:
return new RetornoCNAB400Conv6($fileName, $aoProcessarLinhaFunctionName);
break;
case RetornoCNAB400Conv7::DETALHE:
return new RetornoCNAB400Conv7($fileName, $aoProcessarLinhaFunctionName);
break;
default:
throw new Exception("Tipo de registro detalhe desconhecido: " . $linha[0]);
break;
}
}
else throw new Exception("Tipo de arquivo de retorno não identificado. Não foi possível ler um registro detalhe.");
}
else throw new Exception("Tipo de arquivo de retorno não identificado. Total de colunas do header: $len");
}
else throw new Exception("Tipo de arquivo de retorno não identificado. Não foi possível ler o header do arquivo.");
fclose($arq);
}
else throw new Exception("Não foi possível abrir o arquivo \"$fileName\".");
}
}
?>