static async Task <JObject> CreateInvoiceAsync(string access_token, QB_Invoice inv, string realmID) { string ItemURL = realmID + "/invoice?minorversion=4"; HttpClient client = new HttpClient(); client.BaseAddress = new Uri(baseURL); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.SetBearerToken(access_token); client.DefaultRequestHeaders.Add("Connection", "keep-alive"); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, ItemURL); request.Content = new StringContent(JsonConvert.SerializeObject(inv), null, "application/json"); request.Headers.Host = "sandbox-quickbooks.api.intuit.com"; HttpResponseMessage response = await client.SendAsync(request); var responseContent = response.Content.ReadAsStringAsync().Result; System.Console.WriteLine("\n==========\nTemp: " + responseContent + "\n==========\n"); System.Console.WriteLine("\n==========\nRequest: " + response.RequestMessage + "\n==========\n"); System.Console.WriteLine("\n==========\nResponce: " + response + "\n==========\n"); response.EnsureSuccessStatusCode(); var responceObject = (JObject)JsonConvert.DeserializeObject(responseContent); return(responceObject); }
public async Task <JObject> SendInvoice(Invoice inv_convert, string access_token, string realmID) { var curr_customer = inv_convert.InvoiceCust; var curr_address = inv_convert.InvoiceCust.CustAddress; var new_Customer = new QB_Customer { BillAddr = new CustBilling { Line1 = curr_address.Street, City = curr_address.City, Country = curr_address.Country, CountrySubDivisionCode = curr_address.State, PostalCode = curr_address.ZipCode }, Notes = "", DisplayName = curr_customer.LastName + ", " + curr_customer.FirstName, PrimaryPhone = new CustPhone { FreeFormNumber = curr_customer.PhoneNumber }, PrimaryEmailAddr = new CustEmailAddr { Address = curr_customer.Email } }; JObject CustResult; if (inv_convert.InvoiceCust.QB_Id == -1) { CustResult = await CreateCustomerAsync(access_token, new_Customer, realmID); Customer exist = await _context.Customers.FirstOrDefaultAsync(x => x.Id == inv_convert.InvoiceCust.Id); exist.QB_Id = CustResult["Customer"]["Id"].Value <int>(); _context.Customers.Update(exist); await _context.SaveChangesAsync(); } else { CustResult = await GetCustomerAsync(access_token, inv_convert.InvoiceCust.QB_Id, realmID); } var ItemList = inv_convert.InvoicesLineList; int ItemSize = ItemList.Count; int IncomeAcct = 487; string IncomeName = "Sales"; int ExpenseAcct = 517; string ExpenseName = "Cost of Goods Sold"; int AssetAcct = 519; string AssetName = "Inventory"; var new_Invoice = new QB_Invoice() { Line = new List <LineObj>() }; foreach (var item in ItemList) { var new_Item = new QB_Item { Name = item.LineInventory.Name, IncomeAccountRef = new ItemIncomeAccountRef { value = IncomeAcct.ToString(), name = IncomeName }, ExpenseAccountRef = new ItemExpenseAccountRef { value = ExpenseAcct.ToString(), name = ExpenseName }, AssetAccountRef = new ItemAssetAccountRef { value = AssetAcct.ToString(), name = AssetName }, Type = "Inventory", TrackQtyOnHand = true, QtyOnHand = item.QuantitySold, InvStartDate = DateTime.Now.ToString("yyyy-MM-dd") }; JObject ItemReturn; if (item.LineInventory.QB_Id == -1) { ItemReturn = await CreateItemAsync(access_token, new_Item, realmID); Inventory exist = await _context.Inventories.FirstOrDefaultAsync(x => x.Id == item.LineInventory.Id); exist.QB_Id = ItemReturn["Item"]["Id"].Value <int>(); _context.Inventories.Update(exist); await _context.SaveChangesAsync(); } else { ItemReturn = await GetItemAsync(access_token, item.LineInventory.QB_Id, realmID); } var new_line = new LineObj() { Amount = (float)item.Price, SalesItemLineDetail = new SalesItemLineDetailObj() { ItemRef = new ItemRefObj() { value = ItemReturn["Item"]["Id"].Value <int>().ToString(), name = ItemReturn["Item"]["Name"].Value <string>().ToString() }, Qty = item.QuantitySold } }; new_Invoice.Line.Add(new_line); } new_Invoice.CustomerRef = new CustomerRefObj() { value = CustResult["Customer"]["Id"].Value <int>().ToString() }; var InvResult = CreateInvoiceAsync(access_token, new_Invoice, realmID).Result; return(InvResult); }