-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpedidos.php
227 lines (204 loc) · 10.4 KB
/
pedidos.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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
<?php
header("Content-Type: text/html; charset=UTF-8",true);
error_reporting(E_ALL);
ini_set('display_errors', true);
include "carrinho.php";
class Pedidos {
var $pdo;
function __construct() {
$this->pdo = new PDO('mysql:host=localhost;dbname=pedefacil_db', 'root', 'p3d3f4c1l@db');
}
/* FUNÇÃO PARA INSERÇÃO DO PEDIDO AO BANCO DE DADOS NA TBL_PEDIDOS - LÓGICA:
Primeiro:
realizar uma consulta na tbl_vendas para pegar o id do último registro do usuário
Se estiver vazio, o id_pedido vai receber 1; senão, realizar uma consulta na tabela e pegar o último
id_pedido registrado na tabela referente àquele usuário
Segundo:
verificar se àquele id_pedido está com status_pedido = em aberto
se estiver aberto, calcular a soma de todos os produtos a serem adicionados e somar ao valor da coluna valor_conta;
senão, incrementar o id_pedido e realizar uma nova inserção nas tabelas
*/
public function inserirPedido($id_usuario, $lista_cod, $itens_qtd) {
/* TRANSFORMA AS STRINGS EM ARRAYS */
$lista_ids = explode(",", $lista_cod);
$lista_qtd = explode(",", $itens_qtd);
/* CAPTURA O ÚLTIMO REGISTRO DA TABELA PARA VERIFICAR SEU ID_PEDIDO */
$verificaTabela = $this->pdo->prepare("SELECT * FROM tbl_vendas WHERE id_usuario='$id_usuario' ORDER BY id_pedido DESC LIMIT 1");
$verificaTabela->execute();
/* VERIFICA SE A TBL_VENDAS JÁ POSSUI ALGUM REGISTRO, SE NÃO POSSUIR, REALIZA O PRIMEIRO REGISTRO */
if($verificaTabela->rowCount() === 0){
$id_pedido = 1;
$registra_conta = 0;
$consultaProduto = new Consulta();
/* ADICIONAR REGISTRO - TESTE DE IMPLEMENTAÇÃO DE CONTROLE DO PEDIDO PELA TBL_VENDAS */
while ($id_produto = array_shift($lista_ids)) {
$quantidade = array_shift($lista_qtd);
$produto = $consultaProduto->consultaProduto($id_produto);
$valor_unitario = $produto['preco'];
$valor_total = $quantidade * $valor_unitario;
$registra_conta += $valor_total;
}
$stmt_entry = $this->pdo->prepare("INSERT INTO tbl_vendas (id_pedido, id_usuario, valor_conta, status_pedido, data_abertura, data_encerramento) VALUES (:id_pedido, :id_usuario, :valor_conta, 'Em aberto', NOW(), NOW())");
$stmt_entry->bindValue(':id_pedido', $id_pedido);
$stmt_entry->bindValue(':id_usuario', $id_usuario);
$stmt_entry->bindValue(':valor_conta', $registra_conta);
$stmt_entry->execute();
}
/* SE JÁ POSSUIR ALGUM REGISTRO, VERIFICA SE O MESMO ESTÁ "EM ABERTO" */
else {
$ultimo_registro = $verificaTabela->fetch(PDO::FETCH_ASSOC);
/* PRIMEIRA PARTE | SE O ÚLTIMO PEDIDO AINDA ESTIVER EM ABERTO, ADICIONA NO MESMO ID, SENÃO (CASO PEDIDO ENCERRADO) ADICIONA NO ID SEGUINTE */
if ($ultimo_registro['status_pedido'] === "Em aberto") {
$id_pedido = $ultimo_registro['id_pedido'];
$att_conta = 0;
$consultaProduto = new Consulta();
/* ATUALIZAR O VALOR DA CONTA DO PEDIDO EM QUESTÃO */
while ($id_produto = array_shift($lista_ids)) {
$quantidade = array_shift($lista_qtd);
$produto = $consultaProduto->consultaProduto($id_produto);
$valor_unitario = $produto['preco'];
$valor_total = $quantidade * $valor_unitario;
$att_conta += $valor_total;
}
$stmt_update = $this->pdo->prepare("UPDATE tbl_vendas SET valor_conta = valor_conta+'$att_conta', data_encerramento=NOW() WHERE id_pedido = '$id_pedido'");
$stmt_update->execute();
/* SENÃO, REALIZA UM NOVO REGISTRO NA TABELA COM UM NOVO ID */
} else {
$id_pedido = $ultimo_registro['id_pedido'] + 1;
$registra_conta = 0;
$consultaProduto = new Consulta();
/* ADICIONAR REGISTRO */
while ($id_produto = array_shift($lista_ids)) {
$quantidade = array_shift($lista_qtd);
$produto = $consultaProduto->consultaProduto($id_produto);
$valor_unitario = $produto['preco'];
$valor_total = $quantidade * $valor_unitario;
$registra_conta += $valor_total;
}
$stmt_entry = $this->pdo->prepare("INSERT INTO tbl_vendas (id_pedido, id_usuario, valor_conta, status_pedido, data_abertura, data_encerramento) VALUES (:id_pedido, :id_usuario, :valor_conta, 'Em aberto', NOW(), NOW())");
$stmt_entry->bindValue(':id_pedido', $id_pedido);
$stmt_entry->bindValue(':id_usuario', $id_usuario);
$stmt_entry->bindValue(':valor_conta', $registra_conta);
$stmt_entry->execute();
}
}
/* CRIA UMA VARIÁVEL PARA REALIZAR AS CONSULTAS DOS PRODUTOS NO BANCO DE DADOS */
$consulta = new Consulta();
/* TRANSFORMA AS STRINGS EM ARRAYS NOVAMENTE PARA QUE SEJA FEITA A ADIÇÃO NA SEGUNDA TABELA (TBL_PEDIDOS) */
$lista_ids = explode(",", $lista_cod);
$lista_qtd = explode(",", $itens_qtd);
/* STRING SQL PARA PREPARAR A INSERÇÃO DOS DADOS */
$sql = "INSERT INTO tbl_pedidos (id_pedido, id_usuario, id_produto, nome_produto, quantidade, valor_unitario, valor_total, data, status_pedido) VALUES (:id_pedido, :id_usuario, :id_produto, :nome_produto, :quantidade, :valor_unitario, :valor_total, NOW(), 'Em aberto')";
/* ITERAÇÃO PARA ADICIONAR CADA PRODUTO EM UMA LINHA NA TABELA */
$valor_conta = 0;
$stmt = $this->pdo->prepare($sql);
while ($id_produto = array_shift($lista_ids)) {
$quantidade = array_shift($lista_qtd);
$produto = array_map("utf8_encode", $consulta->consultaProduto($id_produto));
$nome_produto = $produto['produto'];
$valor_unitario = $produto['preco'];
$valor_total = $quantidade * $valor_unitario;
$valor_conta += $valor_total;
$stmt->bindValue(':id_pedido', $id_pedido);
$stmt->bindValue(':id_usuario', $id_usuario);
$stmt->bindValue(':id_produto', $id_produto);
$stmt->bindValue(':nome_produto', $nome_produto);
$stmt->bindValue(':quantidade', $quantidade);
$stmt->bindValue(':valor_unitario', $valor_unitario);
$stmt->bindValue(':valor_total', $valor_total);
$stmt->execute();
}
}
/* REALIZA UMA CONSULTA NA TBL_PEDIDOS E RETORNA OS PEDIDOS "EM ABERTO" DO USUÁRIO EM QUESTÃO */
public function consultarPedidos($id_usuario) {
$stmt = $this->pdo->prepare("SELECT * FROM tbl_pedidos WHERE id_usuario = '$id_usuario' AND status_pedido = 'Em aberto'");
$stmt->bindValue(':id_usuario', $id_usuario);
$stmt->execute();
$result= [];
while ($teste = $stmt->fetch(PDO::FETCH_ASSOC)) {
array_push($result, $teste);
}
return $result;
}
/* REALIZA UMA CONSULTA NA TBL_VENDAS E RETORNA TODOS OS PEDIDOS "EM ABERTO" DE TODOS OS USUÁRIOS */
public function consultarPedidosGerente() {
$stmt = $this->pdo->prepare("SELECT * FROM tbl_vendas WHERE status_pedido = 'Em aberto'");
$stmt->execute();
$pedido = Array();
while ($teste = $stmt->fetch(PDO::FETCH_ASSOC)) {
$produtos[] = array_map("utf8_encode", $teste);
}
return $produtos;
}
/* FUNÇÃO PARA ENCERRAR O PEDIDO - TROCAR O "STATUS_PEDIDO" DE "EM ABERTO" PARA "ENCERRADO" */
public function encerrarPedido($id_usuario) {
// PESQUISAR O VALOR TOTAL DA CONTA REALIZANDO UMA BUSCA NO BANCO DE DADOS NA TBL_PEDIDOS
$sql_tblvendas = "UPDATE tbl_vendas SET status_pedido = 'Encerrado', data_encerramento=NOW() WHERE id_usuario = '$id_usuario'";
$sql_tblpedidos = "UPDATE tbl_pedidos SET status_pedido = 'Encerrado' WHERE id_usuario = '$id_usuario'";
$stmt_tblvendas = $this->pdo->prepare($sql_tblvendas);
$stmt_tblpedidos = $this->pdo->prepare($sql_tblpedidos);
$stmt_tblvendas->execute();
$stmt_tblpedidos->execute();
}
}
/*
TABELA DE OPÇÕES
* 1 -> ENVIAR PEDIDO
* 2 -> EXIBIR PEDIDO (USUÁRIO)
* 3 -> EXIBIR PEDIDO (GERENTE)
* 4 -> ENCERRAR PEDIDO (GERENTE)
* 5 -> ENCERRAR PEDIDO (USUÁRIO)
*/
if (isset($_POST) && isset($_POST['opc'])) {
$opc = $_POST['opc'];
/* TRABALHAR COM SWITCH CASE PARA REALIZAR AS OPERAÇÕES */
switch ($opc) {
case '1':
if (isset($_POST['lista_cod']) && isset($_POST['itens_qtd'])) {
$id_usuario = $_SESSION['id'];
$lista_cod = $_POST['lista_cod'];
$itens_qtd = $_POST['itens_qtd'];
$pedido = new Pedidos();
$pedido->inserirPedido($id_usuario, $lista_cod, $itens_qtd);
}
break;
case '2':
if (isset($_POST['id_usuario'])) {
$id_usuario = $_POST['id_usuario'];
$consulta = new Pedidos();
$pedidos = $consulta->consultarPedidos($id_usuario);
$carrinho = new Consulta();
$pedido_aberto = Array();
$pedidos_encerrados = Array();
$teste = Array();
$teste2 = Array();
foreach ($pedidos as $value) {
if ($value['status_pedido'] === "Em aberto") {
array_push($pedido_aberto, $value);
}
}
echo json_encode($pedido_aberto);
}
break;
case '3':
$consulta = new Pedidos();
$pedidos = $consulta->consultarPedidosGerente();
$pedido_aberto = Array();
foreach ($pedidos as $value) {
if ($value['status_pedido'] === "Em aberto") {
array_push($pedido_aberto, $value);
}
}
echo json_encode($pedido_aberto);
break;
case '4':
if(isset($_POST['id_usuario'])){
$pedidos = new Pedidos();
$pedidos->encerrarPedido($_POST['id_usuario']);
}
break;
default:
break;
}
}
?>