C# Quickbooks在线会计-如何在发票中添加多个行项目?
使用下面的代码,我想创建多个行项目以显示在新发票中 如何在发票中创建多个行项目,对应于自定义应用程序中的多个订单项目? 使用OrderItems(订单中有4个项目)运行以下代码时,发票中仅显示一个项目。价格和名称正确,但产品数量不正确。只有一个出现了 我相信这一行是添加行项目的正确行。但它实际上添加了行项目吗 invoice.Line=新行[]{invoiceLine} 代码C# Quickbooks在线会计-如何在发票中添加多个行项目?,c#,quickbooks-online,C#,Quickbooks Online,使用下面的代码,我想创建多个行项目以显示在新发票中 如何在发票中创建多个行项目,对应于自定义应用程序中的多个订单项目? 使用OrderItems(订单中有4个项目)运行以下代码时,发票中仅显示一个项目。价格和名称正确,但产品数量不正确。只有一个出现了 我相信这一行是添加行项目的正确行。但它实际上添加了行项目吗 invoice.Line=新行[]{invoiceLine} 代码 var orderItems = order.OrderItems; foreach (var orderItem i
var orderItems = order.OrderItems;
foreach (var orderItem in orderItems)
{
//Line
Line invoiceLine = new Line();
//Line Description
invoiceLine.Description = itemRepository.Get(i=>i.ItemID == orderItem.ItemID).First().FullDescription;
//Line Amount
invoiceLine.Amount = orderItem.Price * orderItem.Quantity;
invoiceLine.AmountSpecified = true;
//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
lineSalesItemLineDetail.ItemRef = new ReferenceType()
{
name = itemRepository.Get(
i=>i.ItemID == orderItem.ItemID).First().FullDescription,
Value = item.Id
};
//Line Sales Item Line Detail - UnitPrice
lineSalesItemLineDetail.AnyIntuitObject = orderItem.Price;//33m;
lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
//Line Sales Item Line Detail - Qty
lineSalesItemLineDetail.Qty = orderItem.Quantity;//10;
lineSalesItemLineDetail.QtySpecified = true;
//Line Sales Item Line Detail - TaxCodeRef
//For US companies, this can be 'TAX' or 'NON
lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
{
Value = "TAX"
};
//Line Sales Item Line Detail - ServiceDate
lineSalesItemLineDetail.ServiceDate = DateTime.Now.Date;
lineSalesItemLineDetail.ServiceDateSpecified = true;
//Assign Sales Item Line Detail to Line Item
invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
//Assign Line Item to Invoice
invoice.Line = new Line[] { invoiceLine };
}
编辑:
OAuthRequestValidator reqValidator=新的OAuthRequestValidator(accessToken、accessTokenSecret、consumerKey、consumerKeySecret);
ServiceContext QBOCONTEXTAUTH=新的ServiceContext(realmId、IntuitServicesType.QBO、reqValidator);
var服务=新的数据服务(QBOCONTEXTAUTH);
//寻找客户
var customerQueryService=新的QueryService(QBOCONTEXTAUTH);
Customer Customer=customerQueryService.ExecuteIsQuery(“从客户中选择*,其中DisplayName='John Doe'开始位置1 MaxResults 1”)。FirstOrDefault();
//查找发票的税务代码-在此示例中搜索名为“StateSalesTax”的税务代码
var stateTaxCodeQueryService=新的QueryService(QBOCONTEXTAUTH);
TaxCode stateTaxCode=stateTaxCodeQueryService.ExecuteIsQuery(“从TaxCode中选择*,其中Name='Los Angeles'StartPosition 1 MaxResults 1”)。FirstOrDefault();
//查找项目
var itemQueryService=新的QueryService(QBOCONTEXTAUTH);
Item Item=itemQueryService.ExecuteIsQuery(“从Item StartPosition 1中选择*).FirstOrDefault();
//查找应收账款-所需的应收账款
var accountQueryService=新的QueryService(QBOCONTEXTAUTH);
Account Account=accountQueryService.ExecuteDiscovery(“从Account中选择*,其中AccountType='Accounts Accounts'开始位置1 MaxResults 1”)。FirstOrDefault();
//查找术语
var termQueryService=新的QueryService(QBOCONTExtExtoauth);
Term Term=termQueryService.ExecuteIdsQuery(“从Term StartPosition 1 MaxResults 1中选择*).FirstOrDefault();
发票=新发票();
//DocNumber-仅限QBO,否则使用DocNumber
invoice.AutoDocNumber=true;
invoice.AutoDocNumberSpecified=true;
//TxnDate
invoice.TxnDate=DateTime.Now.Date;
invoice.txndaspecified=true;
//私人票据
invoice.PrivateNote=“这是一张私人票据”;
var orderItems=order.orderItems;
int-idx=0;
变量行=新列表();
foreach(orderItems中的变量orderItem)
{
//线
行invoiceLine=新行();
//行描述
invoiceLine.Description=itemRepository.Get(i=>i.ItemID==orderItem.ItemID).First().FullDescription;
//行数
invoiceLine.Amount=orderItem.Price*orderItem.Quantity;
invoiceLine.AmountSpecified=true;
//线条细节类型
invoiceLine.DetailType=LineDetailTypeEnum.SalesItemLineDetail;
invoiceLine.DetailTypeSpecified=true;
//行销售项目行详细信息
SalesItemLineDetail lineSalesItemLineDetail=新的SalesItemLineDetail();
//行销售项目行详细信息-ItemRef
lineSalesItemLineDetail.ItemRef=新引用类型()
{
name=itemRepository.Get(i=>i.ItemID==orderItem.ItemID).First().FullDescription,
Value=(idx+1).ToString()
};
//行销售项目行详细信息-单价
lineSalesItemLineDetail.AnyIntuitObject=orderItem.Price;//33m;
lineSalesItemLineDetail.ItemElementName=ItemChoiceType.UnitPrice;
//行销售项目行明细-数量
lineSalesItemLineDetail.Qty=orderItem.Quantity;//10;
lineSalesItemLineDetail.QtySpecified=true;
//行销售项目行详细信息-TaxCodeRef
//对于美国公司来说,这可以是“税”或“非税”
lineSalesItemLineDetail.TaxCodeRef=新引用类型()
{
Value=“TAX”
};
//行销售项目行详细信息-服务日期
lineSalesItemLineDetail.ServiceDate=DateTime.Now.Date;
lineSalesItemLineDetail.ServiceDateSpecified=true;
//将销售项目行详细信息分配给行项目
invoiceLine.AnyIntuitObject=lineSalesItemLineDetail;
//将行项目分配给发票
//invoice.Line=新行[]{invoiceLine};
行。添加(发票行);
//TxnTaxDetail
TxnTaxDetail TxnTaxDetail=新的TxnTaxDetail();
txnTaxDetail.TxnTaxCodeRef=新引用类型()
{
name=stateTaskCode.name,
Value=stateTaxCode.Id
};
行taxLine=新行();
taxLine.DetailType=LineDetailTypeEnum.TaxLineDetail;
TaxLineDetail TaxLineDetail=新的TaxLineDetail();
//分配此税码中的第一个税率
taxLineDetail.TaxRateRef=州TaxCode.SalesTaxRateList.TaxRateDetail[0]。TaxRateRef;
taxLine.AnyIntuitObject=taxLineDetail;
txnTaxDetail.TaxLine=新行[]{TaxLine};
invoice.TxnTaxDetail=TxnTaxDetail;
idx++;
}
//顾客(
OAuthRequestValidator reqValidator = new OAuthRequestValidator(accessToken, accessTokenSecret, consumerKey, consumerKeySecret);
ServiceContext qboContextoAuth = new ServiceContext(realmId, IntuitServicesType.QBO, reqValidator);
var service = new DataService(qboContextoAuth);
//Find Customer
var customerQueryService = new QueryService<Customer>(qboContextoAuth);
Customer customer = customerQueryService.ExecuteIdsQuery("Select * From Customer Where DisplayName = 'John Doe' StartPosition 1 MaxResults 1").FirstOrDefault();
//Find Tax Code for Invoice - Searching for a tax code named 'StateSalesTax' in this example
var stateTaxCodeQueryService = new QueryService<TaxCode>(qboContextoAuth);
TaxCode stateTaxCode = stateTaxCodeQueryService.ExecuteIdsQuery("Select * From TaxCode Where Name='Los Angeles' StartPosition 1 MaxResults 1").FirstOrDefault();
//Find Item
var itemQueryService = new QueryService<Item>(qboContextoAuth);
Item item = itemQueryService.ExecuteIdsQuery("Select * From Item StartPosition 1").FirstOrDefault();
//Find Account - Accounts Receivable account required
var accountQueryService = new QueryService<Account>(qboContextoAuth);
Account account = accountQueryService.ExecuteIdsQuery("Select * From Account Where AccountType='Accounts Receivable' StartPosition 1 MaxResults 1").FirstOrDefault();
//Find Term
var termQueryService = new QueryService<Term>(qboContextoAuth);
Term term = termQueryService.ExecuteIdsQuery("Select * From Term StartPosition 1 MaxResults 1").FirstOrDefault();
Invoice invoice = new Invoice();
//DocNumber - QBO Only, otherwise use DocNumber
invoice.AutoDocNumber = true;
invoice.AutoDocNumberSpecified = true;
//TxnDate
invoice.TxnDate = DateTime.Now.Date;
invoice.TxnDateSpecified = true;
//PrivateNote
invoice.PrivateNote = "This is a private note";
var orderItems = order.OrderItems;
int idx = 0;
var lines = new List<Line>();
foreach (var orderItem in orderItems)
{
//Line
Line invoiceLine = new Line();
//Line Description
invoiceLine.Description = itemRepository.Get(i => i.ItemID == orderItem.ItemID).First().FullDescription;
//Line Amount
invoiceLine.Amount = orderItem.Price * orderItem.Quantity;
invoiceLine.AmountSpecified = true;
//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
lineSalesItemLineDetail.ItemRef = new ReferenceType()
{
name = itemRepository.Get(i => i.ItemID == orderItem.ItemID).First().FullDescription,
Value = (idx + 1).ToString()
};
//Line Sales Item Line Detail - UnitPrice
lineSalesItemLineDetail.AnyIntuitObject = orderItem.Price;//33m;
lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
//Line Sales Item Line Detail - Qty
lineSalesItemLineDetail.Qty = orderItem.Quantity;//10;
lineSalesItemLineDetail.QtySpecified = true;
//Line Sales Item Line Detail - TaxCodeRef
//For US companies, this can be 'TAX' or 'NON
lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
{
Value = "TAX"
};
//Line Sales Item Line Detail - ServiceDate
lineSalesItemLineDetail.ServiceDate = DateTime.Now.Date;
lineSalesItemLineDetail.ServiceDateSpecified = true;
//Assign Sales Item Line Detail to Line Item
invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
//Assign Line Item to Invoice
//invoice.Line = new Line[] { invoiceLine };
lines.Add(invoiceLine);
//TxnTaxDetail
TxnTaxDetail txnTaxDetail = new TxnTaxDetail();
txnTaxDetail.TxnTaxCodeRef = new ReferenceType()
{
name = stateTaxCode.Name,
Value = stateTaxCode.Id
};
Line taxLine = new Line();
taxLine.DetailType = LineDetailTypeEnum.TaxLineDetail;
TaxLineDetail taxLineDetail = new TaxLineDetail();
//Assigning the fist Tax Rate in this Tax Code
taxLineDetail.TaxRateRef = stateTaxCode.SalesTaxRateList.TaxRateDetail[0].TaxRateRef;
taxLine.AnyIntuitObject = taxLineDetail;
txnTaxDetail.TaxLine = new Line[] { taxLine };
invoice.TxnTaxDetail = txnTaxDetail;
idx++;
}
//Customer (Client)
invoice.CustomerRef = new ReferenceType()
{
name = customer.DisplayName,
Value = customer.Id
};
var _user = userRepository.Get(u => u.UserID == order.CreatedUserID, includeProperties: "ContactMethod, ContactMethod.Addresses, Location, Location.Organization").FirstOrDefault();
if (_user != null)
{
var addresses = _user.ContactMethod.Addresses.Where(a => a.StatusCode == Convert.ToByte(StatusCodes.Active) && a.IsPrimary).ToList();
var _billingAddress = addresses.Where(a => a.AddressTypeId == Convert.ToByte(AddressTypes.Billing)).FirstOrDefault();
var _shippingAddress = addresses.Where(a => a.AddressTypeId == Convert.ToByte(AddressTypes.Shipping)).FirstOrDefault();
//Billing Address
PhysicalAddress billAddr = new PhysicalAddress();
billAddr.Line1 = _billingAddress.Address1;
billAddr.Line2 = _billingAddress.Address2;
billAddr.City = _billingAddress.City;
billAddr.CountrySubDivisionCode = _billingAddress.State;
billAddr.Country = _billingAddress.Country;
billAddr.PostalCode = _billingAddress.ZipCode;
billAddr.Note = "Billing Address Note";
invoice.BillAddr = billAddr;
//Shipping Address
PhysicalAddress shipAddr = new PhysicalAddress();
shipAddr.Line1 = _shippingAddress.Address1;
shipAddr.City = _shippingAddress.City;
shipAddr.CountrySubDivisionCode = _shippingAddress.City;
shipAddr.Country = _shippingAddress.Country;
shipAddr.PostalCode = _shippingAddress.ZipCode;
shipAddr.Note = "Shipping Address Note";
invoice.ShipAddr = shipAddr;
}
invoice.Line = lines.ToArray();
//SalesTermRef
invoice.SalesTermRef = new ReferenceType()
{
name = term.Name,
Value = term.Id
};
//DueDate
invoice.DueDate = DateTime.Now.AddDays(30).Date;
invoice.DueDateSpecified = true;
//ARAccountRef
invoice.ARAccountRef = new ReferenceType()
{
name = account.Name,
Value = account.Id
};
Invoice invoiceAdded = service.Add(invoice);
return invoiceAdded;
invoice.Line = new Line[] { invoiceLine };
var orderItems = order.OrderItems;
var lines = new List<Line>();
foreach (var orderItem in orderItems) {
//Line
Line invoiceLine = new Line();
//...code removed for brevity
lines.Add(invoiceLine);
}
//Assign Line Items to Invoice
invoice.Line = lines.ToArray();
var orderItems = order.OrderItems;
var lineCount = orderItems.Count();
//Creating Line array before
invoice.Line = new Line[lineCount];
for (int index = 0; index < lineCount; index++) {
//Order item
var orderItem = orderItems[index];
//Line
Line invoiceLine = new Line();
//...code removed for brevity
//Assign Line Item to Invoice
invoice.Line[index] = invoiceLine;
}
var itemRef = itemRepository.Get(i => i.ItemID == orderItem.ItemID).FirstOrDefault();
if (itemRef != null) {
//Line Sales Item Line Detail - ItemRef
lineSalesItemLineDetail.ItemRef = new ReferenceType() {
Name = itemRef.FullDescription,
Value = itemRef.ItemID
};
}