Пример #1
0
        public bool Cancel(long CompanyId, string NFNumber)
        {
            try
            {
                Validate(CompanyId, NFNumber);

                Companys Company = new CompanyDomain().Get <Companys>(CompanyDomain.Type.Company, CompanyId);

                string Xml      = GetArchives(CompanyId, NFNumber, TypeArchive.Xml);
                string XmlIssue = API.Cancel(API.GetCity(Company.City), Homologation.CPF, Homologation.Password, Xml);
                if (Functions.XmlFunctions.IsXml(XmlIssue))
                {
                    //Cenas para os próximos capitulos...
                }
                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #2
0
        private void ValidateIssue(NFeSRequest NFeS)
        {
            //Empresa
            if (NFeS.CompanyId <= 0)
            {
                throw new InternalProgramException("Informe o emissor.");
            }

            Companys Comp = new CompanyDomain().Get <Companys>(CompanyDomain.Type.Company, NFeS.CompanyId);

            if (Comp.CompanyId <= 0)
            {
                throw new InternalProgramException("A empresa informada não está cadastrada.");
            }

            if (string.IsNullOrEmpty(Comp.IE))
            {
                throw new InternalProgramException("A empresa não tem a inscrição estadual cadastrada.");
            }

            if (string.IsNullOrEmpty(Comp.IM))
            {
                throw new InternalProgramException("A empresa não tem a inscrição municipal cadastrada.");
            }

            //Tomador
            if (NFeS.TakerId <= 0)
            {
                throw new InternalProgramException("Informe o tomador do serviço.");
            }

            if (new TakerDomain().Get <Takers>(NFeS.TakerId).TakerId <= 0)
            {
                throw new InternalProgramException("O tomador informado não está cadastrado.");
            }

            //Codigo Fiscal de Prestação de Serviços
            if (NFeS.CFPSId <= 0)
            {
                throw new InternalProgramException("Informe o Código Fiscal de Prestação de Serviço (CFPS).");
            }

            if (new CFPSDomain().Get <CFPS>(NFeS.CFPSId).CFPSId <= 0)
            {
                throw new InternalProgramException("O Código Fiscal de Prestação de Serviço (CFPS) informado não está cadastrado.");
            }

            //Atividades do contribuinte
            if (NFeS.TaxpayerActivitiesId <= 0)
            {
                throw new InternalProgramException("Informe o código da atividade.");
            }

            if (new TaxpayerActivitiesDomain().Get(NFeS.TaxpayerActivitiesId).TaxpayerActivitiesId <= 0)
            {
                throw new InternalProgramException("Atividade inexistente.");
            }

            //Faturas - Quatidades
            if (NFeS.Invoices.Count <= 0)
            {
                throw new InternalProgramException("Ao menos 1 (Uma) fatura deve ser informada.");
            }

            //Faturas - Informações
            if (NFeS.Invoices.Count > 0)
            {
                foreach (NFeSRequestInvoices Invoice in NFeS.Invoices)
                {
                    if (Invoice.Number <= 0)
                    {
                        throw new InternalProgramException("Informe o número da fatura.");
                    }
                    if (string.IsNullOrEmpty(Invoice.Maturity) || !Functions.IsDate(Invoice.Maturity))
                    {
                        throw new InternalProgramException("Informe a data de vencimento da fatura.");
                    }
                    if (Invoice.Value <= 0)
                    {
                        throw new InternalProgramException("Informe o valor da fatura.");
                    }
                }
            }

            //Serviços - Quantidades
            if (NFeS.Itens.Count <= 0)
            {
                throw new InternalProgramException("Informe ao menos 1 (Um) serviço.");
            }

            //Serviços - Informações
            if (NFeS.Itens.Count > 0)
            {
                foreach (NFeSRequestItens Item in NFeS.Itens)
                {
                    if (Item.ServicesId <= 0)
                    {
                        throw new InternalProgramException("Informe o serviço prestado.");
                    }
                    if (new ServiceDomain().Get <Services>(Item.ServicesId).ServicesId <= 0)
                    {
                        throw new InternalProgramException("O serviço informado não existe na base de dados.");
                    }
                    if (Item.Amount <= 0)
                    {
                        throw new InternalProgramException("Informe a quantidade do serviço prestado.");
                    }
                    if (Item.Value <= 0)
                    {
                        throw new InternalProgramException("Informe o valor do serviço.");
                    }
                }
            }
        }
Пример #3
0
        public NFeSRequestPreview Issue(NFeSRequest NFeS)
        {
            try
            {
                ValidateIssue(NFeS);

                //Objetos da Nota Fiscal:
                var Taker              = new TakerDomain().Get <Takers>(NFeS.TakerId);
                var Company            = new CompanyDomain().Get <Companys>(CompanyDomain.Type.Company, NFeS.CompanyId);
                var CFPS               = new CFPSDomain().Get <CFPS>(NFeS.CFPSId);
                var TaxpayerActivities = new TaxpayerActivitiesDomain().Get(NFeS.TaxpayerActivitiesId);
                var ShippingCompany    = new ShippingCompany();
                if (NFeS.ShippingCompanyId > 0)
                {
                    ShippingCompany = new ShippingCompanyDomain().Get <ShippingCompany>(NFeS.ShippingCompanyId);
                }

                //Nota Fiscal:
                var NFeSRequest = new Models.Models.NFeSStructure.NFeSIssueRequest.tbnfd();
                var NotaFiscal  = new Models.Models.NFeSStructure.NFeSIssueRequest.tbnfdNfd()
                {
                    numeronfd                 = Homologation.NumberNF,
                    codseriedocumento         = Homologation.Serie,
                    codnaturezaoperacao       = CFPS.CFPSCod,
                    codigocidade              = Homologation.CityCod,
                    inscricaomunicipalemissor = Homologation.IM,
                    dataemissao               = Functions.DateTimeBr().ToString("dd/MM/yyyy"),
                    razaotomador              = Taker.Name,
                    nomefantasiatomador       = Taker.NameFantasy,
                    enderecotomador           = Taker.Street,
                    numeroendereco            = Taker.Number,
                    cidadetomador             = Taker.City,
                    estadotomador             = Taker.State,
                    paistomador               = Homologation.Country,
                    fonetomador               = Taker.Telephone,
                    faxtomador                = Taker.Telephone,
                    ceptomador                = Taker.CEP,
                    bairrotomador             = Taker.Neighborhood,
                    emailtomador              = Taker.Email,
                    tppessoa                  = Taker.TypePerson,
                    cpfcnpjtomador            = Taker.CPF_CNPJ,
                    inscricaoestadualtomador  = Taker.RG_IE,
                    inscricaomunicipaltomador = Taker.IM,
                    observacao                = NFeS.Note,
                    razaotransportadora       = Functions.IIf(ShippingCompany.Name),
                    cpfcnpjtransportadora     = Functions.IIf(ShippingCompany.CPF_CNPJ),
                    pis    = Homologation.PIS,
                    cofins = Homologation.COFINS,
                    csll   = Homologation.CSLL,
                    irrf   = Homologation.IRRF,
                    inss   = Homologation.INSS,
                    descdeducoesconstrucao  = string.Empty,
                    totaldeducoesconstrucao = string.Empty,
                    tributadonomunicipio    = string.Empty,
                    vlroutros              = string.Empty,
                    numerort               = string.Empty,
                    codigoseriert          = string.Empty,
                    dataemissaort          = string.Empty,
                    fatorgerador           = Functions.DateTimeBr().Month + "/" + Functions.DateTimeBr().Year,
                    enderecotransportadora =
                        Functions.IIf(ShippingCompany.Street) + ","
                        + Functions.IIf(ShippingCompany.Neighborhood) + ","
                        + Functions.IIf(ShippingCompany.City) + ","
                        + Functions.IIf(ShippingCompany.State),
                };

                //Faturas:
                NotaFiscal.tbfatura = new Models.Models.NFeSStructure.NFeSIssueRequest.tbnfdNfdFatura[NFeS.Invoices.Count];
                for (int X = 0; X < NFeS.Invoices.Count; X++)
                {
                    NFeSRequestInvoices Invoice = NFeS.Invoices[X];
                    NotaFiscal.tbfatura[X] = new Models.Models.NFeSStructure.NFeSIssueRequest.tbnfdNfdFatura
                    {
                        numfatura        = Invoice.Number.ToString(),
                        vencimentofatura = DateTime.Parse(Invoice.Maturity).ToString("dd/MM/yyyy"),
                        valorfatura      = Invoice.Value.ToString()
                    };
                }

                //Serviços:
                NotaFiscal.tbservico = new Models.Models.NFeSStructure.NFeSIssueRequest.tbnfdNfdServico[NFeS.Itens.Count];
                for (int X = 0; X < NFeS.Itens.Count; X++)
                {
                    NFeSRequestItens Item     = NFeS.Itens[X];
                    Services         Services = new ServiceDomain().Get <Services>(Item.ServicesId);

                    NotaFiscal.tbservico[X] = new Models.Models.NFeSStructure.NFeSIssueRequest.tbnfdNfdServico
                    {
                        quantidade    = Item.Amount.ToString(),
                        descricao     = Services.Description,
                        codatividade  = TaxpayerActivities.CNAE,
                        valorunitario = Item.Value.ToString(),
                        aliquota      = TaxpayerActivities.Aliquot.ToString(),
                        impostoretido = CFPS.TaxWithheld
                    };
                }

                NFeSRequest.nfd = NotaFiscal;

                string XmlRPS = API.Send(API.GetCity(Company.City), Homologation.CPF, Homologation.Password, int.Parse(Homologation.CityCod), this.Assign(NFeSRequest));

                if (Functions.XmlFunctions.IsXml(XmlRPS))
                {
                    //Enviando o RPS para receber a NFSe(5 tentativas)//
                    int    Cont          = 0;
                    string XmlAuthorized = string.Empty;

                    //Primeira tentativa
                    XmlAuthorized = API.Receive(API.GetCity(Company.City),
                                                Homologation.CPF,
                                                Homologation.Password,
                                                Homologation.IM,
                                                XmlRPS);

                    bool Auth = Functions.XmlFunctions.IsXml(XmlAuthorized);

                    while (!Auth & Cont <= 5)
                    {
                        XmlAuthorized = API.Receive(API.GetCity(Company.City),
                                                    Homologation.CPF,
                                                    Homologation.Password,
                                                    Homologation.IM,
                                                    XmlRPS);

                        Auth = Functions.XmlFunctions.IsXml(XmlAuthorized);
                        Cont++;
                        System.Threading.Thread.Sleep(5000);
                    }


                    if (Functions.XmlFunctions.IsXml(XmlAuthorized))
                    {
                        var    NFeSAuthorized = Functions.XmlFunctions.StringXmlForClass <Models.Models.NFeSStructure.NFeSProcessingResult.tbnfd>(XmlAuthorized);
                        string XmlUrl         = API.GetUrl(API.City.Serra,
                                                           int.Parse(Homologation.CityCod),
                                                           int.Parse(NFeSAuthorized.nfdok.NewDataSet.NOTA_FISCAL.NumeroNota),
                                                           int.Parse(NFeSAuthorized.nfdok.NewDataSet.NOTA_FISCAL.CodigoSerie),
                                                           Homologation.IM);

                        if (Functions.XmlFunctions.IsXml(XmlUrl))
                        {
                            var    NFeSUrl = Functions.XmlFunctions.StringXmlForClass <Models.Models.NFeSStructure.NFeSPreview.util>(XmlUrl);
                            string PDF     = Download(NFeSUrl.urlNfd);

                            //Salvando no banco os dados da nota fiscal
                            Save(Taker,
                                 Company,
                                 CFPS,
                                 ShippingCompany,
                                 NFeSAuthorized,
                                 NFeSUrl,
                                 XmlAuthorized,
                                 PDF);

                            //Enviando email para o tomador
                            SendEmail(Taker, Company, NFeSAuthorized, NFeSUrl);

                            return(new NFeSRequestPreview(NFeSUrl.urlNfd, PDF));
                        }
                        else
                        {
                            throw new InternalProgramException(XmlUrl);
                        }
                    }
                    else
                    {
                        throw new InternalProgramException(XmlAuthorized);
                    }
                }
                else
                {
                    throw new InternalProgramException(XmlRPS);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }