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

322 lines
13 KiB
C#

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