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