123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- using System;
- using System.Linq;
- using InABox.Clients;
- using InABox.Core;
- using InABox.Mobile;
- using Xamarin.Forms;
- namespace PRS.Mobile
- {
- public abstract class DigitalFormLookupView : ContentView,
- IDigitalFormField<DFLayoutLookupField, DFLayoutLookupFieldProperties, Guid, DFLayoutLookupValue>
- {
- private DFLayoutLookupField? _definition;
- public DFLayoutLookupField? Definition
- {
- get => _definition;
- set
- {
- _definition = value;
- Initialize(value ?? new DFLayoutLookupField());
- }
- }
- protected DFLayoutLookupValue _value;
- public Guid Value
- {
- get => _value.ID;
- set =>_value.ID = value;
- }
- public void Deserialize(DFLoadStorageEntry entry)
- {
- _value = Definition?.Properties.DeserializeValue(entry) ?? new DFLayoutLookupValue();
- UpdateUI();
- }
- public void Serialize(DFSaveStorageEntry entry)
- => Definition?.Properties.SerializeValue(entry, _value);
-
- public bool IsEmpty => Value == Guid.Empty;
- protected abstract void UpdateUI();
-
- private bool _readOnly;
- public bool ReadOnly
- {
- get => _readOnly;
- set
- {
- _readOnly = value;
- UpdateStatus();
- }
- }
- public object? OtherValue(String property)
- {
- if (_value.Values.TryGetValue(property, out object? result))
- return result;
- return null;
- }
-
- public event DigitalFormViewChangedHandler? ValueChanged;
- protected DigitalFormLookupView()
- {
- _value = new DFLayoutLookupValue();
- }
- public void DoLookup(Guid id)
- {
- if (Definition == null)
- return;
- var lookupType = CoreUtils.GetEntity(Definition.Properties.LookupType);
- var filter = Filter.Create(lookupType, "ID").IsEqualTo(id);
- var columns = Columns.Create(lookupType, ColumnTypeFlags.None)
- .Add("ID")
- .Add(Definition.Properties.Property)
- .Add(Definition.Properties.AdditionalPropertiesList)
- .Add(LookupFactory.DefineColumns(lookupType).ColumnNames());
-
- var row = Client.Create(lookupType).Query(filter, columns).Rows.FirstOrDefault();
- if (row == null)
- return;
-
- _value.ID = row.Get<Guid>("ID");
- _value.Text = LookupFactory.FormatLookup(lookupType, row.ToDictionary(), new[] { "ID" });
- _value.Values = row.ToDictionary();
- UpdateUI();
- }
-
- protected void DoLookup(object sender, MobileButtonClickEventArgs args)
- {
- if (Definition == null)
- return;
- var entityType = CoreUtils.GetEntity(Definition.Properties.LookupType);
- var modeltype = typeof(SelectionViewModel<>).MakeGenericType(entityType);
- var model = (ISelectionViewModel)Activator.CreateInstance(modeltype);
-
- if (!String.IsNullOrWhiteSpace(Definition.Properties.Filter))
- {
- var filtertype = typeof(Filter<>).MakeGenericType(entityType);
- model.Filter = Serialization.Deserialize(filtertype, Definition.Properties.Filter) as IFilter;
- }
- foreach (var additionalcolumn in Definition.Properties.AdditionalPropertiesList)
- model.VisibleColumns.Add(additionalcolumn);
- model.VisibleColumns.Add(Definition.Properties.Property);
-
- GenericSelectionPage _selector = new GenericSelectionPage("Select Value", model);
- _selector.OnItemSelected += (o,e) =>
- {
- _value.ID = e.Row.Get<Guid>("ID");
- _value.Text = e.Formatted;
- _value.Values = e.Row.ToDictionary();
- UpdateUI();
- var field = Definition.Properties.Property.Split('.').Last();
- var value = e.Row[field];
- ValueChanged?.Invoke(this, new DigitalFormViewChangedArgs(Definition,value));
- };
- Navigation.PushAsync(_selector);
- }
- private void Initialize(DFLayoutLookupField definition)
- {
- UpdateStatus();
- }
- protected abstract void UpdateStatus();
- }
- }
|