1

I am able to create invoice on quickbook online, but when i check quickbook invoice online, it create the item lists but the price and description is missing. What i am doing wrong.

          invoice.AlternateId = new NameValue[] { new NameValue() { Name = "InvoiceID", Value = service.InvoiceId } };

                InvoiceHeader Header = new InvoiceHeader();
                Header.DocNumber = service.InvoiceId;
                Header.TxnDate = service.ServiceDate;
                Header.TxnDateSpecified = true;
                Header.Msg = service.Note.ToString();
                Header.Note = service.Note.ToString();

                Header.CustomerId = new IdType() { idDomain = idDomainEnum.QBO, Value = service.CustomerNumberOnline };
                Header.Currency = currencyCode.USD;
                Header.ShipDate = service.ServiceDate;
                Header.ShipDateSpecified = true;


                //Print and Email Option fields
                if (EmailPrintOption == "Both")
                {
                    Header.ToBeEmailed = true;
                    Header.ToBeEmailedSpecified = true;
                    Header.ToBePrinted = true;
                    Header.ToBePrintedSpecified = true;
                }
                else if (EmailPrintOption == "print")
                {
                    Header.ToBePrinted = true;
                    Header.ToBePrintedSpecified = true;
                }
                else if (EmailPrintOption == "email")
                {
                    Header.ToBeEmailed = true;
                    Header.ToBeEmailedSpecified = true;
                }
                else
                {
                    Header.ToBeEmailed = false;
                    Header.ToBeEmailedSpecified = false;
                    Header.ToBePrinted = false;
                    Header.ToBePrintedSpecified = false;

                }

                PhysicalAddress BillAddress = new PhysicalAddress();
                BillAddress.Line1 = service.SoldToAddress;
                BillAddress.City = service.SoldToCity;
                BillAddress.CountrySubDivisionCode = service.SoldToState;
                BillAddress.PostalCode = service.SoldToZip;
                BillAddress.Tag = new string[] { "Billing" };
                Header.BillAddr = BillAddress;

                PhysicalAddress ShipAddress = new PhysicalAddress();
                ShipAddress.Line1 = service.JobJocationAddress;
                ShipAddress.City = service.JobLocationCity;
                ShipAddress.CountrySubDivisionCode = service.JobLocationState;
                ShipAddress.PostalCode = service.JobLocationZip;
                BillAddress.Tag = new string[] { "Shipping" };
                Header.ShipAddr = ShipAddress;

                decimal discount;
                if (decimal.TryParse(service.Discount, out discount))
                {
                    Header.ItemElementName = ItemChoiceType2.DiscountAmt;
                    Header.Item = -1 * discount;  //discount must be negative
                }

                InvoiceLine[] InvoiceLines = new InvoiceLine[TaskOnlineIDs.Count];
                object[] intuitItems = new object[TaskOnlineIDs.Count];
                for (int i = 0; i < InvoiceLines.Length; i++)
                {
                    InvoiceLines[i] = new InvoiceLine();
                    InvoiceLines[i].ItemsElementName = new Intuit.Ipp.Data.Qbo.ItemsChoiceType2[]
                            {
                                Intuit.Ipp.Data.Qbo.ItemsChoiceType2.ItemId
                            };
                    InvoiceLines[i].Items = new object[] {
                        new IdType(){idDomain=idDomainEnum.QBO, Value=TaskOnlineIDs[i]}   
                    };
                }
                invoice.Line = InvoiceLines; 

                Header.SalesTermName = service.PaymentType;
                Header.SalesRepName = service.TechName;
                Header.PONumber = service.PurchaseOrder;
                invoice.Header = Header;

What i miss here ?? Here what happen is, when i add invoice lines to invoice it set amount of each item to "0" by default, so when i try to add discount pragmatically it give's me error of discount greater than subtotal which is correct. But my question is why do i need to add cost for each item explicitly when i have already defined them earlier. We should add only itemId and rest QB should calculate.

A.T.
  • 24,694
  • 8
  • 47
  • 65
  • very badly designed API – A.T. Oct 11 '13 at 12:44
  • You might want to look at : http://stackoverflow.com/questions/19098798/intuit-partner-platform-cant-add-an-invoice-because-item-id-is-unknown http://stackoverflow.com/questions/19289571/how-to-insert-multiple-items-in-quickbook-invoice – nimisha shrivastava Oct 11 '13 at 18:04
  • You reference an existing item in an invoice. You cannot create an item in an invoice – nimisha shrivastava Oct 11 '13 at 18:06
  • yes i don't want to create new item in invoice, i have already synced item up there, kindly suggest me how i can refer those synced item while creating invoice? i think when i pass online item id, it should refer to that already saved item and should display its description and price. – A.T. Oct 14 '13 at 04:34

0 Answers0