| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027 |
- using System;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using System.Threading;
- using System.Linq;
- using Xamarin.Forms;
- using XF.Material.Forms.UI;
- using XF.Material.Forms.UI.Dialogs;
- using InABox.Core;
- using InABox.Clients;
- using Comal.Classes;
- using System.IO;
- using Plugin.Media;
- using InABox.Mobile;
- using System.Linq.Expressions;
- using comal.timesheets.Deliveries;
- using Xamarin.Essentials;
- using Contact = Comal.Classes.Contact;
- using comal.timesheets.CustomControls;
- using Plugin.Media.Abstractions;
- namespace comal.timesheets
- {
- public partial class DeliveryDetails : ContentPage
- {
- private Delivery _delivery = null;
- private string address = "";
- public IEnumerable<Placemark> addresses;
- private Guid empID = Guid.Empty;
- private string empName = "";
- ToolbarItem completeButton;
- bool openingAnotherPage = false;
- ObservableList<Docket> dockets = new ObservableList<Docket>();
- ObservableList<Document> newPhotoDocuments = new ObservableList<Document>();
- List<Guid> existingDocumentIDs = new List<Guid>();
- List<Tuple<MaterialButton, Guid, String, List<DeliveryItem>>> requis = new List<Tuple<MaterialButton, Guid, String, List<DeliveryItem>>>();
- List<Tuple<MaterialButton, Guid, String, List<DeliveryItem>>> shipments = new List<Tuple<MaterialButton, Guid, String, List<DeliveryItem>>>();
- public DeliveryDetails(Guid deliveryID = default(Guid))
- {
- InitializeComponent();
- LoadPage(deliveryID);
- }
- async void LoadPage(Guid deliveryID)
- {
- try
- {
- Title = "Loading";
- await Task.Run(() =>
- {
- GetEmpIDAndName();
- if (deliveryID != Guid.Empty)
- {
- CoreTable table = new Client<Delivery>().Query(
- new Filter<Delivery>(x => x.ID).IsEqualTo(deliveryID), null, null);
- if (table.Rows.Count != 0)
- {
- foreach (var row in table.Rows)
- {
- _delivery = row.ToObject<Delivery>();
- }
- UpdateImages();
- DeliveryItemsCount();
- Device.BeginInvokeOnMainThread(() =>
- {
- completeButton = new ToolbarItem() { Text = "Record 'Delivered' Flag", Command = new DropDownMenuCommand(CompleteDelivery), Order = ToolbarItemOrder.Primary, IsEnabled = true };
- if (_delivery.Delivered != DateTime.MinValue) completeButton.IsEnabled = false;
- ToolbarItems.Add(completeButton);
- ItemsToBeDelivered.IsVisible = true;
- Title = _delivery.Number.ToString();
- if (_delivery.Location.Longitude != 0 && _delivery.Location.Latitude != 0)
- {
- DeliveredFlagFrame.IsVisible = true;
- DeliveredLbl.IsVisible = true;
- DeliveredDetails.Text = "Loading Delivered Flag Details";
- if (string.IsNullOrWhiteSpace(_delivery.Location.Address))
- {
- GetLocationFromDetails();
- }
- else
- ShowDeliveredDetails(false);
- }
- });
- }
- }
- else if (deliveryID == Guid.Empty)
- {
- _delivery = new Delivery();
- Device.BeginInvokeOnMainThread(() =>
- {
- var CreateDeliveryButton = new ToolbarItem() { Text = "Create Delivery/Pickup", Command = new Command(CreateDelivery) };
- ToolbarItems.Add(CreateDeliveryButton);
- ItemsFrame.IsVisible = false;
- loadDeliveryItems.IsVisible = false;
- Title = "New Delivery";
- _delivery.Employee.ID = empID;
- _delivery.Employee.Name = empName;
- });
- }
- Device.BeginInvokeOnMainThread(() =>
- {
- PopulateFields();
- CheckKanbanSent();
- });
- });
- }
- catch { }
- }
- void GetEmpIDAndName()
- {
- empID = GlobalVariables.EmpID;
- empName = GlobalVariables.EmpName;
- }
- protected async override void OnDisappearing()
- {
- await Task.Run(() =>
- {
- if (_delivery.ID != Guid.Empty && !openingAnotherPage)
- {
- try
- {
- new Client<Delivery>().Save(_delivery, "Updated from mobile device");
- }
- catch (Exception ex)
- {
- DisplayAlert("Error saving delivery", ex.Message, "OK");
- }
- }
- });
- base.OnDisappearing();
- }
- protected override void OnAppearing()
- {
- openingAnotherPage = false;
- base.OnAppearing();
- }
- #region Create Delivery or add delivered flag
- async void CreateDelivery()
- {
- try
- {
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Saving Delivery"))
- {
- _delivery.Due = dueDate.Date; //unable to make duedate changed event without crashing the screen on startup....
- new Client<Delivery>().Save(_delivery, "Updated From Mobile Device");
- if (newPhotoDocuments.Count != 0)
- {
- new Client<Document>().Save(newPhotoDocuments, "Photo Taken on Device");
- ObservableList<DeliveryDocument> newDeliveryDocuments = new ObservableList<DeliveryDocument>();
- foreach (Document doc in newPhotoDocuments)
- {
- var deliveryDocument = new DeliveryDocument();
- deliveryDocument.EntityLink.ID = _delivery.ID;
- deliveryDocument.DocumentLink.ID = doc.ID;
- deliveryDocument.DocumentLink.FileName = doc.FileName;
- newDeliveryDocuments.Add(deliveryDocument);
- }
- new Client<DeliveryDocument>().Save(newDeliveryDocuments, "Photo Taken on Device");
- newPhotoDocuments.Clear();
- }
- }
- string successMessage = "Delivery Created" + System.Environment.NewLine + "Delivery Number: " + _delivery.Number;
- }
- catch (Exception ex)
- {
- DisplayAlert("Error creating delivery", ex.Message, "OK");
- }
- await Navigation.PopAsync();
- }
- private async void CompleteDelivery()
- {
- try
- {
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Getting Location..Please wait"))
- {
- LocationServices locationServices = new LocationServices();
- locationServices.OnLocationFound += LocationFound;
- locationServices.OnLocationError += LocationError;
- locationServices.GetLocation();
- Thread.Sleep(1000); //"Getting Location" notification disappears too quickly on some devices - ensures a minimum of 1 second while location tasks execute on other threads
- }
- }
- catch { }
- }
- private async void LocationFound(LocationServices sender)
- {
- try
- {
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Getting Location..Please wait"))
- {
- _delivery.Location.Latitude = sender.Latitude;
- _delivery.Location.Longitude = sender.Longitude;
- _delivery.Location.Timestamp = DateTime.Now;
- _delivery.Location.Address = sender.Address;
- _delivery.DeliveredBy.ID = empID;
- _delivery.DeliveredBy.Name = empName;
- address = sender.Address;
- _delivery.Delivered = DateTime.Now;
- await Task.Run(() =>
- {
- new Client<Delivery>().Save(_delivery, "Updated From Mobile Device");
- });
- }
- await DisplayAlert("Success", "Delivered: " + _delivery.Delivered.ToString("hh:mm:ss tt dd-MMM-yy")
- + System.Environment.NewLine + "Location Now: " + address
- , "OK");
- ShowDeliveredDetails();
- }
- catch { }
- }
- private void LocationError(LocationServices sender, Exception error)
- {
- DisplayAlert("GPS Error", error.Message, "OK");
- }
- #endregion
- #region Load Screen values from Database
- private void PopulateFields()
- {
- if (!string.IsNullOrWhiteSpace(_delivery.Job.Name)) JobName.Text = _delivery.Job.Name + " (" + _delivery.Job.JobNumber + ")";
- TypeLbl.Text = _delivery.Type.Description;
- ContactNameLbl.Text = _delivery.Contact.Name;
- streetEdt.Text = _delivery.Address.Street;
- cityEdt.Text = _delivery.Address.City;
- statePicker.SelectedIndex = SelectState();
- postCodeEdt.Text = _delivery.Address.PostCode;
- EmployeeName.Text = _delivery.Employee.Name;
- deliveryNotesEdt.Text = _delivery.Notes;
- if (_delivery.Due != DateTime.MinValue) dueDate.Date = _delivery.Due;
- else dueDate.Date = DateTime.Today;
- }
- public IEnumerable<Placemark> Addresses
- {
- get { return addresses; }
- set { addresses = value; ShowDeliveredDetails(); }
- }
- private void ShowDeliveredDetails(bool wait = true)
- {
- Task.Run(() =>
- {
- if (wait)
- {
- Thread.Sleep(5000);
- }
- Device.BeginInvokeOnMainThread(() =>
- {
- completeButton.IsEnabled = false;
- DeliveredFlagFrame.IsVisible = true;
- DeliveredLbl.IsVisible = true;
- if (string.IsNullOrWhiteSpace(address))
- {
- if (!string.IsNullOrWhiteSpace(_delivery.Location.Address))
- address = _delivery.Location.Address;
- else
- address = "(Address service failed). Driver was at Latitude: " + _delivery.Location.Latitude + " Longitude: " + _delivery.Location.Longitude;
- }
- DeliveredDetails.Text = address + " at " + _delivery.Delivered.ToString("hh:mm:ss tt dd MMM yy") + System.Environment.NewLine
- + "by: " + _delivery.DeliveredBy.Name;
- openMapBtn.IsEnabled = true;
- });
- });
-
- }
- private async void GetLocationFromDetails()
- {
- await Task.Run(async () =>
- {
- try
- {
- Addresses = await Geocoding.GetPlacemarksAsync(_delivery.Location.Latitude, _delivery.Location.Longitude);
- Placemark placemark = null;
- foreach (var cur in Addresses)
- {
- placemark = cur;
- if (placemark != null)
- {
- address = String.Format("{0} {1} {2}", placemark.SubThoroughfare, placemark.Thoroughfare, placemark.Locality);
- _delivery.Location.Address = address;
- return;
- }
- }
-
- }
- catch
- {
- address = "Longitude: " + _delivery.Location.Longitude + "Latitude: " + _delivery.Location.Latitude + " Address service failed to load address";
- }
- });
- }
- private async void OpenMapBtn_Clicked(object sender, EventArgs e)
- {
- var location = new Xamarin.Essentials.Location(_delivery.Location.Latitude, _delivery.Location.Longitude);
- var options = new MapLaunchOptions { };
- await Map.OpenAsync(location, options);
- }
- private async void UpdateImages()
- {
- try
- {
- if (_delivery.Documents != 0)
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- photosLbl.Text = "Loading " + _delivery.Documents + " Photo(s)";
- photosLbl.TextColor = Color.DarkOrange;
- });
- int count = _delivery.Documents;
- CoreTable table = new Client<DeliveryDocument>().Query(
- new Filter<DeliveryDocument>(x => x.EntityLink.ID).IsEqualTo(_delivery.ID),
- new Columns<DeliveryDocument>(x => x.DocumentLink.ID),
- null
- );
- if (table.Rows.Count != 0)
- {
- foreach (var row in table.Rows)
- {
- List<object> list = row.Values;
- if (list[0] == null) { list[0] = Guid.Empty; }
- Guid deliveryDocLinkID = Guid.Parse(list[0].ToString());
- existingDocumentIDs.Add(deliveryDocLinkID);
- new Client<Document>().Query(
- new Filter<Document>(x => x.ID).IsEqualTo(deliveryDocLinkID),
- null,
- null,
- (t, e) =>
- {
- CoreRow docrow = t.Rows.FirstOrDefault();
- if (docrow != null)
- {
- byte[] data = docrow.Get<Document, byte[]>(x => x.Data);
- ImageSource src = ImageSource.FromStream(() => new MemoryStream(data));
- Image img = new Image();
- img.HeightRequest = 150;
- img.WidthRequest = 150;
- img.Aspect = Aspect.AspectFit;
- img.Source = src;
- img.GestureRecognizers.Add(new TapGestureRecognizer
- {
- Command = new Command(OnTap),
- CommandParameter = src,
- NumberOfTapsRequired = 1
- });
- Device.BeginInvokeOnMainThread(() =>
- {
- ImageScroller.IsVisible = true;
- images.Children.Add(img);
- count = count - 1;
- photosLbl.Text = "Loading " + count + " Photo(s)";
- if (count == 0)
- {
- photosLbl.Text = "Photos";
- photosLbl.TextColor = Color.Default;
- }
- });
- }
- }
- );
- }
- }
- }
- }
- catch
- {
- }
- }
- private async void DeliveryItemsCount()
- {
- try
- {
- await Task.Run(() =>
- {
- var table = new Client<DeliveryItem>().Query(
- new Filter<DeliveryItem>(x => x.Delivery.ID).IsEqualTo(_delivery.ID),
- new Columns<DeliveryItem>(
- X => X.ManufacturingPacketLink.SetoutLink.Number,
- X => X.ShipmentCode,
- X => X.Description,
- X => X.RequisitionLink.Number
- ),
- new SortOrder<DeliveryItem>(x => x.ShipmentCode)
- );
- if (table.Rows.Count != 0)
- {
- string emptyString = "";
- foreach (var row in table.Rows)
- {
- List<object> list = row.Values;
- if (list[0] == null) { list[0] = emptyString; }
- if (list[1] == null) { list[1] = emptyString; }
- if (list[2] == null) { list[2] = emptyString; }
- if (list[3] == null) { list[3] = emptyString; }
- Docket docket = new Docket();
- docket.Setout = "Setout #" + list[0].ToString();
- docket.Rack = "Rack: " + list[1].ToString();
- docket.Description = list[2].ToString();
- docket.Requi = "Requi: " + list[3].ToString();
- dockets.Add(docket);
- }
- }
- Device.BeginInvokeOnMainThread(() =>
- {
- if (table.Rows.Count != 0)
- {
- loadDeliveryItems.Text = "View " + table.Rows.Count + " items";
- loadDeliveryItems.IsEnabled = true;
- }
- else
- {
- loadDeliveryItems.Text = "0 Items Found";
- }
- });
- }
- );
- }
- catch { }
- }
- #endregion
- #region Values Changed Events
- private async void SelectType_Clicked(object sender, EventArgs e)
- {
- try
- {
- Dictionary<string, Guid> deliveryTypePairs = new Dictionary<string, Guid>();
- List<string> _deliveryTypes = new List<string>();
- var table = new Client<DeliveryType>().Query(new Filter<DeliveryType>(x => x.Description).IsNotEqualTo(string.Empty));
- foreach (CoreRow row in table.Rows)
- {
- DeliveryType _deliveryType = row.ToObject<DeliveryType>();
- _deliveryTypes.Add(_deliveryType.Description);
- deliveryTypePairs.Add(_deliveryType.Description, _deliveryType.ID);
- }
- if (_deliveryTypes.Count != 0)
- {
- string[] array = _deliveryTypes.ToArray();
- string chosenOption = await DisplayActionSheet("Choose Delivery Type", "Cancel", null, array);
- if (!chosenOption.Equals("Cancel"))
- {
- _delivery.Type.Description = chosenOption;
- TypeLbl.Text = _delivery.Type.Description;
- _delivery.Type.ID = deliveryTypePairs[chosenOption];
- }
- }
- }
- catch { }
- }
- private void SelectJob_Clicked(object sender, EventArgs e)
- {
- openingAnotherPage = true;
- JobSelectionPage jobSelectionPage = new JobSelectionPage();
- jobSelectionPage.OnItemSelected += (() =>
- {
- _delivery.Job.ID = jobSelectionPage.Job.ID;
- _delivery.Job.Name = jobSelectionPage.Job.Name;
- _delivery.Job.JobNumber = jobSelectionPage.Job.JobNumber;
- JobName.Text = _delivery.Job.Name + " (" + _delivery.Job.JobNumber + ")";
- openingAnotherPage = false;
- });
- Navigation.PushAsync(jobSelectionPage);
- }
- #region Address
- private void StreetEdt_Changed(object sender, EventArgs e)
- {
- _delivery.Address.Street = streetEdt.Text;
- }
- private void CityEdt_Changed(object sender, EventArgs e)
- {
- _delivery.Address.City = cityEdt.Text;
- }
- private void StatePicker_Changed(object sender, EventArgs e)
- {
- _delivery.Address.State = statePicker.SelectedItem.ToString();
- }
- private void PostCode_Changed(object sender, EventArgs e)
- {
- _delivery.Address.PostCode = postCodeEdt.Text;
- }
- private int SelectState()
- {
- int state = 0;
- switch (_delivery.Address.State)
- {
- case "Western Australia":
- state = 0;
- break;
- case "Victoria":
- state = 1;
- break;
- case "South Australia":
- state = 2;
- break;
- case "New South Wales":
- state = 3;
- break;
- case "Queensland":
- state = 4;
- break;
- case "Tasmania":
- state = 5;
- break;
- default:
- state = 0;
- break;
- }
- return state;
- }
- #endregion Address
- private async void SelectContact_Clicked(object sender, EventArgs e)
- {
- try
- {
- openingAnotherPage = true;
- GenericSelectionPage page = new GenericSelectionPage
- (
- "Select Contact",
- new SelectionViewModel<Contact>
- (
- new Filter<Contact>(x => x.ID).IsNotEqualTo(Guid.Empty).And(x => x.Address.Street).IsNotEqualTo(string.Empty),
- new Expression<Func<Contact, object>>[] { x => x.Name, x => x.Address.Street, x => x.Address.City },
- new Expression<Func<Contact, object>>[] { x => x.Address.PostCode, x => x.ID },
- new SortOrder<Contact>(x => x.Name)
- ));
- page.OnItemSelected += (row) =>
- {
- var contact = row.ToObject<Contact>();
- _delivery.Contact.Address.Street = contact.Address.Street;
- _delivery.Contact.Address.City = contact.Address.City;
- _delivery.Contact.Address.PostCode = contact.Address.PostCode;
- _delivery.Contact.Address.State = contact.Address.State;
- Device.BeginInvokeOnMainThread(() =>
- {
- streetEdt.Text = _delivery.Contact.Address.Street;
- cityEdt.Text = _delivery.Contact.Address.City;
- postCodeEdt.Text = _delivery.Contact.Address.PostCode;
- ContactNameLbl.Text = _delivery.Contact.Name;
- openingAnotherPage = false;
- });
- };
- Navigation.PushAsync(page);
- }
- catch { }
- }
- private void SelectCustomerPage()
- {
- //if (_searching)
- // return;
- //else
- //{
- // _searching = true;
- // GenericSelectionPage page = new GenericSelectionPage
- // (
- // "Select Customer",
- // new SelectionViewModel<CustomerContact>
- // (
- // new Filter<CustomerContact>(x => x.Contact.ID).IsNotEqualTo(Guid.Empty).And(x => x.Contact.Address.Street).IsNotEqualTo(string.Empty),
- // new Expression<Func<CustomerContact, object>>[] { x => x.Contact.Name, x => x.Contact.Address.Street, x => x.Contact.Address.City },
- // new Expression<Func<CustomerContact, object>>[] { x => x.Contact.Address.PostCode, x => x.Contact.ID, x => x.Contact },
- // new SortOrder<CustomerContact>(x => x.Contact.Name)
- // ));
- // page.OnItemSelected += (row) =>
- // {
- // var customerContact = row.ToObject<CustomerContact>();
- // _delivery.Contact.Address.Street = customerContact.Contact.Address.Street;
- // _delivery.Contact.Address.City = customerContact.Contact.Address.City;
- // _delivery.Contact.Address.PostCode = customerContact.Contact.Address.PostCode;
- // _delivery.Contact.Address.State = customerContact.Contact.Address.State;
- // Device.BeginInvokeOnMainThread(() =>
- // {
- // streetEdt.Text = _delivery.Contact.Address.Street;
- // cityEdt.Text = _delivery.Contact.Address.City;
- // postCodeEdt.Text = _delivery.Contact.Address.PostCode;
- // ContactNameLbl.Text = _delivery.Contact.Name;
- // });
- // };
- // Navigation.PushAsync(page);
- //}
- }
- private void SelectSupplierPage()
- {
- //if (_searching)
- // return;
- //else
- //{
- // _searching = true;
- // GenericSelectionPage page = new GenericSelectionPage
- // (
- // "Select Supplier",
- // new SelectionViewModel<SupplierContact>
- // (
- // new Filter<SupplierContact>(x => x.Contact.ID).IsNotEqualTo(Guid.Empty).And(x =>x.Contact.Address.Street).IsNotEqualTo(string.Empty),
- // new Expression<Func<SupplierContact, object>>[] { x => x.Contact.Name, x => x.Contact.Address.Street, x => x.Contact.Address.City },
- // new Expression<Func<SupplierContact, object>>[] { x => x.Contact.Address.PostCode, x => x.Contact.ID, x => x.Contact },
- // new SortOrder<SupplierContact>(x => x.Contact.Name)
- // ));
- // page.OnItemSelected += (row) =>
- // {
- // SupplierContact supplierContact = row.ToObject<SupplierContact>();
- // _delivery.Contact.ID = supplierContact.Contact.ID;
- // _delivery.Contact.Address.Street = supplierContact.Contact.Address.Street;
- // _delivery.Contact.Address.City = supplierContact.Contact.Address.City;
- // _delivery.Contact.Address.PostCode = supplierContact.Contact.Address.PostCode;
- // _delivery.Contact.Address.State = supplierContact.Contact.Address.State;
- // Device.BeginInvokeOnMainThread(() =>
- // {
- // streetEdt.Text = _delivery.Contact.Address.Street;
- // cityEdt.Text = _delivery.Contact.Address.City;
- // postCodeEdt.Text = _delivery.Contact.Address.PostCode;
- // ContactNameLbl.Text = _delivery.Contact.Name;
- // });
- // };
- // Navigation.PushAsync(page);
- //}
- }
- private void SelectOtherPage()
- {
- //if (_searching)
- // return;
- //else
- //{
- // _searching = true;
- // GenericSelectionPage page = new GenericSelectionPage
- // (
- // "Select",
- // new SelectionViewModel<Comal.Classes.Contact>
- // (
- // new Filter<Comal.Classes.Contact>(x => x.Name).IsNotEqualTo(String.Empty).And(x => x.Address.Street).IsNotEqualTo(string.Empty),
- // new Expression<Func<Comal.Classes.Contact, object>>[] { x => x.Name, x => x.Address.Street, x => x.Address.City },
- // new Expression<Func<Comal.Classes.Contact, object>>[] { },
- // new SortOrder<Comal.Classes.Contact>(x => x.Name)
- // ));
- // page.OnItemSelected += (row) =>
- // {
- // Comal.Classes.Contact contact = row.ToObject<Comal.Classes.Contact>();
- // _delivery.Contact.ID = contact.ID;
- // _delivery.Contact.Address.Street = contact.Address.Street;
- // _delivery.Contact.Address.City = contact.Address.City;
- // _delivery.Contact.Address.PostCode = contact.Address.PostCode;
- // _delivery.Contact.Address.State = contact.Address.State;
- // Device.BeginInvokeOnMainThread(() =>
- // {
- // streetEdt.Text = _delivery.Contact.Address.Street;
- // cityEdt.Text = _delivery.Contact.Address.City;
- // postCodeEdt.Text = _delivery.Contact.Address.PostCode;
- // ContactNameLbl.Text = _delivery.Contact.Name;
- // });
- // };
- // Navigation.PushAsync(page);
- //}
- }
- private void SelectEmployee_Clicked(object sender, EventArgs e)
- {
- openingAnotherPage = true;
- EmployeeSelectionPage employeeSelectionPage = new EmployeeSelectionPage();
- employeeSelectionPage.OnItemSelected += (() =>
- {
- _delivery.Employee.ID = employeeSelectionPage.employee.ID;
- _delivery.Employee.Name = employeeSelectionPage.employee.Name;
- EmployeeName.Text = employeeSelectionPage.employee.Name;
- openingAnotherPage = false;
- });
- Navigation.PushAsync(employeeSelectionPage);
- }
- private void DeliveryNotes_Completed(object sender, EventArgs e)
- {
- _delivery.Notes = deliveryNotesEdt.Text;
- }
- #endregion
- #region Photos
- async void ChooseImage_Clicked(System.Object sender, System.EventArgs e)
- {
- try
- {
- openingAnotherPage = true;
- await CrossMedia.Current.Initialize();
- if (!CrossMedia.Current.IsPickPhotoSupported)
- {
- await DisplayAlert("No Library", ":( No Photo Library available.", "OK");
- openingAnotherPage = false;
- return;
- }
- var file = await CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions()
- {
- CompressionQuality = 10,
- PhotoSize = Plugin.Media.Abstractions.PhotoSize.Full
- });
- if (file == null)
- {
- openingAnotherPage = false;
- return;
- }
- Image img = null;
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Adding Photo"))
- {
- var memoryStream = new MemoryStream();
- file.GetStream().CopyTo(memoryStream);
- var data = memoryStream.ToArray();
- Document doc = new Document()
- {
- FileName = Path.GetFileName(file.Path),
- Data = data,
- CRC = CoreUtils.CalculateCRC(data),
- TimeStamp = DateTime.Now
- };
- SavePhoto(doc);
- ImageSource src = ImageSource.FromStream(() => new MemoryStream(data));
- img = new Image();
- img.HeightRequest = 150;
- img.WidthRequest = 150;
- img.Aspect = Aspect.AspectFit;
- img.Source = src;
- img.GestureRecognizers.Add(new TapGestureRecognizer
- {
- Command = new Command(OnTap),
- CommandParameter = src,
- NumberOfTapsRequired = 1
- });
- file.Dispose();
- }
- if (img != null)
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- ImageScroller.IsVisible = true;
- images.Children.Add(img);
- openingAnotherPage = false;
- });
- await pageScroller.ScrollToAsync(ImageScroller, ScrollToPosition.Center, false);
- }
- }
- catch { }
- }
- async void SavePhoto(Document doc)
- {
- try
- {
- await Task.Run(() =>
- {
- if (_delivery.ID != Guid.Empty)
- {
- new Client<Document>().Save(doc, "Photo Taken on Device");
- var deliveryDocument = new DeliveryDocument();
- deliveryDocument.EntityLink.ID = _delivery.ID;
- deliveryDocument.DocumentLink.ID = doc.ID;
- deliveryDocument.DocumentLink.FileName = doc.FileName;
- new Client<DeliveryDocument>().Save(deliveryDocument, "Photo Taken on Device");
- existingDocumentIDs.Add(doc.ID);
- }
- else
- {
- newPhotoDocuments.Add(doc);
- }
- });
- }
- catch { }
- }
- async void TakePhoto_Clicked(System.Object sender, System.EventArgs e)
- {
- try
- {
- openingAnotherPage = true;
- await CrossMedia.Current.Initialize();
- if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
- {
- await DisplayAlert("No Camera", ":( No camera available.", "OK");
- openingAnotherPage = false;
- return;
- }
- String filename = String.Format("{0:yyyy-MM-dd HH:mm:ss.fff}.png", DateTime.Now);
- var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
- {
- Name = filename,
- CompressionQuality = 10,
- PhotoSize = Plugin.Media.Abstractions.PhotoSize.Full
- });
- if (file == null)
- {
- openingAnotherPage = false;
- return;
- }
- Image img = null;
- using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Adding Photo"))
- {
- var memoryStream = new MemoryStream();
- file.GetStream().CopyTo(memoryStream);
- var data = memoryStream.ToArray();
- Document doc = new Document()
- {
- FileName = filename,
- Data = data,
- CRC = CoreUtils.CalculateCRC(data),
- TimeStamp = DateTime.Now
- };
- SavePhoto(doc);
- ImageSource src = ImageSource.FromStream(() => new MemoryStream(data));
- img = new Image();
- img.HeightRequest = 150;
- img.WidthRequest = 150;
- img.Aspect = Aspect.AspectFit;
- img.Source = src;
- img.GestureRecognizers.Add(new TapGestureRecognizer
- {
- Command = new Command(OnTap),
- CommandParameter = src,
- NumberOfTapsRequired = 1
- });
- file.Dispose();
- }
- if (img != null)
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- ImageScroller.IsVisible = true;
- images.Children.Add(img);
- openingAnotherPage = false;
- });
- await pageScroller.ScrollToAsync(ImageScroller, ScrollToPosition.Center, false);
- }
- }
- catch { }
- }
- private void OnTap(object obj)
- {
- ImageViewer viewer = new ImageViewer(obj as ImageSource);
- Navigation.PushAsync(viewer);
- }
- #endregion
- private void Docket_Clicked(object sender, EventArgs e)
- {
- try
- {
- openingAnotherPage = true;
- var docket = new DeliveryDocket(_delivery.Number, dockets);
- Navigation.PushAsync(docket);
- }
- catch { }
- }
- #region last row buttons
- void ConvertToTaskBtn_Clicked(Object sender, EventArgs e)
- {
- try
- {
- openingAnotherPage = true;
- EmployeeSelectionPage employeeSelectionPage = new EmployeeSelectionPage();
- employeeSelectionPage.OnItemSelected += (() =>
- {
- Kanban kanban = new Kanban();
- kanban.EmployeeLink.ID = employeeSelectionPage.employee.ID;
- openingAnotherPage = false;
- ConfirmPerson(employeeSelectionPage.employee.Name, kanban);
- });
- Navigation.PushAsync(employeeSelectionPage);
- }
- catch { }
- }
- async void ConfirmPerson(string name, Kanban kanban)
- {
- string chosenOption = await DisplayActionSheet("Confirm send to " + name, "Cancel", null, "Yes", "No");
- switch (chosenOption)
- {
- case "Cancel":
- break;
- case "No":
- break;
- case "Yes":
- CreateKanban(kanban);
- break;
- default:
- break;
- }
- }
- async void CreateKanban(Kanban kanban)
- {
- try
- {
- convertToTaskBtn.Text = "Saving..";
- convertToTaskBtn.IsEnabled = false;
- await Task.Run(() =>
- {
- kanban.ManagerLink.ID = GlobalVariables.EmpID;
- kanban.Title = "Delivery " + _delivery.Number + System.Environment.NewLine +
- "Delivery Type: " + _delivery.Type.Description + System.Environment.NewLine +
- GlobalVariables.EmpName + " converted to Task for further action";
- kanban.DueDate = DateTime.Today;
- kanban.Category = "Open";
- if (!_delivery.Job.ID.Equals(Guid.Empty)) kanban.JobLink.ID = _delivery.Job.ID;
- kanban.Description = _delivery.Notes;
- new Client<Kanban>().Save(kanban, "Kanban Created from Deliveries Module");
- _delivery.KanbanNumber = kanban.Number;
- new Client<Delivery>().Save(_delivery, "Updated From Mobile Device");
- List<KanbanDocument> kanbanDocuments = new List<KanbanDocument>();
- if (existingDocumentIDs.Count != 0)
- {
- foreach (Guid id in existingDocumentIDs)
- {
- KanbanDocument kanbanDocument = new KanbanDocument();
- kanbanDocument.DocumentLink.ID = id;
- kanbanDocument.EntityLink.ID = kanban.ID;
- kanbanDocuments.Add(kanbanDocument);
- }
- }
- if (kanbanDocuments.Count != 0)
- {
- new Client<KanbanDocument>().Save(kanbanDocuments, "Updated from mobile device");
- }
- List<KanbanSubscriber> subscribers = new List<KanbanSubscriber>();
- KanbanSubscriber sub1 = new KanbanSubscriber();
- sub1.Kanban.ID = kanban.ID;
- sub1.Employee.ID = kanban.EmployeeLink.ID;
- sub1.Assignee = true;
- subscribers.Add(sub1);
- //KanbanSubscriber sub2 = new KanbanSubscriber();
- //sub2.Kanban.ID = kanban.ID;
- //sub2.Employee.ID = kanban.ManagerLink.ID;
- //sub2.Manager = true;
- //if (sub2.Employee.ID != sub1.Employee.ID)
- // subscribers.Add(sub2);
- new Client<KanbanSubscriber>().Save(subscribers, "Updated from mobile device");
- Device.BeginInvokeOnMainThread(() =>
- {
- convertToTaskBtn.Text = "Saved To Task " + kanban.Number;
- });
- });
- //save kanban - return kanban ID
- //load list of photos - save as kanbandocs
- //save subscribers
- }
- catch { }
- }
- void CheckKanbanSent()
- {
- if (_delivery.KanbanNumber != 0)
- {
- convertToTaskBtn.Text = "Saved To Task " + _delivery.KanbanNumber;
- convertToTaskBtn.IsEnabled = false;
- }
- if (_delivery.ID == Guid.Empty)
- {
- convertToTaskBtn.IsEnabled = false;
- }
- }
- #endregion
- }
- }
|