Versão inicial em produção
This commit is contained in:
+143
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
$titulo_pagina = 'Corretoras';
|
||||
$pagina_ativa = 'corretoras';
|
||||
|
||||
require_once __DIR__ . '/includes/config.php';
|
||||
require_once __DIR__ . '/includes/db.php';
|
||||
require_once __DIR__ . '/includes/auth.php';
|
||||
|
||||
ao_exigir_permissao('corretoras');
|
||||
|
||||
// Corretora é um catálogo global, compartilhado por todos os usuários — não
|
||||
// pertence a ninguém em especial. Usamos $ao_usuario_id só para contar, na
|
||||
// listagem, quantas contas O USUÁRIO ATUAL tem em cada corretora (o limite
|
||||
// de até 3 contas é por usuário, não pela corretora como um todo).
|
||||
$ao_usuario_id = (int) ao_usuario_logado()['id'];
|
||||
|
||||
$erro = null;
|
||||
$sucesso = null;
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'excluir') {
|
||||
$id = (int) ($_POST['id'] ?? 0);
|
||||
// Verifica em TODOS os usuários, não só no atual: como a corretora é
|
||||
// compartilhada, excluir uma que outra pessoa ainda usa apagaria as
|
||||
// contas dela também (ON DELETE CASCADE) — por isso o bloqueio é global.
|
||||
$stmt = $pdo->prepare('SELECT COUNT(*) FROM contas WHERE corretora_id = ?');
|
||||
$stmt->execute([$id]);
|
||||
if ((int) $stmt->fetchColumn() > 0) {
|
||||
$erro = 'Não é possível excluir: esta corretora ainda tem contas cadastradas (suas ou de outro usuário). Exclua as contas primeiro.';
|
||||
} else {
|
||||
$pdo->prepare('DELETE FROM corretoras WHERE id = ?')->execute([$id]);
|
||||
header('Location: corretoras.php?excluido=1');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'salvar') {
|
||||
$id = (int) ($_POST['id'] ?? 0);
|
||||
$nome = trim($_POST['nome'] ?? '');
|
||||
|
||||
if ($nome === '') {
|
||||
$erro = 'Informe o nome da corretora.';
|
||||
} else {
|
||||
try {
|
||||
if ($id > 0) {
|
||||
$stmt = $pdo->prepare('UPDATE corretoras SET nome = ? WHERE id = ?');
|
||||
$stmt->execute([$nome, $id]);
|
||||
} else {
|
||||
$stmt = $pdo->prepare('INSERT INTO corretoras (nome) VALUES (?)');
|
||||
$stmt->execute([$nome]);
|
||||
}
|
||||
header('Location: corretoras.php?salvo=1');
|
||||
exit;
|
||||
} catch (PDOException $e) {
|
||||
$erro = ($e->getCode() === '23000') ? 'Já existe uma corretora com esse nome.' : ('Erro ao salvar: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$editando = null;
|
||||
if (isset($_GET['editar'])) {
|
||||
$stmt = $pdo->prepare('SELECT * FROM corretoras WHERE id = ?');
|
||||
$stmt->execute([(int) $_GET['editar']]);
|
||||
$editando = $stmt->fetch() ?: null;
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'salvar' && $erro) {
|
||||
$editando = ['id' => $id, 'nome' => $nome];
|
||||
}
|
||||
|
||||
if (isset($_GET['salvo'])) $sucesso = 'Corretora salva com sucesso.';
|
||||
if (isset($_GET['excluido'])) $sucesso = 'Corretora excluída.';
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
'SELECT c.*, (SELECT COUNT(*) FROM contas ct WHERE ct.corretora_id = c.id AND ct.usuario_id = ?) AS total_contas
|
||||
FROM corretoras c ORDER BY c.nome'
|
||||
);
|
||||
$stmt->execute([$ao_usuario_id]);
|
||||
$corretoras = $stmt->fetchAll();
|
||||
|
||||
require __DIR__ . '/includes/header.php';
|
||||
?>
|
||||
|
||||
<h1 class="ao-page-title">Corretoras</h1>
|
||||
<p style="color: var(--ao-text-muted); font-size: var(--ao-fs-sm); max-width: 640px; margin-top: -8px;">
|
||||
Lista compartilhada por todos os usuários — cadastre aqui as instituições financeiras
|
||||
(ex: XP Investimentos, Rico, Clear). Cada uma pode ter até 3 contas suas — cadastre as
|
||||
contas em <a href="contas.php">Contas</a>.
|
||||
</p>
|
||||
|
||||
<?php if ($erro): ?>
|
||||
<div class="ao-badge ao-badge-baixa" style="display:block; margin-bottom: var(--ao-space-4); padding: 10px 14px; font-size: var(--ao-fs-sm);"><?= htmlspecialchars($erro) ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($sucesso): ?>
|
||||
<div class="ao-badge ao-badge-alta" style="display:block; margin-bottom: var(--ao-space-4); padding: 10px 14px; font-size: var(--ao-fs-sm);"><?= htmlspecialchars($sucesso) ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="ao-card" style="max-width: 480px; margin-bottom: var(--ao-space-6);">
|
||||
<div class="ao-card-header"><strong><?= $editando ? 'Editar corretora' : 'Nova corretora' ?></strong></div>
|
||||
<form method="post" action="corretoras.php">
|
||||
<input type="hidden" name="acao" value="salvar">
|
||||
<input type="hidden" name="id" value="<?= (int) ($editando['id'] ?? 0) ?>">
|
||||
<div class="ao-field" style="margin-bottom: var(--ao-space-5);">
|
||||
<label for="nome">Nome da corretora</label>
|
||||
<input type="text" id="nome" name="nome" placeholder="Ex: XP Investimentos" required
|
||||
value="<?= htmlspecialchars($editando['nome'] ?? '') ?>">
|
||||
</div>
|
||||
<button type="submit" class="ao-btn ao-btn-primary"><?= $editando ? 'Salvar alterações' : 'Cadastrar corretora' ?></button>
|
||||
<?php if ($editando): ?>
|
||||
<a href="corretoras.php" class="ao-btn ao-btn-secondary">Cancelar</a>
|
||||
<?php endif; ?>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="ao-card">
|
||||
<div class="ao-card-header"><strong>Corretoras cadastradas</strong></div>
|
||||
<table class="ao-table">
|
||||
<thead>
|
||||
<tr><th>Nome</th><th>Minhas contas</th><th></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php if (!$corretoras): ?>
|
||||
<tr><td colspan="3" style="color: var(--ao-text-muted);">Nenhuma corretora cadastrada ainda.</td></tr>
|
||||
<?php endif; ?>
|
||||
<?php foreach ($corretoras as $c): ?>
|
||||
<tr>
|
||||
<td><?= htmlspecialchars($c['nome']) ?></td>
|
||||
<td class="ao-numeric"><?= (int) $c['total_contas'] ?> / 3</td>
|
||||
<td style="white-space: nowrap; text-align: right;">
|
||||
<a href="contas.php?corretora=<?= $c['id'] ?>" class="ao-btn ao-btn-secondary" style="padding: 4px 10px; font-size: var(--ao-fs-xs);">Ver contas</a>
|
||||
<a href="corretoras.php?editar=<?= $c['id'] ?>" class="ao-btn ao-btn-secondary" style="padding: 4px 10px; font-size: var(--ao-fs-xs);">Editar</a>
|
||||
<form method="post" action="corretoras.php" style="display:inline;" onsubmit="return confirm('Excluir esta corretora? Ela é compartilhada — só será excluída se nenhum usuário tiver contas nela.');">
|
||||
<input type="hidden" name="acao" value="excluir">
|
||||
<input type="hidden" name="id" value="<?= $c['id'] ?>">
|
||||
<button type="submit" class="ao-btn ao-btn-secondary" style="padding: 4px 10px; font-size: var(--ao-fs-xs);">Excluir</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<?php require __DIR__ . '/includes/footer.php'; ?>
|
||||
Reference in New Issue
Block a user