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 }