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(); } } }