【问题标题】:Not able to set SalesItemLineDetail tax code in Intuit quickbooks api C#无法在 Intuit quickbooks api C# 中设置 SalesItemLineDetail 税码
【发布时间】:2020-02-18 10:18:16
【问题描述】:

我正在尝试在 Invoice of Quickbooks online api 中为 SalesItemLineDetail 添加税码,但在 Online Quickbooks 中检查时未正确设置税码。

这是我用来创建订单项的 C# 代码

                            Line = new Intuit.Ipp.Data.Line();
                            InvoiceLine = new Intuit.Ipp.Data.SalesItemLineDetail();


                            InvoiceLine.ItemRef = new Intuit.Ipp.Data.ReferenceType
                            {
                                Value = GetItem.Id, // this is inventory Item Id
                                name = GetItem.Name // inventory item name
                            };





                            Line.DetailTypeSpecified = true;
                            Line.DetailType = Intuit.Ipp.Data.LineDetailTypeEnum.SalesItemLineDetail;
                            Line.Description = inv.Description;

                            Line.Amount = (inv.Price == null || inv.Price == 0.0) ? (decimal)0.00 : (decimal)inv.Price;
                            Line.AmountSpecified = true;



                            InvoiceLine.Qty = decimal.Parse(inv.Quantity.Value.ToString());
                            InvoiceLine.QtySpecified = true;

                            InvoiceLine.AnyIntuitObject = (inv.Price == null || inv.Price == 0.0) ? (decimal)0.00 : (decimal)(Math.Round(inv.Price.Value, 2) / inv.Quantity.Value);
                            InvoiceLine.ItemElementName = Intuit.Ipp.Data.ItemChoiceType.UnitPrice;




                            // this line is not settings tax code properly
                            InvoiceLine.TaxCodeRef = new Intuit.Ipp.Data.ReferenceType
                            {
                                name = taxName,
                                Value = TaxId

                            };


                            //Line Sales Item Line Detail - ServiceDate 
                            InvoiceLine.ServiceDate = DateTime.Now.Date;
                            InvoiceLine.ServiceDateSpecified = true;

                            //Assign Sales Item Line Detail to Line Item

                            Line.AnyIntuitObject = InvoiceLine;


                            lines.Add(Line);

                    Intuit.Ipp.Data.Invoice invoice = new Intuit.Ipp.Data.Invoice();

                   // SalesOrder is a database table object, and OrderNumber is auto generated number

                    invoice.DocNumber = SalesOrder.OrderNumber.ToString();

                    //TxnDate
                    invoice.TxnDate = DateTime.Now.Date;
                    invoice.TxnDateSpecified = true;


                    invoice.CustomerRef = new Intuit.Ipp.Data.ReferenceType
                    {
                        Value =  CompanyId
                    };

                    //convert list to array for Intuit Line
                    invoice.Line = lines.ToArray();

                    //TxnTaxDetail
                    Intuit.Ipp.Data.Line taxLine = new Intuit.Ipp.Data.Line();
                    Intuit.Ipp.Data.TxnTaxDetail txnTaxDetail = new Intuit.Ipp.Data.TxnTaxDetail();
                    Intuit.Ipp.Data.TaxLineDetail taxLineDetail = new Intuit.Ipp.Data.TaxLineDetail(); ;
                    //txnTaxDetail.TotalTaxSpecified = true;
                    //txnTaxDetail.TotalTax = decimal.Parse("2");
                    var MainTaxValue = "";
                    txnTaxDetail.TxnTaxCodeRef = new Intuit.Ipp.Data.ReferenceType()
                    {

                        Value = TaxId,
                        name = SalesOrder.TaxCode.TaxCodeName
                    };
                    foreach (var TAXName in TaxObject.TaxRateDetail)
                    {
                        if(TAXName.TaxRateRef.name.Contains(SalesOrder.TaxCode.TaxCodeName))
                        {
                            MainTaxValue = TAXName.TaxRateRef.value;
                        }
                    }
                    taxLineDetail.TaxRateRef = new Intuit.Ipp.Data.ReferenceType
                    {
                        Value = MainTaxValue

                    };
                    taxLine.AnyIntuitObject = taxLineDetail;
                    txnTaxDetail.TaxLine = new Intuit.Ipp.Data.Line[] { taxLine };


                    //DueDate
                    invoice.DueDate = SalesOrder.InvoiceDueDate != null ? SalesOrder.InvoiceDueDate.Value : DateTime.Now.AddDays(30).Date;
                    invoice.DueDateSpecified = true;

                    invoice.TxnTaxDetail = txnTaxDetail;

我已经尝试了这些参考链接,但它不适合我

https://gist.github.com/IntuitDeveloperRelations/6500373

How to export Line items with Tax Code and Value in QBO Canada

https://developer.intuit.com/app/developer/qbo/docs/develop/tutorials/manage-sales-tax-for-non-us-locales

使用上面的链接,我可以看到我们可以使用这行代码为每个发票行项目创建税码参考,但它没有正确设置值。

                           InvoiceLine.TaxCodeRef = new Intuit.Ipp.Data.ReferenceType
                            {
                                name = taxName,
                                Value = TaxId

                            };

但它不起作用。 注意:这是非美国公司,所以我必须为每个发票行指定税码参考。

编辑 1: 附上邮递员 API 请求的图像,我将其发送到 Quickbooks 以创建发票。

【问题讨论】:

    标签: c# quickbooks quickbooks-online intuit


    【解决方案1】:

    尝试删除我认为可能不需要的名称字段

    InvoiceLine.TaxCodeRef = new Intuit.Ipp.Data.ReferenceType()
                            {
    
                                Value = TaxId
    
                            };
    

    【讨论】:

    【解决方案2】:

    我们版本之间的主要区别是我让 QB 计算税收。 我注释掉了 Tax detail 行,并告诉 QB 不包括税额。

                //    //TxnTaxDetail
                //    TxnTaxDetail txnTaxDetail = new TxnTaxDetail();
                //    Line taxLine = new Line();
                //    taxLine.DetailType = LineDetailTypeEnum.TaxLineDetail;
                //    TaxLineDetail taxLineDetail = new TaxLineDetail();
                //    taxLineDetail.TaxRateRef = stateTaxCode.SalesTaxRateList.TaxRateDetail[0].TaxRateRef;
                //    txnTaxDetail.TxnTaxCodeRef = new ReferenceType
                //    {
                //        name = stateTaxCode.Name,
                //        Value = stateTaxCode.Id
                //    };
                //    if (customer.DefaultTaxCodeRef != null)
                //    {
                //        txnTaxDetail.TxnTaxCodeRef = customer.DefaultTaxCodeRef;
                //        taxLineDetail.TaxRateRef = customer.DefaultTaxCodeRef;
                //    }
    
                //    //Assigning the first Tax Rate in this Tax Code
    
                //    taxLine.AnyIntuitObject = taxLineDetail;
                //    txnTaxDetail.TaxLine = new[] { taxLine };
                //    invoice.TxnTaxDetail = txnTaxDetail;
    
    
                invoice.GlobalTaxCalculationSpecified = true;
                invoice.GlobalTaxCalculation = GlobalTaxCalculationEnum.TaxExcluded;
    

    这是我的代码,它确实有效。不过,我看不出两者之间的区别。这会计算欧洲的增值税并输入税法。 希望这会有所帮助。

                var invlines = new List<Line>();
                foreach (var lineitem in inv.Lines)
                {
                    //Line
                    Line invoiceLine = new Line();
                    //Line Description
                    invoiceLine.Description = (((lineitem.PublicationName == "N/A" || lineitem.PublicationName == "-") ? "" : lineitem.PublicationName) + " " + lineitem.Description).Trim();
    
                    //Line Detail Type
                    invoiceLine.DetailType = LineDetailTypeEnum.SalesItemLineDetail;
                    invoiceLine.DetailTypeSpecified = true;
                    //Line Sales Item Line Detail
                    SalesItemLineDetail lineSalesItemLineDetail = new SalesItemLineDetail();
                    //Line Sales Item Line Detail - ItemRef
                    if (!string.IsNullOrEmpty(lineitem.ItemCode))
                    {
                        lineSalesItemLineDetail.ItemRef = new ReferenceType()
                        {
                            Value = lineitem.ItemCode
                        };
                    }
                    else if (item != null)
                    {
                        lineSalesItemLineDetail.ItemRef = new ReferenceType
                        {
                            name = item.Name,
                            Value = item.Id
                        };
                    }
    
                    //Line Sales Item Line Detail - UnitPrice
    
                    //Line Sales Item Line Detail - Qty
                    lineSalesItemLineDetail.Qty = 1;
                    lineSalesItemLineDetail.QtySpecified = true;
                    if (inv.DiscountPercent > 0)
                    {
                        invoiceLine.Amount = (decimal)lineitem.PriceBeforeDiscount;
                        invoiceLine.AmountSpecified = true;
                        lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
                    }
                    else
                    {
                        invoiceLine.Amount = (decimal)lineitem.Price;
                        invoiceLine.AmountSpecified = true;
                        lineSalesItemLineDetail.AnyIntuitObject = lineitem.Price;
                        lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
                    }
                    //Line Sales Item Line Detail - TaxCodeRef
                    //For US companies, this can be 'TAX' or 'NON'
                    var taxref = lineitem.TaxAmount == null || lineitem.TaxAmount == 0 ? nonvatid.ToString() : vatid.ToString();
                    if (country == "US")
                    {
                        taxref = lineitem.TaxAmount == null || lineitem.TaxAmount == 0 ? "NON" : "TAX";
                    }
                    lineSalesItemLineDetail.TaxCodeRef = new ReferenceType
                    {
                        Value = taxref
                    };
    
                    //Line Sales Item Line Detail - ServiceDate 
                    lineSalesItemLineDetail.ServiceDate = DateTimeService.Now.Date;
                    lineSalesItemLineDetail.ServiceDateSpecified = true;
                    //Assign Sales Item Line Detail to Line Item
                    invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
                    //Assign Line Item to Invoice
                    invlines.Add(invoiceLine);
                }
                if (inv.DiscountPercent > 0)
                {
                    Line invoiceLine = new Line();
                    DiscountLineDetail discLine = new DiscountLineDetail();
                    discLine.PercentBased = true;
                    discLine.DiscountPercent = (decimal)inv.DiscountPercent;
                    discLine.DiscountPercentSpecified = true;
                    discLine.PercentBased = true;
                    discLine.PercentBasedSpecified = true;
                    invoiceLine.DetailType = LineDetailTypeEnum.DiscountLineDetail;
                    invoiceLine.DetailTypeSpecified = true;
                    invoiceLine.AnyIntuitObject = discLine;
                    invlines.Add(invoiceLine);
                    invoice.DiscountRate = (decimal) (inv.DiscountPercent);
                    invoice.DiscountRateSpecified = true;
                }
                invoice.Line = invlines.ToArray();
    

    【讨论】:

    • 您能否添加您的完整代码以创建发票、使用 qb api 服务和获取税码等,因为我无法理解我的代码哪里出错了。
    • 谢谢,我找到了解决办法,请检查我的答案。
    【解决方案3】:

    终于找到了正确的解决方案。

    我上面的代码是对的,没有问题,@sheavens 的代码也是对的

    实际的问题是,我将“默认税码”分配给选定的公司,在发票行项目中传递税码参考时我们无法覆盖它。 p>

    要检查公司是否有任何默认代码,请导航到 quickbooks 在线网站中的公司列表,从列表中选择您想要的公司,单击“编辑”,然后在“税务信息”选项卡中,取消选中“分配默认税”代码”以使用发票行项目传递税码。

    希望这可以帮助其他有同样问题的开发人员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多