public void UpdateInvoiceStatus(InvoiceSQLite invoice) { lock (locker) { database.Update(invoice); } }
internal void UpdateInvoiceNumber(InvoiceSQLite invoice) { lock (locker) { database.Update(invoice); } }
public void DeleteInvoiceByInvoice(InvoiceSQLite invoice) { lock (locker) { database.Delete(invoice); } }
private async void MarkAsCompleted(object sender, EventArgs e) { bool userAction = await DisplayAlert("Confirm action", "Do you wish to mark it as complete? ", "Yes", "Cancel"); if (userAction) { var button = sender as Button; Invoice invoiceSelected = button.BindingContext as Invoice; InvoiceSQLite invoice = App.InvoiceDatabase.GetInvoiceByInvoiceID(invoiceSelected.InvoiceID); invoice.CompletedDeliveryStatus = true; invoice.UpdateTimeTicksApp = DateTime.Now.Ticks; App.InvoiceDatabase.UpdateInvoiceStatus(invoice); UpdateStatus(invoiceSelected); UpdateWeightLabel(invoiceSelected); if (IsGoogleAPICallRequired(invoiceSelected)) { MapDirections("(Force-Refresh) "); } } } // Mark As Completed
protected async override void OnAppearing() { _isDetailedPageOpen = false; if (_currentSelectedInvoice != null) { InvoiceSQLite invoiceSQLite = App.InvoiceDatabase.GetInvoiceByInvoiceID(_currentSelectedInvoice.InvoiceID); if (invoiceSQLite.CompletedDeliveryStatus) { UpdateStatus(_currentSelectedInvoice); UpdateWeightLabel(_currentSelectedInvoice); if (IsGoogleAPICallRequired(_currentSelectedInvoice)) { MapDirections("(Force-Refresh) "); } } _currentSelectedInvoice = null; } else { _invoiceSQLite = App.InvoiceDatabase.GetAllIncompleteInvoices(); if (_counter == 0) { _counter = _invoiceSQLite.Count(); } if (_counter > _invoiceSQLite.Count() || _firstVisited) { await InitPins(); MapDirections("(initializing) "); _counter = _invoiceSQLite.Count(); _firstVisited = false; _outsideRouteUpdateCounter = 0; } } }
} // Mark As Completed public void UpdateStatus(Invoice invoiceSelected) { bool googleAPICallRequired = true; _invoicesCollection.Remove(invoiceSelected); _invoices.Remove(invoiceSelected); DeliveryItemView.ItemsSource = _invoicesCollection; Pin thePin = _pins.Where(pinX => pinX.Label == invoiceSelected.InvoiceNumber).FirstOrDefault(); map.Pins.Remove(thePin); _waypoints.Remove($"{thePin.Position.Latitude}%2C{thePin.Position.Longitude}"); InvoiceSQLite invoiceSQLite = App.InvoiceDatabase.GetInvoiceByInvoiceNumber(invoiceSelected.InvoiceNumber); if (invoiceSQLite != null) { ContactSQLite contact = App.ContactDatabase.GetContactByID(invoiceSQLite.ContactID); double distanceToInvoiceInKm = Location.CalculateDistance(_currentLocation, new Location((double)contact.Latitude, (double)contact.Longitude), DistanceUnits.Kilometers); if (distanceToInvoiceInKm * 1000 < 30) { googleAPICallRequired = false; } } if (googleAPICallRequired) { MapDirections("(Force-Refresh) "); } _counter--; }
public void InsertInvoice(InvoiceSQLite invoice) { lock (locker) { database.Insert(invoice); } }
public void InsertInvoice(InvoiceSQLite invoice, List <LineItem> lineitem, Contact contact) { lock (locker) { database.Insert(invoice); //create LineItem to associate it with the invoice if (!App.ContactDatabase.CheckContactIfExisted(contact.ContactID)) { ContactSQLite contactSQLite = App.ContactDatabase.PrepareContactSQLite(contact); App.ContactDatabase.InsertContact(contactSQLite); } //sort desc by ID, get the first one (biggest id number) var maxItemLineID = App.LineItemDatabase.GetLastLineItem(); int itemLineID = maxItemLineID == null ? 1 : maxItemLineID.ItemLineID; foreach (LineItem item in lineitem) { itemLineID++; //create the id by referencing lineitemtable LineItemSQLite lineItemSQLite = new LineItemSQLite() { // if it's not set set the itemline id to 1 else increment 1 from the biggest value ItemLineID = itemLineID, InvoiceID = invoice.InvoiceID, ItemCode = item.ItemCode, Quantity = (int)item.Quantity, UnitAmount = item.UnitAmount, }; //Save to db App.LineItemDatabase.InsertLineItem(lineItemSQLite); ItemSQLite itemSQLite = App.ItemDatabase.GetItemByID(item.ItemCode); //check if item already exist, if not add it into database if (itemSQLite == null) { ItemSQLite newItem = new ItemSQLite() { ItemCode = item.ItemCode, Description = item.Description, Weight = item.Weight, UnitCost = invoice.InvoiceType == "ACCPAY" ? item.UnitAmount : 0, UpdateTimeTicks = invoice.UpdateTimeTicksXERO, }; App.ItemDatabase.InsertItem(newItem); } else if (invoice.UpdateTimeTicksXERO > itemSQLite.UpdateTimeTicks) { itemSQLite.Weight = item.Weight; itemSQLite.Description = item.Description; itemSQLite.UnitCost = invoice.InvoiceType == "ACCPAY" ? item.UnitAmount : 0; itemSQLite.UpdateTimeTicks = invoice.UpdateTimeTicksXERO; App.ItemDatabase.UpdateItem(itemSQLite); } } } }
} // Mark As Completed public bool IsGoogleAPICallRequired(Invoice invoiceSelected) { bool googleAPICallRequired = true; InvoiceSQLite invoiceSQLite = App.InvoiceDatabase.GetInvoiceByInvoiceNumber(invoiceSelected.InvoiceNumber); if (invoiceSQLite != null) { ContactSQLite contact = App.ContactDatabase.GetContactByID(invoiceSQLite.ContactID); double distanceToInvoiceInKm = Location.CalculateDistance(_currentLocation, new Location((double)contact.Latitude, (double)contact.Longitude), DistanceUnits.Kilometers); if (distanceToInvoiceInKm < 0.045) { googleAPICallRequired = false; } } return(googleAPICallRequired); }
public void UpdateWeightLabel(Invoice invoiceSelected) { InvoiceSQLite invoiceSQLite = App.InvoiceDatabase.GetInvoiceByInvoiceID(invoiceSelected.InvoiceID); List <InvoiceSQLite> temp = new List <InvoiceSQLite>(); temp.Add(invoiceSQLite); double invoiceWeight = StockManager.CalculateStockWeight(StockManager.GetStock(temp)); if (invoiceSQLite.InvoiceType == "ACCREC") { _currentWeight -= invoiceWeight; } else { _currentWeight += invoiceWeight; } TotalWeightLabel.Text = $"{(_currentWeight):F2} Kg"; }
private async void MarkAsCompleted(object sender, EventArgs e) { bool userAction = false; if (_selectedInvoice.Status == "Completed") { userAction = await DisplayAlert("Confirm action", "Do you wish to mark it as incomplete? ", "Yes", "Cancel"); if (userAction) { _selectedInvoice.Status = ""; CompletedOrderButton.Text = "Mark as Completed"; PageHeaderLabel.Text = _selectedInvoice.InvoiceNumber; } } else { userAction = await DisplayAlert("Confirm action", "Do you wish to mark it as completed? ", "Yes", "Cancel"); if (userAction) { _selectedInvoice.Status = "Completed"; CompletedOrderButton.Text = "Mark as incomplete"; PageHeaderLabel.Text = $"{_selectedInvoice.InvoiceNumber} Completed"; } } PageHeaderLabel.Text += _selectedInvoice.Type == "ACCPAY" ? " - Pickup" : " - Dropoff"; if (userAction) { InvoiceSQLite invoice = new InvoiceSQLite(); invoice.InvoiceType = _selectedInvoice.Type; invoice.InvoiceID = _selectedInvoice.InvoiceID; invoice.InvoiceNumber = _selectedInvoice.InvoiceNumber; invoice.CompletedDeliveryStatus = (_selectedInvoice.Status == "Completed"); invoice.ContactID = _selectedInvoice.Contact.ContactID; invoice.Subtotal = _selectedInvoice.SubTotal; App.InvoiceDatabase.UpdateInvoiceStatus(invoice); } // Navigation.PopModalAsync(); } // Mark As Completed
protected override void OnAppearing() { _childPageLoaded = false; if (_currentInvoice != null) { int collectionIndex = _deliveryOrders.IndexOf(_currentInvoice); InvoiceSQLite invoiceSQLite = App.InvoiceDatabase.GetInvoiceByInvoiceID(_currentInvoice.InvoiceID); if (invoiceSQLite.CompletedDeliveryStatus) { _deliveryOrders.Remove(_deliveryOrders[collectionIndex]); DeliveryInvoice.ItemsSource = _deliveryOrders; } _currentInvoice = null; } else { SupplyOrder(); } }
protected override void OnAppearing() { _childPageLoaded = false; init(); if (_currentSelected == null) { BindingContext = new CompletedViewModel(Navigation); } else { CompletedViewModel model = BindingContext as CompletedViewModel; int selectedIndex = model.DeliveryOrders.IndexOf(_currentSelected); InvoiceSQLite invoiceSQLite = App.InvoiceDatabase.GetInvoiceByInvoiceID(_currentSelected.InvoiceID); if (!invoiceSQLite.CompletedDeliveryStatus) { model.DeliveryOrders.Remove(_currentSelected); } } }
private async void MarkAsCompleted(object sender, EventArgs e) { bool userAction = await DisplayAlert("Confirm action", "Do you wish to mark it as complete? ", "Yes", "Cancel"); if (userAction) { var button = sender as Button; Invoice invoiceSelected = button.BindingContext as Invoice; invoiceSelected.Status = "Completed"; InvoiceSQLite invoice = new InvoiceSQLite(); invoice.InvoiceID = invoiceSelected.InvoiceID; invoice.InvoiceNumber = invoiceSelected.InvoiceNumber; invoice.CompletedDeliveryStatus = (invoiceSelected.Status == "Completed"); invoice.ContactID = invoiceSelected.Contact.ContactID; invoice.Subtotal = invoiceSelected.SubTotal; App.InvoiceDatabase.UpdateInvoiceStatus(invoice); UpdateStatus(invoiceSelected); } } // Mark As Completed
private void SavePickupButton_Clicked(object sender, EventArgs e) { if (!ValidateInput()) { DisplayAlert("Alert", "Please Fill All the Input Field", "OK"); return; } int pickupInvoiceCount = App.InvoiceDatabase.CountPickupInvoice(); ContactSQLite contact = App.ContactDatabase.GetContactByName(ContactAutoSuggestBox.Text); if (contact == null) { contact = new ContactSQLite() { ContactID = DateTime.Now.ToString(), Fullname = ContactAutoSuggestBox.Text, City = CityEntry.Text, Type = ContactType.Supplier, Address = AddressEntry.Text, }; App.ContactDatabase.InsertContact(contact); } InvoiceSQLite invoice = new InvoiceSQLite() { InvoiceID = DateTime.Now.ToString(), InvoiceNumber = "OPC-" + pickupInvoiceCount, InvoiceType = "ACCPAY", CompletedDeliveryStatus = false, ContactID = contact.ContactID, TenantID = Preferences.Get("TenantID", string.Empty), UpdateTimeTicksApp = DateTime.Now.Ticks, }; App.InvoiceDatabase.InsertInvoice(invoice); foreach (LineItem item in _itemsCollection) { var maxItemLineID = App.LineItemDatabase.GetLastLineItem(); //create the id by referencing lineitemtable LineItemSQLite lineItemSQLite = new LineItemSQLite() { // if it's not set set the itemline id to 1 else increment 1 from the biggest value ItemLineID = (maxItemLineID == null ? 1 : maxItemLineID.ItemLineID + 1), InvoiceID = invoice.InvoiceID, ItemCode = item.ItemCode, Quantity = (int)item.Quantity, UnitAmount = item.UnitAmount, }; //Save to db App.LineItemDatabase.InsertLineItem(lineItemSQLite); //check if item already exist, if not add it into database if (!App.ItemDatabase.CheckIfExisted(item.ItemCode)) { ItemSQLite newItem = new ItemSQLite() { ItemCode = item.ItemCode, Description = item.Description, Weight = item.Weight, UnitCost = item.UnitAmount }; App.ItemDatabase.InsertItem(newItem); } } Navigation.PopModalAsync(); }
public static async Task <bool> FillData() { for (int i = 0; i < _InvoiceResponse.Invoices.Count; i++) { InvoiceSQLite invoiceInDatabase = App.InvoiceDatabase.GetInvoiceByInvoiceID(_InvoiceResponse.Invoices[i].InvoiceID); if (invoiceInDatabase != null && invoiceInDatabase.CompletedDeliveryStatus) { continue; } if (_InvoiceResponse.Invoices[i].Status == "AUTHORISED" || _InvoiceResponse.Invoices[i].Status == "PAID") { await FillItems(_InvoiceResponse.Invoices[i], i); await FillContactAddress(_InvoiceResponse.Invoices[i].Contact, i); InvoiceSQLite invoiceSqlite = new InvoiceSQLite() { InvoiceType = _InvoiceResponse.Invoices[i].Type, InvoiceID = _InvoiceResponse.Invoices[i].InvoiceID, InvoiceNumber = _InvoiceResponse.Invoices[i].InvoiceNumber, CompletedDeliveryStatus = false, ContactID = _InvoiceResponse.Invoices[i].Contact.ContactID, Subtotal = _InvoiceResponse.Invoices[i].SubTotal }; //Insert data normally if the data doesnt exist else check for update if (invoiceInDatabase == null) { App.InvoiceDatabase.InsertInvoice(invoiceSqlite, _InvoiceResponse.Invoices[i].LineItems, _InvoiceResponse.Invoices[i].Contact); } else { ContactSQLite contactInDatabase = App.ContactDatabase.GetContactByID(invoiceInDatabase.ContactID); ContactSQLite newContact = App.ContactDatabase.PrepareContactSQLite(_InvoiceResponse.Invoices[i].Contact); if (contactInDatabase.Address != newContact.Address) { App.ContactDatabase.UpdateContactPosition(newContact); } List <LineItemSQLite> lineItemSQLiteList = App.LineItemDatabase.GetLineItemByInvoiceID(_InvoiceResponse.Invoices[i].InvoiceID); foreach (LineItem lineItem in _InvoiceResponse.Invoices[i].LineItems) { //check if item already exist, if not add it into database ItemSQLite itemSQLite = App.ItemDatabase.GetItemByID(lineItem.ItemCode); if (itemSQLite == null) { ItemSQLite newItem = new ItemSQLite() { ItemCode = lineItem.ItemCode, Description = lineItem.Description, Weight = lineItem.Weight }; App.ItemDatabase.InsertItem(newItem); } else if (itemSQLite.Weight != lineItem.Weight) { itemSQLite.Weight = lineItem.Weight; itemSQLite.Description = lineItem.Description; App.ItemDatabase.UpdateItem(itemSQLite); } LineItemSQLite lineItemSQLite = lineItemSQLiteList.Where(lineItemX => lineItemX.ItemCode == lineItem.ItemCode).FirstOrDefault(); if (lineItemSQLite == null) { continue; } if (lineItemSQLite.UnitAmount != lineItem.UnitAmount || lineItemSQLite.Quantity != lineItemSQLite.Quantity) { lineItemSQLite.UnitAmount = lineItem.UnitAmount; lineItemSQLite.Quantity = (int)lineItem.Quantity; App.LineItemDatabase.UpdateLineItem(lineItemSQLite); } } } } } return(true); }
public static async Task <bool> FillData() { var tenantID = Preferences.Get("TenantID", string.Empty); Dictionary <string, InvoiceSQLite> allInvoicesInDatabase = App.InvoiceDatabase.GetAllInvoices().ToDictionary(invX => invX.InvoiceID, invX => invX); for (int i = 0; i < _InvoiceResponse.Invoices.Count; i++) { InvoiceSQLite invoiceInDatabase = null; if (allInvoicesInDatabase.ContainsKey(_InvoiceResponse.Invoices[i].InvoiceID)) { invoiceInDatabase = allInvoicesInDatabase[_InvoiceResponse.Invoices[i].InvoiceID]; allInvoicesInDatabase.Remove(_InvoiceResponse.Invoices[i].InvoiceID); } if (invoiceInDatabase != null && invoiceInDatabase.CompletedDeliveryStatus) { continue; } if (_InvoiceResponse.Invoices[i].Status == "AUTHORISED" || _InvoiceResponse.Invoices[i].Status == "PAID") { await FillItems(_InvoiceResponse.Invoices[i], i); await FillContactAddress(_InvoiceResponse.Invoices[i].Contact, i); //Insert data normally if the data doesnt exist else check for update if (invoiceInDatabase == null) { InvoiceSQLite invoiceSqlite = new InvoiceSQLite() { InvoiceType = _InvoiceResponse.Invoices[i].Type, InvoiceID = _InvoiceResponse.Invoices[i].InvoiceID, TenantID = tenantID, InvoiceNumber = _InvoiceResponse.Invoices[i].InvoiceNumber, CompletedDeliveryStatus = false, ContactID = _InvoiceResponse.Invoices[i].Contact.ContactID, Subtotal = _InvoiceResponse.Invoices[i].SubTotal, UpdateTimeTicksXERO = _InvoiceResponse.Invoices[i].UpdatedDateUTC.Ticks, UpdateTimeTicksApp = _InvoiceResponse.Invoices[i].UpdatedDateUTC.Ticks, }; App.InvoiceDatabase.InsertInvoice(invoiceSqlite, _InvoiceResponse.Invoices[i].LineItems, _InvoiceResponse.Invoices[i].Contact); } else { ContactSQLite contactInDatabase = App.ContactDatabase.GetContactByID(invoiceInDatabase.ContactID); ContactSQLite newContact = App.ContactDatabase.PrepareContactSQLite(_InvoiceResponse.Invoices[i].Contact); if (contactInDatabase.Address != newContact.Address || contactInDatabase.Fullname != newContact.Fullname || contactInDatabase.City != newContact.City || contactInDatabase.PhoneNumber != newContact.PhoneNumber) { App.ContactDatabase.UpdateContactPosition(newContact); } if (_InvoiceResponse.Invoices[i].UpdatedDateUTC.Ticks == invoiceInDatabase.UpdateTimeTicksXERO) { continue; } if (invoiceInDatabase.InvoiceNumber != _InvoiceResponse.Invoices[i].InvoiceNumber) { invoiceInDatabase.InvoiceNumber = _InvoiceResponse.Invoices[i].InvoiceNumber; } invoiceInDatabase.UpdateTimeTicksXERO = _InvoiceResponse.Invoices[i].UpdatedDateUTC.Ticks; App.InvoiceDatabase.UpdateInvoiceNumber(invoiceInDatabase); List <LineItemSQLite> lineItemSQLiteList = App.LineItemDatabase.GetLineItemByInvoiceID(_InvoiceResponse.Invoices[i].InvoiceID); var maxItemLineID = App.LineItemDatabase.GetLastLineItem(); int itemLineID = maxItemLineID == null ? 1 : maxItemLineID.ItemLineID; foreach (LineItem lineItem in _InvoiceResponse.Invoices[i].LineItems) { ItemSQLite itemSQLite = App.ItemDatabase.GetItemByID(lineItem.ItemCode); if (itemSQLite == null) { ItemSQLite newItem = new ItemSQLite() { ItemCode = lineItem.ItemCode, Description = lineItem.Description, Weight = lineItem.Weight, }; if (_InvoiceResponse.Invoices[i].Type == "ACCPAY") { newItem.UnitCost = lineItem.UnitAmount; } App.ItemDatabase.InsertItem(newItem); itemLineID++; //create the id by referencing lineitemtable LineItemSQLite lineItemSQLite = new LineItemSQLite() { // if it's not set set the itemline id to 1 else increment 1 from the biggest value ItemLineID = itemLineID, InvoiceID = _InvoiceResponse.Invoices[i].InvoiceID, ItemCode = lineItem.ItemCode, Quantity = (int)lineItem.Quantity, UnitAmount = lineItem.UnitAmount, }; //Save to db App.LineItemDatabase.InsertLineItem(lineItemSQLite); } else { itemSQLite.Description = lineItem.Description; itemSQLite.ItemCode = lineItem.ItemCode; itemSQLite.Weight = lineItem.Weight; if (_InvoiceResponse.Invoices[i].Type == "ACCPAY") { itemSQLite.UnitCost = lineItem.UnitAmount; } App.ItemDatabase.UpdateItem(itemSQLite); LineItemSQLite theLineItem = lineItemSQLiteList.Where(lineItemX => lineItemX.ItemCode == lineItem.ItemCode).FirstOrDefault(); if (theLineItem == null) { itemLineID++; //create the id by referencing lineitemtable theLineItem = new LineItemSQLite() { // if it's not set set the itemline id to 1 else increment 1 from the biggest value ItemLineID = itemLineID, InvoiceID = _InvoiceResponse.Invoices[i].InvoiceID, ItemCode = lineItem.ItemCode, Quantity = (int)lineItem.Quantity, UnitAmount = lineItem.UnitAmount, }; //Save to db App.LineItemDatabase.InsertLineItem(theLineItem); } else { theLineItem.Quantity = (int)lineItem.Quantity; theLineItem.UnitAmount = lineItem.UnitAmount; App.LineItemDatabase.UpdateLineItem(theLineItem); lineItemSQLiteList.Remove(theLineItem); } } } if (lineItemSQLiteList.Count > 0) { foreach (LineItemSQLite lineItemSQLite in lineItemSQLiteList) { App.LineItemDatabase.DeleteLineItem(lineItemSQLite); } } } } else if (_InvoiceResponse.Invoices[i].Status == "VOIDED" && invoiceInDatabase != null) { App.InvoiceDatabase.DeleteInvoiceByInvoice(invoiceInDatabase); } } return(true); }