22/04/2026 - Implementando formularios
This commit is contained in:
parent
1f6541d7d4
commit
ec818850a4
516
UI/Dashboards/Cadastros/Cheguescadastropanel.cs
Normal file
516
UI/Dashboards/Cadastros/Cheguescadastropanel.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
452
UI/Dashboards/Cadastros/Clientesenderecoscadastropanel.cs
Normal file
452
UI/Dashboards/Cadastros/Clientesenderecoscadastropanel.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
732
UI/Dashboards/Cadastros/ConfigCadastroPanel.cs
Normal file
732
UI/Dashboards/Cadastros/ConfigCadastroPanel.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
UI/Dashboards/Cadastros/ConfigCadastroPanel.resx
Normal file
120
UI/Dashboards/Cadastros/ConfigCadastroPanel.resx
Normal 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>
|
||||||
587
UI/Dashboards/Cadastros/ContaPagarCadastroPanel.cs
Normal file
587
UI/Dashboards/Cadastros/ContaPagarCadastroPanel.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
UI/Dashboards/Cadastros/ContaPagarCadastroPanel.resx
Normal file
120
UI/Dashboards/Cadastros/ContaPagarCadastroPanel.resx
Normal 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>
|
||||||
@ -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();
|
||||||
|
|||||||
@ -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"));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user