LevelOS-Core/UI/Dashboards/Fiscal/SatFiscalConsumidorPanel.cs

242 lines
12 KiB
C#

using MLL;
using System;
using System.Drawing;
using System.Windows.Forms;
using CPM;
namespace UI
{
public class SatFiscalConsumidorPanel : FormularioModelo
{
private TabControl tabFiscal;
// --- CAMPOS DA ABA 1: DADOS DA EMISSÃO ---
private LV_TEXTBOX1 txtIdSatFiscalConsu, txtCodigo, txtProducao, txtSerie, txtNatureza, txtEmissao, txtTerminal, txtSituacao, txtDataCadastro;
// --- CAMPOS DA ABA 2: DESTINATÁRIO / CLIENTE ---
private LV_TEXTBOX1 txtDestNome, txtDestEmail, txtDestCpfCnpj, txtDestIdEstrangeiro, txtDestLgr, txtDestCpl, txtDestNro, txtDestBairro, txtDestCMun, txtDestXMun, txtDestUf, txtDestCep, txtDestCPais, txtDestXPais, txtDestFone;
// --- CAMPOS DA ABA 3: TOTAIS E IMPOSTOS (SEFAZ) ---
private LV_TEXTBOX1 txtTotalVBc, txtTotalVIcms, txtTotalVBcSt, txtTotalVSt, txtTotalVProd, txtTotalVFrete, txtTotalVSeg, txtTotalVDesc, txtTotalVIi, txtTotalVIpi, txtTotalVPis, txtTotalVCofins, txtTotalVOutro, txtTotalVNf;
// --- CAMPOS DA ABA 4: LOGÍSTICA / PROTOCOLOS ---
private LV_TEXTBOX1 txtFreteModalidade, txtFreteXCnpjCpf, txtFreteXNome, txtNfcPronta, txtNfcInfCpl, txtChaveNfc, txtProtocolo, txtProtocoloCancela;
public SatFiscalConsumidorPanel()
{
this.Titulo = "GERENCIAMENTO DE EMISSÃO FISCAL (NFC-E / SAT)";
MontarInterfaceCompleta();
}
private void MontarInterfaceCompleta()
{
// Inicialização do TabControl adaptado ao content (1100px)
tabFiscal = new TabControl
{
Location = new Point(10, 10),
Size = new Size(1060, 520),
Font = new Font("Segoe UI", 9.5f)
};
var tpEmissao = new TabPage("Dados da Emissão");
var tpDestinatario = new TabPage("Destinatário / Cliente");
var tpTotais = new TabPage("Totais e Impostos");
var tpProtocolos = new TabPage("Logística e Protocolos");
tabFiscal.TabPages.AddRange(new[] { tpEmissao, tpDestinatario, tpTotais, tpProtocolos });
content.Controls.Add(tabFiscal);
ConfigurarAbaEmissao(tpEmissao);
ConfigurarAbaDestinatario(tpDestinatario);
ConfigurarAbaTotais(tpTotais);
ConfigurarAbaProtocolos(tpProtocolos);
}
private void ConfigurarAbaEmissao(TabPage tp)
{
tp.Controls.Add(CreateSectionHeader("Identificação e Status do Cupom Fiscal", 15));
txtIdSatFiscalConsu = AddInput(tp, "ID FISCAL", 20, 50, 100, 28, true);
txtCodigo = AddInput(tp, "CÓDIGO INT.", 135, 50, 110, 28);
txtTerminal = AddInput(tp, "Nº TERMINAL", 260, 50, 110, 28);
txtSerie = AddInput(tp, "SÉRIE", 385, 50, 90, 28);
txtProducao = AddInput(tp, "AMBIENTE (1=PROD / 2=HOMOL)", 490, 50, 210, 28);
txtSituacao = AddInput(tp, "SITUAÇÃO XML", 715, 50, 150, 28);
tp.Controls.Add(CreateSectionHeader("Datas e Natureza de Operação", 120));
txtNatureza = AddInput(tp, "NATUREZA DA OPERAÇÃO", 20, 155, 350, 28);
txtEmissao = AddInput(tp, "DATA/HORA EMISSÃO", 385, 155, 180, 28);
txtDataCadastro = AddInput(tp, "DATA CADASTRO NO SISTEMA", 580, 155, 200, 28, true);
}
private void ConfigurarAbaDestinatario(TabPage tp)
{
tp.Controls.Add(CreateSectionHeader("Identificação do Consumidor", 15));
txtDestNome = AddInput(tp, "RAZÃO SOCIAL / NOME", 20, 50, 400, 28);
txtDestCpfCnpj = AddInput(tp, "CPF / CNPJ", 435, 50, 180, 28);
txtDestEmail = AddInput(tp, "E-MAIL DESTINATÁRIO", 630, 50, 250, 28);
txtDestFone = AddInput(tp, "TELEFONE", 20, 105, 150, 28);
txtDestIdEstrangeiro = AddInput(tp, "DOCUMENTO ESTRANGEIRO (PASSAPORTE)", 185, 105, 250, 28);
tp.Controls.Add(CreateSectionHeader("Endereço do Destinatário", 165));
txtDestLgr = AddInput(tp, "LOGRADOURO (RUA, AV)", 20, 200, 350, 28);
txtDestNro = AddInput(tp, "NÚMERO", 385, 200, 80, 28);
txtDestCpl = AddInput(tp, "COMPLEMENTO", 480, 200, 200, 28);
txtDestBairro = AddInput(tp, "BAIRRO", 695, 200, 185, 28);
txtDestCep = AddInput(tp, "CEP", 20, 255, 110, 28);
txtDestCMun = AddInput(tp, "CÓD. MUNICÍPIO (IBGE)", 145, 255, 150, 28);
txtDestXMun = AddInput(tp, "MUNICÍPIO", 310, 255, 220, 28);
txtDestUf = AddInput(tp, "UF", 545, 255, 50, 28);
txtDestCPais = AddInput(tp, "CÓD. PAÍS", 610, 255, 80, 28);
txtDestXPais = AddInput(tp, "PAÍS", 700, 255, 180, 28);
}
private void ConfigurarAbaTotais(TabPage tp)
{
tp.Controls.Add(CreateSectionHeader("Composição de Valores de Produtos e Frete", 15));
txtTotalVProd = AddInput(tp, "TOTAL PRODUTOS (R$)", 20, 50, 160, 28);
txtTotalVDesc = AddInput(tp, "TOTAL DESCONTO (R$)", 195, 50, 150, 28);
txtTotalVFrete = AddInput(tp, "VALOR FRETE (R$)", 360, 50, 140, 28);
txtTotalVSeg = AddInput(tp, "VALOR SEGURO (R$)", 515, 50, 140, 28);
txtTotalVOutro = AddInput(tp, "OUTRAS DESPESAS (R$)", 670, 50, 150, 28);
txtTotalVNf = AddInput(tp, "VALOR TOTAL DA NOTA (R$)", 835, 50, 190, 28, true);
tp.Controls.Add(CreateSectionHeader("Impostos e Retenções Fiscais", 115));
txtTotalVBc = AddInput(tp, "BASE CÁLCULO ICMS", 20, 150, 150, 28);
txtTotalVIcms = AddInput(tp, "VALOR DO ICMS", 185, 150, 140, 28);
txtTotalVBcSt = AddInput(tp, "BASE CÁLCULO ICMS ST", 340, 150, 160, 28);
txtTotalVSt = AddInput(tp, "VALOR ICMS ST", 515, 150, 140, 28);
txtTotalVIi = AddInput(tp, "VALOR IMP. IMPORTAÇÃO", 670, 150, 160, 28);
txtTotalVIpi = AddInput(tp, "VALOR TOTAL IPI", 20, 205, 150, 28);
txtTotalVPis = AddInput(tp, "VALOR TOTAL PIS", 185, 205, 140, 28);
txtTotalVCofins = AddInput(tp, "VALOR TOTAL COFINS", 340, 205, 160, 28);
}
private void ConfigurarAbaProtocolos(TabPage tp)
{
tp.Controls.Add(CreateSectionHeader("Informações do Transportador e Frete", 15));
txtFreteModalidade = AddInput(tp, "MODALIDADE FRETE", 20, 50, 160, 28);
txtFreteXCnpjCpf = AddInput(tp, "CNPJ / CPF TRANSP.", 195, 50, 180, 28);
txtFreteXNome = AddInput(tp, "RAZÃO SOCIAL TRANSPORTADORA", 390, 50, 420, 28);
tp.Controls.Add(CreateSectionHeader("Protocolos de Validação SEFAZ", 115));
txtChaveNfc = AddInput(tp, "CHAVE DE ACESSO NFC-E / SAT (44 DÍGITOS)", 20, 150, 450, 28);
txtProtocolo = AddInput(tp, "Nº PROTOCOLO AUTORIZAÇÃO", 480, 150, 230, 28);
txtProtocoloCancela = AddInput(tp, "Nº PROTOCOLO CANCELAMENTO", 720, 150, 230, 28);
tp.Controls.Add(CreateSectionHeader("Parâmetros do Arquivo Fiscal XML", 215));
txtNfcPronta = AddInput(tp, "NFC PRONTA (S/N)", 20, 250, 140, 28);
txtNfcInfCpl = AddInput(tp, "INFORMAÇÕES COMPLEMENTARES AO CONTRIBUINTE", 175, 250, 635, 28);
}
// --- MÉTODOS OBRIGATÓRIOS DO FORMULÁRIO MODELO ---
protected override void OnNovo()
{
Action<Control.ControlCollection> limparCampos = null;
limparCampos = (controls) =>
{
foreach (Control c in controls)
{
if (c is LV_TEXTBOX1 txt && !txt.ReadOnly) txt.Text = string.Empty;
if (c.HasChildren) limparCampos(c.Controls);
}
};
limparCampos(tabFiscal.Controls);
txtIdSatFiscalConsu.Text = "0";
txtDataCadastro.Text = DateTime.Now.ToString("g");
tabFiscal.SelectedIndex = 0;
txtCodigo.Focus();
}
protected override void OnSalvar()
{
if (string.IsNullOrWhiteSpace(txtCodigo.Text))
{
MessageBox.Show("O código interno da transação é obrigatório.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
tabFiscal.SelectedIndex = 0;
txtCodigo.Focus();
return;
}
// Mapeamento absoluto, cirúrgico e fiel de todas as 46 propriedades
var fiscal = new ModeloSatFiscalConsumidor
{
ID_SAT_FISCAL_CONSU = string.IsNullOrEmpty(txtIdSatFiscalConsu.Text) ? 0 : Convert.ToInt32(txtIdSatFiscalConsu.Text),
CODIGO = txtCodigo.Text,
PRODUCAO = txtProducao.Text,
SERIE = txtSerie.Text,
NATUREZA = txtNatureza.Text,
EMISSAO = txtEmissao.Text,
DEST_NOME = txtDestNome.Text,
DEST_EMAIL = txtDestEmail.Text,
DEST_CPF_CNPJ = txtDestCpfCnpj.Text,
DEST_IDESTRANGEIRO = txtDestIdEstrangeiro.Text,
DEST_xLgr = txtDestLgr.Text,
DEST_CPL = txtDestCpl.Text,
DEST_nro = txtDestNro.Text,
DEST_xBairro = txtDestBairro.Text,
DEST_cMun = txtDestCMun.Text,
DEST_xMun = txtDestXMun.Text,
DEST_UF = txtDestUf.Text,
DEST_CEP = txtDestCep.Text,
DEST_cPais = txtDestCPais.Text,
DEST_xPais = txtDestXPais.Text,
DEST_fone = txtDestFone.Text,
FRETE_MODALIDADE = txtFreteModalidade.Text,
FRETE_xCNPJ_CPF = txtFreteXCnpjCpf.Text,
FRETE_xNome = txtFreteXNome.Text,
NFC_PRONTA = txtNfcPronta.Text,
NFC_infCpl = txtNfcInfCpl.Text,
TOTAL_vBC = txtTotalVBc.Text,
TOTAL_vICMS = txtTotalVIcms.Text,
TOTAL_vBCST = txtTotalVBcSt.Text,
TOTAL_vST = txtTotalVSt.Text,
TOTAL_vProd = txtTotalVProd.Text,
TOTAL_vFrete = txtTotalVFrete.Text,
TOTAL_vSeg = txtTotalVSeg.Text,
TOTAL_vDesc = txtTotalVDesc.Text,
TOTAL_vII = txtTotalVIi.Text,
TOTAL_vIPI = txtTotalVIpi.Text,
TOTAL_vPIS = txtTotalVPis.Text,
TOTAL_vCOFINS = txtTotalVCofins.Text,
TOTAL_vOutro = txtTotalVOutro.Text,
TOTAL_vNF = txtTotalVNf.Text,
TERMINAL = txtTerminal.Text,
CHAVE_NFC = txtChaveNfc.Text,
PROTOCOLO = txtProtocolo.Text,
PROTOCOLO_CANCELA = txtProtocoloCancela.Text,
SITUACAO = txtSituacao.Text,
DATA_CADASTRO = txtDataCadastro.Text
};
// Envio para repositórios DAL / BLL (LevelCode)
MessageBox.Show("Movimentação fiscal salva e estruturada para transmissão!", "LevelOS", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
protected override void OnAlterar()
{
txtSituacao.Focus();
}
protected override void OnExcluir()
{
if (MessageBox.Show("Atenção! A exclusão direta de um cupom fiscal no banco pode gerar quebras de sequência numérica na SEFAZ. Deseja prosseguir?", "LevelOS", MessageBoxButtons.YesNo, MessageBoxIcon.Stop) == DialogResult.Yes)
{
OnNovo();
}
}
protected override void OnLocalizar()
{
// Abre o Grid de cupons emitidos/pendentes
}
protected override void OnCancelar()
{
OnNovo();
}
}
}