using CPM; using DAL; using MLL; using BLL; using System; using System.Drawing; using System.Windows.Forms; namespace UI { public class CalibracaoCadastroPanel : FormularioModelo { // ── CAMPOS DO FORMULÁRIO ────────────────────────────────────────────── private LV_TEXTBOX1 txtIdCalibracao = null!; private LV_TEXTBOX1 txtCodigo = null!; private LV_TEXTBOX1 txtOsNumero = null!; private LV_TEXTBOX1 txtData = null!; private LV_TEXTBOX1 txtTemp = null!; private LV_TEXTBOX1 txtHumidade = null!; private LV_TEXTBOX1 txtResponsavel = null!; private LV_TEXTBOX1 txtObserv = null!; // ── ESTADO DO FORMULÁRIO ────────────────────────────────────────────── private enum ModoFormulario { Visualizacao, Novo, Edicao } private ModoFormulario _modo = ModoFormulario.Visualizacao; private int _idAtual = 0; // ── BLL ─────────────────────────────────────────────────────────────── // private CalibracaoBLL _bll = null!; // ── CONSTRUTOR ──────────────────────────────────────────────────────── public CalibracaoCadastroPanel() { Titulo = "Cadastro de Calibração"; BuildForm(); AplicarModo(ModoFormulario.Visualizacao); } // ── CONSTRUÇÃO DOS CAMPOS ───────────────────────────────────────────── private void BuildForm() { // ── SEÇÃO: IDENTIFICAÇÃO ────────────────────────────────────────── content.Controls.Add(CreateSectionHeader("Identificação", 20)); txtIdCalibracao = AddInput(content, "ID", 20, 58, 80, 32, readOnly: true); txtCodigo = AddInput(content, "Código", 120, 58, 200, 32); txtCodigo.MaxLength = 50; txtOsNumero = AddInput(content, "Nº da OS", 340, 58, 200, 32); txtOsNumero.MaxLength = 50; // ── SEÇÃO: CONDIÇÕES ────────────────────────────────────────────── content.Controls.Add(CreateSectionHeader("Condições do ambiente", 120)); txtData = AddInput(content, "Data", 20, 158, 160, 32); txtData.MaxLength = 20; txtTemp = AddInput(content, "Temperatura", 200, 158, 160, 32); txtTemp.MaxLength = 20; txtHumidade = AddInput(content, "Humidade", 380, 158, 160, 32); txtHumidade.MaxLength = 20; // ── SEÇÃO: RESPONSÁVEL ──────────────────────────────────────────── content.Controls.Add(CreateSectionHeader("Responsável", 220)); txtResponsavel = AddInput(content, "Responsável", 20, 258, 320, 32); txtResponsavel.MaxLength = 100; // ── SEÇÃO: OBSERVAÇÕES ──────────────────────────────────────────── content.Controls.Add(CreateSectionHeader("Observações", 320)); // Observações — campo maior, multiline via LV_TEXTBOX1 var lblObserv = new Label { Text = "Observações", Location = new Point(20, 358), Font = new Font("Segoe UI", 7.5f, FontStyle.Bold), ForeColor = TextDark, AutoSize = true }; txtObserv = new LV_TEXTBOX1 { Location = new Point(20, 374), Size = new Size(720, 80), BorderColor = BorderColor, BorderFocusColor = AccentBlue, Multiline = true, MaxLength = 255 }; content.Controls.Add(lblObserv); content.Controls.Add(txtObserv); content.Height = 490; } // ── MODOS DO FORMULÁRIO ─────────────────────────────────────────────── private void AplicarModo(ModoFormulario modo) { _modo = modo; bool editando = modo == ModoFormulario.Novo || modo == ModoFormulario.Edicao; // Campos editáveis conforme o modo txtCodigo.ReadOnly = !editando; txtOsNumero.ReadOnly = !editando; txtData.ReadOnly = !editando; txtTemp.ReadOnly = !editando; txtHumidade.ReadOnly = !editando; txtResponsavel.ReadOnly = !editando; txtObserv.ReadOnly = !editando; // Cor de fundo conforme estado Color bgAtivo = Color.White; Color bgInativo = ReadOnlyBg; txtCodigo.BackColor = editando ? bgAtivo : bgInativo; txtOsNumero.BackColor = editando ? bgAtivo : bgInativo; txtData.BackColor = editando ? bgAtivo : bgInativo; txtTemp.BackColor = editando ? bgAtivo : bgInativo; txtHumidade.BackColor = editando ? bgAtivo : bgInativo; txtResponsavel.BackColor = editando ? bgAtivo : bgInativo; txtObserv.BackColor = editando ? bgAtivo : bgInativo; // Bordas conforme estado txtCodigo.BorderColor = editando ? BorderColor : ReadOnlyBorder; txtOsNumero.BorderColor = editando ? BorderColor : ReadOnlyBorder; txtData.BorderColor = editando ? BorderColor : ReadOnlyBorder; txtTemp.BorderColor = editando ? BorderColor : ReadOnlyBorder; txtHumidade.BorderColor = editando ? BorderColor : ReadOnlyBorder; txtResponsavel.BorderColor = editando ? BorderColor : ReadOnlyBorder; txtObserv.BorderColor = editando ? BorderColor : ReadOnlyBorder; // Botões btnNovo.Enabled = !editando; btnAlterar.Enabled = !editando && _idAtual > 0; btnExcluir.Enabled = !editando && _idAtual > 0; btnLocalizar.Enabled = !editando; btnSalvar.Enabled = editando; btnCancelar.Enabled = editando; if (modo == ModoFormulario.Novo) LimparCampos(); } // ── POPULAR / LIMPAR CAMPOS ─────────────────────────────────────────── private void PopularCampos(ModeloCalibracao m) { _idAtual = m.ID_CALIBRACAO; txtIdCalibracao.Text = m.ID_CALIBRACAO.ToString(); txtCodigo.Text = m.CODIGO; txtOsNumero.Text = m.OS_NUMERO; txtData.Text = m.DATA; txtTemp.Text = m.TEMP; txtHumidade.Text = m.HUMIDADE; txtResponsavel.Text = m.RESPONSABEL; txtObserv.Text = m.OBSERV; } private void LimparCampos() { _idAtual = 0; txtIdCalibracao.Text = string.Empty; txtCodigo.Text = string.Empty; txtOsNumero.Text = string.Empty; txtData.Text = string.Empty; txtTemp.Text = string.Empty; txtHumidade.Text = string.Empty; txtResponsavel.Text = string.Empty; txtObserv.Text = string.Empty; } // ── VALIDAÇÃO ───────────────────────────────────────────────────────── private bool Validar() { if (string.IsNullOrWhiteSpace(txtCodigo.Text)) { MessageBox.Show("Informe o código da calibração.", "Validação", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtCodigo.Focus(); return false; } if (string.IsNullOrWhiteSpace(txtOsNumero.Text)) { MessageBox.Show("Informe o número da OS.", "Validação", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtOsNumero.Focus(); return false; } if (string.IsNullOrWhiteSpace(txtData.Text)) { MessageBox.Show("Informe a data da calibração.", "Validação", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtData.Focus(); return false; } if (string.IsNullOrWhiteSpace(txtResponsavel.Text)) { MessageBox.Show("Informe o responsável pela calibração.", "Validação", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtResponsavel.Focus(); return false; } return true; } // ── MONTAR MODELO A PARTIR DOS CAMPOS ───────────────────────────────── private ModeloCalibracao MontarModelo() => new ModeloCalibracao( _idAtual, txtCodigo.Text.Trim(), txtOsNumero.Text.Trim(), txtData.Text.Trim(), txtTemp.Text.Trim(), txtHumidade.Text.Trim(), txtResponsavel.Text.Trim(), txtObserv.Text.Trim() ); // ── EVENTOS ABSTRATOS ───────────────────────────────────────────────── protected override void OnNovo() { AplicarModo(ModoFormulario.Novo); txtCodigo.Focus(); } protected override void OnAlterar() { if (_idAtual == 0) return; AplicarModo(ModoFormulario.Edicao); txtCodigo.Focus(); } protected override void OnExcluir() { if (_idAtual == 0) return; var confirm = MessageBox.Show( $"Deseja realmente excluir a calibração \"{txtCodigo.Text}\"?", "Confirmar exclusão", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (confirm != DialogResult.Yes) return; try { // TODO: _bll.Excluir(_idAtual); MessageBox.Show("Calibração excluída com sucesso.", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information); LimparCampos(); AplicarModo(ModoFormulario.Visualizacao); } catch (Exception ex) { MessageBox.Show($"Erro ao excluir:\n{ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } protected override void OnLocalizar() { // TODO: abrir formulário de busca e retornar a calibração selecionada // var frm = new FormularioBuscarCalibracao(); // if (frm.ShowDialog() == DialogResult.OK) // { // PopularCampos(frm.CalibracaoSelecionada); // AplicarModo(ModoFormulario.Visualizacao); // } MessageBox.Show("Implemente o formulário de busca de calibrações.", "Localizar", MessageBoxButtons.OK, MessageBoxIcon.Information); } protected override void OnSalvar() { if (!Validar()) return; var modelo = MontarModelo(); try { if (_modo == ModoFormulario.Novo) { // TODO: _bll.Criar(modelo); MessageBox.Show("Calibração cadastrada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { // TODO: _bll.Atualizar(modelo); MessageBox.Show("Calibração atualizada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information); } AplicarModo(ModoFormulario.Visualizacao); } catch (Exception ex) { MessageBox.Show($"Erro ao salvar:\n{ex.Message}", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } protected override void OnCancelar() { if (_idAtual > 0) { // TODO: recarregar do banco se necessário } LimparCampos(); AplicarModo(ModoFormulario.Visualizacao); } } }