163 lines
6.4 KiB
C#
163 lines
6.4 KiB
C#
using CPM;
|
|
using MLL;
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace UI
|
|
{
|
|
public class PlanoDeContasPanel : FormularioModelo
|
|
{
|
|
// Mapeamento absoluto de todas as propriedades do ModeloPlanoDeContas
|
|
private LV_TEXTBOX1 txtId;
|
|
private LV_TEXTBOX1 txtEmpresaId;
|
|
private LV_TEXTBOX1 txtContaPaiId;
|
|
private LV_TEXTBOX1 txtNome;
|
|
private LV_TEXTBOX1 txtCodigo;
|
|
private LV_TEXTBOX1 txtTipo;
|
|
private CheckBox chkAceitaLancamento;
|
|
private CheckBox chkAtivo;
|
|
private LV_TEXTBOX1 txtCriadoEm;
|
|
private LV_TEXTBOX1 txtAtualizadoEm;
|
|
|
|
public PlanoDeContasPanel()
|
|
{
|
|
this.Titulo = "ESTRUTURAÇÃO DO PLANO DE CONTAS FINACEIRO";
|
|
MontarInterfaceCompleta();
|
|
}
|
|
|
|
private void MontarInterfaceCompleta()
|
|
{
|
|
// --- SEÇÃO 1: HIERARQUIA E IDENTIFICAÇÃO ---
|
|
content.Controls.Add(CreateSectionHeader("Classificação e Hierarquia da Conta", 20));
|
|
|
|
txtId = AddInput(content, "ID REGISTRO", 20, 55, 100, 28, true);
|
|
txtEmpresaId = AddInput(content, "ID EMPRESA", 135, 55, 110, 28);
|
|
txtCodigo = AddInput(content, "CÓDIGO ESTRUTURAL (EX: 1.01.02)", 260, 55, 230, 28);
|
|
txtContaPaiId = AddInput(content, "ID CONTA PAI (NULO P/ GRUPO RAIZ)", 505, 55, 230, 28);
|
|
|
|
// --- SEÇÃO 2: DEFINIÇÃO COMERCIAL ---
|
|
content.Controls.Add(CreateSectionHeader("Dados de Identificação e Regras de Operação", 115));
|
|
|
|
txtNome = AddInput(content, "NOME DA CONTA (EX: ENERGIA ELÉTRICA, RECEITA DE VENDAS)", 20, 150, 470, 28);
|
|
txtTipo = AddInput(content, "TIPO (RECEITA / DESPESA / ATIVO)", 505, 150, 230, 28);
|
|
|
|
// Checkboxes de Regras de Negócio e Status alinhados lado a lado
|
|
chkAceitaLancamento = new CheckBox
|
|
{
|
|
Text = "Aceita Lançamento Direto (Conta Analítica)",
|
|
Location = new Point(20, 200),
|
|
AutoSize = true,
|
|
Font = new Font("Segoe UI", 9.5F, FontStyle.Bold),
|
|
ForeColor = Color.FromArgb(64, 64, 64)
|
|
};
|
|
content.Controls.Add(chkAceitaLancamento);
|
|
|
|
chkAtivo = new CheckBox
|
|
{
|
|
Text = "Conta Ativa no Sistema",
|
|
Location = new Point(350, 200),
|
|
AutoSize = true,
|
|
Font = new Font("Segoe UI", 9.5F, FontStyle.Bold),
|
|
ForeColor = Color.FromArgb(64, 64, 64)
|
|
};
|
|
content.Controls.Add(chkAtivo);
|
|
|
|
// --- SEÇÃO 3: AUDITORIA ---
|
|
content.Controls.Add(CreateSectionHeader("Datas de Auditoria e Controle de Registro", 245));
|
|
|
|
txtCriadoEm = AddInput(content, "DATA DE CRIAÇÃO", 20, 280, 220, 28, true);
|
|
txtAtualizadoEm = AddInput(content, "ÚLTIMA ATUALIZAÇÃO", 255, 280, 220, 28, true);
|
|
}
|
|
|
|
// --- MÉTODOS OBRIGATÓRIOS DO FORMULÁRIO MODELO ---
|
|
|
|
protected override void OnNovo()
|
|
{
|
|
// Limpa os campos editáveis de texto
|
|
txtEmpresaId.Text = string.Empty;
|
|
txtCodigo.Text = string.Empty;
|
|
txtContaPaiId.Text = string.Empty;
|
|
txtNome.Text = string.Empty;
|
|
txtTipo.Text = string.Empty;
|
|
|
|
// Valores padrão para novos registros
|
|
txtId.Text = "0";
|
|
chkAceitaLancamento.Checked = true;
|
|
chkAtivo.Checked = true;
|
|
txtCriadoEm.Text = DateTime.Now.ToString("g");
|
|
txtAtualizadoEm.Text = DateTime.Now.ToString("g");
|
|
|
|
txtCodigo.Focus();
|
|
}
|
|
|
|
protected override void OnSalvar()
|
|
{
|
|
// Validações básicas de negócio
|
|
if (string.IsNullOrWhiteSpace(txtCodigo.Text))
|
|
{
|
|
MessageBox.Show("O código estrutural da conta é obrigatório.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
txtCodigo.Focus();
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(txtNome.Text))
|
|
{
|
|
MessageBox.Show("O nome da conta é obrigatório.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
txtNome.Focus();
|
|
return;
|
|
}
|
|
|
|
// Tratamento explícito para o tipo Nullable (int?) da ContaPaiId
|
|
int? contaPai = null;
|
|
if (!string.IsNullOrWhiteSpace(txtContaPaiId.Text) && int.TryParse(txtContaPaiId.Text, out int resultId))
|
|
{
|
|
contaPai = resultId;
|
|
}
|
|
|
|
// Mapeamento absoluto e tipado de todas as propriedades do ModeloPlanoDeContas
|
|
var conta = new ModeloPlanoDeContas
|
|
{
|
|
Id = string.IsNullOrEmpty(txtId.Text) ? 0 : Convert.ToInt32(txtId.Text),
|
|
EmpresaId = string.IsNullOrEmpty(txtEmpresaId.Text) ? 0 : Convert.ToInt32(txtEmpresaId.Text),
|
|
ContaPaiId = contaPai,
|
|
Codigo = txtCodigo.Text,
|
|
Nome = txtNome.Text,
|
|
Tipo = txtTipo.Text,
|
|
AceitaLancamento = chkAceitaLancamento.Checked,
|
|
Ativo = chkAtivo.Checked,
|
|
|
|
// Preserva ou trata as datas de auditoria
|
|
CriadoEm = string.IsNullOrEmpty(txtCriadoEm.Text) ? DateTime.Now : Convert.ToDateTime(txtCriadoEm.Text),
|
|
AtualizadoEm = DateTime.Now // Sempre grava a data do momento do save
|
|
};
|
|
|
|
// Envio do objeto limpo e preenchido para as camadas BLL / DAL do SQL Server
|
|
MessageBox.Show("Conta cadastrada com sucesso no plano de contas!", "LevelOS", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
|
|
protected override void OnAlterar()
|
|
{
|
|
txtNome.Focus();
|
|
}
|
|
|
|
protected override void OnExcluir()
|
|
{
|
|
if (MessageBox.Show("Atenção! Remover uma conta com lançamentos financeiros vinculados pode corromper os relatórios de DRE e fluxo de caixa. Confirmar exclusão?", "LevelOS", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
|
|
{
|
|
// Processa deleção...
|
|
OnNovo();
|
|
}
|
|
}
|
|
|
|
protected override void OnLocalizar()
|
|
{
|
|
// Abre sua Grid de pesquisa ou componente TreeView do plano de contas
|
|
}
|
|
|
|
protected override void OnCancelar()
|
|
{
|
|
OnNovo();
|
|
}
|
|
}
|
|
} |