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