Este é um sistema de PDV (Ponto de Venda) desenvolvido em PHP que permite o registro de itens através de códigos de barras ou rastreamento, gerenciamento de carrinho de compras e finalização de vendas.
session_start();
include_once "../templates/header_gestor.php";
include_once "../db/database.php";
$db = new Database();
$pdo = $db->getConnection();
Funcionalidade:
Databaseif (!isset($_SESSION['itens'])) {
$_SESSION['itens'] = [];
}
Funcionalidade: Cria array de itens na sessão caso não exista.
if (isset($_POST['codigo'])) {
$codigo = trim($_POST['codigo']);
// Busca por pacote
$stmt = $pdo->prepare("SELECT c.nome AS cliente_nome, p.id
FROM pacotes p
INNER JOIN clientes c ON p.cliente_id = c.id_cliente
WHERE p.codigo_rastreamento = :codigo");
$stmt->bindParam(':codigo', $codigo);
$stmt->execute();
$pacote = $stmt->fetch(PDO::FETCH_ASSOC);
Funcionalidade:
[
'codigo' => 'código_rastreamento',
'descricao' => 'Pacote - Nome do Cliente',
'valor' => 2.00,
'pacote_id' => id_do_pacote
]
else {
$stmt = $pdo->prepare("SELECT descricao, valor_venda
FROM produtos
WHERE codigo_barras = :codigo");
$stmt->bindParam(':codigo', $codigo);
$stmt->execute();
$produto = $stmt->fetch(PDO::FETCH_ASSOC);
Funcionalidade:
[
'codigo' => 'código_barras',
'descricao' => 'descrição do produto',
'valor' => valor_venda
]
if (isset($_POST['remover'])) {
unset($_SESSION['itens'][$_POST['remover']]);
$_SESSION['itens'] = array_values($_SESSION['itens']);
}
Funcionalidade:
array_values() para evitar buracos$total = array_sum(array_column($_SESSION['itens'], 'valor'));
$itens_json = json_encode($_SESSION['itens']);
Funcionalidade:
<form method="POST">
<input type="text" name="codigo" class="form-control"
placeholder="Bipe o código" autofocus>
<button type="submit" class="btn btn-primary mt-2">Adicionar</button>
</form>
Funcionalidade:
autofocus para leitura rápida com leitor de código de barras<?php foreach ($_SESSION['itens'] as $index => $item): ?>
<tr>
<td><?= htmlspecialchars($item['codigo']) ?></td>
<td><?= htmlspecialchars($item['descricao']) ?></td>
<td><?= number_format($item['valor'], 2, ',', '.') ?></td>
<td>
<form method="POST" style="display:inline;">
<input type="hidden" name="remover" value="<?= $index ?>">
<button type="submit" class="btn btn-danger btn-sm">Remover</button>
</form>
</td>
</tr>
<?php endforeach; ?>
Funcionalidade:
htmlspecialchars() previne XSSnumber_format() formata valores monetários (BRL)<h3>Total: R$ <?= number_format($total, 2, ',', '.') ?></h3>
<button class="btn btn-success"
onclick='abrirPagamento(<?= json_encode($total) ?>, <?= json_encode($itens_json) ?>)'>
Finalizar Bipagem
</button>
function abrirPagamento(valorTotal, itens) {
let url = `pagamento.php?valor_total=${valorTotal}&itens=${encodeURIComponent(itens)}`;
window.open(url, 'Pagamento', 'width=600,height=400');
}
Funcionalidade:
1. Usuário bipa/digita código ↓ 2. Sistema verifica se é pacote ↓ 3. Se não for, verifica se é produto ↓ 4. Item é adicionado ao carrinho (sessão) ↓ 5. Página recarrega e exibe itens ↓ 6. Usuário pode remover itens ou continuar bipando ↓ 7. Ao finalizar, abre janela de pagamento
| Tabela | Campos | Descrição |
|---|---|---|
| pacotes | id, codigo_rastreamento, cliente_id |
Armazena pacotes de clientes com código de rastreamento |
| clientes | id_cliente, nome |
Cadastro de clientes |
| produtos | codigo_barras, descricao, valor_venda |
Catálogo de produtos para venda |