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; } }
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."); } } } }
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; } }