public ActionResult ImportInvoice()
        {
            //create the correct company

            //get the Invoices to import from the session
            ObservableCollection<Datalayer.Xero.Interresolve.OutboundInvoiceLineItem> theAquariumInvoicesToImportFromSession = (ObservableCollection<Datalayer.Xero.Interresolve.OutboundInvoiceLineItem>)Session["InvoicesToImport"];

            OutboundInvoiceLineItemList theAquariumInvoicesToImport = new OutboundInvoiceLineItemList();
            theAquariumInvoicesToImport.OutboundInvoiceLineItems = theAquariumInvoicesToImportFromSession.ToList();

            //convert from Aquarium invoices to Xero Invoices
            XeroApi.Model.Invoices theXeroInvoicesToImport = new XeroApi.Model.Invoices(); //add each Xero invoice to this list

            //for each invoice to be imported, pass in the list of invoices to factor out the line items into the correct invoice
            foreach (var AquariumInvoiceLineItem in theAquariumInvoicesToImport.OutboundInvoiceLineItems)
            {
                //pass in the invoice, then find all matching line items
                if (AquariumInvoiceLineItem.Result != "true") //then we can try and import it - security check
                {
                    //check we havent' done it already
                    int HaveWeDoneThisInvoiceAlready = (from invoice in theXeroInvoicesToImport
                                                        .Where(x => x.InvoiceNumber == AquariumInvoiceLineItem.InvoiceNumber.ToString())
                                                        select invoice).ToList().Count();

                    //we haven't imported it already -- run the proceedure to convert to xero invoice
                    if (HaveWeDoneThisInvoiceAlready < 1)
                    {
                        //convert to Xero Invoice

                        //need to check what company it is, so we can pull the correct contact
                        Datalayer.Xero.Interresolve.InterResolveXeroService aServiceInstanceToCheckTheCompany = new Datalayer.Xero.Interresolve.InterResolveXeroService(Datalayer.Xero.Interresolve.InterResolveXeroService.GetXeroOrganisationFromIRCompanyName(theAquariumInvoicesToImport.OutboundInvoiceLineItems.ElementAt(0).SageCompanyName));

                        XeroApi.Model.Invoice invoiceToAdd = OutboundInvoiceLineItemList.ConvertMultipleOutboundInvoiceLineItemsToXeroInvoice(theAquariumInvoicesToImport, AquariumInvoiceLineItem, aServiceInstanceToCheckTheCompany);

                        //Add invocie to import list
                        theXeroInvoicesToImport.Add(invoiceToAdd);

                    }

                }

            }

            ///////////////////////////////////////////////////
            //now for each invoice in the list, push to Xero
            ///////////////////////////////////////////////////

            //check the invoice company, and create the correct Xero login to that company

            for (var i = 0; i < theXeroInvoicesToImport.Count; i++)
            {

                //get the company name from the original Invoice list where invoice number = xxxxxx
                string IRCompanyName = (from Invoice in theAquariumInvoicesToImport.OutboundInvoiceLineItems
                                            .Where(x => x.InvoiceNumber == Convert.ToInt64(theXeroInvoicesToImport.ElementAt(i).InvoiceNumber))
                                        select Invoice.SageCompanyName

                                            ).Distinct().FirstOrDefault();

                string IRCompanyToPostTo = IRCompanyName;

                InterResolveXeroService.InterResolveXeroOrganisation XeroCompanyToPostTo = InterResolveXeroService.GetXeroOrganisationFromIRCompanyName(IRCompanyToPostTo);
                //Find which organsation we want to post to, and create XeroLogin class accordingly
                InterResolveXeroService aXeroService = new InterResolveXeroService(XeroCompanyToPostTo);
                //post each invoice to xero and check the result was 'OK'
                aXeroService.LoginToXero();

                var InvoiceResponse = aXeroService.XeroRepository.Create<XeroApi.Model.Invoice>(theXeroInvoicesToImport.ElementAt(i));

                //check response - write back to Aquarium that invoice was successfully imported, or not

                if (InvoiceResponse.ValidationStatus == XeroApi.Model.ValidationStatus.OK)
                {
                    Int64 TableRowID = XeroHelper.GetTableRowIDfromXeroInvoice(theXeroInvoicesToImport.ElementAt(i), theAquariumInvoicesToImport);

                    if (TableRowID != 0)
                    {
                        //call function to write back to Aquarium
                        var writeToAq = XeroHelper.XeroImportSuccessful_UpdateAquariumTableRow(TableRowID);
                    }

                }

                //tidy up
                aXeroService = null;

                //end
            }

            return View();
        }
        public void TestPDFPull()
        {
            //get the invoice from xero
            InterResolveXeroService theService = new InterResolveXeroService(InterResolveXeroService.InterResolveXeroOrganisation.InterResolve_Ltd);
            theService.LoginToXero();

            List<XeroApi.Model.Invoice> theInvoicesToTest = new List<XeroApi.Model.Invoice>();
            List<XeroApi.Model.Invoice> theInvoicesToACTUALLYEXPORTBecauseXeroAPIDontWorkPropertly = new List<XeroApi.Model.Invoice>();
            List<IQueryable<XeroApi.Model.Invoice>> theIqueryableInvoices = new List<IQueryable<XeroApi.Model.Invoice>>();

            //gets invoices without lineItems
            theInvoicesToTest = (from invoices in theService.XeroRepository.Invoices
                                 where invoices.Status != "DELETED"
                                 && invoices.Type == "ACCPAY"
                                 select invoices
                                        ).ToList();

               //get the line items for each invoice
            for (int i = 0; i < theInvoicesToTest.Count; i++ )
            {

                System.Guid theInvoiceIDGUID = theInvoicesToTest.ElementAt(i).InvoiceID;

                var anInvoice = (from invoices in theService.XeroRepository.Invoices
                                 where invoices.InvoiceID == theInvoiceIDGUID
                                 select invoices).ToList();

                theInvoicesToACTUALLYEXPORTBecauseXeroAPIDontWorkPropertly.Add(anInvoice.ElementAt(0));

                anInvoice = null;

            }

            //turn the invoices into Aquarium Invoices
            List<InboundInvoice> AquariumInboundInvoices = new List<InboundInvoice>();

            foreach (var invoice in theInvoicesToACTUALLYEXPORTBecauseXeroAPIDontWorkPropertly)
            {
                AquariumInboundInvoices.Add(new InboundInvoice(invoice));
            }

            //GET THAT INVOICE'S PDF AND ASSIGN

            //to actually pull the pdf from Xero.
            //to assign it to this invoice's PDF container

            foreach (var invoice in AquariumInboundInvoices)
            {
                invoice.InvoicePDF = theService.XeroRepository.FindById<XeroApi.Model.Invoice>(invoice.XeroInvoiceID_GUID.ToString(), XeroApi.MimeTypes.ApplicationPdf);
            }

            Datalayer.Xero.Interresolve.AquariumEventManagement.EventManagementSoapClient theSDk = new Datalayer.Xero.Interresolve.AquariumEventManagement.EventManagementSoapClient();

             AquariumLogin login = new AquariumLogin();
             login.LoginToAquarium();

             LoggedOnUserResult theUserResult = login.GetLoggedOnUserResult();

             Datalayer.Xero.Interresolve.AquariumEventManagement.SessionDetails sessionDetails = new Datalayer.Xero.Interresolve.AquariumEventManagement.SessionDetails(); //set this from the logon
                //set the USER sesson
             sessionDetails.SessionKey = theUserResult.SessionKey;
             sessionDetails.Username = theUserResult.Username;
             sessionDetails.ThirdPartySystemId = 29;

            InboundInvoice ARandomInvoice = AquariumInboundInvoices.ElementAt(1);

            Datalayer.Xero.Interresolve.AquariumEventManagement.FollowupOptions followUPOption = new Datalayer.Xero.Interresolve.AquariumEventManagement.FollowupOptions();

            //try and INSERT THE PDF INTO AQUARIUM
            Datalayer.Xero.Interresolve.AquariumEventManagement.EventResult didThePDFGoIn = theSDk.AddDocumentInEvent(sessionDetails, 66053, 1033432, 970452, ARandomInvoice.InvoicePDF, "A Title For The Docu", "Invoice.PDF", followUPOption);

            //FINALLY, PUT THE TABLE ROW INTO THE TABLE AND CONFIRM THAT IMPORT WAS SUCCESFUL
        }