22/04/2026 - Implementando formularios

This commit is contained in:
levelcode developed 2026-04-22 16:09:48 -03:00
parent 1f6541d7d4
commit ec818850a4
8 changed files with 2543 additions and 5 deletions

View File

@ -0,0 +1,516 @@
using CPM;
using DAL;
using MLL;
using BLL;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace UI
{
public class CheguesCadastroPanel : FormularioModelo
{
// ── CAMPOS DO FORMULÁRIO ──────────────────────────────────────────────
private LV_TEXTBOX1 txtId = null!;
private LV_TEXTBOX1 txtCodigo = null!;
private LV_COMBOBOXCUSTOM cmbTipo = null!;
// Banco
private LV_TEXTBOX1 txtBanco = null!;
private LV_TEXTBOX1 txtAgencia = null!;
private LV_TEXTBOX1 txtConta = null!;
private LV_TEXTBOX1 txtNumero = null!;
private LV_TEXTBOX1 txtValor = null!;
// Cliente + Fornecedor — busca
private LV_TEXTBOX1 txtCliente = null!;
private Button btnBuscarCliente = null!;
private LV_TEXTBOX1 txtFornecedor = null!;
private Button btnBuscarFornecedor = null!;
private LV_TEXTBOX1 txtEmitente = null!;
// Datas e compensação
private LV_TEXTBOX1 txtEmitido = null!;
private LV_TEXTBOX1 txtCompensar = null!;
private LV_TEXTBOX1 txtCodConta = null!;
private CheckBox chkOk = null!;
// Observações
private LV_TEXTBOX1 txtObs = null!;
// ── ESTADO ────────────────────────────────────────────────────────────
private enum ModoFormulario { Visualizacao, Novo, Edicao }
private ModoFormulario _modo = ModoFormulario.Visualizacao;
private int _idAtual = 0;
// ── BLL ───────────────────────────────────────────────────────────────
// private ChegueBLL _bll = null!;
// ── CONSTRUTOR ────────────────────────────────────────────────────────
public CheguesCadastroPanel()
{
Titulo = "Cadastro de Cheques";
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;
// Tipo
var lblTipo = new Label
{
Text = "Tipo",
Location = new Point(300, 58),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
cmbTipo = new LV_COMBOBOXCUSTOM
{
Location = new Point(300, 74),
Size = new Size(180, 32),
DropDownStyle = ComboBoxStyle.DropDownList,
BorderColor = BorderColor,
BackColor = Color.White,
ListBackColor = Color.White,
ListTextColor = TextDark,
IconColor = AccentBlue,
Font = new Font("Segoe UI", 9f)
};
cmbTipo.Items.Add("Recebido");
cmbTipo.Items.Add("Emitido");
cmbTipo.Items.Add("Devolvido");
cmbTipo.Items.Add("Cancelado");
cmbTipo.SelectedIndex = 0;
content.Controls.Add(lblTipo);
content.Controls.Add(cmbTipo);
// ── SEÇÃO: DADOS BANCÁRIOS ────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Dados Bancários", 128));
txtBanco = AddInput(content, "Banco", 20, 166, 220, 32);
txtBanco.MaxLength = 100;
txtAgencia = AddInput(content, "Agência", 260, 166, 140, 32);
txtAgencia.MaxLength = 20;
txtConta = AddInput(content, "Conta", 420, 166, 140, 32);
txtConta.MaxLength = 30;
txtNumero = AddInput(content, "Número", 580, 166, 120, 32);
txtNumero.MaxLength = 20;
txtValor = AddInput(content, "Valor", 20, 228, 160, 32);
txtValor.MaxLength = 20;
txtEmitido = AddInput(content, "Data Emissão", 200, 228, 160, 32);
txtEmitido.MaxLength = 20;
txtCompensar = AddInput(content, "Data Compensação", 380, 228, 160, 32);
txtCompensar.MaxLength = 20;
// CheckBox OK — compensado
chkOk = CreateCheckBox("Compensado (OK)", 560, 238);
content.Controls.Add(chkOk);
// ── SEÇÃO: PARTES ENVOLVIDAS ──────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Partes Envolvidas", 290));
// Cliente + botão buscar
var lblCliente = new Label
{
Text = "Cliente",
Location = new Point(20, 328),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtCliente = new LV_TEXTBOX1
{
Location = new Point(20, 344),
Size = new Size(220, 32),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
ReadOnly = true,
BackColor = ReadOnlyBg
};
btnBuscarCliente = new Button
{
Text = "🔍 Buscar",
Location = new Point(248, 344),
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
};
btnBuscarCliente.FlatAppearance.BorderSize = 0;
btnBuscarCliente.Click += BtnBuscarCliente_Click;
content.Controls.Add(lblCliente);
content.Controls.Add(txtCliente);
content.Controls.Add(btnBuscarCliente);
// Fornecedor + botão buscar
var lblFornecedor = new Label
{
Text = "Fornecedor",
Location = new Point(360, 328),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtFornecedor = new LV_TEXTBOX1
{
Location = new Point(360, 344),
Size = new Size(220, 32),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
ReadOnly = true,
BackColor = ReadOnlyBg
};
btnBuscarFornecedor = new Button
{
Text = "🔍 Buscar",
Location = new Point(588, 344),
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
};
btnBuscarFornecedor.FlatAppearance.BorderSize = 0;
btnBuscarFornecedor.Click += BtnBuscarFornecedor_Click;
content.Controls.Add(lblFornecedor);
content.Controls.Add(txtFornecedor);
content.Controls.Add(btnBuscarFornecedor);
txtEmitente = AddInput(content, "Emitente", 20, 396, 340, 32);
txtEmitente.MaxLength = 150;
txtCodConta = AddInput(content, "Cód. Conta", 380, 396, 160, 32);
txtCodConta.MaxLength = 50;
// ── SEÇÃO: OBSERVAÇÕES ────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Observações", 450));
var lblObs = new Label
{
Text = "Observações",
Location = new Point(20, 488),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtObs = new LV_TEXTBOX1
{
Location = new Point(20, 504),
Size = new Size(680, 70),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
Multiline = true,
MaxLength = 500
};
content.Controls.Add(lblObs);
content.Controls.Add(txtObs);
content.Height = 610;
}
// ── CAMPOS EDITÁVEIS ──────────────────────────────────────────────────
private LV_TEXTBOX1[] CamposEditaveis() => new[]
{
txtCodigo, txtBanco, txtAgencia, txtConta, txtNumero,
txtValor, txtEmitido, txtCompensar, txtEmitente, txtCodConta, txtObs
};
// ── MODOS DO FORMULÁRIO ───────────────────────────────────────────────
private void AplicarModo(ModoFormulario modo)
{
_modo = modo;
bool editando = modo == ModoFormulario.Novo || modo == ModoFormulario.Edicao;
foreach (var txt in CamposEditaveis())
{
txt.ReadOnly = !editando;
txt.BackColor = editando ? Color.White : ReadOnlyBg;
txt.BorderColor = editando ? BorderColor : ReadOnlyBorder;
}
cmbTipo.Enabled = editando;
cmbTipo.BorderColor = editando ? BorderColor : ReadOnlyBorder;
cmbTipo.BackColor = editando ? Color.White : ReadOnlyBg;
chkOk.Enabled = editando;
btnBuscarCliente.Enabled = editando;
btnBuscarFornecedor.Enabled = editando;
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();
}
// ── BUSCA DE CLIENTE ──────────────────────────────────────────────────
private void BtnBuscarCliente_Click(object? sender, EventArgs e)
{
// TODO: abrir formulário de busca de clientes
// var frm = new FormularioBuscarCliente();
// if (frm.ShowDialog() == DialogResult.OK)
// txtCliente.Text = frm.ClienteSelecionado.CODIGO;
MessageBox.Show("Implemente o formulário de busca de clientes.",
"Buscar Cliente", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// ── BUSCA DE FORNECEDOR ───────────────────────────────────────────────
private void BtnBuscarFornecedor_Click(object? sender, EventArgs e)
{
// TODO: abrir formulário de busca de fornecedores
// var frm = new FormularioBuscarFornecedor();
// if (frm.ShowDialog() == DialogResult.OK)
// txtFornecedor.Text = frm.FornecedorSelecionado.CODIGO;
MessageBox.Show("Implemente o formulário de busca de fornecedores.",
"Buscar Fornecedor", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// ── POPULAR / LIMPAR ──────────────────────────────────────────────────
private void PopularCampos(ModeloChegues m)
{
_idAtual = m.ID_CHEGUES;
txtId.Text = m.ID_CHEGUES.ToString();
txtCodigo.Text = m.CODIGO;
txtBanco.Text = m.BANCO;
txtAgencia.Text = m.AGENCIA;
txtConta.Text = m.CONTA;
txtNumero.Text = m.NUMERO;
txtValor.Text = m.VALOR;
txtCliente.Text = m.CLIENTE;
txtFornecedor.Text = m.FORNECEDOR;
txtEmitente.Text = m.EMITENTE;
txtEmitido.Text = m.EMITIDO;
txtCompensar.Text = m.COMPENSAR;
txtCodConta.Text = m.COD_CONTA;
txtObs.Text = m.OBS;
chkOk.Checked = m.OK == "S" || m.OK == "1" || m.OK?.ToLower() == "true";
SelecionarCombo(cmbTipo, m.TIPO);
}
private void LimparCampos()
{
_idAtual = 0;
txtId.Text = string.Empty;
txtCodigo.Text = string.Empty;
txtBanco.Text = string.Empty;
txtAgencia.Text = string.Empty;
txtConta.Text = string.Empty;
txtNumero.Text = string.Empty;
txtValor.Text = string.Empty;
txtCliente.Text = string.Empty;
txtFornecedor.Text = string.Empty;
txtEmitente.Text = string.Empty;
txtEmitido.Text = string.Empty;
txtCompensar.Text = string.Empty;
txtCodConta.Text = string.Empty;
txtObs.Text = string.Empty;
chkOk.Checked = false;
cmbTipo.SelectedIndex = 0;
}
// ── HELPER COMBOBOX ───────────────────────────────────────────────────
private static void SelecionarCombo(LV_COMBOBOXCUSTOM cmb, string valor)
{
for (int i = 0; i < cmb.Items.Count; i++)
{
if (cmb.Items[i]?.ToString() == valor)
{
cmb.SelectedIndex = i;
return;
}
}
cmb.SelectedIndex = 0;
}
// ── VALIDAÇÃO ─────────────────────────────────────────────────────────
private bool Validar()
{
if (string.IsNullOrWhiteSpace(txtCodigo.Text))
{
MessageBox.Show("Informe o código do cheque.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtCodigo.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtBanco.Text))
{
MessageBox.Show("Informe o banco.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtBanco.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtNumero.Text))
{
MessageBox.Show("Informe o número do cheque.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtNumero.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtValor.Text))
{
MessageBox.Show("Informe o valor do cheque.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtValor.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtEmitido.Text))
{
MessageBox.Show("Informe a data de emissão.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtEmitido.Focus();
return false;
}
return true;
}
// ── MONTAR MODELO ─────────────────────────────────────────────────────
private ModeloChegues MontarModelo() => new ModeloChegues(
_idAtual,
txtCodigo.Text.Trim(),
txtBanco.Text.Trim(),
txtAgencia.Text.Trim(),
txtValor.Text.Trim(),
txtCliente.Text.Trim(),
txtFornecedor.Text.Trim(),
txtEmitido.Text.Trim(),
txtCompensar.Text.Trim(),
chkOk.Checked ? "S" : "N",
cmbTipo.SelectedItem?.ToString() ?? string.Empty,
txtConta.Text.Trim(),
txtNumero.Text.Trim(),
txtObs.Text.Trim(),
txtCodConta.Text.Trim(),
txtEmitente.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 o cheque \"{txtNumero.Text}\"?",
"Confirmar exclusão",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
if (confirm != DialogResult.Yes) return;
try
{
// TODO: _bll.Excluir(_idAtual);
MessageBox.Show("Cheque 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 cheques
// var frm = new FormularioBuscarCheques();
// if (frm.ShowDialog() == DialogResult.OK)
// {
// PopularCampos(frm.ChequeSelecionado);
// AplicarModo(ModoFormulario.Visualizacao);
// }
MessageBox.Show("Implemente o formulário de busca de cheques.",
"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("Cheque cadastrado com sucesso!", "Sucesso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// TODO: _bll.Atualizar(modelo);
MessageBox.Show("Cheque 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);
}
}
}

View File

@ -0,0 +1,452 @@
using CPM;
using DAL;
using MLL;
using BLL;
using System;
using System.Drawing;
using System.Net.Http;
using System.Text.Json;
using System.Windows.Forms;
namespace UI
{
public class ClientesEnderecosCadastroPanel : FormularioModelo
{
// ── CAMPOS DO FORMULÁRIO ──────────────────────────────────────────────
private LV_TEXTBOX1 txtId = null!;
private LV_TEXTBOX1 txtCodigo = null!;
// Cliente — busca
private LV_TEXTBOX1 txtCodCliente = null!;
private Button btnBuscarCliente = null!;
// Endereço
private LV_TEXTBOX1 txtCep = null!;
private Button btnBuscarCep = null!;
private LV_TEXTBOX1 txtLogradouro = null!;
private LV_TEXTBOX1 txtNumero = null!;
private LV_TEXTBOX1 txtComplem = null!;
private LV_TEXTBOX1 txtBairro = null!;
private LV_TEXTBOX1 txtCidade = null!;
private LV_TEXTBOX1 txtUf = null!;
private LV_TEXTBOX1 txtDataCadastro = null!;
// ── ESTADO ────────────────────────────────────────────────────────────
private enum ModoFormulario { Visualizacao, Novo, Edicao }
private ModoFormulario _modo = ModoFormulario.Visualizacao;
private int _idAtual = 0;
// ── BLL ───────────────────────────────────────────────────────────────
// private ClientesEnderecosBLL _bll = null!;
// ── CONSTRUTOR ────────────────────────────────────────────────────────
public ClientesEnderecosCadastroPanel()
{
Titulo = "Cadastro de Endereços de Clientes";
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;
// ── SEÇÃO: CLIENTE ────────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Cliente", 110));
var lblCodCliente = new Label
{
Text = "Cód. Cliente",
Location = new Point(20, 148),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtCodCliente = new LV_TEXTBOX1
{
Location = new Point(20, 164),
Size = new Size(200, 32),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
ReadOnly = true,
BackColor = ReadOnlyBg
};
btnBuscarCliente = new Button
{
Text = "🔍 Buscar",
Location = new Point(228, 164),
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
};
btnBuscarCliente.FlatAppearance.BorderSize = 0;
btnBuscarCliente.Click += BtnBuscarCliente_Click;
content.Controls.Add(lblCodCliente);
content.Controls.Add(txtCodCliente);
content.Controls.Add(btnBuscarCliente);
// ── SEÇÃO: ENDEREÇO ───────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Endereço", 218));
// CEP + botão buscar
var lblCep = new Label
{
Text = "CEP",
Location = new Point(20, 256),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtCep = new LV_TEXTBOX1
{
Location = new Point(20, 272),
Size = new Size(140, 32),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
MaxLength = 9
};
btnBuscarCep = new Button
{
Text = "🔍 Buscar CEP",
Location = new Point(168, 272),
Size = new Size(120, 32),
BackColor = AccentBlue,
ForeColor = Color.White,
Font = new Font("Segoe UI Semibold", 8.5f),
Cursor = Cursors.Hand,
FlatStyle = FlatStyle.Flat,
Enabled = false
};
btnBuscarCep.FlatAppearance.BorderSize = 0;
btnBuscarCep.Click += BtnBuscarCep_Click;
content.Controls.Add(lblCep);
content.Controls.Add(txtCep);
content.Controls.Add(btnBuscarCep);
// Logradouro — preenchido via CEP mas editável para ajustes
txtLogradouro = AddInput(content, "Logradouro", 20, 334, 460, 32);
txtLogradouro.MaxLength = 200;
txtNumero = AddInput(content, "Número", 500, 334, 100, 32);
txtNumero.MaxLength = 20;
txtComplem = AddInput(content, "Complemento", 20, 396, 280, 32);
txtComplem.MaxLength = 100;
txtBairro = AddInput(content, "Bairro", 320, 396, 280, 32);
txtBairro.MaxLength = 100;
txtCidade = AddInput(content, "Cidade", 20, 458, 340, 32);
txtCidade.MaxLength = 100;
txtUf = AddInput(content, "UF", 380, 458, 60, 32);
txtUf.MaxLength = 2;
// ── SEÇÃO: AUDITORIA ──────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Auditoria", 516));
txtDataCadastro = AddInput(content, "Data de Cadastro", 20, 554, 200, 32, readOnly: true);
content.Height = 620;
}
// ── CAMPOS PREENCHIDOS PELO CEP — editáveis mas com visual distinto ───
private LV_TEXTBOX1[] CamposEndereco() => new[]
{ txtLogradouro, txtBairro, txtCidade, txtUf };
// ── CAMPOS EDITÁVEIS NORMAIS ──────────────────────────────────────────
private LV_TEXTBOX1[] CamposEditaveis() => new[]
{ txtCodigo, txtCep, txtLogradouro, txtNumero, txtComplem, txtBairro, txtCidade, txtUf };
// ── MODOS DO FORMULÁRIO ───────────────────────────────────────────────
private void AplicarModo(ModoFormulario modo)
{
_modo = modo;
bool editando = modo == ModoFormulario.Novo || modo == ModoFormulario.Edicao;
foreach (var txt in CamposEditaveis())
{
txt.ReadOnly = !editando;
txt.BackColor = editando ? Color.White : ReadOnlyBg;
txt.BorderColor = editando ? BorderColor : ReadOnlyBorder;
}
btnBuscarCliente.Enabled = editando;
btnBuscarCep.Enabled = editando;
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();
}
// ── BUSCA DE CLIENTE ──────────────────────────────────────────────────
private void BtnBuscarCliente_Click(object? sender, EventArgs e)
{
// TODO: abrir formulário de busca de clientes
// var frm = new FormularioBuscarCliente();
// if (frm.ShowDialog() == DialogResult.OK)
// txtCodCliente.Text = frm.ClienteSelecionado.CODIGO;
MessageBox.Show("Implemente o formulário de busca de clientes.",
"Buscar Cliente", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// ── BUSCA DE CEP (ViaCEP) ─────────────────────────────────────────────
private async void BtnBuscarCep_Click(object? sender, EventArgs e)
{
string cep = txtCep.Text.Trim().Replace("-", "").Replace(".", "");
if (cep.Length != 8)
{
MessageBox.Show("Informe um CEP válido com 8 dígitos.", "CEP inválido",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtCep.Focus();
return;
}
btnBuscarCep.Enabled = false;
btnBuscarCep.Text = "Buscando...";
try
{
using var http = new HttpClient();
var json = await http.GetStringAsync($"https://viacep.com.br/ws/{cep}/json/");
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;
if (root.TryGetProperty("erro", out _))
{
MessageBox.Show("CEP não encontrado.", "CEP inválido",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
txtLogradouro.Text = root.GetProperty("logradouro").GetString() ?? string.Empty;
txtBairro.Text = root.GetProperty("bairro").GetString() ?? string.Empty;
txtCidade.Text = root.GetProperty("localidade").GetString() ?? string.Empty;
txtUf.Text = root.GetProperty("uf").GetString() ?? string.Empty;
// Foca no número após preencher o endereço
txtNumero.Focus();
}
catch
{
MessageBox.Show("Não foi possível buscar o CEP. Verifique sua conexão.",
"Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
btnBuscarCep.Enabled = true;
btnBuscarCep.Text = "🔍 Buscar CEP";
}
}
// ── POPULAR / LIMPAR ──────────────────────────────────────────────────
private void PopularCampos(ModeloClientesEnderecos m)
{
_idAtual = m.ID_COD_CLIENTE_END;
txtId.Text = m.ID_COD_CLIENTE_END.ToString();
txtCodigo.Text = m.CODIGO;
txtCodCliente.Text = m.COD_CLIENTE;
txtCep.Text = m.CEP;
txtLogradouro.Text = m.LOGRADOURO;
txtNumero.Text = m.NUMERO;
txtComplem.Text = m.COMPLEM;
txtBairro.Text = m.BAIRRO;
txtCidade.Text = m.CIDADE;
txtUf.Text = m.UF;
txtDataCadastro.Text = m.DATA_CADASTRO;
}
private void LimparCampos()
{
_idAtual = 0;
txtId.Text = string.Empty;
txtCodigo.Text = string.Empty;
txtCodCliente.Text = string.Empty;
txtCep.Text = string.Empty;
txtLogradouro.Text = string.Empty;
txtNumero.Text = string.Empty;
txtComplem.Text = string.Empty;
txtBairro.Text = string.Empty;
txtCidade.Text = string.Empty;
txtUf.Text = string.Empty;
txtDataCadastro.Text = string.Empty;
}
// ── VALIDAÇÃO ─────────────────────────────────────────────────────────
private bool Validar()
{
if (string.IsNullOrWhiteSpace(txtCodCliente.Text))
{
MessageBox.Show("Selecione um cliente.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
btnBuscarCliente.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtCep.Text))
{
MessageBox.Show("Informe o CEP.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtCep.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtLogradouro.Text))
{
MessageBox.Show("Informe o logradouro.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtLogradouro.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtCidade.Text))
{
MessageBox.Show("Informe a cidade.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtCidade.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtUf.Text))
{
MessageBox.Show("Informe a UF.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtUf.Focus();
return false;
}
return true;
}
// ── MONTAR MODELO ─────────────────────────────────────────────────────
private ModeloClientesEnderecos MontarModelo() => new ModeloClientesEnderecos(
_idAtual,
txtCodigo.Text.Trim(),
txtCodCliente.Text.Trim(),
txtLogradouro.Text.Trim(),
txtNumero.Text.Trim(),
txtComplem.Text.Trim(),
txtBairro.Text.Trim(),
txtCidade.Text.Trim(),
txtUf.Text.Trim().ToUpper(),
txtCep.Text.Trim(),
txtDataCadastro.Text.Trim()
);
// ── EVENTOS ABSTRATOS ─────────────────────────────────────────────────
protected override void OnNovo()
{
AplicarModo(ModoFormulario.Novo);
btnBuscarCliente.Focus();
}
protected override void OnAlterar()
{
if (_idAtual == 0) return;
AplicarModo(ModoFormulario.Edicao);
txtCep.Focus();
}
protected override void OnExcluir()
{
if (_idAtual == 0) return;
var confirm = MessageBox.Show(
$"Deseja realmente excluir o endereço \"{txtLogradouro.Text}, {txtNumero.Text}\"?",
"Confirmar exclusão",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
if (confirm != DialogResult.Yes) return;
try
{
// TODO: _bll.Excluir(_idAtual);
MessageBox.Show("Endereç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 endereços
// var frm = new FormularioBuscarClientesEnderecos();
// if (frm.ShowDialog() == DialogResult.OK)
// {
// PopularCampos(frm.EnderecoSelecionado);
// AplicarModo(ModoFormulario.Visualizacao);
// }
MessageBox.Show("Implemente o formulário de busca de endereços.",
"Localizar", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
protected override void OnSalvar()
{
if (!Validar()) return;
var modelo = MontarModelo();
try
{
if (_modo == ModoFormulario.Novo)
{
// TODO: modelo.DATA_CADASTRO = DateTime.Now.ToString("dd/MM/yyyy");
// _bll.Criar(modelo);
MessageBox.Show("Endereço cadastrado com sucesso!", "Sucesso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// TODO: _bll.Atualizar(modelo);
MessageBox.Show("Endereç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);
}
}
}

View File

@ -0,0 +1,732 @@
using BLL;
using CPM;
using DAL;
using MLL;
using System;
using System.Drawing;
using System.Windows.Forms;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace UI
{
public class ConfigCadastroPanel : FormularioModelo
{
// ── TABS ──────────────────────────────────────────────────────────────
private TabControl tabMain = null!;
// ── ABA 1: GERAL ──────────────────────────────────────────────────────
private LV_TEXTBOX1 txtId = null!;
private LV_TEXTBOX1 txtEstoque = null!;
private LV_TEXTBOX1 txtOficina = null!;
private LV_TEXTBOX1 txtOficinaDono = null!;
private LV_TEXTBOX1 txtBanco = null!;
private LV_TEXTBOX1 txtContas = null!;
private LV_TEXTBOX1 txtVendasL1 = null!;
private LV_TEXTBOX1 txtVendasL2 = null!;
private LV_TEXTBOX1 txtModeloVenda = null!;
private LV_TEXTBOX1 txtPrnPortVenda = null!;
private LV_TEXTBOX1 txtCopiasVenda = null!;
private LV_TEXTBOX1 txtVersao = null!;
private LV_TEXTBOX1 txtVersaoP = null!;
private LV_TEXTBOX1 txtSerial = null!;
private LV_TEXTBOX1 txtSerial2 = null!;
private LV_TEXTBOX1 txtNossoNumero = null!;
private LV_TEXTBOX1 txtRevenda = null!;
private LV_TEXTBOX1 txtCodFab = null!;
private LV_TEXTBOX1 txtSHCompras = null!;
private LV_TEXTBOX1 txtDataCadastro = null!;
// ── ABA 2: SMTP ───────────────────────────────────────────────────────
private LV_TEXTBOX1 txtSmtpServer = null!;
private LV_TEXTBOX1 txtSmtpUser = null!;
private LV_TEXTBOX1 txtSmtpPass = null!;
private LV_TEXTBOX1 txtSmtpTit = null!;
private LV_TEXTBOX1 txtSmtpEmail = null!;
private LV_TEXTBOX1 txtSmtpCc = null!;
private LV_TEXTBOX1 txtSmtpPort = null!;
private LV_TEXTBOX1 txtSmtpSsl = null!;
private LV_TEXTBOX1 txtSmtpCok = null!;
private LV_TEXTBOX1 txtSmtpSemAutentica = null!;
// ── ABA 3: CARTÃO ─────────────────────────────────────────────────────
private LV_TEXTBOX1 txtCartaoRegOk = null!;
private LV_TEXTBOX1 txtCartaoDebtDireto = null!;
private LV_TEXTBOX1 txtCartaoCredDireto = null!;
private LV_TEXTBOX1 txtCartaoCredComiss = null!;
private LV_TEXTBOX1 txtCartaoDebtComiss = null!;
private LV_TEXTBOX1 txtCartaoCredParcela = null!;
private LV_TEXTBOX1 txtComissVendas = null!;
private LV_TEXTBOX1 txtMaxDesVendas = null!;
// ── ABA 4: NFe ────────────────────────────────────────────────────────
private LV_TEXTBOX1 txtNfeFormaEmissao = null!;
private LV_TEXTBOX1 txtNfeEnfe = null!;
private LV_TEXTBOX1 txtNfeEmailOk = null!;
private LV_TEXTBOX1 txtUltimaImpressao = null!;
private LV_TEXTBOX1 txtDataSaida = null!;
private LV_TEXTBOX1 txtImpressa = null!;
private LV_TEXTBOX1 txtFreteNumero = null!;
// ── ABA 5: DESTINATÁRIO ───────────────────────────────────────────────
private LV_TEXTBOX1 txtDestNome = null!;
private LV_TEXTBOX1 txtDestEndereco = null!;
private LV_TEXTBOX1 txtDestBairro = null!;
private LV_TEXTBOX1 txtDestCidade = null!;
private LV_TEXTBOX1 txtDestUf = null!;
private LV_TEXTBOX1 txtDestCep = null!;
private LV_TEXTBOX1 txtDestCodPais = null!;
private LV_TEXTBOX1 txtDestTel = null!;
private LV_TEXTBOX1 txtDestFax = null!;
private LV_TEXTBOX1 txtDestEmail = null!;
private LV_TEXTBOX1 txtDestIeRg = null!;
private LV_TEXTBOX1 txtDestCnpjCpf = null!;
// ── ABA 6: FRETE E VALORES ────────────────────────────────────────────
private LV_TEXTBOX1 txtFreteNome = null!;
private LV_TEXTBOX1 txtFreteUf = null!;
private LV_TEXTBOX1 txtFreteCnpjCpf = null!;
private LV_TEXTBOX1 txtFreteIeRg = null!;
private LV_TEXTBOX1 txtFreteEndereco = null!;
private LV_TEXTBOX1 txtFreteMunicipio = null!;
private LV_TEXTBOX1 txtFreteTuf = null!;
private LV_TEXTBOX1 txtVFrete = null!;
private LV_TEXTBOX1 txtVSeguro = null!;
private LV_TEXTBOX1 txtVOutros = null!;
// ── ABA 7: TRIBUTOS ───────────────────────────────────────────────────
private LV_TEXTBOX1 txtValorDesconto = null!;
private LV_TEXTBOX1 txtValorIrrf = null!;
private LV_TEXTBOX1 txtValorIrpj = null!;
private LV_TEXTBOX1 txtValorPis = null!;
private LV_TEXTBOX1 txtValorCofins = null!;
private LV_TEXTBOX1 txtValorCsll = null!;
private LV_TEXTBOX1 txtValorBenef = null!;
private LV_TEXTBOX1 txtValorInss = null!;
private LV_TEXTBOX1 txtValorSimples = null!;
private LV_TEXTBOX1 txtTotalDesc = null!;
private LV_TEXTBOX1 txtTotalDeducoes = null!;
private LV_TEXTBOX1 txtTotalServicos = null!;
private LV_TEXTBOX1 txtTotalProdutos = null!;
private LV_TEXTBOX1 txtTotalIss = null!;
private LV_TEXTBOX1 txtTotalIrrf = null!;
private LV_TEXTBOX1 txtTotalIrpj = null!;
private LV_TEXTBOX1 txtTotalPis = null!;
private LV_TEXTBOX1 txtTotalCofins = null!;
private LV_TEXTBOX1 txtTotalCsll = null!;
private LV_TEXTBOX1 txtTotalInss = null!;
private LV_TEXTBOX1 txtTotalSimples = null!;
private LV_TEXTBOX1 txtDbCsIcmsS = null!;
private LV_TEXTBOX1 txtDbCsFrete = null!;
private LV_TEXTBOX1 txtDbCsSeguro = null!;
private LV_TEXTBOX1 txtDbCsDespesas = null!;
private LV_TEXTBOX1 txtDbCinFrete = null!;
private LV_TEXTBOX1 txtDbCinSeguro = null!;
private LV_TEXTBOX1 txtDbCinDespesas = null!;
private LV_TEXTBOX1 txtDbCinDesconto = null!;
private LV_TEXTBOX1 txtDbCsIss = null!;
private LV_TEXTBOX1 txtDbCsIrrf = null!;
private LV_TEXTBOX1 txtDbCsIrpj = null!;
private LV_TEXTBOX1 txtDbCsPis = null!;
private LV_TEXTBOX1 txtDbCsCofins = null!;
private LV_TEXTBOX1 txtDbCsCsll = null!;
private LV_TEXTBOX1 txtDbCsInss = null!;
private LV_TEXTBOX1 txtDbCsSimples = null!;
// ── ESTADO ────────────────────────────────────────────────────────────
private enum ModoFormulario { Visualizacao, Edicao }
private ModoFormulario _modo = ModoFormulario.Visualizacao;
private int _idAtual = 0;
// ── BLL ───────────────────────────────────────────────────────────────
// private ConfigBLL _bll = null!;
// ── CONSTRUTOR ────────────────────────────────────────────────────────
public ConfigCadastroPanel()
{
Titulo = "Configurações do Sistema";
BuildForm();
// Botão extra — Gerar Ficha
var btnGerarFicha = CreateToolbarButton("Gerar Ficha", Color.FromArgb(99, 102, 241));
btnGerarFicha.Click += (s, e) => OnGerarFicha();
AddToolbarButton(btnGerarFicha);
AplicarModo(ModoFormulario.Visualizacao);
}
// ── CONSTRUÇÃO DO FORMULÁRIO ──────────────────────────────────────────
private void BuildForm()
{
tabMain = new TabControl
{
Location = new Point(10, 10),
Size = new Size(1060, 860),
Font = new Font("Segoe UI", 9f)
};
tabMain.TabPages.Add(BuildAbaGeral());
tabMain.TabPages.Add(BuildAbaSmtp());
tabMain.TabPages.Add(BuildAbaCartao());
tabMain.TabPages.Add(BuildAbaNfe());
tabMain.TabPages.Add(BuildAbaDestinatario());
tabMain.TabPages.Add(BuildAbaFrete());
tabMain.TabPages.Add(BuildAbaTributos());
content.Controls.Add(tabMain);
content.Height = 900;
}
// ── HELPER: cria painel de aba com scroll ─────────────────────────────
private static Panel CriarPainelAba()
{
var pnl = new Panel
{
Dock = DockStyle.Fill,
AutoScroll = true,
BackColor = Color.White,
Padding = new Padding(10)
};
return pnl;
}
// ── HELPER: AddInput dentro de painel de aba ──────────────────────────
private LV_TEXTBOX1 AbaInput(Panel parent, string label, int x, int y, int w, bool readOnly = false)
{
return AddInput(parent, label, x, y, w, 32, readOnly);
}
// ── ABA 1: GERAL ──────────────────────────────────────────────────────
private TabPage BuildAbaGeral()
{
var tab = new TabPage("⚙️ Geral") { BackColor = Color.White };
var pnl = CriarPainelAba();
pnl.Controls.Add(CreateSectionHeader("Identificação", 10));
txtId = AbaInput(pnl, "ID", 10, 48, 80, readOnly: true);
txtVersao = AbaInput(pnl, "Versão", 110, 48, 140, readOnly: true);
txtVersaoP = AbaInput(pnl, "Versão P", 270, 48, 140, readOnly: true);
txtSerial = AbaInput(pnl, "Serial", 430, 48, 200);
txtSerial2 = AbaInput(pnl, "Serial 2", 650, 48, 200);
pnl.Controls.Add(CreateSectionHeader("Sistema", 108));
txtEstoque = AbaInput(pnl, "Estoque", 10, 146, 200);
txtOficina = AbaInput(pnl, "Oficina", 230, 146, 200);
txtOficinaDono = AbaInput(pnl, "Dono Oficina", 450, 146, 280);
txtBanco = AbaInput(pnl, "Banco", 10, 208, 200);
txtContas = AbaInput(pnl, "Contas", 230, 208, 200);
txtNossoNumero = AbaInput(pnl, "Nosso Número", 450, 208, 200);
txtRevenda = AbaInput(pnl, "Revenda", 670, 208, 120);
pnl.Controls.Add(CreateSectionHeader("Vendas", 268));
txtVendasL1 = AbaInput(pnl, "Vendas L1", 10, 306, 200);
txtVendasL2 = AbaInput(pnl, "Vendas L2", 230, 306, 200);
txtModeloVenda = AbaInput(pnl, "Modelo Venda", 450, 306, 160);
txtPrnPortVenda = AbaInput(pnl, "Porta Imp.", 630, 306, 120);
txtCopiasVenda = AbaInput(pnl, "Cópias", 770, 306, 80);
pnl.Controls.Add(CreateSectionHeader("Outros", 366));
txtSHCompras = AbaInput(pnl, "SH Compras", 10, 404, 160);
txtCodFab = AbaInput(pnl, "Cód. Fab.", 190, 404, 160);
txtDataCadastro = AbaInput(pnl, "Data Cadastro", 370, 404, 160, readOnly: true);
tab.Controls.Add(pnl);
return tab;
}
// ── ABA 2: SMTP ───────────────────────────────────────────────────────
private TabPage BuildAbaSmtp()
{
var tab = new TabPage("📩 SMTP") { BackColor = Color.White };
var pnl = CriarPainelAba();
pnl.Controls.Add(CreateSectionHeader("Servidor", 10));
txtSmtpServer = AbaInput(pnl, "Servidor SMTP", 10, 48, 300);
txtSmtpPort = AbaInput(pnl, "Porta", 330, 48, 100);
txtSmtpSsl = AbaInput(pnl, "SSL", 450, 48, 100);
txtSmtpSemAutentica = AbaInput(pnl, "Sem Autenticação", 570, 48, 160);
pnl.Controls.Add(CreateSectionHeader("Credenciais", 108));
txtSmtpUser = AbaInput(pnl, "Usuário", 10, 146, 300);
txtSmtpPass = AbaInput(pnl, "Senha", 330, 146, 200);
txtSmtpPass.PasswordChar = '●';
txtSmtpCok = AbaInput(pnl, "Chave OK", 550, 146, 160);
pnl.Controls.Add(CreateSectionHeader("E-mail", 206));
txtSmtpTit = AbaInput(pnl, "Título", 10, 244, 400);
txtSmtpEmail = AbaInput(pnl, "E-mail", 10, 306, 300);
txtSmtpCc = AbaInput(pnl, "CC", 330, 306, 300);
tab.Controls.Add(pnl);
return tab;
}
// ── ABA 3: CARTÃO ─────────────────────────────────────────────────────
private TabPage BuildAbaCartao()
{
var tab = new TabPage("💳 Cartão") { BackColor = Color.White };
var pnl = CriarPainelAba();
pnl.Controls.Add(CreateSectionHeader("Configurações de Cartão", 10));
txtCartaoRegOk = AbaInput(pnl, "Reg. OK", 10, 48, 160);
txtCartaoDebtDireto = AbaInput(pnl, "Déb. Direto", 190, 48, 160);
txtCartaoCredDireto = AbaInput(pnl, "Cré. Direto", 370, 48, 160);
txtCartaoCredParcela = AbaInput(pnl, "Cré. Parcela", 550, 48, 160);
txtCartaoCredComiss = AbaInput(pnl, "Comissão Crédito", 10, 110, 200);
txtCartaoDebtComiss = AbaInput(pnl, "Comissão Débito", 230, 110, 200);
pnl.Controls.Add(CreateSectionHeader("Vendas", 170));
txtComissVendas = AbaInput(pnl, "Comissão Vendas (%)", 10, 208, 200);
txtMaxDesVendas = AbaInput(pnl, "Desconto Máximo (%)", 230, 208, 200);
tab.Controls.Add(pnl);
return tab;
}
// ── ABA 4: NFe ────────────────────────────────────────────────────────
private TabPage BuildAbaNfe()
{
var tab = new TabPage("🧾 NFe") { BackColor = Color.White };
var pnl = CriarPainelAba();
pnl.Controls.Add(CreateSectionHeader("Configurações NFe", 10));
txtNfeFormaEmissao = AbaInput(pnl, "Forma Emissão", 10, 48, 200);
txtNfeEnfe = AbaInput(pnl, "eNFe", 230, 48, 160);
txtNfeEmailOk = AbaInput(pnl, "E-mail OK", 410, 48, 160);
pnl.Controls.Add(CreateSectionHeader("Impressão", 108));
txtUltimaImpressao = AbaInput(pnl, "Última Impressão", 10, 146, 200);
txtDataSaida = AbaInput(pnl, "Data Saída", 230, 146, 160);
txtImpressa = AbaInput(pnl, "Impressa", 410, 146, 160);
txtFreteNumero = AbaInput(pnl, "Nº Frete", 590, 146, 120);
tab.Controls.Add(pnl);
return tab;
}
// ── ABA 5: DESTINATÁRIO ───────────────────────────────────────────────
private TabPage BuildAbaDestinatario()
{
var tab = new TabPage("📦 Destinatário") { BackColor = Color.White };
var pnl = CriarPainelAba();
pnl.Controls.Add(CreateSectionHeader("Dados do Destinatário", 10));
txtDestNome = AbaInput(pnl, "Nome", 10, 48, 500);
txtDestCnpjCpf = AbaInput(pnl, "CNPJ/CPF", 530, 48, 200);
txtDestIeRg = AbaInput(pnl, "IE/RG", 750, 48, 160);
pnl.Controls.Add(CreateSectionHeader("Endereço", 108));
txtDestEndereco = AbaInput(pnl, "Endereço", 10, 146, 400);
txtDestBairro = AbaInput(pnl, "Bairro", 430, 146, 220);
txtDestCidade = AbaInput(pnl, "Cidade", 10, 208, 300);
txtDestUf = AbaInput(pnl, "UF", 330, 208, 60);
txtDestCep = AbaInput(pnl, "CEP", 410, 208, 140);
txtDestCodPais = AbaInput(pnl, "Cód. País", 570, 208, 100);
pnl.Controls.Add(CreateSectionHeader("Contato", 268));
txtDestTel = AbaInput(pnl, "Telefone", 10, 306, 200);
txtDestFax = AbaInput(pnl, "Fax", 230, 306, 200);
txtDestEmail = AbaInput(pnl, "E-mail", 450, 306, 300);
tab.Controls.Add(pnl);
return tab;
}
// ── ABA 6: FRETE E VALORES ────────────────────────────────────────────
private TabPage BuildAbaFrete()
{
var tab = new TabPage("🚚 Frete") { BackColor = Color.White };
var pnl = CriarPainelAba();
pnl.Controls.Add(CreateSectionHeader("Transportadora", 10));
txtFreteNome = AbaInput(pnl, "Nome", 10, 48, 300);
txtFreteCnpjCpf = AbaInput(pnl, "CNPJ/CPF", 330, 48, 200);
txtFreteIeRg = AbaInput(pnl, "IE/RG", 550, 48, 160);
txtFreteEndereco = AbaInput(pnl, "Endereço", 10, 110, 340);
txtFreteMunicipio = AbaInput(pnl, "Município", 370, 110, 240);
txtFreteUf = AbaInput(pnl, "UF", 630, 110, 60);
txtFreteTuf = AbaInput(pnl, "TUF", 710, 110, 80);
pnl.Controls.Add(CreateSectionHeader("Valores", 170));
txtVFrete = AbaInput(pnl, "Valor Frete", 10, 208, 160);
txtVSeguro = AbaInput(pnl, "Valor Seguro", 190, 208, 160);
txtVOutros = AbaInput(pnl, "Outros", 370, 208, 160);
tab.Controls.Add(pnl);
return tab;
}
// ── ABA 7: TRIBUTOS ───────────────────────────────────────────────────
private TabPage BuildAbaTributos()
{
var tab = new TabPage("📊 Tributos") { BackColor = Color.White };
var pnl = CriarPainelAba();
pnl.Controls.Add(CreateSectionHeader("Valores Unitários", 10));
txtValorDesconto = AbaInput(pnl, "Desconto", 10, 48, 120);
txtValorIrrf = AbaInput(pnl, "IRRF", 150, 48, 120);
txtValorIrpj = AbaInput(pnl, "IRPJ", 290, 48, 120);
txtValorPis = AbaInput(pnl, "PIS", 430, 48, 120);
txtValorCofins = AbaInput(pnl, "COFINS", 570, 48, 120);
txtValorCsll = AbaInput(pnl, "CSLL", 710, 48, 120);
txtValorBenef = AbaInput(pnl, "Benef.", 10, 110, 120);
txtValorInss = AbaInput(pnl, "INSS", 150, 110, 120);
txtValorSimples = AbaInput(pnl, "Simples", 290, 110, 120);
pnl.Controls.Add(CreateSectionHeader("Totais", 170));
txtTotalDesc = AbaInput(pnl, "Desc.", 10, 208, 120);
txtTotalDeducoes = AbaInput(pnl, "Deduções", 150, 208, 120);
txtTotalServicos = AbaInput(pnl, "Serviços", 290, 208, 120);
txtTotalProdutos = AbaInput(pnl, "Produtos", 430, 208, 120);
txtTotalIss = AbaInput(pnl, "ISS", 570, 208, 120);
txtTotalIrrf = AbaInput(pnl, "IRRF", 710, 208, 120);
txtTotalIrpj = AbaInput(pnl, "IRPJ", 10, 270, 120);
txtTotalPis = AbaInput(pnl, "PIS", 150, 270, 120);
txtTotalCofins = AbaInput(pnl, "COFINS", 290, 270, 120);
txtTotalCsll = AbaInput(pnl, "CSLL", 430, 270, 120);
txtTotalInss = AbaInput(pnl, "INSS", 570, 270, 120);
txtTotalSimples = AbaInput(pnl, "Simples", 710, 270, 120);
pnl.Controls.Add(CreateSectionHeader("DB — Campos Serviço", 330));
txtDbCsIcmsS = AbaInput(pnl, "ICMS-S", 10, 368, 120);
txtDbCsFrete = AbaInput(pnl, "Frete", 150, 368, 120);
txtDbCsSeguro = AbaInput(pnl, "Seguro", 290, 368, 120);
txtDbCsDespesas = AbaInput(pnl, "Despesas", 430, 368, 120);
txtDbCsIss = AbaInput(pnl, "ISS", 570, 368, 120);
txtDbCsIrrf = AbaInput(pnl, "IRRF", 710, 368, 120);
txtDbCsIrpj = AbaInput(pnl, "IRPJ", 10, 430, 120);
txtDbCsPis = AbaInput(pnl, "PIS", 150, 430, 120);
txtDbCsCofins = AbaInput(pnl, "COFINS", 290, 430, 120);
txtDbCsCsll = AbaInput(pnl, "CSLL", 430, 430, 120);
txtDbCsInss = AbaInput(pnl, "INSS", 570, 430, 120);
txtDbCsSimples = AbaInput(pnl, "Simples", 710, 430, 120);
pnl.Controls.Add(CreateSectionHeader("DB — Campos Entrada", 490));
txtDbCinFrete = AbaInput(pnl, "Frete", 10, 528, 120);
txtDbCinSeguro = AbaInput(pnl, "Seguro", 150, 528, 120);
txtDbCinDespesas = AbaInput(pnl, "Despesas", 290, 528, 120);
txtDbCinDesconto = AbaInput(pnl, "Desconto", 430, 528, 120);
tab.Controls.Add(pnl);
return tab;
}
// ── TODOS OS CAMPOS EDITÁVEIS ─────────────────────────────────────────
private LV_TEXTBOX1[] TodosCamposEditaveis() => new[]
{
txtEstoque, txtOficina, txtOficinaDono, txtBanco, txtContas,
txtVendasL1, txtVendasL2, txtModeloVenda, txtPrnPortVenda, txtCopiasVenda,
txtSerial, txtSerial2, txtNossoNumero, txtRevenda, txtCodFab, txtSHCompras,
txtSmtpServer, txtSmtpUser, txtSmtpPass, txtSmtpTit, txtSmtpEmail,
txtSmtpCc, txtSmtpPort, txtSmtpSsl, txtSmtpCok, txtSmtpSemAutentica,
txtCartaoRegOk, txtCartaoDebtDireto, txtCartaoCredDireto, txtCartaoCredComiss,
txtCartaoDebtComiss, txtCartaoCredParcela, txtComissVendas, txtMaxDesVendas,
txtNfeFormaEmissao, txtNfeEnfe, txtNfeEmailOk, txtUltimaImpressao,
txtDataSaida, txtImpressa, txtFreteNumero,
txtDestNome, txtDestEndereco, txtDestBairro, txtDestCidade, txtDestUf,
txtDestCep, txtDestCodPais, txtDestTel, txtDestFax, txtDestEmail,
txtDestIeRg, txtDestCnpjCpf,
txtFreteNome, txtFreteUf, txtFreteCnpjCpf, txtFreteIeRg, txtFreteEndereco,
txtFreteMunicipio, txtFreteTuf, txtVFrete, txtVSeguro, txtVOutros,
txtValorDesconto, txtValorIrrf, txtValorIrpj, txtValorPis, txtValorCofins,
txtValorCsll, txtValorBenef, txtValorInss, txtValorSimples,
txtTotalDesc, txtTotalDeducoes, txtTotalServicos, txtTotalProdutos, txtTotalIss,
txtTotalIrrf, txtTotalIrpj, txtTotalPis, txtTotalCofins, txtTotalCsll,
txtTotalInss, txtTotalSimples,
txtDbCsIcmsS, txtDbCsFrete, txtDbCsSeguro, txtDbCsDespesas, txtDbCsIss,
txtDbCsIrrf, txtDbCsIrpj, txtDbCsPis, txtDbCsCofins, txtDbCsCsll,
txtDbCsInss, txtDbCsSimples,
txtDbCinFrete, txtDbCinSeguro, txtDbCinDespesas, txtDbCinDesconto
};
// ── MODOS DO FORMULÁRIO ───────────────────────────────────────────────
private void AplicarModo(ModoFormulario modo)
{
_modo = modo;
bool editando = modo == ModoFormulario.Edicao;
foreach (var txt in TodosCamposEditaveis())
{
txt.ReadOnly = !editando;
txt.BackColor = editando ? Color.White : ReadOnlyBg;
txt.BorderColor = editando ? BorderColor : ReadOnlyBorder;
}
btnNovo.Enabled = !editando;
btnAlterar.Enabled = !editando && _idAtual > 0;
btnExcluir.Enabled = !editando && _idAtual > 0;
btnLocalizar.Enabled = !editando;
btnSalvar.Enabled = editando;
btnCancelar.Enabled = editando;
}
// ── POPULAR CAMPOS ────────────────────────────────────────────────────
public void PopularCampos(ModeloConfig m)
{
_idAtual = m.ID_CONFIG;
txtId.Text = m.ID_CONFIG.ToString();
txtEstoque.Text = m.ESTOQUE;
txtOficina.Text = m.OFICINA;
txtOficinaDono.Text = m.OFICINADONO;
txtBanco.Text = m.BANCO;
txtContas.Text = m.CONTAS;
txtVendasL1.Text = m.VENDASL1;
txtVendasL2.Text = m.VENDASL2;
txtModeloVenda.Text = m.MODELOVENDA;
txtPrnPortVenda.Text = m.PRNPORTVENDA;
txtCopiasVenda.Text = m.COPIASVENDA;
txtVersao.Text = m.VERSAO;
txtVersaoP.Text = m.VERSAOP;
txtSerial.Text = m.SERIAL;
txtSerial2.Text = m.SERIAL2;
txtNossoNumero.Text = m.NOSSONUMERO;
txtRevenda.Text = m.REVENDA;
txtCodFab.Text = m.COD_FAB;
txtSHCompras.Text = m.SHCompras;
txtDataCadastro.Text = m.DATA_CADASTRO;
txtSmtpServer.Text = m.SMTP_SERVER;
txtSmtpUser.Text = m.SMTP_USER;
txtSmtpPass.Text = m.SMTP_PASS;
txtSmtpTit.Text = m.SMTP_TIT;
txtSmtpEmail.Text = m.SMTP_EMAIL;
txtSmtpCc.Text = m.SMTP_CC;
txtSmtpPort.Text = m.SMTP_PORT;
txtSmtpSsl.Text = m.SMTP_SSL;
txtSmtpCok.Text = m.SMTP_COK;
txtSmtpSemAutentica.Text = m.SMTP_SEMAUTENTICA;
txtCartaoRegOk.Text = m.CARTAO_REG_OK;
txtCartaoDebtDireto.Text = m.CARTAO_DEBT_DIRETO;
txtCartaoCredDireto.Text = m.CARTAO_CRED_DIRETO;
txtCartaoCredComiss.Text = m.CARTAO_CRED_COMISS;
txtCartaoDebtComiss.Text = m.CARTAO_DEBT_COMISS;
txtCartaoCredParcela.Text = m.CARTAO_CRED_PARCELA;
txtComissVendas.Text = m.COMISS_VENDAS;
txtMaxDesVendas.Text = m.MAXDES_VENDAS;
txtNfeFormaEmissao.Text = m.NFE_FORMA_EMISSAO;
txtNfeEnfe.Text = m.NFE_ENFE;
txtNfeEmailOk.Text = m.NFE_EMAIL_OK;
txtUltimaImpressao.Text = m.ULTIMA_IMPRESSAO;
txtDataSaida.Text = m.DATA_SAIDA;
txtImpressa.Text = m.IMPRESSA;
txtFreteNumero.Text = m.FRETE_NUMERO;
txtDestNome.Text = m.DESTINATARIO_NOME;
txtDestEndereco.Text = m.DESTINATARIO_ENDERECO;
txtDestBairro.Text = m.DESTINATARIO_BAIRRO;
txtDestCidade.Text = m.DESTINATARIO_CIDADE;
txtDestUf.Text = m.DESTINATARIO_UF;
txtDestCep.Text = m.DESTINATARIO_CEP;
txtDestCodPais.Text = m.DESTINATARIO_COD_PAIS;
txtDestTel.Text = m.DESTINATARIO_TEL;
txtDestFax.Text = m.DESTINATARIO_FAX;
txtDestEmail.Text = m.DESTINATARIO_EMAIL;
txtDestIeRg.Text = m.DESTINATARIO_IE_RG;
txtDestCnpjCpf.Text = m.DESTINATARIO_CNPJCPF;
txtFreteNome.Text = m.FRETE_NOME;
txtFreteUf.Text = m.FRETE_UF;
txtFreteCnpjCpf.Text = m.FRETE_CNPJCPF;
txtFreteIeRg.Text = m.FRETE_IERG;
txtFreteEndereco.Text = m.FRETE_ENDERECO;
txtFreteMunicipio.Text = m.FRETE_MUNICIPIO;
txtFreteTuf.Text = m.FRETE_TUF;
txtVFrete.Text = m.V_FRETE;
txtVSeguro.Text = m.V_SEGURO;
txtVOutros.Text = m.V_OUTROS;
txtValorDesconto.Text = m.VALOR_DESCONTO;
txtValorIrrf.Text = m.VALOR_IRRF;
txtValorIrpj.Text = m.VALOR_IRPJ;
txtValorPis.Text = m.VALOR_PIS;
txtValorCofins.Text = m.VALOR_COFINS;
txtValorCsll.Text = m.VALOR_CSLL;
txtValorBenef.Text = m.VALOR_BENEF;
txtValorInss.Text = m.VALOR_INSS;
txtValorSimples.Text = m.VALOR_SIMPLES;
txtTotalDesc.Text = m.TOTAL_DESC;
txtTotalDeducoes.Text = m.TOTAL_DEDUCOES;
txtTotalServicos.Text = m.TOTAL_SERVICOS;
txtTotalProdutos.Text = m.TOTAL_PRODUTOS;
txtTotalIss.Text = m.TOTAL_ISS;
txtTotalIrrf.Text = m.TOTAL_IRRF;
txtTotalIrpj.Text = m.TOTAL_IRPJ;
txtTotalPis.Text = m.TOTAL_PIS;
txtTotalCofins.Text = m.TOTAL_COFINS;
txtTotalCsll.Text = m.TOTAL_CSLL;
txtTotalInss.Text = m.TOTAL_INSS;
txtTotalSimples.Text = m.TOTAL_SIMPLES;
txtDbCsIcmsS.Text = m.DB_cs_ICMS_S;
txtDbCsFrete.Text = m.DB_cs_FRETE;
txtDbCsSeguro.Text = m.DB_cs_SEGURO;
txtDbCsDespesas.Text = m.DB_cs_DESPESAS;
txtDbCsIss.Text = m.DB_cs_ISS;
txtDbCsIrrf.Text = m.DB_cs_IRRF;
txtDbCsIrpj.Text = m.DB_cs_IRPJ;
txtDbCsPis.Text = m.DB_cs_PIS;
txtDbCsCofins.Text = m.DB_cs_COFINS;
txtDbCsCsll.Text = m.DB_cs_CSLL;
txtDbCsInss.Text = m.DB_cs_INSS;
txtDbCsSimples.Text = m.DB_cs_SIMPLES;
txtDbCinFrete.Text = m.DB_cin_FRETE;
txtDbCinSeguro.Text = m.DB_cin_SEGURO;
txtDbCinDespesas.Text = m.DB_cin_DESPESAS;
txtDbCinDesconto.Text = m.DB_cin_DESCONTO;
}
// ── MONTAR MODELO ─────────────────────────────────────────────────────
private ModeloConfig MontarModelo() => new ModeloConfig(
_idAtual,
txtEstoque.Text.Trim(), txtOficina.Text.Trim(),
txtBanco.Text.Trim(), txtContas.Text.Trim(),
txtVendasL1.Text.Trim(), txtVendasL2.Text.Trim(),
txtModeloVenda.Text.Trim(), txtPrnPortVenda.Text.Trim(),
txtCopiasVenda.Text.Trim(), txtVersao.Text.Trim(),
txtSerial.Text.Trim(), txtSerial2.Text.Trim(),
txtSmtpServer.Text.Trim(), txtSmtpUser.Text.Trim(),
txtSmtpPass.Text.Trim(), txtSmtpTit.Text.Trim(),
txtSmtpEmail.Text.Trim(), txtSmtpCc.Text.Trim(),
txtSmtpPort.Text.Trim(), txtSmtpSsl.Text.Trim(),
txtSmtpCok.Text.Trim(), txtOficinaDono.Text.Trim(),
txtNossoNumero.Text.Trim(), txtRevenda.Text.Trim(),
txtComissVendas.Text.Trim(), txtMaxDesVendas.Text.Trim(),
txtCartaoRegOk.Text.Trim(), txtCartaoDebtDireto.Text.Trim(),
txtCartaoCredDireto.Text.Trim(), txtCartaoCredComiss.Text.Trim(),
txtCartaoDebtComiss.Text.Trim(), txtVersaoP.Text.Trim(),
txtSHCompras.Text.Trim(), txtNfeFormaEmissao.Text.Trim(),
txtCartaoCredParcela.Text.Trim(), txtSmtpSemAutentica.Text.Trim(),
txtNfeEnfe.Text.Trim(), txtNfeEmailOk.Text.Trim(),
txtDataCadastro.Text.Trim(), txtUltimaImpressao.Text.Trim(),
txtDataSaida.Text.Trim(), txtImpressa.Text.Trim(),
txtFreteNumero.Text.Trim(), txtDestNome.Text.Trim(),
txtDestEndereco.Text.Trim(), txtDestBairro.Text.Trim(),
txtDestCidade.Text.Trim(), txtDestUf.Text.Trim(),
txtDestCep.Text.Trim(), txtDestCodPais.Text.Trim(),
txtDestTel.Text.Trim(), txtDestFax.Text.Trim(),
txtDestEmail.Text.Trim(), txtDestIeRg.Text.Trim(),
txtDestCnpjCpf.Text.Trim(), txtValorDesconto.Text.Trim(),
txtValorIrrf.Text.Trim(), txtValorIrpj.Text.Trim(),
txtValorPis.Text.Trim(), txtValorCofins.Text.Trim(),
txtValorCsll.Text.Trim(), txtValorBenef.Text.Trim(),
txtValorInss.Text.Trim(), txtValorSimples.Text.Trim(),
txtTotalDesc.Text.Trim(), txtTotalDeducoes.Text.Trim(),
txtTotalServicos.Text.Trim(), txtTotalProdutos.Text.Trim(),
txtTotalIss.Text.Trim(), txtTotalIrrf.Text.Trim(),
txtTotalIrpj.Text.Trim(), txtTotalPis.Text.Trim(),
txtTotalCofins.Text.Trim(), txtTotalCsll.Text.Trim(),
txtTotalInss.Text.Trim(), txtTotalSimples.Text.Trim(),
txtFreteNome.Text.Trim(), txtFreteUf.Text.Trim(),
txtFreteCnpjCpf.Text.Trim(), txtFreteIeRg.Text.Trim(),
txtFreteEndereco.Text.Trim(), txtFreteMunicipio.Text.Trim(),
txtFreteTuf.Text.Trim(), txtDbCsIcmsS.Text.Trim(),
txtDbCsFrete.Text.Trim(), txtDbCsSeguro.Text.Trim(),
txtDbCsDespesas.Text.Trim(), txtDbCinFrete.Text.Trim(),
txtDbCinSeguro.Text.Trim(), txtDbCinDespesas.Text.Trim(),
txtDbCinDesconto.Text.Trim(), txtDbCsIss.Text.Trim(),
txtDbCsIrrf.Text.Trim(), txtDbCsIrpj.Text.Trim(),
txtDbCsPis.Text.Trim(), txtDbCsCofins.Text.Trim(),
txtDbCsCsll.Text.Trim(), txtDbCsInss.Text.Trim(),
txtDbCsSimples.Text.Trim(), txtVFrete.Text.Trim(),
txtVSeguro.Text.Trim(), txtVOutros.Text.Trim(),
txtCodFab.Text.Trim()
);
// ── EVENTOS ABSTRATOS ─────────────────────────────────────────────────
protected override void OnNovo()
{
AplicarModo(ModoFormulario.Edicao);
// Limpa campos para novo registro
foreach (var txt in TodosCamposEditaveis())
txt.Text = string.Empty;
txtId.Text = string.Empty;
_idAtual = 0;
tabMain.SelectedIndex = 0;
}
protected override void OnExcluir()
{
if (_idAtual == 0) return;
var confirm = MessageBox.Show(
"Deseja realmente excluir esta configuração?",
"Confirmar exclusão",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
if (confirm != DialogResult.Yes) return;
try
{
// TODO: _bll.Excluir(_idAtual);
foreach (var txt in TodosCamposEditaveis()) txt.Text = string.Empty;
txtId.Text = string.Empty;
_idAtual = 0;
AplicarModo(ModoFormulario.Visualizacao);
MessageBox.Show("Configuração excluída com sucesso.", "Sucesso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"Erro ao excluir:{ ex.Message} ", "Erro",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
protected override void OnLocalizar()
{
// TODO: abrir formulário de busca de configurações
// var frm = new FormularioBuscarConfig();
// if (frm.ShowDialog() == DialogResult.OK)
// {
// PopularCampos(frm.ConfigSelecionada);
// AplicarModo(ModoFormulario.Visualizacao);
// }
MessageBox.Show("Implemente o formulário de busca de configurações.",
"Localizar", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void OnGerarFicha()
{
if (_idAtual == 0)
{
MessageBox.Show("Carregue uma configuração antes de gerar a ficha.",
"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
// TODO: gerar PDF/relatório das configurações
// Ex: RelatorioConfig.Gerar(MontarModelo());
MessageBox.Show("Implemente a geração do PDF de configurações.",
"Gerar Ficha", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
protected override void OnAlterar()
{
AplicarModo(ModoFormulario.Edicao);
tabMain.SelectedIndex = 0;
}
protected override void OnSalvar()
{
var modelo = MontarModelo();
try
{
// TODO: _bll.Atualizar(modelo);
MessageBox.Show("Configurações salvas 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()
{
// TODO: recarregar do banco para descartar alterações
AplicarModo(ModoFormulario.Visualizacao);
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,587 @@
using CPM;
using DAL;
using MLL;
using BLL;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace UI
{
public class ContaPagarCadastroPanel : FormularioModelo
{
// ── CAMPOS DO FORMULÁRIO ──────────────────────────────────────────────
private LV_TEXTBOX1 txtId = null!;
private LV_TEXTBOX1 txtDescricao = null!;
private LV_COMBOBOXCUSTOM cmbStatus = null!;
private CheckBox chkAtivo = null!;
// Fornecedor — busca
private LV_TEXTBOX1 txtFornecedorId = null!;
private LV_TEXTBOX1 txtFornecedorNome = null!;
private Button btnBuscarFornecedor = null!;
// Plano de Contas — busca
private LV_TEXTBOX1 txtPlanoContaId = null!;
private LV_TEXTBOX1 txtPlanoContaNome = null!;
private Button btnBuscarPlanoConta = null!;
// Valores
private LV_TEXTBOX1 txtValor = null!;
private LV_TEXTBOX1 txtValorPago = null!;
private LV_TEXTBOX1 txtJuros = null!;
private LV_TEXTBOX1 txtMulta = null!;
private LV_TEXTBOX1 txtDesconto = null!;
// Datas
private LV_TEXTBOX1 txtDataEmissao = null!;
private LV_TEXTBOX1 txtDataVencimento = null!;
private LV_TEXTBOX1 txtDataPagamento = null!;
// Auditoria
private LV_TEXTBOX1 txtCriadoEm = null!;
private LV_TEXTBOX1 txtAtualizadoEm = null!;
// Observações
private LV_TEXTBOX1 txtObservacoes = null!;
// ── ESTADO ────────────────────────────────────────────────────────────
private enum ModoFormulario { Visualizacao, Novo, Edicao }
private ModoFormulario _modo = ModoFormulario.Visualizacao;
private int _idAtual = 0;
private int _fornecedorId = 0;
private int _planoContaId = 0;
// ── BLL ───────────────────────────────────────────────────────────────
// private ContaPagarBLL _bll = null!;
// ── CONSTRUTOR ────────────────────────────────────────────────────────
public ContaPagarCadastroPanel()
{
Titulo = "Contas a Pagar";
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);
txtDescricao = AddInput(content, "Descrição", 120, 58, 400, 32);
txtDescricao.MaxLength = 255;
// Status
var lblStatus = new Label
{
Text = "Status",
Location = new Point(540, 58),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
cmbStatus = new LV_COMBOBOXCUSTOM
{
Location = new Point(540, 74),
Size = new Size(160, 32),
DropDownStyle = ComboBoxStyle.DropDownList,
BorderColor = BorderColor,
BackColor = Color.White,
ListBackColor = Color.White,
ListTextColor = TextDark,
IconColor = AccentBlue,
Font = new Font("Segoe UI", 9f)
};
cmbStatus.Items.Add("Pendente");
cmbStatus.Items.Add("Pago");
cmbStatus.Items.Add("Vencido");
cmbStatus.Items.Add("Cancelado");
cmbStatus.Items.Add("Parcial");
cmbStatus.SelectedIndex = 0;
content.Controls.Add(lblStatus);
content.Controls.Add(cmbStatus);
chkAtivo = CreateCheckBox("Ativo", 750, 82);
chkAtivo.Checked = true;
content.Controls.Add(chkAtivo);
// ── SEÇÃO: FORNECEDOR ─────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Fornecedor", 128));
var lblFornecedor = new Label
{
Text = "Fornecedor",
Location = new Point(20, 166),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtFornecedorId = new LV_TEXTBOX1
{
Location = new Point(20, 182),
Size = new Size(80, 32),
BorderColor = ReadOnlyBorder,
BorderFocusColor = AccentBlue,
ReadOnly = true,
BackColor = ReadOnlyBg
};
txtFornecedorNome = new LV_TEXTBOX1
{
Location = new Point(108, 182),
Size = new Size(300, 32),
BorderColor = ReadOnlyBorder,
BorderFocusColor = AccentBlue,
ReadOnly = true,
BackColor = ReadOnlyBg
};
btnBuscarFornecedor = new Button
{
Text = "🔍 Buscar",
Location = new Point(416, 182),
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
};
btnBuscarFornecedor.FlatAppearance.BorderSize = 0;
btnBuscarFornecedor.Click += BtnBuscarFornecedor_Click;
content.Controls.Add(lblFornecedor);
content.Controls.Add(txtFornecedorId);
content.Controls.Add(txtFornecedorNome);
content.Controls.Add(btnBuscarFornecedor);
// ── SEÇÃO: PLANO DE CONTAS ────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Plano de Contas", 234));
var lblPlanoConta = new Label
{
Text = "Plano de Contas",
Location = new Point(20, 272),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtPlanoContaId = new LV_TEXTBOX1
{
Location = new Point(20, 288),
Size = new Size(80, 32),
BorderColor = ReadOnlyBorder,
BorderFocusColor = AccentBlue,
ReadOnly = true,
BackColor = ReadOnlyBg
};
txtPlanoContaNome = new LV_TEXTBOX1
{
Location = new Point(108, 288),
Size = new Size(300, 32),
BorderColor = ReadOnlyBorder,
BorderFocusColor = AccentBlue,
ReadOnly = true,
BackColor = ReadOnlyBg
};
btnBuscarPlanoConta = new Button
{
Text = "🔍 Buscar",
Location = new Point(416, 288),
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
};
btnBuscarPlanoConta.FlatAppearance.BorderSize = 0;
btnBuscarPlanoConta.Click += BtnBuscarPlanoConta_Click;
content.Controls.Add(lblPlanoConta);
content.Controls.Add(txtPlanoContaId);
content.Controls.Add(txtPlanoContaNome);
content.Controls.Add(btnBuscarPlanoConta);
// ── SEÇÃO: VALORES ────────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Valores", 340));
txtValor = AddInput(content, "Valor (R$)", 20, 378, 150, 32);
txtValorPago = AddInput(content, "Valor Pago (R$)", 190, 378, 150, 32);
txtJuros = AddInput(content, "Juros (R$)", 360, 378, 130, 32);
txtMulta = AddInput(content, "Multa (R$)", 510, 378, 130, 32);
txtDesconto = AddInput(content, "Desconto (R$)", 660, 378, 130, 32);
// ── SEÇÃO: DATAS ──────────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Datas", 440));
txtDataEmissao = AddInput(content, "Emissão", 20, 478, 180, 32);
txtDataVencimento = AddInput(content, "Vencimento", 220, 478, 180, 32);
txtDataPagamento = AddInput(content, "Pagamento", 420, 478, 180, 32);
// ── SEÇÃO: OBSERVAÇÕES ────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Observações", 540));
var lblObs = new Label
{
Text = "Observações",
Location = new Point(20, 578),
Font = new Font("Segoe UI", 7.5f, FontStyle.Bold),
ForeColor = TextDark,
AutoSize = true
};
txtObservacoes = new LV_TEXTBOX1
{
Location = new Point(20, 594),
Size = new Size(760, 70),
BorderColor = BorderColor,
BorderFocusColor = AccentBlue,
Multiline = true,
MaxLength = 500
};
content.Controls.Add(lblObs);
content.Controls.Add(txtObservacoes);
// ── SEÇÃO: AUDITORIA ──────────────────────────────────────────────
content.Controls.Add(CreateSectionHeader("Auditoria", 684));
txtCriadoEm = AddInput(content, "Criado em", 20, 722, 200, 32, readOnly: true);
txtAtualizadoEm = AddInput(content, "Atualizado em", 240, 722, 200, 32, readOnly: true);
content.Height = 790;
}
// ── CAMPOS EDITÁVEIS ──────────────────────────────────────────────────
private LV_TEXTBOX1[] CamposEditaveis() => new[]
{
txtDescricao, txtValor, txtValorPago, txtJuros,
txtMulta, txtDesconto, txtDataEmissao, txtDataVencimento,
txtDataPagamento, txtObservacoes
};
// ── MODOS DO FORMULÁRIO ───────────────────────────────────────────────
private void AplicarModo(ModoFormulario modo)
{
_modo = modo;
bool editando = modo == ModoFormulario.Novo || modo == ModoFormulario.Edicao;
foreach (var txt in CamposEditaveis())
{
txt.ReadOnly = !editando;
txt.BackColor = editando ? Color.White : ReadOnlyBg;
txt.BorderColor = editando ? BorderColor : ReadOnlyBorder;
}
cmbStatus.Enabled = editando;
cmbStatus.BorderColor = editando ? BorderColor : ReadOnlyBorder;
cmbStatus.BackColor = editando ? Color.White : ReadOnlyBg;
chkAtivo.Enabled = editando;
btnBuscarFornecedor.Enabled = editando;
btnBuscarPlanoConta.Enabled = editando;
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();
}
// ── BUSCA DE FORNECEDOR ───────────────────────────────────────────────
private void BtnBuscarFornecedor_Click(object? sender, EventArgs e)
{
// TODO: abrir formulário de busca de fornecedores
// var frm = new FormularioBuscarFornecedor();
// if (frm.ShowDialog() == DialogResult.OK)
// {
// _fornecedorId = frm.FornecedorSelecionado.Id;
// txtFornecedorId.Text = _fornecedorId.ToString();
// txtFornecedorNome.Text = frm.FornecedorSelecionado.Nome;
// }
MessageBox.Show("Implemente o formulário de busca de fornecedores.",
"Buscar Fornecedor", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// ── BUSCA DE PLANO DE CONTAS ──────────────────────────────────────────
private void BtnBuscarPlanoConta_Click(object? sender, EventArgs e)
{
// TODO: abrir formulário de busca de plano de contas
// var frm = new FormularioBuscarPlanoConta();
// if (frm.ShowDialog() == DialogResult.OK)
// {
// _planoContaId = frm.PlanoContaSelecionado.Id;
// txtPlanoContaId.Text = _planoContaId.ToString();
// txtPlanoContaNome.Text = frm.PlanoContaSelecionado.Nome;
// }
MessageBox.Show("Implemente o formulário de busca de plano de contas.",
"Buscar Plano de Contas", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// ── POPULAR / LIMPAR ──────────────────────────────────────────────────
private void PopularCampos(ModeloContaPagar m)
{
_idAtual = m.Id;
_fornecedorId = m.FornecedorId;
_planoContaId = m.PlanoContaId;
txtId.Text = m.Id.ToString();
txtDescricao.Text = m.Descricao;
txtFornecedorId.Text = m.FornecedorId.ToString();
txtPlanoContaId.Text = m.PlanoContaId.ToString();
txtValor.Text = m.Valor.ToString("F2");
txtValorPago.Text = m.ValorPago?.ToString("F2") ?? string.Empty;
txtJuros.Text = m.Juros.ToString("F2");
txtMulta.Text = m.Multa.ToString("F2");
txtDesconto.Text = m.Desconto.ToString("F2");
txtDataEmissao.Text = m.DataEmissao?.ToString("dd/MM/yyyy") ?? string.Empty;
txtDataVencimento.Text = m.DataVencimento.ToString("dd/MM/yyyy");
txtDataPagamento.Text = m.DataPagamento?.ToString("dd/MM/yyyy") ?? string.Empty;
txtObservacoes.Text = m.Observacoes;
chkAtivo.Checked = m.Ativo;
txtCriadoEm.Text = m.CriadoEm.ToString("dd/MM/yyyy HH:mm");
txtAtualizadoEm.Text = m.AtualizadoEm.ToString("dd/MM/yyyy HH:mm");
SelecionarCombo(cmbStatus, m.Status);
}
private void LimparCampos()
{
_idAtual = 0;
_fornecedorId = 0;
_planoContaId = 0;
txtId.Text = string.Empty;
txtDescricao.Text = string.Empty;
txtFornecedorId.Text = string.Empty;
txtFornecedorNome.Text = string.Empty;
txtPlanoContaId.Text = string.Empty;
txtPlanoContaNome.Text = string.Empty;
txtValor.Text = string.Empty;
txtValorPago.Text = string.Empty;
txtJuros.Text = string.Empty;
txtMulta.Text = string.Empty;
txtDesconto.Text = string.Empty;
txtDataEmissao.Text = string.Empty;
txtDataVencimento.Text = string.Empty;
txtDataPagamento.Text = string.Empty;
txtObservacoes.Text = string.Empty;
chkAtivo.Checked = true;
txtCriadoEm.Text = string.Empty;
txtAtualizadoEm.Text = string.Empty;
cmbStatus.SelectedIndex = 0;
}
// ── HELPER COMBOBOX ───────────────────────────────────────────────────
private static void SelecionarCombo(LV_COMBOBOXCUSTOM cmb, string valor)
{
for (int i = 0; i < cmb.Items.Count; i++)
{
if (cmb.Items[i]?.ToString() == valor)
{
cmb.SelectedIndex = i;
return;
}
}
cmb.SelectedIndex = 0;
}
// ── VALIDAÇÃO ─────────────────────────────────────────────────────────
private bool Validar()
{
if (string.IsNullOrWhiteSpace(txtDescricao.Text))
{
MessageBox.Show("Informe a descrição.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtDescricao.Focus();
return false;
}
if (_fornecedorId == 0)
{
MessageBox.Show("Selecione um fornecedor.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
btnBuscarFornecedor.Focus();
return false;
}
if (_planoContaId == 0)
{
MessageBox.Show("Selecione um plano de contas.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
btnBuscarPlanoConta.Focus();
return false;
}
if (!decimal.TryParse(txtValor.Text.Replace(",", "."),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture, out _))
{
MessageBox.Show("Informe um valor válido.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtValor.Focus();
return false;
}
if (string.IsNullOrWhiteSpace(txtDataVencimento.Text))
{
MessageBox.Show("Informe a data de vencimento.", "Validação",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtDataVencimento.Focus();
return false;
}
return true;
}
// ── MONTAR MODELO ─────────────────────────────────────────────────────
private ModeloContaPagar MontarModelo()
{
decimal.TryParse(txtValor.Text.Replace(",", "."),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture, out decimal valor);
decimal.TryParse(txtValorPago.Text.Replace(",", "."),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture, out decimal valorPago);
decimal.TryParse(txtJuros.Text.Replace(",", "."),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture, out decimal juros);
decimal.TryParse(txtMulta.Text.Replace(",", "."),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture, out decimal multa);
decimal.TryParse(txtDesconto.Text.Replace(",", "."),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture, out decimal desconto);
DateTime.TryParseExact(txtDataVencimento.Text, "dd/MM/yyyy",
null, System.Globalization.DateTimeStyles.None, out DateTime dataVenc);
DateTime.TryParseExact(txtDataEmissao.Text, "dd/MM/yyyy",
null, System.Globalization.DateTimeStyles.None, out DateTime dataEmissao);
DateTime? dataEmissaoNull = string.IsNullOrWhiteSpace(txtDataEmissao.Text) ? null : dataEmissao;
DateTime.TryParseExact(txtDataPagamento.Text, "dd/MM/yyyy",
null, System.Globalization.DateTimeStyles.None, out DateTime dataPag);
DateTime? dataPagNull = string.IsNullOrWhiteSpace(txtDataPagamento.Text) ? null : dataPag;
return new ModeloContaPagar(
_idAtual,
0, // EmpresaId — preenchido pela BLL via sessão
_fornecedorId,
_planoContaId,
txtDescricao.Text.Trim(),
valor,
string.IsNullOrWhiteSpace(txtValorPago.Text) ? null : valorPago,
juros,
multa,
desconto,
cmbStatus.SelectedItem?.ToString() ?? "Pendente",
dataEmissaoNull,
dataVenc,
dataPagNull,
txtObservacoes.Text.Trim(),
chkAtivo.Checked,
_modo == ModoFormulario.Novo ? DateTime.Now : DateTime.Parse(txtCriadoEm.Text),
DateTime.Now
);
}
// ── EVENTOS ABSTRATOS ─────────────────────────────────────────────────
protected override void OnNovo()
{
AplicarModo(ModoFormulario.Novo);
txtDescricao.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 a conta \"{txtDescricao.Text}\"?",
"Confirmar exclusão",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
if (confirm != DialogResult.Yes) return;
try
{
// TODO: _bll.Excluir(_idAtual);
MessageBox.Show("Conta a pagar 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 de contas a pagar
// var frm = new FormularioBuscarContaPagar();
// if (frm.ShowDialog() == DialogResult.OK)
// {
// PopularCampos(frm.ContaSelecionada);
// AplicarModo(ModoFormulario.Visualizacao);
// }
MessageBox.Show("Implemente o formulário de busca de contas a pagar.",
"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("Conta a pagar cadastrada com sucesso!", "Sucesso",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// TODO: _bll.Atualizar(modelo);
MessageBox.Show("Conta a pagar 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);
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -30,8 +30,12 @@ namespace UI
private readonly ChamadoCadastroPanel _pChamadoCadastroPanel; private readonly ChamadoCadastroPanel _pChamadoCadastroPanel;
//Sistma
private readonly ConfigCadastroPanel _pconfigCadastroPanel;
//Painel financeiro //Painel financeiro
private readonly BoletoCadastroPanel _pboletoCadastroPanel; private readonly BoletoCadastroPanel _pboletoCadastroPanel;
private readonly ContaPagarCadastroPanel _pcontaPagarCadastroPanel;
private readonly Panel _pOrdens; private readonly Panel _pOrdens;
private readonly Panel _pProdutos; private readonly Panel _pProdutos;
private readonly Panel _pEstoque; private readonly Panel _pEstoque;
@ -63,6 +67,8 @@ namespace UI
_pservicosCadastroPanel = new ServicosCadastroPanel { Dock = DockStyle.Fill, Visible = false }; _pservicosCadastroPanel = new ServicosCadastroPanel { Dock = DockStyle.Fill, Visible = false };
_pUsuarioCadastroPanel = new UsuariosCadastroPanel { Dock = DockStyle.Fill, Visible=false }; _pUsuarioCadastroPanel = new UsuariosCadastroPanel { Dock = DockStyle.Fill, Visible=false };
_pChamadoCadastroPanel = new ChamadoCadastroPanel { Dock = DockStyle.Fill, Visible = false }; _pChamadoCadastroPanel = new ChamadoCadastroPanel { Dock = DockStyle.Fill, Visible = false };
_pconfigCadastroPanel = new ConfigCadastroPanel { Dock = DockStyle.Fill, Visible = false };
_pcontaPagarCadastroPanel = new ContaPagarCadastroPanel { Dock = DockStyle.Fill, Visible = false };
_pOrdens = PlaceholderPanel("Ordens de Serviço", Color.FromArgb(22, 163, 74)); _pOrdens = PlaceholderPanel("Ordens de Serviço", Color.FromArgb(22, 163, 74));
_pProdutos = PlaceholderPanel("Catálogo de Produtos", Color.FromArgb(217, 119, 6)); _pProdutos = PlaceholderPanel("Catálogo de Produtos", Color.FromArgb(217, 119, 6));
_pEstoque = PlaceholderPanel("Controle de Estoque", Color.FromArgb(234, 88, 12)); _pEstoque = PlaceholderPanel("Controle de Estoque", Color.FromArgb(234, 88, 12));
@ -80,6 +86,7 @@ namespace UI
mainContainer.Controls.Add(_pservicosCadastroPanel); mainContainer.Controls.Add(_pservicosCadastroPanel);
mainContainer.Controls.Add(_pUsuarioCadastroPanel); mainContainer.Controls.Add(_pUsuarioCadastroPanel);
mainContainer.Controls.Add(_pChamadoCadastroPanel); mainContainer.Controls.Add(_pChamadoCadastroPanel);
mainContainer.Controls.Add(_pconfigCadastroPanel);
mainContainer.Controls.Add(_pEstoque); mainContainer.Controls.Add(_pEstoque);
mainContainer.Controls.Add(_pProdutos); mainContainer.Controls.Add(_pProdutos);
mainContainer.Controls.Add(_pOrdens); mainContainer.Controls.Add(_pOrdens);
@ -88,7 +95,7 @@ namespace UI
mainContainer.Controls.Add(_pClientes); mainContainer.Controls.Add(_pClientes);
mainContainer.Controls.Add(_dashboard); mainContainer.Controls.Add(_dashboard);
mainContainer.Controls.Add(_pfuncionariosCadastro); mainContainer.Controls.Add(_pfuncionariosCadastro);
mainContainer.Controls.Add(_pcontaPagarCadastroPanel);
Controls.Add(mainContainer); Controls.Add(mainContainer);
Controls.Add(_sidebar); Controls.Add(_sidebar);
@ -124,12 +131,14 @@ namespace UI
case 106: ShowPanel(_pEmpresa); break; case 106: ShowPanel(_pEmpresa); break;
case 107: ShowPanel(_pUsuarioCadastroPanel); break; case 107: ShowPanel(_pUsuarioCadastroPanel); break;
case 201: ShowPanel(_pconfigCadastroPanel); break;
case 202: ShowPanel(_pEmpresaConfig); break; case 202: ShowPanel(_pEmpresaConfig); break;
case 300: ShowPanel(_pAgendaCadastro); break; case 300: ShowPanel(_pAgendaCadastro); break;
case 301: ShowPanel(_pAgendaConsulta); break; case 301: ShowPanel(_pAgendaConsulta); break;
case 309: ShowPanel(_pChamadoCadastroPanel); break; case 309: ShowPanel(_pChamadoCadastroPanel); break;
case 402: ShowPanel(_pcontaPagarCadastroPanel); break;
case 500: ShowPanel(_pboletoCadastroPanel); break; case 500: ShowPanel(_pboletoCadastroPanel); break;
@ -157,6 +166,8 @@ namespace UI
_pservicosCadastroPanel.Visible = (panelToShow == _pservicosCadastroPanel); _pservicosCadastroPanel.Visible = (panelToShow == _pservicosCadastroPanel);
_pUsuarioCadastroPanel.Visible = (panelToShow == _pUsuarioCadastroPanel); _pUsuarioCadastroPanel.Visible = (panelToShow == _pUsuarioCadastroPanel);
_pChamadoCadastroPanel.Visible = (panelToShow == _pChamadoCadastroPanel); _pChamadoCadastroPanel.Visible = (panelToShow == _pChamadoCadastroPanel);
_pconfigCadastroPanel.Visible = (panelToShow == _pconfigCadastroPanel);
_pcontaPagarCadastroPanel.Visible = (panelToShow == _pcontaPagarCadastroPanel);
if (panelToShow.Visible) if (panelToShow.Visible)
{ {
panelToShow.BringToFront(); panelToShow.BringToFront();

View File

@ -166,9 +166,9 @@ namespace UI
// ── FINANCEIRO ──────────────────────────────────────────────────── // ── FINANCEIRO ────────────────────────────────────────────────────
_subMenuFinanceiro = CreateStyledMenu(); _subMenuFinanceiro = CreateStyledMenu();
_subMenuFinanceiro.Items.Add(CreateItem("💳 Contas")); _subMenuFinanceiro.Items.Add(CreateItem("💳 Contas", (s, e) => NavItemClicked?.Invoke(this, 400)));
_subMenuFinanceiro.Items.Add(CreateItem("📈 Contas a receber")); _subMenuFinanceiro.Items.Add(CreateItem("📈 Contas a receber", (s, e) => NavItemClicked?.Invoke(this, 401)));
_subMenuFinanceiro.Items.Add(CreateItem("📉 Contas a pagar")); _subMenuFinanceiro.Items.Add(CreateItem("📉 Contas a pagar", (s, e) => NavItemClicked?.Invoke(this, 402)));
_subMenuFinanceiro.Items.Add(CreateItem("📉 Boletos/Duplicatas", (s, e) => NavItemClicked?.Invoke(this, 500))); _subMenuFinanceiro.Items.Add(CreateItem("📉 Boletos/Duplicatas", (s, e) => NavItemClicked?.Invoke(this, 500)));
_subMenuFinanceiro.Items.Add(new ToolStripSeparator()); _subMenuFinanceiro.Items.Add(new ToolStripSeparator());
_subMenuFinanceiro.Items.Add(CreateItem("🛒 Compras")); _subMenuFinanceiro.Items.Add(CreateItem("🛒 Compras"));