Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 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));
        }
Exemplo n.º 5
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 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);
                }
            }
        }
Exemplo n.º 8
0
 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]
         });
     }
 }
Exemplo n.º 9
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());
                }
            }
Exemplo n.º 11
0
            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());
                }
            }