Beispiel #1
0
        public virtual ARInvoice CommitExternalTax(ARInvoice doc)
        {
            if (doc != null && doc.IsTaxValid == true && doc.NonTaxable == false && IsExternalTax(doc.TaxZoneID) && doc.InstallmentNbr == null)
            {
                if (TaxPluginMaint.IsActive(Base, doc.TaxZoneID))
                {
                    var service = ExternalTax.TaxProviderFactory(Base, doc.TaxZoneID);

                    CommitTaxRequest request = new CommitTaxRequest();
                    request.CompanyCode = ExternalTax.CompanyCodeFromBranch(Base, doc.TaxZoneID, doc.BranchID);
                    request.DocCode     = string.Format("AR.{0}.{1}", doc.DocType, doc.RefNbr);

                    if (doc.DocType == ARDocType.CreditMemo)
                    {
                        request.DocType = TaxDocumentType.ReturnInvoice;
                    }
                    else
                    {
                        request.DocType = TaxDocumentType.SalesInvoice;
                    }


                    CommitTaxResult result = service.CommitTax(request);
                    if (result.IsSuccess)
                    {
                        doc.IsTaxPosted = true;
                    }
                    else
                    {
                        //Avalara retuned an error - The given document is already marked as posted on the avalara side.
                        if (!result.IsSuccess && result.Messages.Any(t => t.Contains("Expected Posted")))
                        {
                            //ignore this error - everything is cool
                        }
                        else
                        {
                            //show as warning.
                            StringBuilder sb = new StringBuilder();
                            foreach (var msg in result.Messages)
                            {
                                sb.AppendLine(msg);
                            }

                            if (sb.Length > 0)
                            {
                                doc.WarningMessage = PXMessages.LocalizeFormatNoPrefixNLA(Messages.PostingToExternalTaxProviderFailed, sb.ToString());
                            }
                        }
                    }
                }
            }

            return(doc);
        }
        private ITaxProvider ExternalReportingProvider()
        {
            var graph   = new PXGraph();
            var setting = _settings.Setting(ProviderSettings.SETTING_EXTTAXREPORTER);

            var providerId = setting.Value;

            _logger.Info($"ExternalReportingProvider - {providerId}");

            if (providerId == TaxProviderID)
            {
                throw new Exception($"{TaxProviderID} is not configured to handle Tax Reporting");
            }

            var provider = TaxPluginMaint.CreateTaxProvider(graph, providerId);

            if (provider is LogicAutomatedTaxProvider)
            {
                throw new Exception($"{TaxProviderID} is not configured to handle Tax Reporting");
            }

            return(provider);
        }