Example #1
0
        private void WalkInvoiceAddRs(IMsgSetResponse responseMsgSet)
        {
            if (responseMsgSet == null)
            {
                return;
            }
            IResponseList responseList = responseMsgSet.ResponseList;

            if (responseList == null)
            {
                return;
            }
            for (int i = 0; i < responseList.Count; i++)
            {
                IResponse response = responseList.GetAt(i);
                if (response.StatusCode >= 0)
                {
                    if (response.Detail != null)
                    {
                        ENResponseType responseType = (ENResponseType)response.Type.GetValue();
                        if (responseType == ENResponseType.rtInvoiceAddRs)
                        {
                            IInvoiceRet invoiceRet = (IInvoiceRet)response.Detail;
                            WalkInvoiceRet(invoiceRet);
                        }
                    }
                }
            }
            Console.WriteLine(responseMsgSet.ToXMLString());
        }
Example #2
0
 string WalkInvoiceRet(IInvoiceRet InvoiceRet)
 {
     if (InvoiceRet == null)
     {
         return(null);
     }
     return(InvoiceRet.TxnID.GetValue().ToString());
 }
Example #3
0
        private void executeQuery(Invoice invoice)
        {
            if (qBSession.executeQuery())
            {
                invoiceRet = (IInvoiceRet)qBSession.getResponse();
            }

            invoice.TxnDate      = invoiceRet.TxnDate.GetValue();
            invoice.QBId         = invoiceRet.TxnID.GetValue();
            invoice.EditSequence = invoiceRet.EditSequence.GetValue();
        }
Example #4
0
        private void WalkInvoiceRet(IInvoiceRet invoiceRet)
        {
            if (invoiceRet == null)
            {
                return;
            }
            string txtId         = invoiceRet.TxnID.GetValue();
            var    txtNumber     = invoiceRet.TxnNumber?.GetValue();
            var    invoiceNumber = invoiceRet.RefNumber?.GetValue();

            Console.WriteLine($"{invoiceNumber}\t{txtId}\t{txtNumber}");
        }
        public void Execute(params object[] args)
        {
            m_application.Messenger.AddInfo("Executing import from QuickBooks.");

            int countOrdersAdded     = 0;
            QBSessionManager session = null;

            try
            {
                // Start session with QuickBooks
                session = new QBSessionManager();

                session.OpenConnection("123", "ArcLogistics PlugIn: QuickBooksPlugIns.ImportOrdersFromInvoicesCmd");
                session.BeginSession("", ENOpenMode.omDontCare);

                IInvoiceRetList invoiceList  = QueryInvoices(session);
                int             invoiceCount = invoiceList.Count;

                for (int i = 0; i < invoiceCount; i++)
                {
                    IInvoiceRet invoiceRet = invoiceList.GetAt(i);

                    ESRI.ArcLogistics.DomainObjects.Order newOrder = MakeOrderFromInvoice(invoiceRet, session);

                    m_application.Project.Orders.Add(newOrder);

                    countOrdersAdded++;
                }
            }

            catch (Exception e)
            {
                m_application.Messenger.AddError("Error executing QuickBooksPlugIns.ImportOrdersFromInvoicesCmd: " + e.Message);
            }

            finally
            {
                // Close connection because we don't need it anymore
                if (session != null)
                {
                    session.EndSession();
                    session.CloseConnection();
                }

                m_application.Project.Save();

                m_application.Messenger.AddInfo(countOrdersAdded.ToString() + " orders added.");
            }
        }
Example #6
0
        string WalkInvoiceAddRs(IMsgSetResponse responseMsgSet)
        {
            if (responseMsgSet == null)
            {
                return(null);
            }

            IResponseList responseList = responseMsgSet.ResponseList;

            if (responseList == null)
            {
                return(null);
            }

            //if we sent only one request, there is only one response, we'll walk the list for this sample
            for (int i = 0; i < responseList.Count; i++)
            {
                IResponse response = responseList.GetAt(i);
                //check the status code of the response, 0=ok, >0 is warning
                if (response.StatusCode == 0)
                {
                    //the request-specific response is in the details, make sure we have some
                    if (response.Detail != null)
                    {
                        //make sure the response is the type we're expecting
                        ENResponseType responseType = (ENResponseType)response.Type.GetValue();
                        if (responseType == ENResponseType.rtInvoiceAddRs)
                        {
                            //upcast to more specific type here, this is safe because we checked with response.Type check above
                            IInvoiceRet InvoiceRet = (IInvoiceRet)response.Detail;
                            return(WalkInvoiceRet(InvoiceRet));
                        }
                    }
                }
                else
                {
                    throw new QBException(response.StatusCode, response.StatusMessage, requestMsgSet.ToXMLString());
                }
            }
            return(null);
        }
Example #7
0
        Invoice WalkInvoiceSearchRet(IInvoiceRet InvoiceRet)
        {
            Invoice invoice = new Invoice();

            if (InvoiceRet == null)
            {
                return(null);
            }
            invoice.TxnID        = InvoiceRet.TxnID.GetValue().ToString();
            invoice.TimeCreated  = (DateTime)InvoiceRet.TimeCreated.GetValue();
            invoice.TimeModified = (DateTime)InvoiceRet.TimeModified.GetValue();
            invoice.EditSequence = (string)InvoiceRet.EditSequence.GetValue();
            if (InvoiceRet.RefNumber != null)
            {
                invoice.ID = InvoiceRet.RefNumber.GetValue();
            }
            if (InvoiceRet.TxnNumber != null)
            {
                invoice.TxnNumber = InvoiceRet.TxnNumber.GetValue().ToString();
            }
            //Get value of FullName
            if (InvoiceRet.CustomerRef.FullName != null)
            {
                invoice.CustomerName = (string)InvoiceRet.CustomerRef.FullName.GetValue();
            }
            if (InvoiceRet.ClassRef != null)
            {
                //Get value of FullName
                if (InvoiceRet.ClassRef.FullName != null)
                {
                    invoice.ClassRef = (string)InvoiceRet.ClassRef.FullName.GetValue();
                }
            }
            //Discount Items
            if (InvoiceRet.DiscountLineRet != null)
            {
                if (InvoiceRet.DiscountLineRet.AccountRef != null)
                {
                    invoice.DiscountAccountRef = InvoiceRet.DiscountLineRet.AccountRef.FullName.GetValue();
                }
            }



            #region attributes

            if (InvoiceRet.BillAddress != null)
            {
                ///Get value of Addr1
                if (InvoiceRet.BillAddress.Addr1 != null)
                {
                    invoice.BillAddress1 = (string)InvoiceRet.BillAddress.Addr1.GetValue();
                }
                ////Get value of Addr2

                ////Get value of City
                if (InvoiceRet.BillAddress.City != null)
                {
                    invoice.City = (string)InvoiceRet.BillAddress.City.GetValue();
                }
                ////Get value of State
                if (InvoiceRet.BillAddress.State != null)
                {
                    invoice.State = (string)InvoiceRet.BillAddress.State.GetValue();
                }
                ////Get value of PostalCode
                if (InvoiceRet.BillAddress.PostalCode != null)
                {
                    invoice.PostalCode = (string)InvoiceRet.BillAddress.PostalCode.GetValue();
                }
                ////Get value of Country
                if (InvoiceRet.BillAddress.Country != null)
                {
                    invoice.Country = (string)InvoiceRet.BillAddress.Country.GetValue();
                }
                ////Get value of Note
            }

            invoice.Amount = InvoiceRet.BalanceRemaining.GetValue().ToString();

            if (InvoiceRet.ShipAddress != null)
            {
                ////Get value of Addr1
                if (InvoiceRet.ShipAddress.Addr1 != null)
                {
                    invoice.ShipAddress = (string)InvoiceRet.ShipAddress.Addr1.GetValue();
                }

                ////Get value of City
                if (InvoiceRet.ShipAddress.City != null)
                {
                    invoice.Ship_City = (string)InvoiceRet.ShipAddress.City.GetValue();
                }
                ////Get value of State
                if (InvoiceRet.ShipAddress.State != null)
                {
                    invoice.Ship_State = (string)InvoiceRet.ShipAddress.State.GetValue();
                }
                ////Get value of PostalCode
                if (InvoiceRet.ShipAddress.PostalCode != null)
                {
                    invoice.Ship_PostalCode = (string)InvoiceRet.ShipAddress.PostalCode.GetValue();
                }
                ////Get value of Country
                if (InvoiceRet.ShipAddress.Country != null)
                {
                    invoice.Ship_Country = (string)InvoiceRet.ShipAddress.Country.GetValue();
                }
            }


            ////Get value of DueDate
            if (InvoiceRet.DueDate != null)
            {
                invoice.DueDate = (DateTime)InvoiceRet.DueDate.GetValue();
            }

            //if (InvoiceRet.FOB != null)
            // {
            //= (string)InvoiceRet.FOB.GetValue();

            //}
            ////Get value of ShipDate
            if (InvoiceRet.ShipDate != null)
            {
                invoice.ShipDate = (DateTime)InvoiceRet.ShipDate.GetValue();
            }

            ////Get value of Memo
            if (InvoiceRet.Memo != null)
            {
                invoice.Memo = (string)InvoiceRet.Memo.GetValue();
            }
            ////Get value of IsPaid
            if (InvoiceRet.IsPaid != null)
            {
                //{
                invoice.IsPaid = (bool)InvoiceRet.IsPaid.GetValue();
            }

            //}


            ////Get value of Amount
            //double Amount88 = (double)LinkedTxn.Amount.GetValue();

            //}

            //}
            if (InvoiceRet.ORInvoiceLineRetList != null)
            {
                invoice.lineitem = new List <InvoiceLineItem>();
            }

            //{
            for (int i = 0; i < InvoiceRet.ORInvoiceLineRetList.Count; i++)
            {
                IORInvoiceLineRet ORInvoiceLineRet = InvoiceRet.ORInvoiceLineRetList.GetAt(i);
                InvoiceLineItem   item             = new InvoiceLineItem();
                if (ORInvoiceLineRet.InvoiceLineRet != null)
                {
                    ////Get value of TxnLineID
                    item.TxnLineID = (string)ORInvoiceLineRet.InvoiceLineRet.TxnLineID.GetValue();
                    if (ORInvoiceLineRet.InvoiceLineRet.ItemRef != null)
                    {
                        if (ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName != null)
                        {
                            item.Item = (string)ORInvoiceLineRet.InvoiceLineRet.ItemRef.FullName.GetValue();
                        }
                    }
                    ////Get value of Desc
                    if (ORInvoiceLineRet.InvoiceLineRet.Desc != null)
                    {
                        item.Desc = (string)ORInvoiceLineRet.InvoiceLineRet.Desc.GetValue();
                    }
                    ////Get value of Quantity
                    if (ORInvoiceLineRet.InvoiceLineRet.Quantity != null)
                    {
                        item.Quantity = (int)ORInvoiceLineRet.InvoiceLineRet.Quantity.GetValue();
                    }

                    //}
                    if (ORInvoiceLineRet.InvoiceLineRet.ClassRef != null)
                    {
                        ////Get value of FullName
                        if (ORInvoiceLineRet.InvoiceLineRet.ClassRef.FullName != null)
                        {
                            //{
                            item.ClassRef = (string)ORInvoiceLineRet.InvoiceLineRet.ClassRef.FullName.GetValue();
                        }
                    }

                    //}
                    ////Get value of Amount
                    if (ORInvoiceLineRet.InvoiceLineRet.Amount != null)
                    {
                        item.Amount = (double)ORInvoiceLineRet.InvoiceLineRet.Amount.GetValue();
                    }

                    invoice.AddItem(item);
                }
            }
            #endregion

            return(invoice);
        }
        private ESRI.ArcLogistics.DomainObjects.Order MakeOrderFromInvoice(IInvoiceRet invoiceRet, QBSessionManager session)
        {
            ESRI.ArcLogistics.DomainObjects.Order resultOrder = null;

            ICustomerRet customerRet = QueryCustomer(session, invoiceRet.CustomerRef.FullName.GetValue());

            CapacitiesInfo            capInfo  = m_application.Project.CapacitiesInfo;
            OrderCustomPropertiesInfo propInfo = m_application.Project.OrderCustomPropertiesInfo;

            resultOrder = new ESRI.ArcLogistics.DomainObjects.Order(capInfo, propInfo);

            resultOrder.PlannedDate = m_application.CurrentDate;
            if (customerRet.ParentRef != null)
            {
                resultOrder.Name = customerRet.ParentRef.FullName.GetValue();
            }
            else
            {
                resultOrder.Name = customerRet.FullName.GetValue();
            }

            IAddress useAddress = null;

            if (customerRet.ShipAddress != null)
            {
                useAddress = customerRet.ShipAddress;
            }
            else if (customerRet.BillAddress != null)
            {
                useAddress = customerRet.BillAddress;
            }
            else
            {
                m_application.Messenger.AddWarning("No address for: " + resultOrder.Name);
            }

            if (useAddress != null)
            {
                if (useAddress.Addr2 != null)
                {
                    resultOrder.Address.AddressLine = useAddress.Addr2.GetValue();
                }
                else
                {
                    resultOrder.Address.AddressLine = useAddress.Addr1.GetValue();
                }

                resultOrder.Address.Locality3     = useAddress.City.GetValue();
                resultOrder.Address.StateProvince = useAddress.State.GetValue();
                resultOrder.Address.PostalCode1   = useAddress.PostalCode.GetValue();

                AddressCandidate candidate = m_application.Geocoder.Geocode(resultOrder.Address);

                resultOrder.GeoLocation = candidate.GeoLocation;
            }

            // Look in the order custom properties for matching invoice detail items (by item description).
            // Look in the order capacities for matching item type custom fields.

            OrderCustomPropertiesInfo orderPropertiesInfo = resultOrder.CustomPropertiesInfo;
            OrderCustomProperties     orderProperties     = resultOrder.CustomProperties;

            CapacitiesInfo orderCapacitiesInfo = resultOrder.CapacitiesInfo;
            Capacities     orderCapacities     = resultOrder.Capacities;

            // Retrieve invoice line list
            // Each line can be either InvoiceLineRet OR InvoiceLineGroupRet

            IORInvoiceLineRetList orInvoiceLineRetList = invoiceRet.ORInvoiceLineRetList;

            if (orInvoiceLineRetList != null && (orderProperties.Count > 0 || orderCapacities.Count > 0))
            {
                int lineCount = orInvoiceLineRetList.Count;
                for (int i = 0; i < lineCount; i++)
                {
                    IORInvoiceLineRet orInvoiceLineRet = orInvoiceLineRetList.GetAt(i);

                    // Check what to retrieve from the orInvoiceLineRet object
                    // based on the "ortype" property.  Skip summary lines.

                    if (orInvoiceLineRet.ortype != ENORInvoiceLineRet.orilrInvoiceLineRet)
                    {
                        continue;
                    }

                    if (orInvoiceLineRet.InvoiceLineRet.ItemRef.FullName != null)
                    {
                        string itemName     = orInvoiceLineRet.InvoiceLineRet.ItemRef.FullName.GetValue();
                        double itemQuantity = 0;
                        if (orInvoiceLineRet.InvoiceLineRet.ItemRef != null)
                        {
                            itemQuantity = System.Convert.ToDouble(orInvoiceLineRet.InvoiceLineRet.Quantity.GetValue());
                        }

                        // look for matching custom order property

                        OrderCustomProperty orderPropertyInfoItem = null;
                        for (int j = 0; j < orderPropertiesInfo.Count; j++)
                        {
                            orderPropertyInfoItem = orderPropertiesInfo.ElementAt(j) as OrderCustomProperty;
                            if (orderPropertyInfoItem.Name == itemName)
                            {
                                if (orderPropertyInfoItem.Type == OrderCustomPropertyType.Numeric)
                                {
                                    orderProperties[j] = itemQuantity;
                                }
                                else
                                {
                                    orderProperties[j] = itemQuantity.ToString();
                                }

                                break;
                            }
                        }

                        // look for matching capacity

                        // need to lookup item record so we get the extra field(s)
                        // TODO: It might be a good idea to cache these locally to avoid
                        // excess QB queries.

                        IORItemRet      orItemRet             = QueryItem(session, itemName);
                        IDataExtRetList custItemFieldsRetList = null;

                        switch (orItemRet.ortype)
                        {
                        case ENORItemRet.orirItemServiceRet:
                        {
                            // orir prefix comes from OR + Item + Ret
                            IItemServiceRet ItemServiceRet = orItemRet.ItemServiceRet;
                            custItemFieldsRetList = ItemServiceRet.DataExtRetList;
                        }
                        break;

                        case ENORItemRet.orirItemInventoryRet:
                        {
                            IItemInventoryRet ItemInventoryRet = orItemRet.ItemInventoryRet;
                            custItemFieldsRetList = ItemInventoryRet.DataExtRetList;
                        }
                        break;

                        case ENORItemRet.orirItemNonInventoryRet:
                        {
                            IItemNonInventoryRet ItemNonInventoryRet = orItemRet.ItemNonInventoryRet;
                            custItemFieldsRetList = ItemNonInventoryRet.DataExtRetList;
                        }
                        break;
                        }

                        int custItemFieldCount = 0;
                        if (custItemFieldsRetList != null)
                        {
                            custItemFieldCount = custItemFieldsRetList.Count;
                        }

                        for (int j = 0; j < custItemFieldCount; j++)
                        {
                            IDataExtRet custItemField     = custItemFieldsRetList.GetAt(j);
                            string      custItemFieldName = custItemField.DataExtName.GetValue();

                            CapacityInfo orderCapacityInfoItem = null;
                            for (int k = 0; k < orderCapacitiesInfo.Count; k++)
                            {
                                orderCapacityInfoItem = orderCapacitiesInfo.ElementAt(k);
                                if (orderCapacityInfoItem.Name == custItemFieldName)
                                {
                                    orderCapacities[k] += System.Convert.ToDouble(custItemField.DataExtValue.GetValue()) * itemQuantity;

                                    break;
                                }
                            }
                        }
                    }
                }
            }

            resultOrder.CustomProperties = orderProperties;
            resultOrder.Capacities       = orderCapacities;

            return(resultOrder);
        }
Example #9
0
        public static void DoQbXml()
        {
            bool             sessionBegun   = false;
            bool             connectionOpen = false;
            QBSessionManager sessionManager = null;

            sessionManager = new QBSessionManager();

            //Connect to QuickBooks and begin a session
            sessionManager.OpenConnection("", "GenerateInvoicePDFs");
            connectionOpen = true;
            sessionManager.BeginSession("", ENOpenMode.omDontCare);
            sessionBegun = true;

            //Create the message set request object to hold our request
            IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 13, 0);

            requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

            IInvoiceQuery invoiceQueryRq = requestMsgSet.AppendInvoiceQueryRq();

            invoiceQueryRq.IncludeLineItems.SetValue(true);

            //Send the request and get the response from QuickBooks
            IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);
            IResponse       response       = responseMsgSet.ResponseList.GetAt(0);
            IInvoiceRetList invoiceRetList = (IInvoiceRetList)response.Detail;

            var invoices = new List <Invoice>();

            if (invoiceRetList != null)
            {
                for (int i = 0; i < invoiceRetList.Count; i++)
                {
                    IInvoiceRet invoiceRet = invoiceRetList.GetAt(i);

                    var invoice = new Invoice
                    {
                        QuickBooksID  = invoiceRet.TxnID.GetValue(),
                        EditSequence  = invoiceRet.EditSequence.GetValue(),
                        InvoiceNumber = invoiceRet.RefNumber?.GetValue(),
                        Memo          = invoiceRet.Memo?.GetValue(),
                        JobNumber     = invoiceRet.Other?.GetValue()
                    };
                    Console.WriteLine($"INv:{invoice.InvoiceNumber}, EditSequence: {invoice.JobNumber}");
                    requestMsgSet.ClearRequests();
                    ICustomerQuery customerQueryRq = requestMsgSet.AppendCustomerQueryRq();
                    customerQueryRq.ORCustomerListQuery.ListIDList.Add(invoiceRet.CustomerRef.ListID.GetValue());

                    //Send the request and get the response from QuickBooks
                    responseMsgSet = sessionManager.DoRequests(requestMsgSet);
                    response       = responseMsgSet.ResponseList.GetAt(0);
                    ICustomerRetList customerRetList = (ICustomerRetList)response.Detail;
                    ICustomerRet     customerRet     = customerRetList.GetAt(0);
                    if (i > 200)
                    {
                        return;
                    }
                    invoice.Customer = new Customer
                    {
                        Name         = customerRet.Name.GetValue(),
                        QuickBooksID = customerRet.ListID.GetValue(),
                        EditSequence = customerRet.EditSequence.GetValue()
                    };
                    if (invoiceRet.ORInvoiceLineRetList != null)
                    {
                        for (int j = 0; j < invoiceRet.ORInvoiceLineRetList.Count; j++)
                        {
                            IORInvoiceLineRet ORInvoiceLineRet = invoiceRet.ORInvoiceLineRetList.GetAt(j);

                            try
                            {
                                var invoiceItem = new InvoiceItem
                                {
                                    Amount       = ORInvoiceLineRet.InvoiceLineRet.Amount.GetValue(),
                                    QuickBooksID = ORInvoiceLineRet.InvoiceLineRet.TxnLineID.GetValue()
                                };


                                requestMsgSet.ClearRequests();
                                IItemQuery itemQueryRq = requestMsgSet.AppendItemQueryRq();
                                itemQueryRq.ORListQuery.ListIDList.Add(ORInvoiceLineRet.InvoiceLineRet.ItemRef.ListID.GetValue());

                                //Send the request and get the response from QuickBooks
                                responseMsgSet = sessionManager.DoRequests(requestMsgSet);
                                response       = responseMsgSet.ResponseList.GetAt(0);
                                IORItemRetList itemRetList = (IORItemRetList)response.Detail;
                                IORItemRet     itemRet     = itemRetList.GetAt(0);

                                if (itemRet.ItemInventoryRet != null)
                                {
                                    IItemInventoryRet itemInventoryRet = itemRet.ItemInventoryRet;

                                    var item = new Item
                                    {
                                        Name        = itemInventoryRet.Name.GetValue(),
                                        Description = itemInventoryRet.SalesDesc.GetValue(),
                                        Rate        = itemInventoryRet.SalesPrice.GetValue(),
                                        //ItemType = ItemType.Inventory,
                                        QuickBooksID = itemInventoryRet.ListID.GetValue(),
                                        EditSequence = itemInventoryRet.EditSequence.GetValue()
                                    };

                                    invoiceItem.Item = item;
                                }
                                else if (itemRet.ItemServiceRet != null)
                                {
                                    IItemServiceRet itemServiceRet = itemRet.ItemServiceRet;

                                    var item = new Item
                                    {
                                        Name        = itemServiceRet.Name.GetValue(),
                                        Description = itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc.GetValue(),
                                        Rate        = itemServiceRet.ORSalesPurchase.SalesOrPurchase.ORPrice.Price.GetValue(),
                                        //ItemType = ItemType.Service,
                                        QuickBooksID = itemServiceRet.ListID.GetValue(),
                                        EditSequence = itemServiceRet.EditSequence.GetValue()
                                    };

                                    invoiceItem.Item = item;
                                }

                                invoice.InvoiceItems.Add(invoiceItem);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(invoice.Customer.Name);
                                throw;
                            }
                        }
                    }

                    invoices.Add(invoice);
                }
            }
        }
Example #10
0
        void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            if (_invoices == null)
            {
                return;                    // Haven't parsed any invoices yet, or there was an error
            }
            sessionManager.BeginSession(COMPANY_FILE, ENOpenMode.omDontCare);
            _sessionBegun = true;
            _failed       = false;

            // Grab the list of unpaid invoices from the selected customer
            IMsgSetRequest messageSet   = sessionManager.CreateMsgSetRequest("CA", 12, 0);
            IInvoiceQuery  invoiceQuery = messageSet.AppendInvoiceQueryRq();

            invoiceQuery.ORInvoiceQuery.InvoiceFilter.PaidStatus.SetValue(ENPaidStatus.psNotPaidOnly);
            invoiceQuery.ORInvoiceQuery.InvoiceFilter.EntityFilter.OREntityFilter.FullNameList.Add(e.Argument.ToString());

            try
            {
                IMsgSetResponse responseSet = sessionManager.DoRequests(messageSet);

                IResponse      response;
                ENResponseType responseType;

                for (int i = 0; i < responseSet.ResponseList.Count; i++)
                {
                    response = responseSet.ResponseList.GetAt(i);

                    if (response.Detail == null)
                    {
                        continue;
                    }

                    responseType = (ENResponseType)response.Type.GetValue();
                    if (responseType == ENResponseType.rtInvoiceQueryRs)
                    {
                        IInvoiceRetList invoiceList = (IInvoiceRetList)response.Detail;

                        for (int invoiceIndex = 0; invoiceIndex < invoiceList.Count; invoiceIndex++)
                        {
                            IInvoiceRet invoice = (IInvoiceRet)invoiceList.GetAt(invoiceIndex);

                            if (invoice != null)
                            {
                                //unpaid_listbox.Items.Add(invoice.CustomerRef.FullName.GetValue() + " - " + invoice.RefNumber.GetValue() + " ( " + invoice.TxnID.GetValue() + " )");
                                _unpaidInvoices.Add(new Invoice(invoice.RefNumber.GetValue(), invoice.TxnID.GetValue()));
                                int index = _invoices.FindIndex(x => x.Probill == invoice.RefNumber.GetValue());

                                if (index >= 0)
                                {
                                    _invoices[index].TxnID = invoice.TxnID.GetValue();
                                    Trace.WriteLine("Applying TxnID " + invoice.TxnID.GetValue() + " to Invoice " + _invoices[index].Probill);
                                }
                            }
                        }
                    }
                }

                messageSet = sessionManager.CreateMsgSetRequest("CA", 12, 0);
                messageSet.Attributes.OnError = ENRqOnError.roeContinue;


                IReceivePaymentAdd payment = messageSet.AppendReceivePaymentAddRq();

                // Populate the request with all the details
                payment.CustomerRef.FullName.SetValue(e.Argument.ToString());
                payment.RefNumber.SetValue(_invoices.First().ChequeNumber);
                payment.PaymentMethodRef.FullName.SetValue("Cheque");
                IAppliedToTxnAdd txn;
                double           totalAmt = 0.0;
                int count = 0;

                foreach (Invoice i in _invoices)
                {
                    // Don't add payments that are negative (IE. back charges, etc)
                    if (i.Total < 0)
                    {
                        Trace.WriteLine(String.Format("Rejecting negative transaction {0} for ${1}", i.Probill, i.Total));
                        // Subtract it from our total
                        // TODO: add an expense?
                        //totalAmt -= i.Total;
                        continue;
                    }
                    if (i.Total == 0)
                    {
                        // Discard any empty entries
                        Trace.WriteLine("Rejecting empty entry");
                        continue;
                    }
                    if (i.TxnID == "")
                    {
                        // Discard any invalid entries (couldn't find an unpaid invoice that matches)
                        Trace.WriteLine("Rejecting entry with no TxnID");
                        continue;
                    }

                    txn = payment.ORApplyPayment.AppliedToTxnAddList.Append();
                    txn.PaymentAmount.SetValue(i.Total);
                    txn.TxnID.SetValue(i.TxnID);
                    totalAmt += i.Total;
                    count    += 1;
                    Trace.WriteLine("Adding Transaction of " + i.Total + " with TxnID " + i.TxnID + " ( " + count + " )");
                }

                Trace.WriteLine("Total amount received: " + totalAmt);
                // Round off the total to two decimal places, otherwise it will sometimes inexplicably fail
                totalAmt = Math.Round(totalAmt, 2);
                payment.TotalAmount.SetValue(totalAmt);
                // TODO: fix hardcoded version number
                payment.Memo.SetValue("Automatically generated by qbFixer 0.1 beta");
                //payment.TxnDate.SetValue(DateTime.Today);

                responseSet = sessionManager.DoRequests(messageSet);



                for (int i = 0; i < responseSet.ResponseList.Count; i++)
                {
                    response = responseSet.ResponseList.GetAt(i);

                    if (response.StatusCode > 0)
                    {
                        MessageBox.Show(response.StatusMessage);
                        return;
                    }
                }

                _bw.ReportProgress(100);
                _bw.CancelAsync();
            }
            catch (System.Runtime.InteropServices.COMException comEx)
            {
                MessageBox.Show(comEx.Message);
                _failed = true;
            }
            finally
            {
                sessionManager.EndSession();
                _sessionBegun = false;
            }
        }
Example #11
0
        public IList <Invoice> GetInvoiceDetail(DateTime fromDate, DateTime toDate)
        {
            bool             sessionBegun   = false;
            QBSessionManager sessionManager = null;
            var invoices = new List <Invoice>();

            sessionManager = new QBSessionManager();
            IMsgSetRequest requestMsgSet = null;


            try
            {
                //Connect to QuickBooks and begin a session
                sessionManager.OpenConnection("", "GenerateInvoiceSummary");
                //connectionOpen = true;
                sessionManager.BeginSession("", ENOpenMode.omDontCare);
                sessionBegun = true;

                //Create the message set request object to hold our request
                requestMsgSet = sessionManager.CreateMsgSetRequest("US", 13, 0);
                requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

                IInvoiceQuery invoiceQueryRq = requestMsgSet.AppendInvoiceQueryRq();
                // all invoices modified in the month of August 2016
                // get all invoices for the month of august 2016
                invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.TxnDateRangeFilter.ORTxnDateRangeFilter.TxnDateFilter.FromTxnDate.SetValue(fromDate);
                invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.TxnDateRangeFilter.ORTxnDateRangeFilter.TxnDateFilter.ToTxnDate.SetValue(toDate);

                // invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.FromModifiedDate.SetValue(new DateTime(2017, 12, 1), true);
                // invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.ToModifiedDate.SetValue(new DateTime(2017, 12, 31), true);
                invoiceQueryRq.IncludeLineItems.SetValue(true);


                //Send the request and get the response from QuickBooks
                IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);
                IResponse       response       = responseMsgSet.ResponseList.GetAt(0);
                IInvoiceRetList invoiceRetList = (IInvoiceRetList)response.Detail;
                Console.WriteLine($"Invoices found: {invoiceRetList.Count}");

                if (invoiceRetList != null)
                {
                    for (int i = 0; i < invoiceRetList.Count; i++)
                    {
                        IInvoiceRet invoiceRet = invoiceRetList.GetAt(i);

                        var invoice = new Invoice
                        {
                            QuickBooksID  = invoiceRet.TxnID.GetValue(),
                            EditSequence  = invoiceRet.EditSequence.GetValue(),
                            InvoiceNumber = invoiceRet.RefNumber?.GetValue(),
                            InvoiceDate   = invoiceRet.TimeCreated?.GetValue(),
                            Memo          = invoiceRet.Memo?.GetValue(),
                            JobNumber     = invoiceRet.Other?.GetValue(),
                            CustomerName  = invoiceRet.CustomerRef.FullName?.GetValue(),
                            Amount        = invoiceRet.BalanceRemaining?.GetValue()
                        };
                        if (invoice.Amount == 0)
                        {
                            invoice.Amount = invoiceRet.Subtotal?.GetValue();
                        }
                        var customerListId = invoiceRet.CustomerRef?.ListID?.GetValue();
                        if (customerListId != null)
                        {
                            //  Console.WriteLine($"{i}\tInv:{invoice.InvoiceNumber}, Job: {invoice.JobNumber}, Name:{invoice.CustomerName}");
                            requestMsgSet.ClearRequests();
                            ICustomerQuery customerQueryRq = requestMsgSet.AppendCustomerQueryRq();
                            customerQueryRq.ORCustomerListQuery.ListIDList.Add(customerListId);

                            //Send the request and get the response from QuickBooks
                            responseMsgSet = sessionManager.DoRequests(requestMsgSet);
                            response       = responseMsgSet.ResponseList.GetAt(0);

                            ICustomerRetList customerRetList = (ICustomerRetList)response.Detail;
                            ICustomerRet     customerRet     = customerRetList.GetAt(0);

                            invoice.Customer = new Customer
                            {
                                Name         = customerRet.Name?.GetValue(),
                                QuickBooksID = customerRet.ListID?.GetValue(),
                                EditSequence = customerRet.EditSequence?.GetValue(),
                                FullName     = customerRet.FullName?.GetValue(),
                                CompanyName  = customerRet.CompanyName?.GetValue(),
                            };
                            //  Console.WriteLine($"{i}\t{invoice.Customer.Name}\t{invoice.Customer.FullName}\t{invoice.Customer.CompanyName}");
                            // Console.WriteLine($"{i}\t\tInvoice detail starts");
                            if (invoiceRet.ORInvoiceLineRetList != null)
                            {
                                invoice.Description = "";

                                if (invoiceRet.ORInvoiceLineRetList.Count > 0)
                                {
                                    try
                                    {
                                        IORInvoiceLineRet orInvoiceLineRet = invoiceRet.ORInvoiceLineRetList.GetAt(1);

                                        invoice.Description = orInvoiceLineRet?.InvoiceLineRet?.Desc?.GetValue();
                                        if (string.IsNullOrEmpty(invoice.Description))
                                        {
                                            orInvoiceLineRet = invoiceRet.ORInvoiceLineRetList.GetAt(0);

                                            invoice.Description = orInvoiceLineRet?.InvoiceLineRet?.Desc?.GetValue();
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine(ex.Message);
                                        try
                                        {
                                            IORInvoiceLineRet orInvoiceLineRet = invoiceRet.ORInvoiceLineRetList.GetAt(0);

                                            invoice.Description = orInvoiceLineRet?.InvoiceLineRet?.Desc?.GetValue();
                                        }
                                        catch (Exception ex2)
                                        {
                                            Console.WriteLine(ex2.Message);
                                        }
                                    }

                                    Console.WriteLine($"{invoice.InvoiceNumber}\t{invoice.Amount} \t{invoice.JobNumber}\t{invoice.Description}");
                                }
                                // Console.WriteLine($"InvoiceList Count: {invoiceRet.ORInvoiceLineRetList.Count}");

                                /*
                                 * for (int j = 0; j < invoiceRet.ORInvoiceLineRetList.Count; j++)
                                 * {
                                 *  IORInvoiceLineRet orInvoiceLineRet = invoiceRet.ORInvoiceLineRetList.GetAt(j);
                                 *
                                 *
                                 *  if (orInvoiceLineRet != null && orInvoiceLineRet.InvoiceLineRet != null)
                                 *  {
                                 *      var invoiceItem = new InvoiceItem
                                 *      {
                                 *          Amount = orInvoiceLineRet.InvoiceLineRet.Amount?.GetValue(),
                                 *          QuickBooksID = orInvoiceLineRet.InvoiceLineRet.TxnLineID?.GetValue()
                                 *      };
                                 *
                                 *      requestMsgSet.ClearRequests();
                                 *      IItemQuery itemQueryRq = requestMsgSet.AppendItemQueryRq();
                                 *      itemQueryRq.ORListQuery.ListIDList.Add(orInvoiceLineRet.InvoiceLineRet.ItemRef?.ListID?.GetValue());
                                 *
                                 *      //Send the request and get the response from QuickBooks
                                 *      responseMsgSet = sessionManager.DoRequests(requestMsgSet);
                                 *      response = responseMsgSet.ResponseList.GetAt(0);
                                 *      IORItemRetList itemRetList = (IORItemRetList)response.Detail;
                                 *      // Console.WriteLine($"ItemRetList.Count: {itemRetList.Count}");
                                 *
                                 *      IORItemRet itemRet = itemRetList.GetAt(0);
                                 *      var ortype = itemRet.ortype;
                                 *      if (itemRet.ItemInventoryRet != null)
                                 *      {
                                 *          IItemInventoryRet itemInventoryRet = itemRet.ItemInventoryRet;
                                 *
                                 *          var item = new Item
                                 *          {
                                 *              Name = itemInventoryRet.Name?.GetValue(),
                                 *              Description = itemInventoryRet.SalesDesc?.GetValue(),
                                 *              Rate = itemInventoryRet.SalesPrice?.GetValue(),
                                 *              ItemType = ortype.ToString(),
                                 *              QuickBooksID = itemInventoryRet.ListID?.GetValue(),
                                 *              EditSequence = itemInventoryRet.EditSequence?.GetValue()
                                 *
                                 *          };
                                 *          if (string.IsNullOrEmpty(item.Name))
                                 *          {
                                 *              item.Name = itemInventoryRet.FullName?.GetValue();
                                 *          }
                                 *
                                 *          invoiceItem.Item = item;
                                 *      }
                                 *      else if (itemRet.ItemServiceRet != null)
                                 *      {
                                 *          IItemServiceRet itemServiceRet = itemRet.ItemServiceRet;
                                 *
                                 *          var item = new Item
                                 *          {
                                 *              Name = itemServiceRet.Name.GetValue(),
                                 *              Description = itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc?.GetValue(),
                                 *              Rate = itemServiceRet.ORSalesPurchase.SalesOrPurchase.ORPrice.Price?.GetValue(),
                                 *              //ItemType = ItemType.Service,
                                 *              ItemType = ortype.ToString(),
                                 *              QuickBooksID = itemServiceRet.ListID?.GetValue(),
                                 *              EditSequence = itemServiceRet.EditSequence?.GetValue(),
                                 *             // FullName = itemServiceRet.ToString()
                                 *              };
                                 *          if (string.IsNullOrEmpty(item.Name))
                                 *          {
                                 *              item.Name = itemServiceRet.FullName?.GetValue();
                                 *          }
                                 *          invoiceItem.Item = item;
                                 *      }
                                 *      else if (itemRet.ItemOtherChargeRet != null)
                                 *      {
                                 *          IItemOtherChargeRet itemOtherChargeRet = itemRet.ItemOtherChargeRet;
                                 *          var item = new Item
                                 *          {
                                 *              Name = itemOtherChargeRet.Name?.GetValue(),
                                 *              Description = itemOtherChargeRet.ORSalesPurchase.SalesOrPurchase.Desc?.GetValue(),
                                 *              Rate = itemOtherChargeRet.ORSalesPurchase.SalesOrPurchase.ORPrice.Price?.GetValue(),
                                 *              ItemType = ortype.ToString()
                                 *
                                 *          };
                                 *           if (string.IsNullOrEmpty(item.Name))
                                 *          {
                                 *              item.Name = itemOtherChargeRet.FullName?.GetValue();
                                 *          }
                                 *          invoiceItem.Item = item;
                                 *      }
                                 *      else if (itemRet.ItemNonInventoryRet != null)
                                 *      {
                                 *          IItemNonInventoryRet itemNonInventoryRet = itemRet.ItemNonInventoryRet;
                                 *          var item = new Item
                                 *          {
                                 *              Name = itemNonInventoryRet.Name?.GetValue(),
                                 *              Description = itemNonInventoryRet.ORSalesPurchase.SalesOrPurchase.Desc?.GetValue(),
                                 *              ItemType = ortype.ToString()
                                 *
                                 *          };
                                 *          if (string.IsNullOrEmpty(item.Name))
                                 *          {
                                 *              item.Name = itemNonInventoryRet.FullName?.GetValue();
                                 *          }
                                 *          invoiceItem.Item = item;
                                 *      }
                                 *      Console.WriteLine($"{invoiceItem.Item.FullName}\t{invoice.InvoiceNumber}\t{invoiceItem.Amount}\t{invoiceItem.Item.Description}");
                                 *      invoice.InvoiceItems.Add(invoiceItem);
                                 *
                                 *  }
                                 * }
                                 */
                            }
                        }


                        invoices.Add(invoice);
                    }
                }
                if (requestMsgSet != null)
                {
                    Marshal.FinalReleaseComObject(requestMsgSet);
                }
                sessionManager.EndSession();
                sessionBegun = false;
                sessionManager.CloseConnection();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application");
                if (requestMsgSet != null)
                {
                    Marshal.FinalReleaseComObject(requestMsgSet);
                }
                if (sessionBegun)
                {
                    sessionManager.EndSession();
                    sessionManager.CloseConnection();
                }
            }
            return(invoices);
        }
 private Invoice readInvoice(IInvoiceRet invoiceLineRet)
 {
     Invoice invoice = new Invoice();
     invoice.DATE = invoiceLineRet.TxnDate.GetValue();
     invoice.REFNUMBER = invoiceLineRet.RefNumber.GetValue();
     invoice.AMOUNT = invoiceLineRet.AppliedAmount.GetValue();
     invoice.MEMO = invoiceLineRet.Memo.GetValue();
     invoice.PAID = invoiceLineRet.IsPaid.GetValue();
     return invoice;
 }
Example #13
0
        public IList <Invoice> GetInvoiceWithCustomer()
        {
            bool             sessionBegun   = false;
            QBSessionManager sessionManager = null;
            var invoices = new List <Invoice>();

            sessionManager = new QBSessionManager();

            try
            {
                //Connect to QuickBooks and begin a session
                sessionManager.OpenConnection("", "GenerateInvoicePDFs");
                //connectionOpen = true;
                sessionManager.BeginSession("", ENOpenMode.omDontCare);
                sessionBegun = true;

                //Create the message set request object to hold our request
                IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 13, 0);
                requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

                IInvoiceQuery invoiceQueryRq = requestMsgSet.AppendInvoiceQueryRq();
                // all invoices modified in the month of August 2016
                invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.FromModifiedDate.SetValue(new DateTime(2017, 12, 1), true);
                invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.ToModifiedDate.SetValue(new DateTime(2017, 12, 31), true);
                //invoiceQueryRq.IncludeLineItems.SetValue(true);

                //Send the request and get the response from QuickBooks
                IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);
                IResponse       response       = responseMsgSet.ResponseList.GetAt(0);
                IInvoiceRetList invoiceRetList = (IInvoiceRetList)response.Detail;

                if (invoiceRetList != null)
                {
                    for (int i = 0; i < invoiceRetList.Count; i++)
                    {
                        IInvoiceRet invoiceRet = invoiceRetList.GetAt(i);

                        var invoice = new Invoice
                        {
                            QuickBooksID  = invoiceRet.TxnID.GetValue(),
                            EditSequence  = invoiceRet.EditSequence.GetValue(),
                            InvoiceNumber = invoiceRet.RefNumber?.GetValue(),
                            Memo          = invoiceRet.Memo?.GetValue(),
                            JobNumber     = invoiceRet.Other?.GetValue(),
                            CustomerName  = invoiceRet.CustomerRef.FullName?.GetValue()
                        };
                        var customerListId = invoiceRet.CustomerRef?.ListID?.GetValue();
                        if (customerListId != null)
                        {
                            Console.WriteLine($"INv:{invoice.InvoiceNumber}, Job: {invoice.JobNumber}, Name:{invoice.CustomerName}");
                            requestMsgSet.ClearRequests();
                            ICustomerQuery customerQueryRq = requestMsgSet.AppendCustomerQueryRq();
                            customerQueryRq.ORCustomerListQuery.ListIDList.Add(customerListId);

                            //Send the request and get the response from QuickBooks
                            responseMsgSet = sessionManager.DoRequests(requestMsgSet);
                            response       = responseMsgSet.ResponseList.GetAt(0);

                            ICustomerRetList customerRetList = (ICustomerRetList)response.Detail;
                            ICustomerRet     customerRet     = customerRetList.GetAt(0);

                            invoice.Customer = new Customer
                            {
                                Name         = customerRet.Name?.GetValue(),
                                QuickBooksID = customerRet.ListID?.GetValue(),
                                EditSequence = customerRet.EditSequence?.GetValue(),
                                FullName     = customerRet.FullName?.GetValue(),
                                CompanyName  = customerRet.CompanyName?.GetValue()
                            };
                            Console.WriteLine($"{i}\t{invoice.Customer.Name}\t{invoice.Customer.FullName}\t{invoice.Customer.CompanyName}");
                        }


                        invoices.Add(invoice);
                    }
                }
                if (requestMsgSet != null)
                {
                    Marshal.FinalReleaseComObject(requestMsgSet);
                }
                sessionManager.EndSession();
                sessionBegun = false;
                sessionManager.CloseConnection();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application");
                if (sessionBegun)
                {
                    sessionManager.EndSession();
                    sessionManager.CloseConnection();
                }
            }
            return(invoices);
        }
 void WalkInvoiceRet(IInvoiceRet InvoiceRet)
 {
     if (InvoiceRet == null) return;
     //Go through all the elements of IInvoiceRet
     //Get value of TxnID
     qbTrxnId = (string)InvoiceRet.TxnID.GetValue();
     //Get value of TimeCreated
     DateTime TimeCreated7 = (DateTime)InvoiceRet.TimeCreated.GetValue();
     //Get value of TimeModified
     DateTime TimeModified8 = (DateTime)InvoiceRet.TimeModified.GetValue();
     //Get value of EditSequence
     qbEditSequence = (string)InvoiceRet.EditSequence.GetValue();
 }
        public Invoice Populate(string invoiceNumber)
        {
            IMsgSetRequest requestMsgSet = _MySessionManager.CreateMsgSetRequest("US", 13, 0);

            IInvoiceQuery invoiceQuery = requestMsgSet.AppendInvoiceQueryRq();

            invoiceQuery.ORInvoiceQuery.RefNumberList.Add(invoiceNumber);

            invoiceQuery.IncludeLineItems.SetValue(true);

            IMsgSetResponse responseMsgSet = _MySessionManager.DoRequests(requestMsgSet);

            IResponseList rsList = responseMsgSet.ResponseList;

            IResponse response = rsList.GetAt(0);

            IInvoiceRetList InvoiceList = (IInvoiceRetList)response.Detail;

            if (InvoiceList == null)
            {
                throw new Exception("Invoice not found.");
            }

            try
            {
                IInvoiceRet QBInvoices = InvoiceList.GetAt(0);

                _invoice        = new Invoice();
                _invoice.Number = QBInvoices.RefNumber.GetValue();
                _invoice.Total  = QBInvoices.Subtotal.GetAsString();
                _invoice.Date   = QBInvoices.TxnDate.GetValue();
                _invoice.Terms  = QBInvoices.TermsRef.FullName.GetValue();
                if (QBInvoices.PONumber != null)
                {
                    _invoice.PONumber = QBInvoices.PONumber.GetValue();
                }
                if (QBInvoices.ShipDate != null)
                {
                    _invoice.ShipDate = QBInvoices.ShipDate.GetValue();
                }

                _invoice.CustomerFullName = QBInvoices.CustomerRef.FullName.GetValue();

                Address address = new Address();
                _invoice.BillingAddress  = address.getAddress(QBInvoices.BillAddress);
                _invoice.ShippingAddress = address.getAddress(QBInvoices.ShipAddress);

                IORInvoiceLineRetList InvoiceItems = QBInvoices.ORInvoiceLineRetList;

                if (InvoiceItems != null)
                {
                    for (int i = 0; i <= InvoiceItems.Count - 1; i++)
                    {
                        IORInvoiceLineRet InvoiceItem = InvoiceItems.GetAt(i);

                        if (InvoiceItem.ortype == ENORInvoiceLineRet.orilrInvoiceLineRet)
                        {
                            InventoryItem inventoryItem = new InventoryItem();

                            inventoryItem.ItemCode = InvoiceItem.InvoiceLineRet.ItemRef.FullName.GetValue();

                            inventoryItem.Description = InvoiceItem.InvoiceLineRet.Desc.GetValue();

                            if (InvoiceItem.InvoiceLineRet.Quantity != null)
                            {
                                _invoice.TotalQty     += InvoiceItem.InvoiceLineRet.Quantity.GetValue();
                                inventoryItem.Quantity = InvoiceItem.InvoiceLineRet.Quantity.GetAsString();
                            }
                            else
                            {
                                inventoryItem.Quantity = "";
                            }

                            inventoryItem.Price  = InvoiceItem.InvoiceLineRet.ORRate.Rate.GetValue();
                            inventoryItem.Amount = InvoiceItem.InvoiceLineRet.Amount.GetAsString();
                            _invoice.InventoryItems.Add(inventoryItem);
                        }
                    }

                    //Update the items UPC and List in the sales order from itemsWithUPC list
                    //The reason is that the salesOrder items don't have these properties
                    //So we make another request to QB to get items with all properties
                    InventoryHelper inventoryHelper = new InventoryHelper(_MySessionManager);
                    _invoice.InventoryItems = inventoryHelper.UpdateItemUPCAndListID(_invoice.InventoryItems);
                }

                return(_invoice);
            }
            catch (Exception)
            {
                throw new Exception("Failed to read Invoice from QuickBooks.");
            }
        }