# 💾 SNIPPETS DE CÓDIGO PADRÃO

## ⚠️ PADRÕES AUTOMÁTICOS IMPORTANTES

**SEMPRE aplicar em TODOS os CRUDs:**

1. **id** → serial4 (auto-increment, primary key)
2. **status** → int4 (0=Ativo, 2=Excluído)
3. **empresa** → int4 (filtrar sempre)
4. **delete.php** → UPDATE status=2 (NUNCA DELETE físico)
5. **select.php** → WHERE status != 2 (listar apenas ativos)
6. **insert.php** → DEFAULT status=0
7. **Campos com múltiplos valores** → Use INT com CASE WHEN para exibir descrição

---

## 0. Campos com Múltiplos Valores (SELECT/CASE WHEN)

**Padrão para campos INT que possuem múltiplos valores:**

### No Banco de Dados:
```sql
CREATE TABLE public.dim_plano (
	id serial4 PRIMARY KEY,
	empresa int4 NOT NULL,
	descricao varchar NOT NULL,
	tipoconta int4,      -- 1=Ativo, 2=Sintético, 3=Analítico, 4=Detalhe, 5=Fechado
	natureza int4,       -- 0=Débito, 1=Crédito
	status int4 DEFAULT 0,
	CONSTRAINT fk_plano_empresa FOREIGN KEY (empresa) REFERENCES sis001_empresa(id)
);
```

### No select.php (com CASE WHEN para descrição):
```php
$query = "
	SELECT
		pc.id,
		pc.descricao,
		pc.tipoconta,
		CASE WHEN pc.tipoconta = 1 THEN 'Ativo'
			 WHEN pc.tipoconta = 2 THEN 'Sintético'
			 WHEN pc.tipoconta = 3 THEN 'Analítico'
			 WHEN pc.tipoconta = 4 THEN 'Detalhe'
			 WHEN pc.tipoconta = 5 THEN 'Fechado'
			 ELSE 'Indefinido' END as tipoconta_desc,
		pc.natureza,
		CASE WHEN pc.natureza = 0 THEN 'Débito' ELSE 'Crédito' END as natureza_desc,
		CASE WHEN pc.status = 0 THEN 'Ativo' ELSE 'Inativo' END as status_desc,
		pc.status
	FROM public.dim_planoconta pc
	WHERE pc.empresa = $codempresa
	AND pc.status != 2
";

// Aplicar filtros se existirem
if(isset($filtros) && is_array($filtros)) {
	if(isset($filtros['tipoconta']) && $filtros['tipoconta'] !== '') {
		$query .= " AND pc.tipoconta = " . intval($filtros['tipoconta']);
	}
	if(isset($filtros['natureza']) && $filtros['natureza'] !== '') {
		$query .= " AND pc.natureza = " . intval($filtros['natureza']);
	}
}

$query .= " ORDER BY pc.descricao ASC";
?>
```

### No cad.php (com SELECT e OPTIONS):
```php
<div class="col-lg-3">
	<div class="form-group">
		<label class="col-form-label" for="tipoconta">Tipo de Conta</label>
		<select class="form-control populate" id="tipoconta" data-plugin-selectTwo name="tipoconta" required>
			<option value="">-- Selecione --</option>
			<option value="1" <?php if($dados['tipoconta']==1){echo "selected";}?>>Ativo</option>
			<option value="2" <?php if($dados['tipoconta']==2){echo "selected";}?>>Sintético</option>
			<option value="3" <?php if($dados['tipoconta']==3){echo "selected";}?>>Analítico</option>
			<option value="4" <?php if($dados['tipoconta']==4){echo "selected";}?>>Detalhe</option>
			<option value="5" <?php if($dados['tipoconta']==5){echo "selected";}?>>Fechado</option>
		</select>
	</div>
</div>

<div class="col-lg-2">
	<div class="form-group">
		<label class="col-form-label" for="natureza">Natureza</label>
		<select class="form-control populate" id="natureza" data-plugin-selectTwo name="natureza" required>
			<option value="">-- Selecione --</option>
			<option value="0" <?php if($dados['natureza']==0){echo "selected";}?>>Débito</option>
			<option value="1" <?php if($dados['natureza']==1){echo "selected";}?>>Crédito</option>
		</select>
	</div>
</div>
```

### No insert.php (converter para INT):
```php
$tipoconta = intval($_POST["tipoconta"]);    // Converter para INT
$natureza = intval($_POST["natureza"]);      // Converter para INT

$sql = "INSERT INTO dim_planoconta (empresa, descricao, tipoconta, natureza, status) 
		VALUES ($empresa, '$descricao', $tipoconta, $natureza, 0)";
```

### No filtro.php (com SELECT):
```php
<div class="col-lg-3">
	<div class="form-group">
		<label class="col-form-label" for="tipoconta">Tipo de Conta</label>
		<select id="tipoconta" name="tipoconta" data-plugin-selectTwo class="form-control populate">
			<option value="1" <?php echo (isset($filtros['tipoconta']) && $filtros['tipoconta'] == '1') ? 'selected' : ''; ?>>Ativo</option>
			<option value="2" <?php echo (isset($filtros['tipoconta']) && $filtros['tipoconta'] == '2') ? 'selected' : ''; ?>>Sintético</option>
			<option value="3" <?php echo (isset($filtros['tipoconta']) && $filtros['tipoconta'] == '3') ? 'selected' : ''; ?>>Analítico</option>
			<option value="4" <?php echo (isset($filtros['tipoconta']) && $filtros['tipoconta'] == '4') ? 'selected' : ''; ?>>Detalhe</option>
			<option value="5" <?php echo (isset($filtros['tipoconta']) && $filtros['tipoconta'] == '5') ? 'selected' : ''; ?>>Fechado</option>
			<option value="" <?php echo (!isset($filtros['tipoconta']) || $filtros['tipoconta'] === '') ? 'selected' : ''; ?>>Todos</option>
		</select>
	</div>
</div>

<div class="col-lg-3">
	<div class="form-group">
		<label class="col-form-label" for="natureza">Natureza</label>
		<select id="natureza" name="natureza" data-plugin-selectTwo class="form-control populate">
			<option value="0" <?php echo (isset($filtros['natureza']) && $filtros['natureza'] == '0') ? 'selected' : ''; ?>>Débito</option>
			<option value="1" <?php echo (isset($filtros['natureza']) && $filtros['natureza'] == '1') ? 'selected' : ''; ?>>Crédito</option>
			<option value="" <?php echo (!isset($filtros['natureza']) || $filtros['natureza'] === '') ? 'selected' : ''; ?>>Todos</option>
		</select>
	</div>
</div>
```

**⚠️ Regras importantes:**
- ✅ Sempre use `intval()` ao converter POST para INT
- ✅ Use `CASE WHEN` no SQL para exibir descrição amigável
- ✅ Armazene o valor INT no banco, não a descrição
- ✅ Use `pg_escape_string()` apenas para strings/varchar
- ❌ NUNCA armazene a descrição no banco se for apenas exibição

---

## 1. select.php Template

```php
<?php require ('../include/autenticacao.php');

// Verificar permissão
if(strpos($rotina, 'dm_novo_modulo') === false){
	echo "<script language='javascript' type='text/javascript'>
		alert('Você não tem permissão para acessar essa rotina $rotina');
		window.location.href='../home';
	</script>";
	exit;
}

$query = "
	SELECT
		nm.id,
		nm.descricao,
		CASE WHEN nm.status = 0 THEN 'Ativo' ELSE 'Excluído' END as status_desc,
		nm.status
	FROM public.dim_novo_modulo nm
	WHERE nm.empresa = $codempresa
	AND nm.status != 2
";

// Aplicar filtros se existirem
if(isset($filtros) && is_array($filtros)) {
	if(!empty($filtros['id'])) {
		$query .= " AND nm.id = " . intval($filtros['id']);
	}
	if(!empty($filtros['descricao'])) {
		$filtro_desc = pg_escape_string($filtros['descricao']);
		$query .= " AND nm.descricao ILIKE '%$filtro_desc%'";
	}
	if(isset($filtros['status']) && $filtros['status'] !== '') {
		$query .= " AND nm.status = " . intval($filtros['status']);
	}
}

$query .= " ORDER BY nm.descricao ASC";

$re_postgree_dim_novo_modulo = pg_query($bdcon, $query);
if (!$re_postgree_dim_novo_modulo) {
	echo "Erro na consulta: " . pg_last_error($bdcon);
	exit;
}
?>
```

---

## 2. index.php - Seção do Loop (Otimizado)

```php
<?php
	// Buscar permissões UMA VEZ antes do loop (OTIMIZAÇÃO)
	$permissoes = obterTodasPermissoes($rot);
	$perm_editar = $permissoes['editar'];
	$perm_deletar = $permissoes['deletar'];
	
	// Coletar todos os dados em um array
	$data_rows = array();
	$contador = 0;
	while($l = pg_fetch_array($re_postgree_dim_novo_modulo)) {
		$contador++;
		$data_rows[] = [
			'id' => $l["id"],
			'descricao' => $l["descricao"],
			'status' => $l["status_desc"]
		];
	}
	@pg_close();
	
	// Renderizar rows na ordem correta e apenas colunas visíveis
	foreach ($data_rows as $row) {
		echo "<tr>";
		echo "<td>";
		echo "<div class='btn-group'>";
		echo "<button data-toggle='dropdown' class='btn btn-xs btn-default dropdown-toggle' type='button'><span class='material-symbols-outlined'>settings</span></button>";
		echo "<div class='dropdown-menu' role='menu'>";
		
		// Botão Alterar - usar variável de permissão (sem query)
		if($perm_editar) {
			echo "<a class='dropdown-item text-1' href='cad?id=" . htmlspecialchars($row['id']) . "'>Alterar</a>";
		}
		
		// Botão Excluir - usar variável de permissão (sem query)
		if($perm_deletar) {
			echo "<a class='dropdown-item text-1' href='delete?id=" . htmlspecialchars($row['id']) . "'>Excluir</a>";
		}
		
		echo "</div>";
		echo "</div>";
		echo "</td>";
		
		// Renderizar dados na ordem correta
		foreach ($order as $index) {
			if (isset($colunas[$index]) && $colunas[$index]['visible']) {
				$col_id = $colunas[$index]['id'];
				$value = isset($row[$col_id]) ? htmlspecialchars($row[$col_id]) : '';
				echo "<td>" . $value . "</td>";
			}
		}
		echo "</tr>";
	}
 ?>
```

---

## 3. cad.php - Validação de Permissão

```php
<?php require ('../include/autenticacao.php'); 
require ('../include/validacaopermissao.php');

$codempresa            = $_SESSION['codempresa'];
$rotina            = $_SESSION['rotina'];
$grupotitulo = 'Cadastro';
$rotinatitulo = 'Novo Módulo';
$rot = 'dm_novo_modulo';

if(strpos($rotina,'dm_novo_modulo') !== false){
	// Validar visualizar no inicio da página
	validarPermissaoOuRedirecionar($rot, 'visualizar');
	include ('../include/inicio.php'); 
}else{
	echo "
		<script language='javascript' type='text/javascript'>
			alert('Você não tem permissão para acessar essa rotina $rotina ');
			window.location.href='../home';
		</script>";
	exit;
}
?>
```

---

## 4. insert.php - Completo (COM SOFT DELETE E STATUS)

```php
<?php require ('../include/autenticacao.php');
require ('../include/validacaopermissao.php');
$rot = 'dm_novo_modulo';
$empresa = $_SESSION['Codempresa'];

if($_SERVER["REQUEST_METHOD"] == "POST") {
	$id           	= $_POST['id'];
	if($id == null){$id = 'null';}
	$descricao    = $_POST["descricao"];
	$action       = $_POST["action"];
	$status       = $_POST["status"];
	if($status == null || $status == ''){$status = 0;}

	if($action == 1) {
		// Validar permissão de editar
		validarPermissaoOuRedirecionar($rot, 'editar');
		// UPDATE com status
		$sql = "UPDATE public.dim_novo_modulo
				SET descricao='$descricao', 
				status=$status
				WHERE id=$id AND empresa=$empresa
				";
	} else {
		// Validar permissão de criar
		validarPermissaoOuRedirecionar($rot, 'criar');
		$sql = "INSERT INTO public.dim_novo_modulo (empresa, descricao, status) VALUES ($empresa,'$descricao',$status)";
	}

	$res = pg_query($bdcon,$sql);
	
	if($res){
		echo "<script language='javascript' type='text/javascript'>
		alert('Cadastro realizado com sucesso');
		window.location.href='index';
		</script>";
		exit;
	}else{
		echo pg_last_error($bdcon);
		exit;
	}
}
?>
```

---

## 5. delete.php - Soft Delete (NUNCA DELETE FÍSICO)

```php
<?php require ('../include/autenticacao.php');
require ('../include/validacaopermissao.php');
$rot = 'dm_novo_modulo';
$empresa = $_SESSION['Codempresa'];

// Validar permissão de deletar
validarPermissaoOuRedirecionar($rot, 'deletar');
?>
<?php
if($_SERVER["REQUEST_METHOD"] == "GET"){
	$id  	= $_GET["id"];
	// SOFT DELETE: Atualizar status para 2 (excluído), nunca deletar fisicamente
	$sql = "UPDATE public.dim_novo_modulo SET status=2 WHERE id=$id AND empresa=$empresa";
	
	if(pg_query($bdcon, $sql)) {	
		echo "<script language='javascript' type='text/javascript'>
	alert('Registro excluído com sucesso');
	window.location.href='../dm_novo_modulo/';
	</script>";
	} else {
		echo "<script language='javascript' type='text/javascript'>
	alert('Ocorreu um erro inesperado! Por favor entrar em contato com o suporte');
	window.location.href='../dm_novo_modulo/';
	</script>";
	}
}
?>
```

---

## 6. filtro.php - Estrutura Completa

```php
<?php 
require ('../include/autenticacao.php'); 
$codempresa = $_SESSION['codempresa'];
$usuario = $_SESSION['UsuarioID'];
$rot = 'dm_novo_modulo';
$modal = '';
$titulo = 'Filtrar Novo Módulo';
$action = '0';
$btn = 'Filtrar';
//padrão da lista de filtros esperadaos
$filtros = [
	'id'         => '',
	'descricao'  => '',
	'status'     => ''
];
//include com a regra para salvar no banco de dados os filtros
include('../include/filtros_db.php');
include ('../include/inicio.php');  
include ('select.php');
?>

	<div class="inner-wrapper">
		<section role="main" class="content-body card-margin">
			<!-- start: page -->
			<div class="row">
				<div class="col">
					<section class="card_section">
						<header class="page-header">
							<div class="card-actions">
								<button type="submit" form="filtroform" class="btn btn-sm btn-success"><i class="material-symbols-outlined">filter_list</i> <?php echo $btn;?></button>
								<button type="reset" form="filtroform" class="btn btn-sm btn-default"><i class="material-symbols-outlined">delete_outline</i> Limpar</button>
								<a href="index" title="Voltar para lista" class="btn btn-sm  btn-default">	<i class="material-symbols-outlined">arrow_back</i></a>
								<a href="../home" title="Acessar a pagina inicial" class="btn btn-sm  btn-default">	<i class="material-symbols-outlined">home</i></a>
							</div>
							<div class="left-wrapper text-left">
								<ol class="breadcrumbs">
									<li>
										<a href="../home">
											<i class="material-symbols-outlined">home</i>
										</a>
									</li>
									<li><span>Cadastro</span></li>
									<li><span>Novo Módulo</span></li>
									<li><span>Filtro</span></li>
								</ol>
							</div>
						</header>
						<div class="card-body-tms">
							<form id="filtroform" class="form-horizontal form-bordered" method="POST" action="index">
								<input id="empresa" name="empresa" value="<?php echo $codempresa;?>" type="hidden" />
								<input id="action" name="action" value="<?php echo $action;?>" type="hidden" />
								
								<div class="row form-group">
									<div class="col-lg-3">
										<div class="form-group">
											<label class="col-form-label" for="id">ID</label>
											<input type="text" class="form-control" id="id" name="id" value="<?php echo isset($filtros['id']) ? $filtros['id'] : ''; ?>" placeholder="ID">
										</div>
									</div>
									<div class="col-lg-6">
										<div class="form-group">
											<label class="col-form-label" for="descricao">Descrição</label>
											<input type="text" class="form-control" id="descricao" name="descricao" value="<?php echo isset($filtros['descricao']) ? $filtros['descricao'] : ''; ?>" placeholder="Descrição">
										</div>
									</div>
									<div class="col-lg-3">
										<div class="form-group">
											<label class="col-form-label" for="status">Status</label>
											<select id="status" name="status" data-plugin-selectTwo class="form-control populate" data-plugin-options='{ "minimumInputLength": 0 }'>
												<option value="1" <?php echo (isset($filtros['status']) && $filtros['status'] == '1') ? 'selected' : ''; ?>>Ativo</option>
												<option value="0" <?php echo (isset($filtros['status']) && $filtros['status'] == '0') ? 'selected' : ''; ?>>Inativo</option>
												<option value="" <?php echo (!isset($filtros['status']) || $filtros['status'] === '') ? 'selected' : ''; ?>>Todos</option>
											</select>
										</div>
									</div>
								</div>
								
								<footer class="card-footer">
									<div class="row justify-content-end">
									</div>
								</footer>
							</form>
						</div>
					</section>
				</div>
			</div>
		</section>
	</div>
	<!-- end: page -->

<?php
include ('../include/fim.php'); 
@pg_close();
?>
```

---

## 7. Formulário (dentro de cad.php)

```php
<form id="cadform" class="form-horizontal form-bordered" method="post" action="insert">
	<input id="empresa" class="form-control" data-validate-length-range="11"  name="empresa"  value="<?php echo $codempresa;?>" type="hidden" />
	<input id="id" class="form-control" data-validate-length-range="11"  name="id"  value="<?php echo $id;?>" type="hidden" />
	<input id="action" class="form-control" data-validate-length-range="11"  name="action"  value="<?php echo $action;?>" type="hidden" />
	
	<div class="row form-group">
		<div class="col-lg-6">
			<div class="form-group">
				<label class="col-form-label" for="descricao">Descrição</label>
				<input type="text" class="form-control" id="descricao" name="descricao" value="<?php echo $dados['descricao'];?>" placeholder="" required>
			</div>
		</div>
		<div class="col-lg-2">
			<div class="form-group">
				<label class="col-form-label" for="status">Status</label>
				<select class="form-control" id="status" name="status">
					<option value="1" <?php if($dados['status']==1){echo "selected";}?>>Ativo</option>
					<option value="0" <?php if($dados['status']==0){echo "selected";}?>>Inativo</option>
				</select>
			</div>
		</div>
	</div>
	
	<div class="row">
		<div class="col-lg-12">
			<button type="submit" class="btn btn-primary"><?php echo $btn;?></button>
			<a href="index.php" class="btn btn-secondary">Cancelar</a>
		</div>
	</div>
</form>
```

---

**Última atualização:** 27/01/2026  
**Versão:** 1.0  
**Status:** Pronto para Produção ✅
