0

I have been making an app for a friend, but recently got stuck. For some reason, when I try to test "itemSubtotalAddRq" I get the following error:

Request[3]: ItemSubtotalAddRq ItemSubtotalAdd Name: required fiels is missing End of ItemSubtotalAdd

Im not sure what it is, but I know its one of the ItemSubtotalAddRq lines, or im using iItemSubtotalAdd wrong.

        public void SalesInfoAdd(IMsgSetRequest requestMsgSet)
    {

        ISalesReceiptAdd salesReceiptAddRq = requestMsgSet.AppendSalesReceiptAddRq();
        //IItemSubtotalAdd itemSubtotalAddRq = requestMsgSet.AppendItemSubtotalAddRq();
        salesReceiptAddNew = new List<ISalesReceiptLineAdd>();

        salesReceiptAddRq.CustomerRef.FullName.SetValue(Form.phoneNumber.Text);
        salesReceiptAddRq.IsPending.SetValue(true);
        salesReceiptAddRq.IsTaxIncluded.SetValue(false);
        salesReceiptAddRq.FOB.SetValue(Form.orderID.Text);

        salesReceiptAddNew.Clear();
        int cnt = 0;
        //while (i < Form.productID.Count)
        for (int j = 0; j < Form.productID.Count; j++)
        {
            salesReceiptAddNew.Add(salesReceiptAddRq.ORSalesReceiptLineAddList.Append().SalesReceiptLineAdd);

            salesReceiptAddNew[j].ItemRef.FullName.SetValue(Form.productID[j].ToString());
            salesReceiptAddNew[j].ORRatePriceLevel.Rate.SetValue(Convert.ToDouble(Form.pricesList.Items[j]));
            salesReceiptAddNew[j].Quantity.SetValue(Form.QBqt[j]);
            salesReceiptAddNew[j].Desc.SetValue(Form.productsList.Items[j].ToString().ToUpper() + " -" + " " +
                                            Form.QBsku[j].ToString().ToUpper());
            cnt = j;
        }

        if (Form.DiscountType.Text != "None" || Form.DiscountType.Text != " ")
        {
            if (Form.productID.Count >= 2)
            {
                cnt++;
                salesReceiptAddNew.Add(salesReceiptAddRq.ORSalesReceiptLineAddList.Append().SalesReceiptLineAdd);
                salesReceiptAddNew[cnt].ItemRef.FullName.SetValue("SUBTOTAL");
                salesReceiptAddNew[cnt].ORRatePriceLevel.Rate.SetValue(Form.totalOfAllItems);
                //itemSubtotalAddRq.Name.SetValue("SUBTOTAL");
                //itemSubtotalAddRq.IsActive.SetValue(true);
            }
            else
                itemSubtotalAddRq.IsActive.SetValue(false);

            cnt++;
            salesReceiptAddNew.Add(salesReceiptAddRq.ORSalesReceiptLineAddList.Append().SalesReceiptLineAdd);
            salesReceiptAddNew[cnt].ItemRef.FullName.SetValue(Form.DiscountType.Text);
        }

        if(Form.freeShipping.Checked == false)
        {
            cnt++;
            salesReceiptAddNew.Add(salesReceiptAddRq.ORSalesReceiptLineAddList.Append().SalesReceiptLineAdd);
            salesReceiptAddNew[cnt].ItemRef.FullName.SetValue("SHIPPING");
            salesReceiptAddNew[cnt].ORRatePriceLevel.Rate.SetValue(Convert.ToDouble(Form.shipping.Text));
        }

        IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);

    }

this is the only solution i could think of, and it still doesn't work. any thoughts?

William Lorfing
  • 2,656
  • 10
  • 7
Alex Moreno
  • 138
  • 1
  • 13

1 Answers1

-1

I think you are referring to 'ItemType' which is under 'Line' tag

Ref - https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0500_quickbooks_windows/0600_object_reference/salesreceipt

XML

<Add RequestId="ca435123492c41b891f7841cf4d0e81d" xmlns="http://www.intuit.com/sb/cdm/v2">
    <OfferingId>ipp</OfferingId>
    <ExternalRealmId>65123456</ExternalRealmId>
    <SalesReceipt>
        <Header>
            ---
        </Header>
        <Line>
            <Id idDomain="QB">66</Id>
            <Desc>Description</Desc>
            <ItemId idDomain="QB">4</ItemId>
            <ItemName>Dusting</ItemName>
            <ItemType>Subtotal</ItemType>
            <UnitPrice>1231</UnitPrice>
        </Line>
    </SalesReceipt>
</Add>

Using Java, I had coded like this. I think, there should be some similar enums/classes in .Net too. Can you take a look at the .Net docs

Link - http://developer-static.intuit.com/SDKDocs/QBV2Doc/IntuitDataServicesSDK/

Instead of 'SUBTOTAL', you should use 'Subtotal'. In the service background, allowed values are [Assembly, Fixed Asset, Group, Inventory, Other Charge, Payment, Product, Service, Subtotal].

You can try this use case in the ApiExplorer.

Link - https://developer.intuit.com/apiexplorer?apiname=V2QBD#SalesReceipt

Java Code

QBSalesReceipt entityPojo = QBObjectFactory.getQBObject(context, QBSalesReceipt.class);

SalesReceiptLine receiptLine = QBObjectFactory.getQBObject(context, SalesReceiptLine.class);
receiptLine.setItemType(ItemTypeEnum.SUBTOTAL);

ArrayList receiptLines = new ArrayList();
receiptLines.add(receiptLine);
entityPojo.setLine(receiptLines);

QBSalesReceiptService service = QBServiceFactory.getService(context, QBSalesReceiptService.class);
service.addSalesReceipt(context, entityPojo);

Plz let me know how it goes.

Thanks

Manas Mukherjee
  • 5,270
  • 3
  • 18
  • 30
  • Alright, ill take a look at it. I just got home, ill let you know if this solves my problem. thanks for the response :D – Alex Moreno Jul 28 '13 at 02:30
  • Yeah, it wasn't much help, but I think it did take me to the right direction. sorry it took a bit to respond. Going to try a couple new things. – Alex Moreno Jul 28 '13 at 04:29