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

338 lines
14 KiB
C#

using CPM;
using DAL;
using MLL;
using BLL;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace UI
{
public class CalibracaoPadraoEnsaiosCadastroPanel : FormularioModelo
{
// ── CAMPOS DO FORMULÁRIO ──────────────────────────────────────────────
private LV_TEXTBOX1 txtId = null!;
private LV_TEXTBOX1 txtCodigo = null!;
private LV_TEXTBOX1 txtCodCalibracao = null!;
private Button btnBuscarCod = null!;
private LV_TEXTBOX1 txtDescricao = null!;
private LV_TEXTBOX1 txtMinimo = null!;
private LV_TEXTBOX1 txtMaximo = null!;
private LV_TEXTBOX1 txtObtido = null!;
private LV_TEXTBOX1 txtUnidade = null!;
// ── ESTADO ────────────────────────────────────────────────────────────
private enum ModoFormulario { Visualizacao, Novo, Edicao }
private ModoFormulario _modo = ModoFormulario.Visualizacao;
private int _idAtual = 0;
// ── BLL ───────────────────────────────────────────────────────────────
// private CalibracaoPadraoEnsaiosBLL _bll = null!;
// ── CONSTRUTOR ────────────────────────────────────────────────────────
public CalibracaoPadraoEnsaiosCadastroPanel()
{
Titulo = "Cadastro de Ensaios de Calibração Padrão";
BuildForm();
AplicarModo(ModoFormulario.Visualizacao);
}
// ── CONSTRUÇÃO DOS CAMPOS ─────────────────────────────────────────────
private void BuildForm()
{
// ── SEÇÃO: IDENTIFICAÇÃO ──────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Identificação", 20));
txtId = AddInput(content, "ID", 20, 58, 80, 32, readOnly: true);
txtCodigo = AddInput(content, "Código", 120, 58, 160, 32);
txtCodigo.MaxLength = 50;
// Código da Calibração + botão buscar
var lblCod = new Label
{
Text = "Código da Calibração",
Location = new Point(300, 58),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtCodCalibracao = new LV_TEXTBOX1
{
Location = new Point(300, 74),
Size = new Size(220, 32),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
ReadOnly = true, // sempre preenchido via busca
BackColor = ReadOnlyBg
};
btnBuscarCod = new Button
{
Text = "🔍 Buscar",
Location = new Point(528, 74),
Size = new Size(90, 32),
BackColor = AccentBlue,
ForeColor = Color.White,
Font = new Font("Segoe UI Semibold", 8.5f),
Cursor = Cursors.Hand,
FlatStyle = FlatStyle.Flat,
Enabled = false // habilitado apenas em modo edição
};
btnBuscarCod.FlatAppearance.BorderSize = 0;
btnBuscarCod.Click += BtnBuscarCod_Click;
content.Controls.Add(lblCod);
content.Controls.Add(txtCodCalibracao);
content.Controls.Add(btnBuscarCod);
// ── SEÇÃO: ENSAIO ─────────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Dados do Ensaio", 130));
txtDescricao = AddInput(content, "Descrição", 20, 168, 500, 32);
txtDescricao.MaxLength = 255;
txtUnidade = AddInput(content, "Unidade", 540, 168, 160, 32);
txtUnidade.MaxLength = 50;
// ── SEÇÃO: VALORES ────────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Valores", 230));
txtMinimo = AddInput(content, "Mínimo", 20, 268, 180, 32);
txtMinimo.MaxLength = 50;
txtMaximo = AddInput(content, "Máximo", 220, 268, 180, 32);
txtMaximo.MaxLength = 50;
txtObtido = AddInput(content, "Obtido", 420, 268, 180, 32);
txtObtido.MaxLength = 50;
content.Height = 340;
}
// ── MODOS DO FORMULÁRIO ───────────────────────────────────────────────
private void AplicarModo(ModoFormulario modo)
{
_modo = modo;
bool editando = modo == ModoFormulario.Novo || modo == ModoFormulario.Edicao;
// Botão buscar só disponível ao editar
btnBuscarCod.Enabled = editando;
// Campos editáveis
txtDescricao.ReadOnly = !editando;
txtMinimo.ReadOnly = !editando;
txtMaximo.ReadOnly = !editando;
txtObtido.ReadOnly = !editando;
txtUnidade.ReadOnly = !editando;
// Cores
Color bgAtivo = Color.White;
Color bgInativo = ReadOnlyBg;
txtDescricao.BackColor = editando ? bgAtivo : bgInativo;
txtMinimo.BackColor = editando ? bgAtivo : bgInativo;
txtMaximo.BackColor = editando ? bgAtivo : bgInativo;
txtObtido.BackColor = editando ? bgAtivo : bgInativo;
txtUnidade.BackColor = editando ? bgAtivo : bgInativo;
// Bordas
txtDescricao.BorderColor = editando ? BorderColor : ReadOnlyBorder;
txtMinimo.BorderColor = editando ? BorderColor : ReadOnlyBorder;
txtMaximo.BorderColor = editando ? BorderColor : ReadOnlyBorder;
txtObtido.BorderColor = editando ? BorderColor : ReadOnlyBorder;
txtUnidade.BorderColor = editando ? BorderColor : ReadOnlyBorder;
// Botões toolbar
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 ──────────────────────────────────────────────────
private void PopularCampos(ModeloCalibracaoPadraoEnsaios m)
{
_idAtual = m.ID_CAL_PADRAO_ENSAIOS;
txtId.Text = m.ID_CAL_PADRAO_ENSAIOS.ToString();
txtCodigo.Text = m.CODIGO;
txtCodCalibracao.Text = m.COD_CALIBRACAO;
txtDescricao.Text = m.DESCRICAO;
txtMinimo.Text = m.MINIMO;
txtMaximo.Text = m.MAXIMO;
txtObtido.Text = m.OBTIDO;
txtUnidade.Text = m.UNIDADE;
}
private void LimparCampos()
{
_idAtual = 0;
txtId.Text = string.Empty;
txtCodigo.Text = string.Empty;
txtCodCalibracao.Text = string.Empty;
txtDescricao.Text = string.Empty;
txtMinimo.Text = string.Empty;
txtMaximo.Text = string.Empty;
txtObtido.Text = string.Empty;
txtUnidade.Text = string.Empty;
}
// ── BUSCA DE CALIBRAÇÃO ───────────────────────────────────────────────
private void BtnBuscarCod_Click(object? sender, EventArgs e)
{
// TODO: abrir formulário de busca de calibrações e retornar o código
// Exemplo:
// var frm = new FormularioBuscarCalibracao();
// if (frm.ShowDialog() == DialogResult.OK)
// txtCodCalibracao.Text = frm.CodigoSelecionado;
MessageBox.Show("Implemente o formulário de busca de calibrações.",
"Buscar Calibração", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// ── VALIDAÇÃO ─────────────────────────────────────────────────────────
private bool Validar()
{
if (string.IsNullOrWhiteSpace(txtCodCalibracao.Text))
{
MessageBox.Show("Selecione uma calibração.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
btnBuscarCod.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtDescricao.Text))
{
MessageBox.Show("Informe a descrição do ensaio.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtDescricao.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtUnidade.Text))
{
MessageBox.Show("Informe a unidade de medida.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtUnidade.Focus();
return false;
}
return true;
}
// ── MONTAR MODELO ─────────────────────────────────────────────────────
private ModeloCalibracaoPadraoEnsaios MontarModelo() => new ModeloCalibracaoPadraoEnsaios(
_idAtual,
txtCodigo.Text.Trim(),
txtCodCalibracao.Text.Trim(),
txtDescricao.Text.Trim(),
txtMinimo.Text.Trim(),
txtMaximo.Text.Trim(),
txtObtido.Text.Trim(),
txtUnidade.Text.Trim()
);
// ── EVENTOS ABSTRATOS ─────────────────────────────────────────────────
protected override void OnNovo()
{
AplicarModo(ModoFormulario.Novo);
btnBuscarCod.Focus();
}
protected override void OnAlterar()
{
if (_idAtual == 0) return;
AplicarModo(ModoFormulario.Edicao);
txtDescricao.Focus();
}
protected override void OnExcluir()
{
if (_idAtual == 0) return;
var confirm = MessageBox.Show(
$"Deseja realmente excluir o ensaio \"{txtDescricao.Text}\"?",
"Confirmar exclusão",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
if (confirm != DialogResult.Yes) return;
try
{
// TODO: _bll.Excluir(_idAtual);
MessageBox.Show("Ensaio padrão excluído 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 de ensaios padrão
// var frm = new FormularioBuscarCalibracaoPadraoEnsaios();
// if (frm.ShowDialog() == DialogResult.OK)
// {
// PopularCampos(frm.EnsaioSelecionado);
// AplicarModo(ModoFormulario.Visualizacao);
// }
MessageBox.Show("Implemente o formulário de busca de ensaios padrão.",
"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("Ensaio padrão cadastrado com sucesso!", "Sucesso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// TODO: _bll.Atualizar(modelo);
MessageBox.Show("Ensaio padrão atualizado 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);
}
}
}