public AvaTaxResult CommitTax(string companyCode, string docCode, DocumentType docType) { var result = new AvaTaxResult(); var ctr = new CommitTaxRequest { CompanyCode = companyCode, DocCode = docCode, DocType = ConvertDocType(docType) }; var svc = GetTaxServiceProxy(); var ctres = svc.CommitTax(ctr); if (ctres.ResultCode != avt.SeverityLevel.Success) { result.Success = false; result.Messages.Add("CommitTax Failed"); ApplyMessagesToResult(result, ctres.Messages); } else { result.Success = true; } return(result); }
public static CommitTaxResult Execute(bool inProduction, string strOCN, out string summary) { summary = ""; TaxServiceWrapper taxSvcWrapper = new TaxServiceWrapper(); TaxSvc taxSvc = taxSvcWrapper.GetTaxSvcInstance(inProduction); CommitTaxRequest commitTaxRequest = new CommitTaxRequest(); // Required Parameters commitTaxRequest.DocCode = strOCN; commitTaxRequest.DocType = DocumentType.SalesInvoice; commitTaxRequest.CompanyCode = Properties.Settings.Default.CompanyCode; // Optional Parameters //commitTaxRequest.NewDocCode = "INV001"; CommitTaxResult commitTaxResult = taxSvc.CommitTax(commitTaxRequest); if (!commitTaxResult.ResultCode.Equals(SeverityLevel.Success)) { foreach (Message message in commitTaxResult.Messages) { summary = message.Summary; } } return(commitTaxResult); }
public CommitTaxResult CommitTax(CommitTaxRequest request) { _logger.Info("StubTaxProvider - CommitTax"); return(new CommitTaxResult() { IsSuccess = true }); }
public CommitTaxResult CommitTax(CommitTaxRequest request) { var json = JsonConvert.SerializeObject(request); _logger.Info($"CommitTax - {json}"); var provider = ExternalReportingProvider(); return(provider.CommitTax(request)); }
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 void buttonCommitTax_Click(object sender, EventArgs e) { try { //############################################################################## //### 1st WE CREATE THE REQUEST OBJECT FOR DOCUMENT THAT SHOULD BE COMMITTED ### //############################################################################## CommitTaxRequest commitTaxRequest = new CommitTaxRequest(); //########################################################### //### 2nd WE LOAD THE REQUEST-LEVEL DATA INTO THE REQUEST ### //########################################################### commitTaxRequest.CompanyCode = textCompanyCode.Text; commitTaxRequest.DocType = (DocumentType)comboDocType.SelectedItem; commitTaxRequest.DocCode = textDocCode.Text; commitTaxRequest.NewDocCode = textNewDocCode.Text; //############################################################################################## //### 3rd WE INVOKE THE COMMITTAX() METHOD OF THE TAXSVC OBJECT AND GET BACK A RESULT OBJECT ### //############################################################################################## Util.PreMethodCall(this, lblStatus); TaxSvc taxSvc = new TaxSvc(); ((formMain)this.Owner).SetConfig(taxSvc); //set the Url and Security configuration _commitTaxResult = taxSvc.CommitTax(commitTaxRequest); Util.PostMethodCall(this, lblStatus); //##################################### //### 4th WE READ THE RESULT OBJECT ### //##################################### lblResultCode.Text = _commitTaxResult.ResultCode.ToString(); Util.SetMessageLabelText(lblResultMsg, _commitTaxResult); commitTaxRequest = null; taxSvc = null; } catch (Exception ex) { Util.ShowError(ex); } finally { Util.PostMethodCall(this, lblStatus); } }
public static void Test() { string accountNumber = ConfigurationManager.AppSettings["AvaTax:AccountNumber"]; string licenseKey = ConfigurationManager.AppSettings["AvaTax:LicenseKey"]; string serviceURL = ConfigurationManager.AppSettings["AvaTax:ServiceUrl"]; TaxSvc taxSvc = new TaxSvc(); // Header Level Parameters // Required Header Parameters taxSvc.Configuration.Security.Account = accountNumber; taxSvc.Configuration.Security.License = licenseKey; taxSvc.Configuration.Url = serviceURL; taxSvc.Configuration.ViaUrl = serviceURL; taxSvc.Profile.Client = "AvaTaxSample"; // Optional Header Parameters taxSvc.Profile.Name = "Development"; CommitTaxRequest commitTaxRequest = new CommitTaxRequest(); // Required Parameters commitTaxRequest.DocCode = "INV001-1"; commitTaxRequest.DocType = DocumentType.SalesInvoice; commitTaxRequest.CompanyCode = "APITrialCompany"; // Optional Parameters commitTaxRequest.NewDocCode = "INV001"; CommitTaxResult commitTaxResult = taxSvc.CommitTax(commitTaxRequest); Console.WriteLine("CommitTaxTest Result: " + commitTaxResult.ResultCode.ToString()); if (!commitTaxResult.ResultCode.Equals(SeverityLevel.Success)) { foreach (Message message in commitTaxResult.Messages) { Console.WriteLine(message.Summary); } } }
public CommitTaxResult CommitTax(CommitTaxRequest request) { if (!IsActive) { return(new CommitTaxResult() { IsSuccess = false, Messages = new[] { Messages.ServiceIsNotActive } }); } else { if (WriteTrace) { PXTrace.WriteInformation("CommitTax Request: " + JsonConvert.SerializeObject(request, Formatting.Indented)); } return(new CommitTaxResult() { IsSuccess = true, Messages = new string[0] }); } }
public virtual CommitTaxRequest BuildCommitTaxRequestWithFrt(ARInvoice invoice) { if (invoice == null) { throw new PXArgumentException(nameof(invoice), ErrorMessages.ArgumentNullException); } Customer cust = (Customer)Base.customer.View.SelectSingleBound(new object[] { invoice }); CR.Location loc = (CR.Location)Base.location.View.SelectSingleBound(new object[] { invoice }); CommitTaxRequest request = new CommitTaxRequest(); request.CompanyCode = Base1.CompanyCodeFromBranch(invoice.TaxZoneID, invoice.BranchID); request.CurrencyCode = invoice.CuryID; request.CustomerCode = cust.AcctCD; request.TaxRegistrationID = loc?.TaxRegistrationID; IAddressBase fromAddress = Base1.GetFromAddress(invoice); IAddressBase toAddress = Base1.GetToAddress(invoice); if (fromAddress == null) { throw new PXException(Messages.FailedGetFrom); } if (toAddress == null) { throw new PXException(Messages.FailedGetTo); } request.OriginAddress = AddressConverter.ConvertTaxAddress(fromAddress); request.DestinationAddress = AddressConverter.ConvertTaxAddress(toAddress); request.DocCode = $"AR.{invoice.DocType}.{invoice.RefNbr}"; request.DocDate = invoice.DocDate.GetValueOrDefault(); request.LocationCode = GetExternalTaxProviderLocationCode <ARTran, ARTran.FK.Invoice.SameAsCurrent, ARTran.siteID>(invoice); request.CustomerUsageType = invoice.AvalaraCustomerUsageType; if (!string.IsNullOrEmpty(invoice.ExternalTaxExemptionNumber)) { request.ExemptionNo = invoice.ExternalTaxExemptionNumber; } request.DocType = Base1.GetTaxDocumentType(invoice); Sign sign = Base1.GetDocumentSign(invoice); PXSelectBase <ARTran> select = new PXSelectJoin <ARTran, LeftJoin <InventoryItem, On <InventoryItem.inventoryID, Equal <ARTran.inventoryID> >, LeftJoin <Account, On <Account.accountID, Equal <ARTran.accountID> > > >, Where <ARTran.tranType, Equal <Current <ARInvoice.docType> >, And <ARTran.refNbr, Equal <Current <ARInvoice.refNbr> >, And <Where <ARTran.lineType, NotEqual <SOLineType.discount>, Or <ARTran.lineType, IsNull> > > > >, OrderBy <Asc <ARTran.tranType, Asc <ARTran.refNbr, Asc <ARTran.lineNbr> > > > >(Base); request.Discount = Base.Document.Current.CuryDiscTot.GetValueOrDefault(); DateTime?taxDate = invoice.OrigDocDate; bool applyRetainage = Base.ARSetup.Current?.RetainTaxes != true && invoice.IsOriginalRetainageDocument(); /// <summary> /// Add the following condition and logic per Jira [IP-23] /// </summary>> string taxCategory = (Base as SOInvoiceEntry).FreightDetails.Current?.TaxCategoryID; if (invoice.CuryFreightTot > 0 && GL.Branch.PK.Find(Base, Base.Accessinfo.BranchID).CountryID == Country_US && invoice.TaxZoneID == TaxCloud && !string.IsNullOrEmpty(taxCategory)) { var line = new TaxCartItem(); line.Index = short.MinValue; line.Quantity = 1; line.UOM = "EA"; line.Amount = sign * invoice.CuryFreightTot.GetValueOrDefault(); line.Description = PXMessages.LocalizeNoPrefix(SO.Messages.FreightDesc); line.DestinationAddress = request.DestinationAddress; line.OriginAddress = request.OriginAddress; line.ItemCode = "N/A"; line.Discounted = false; line.TaxCode = taxCategory; request.CartItems.Add(line); } foreach (PXResult <ARTran, InventoryItem, Account> res in select.View.SelectMultiBound(new object[] { invoice })) { ARTran tran = (ARTran)res; InventoryItem item = (InventoryItem)res; Account salesAccount = (Account)res; var line = new TaxCartItem(); line.Index = tran.LineNbr ?? 0; line.Amount = sign * (tran.CuryTranAmt.GetValueOrDefault() + (applyRetainage ? tran.CuryRetainageAmt.GetValueOrDefault() : 0m)); line.Description = tran.TranDesc; line.DestinationAddress = AddressConverter.ConvertTaxAddress(Base1.GetToAddress(invoice, tran)); line.OriginAddress = AddressConverter.ConvertTaxAddress(Base1.GetFromAddress(invoice, tran)); line.ItemCode = item.InventoryCD; line.Quantity = Math.Abs(tran.Qty.GetValueOrDefault()); line.UOM = tran.UOM; line.Discounted = tran.LineType != SOLineType.Freight && request.Discount > 0; line.RevAcct = salesAccount.AccountCD; line.TaxCode = tran.TaxCategoryID; line.CustomerUsageType = tran.AvalaraCustomerUsageType; if (tran.OrigInvoiceDate != null) { taxDate = tran.OrigInvoiceDate; } request.CartItems.Add(line); } if (applyRetainage) { var line = new TaxCartItem(); line.Index = invoice.LineCntr.GetValueOrDefault() + 1; line.Amount = Sign.Minus * sign * invoice.CuryLineRetainageTotal.GetValueOrDefault(); line.Description = PXMessages.LocalizeFormatNoPrefix(AP.Messages.RetainageForTransactionDescription, GetLabel.For <ARDocType>(invoice.DocType), invoice.RefNbr); line.DestinationAddress = request.DestinationAddress; line.OriginAddress = request.OriginAddress; line.ItemCode = "Retainage"; line.Discounted = false; line.NonTaxable = true; request.CartItems.Add(line); } if ((invoice.DocType == ARDocType.CreditMemo || invoice.DocType == ARDocType.CashReturn) && invoice.OrigDocDate != null) { request.TaxOverride.Reason = Messages.ReturnReason; request.TaxOverride.TaxDate = taxDate.Value; request.TaxOverride.TaxOverrideType = TaxOverrideType.TaxDate; sign = Sign.Minus; } return(request); }
public void Post(Document doc) { TXAvalaraSetup avalaraSetup = PXSelect <TXAvalaraSetup> .Select(this); if (avalaraSetup == null) { throw new PXException(Messages.AvalaraSetupNotConfigured); } CommitTaxRequest request = new CommitTaxRequest(); request.CompanyCode = AvalaraMaint.CompanyCodeFromBranch(this, doc.BranchID); request.DocCode = string.Format("{0}.{1}.{2}", doc.Module, doc.DocType, doc.RefNbr); if (doc.Module == "AP") { if (doc.DocType == AP.APDocType.Refund) { request.DocType = DocumentType.ReturnInvoice; } else { request.DocType = DocumentType.PurchaseInvoice; } } else if (doc.Module == "AR") { if (doc.DocType == AR.ARDocType.CreditMemo) { request.DocType = DocumentType.ReturnInvoice; } else { request.DocType = DocumentType.SalesInvoice; } } else if (doc.Module == "CA") { if (doc.DrCr == CA.CADrCr.CADebit) { request.DocType = DocumentType.SalesInvoice; } else { request.DocType = DocumentType.PurchaseInvoice; } } else { throw new PXException(PXMessages.LocalizeFormatNoPrefixNLA(Messages.InvalidModule, doc.Module)); } CommitTaxResult result = service.CommitTax(request); bool setPosted = false; if (result.ResultCode == SeverityLevel.Success) { setPosted = true; } else { //Avalara retuned an error - The given document is already marked as posted on the avalara side. //Just fix the discrepency by setting the IsTaxPosted=1 in the acumatica document. Do not return this as an error to the user. if (result.ResultCode == SeverityLevel.Error && result.Messages.Count == 1 && result.Messages[0].Details == "Expected Posted") { setPosted = true; } } if (setPosted) { if (doc.Module == "AP") { PXDatabase.Update <AP.APRegister>( new PXDataFieldAssign("IsTaxPosted", true), new PXDataFieldRestrict("DocType", PXDbType.Char, 3, doc.DocType, PXComp.EQ), new PXDataFieldRestrict("RefNbr", PXDbType.NVarChar, 15, doc.RefNbr, PXComp.EQ) ); } else if (doc.Module == "AR") { PXDatabase.Update <AR.ARRegister>( new PXDataFieldAssign("IsTaxPosted", true), new PXDataFieldRestrict("DocType", PXDbType.Char, 3, doc.DocType, PXComp.EQ), new PXDataFieldRestrict("RefNbr", PXDbType.NVarChar, 15, doc.RefNbr, PXComp.EQ) ); } else if (doc.Module == "CA") { PXDatabase.Update <CA.CAAdj>( new PXDataFieldAssign("IsTaxPosted", true), new PXDataFieldRestrict("AdjRefNbr", PXDbType.NVarChar, 15, doc.RefNbr, PXComp.EQ) ); } } else { StringBuilder sb = new StringBuilder(); foreach (Avalara.AvaTax.Adapter.Message msg in result.Messages) { sb.AppendLine(msg.Name + ": " + msg.Details); } throw new PXException(sb.ToString()); } }
public void Post(Document doc) { if (!TaxPluginMaint.IsActive(this, doc.TaxZoneID)) { throw new PXException(Messages.ExternalTaxProviderNotConfigured); } var service = TaxProviderFactory(this, doc.TaxZoneID); var request = new CommitTaxRequest(); request.CompanyCode = ExternalTax.CompanyCodeFromBranch(this, doc.TaxZoneID, doc.BranchID); request.DocCode = string.Format("{0}.{1}.{2}", doc.Module, doc.DocType, doc.RefNbr); request.DocType = GetTaxDocumentType(doc); CommitTaxResult result = service.CommitTax(request); bool setPosted = false; if (result.IsSuccess) { setPosted = true; } else { //Avalara retuned an error - The given document is already marked as posted on the avalara side. //Just fix the discrepency by setting the IsTaxPosted=1 in the acumatica document. Do not return this as an error to the user. if (!result.IsSuccess && result.Messages.Any(t => t.Contains("Expected Posted"))) { setPosted = true; } } if (setPosted) { if (doc.Module == BatchModule.AP) { PXDatabase.Update <AP.APRegister>( new PXDataFieldAssign("IsTaxPosted", true), new PXDataFieldRestrict("DocType", PXDbType.Char, 3, doc.DocType, PXComp.EQ), new PXDataFieldRestrict("RefNbr", PXDbType.NVarChar, 15, doc.RefNbr, PXComp.EQ) ); } else if (doc.Module == BatchModule.AR) { PXDatabase.Update <AR.ARRegister>( new PXDataFieldAssign("IsTaxPosted", true), new PXDataFieldRestrict("DocType", PXDbType.Char, 3, doc.DocType, PXComp.EQ), new PXDataFieldRestrict("RefNbr", PXDbType.NVarChar, 15, doc.RefNbr, PXComp.EQ) ); } else if (doc.Module == BatchModule.CA) { PXDatabase.Update <CA.CAAdj>( new PXDataFieldAssign("IsTaxPosted", true), new PXDataFieldRestrict("AdjRefNbr", PXDbType.NVarChar, 15, doc.RefNbr, PXComp.EQ) ); } } else { StringBuilder sb = new StringBuilder(); foreach (var msg in result.Messages) { sb.AppendLine(msg); } throw new PXException(sb.ToString()); } }