Exemple #1
0
        private void GerarBlocoC()
        {
            #region C400
            IList<IRegistro01> registros01 = new Registro02().Find<IRegistro01>(new Where {
                        {"DataCriacao Between @p1 AND @p2",
                            new[]{
                                    new Parameter {
                                        ParameterName = "@p1",
                                        GenericDbType = GenericDbType.DateTime,
                                        Value = ACBrSPED.DT_INI
                                    },
                                    new Parameter {
                                        ParameterName = "@p2",
                                        GenericDbType = GenericDbType.DateTime,
                                        Value = ACBrSPED.DT_FIN
                                    }
                                }
                        }
                    });

            //-------------------------------------------------------------------------
            // Unir todos os registros 02 em uma única variável
            //-------------------------------------------------------------------------
            var registros02 = from x in registros01
                              from r in x.RegistrosR2
                              select new
                              {
                                  Impressora = x.Impressora,
                                  CRZ = r.CRZ,
                                  COO = r.COO,
                                  CRO = r.CRO,
                                  DataMovimento = r.DataMovimento,
                                  DataHoraEmissao = r.DataHoraEmissao,
                                  VendaBrutaDiaria = r.VendaBrutaDiaria,
                                  Registros03 = r.Registros03,
                                  MeiosPagamentos = r.MeiosPagamentos,
                                  GrandeTotal = r.GrandeTotal,
                                  TotalPIS = r.TotalPIS,
                                  TotalCofins = r.TotalCofins,
                                  ParametroECFISSQN = r.ParametroECFISSQN
                              };

            var c400s = (from c in Cupons
                         group c by c.Impressora.GUID into g
                         select new
                         {
                             impressora = g.First().Impressora,
                             data = Unimake.Convert.ToDateTime(g.First().DataHoraMovimento.ToShortDateString()),
                             codigo = "2D",
                             modelo = g.First().Impressora.ModeloDocumentoFiscal,
                             serie = g.First().Impressora.Serie,
                             caixa = g.First().Impressora.PDV.NumeroCaixa
                         });

            foreach(var c400 in c400s)
            {
                ACBrFramework.Sped.RegistroC400 regC400 = new ACBrFramework.Sped.RegistroC400
                {
                    COD_MOD = c400.codigo,
                    ECF_MOD = c400.modelo,
                    ECF_FAB = c400.serie,
                    ECF_CX = c400.caixa
                };

                ACBrSPED.Bloco_C.RegistroC001.RegistroC400.Add(regC400);

                #region 405 e filhos
                #region 405
                var c405s = (from c in registros02
                             where c.Impressora.GUID == c400.impressora.GUID &&
                             c.DataMovimento.IsEqual(c400.data)
                             select new
                             {
                                 data = c.DataMovimento,
                                 cro = c.CRO,
                                 crz = c.CRZ,
                                 coo = c.COO,
                                 vendaBruta = (decimal)c.VendaBrutaDiaria,
                                 gt = (decimal)c.GrandeTotal
                             });

                foreach(var c405 in c405s)
                {
                    RegistroC405 regC405 = new RegistroC405
                    {
                        DT_DOC = c405.data,
                        CRO = c405.cro,
                        CRZ = c405.crz,
                        NUM_COO_FIN = c405.coo,
                        GT_FIN = c405.gt,
                        VL_BRT = c405.vendaBruta
                    };

                    regC400.RegistroC405.Add(regC405);

                    #region 410
                    var c410s = (from c in Cupons
                                 where c.Impressora.GUID == c400.impressora.GUID &&
                                  c.DataHoraMovimento.IsEqual(c400.data) &&
                                  (
                                   c.Itens.Sum(j => j.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.COFINS).Sum(k => k.VlrTributo)) > 0 ||
                                   c.Itens.Sum(j => j.Tributos.Where(k=> k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.PIS).Sum(k=>k.VlrTributo)) > 0
                                  )
                                 from i in c.Itens
                                 select new
                                 {
                                     pis = (decimal)i.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.PIS).Sum(k => k.VlrTributo),
                                     cofins = (decimal)i.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.COFINS).Sum(k => k.VlrTributo)
                                 });

                    foreach(var c410 in c410s)
                    {
                        ACBrFramework.Sped.RegistroC410 regC410 = new ACBrFramework.Sped.RegistroC410();
                        regC410.VL_COFINS = c410.cofins;
                        regC410.VL_PIS = c410.pis;
                        regC405.RegistroC410.Add(regC410);
                    }
                    #endregion
                #endregion

                    #region 420
                    regC405.RegistroC420.AddRange((from r3 in
                                                       (
                                                           from r in registros02
                                                           where r.Impressora.GUID == c400.impressora.GUID &&
                                                                r.DataMovimento.IsEqual(c400.data)
                                                           from r3 in r.Registros03
                                                           select r3)
                                                   select new RegistroC420
                                                   {
                                                       COD_TOT_PAR = r3.TotalizadorParcial,
                                                       VLR_ACUM_TOT = (decimal)r3.ValorAcumulado
                                                   }).ToArray<RegistroC420>());
                    #endregion

                    #region 460
                    var c460s = (from c in Cupons
                                 where c.Impressora.GUID == c400.impressora.GUID &&
                                       c.DataHoraMovimento.IsEqual(c400.data)
                                 select new
                                 {
                                     COD_MOD = "2D",
                                     COD_SIT = c.Situacao.ToSPED(),
                                     NUM_DOC = c.COO.ToString(),
                                     DT_DOC = c.DataHoraMovimento,
                                     VL_DOC = (decimal)c.ValorTotalLiquido,
                                     VL_PIS = (decimal)c.Itens.Sum(p => p.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.PIS).Sum(k=>k.VlrTributo)),
                                     VL_COFINS = (decimal)c.Itens.Sum(p => p.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.COFINS).Sum(k => k.VlrTributo)),
                                     CPF_CNPJ = Utilities.OnlyNumbers(c.DadoPessoa.Cliente.GetCPFCNPJ(), "-.", false).ToString(),
                                     NOM_ADQ = c.DadoPessoa.Cliente.RazaoSocial,
                                     itens = c.Itens
                                 });

                    foreach(var c460 in c460s)
                    {
                        RegistroC460 regC460 = new RegistroC460();

                        regC460.COD_MOD = "2D";
                        regC460.COD_SIT = c460.COD_SIT;
                        regC460.NUM_DOC = c460.NUM_DOC;
                        regC460.DT_DOC = c460.DT_DOC;
                        regC460.VL_DOC = c460.VL_DOC;
                        regC460.VL_PIS = c460.VL_PIS;
                        regC460.VL_COFINS = c460.VL_COFINS;
                        regC460.CPF_CNPJ = c460.CPF_CNPJ;
                        regC460.NOM_ADQ = c460.NOM_ADQ;

                        regC405.RegistroC460.Add(regC460);

                        #region 470
                        //REGISTRO C470: ITENS DO DOCUMENTO FISCAL EMITIDO POR ECF (CÓDIGO 02 e 2D).
                        foreach(var c460Itens in c460.itens)
                        {
                            RegistroC470 regc470 = new RegistroC470();

                            regc470.COD_ITEM = c460Itens.ItemMovimentado.EGUID;
                            regc470.QTD = (decimal)c460Itens.Quantidade;
                            regc470.QTD_CANC = (decimal)c460Itens.Registro05.QuantidadeCancelada;
                            regc470.UNID = c460Itens.Unidade.Descricao;
                            regc470.VL_ITEM = (decimal)c460Itens.ValorTotalLiquido;
                            regc470.CST_ICMS = c460Itens.CSTCSOSNCodigos.Where(k=>k.CSTCSOSNCod.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.ICMS).FirstOrDefault().CSTCSOSNCod.Codigo;
                            regc470.CFOP = c460Itens.CFOP.CFOP;
                            regc470.ALIQ_ICMS = (decimal)c460Itens.Tributos.Where(k=>k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.ICMS).FirstOrDefault().Aliquota.Valor;
                            regc470.VL_PIS = (decimal)c460Itens.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.PIS).FirstOrDefault().Aliquota.Valor;
                            regc470.VL_COFINS = (decimal)c460Itens.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.COFINS).FirstOrDefault().Aliquota.Valor;

                            regC460.RegistroC470.Add(regc470);
                        }
                        #endregion

                    #endregion

                    }

                    #region 490
                    regC405.RegistroC490.AddRange((
                        from x in
                            (from c in Cupons
                             from i in c.Itens
                             select i)
                        group x by new
                        {
                            cst = x.CSTCSOSNCodigos.Where(k=>k.CSTCSOSNCod.TipoTributo== TipoTributo.ICMS).FirstOrDefault().CSTCSOSNCod.Codigo,
                            cfop = x.CFOP.CFOP,
                            aliquota = x.Tributos.Where(k=>k.Aliquota.Parent.TipoTributo== TipoTributo.ICMS).FirstOrDefault().Aliquota.Valor
                        } into g
                        select new RegistroC490
                        {
                            CST_ICMS = g.Key.cst,
                            CFOP = g.Key.cfop,
                            ALIQ_ICMS = (decimal)g.Key.aliquota,
                            VL_OPR = (decimal)g.Sum(s => s.ValorTotalLiquido),
                            VL_BC_ICMS = (decimal)g.Sum(s => s.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.ICMS).Sum(k => k.VlrBaseCalculo)),
                            VL_ICMS = (decimal)g.Sum(s => s.Tributos.Where(k => k.Aliquota.Parent.TipoTributo == Enuns.Cadastro.Tributo.TipoTributo.PIS).Sum(k => k.VlrTributo))
                        }).ToArray<RegistroC490>());
                    #endregion
                }
                #endregion
            }
            #endregion
        }
		private void CriaBlocoC()
		{
			int INotas;
			int IItens;
			int NNotas;
			int BNotas;

			// Alimenta o componente com informações para gerar todos os registros do
			// Bloco C.
			btnB_C.Enabled = false;
			btnB_D.Enabled = true;
			NNotas = Convert.ToInt32(edNotas.Text);
			BNotas = Convert.ToInt32(edBufNotas.Text);

			ProgressBar1.Visible = cbConcomitante.Checked;
			ProgressBar1.Maximum = NNotas;
			ProgressBar1.Value = 0;

			var blocoC = ACBrSPEDFiscal1.Bloco_C;
			var registroC001 = blocoC.RegistroC001;
			registroC001.IND_MOV = IndicadorMovimento.ComDados;

			for (INotas = 1; INotas <= NNotas; INotas++)
			{
				var registroC100 = new RegistroC100();
				registroC100.IND_OPER = TipoOperacao.EntradaAquisicao;
				registroC100.IND_EMIT = Emitente.EmissaoPropria;
				registroC100.COD_PART = "001";
				registroC100.COD_MOD = "";
				registroC100.COD_SIT = SituacaoDocto.Regular;
				registroC100.SER = "";
				registroC100.NUM_DOC = string.Format("11{0:000000}", INotas);
				registroC100.CHV_NFE = "";
				registroC100.DT_DOC = blocoC.DT_INI.AddDays(INotas);
				registroC100.DT_E_S = blocoC.DT_INI.AddDays(INotas);
				registroC100.VL_DOC = 0;
				registroC100.IND_PGTO = TipoPagamento.SemPagamento;
				registroC100.VL_DESC = 0;
				registroC100.VL_ABAT_NT = 0;
				registroC100.VL_MERC = 0;
				registroC100.IND_FRT = TipoFrete.SemCobrancaFrete;
				registroC100.VL_SEG = 0;
				registroC100.VL_OUT_DA = 0;
				registroC100.VL_BC_ICMS = 0;
				registroC100.VL_ICMS = 0;
				registroC100.VL_BC_ICMS_ST = 0;
				registroC100.VL_ICMS_ST = 0;
				registroC100.VL_IPI = 0;
				registroC100.VL_PIS = 0;
				registroC100.VL_COFINS = 0;
				registroC100.VL_PIS_ST = 0;
				registroC100.VL_COFINS_ST = 0;
				registroC001.RegistroC100.Add(registroC100);

				// Gera registros específicos para notas emitidas por terceiros
				if (registroC100.IND_EMIT == Emitente.Terceiros)
				{
					var registroC110 = new RegistroC110();
					registroC110.COD_INF = "000001";
					registroC110.TXT_COMPL = "";
					registroC100.RegistroC110.Add(registroC110);
				}

				// Gera o registro de importação apenas para notas de entrada
				if (registroC100.IND_OPER == TipoOperacao.EntradaAquisicao)
				{
					var registroC120 = new RegistroC120();
					registroC120.COD_DOC_IMP = DoctoImporta.SimplificadaImport;
					registroC120.NUM_DOC__IMP = "1024879531";
					registroC120.PIS_IMP = 0.00M;
					registroC120.COFINS_IMP = 0.00M;
					registroC120.NUM_ACDRAW = "";

					registroC100.RegistroC120.Add(registroC120);
				}

				// Gera registros específicos para notas emitidas por terceiros e de prestação
				if ((registroC100.IND_EMIT == Emitente.Terceiros) && (registroC100.IND_OPER == TipoOperacao.SaidaPrestacao))
				{
					var registroC130 = new RegistroC130();
					registroC130.VL_SERV_NT = 10.12M;
					registroC130.VL_BC_ISSQN = 10.12M;
					registroC130.VL_ISSQN = 10.12M;
					registroC130.VL_BC_IRRF = 10.12M;
					registroC130.VL_IRRF = 10.12M;
					registroC130.VL_BC_PREV = 10.12M;
					registroC130.VL_PREV = 10.12M;

					registroC100.RegistroC130.Add(registroC130);
				}

				// REGISTRO C170: ITENS DO DOCUMENTO (CÓDIGO 01, 1B, 04 e 55).
				for (IItens = 1; IItens <= 10; IItens++)
				{
					var registroC170 = new RegistroC170();

					// Inicio Adicionar os Itens:
					registroC170.NUM_ITEM = string.Format("{0:000}", IItens);
					registroC170.COD_ITEM = string.Format("{0:000000}", registroC170.NUM_ITEM);
					registroC170.DESCR_COMPL = string.Format("11{0:000000} ITEM {1}", INotas, registroC170.COD_ITEM);
					registroC170.QTD = 1;
					registroC170.UNID = "UN";
					registroC170.VL_ITEM = 0;
					registroC170.VL_DESC = 0;
					registroC170.IND_MOV = MovimentacaoFisica.Nao;
					registroC170.CST_ICMS = "001";
					registroC170.CFOP = "1252";
					registroC170.COD_NAT = "64";
					registroC170.VL_BC_ICMS = 0;
					registroC170.ALIQ_ICMS = 0;
					registroC170.VL_ICMS = 0;
					registroC170.VL_BC_ICMS_ST = 0;
					registroC170.ALIQ_ST = 0;
					registroC170.VL_ICMS_ST = 0;
					registroC170.IND_APUR = ApuracaoIPI.Mensal;
					registroC170.CST_IPI = ipiEntradaIsenta;
					registroC170.COD_ENQ = "";
					registroC170.VL_BC_IPI = 0;
					registroC170.ALIQ_IPI = 0;
					registroC170.VL_IPI = 0;
					registroC170.CST_PIS = pisOutrasOperacoes;
					registroC170.VL_BC_PIS = 0;
					registroC170.ALIQ_PIS_PERC = 0;
					registroC170.QUANT_BC_PIS = 0;
					registroC170.ALIQ_PIS_R = 0;
					registroC170.VL_PIS = 0;
					registroC170.CST_COFINS = cofinsOutrasOperacoes;
					registroC170.VL_BC_COFINS = 0;
					registroC170.ALIQ_COFINS_PERC = 0;
					registroC170.QUANT_BC_COFINS = 0;
					registroC170.ALIQ_COFINS_R = 0;
					registroC170.VL_COFINS = 0;
					registroC170.COD_CTA = "000";

					registroC100.RegistroC170.Add(registroC170);
				}

				// REGISTRO C170: ITENS DO DOCUMENTO (CÓDIGO 01, 1B, 04 e 55).
				for (IItens = 1; IItens <= 10; IItens++)
				{
					var registroC190 = new RegistroC190();
					registroC190.CST_ICMS = "040";
					registroC190.CFOP = "1252";
					registroC190.ALIQ_ICMS = 0;
					registroC190.VL_OPR = 0;
					registroC190.VL_BC_ICMS = 0;
					registroC190.VL_ICMS = 0;
					registroC190.VL_BC_ICMS_ST = 0;
					registroC190.VL_ICMS_ST = 0;
					registroC190.VL_RED_BC = 0;
					registroC190.VL_IPI = 0;
					registroC190.COD_OBS = "000";

					registroC100.RegistroC190.Add(registroC190);
				}
			}

			var registroC400 = new RegistroC400();

			registroC400.COD_MOD = "2D";
			registroC400.ECF_MOD = "DARUMA FS600";
			registroC400.ECF_FAB = "21098765432123456789";
			registroC400.ECF_CX = "001";

			registroC001.RegistroC400.Add(registroC400);

			var registroC405 = new RegistroC405();

			registroC405.DT_DOC = blocoC.DT_FIN;
			registroC405.CRO = 1;
			registroC405.CRZ = 1;
			registroC405.NUM_COO_FIN = 1;
			registroC405.GT_FIN = 105.00M;
			registroC405.VL_BRT = 105.00M;
			registroC400.RegistroC405.Add(registroC405);

			var registroC410 = new RegistroC410();
			registroC410.VL_PIS = 0.00M;
			registroC410.VL_COFINS = 0.00M;
			registroC405.RegistroC410.Add(registroC410);

			var registroC420 = new RegistroC420();

			registroC420.COD_TOT_PAR = "T1700";
			registroC420.VLR_ACUM_TOT = 100.00M;
			registroC420.NR_TOT = 1;
			registroC420.DESCR_NR_TOT = "TOTALIZADOR T1700";
			registroC405.RegistroC420.Add(registroC420);

			//Gera este registro somente para empresas do pergil B de apresentação
			if (ACBrSPEDFiscal1.Bloco_0.Registro0000.IND_PERFIL == Perfil.PerfilB)
			{
				var registroC425 = new RegistroC425();
				registroC425.COD_ITEM = "000001";
				registroC425.QTD = 1;
				registroC425.UNID = "PC";
				registroC425.VL_ITEM = 100.00M;
				registroC425.VL_PIS = 0.00M;
				registroC425.VL_COFINS = 0.00M;
				registroC420.RegistroC425.Add(registroC425);
			}

			if (ACBrSPEDFiscal1.Bloco_0.Registro0000.IND_PERFIL != Perfil.PerfilB)
			{
				var registroC460 = new RegistroC460();
				registroC460.COD_MOD = "2D";
				registroC460.COD_SIT = SituacaoDocto.Regular;
				registroC460.NUM_DOC = "000001";
				registroC460.DT_DOC = Convert.ToDateTime("30/11/2011");
				registroC460.VL_DOC = 100.00M;
				registroC460.VL_PIS = 0.00M;
				registroC460.VL_COFINS = 0.00M;
				registroC460.CPF_CNPJ = "33333333333";
				registroC460.NOM_ADQ = "TESTE";
				registroC405.RegistroC460.Add(registroC460);

				var registroC470 = new RegistroC470();
				registroC470.COD_ITEM = "000001";
				registroC470.QTD = 1;
				registroC470.QTD_CANC = 0;
				registroC470.UNID = "UN";
				registroC470.VL_ITEM = 100.00m;
				registroC470.CST_ICMS = "000";
				registroC470.CFOP = "5102";
				registroC470.ALIQ_ICMS = 17.00m;
				registroC470.VL_PIS = 0.00m;
				registroC470.VL_COFINS = 0.00m;
				registroC460.RegistroC470.Add(registroC470);
			}

			var registroC490 = new RegistroC490();

			registroC490.CST_ICMS = "000";
			registroC490.CFOP = "5102";
			registroC490.ALIQ_ICMS = 17.00M;
			registroC490.VL_OPR = 100.00M;
			registroC490.VL_BC_ICMS = 100.00M;
			registroC490.VL_ICMS = 17.00M;
			registroC490.COD_OBS = "000001";
			registroC405.RegistroC490.Add(registroC490);

			//Só envia este registro se o contribuinte for da BA
			if (ACBrSPEDFiscal1.Bloco_0.Registro0000.UF == "BA")
			{
				var registroC495 = new RegistroC495();

				registroC495.ALIQ_ICMS = 17.00M;
				registroC495.COD_ITEM = "000001";
				registroC495.QTD = 1.00M;
				registroC495.QTD_CANC = 0.00M;
				registroC495.UNID = "UN";
				registroC495.VL_ITEM = 100.00M;
				registroC495.VL_DESC = 0.00M;
				registroC495.VL_CANC = 0.00M;
				registroC495.VL_ACMO = 0.00M;
				registroC495.VL_BC_ICMS = 100.00M;
				registroC495.VL_ICMS = 17.00M;
				registroC495.VL_ISEN = 0.00M;
				registroC495.VL_ICMS_ST = 0.00M;
			}
		}