242 lines
12 KiB
C#
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();
|
|
}
|
|
}
|
|
} |