LevelOS-Core/UI/Dashboards/Cadastros/SituacoesPanel.cs

135 lines
5.4 KiB
C#

using CPM;
using MLL;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace UI.Dashboards.Cadastro
{
public class SituacoesPanel : FormularioModelo
{
// Controles marcados como anuláveis para sanar avisos do compilador modernos (NRT)
private LV_TEXTBOX1? txtIdSituacoes;
private LV_TEXTBOX1? txtCodigo;
private LV_TEXTBOX1? txtNome;
private LV_TEXTBOX1? txtEtapa1;
private LV_TEXTBOX1? txtEtapa2;
private LV_TEXTBOX1? txtEtapa3;
private LV_TEXTBOX1? txtEtapa3Pg;
private LV_TEXTBOX1? txtPronto;
private LV_TEXTBOX1? txtSubgrupo;
private LV_TEXTBOX1? txtCorFonte;
private LV_TEXTBOX1? txtCorFundo;
private LV_TEXTBOX1? txtPlanoConta;
public SituacoesPanel()
{
this.Titulo = "CADASTRO E CONFIGURAÇÃO DE SITUAÇÕES / STATUS";
MontarInterfaceCompleta();
}
private void MontarInterfaceCompleta()
{
// --- SEÇÃO 1: IDENTIFICAÇÃO DO STATUS ---
content.Controls.Add(CreateSectionHeader("Identificação do Status", 20));
txtIdSituacoes = AddInput(content, "ID SITUAÇÃO", 20, 55, 110, 28, true);
txtCodigo = AddInput(content, "CÓDIGO INTERNO", 145, 55, 130, 28);
txtNome = AddInput(content, "NOME DA SITUAÇÃO / STATUS", 290, 55, 350, 28);
txtSubgrupo = AddInput(content, "SUBGRUPO", 655, 55, 150, 28);
// --- SEÇÃO 2: REGRAS E ETAPAS DO FLUXO ---
content.Controls.Add(CreateSectionHeader("Etapas e Regras do Fluxo de Trabalho", 115));
txtEtapa1 = AddInput(content, "ETAPA 1 (EX: TRIAGEM)", 20, 150, 185, 28);
txtEtapa2 = AddInput(content, "ETAPA 2 (EX: EM PROCESSO)", 220, 150, 185, 28);
txtEtapa3 = AddInput(content, "ETAPA 3 (EX: CONCLUÍDO)", 420, 150, 185, 28);
txtEtapa3Pg = AddInput(content, "ETAPA 3 PG (PAGO)", 620, 150, 185, 28);
txtPronto = AddInput(content, "INDICADOR PRONTO (S/N)", 20, 210, 185, 28);
txtPlanoConta = AddInput(content, "VÍNCULO PLANO DE CONTAS", 220, 210, 385, 28);
// --- SEÇÃO 3: ESTILIZAÇÃO VISUAL (GRID / KANBAN) ---
content.Controls.Add(CreateSectionHeader("Estilização Visual (Exibição em Telas e Grids)", 275));
txtCorFonte = AddInput(content, "COR DA FONTE (HEX: #FFFFFF)", 20, 310, 230, 28);
txtCorFundo = AddInput(content, "COR DO FUNDO (HEX: #007ACC)", 265, 310, 230, 28);
}
// --- MÉTODOS OBRIGATÓRIOS DO FORMULÁRIO MODELO ---
protected override void OnNovo()
{
// Varre e limpa de forma segura todos os campos que não são somente leitura
foreach (Control c in content.Controls)
{
if (c is LV_TEXTBOX1 txt && !txt.ReadOnly)
{
txt.Text = string.Empty;
}
}
if (txtIdSituacoes != null) txtIdSituacoes.Text = "0";
if (txtPronto != null) txtPronto.Text = "N";
if (txtCorFonte != null) txtCorFonte.Text = "#000000";
if (txtCorFundo != null) txtCorFundo.Text = "#FFFFFF";
txtCodigo?.Focus();
}
protected override void OnSalvar()
{
if (string.IsNullOrWhiteSpace(txtNome?.Text))
{
MessageBox.Show("O nome da situação é obrigatório para mapear os fluxos.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtNome?.Focus();
return;
}
int idSituacoes = string.IsNullOrEmpty(txtIdSituacoes?.Text) ? 0 : Convert.ToInt32(txtIdSituacoes.Text);
// Mapeamento absoluto, limpo e direto de todas as propriedades da classe
var situacao = new ModeloSituacoes
{
ID_SITUACOES = idSituacoes,
CODIGO = txtCodigo?.Text ?? string.Empty,
NOME = txtNome.Text,
ETAPA1 = txtEtapa1?.Text ?? string.Empty,
ETAPA2 = txtEtapa2?.Text ?? string.Empty,
ETAPA3 = txtEtapa3?.Text ?? string.Empty,
ETAPA3_PG = txtEtapa3Pg?.Text ?? string.Empty,
PRONTO = txtPronto?.Text ?? string.Empty,
SUBGRUPO = txtSubgrupo?.Text ?? string.Empty,
COR_FONTE = txtCorFonte?.Text ?? string.Empty,
COR_FUNDO = txtCorFundo?.Text ?? string.Empty,
PLANO_CONTA = txtPlanoConta?.Text ?? string.Empty
};
// Objeto preenchido pronto para ser enviado para sua BLL / DAL e persistido no SQL Server
MessageBox.Show($"Situação '{situacao.NOME}' configurada com sucesso!", "LevelOS", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
protected override void OnAlterar()
{
txtNome?.Focus();
}
protected override void OnExcluir()
{
if (MessageBox.Show("A exclusão deste status pode afetar registros históricos vinculados a ele. Confirma?", "LevelOS", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
OnNovo();
}
}
protected override void OnLocalizar()
{
// Abre o grid de consulta para selecionar uma situação existente
}
protected override void OnCancelar()
{
OnNovo();
}
}
}