-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprocessa-arquivo.php
166 lines (145 loc) · 6.05 KB
/
processa-arquivo.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?php
ini_set('max_execution_time', 0);
//error_reporting(E_ALL);
//ini_set('display_errors', 1);
session_start();
require_once("model/Produto.php");
require_once("controller/ProdutoController.php");
require_once("controller/CategoriaController.php");
require_once("controller/SemestreController.php");
$arquivo_temp = $_FILES['arquivo']['tmp_name'];
$dadosLidos = file($arquivo_temp);
$cont = 0;
$erro = false;
$produtos = Array();
// Itera por todas as linhas do arquivo
for($i = 0; $i < sizeof($dadosLidos) && !$erro; $i++)
{
// ignora a primeira linha (Cabeçalho)
if($i == 0) continue;
$mensagemErro = "";
$produtos[$i] = new Produto();
$dadosLidos[$i] = trim($dadosLidos[$i]);
$camposProduto = explode("\t", $dadosLidos[$i]);
// Verifica se usuário informou os 8 campos obrigatórios
if (sizeof($camposProduto)<8) {
$mensagemErro = "Existe algum campo não preenchido na linha " . strval($i);
$erro = true;
}
// Verifica se existe algum campo vazio
foreach($camposProduto as $campo){
if($campo == ""){
$mensagemErro = "Campo com valor vazio na linha " . strval($i);
$erro = true;
}
}
$idCategoria = -1;
// Cadastra a categoria
$categoriaController = CategoriaController::getInstance();
$categorias = $categoriaController->getCategorias();
$categorias = $categorias['dados'];
// Verifica se já existe uma categoria com o nome atual
$existeCategoria = false;
for ($j=0; $j < sizeof($categorias); $j++) {
if ($categorias[$j]->getNome() == $camposProduto[6]) {
$idCategoria = $categorias[$j]->getId();
$existeCategoria = true;
break;
}
}
// Se não existir categoria, cria uma
if(!$existeCategoria) {
$categoria = new Categoria();
$categoria->setNome($camposProduto[6]);
if(!($categoriaController->cadastraCategoria($categoria)['status'] == 200)){
$mensagemErro = "Erro na linha " . strval($i) . ". Não foi possivel cadastrar a categoria";
$erro = true;
}else{
$idCategoria = $categoriaController->getIDPeloNome($camposProduto[6])['dados'];
}
}
// Verificações de erro nos campos
if (strlen($camposProduto[0]) > 100 &&!$erro) {
$mensagemErro = "Erro na linha " . strval($i) . ". O campo 'Nome' suporta no máximo 100 caracteres";
$erro = true;
}
// Verifica se os campos são numéricos
if (!is_numeric($camposProduto[2]) &&!$erro) {
$mensagemErro = "Erro na linha " . strval($i) . ". O campo 'Catmat' deve ser numérico";
$erro = true;
}
if(strlen($camposProduto[2]) > 6 &&!$erro){
$mensagemErro = "Erro na linha " . strval($i) . ". O campo 'Catmat' deve ter no máximo 6 digitos";
$erro = true;
}
if (!is_numeric($camposProduto[3]) &&!$erro){
$mensagemErro = "Erro na linha " . strval($i) . ". O campo 'Quantidade' deve ser numérico";
$erro = true;
}
if(strlen($camposProduto[3]) > 6 &&!$erro){
$mensagemErro = "Erro na linha " . strval($i) . ". O campo 'Quantidade' deve ter no máximo 6 digitos";
$erro = true;
}
if (!is_numeric($camposProduto[4]) &&!$erro){
$mensagemErro = "Erro na linha " . strval($i) . ". O campo 'Estoque Ideal' deve ser numérico";
$erro = true;
}
if (strlen($camposProduto[5]) > 3 &&!$erro) {
$mensagemErro = "Erro na linha " . strval($i) . ". O campo posição suporta apenas 3 caracteres";
$erro = true;
}
// Se não existe nenhum erro NA LINHA ATUAL, cria uma instância de produto
// e adiciona elementos à ele
if(!$erro) {
$produtos[$i]->setNome($camposProduto[0]);
$produtos[$i]->setIdentificacao($camposProduto[1]);
$produtos[$i]->setCatmat($camposProduto[2]);
$produtos[$i]->setQuantidade($camposProduto[3]);
$produtos[$i]->setEstoqueIdeal($camposProduto[4]);
$produtos[$i]->setPosicao($camposProduto[5]);
$produtos[$i]->getCategoria()->setNome($camposProduto[6]);
$produtos[$i]->getCategoria()->setId($idCategoria);
$produtos[$i]->setDescricao($camposProduto[7]);
}
}
// Se não existe nenhum erro em NENHUMA linha
if (!$erro) {
// Cadastra todos os produtos
$produtoDuplicado = "";
$linhaDuplicado = 1;
$verificaNomeDuplicado = false;
$verificaIdentificaoDuplicada = false;
foreach ($produtos as $produto) {
$produtoController = ProdutoController::getInstance();
$semestreController = new SemestreController();
$resultadoCadastro = $produtoController->cadastraProduto($produto);
if($resultadoCadastro['status'] == 200){
if($resultadoCadastro['dados'] == -2){
$verificaNomeDuplicado = true;
$produtoDuplicado = $produto->getNome();
break;
}else if($resultadoCadastro['dados'] == -3){
$verificaIdentificaoDuplicada = true;
$produtoDuplicado = $produto->getNome();
break;
}
} else {
$_SESSION['msg'] = "<p> Erro ao cadastrar produto. </p>";
}
$linhaDuplicado++;
}
if(!$verificaNomeDuplicado && !$verificaIdentificaoDuplicada){
$_SESSION['msg'] = "<p> Produtos foram cadastrados com sucesso</p>";
}else if($verificaIdentificaoDuplicada){
$_SESSION['msg'] = "<p> Produto '" . $produtoDuplicado . "' com identificação duplicada na linha " . $linhaDuplicado . "</p>";
}else{
$_SESSION['msg'] = "<p> Produto '" . $produtoDuplicado . "' com nome duplicado na linha " . $linhaDuplicado . "</p>";
}
}else {
// Se existe algum erro em ALGUMA LINHA
// Salva a mensagem de erro na SESSION
$_SESSION['msg'] = "<p>" .$mensagemErro . "</p>";
}
// Rediciona o usuário de volta para a página anterior
header("Location: importar-produtos.php");
?>