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

176 lines
7.2 KiB
C#

using CPM;
using MLL; // Namespace da sua model
using System;
using System.Drawing;
using System.Windows.Forms;
using UI; // Namespace do seu FormularioModelo
namespace UI
{
public partial class ContratosCadastroPanel : FormularioModelo
{
private ModeloContrato _contrato = new ModeloContrato();
// Controles específicos
private LV_TEXTBOX1 txtId, txtEmpresaId, txtClienteId, txtDescricao;
private LV_TEXTBOX1 txtValor, txtDataInicio, txtDataValidade, txtFranquia;
private LV_TEXTBOX1 txtObservacoes;
private CheckBox chkAtivo;
private LV_TEXTBOX1 txtNomeCliente; // Novo campo para o nome
private Button btnBuscaCliente; // Botão da lupa
public ContratosCadastroPanel()
{
this.Titulo = "Gestão de Contratos";
MontarInterface();
}
//private void MontarInterface()
//{
// // --- SEÇÃO 1: Vínculos e Descrição ---
// content.Controls.Add(CreateSectionHeader("IDENTIFICAÇÃO DO CONTRATO", 20));
// txtId = AddInput(content, "ID", 20, 50, 80, 30, true);
// txtEmpresaId = AddInput(content, "ID EMPRESA", 110, 50, 100, 30);
// txtClienteId = AddInput(content, "ID CLIENTE", 220, 50, 100, 30);
// txtDescricao = AddInput(content, "DESCRIÇÃO DO CONTRATO", 330, 50, 550, 30);
// // --- SEÇÃO 2: Valores e Prazos ---
// content.Controls.Add(CreateSectionHeader("FINANCEIRO E VIGÊNCIA", 110));
// txtValor = AddInput(content, "VALOR MENSAL (R$)", 20, 140, 150, 30);
// txtDataInicio = AddInput(content, "DATA INÍCIO", 180, 140, 150, 30);
// txtDataValidade = AddInput(content, "VALIDADE/TÉRMINO", 340, 140, 150, 30);
// txtFranquia = AddInput(content, "FRANQUIA (HORAS/MIN)", 500, 140, 180, 30);
// chkAtivo = CreateCheckBox("CONTRATO ATIVO", 700, 158);
// content.Controls.Add(chkAtivo);
// // --- SEÇÃO 3: Observações ---
// content.Controls.Add(CreateSectionHeader("DETALHES E OBSERVAÇÕES", 200));
// txtObservacoes = AddInput(content, "OBSERVAÇÕES INTERNAS", 20, 230, 860, 80);
// // Ajuste para o campo de observações ser maior (se o seu LV_TEXTBOX1 permitir)
// txtObservacoes.Height = 80;
//}
private void MontarInterface()
{
// --- SEÇÃO 1: Identificação e Vínculos ---
content.Controls.Add(CreateSectionHeader("IDENTIFICAÇÃO DO CONTRATO", 20));
// Linha 1: IDs e Busca
txtId = AddInput(content, "ID CONTRATO", 20, 50, 90, 30, true);
txtClienteId = AddInput(content, "ID CLIENTE", 120, 50, 80, 30);
// Botão Lupa
btnBuscaCliente = new Button
{
Text = "🔍",
Location = new Point(205, 66), // Alinhado ao topo do textbox (50 + 16)
Size = new Size(32, 30),
BackColor = AccentBlue,
ForeColor = Color.White,
FlatStyle = FlatStyle.Flat,
Cursor = Cursors.Hand
};
btnBuscaCliente.FlatAppearance.BorderSize = 0;
btnBuscaCliente.Click += (s, e) => OnLocalizarCliente();
content.Controls.Add(btnBuscaCliente);
txtNomeCliente = AddInput(content, "NOME DO CLIENTE / RAZÃO SOCIAL", 247, 50, 410, 30, true);
txtEmpresaId = AddInput(content, "ID EMPRESA", 667, 50, 80, 30);
// Linha 2: Descrição (abaixo dos IDs)
txtDescricao = AddInput(content, "DESCRIÇÃO DO CONTRATO", 20, 105, 727, 30);
// --- SEÇÃO 2: Valores e Prazos ---
// Aumentei o Y para 170 para dar espaço à descrição acima
content.Controls.Add(CreateSectionHeader("FINANCEIRO E VIGÊNCIA", 175));
txtValor = AddInput(content, "VALOR MENSAL (R$)", 20, 205, 150, 30);
txtDataInicio = AddInput(content, "DATA INÍCIO", 185, 205, 150, 30);
txtDataValidade = AddInput(content, "VALIDADE/TÉRMINO", 350, 205, 150, 30);
txtFranquia = AddInput(content, "FRANQUIA (HORAS/MIN)", 515, 205, 170, 30);
// Checkbox Alinhado com os inputs
chkAtivo = CreateCheckBox("CONTRATO ATIVO", 700, 223); // Y do input (205) + ~18px
content.Controls.Add(chkAtivo);
// --- SEÇÃO 3: Detalhes e Notas ---
content.Controls.Add(CreateSectionHeader("DETALHES E OBSERVAÇÕES", 275));
txtObservacoes = AddInput(content, "OBSERVAÇÕES INTERNAS", 20, 305, 860, 100);
// Forçar a altura maior para o campo de observações
txtObservacoes.Height = 100;
// Se o seu LV_TEXTBOX1 tiver a propriedade Multiline, ative-a aqui:
// txtObservacoes.Multiline = true;
}
// Método que você precisará implementar para a busca
private void OnLocalizarCliente()
{
//Logica para abrir o form de busca e retornar os dados
//Exemplo:
// var busca = new FormBuscaCliente();
//if (busca.ShowDialog() == DialogResult.OK)
//{
// txtClienteId.Text = busca.IdSelecionado;
// txtNomeCliente.Text = busca.NomeSelecionado;
//}
}
private void PreencherModel()
{
_contrato.Descricao = txtDescricao.Text;
_contrato.Observacoes = txtObservacoes.Text;
_contrato.Ativo = chkAtivo.Checked;
// Conversões seguras
if (decimal.TryParse(txtValor.Text, out decimal v)) _contrato.Valor = v;
if (int.TryParse(txtEmpresaId.Text, out int emp)) _contrato.EmpresaId = emp;
if (int.TryParse(txtClienteId.Text, out int cli)) _contrato.ClienteId = cli;
if (int.TryParse(txtFranquia.Text, out int fra)) _contrato.FranquiaTempo = fra;
if (DateTime.TryParse(txtDataInicio.Text, out DateTime dtIn)) _contrato.DataInicio = dtIn;
if (DateTime.TryParse(txtDataValidade.Text, out DateTime dtVal)) _contrato.DataValidade = dtVal;
}
// --- MÉTODOS OBRIGATÓRIOS DA BASE ---
protected override void OnNovo()
{
_contrato = new ModeloContrato();
// Limpar campos...
txtDescricao.Focus();
}
protected override void OnSalvar()
{
try
{
PreencherModel();
// Chamar BLL.Salvar(_contrato);
MessageBox.Show("Contrato processado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show("Erro ao salvar contrato: " + ex.Message);
}
}
protected override void OnAlterar() { /* Implementar busca/edição */ }
protected override void OnExcluir()
{
if (MessageBox.Show("Deseja rescindir/excluir este contrato?", "Confirmação", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
// Lógica de exclusão
}
}
protected override void OnLocalizar() { /* Abrir grid de contratos */ }
protected override void OnCancelar() { OnNovo(); }
}
}