# TMS010 - OPERAÇÃO DE TRANSPORTE
## Estrutura de Arquivos e Instruções

### 📂 Arquivos Criados

```
tms010_operacao/
├── index.php      → Listagem de operações com filtros
├── cad.php        → Cadastro/Edição de operação
├── insert.php     → Processamento de INSERT/UPDATE
├── delete.php     → Exclusão de operação (soft delete)
├── select.php     → Query de consulta com JOINs
└── filtro.php     → Salvar filtros no banco
```

---

## 📋 Funcionalidades

### INDEX.php - Listagem
- ✅ Exibição em DataTable
- ✅ Filtros por: Número, Cliente, Veículo, Motorista, Fornecedor, Situação, Status
- ✅ Layout personalizável por usuário
- ✅ Ação de editar e deletar
- ✅ Soft delete (marca como excluído)

### CAD.php - Cadastro/Edição
Campos capturados:

**Identificação:**
- Número (obrigatório, único)
- Data Operação
- Situação (Aberto, Cotada, Contratada, Agendada, Em Transporte, Entregue, Cancelada)
- Status (Ativo/Excluído)

**Partes Comerciais:**
- Cliente (obrigatório)
- Expedidor
- Destinatário
- Recebedor
- Fornecedor Transportador

**Recursos:**
- Veículo Principal (obrigatório)
- Carreta 1
- Carreta 2
- Motorista (obrigatório)

**Carga:**
- Peso Estimado (kg)
- Volume Estimado (m³)
- Temperatura Inicial (°C)
- Temperatura Final (°C)

**Programação:**
- Data Prevista Coleta
- Data Prevista Entrega
- Distância Estimada (km)

**Adicionais:**
- Observações (texto livre)

### INSERT.php - Processamento
- INSERT com valores padrão: status=0 (ativo), situacao=valor selecionado
- UPDATE com verificação de empresa
- Tratamento de campos NULL
- Redirecionamento com sucesso

### DELETE.php - Exclusão
- Soft delete: `UPDATE status = 1`
- Mantém histórico
- Filtragem automática no index

### SELECT.php - Consulta
- JOIN com dim_cliente
- JOIN com dim_veiculostelemetria
- JOIN com dim_motorista
- JOIN com dim_fornecedor
- Conversão de status para descrição
- Filtros dinâmicos

---

## 🔧 Configuração Necessária

### 1. Permissões no Banco
A tabela `tms010_operacao` precisa ter coluna `empresa` e estar no banco SAG.

### 2. Adicionar na Navegação
Adicionar em `include/menu.php` ou arquivo similar:
```html
<li class="dropdown">
    <a class="dropdown-toggle" href="#" data-toggle="dropdown">
        Transporte
    </a>
    <ul class="dropdown-menu">
        <li><a href="tms010_operacao/index">Operação de Transporte</a></li>
    </ul>
</li>
```

### 3. Adicionar em Autenticação
No arquivo de permissões/rotinas, incluir:
```
tms010_operacao
```

### 4. Criar Tabela no Banco
Executar o DDL em `TMS010_OPERACAO_DDL.sql`:
```sql
psql -U postgres -d SAG -f TMS010_OPERACAO_DDL.sql
```

---

## 🎯 Campos no Formulário

### Linha 1
| Campo | Tipo | Obrig. | Descrição |
|-------|------|--------|-----------|
| Número | Text | ✅ | Código único da operação |
| Data Operação | Date | ✅ | Quando foi criada |
| Situação | Select | ✅ | Status da operação |
| Status | Select | ✅ | Ativo/Excluído |

### Linha 2
| Campo | Tipo | Obrig. | Descrição |
|-------|------|--------|-----------|
| Cliente | Select2 | ✅ | Quem contratou |
| Expedidor | Select2 | ❌ | Quem envia |
| Destinatário | Select2 | ❌ | Quem recebe |
| Recebedor | Select2 | ❌ | Pessoa que recebe |

### Linha 3
| Campo | Tipo | Obrig. | Descrição |
|-------|------|--------|-----------|
| Fornecedor Transportador | Select2 | ❌ | Transportadora |
| Veículo | Select2 | ✅ | Placa do cavalo |
| Motorista | Select2 | ✅ | Responsável viagem |
| Carreta 1 | Select2 | ❌ | Primeira carreta |

### Linha 4
| Campo | Tipo | Obrig. | Descrição |
|-------|------|--------|-----------|
| Carreta 2 | Select2 | ❌ | Segunda carreta |
| Peso Estimado | Number | ❌ | Em kg |
| Volume Estimado | Number | ❌ | Em m³ |
| Temp. Inicial | Number | ❌ | Em °C |
| Temp. Final | Number | ❌ | Em °C |

### Linha 5
| Campo | Tipo | Obrig. | Descrição |
|-------|------|--------|-----------|
| Data Prev. Coleta | DateTime | ❌ | Quando busca |
| Data Prev. Entrega | DateTime | ❌ | Quando entrega |
| Distância Estimada | Number | ❌ | Em km |

### Linha 6
| Campo | Tipo | Obrig. | Descrição |
|-------|------|--------|-----------|
| Observações | TextArea | ❌ | Info adicionais |

---

## 🔄 Fluxo de Uso

1. **Listar Operações** → `index.php`
   - Aplicar filtros se necessário
   - Ver todas operações ativas

2. **Criar Nova** → Clique em "Adicionar"
   - Preencher formulário mínimo (Cliente, Veículo, Motorista)
   - Clicar "Salvar"
   - Sistema redireciona para listagem

3. **Editar** → Clique em ícone de editar
   - Formulário vem preenchido
   - Modificar campos necessários
   - Clicar "Atualizar"

4. **Deletar** → Clique em ícone de deletar
   - Confirmar exclusão
   - Marca como excluído (soft delete)
   - Desaparece da listagem

5. **Filtrar** → Use filtros na barra superior
   - Filtros são salvos por usuário
   - Próxima vez que abre, filtros aparecem

---

## 📊 Padrão Seguido

Este módulo segue o padrão de `dm_motorista`:
- Mesma estrutura de pastas
- Mesma lógica de filtros
- Mesmo layout de formulário
- Mesmas funções de CRUD

**Diferenças:**
- Múltiplos selects (clientes, fornecedores)
- Campos numéricos com decimais
- Datas/horários

---

## 🐛 Próximos Passos

1. **Testes**
   - [ ] Criar operação
   - [ ] Editar operação
   - [ ] Deletar operação
   - [ ] Aplicar filtros

2. **Melhorias Futuras**
   - [ ] Integrar com tms010_operacao_itens (sub-itens)
   - [ ] Integrar com tms010_operacao_cotacoes
   - [ ] Dashboard de operações
   - [ ] Rastreamento em tempo real
   - [ ] Emissão de CTE/Manifesto

---

## 📞 Observações

- **Empresa**: Filtrada automaticamente por `$_SESSION['Codempresa']`
- **Usuário**: Rastreado por `$_SESSION['UsuarioID']`
- **Status Padrão**: Nova operação sempre `status = 0` (ativo)
- **Soft Delete**: Usa `status = 1` em vez de deletar registros

