123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using IDigitalFormInstance = InABox.Core.IDigitalFormInstance;
- namespace PRS.Mobile
- {
- public class DigitalFormHostModel<TEntity, TEntityLink, TInstance> : IDigitalFormHostModel
- where TEntity : Entity, IRemotable, IPersistent, new()
- where TEntityLink : EntityLink<TEntity>, new()
- where TInstance : Entity, IRemotable, IPersistent, IDigitalFormInstance<TEntityLink>, new()
- {
- public IDigitalFormDataModel DigitalFormDataModel { get; set; }
- public DFLayout DFLayout { get; set; }
- public DigitalFormLayout DigitalFormLayout { get; set; }
- public Entity Entity { get; set; }
- public bool ReadOnly { get; set; }
- public bool NewForm { get; set; }
-
- public DigitalFormHostModel()
- {
- DFLayout = new DFLayout();
- NewForm = true;
- ReadOnly = false;
- }
- public void LoadItems(Entity parent, Guid formid, Guid instanceid, DigitalFormLayout? layout = null)
- {
- List<DigitalFormVariable> variables = new List<DigitalFormVariable>();
-
- var loadLayout = Task.Run(() =>
- {
- DigitalFormLayout = layout ?? QueryDigitalFormLayout(formid);
- });
-
- var loadDFDataModel = Task.Run(() =>
- {
- variables = QueryVariables(formid);
- DigitalFormDataModel = new DigitalFormDataModel<TEntity, TEntityLink, TInstance>(parent.ID, instanceid, variables.ToArray());
- DigitalFormDataModel.Load(null);
- Entity = DigitalFormDataModel.Entity;
- });
-
- Task.WaitAll(loadLayout, loadDFDataModel);
-
- DFLayout.LoadLayout(DigitalFormLayout.Layout);
-
- DFLayout.LoadVariables(variables);
-
- DigitalFormDataModel.Instance.Form.ID = DigitalFormLayout.Form.ID;
-
- DigitalFormDataModel.Variables = variables.ToArray();
-
- if (!string.IsNullOrWhiteSpace(DigitalFormDataModel.Instance.FormData))
- NewForm = false;
- if (DigitalFormDataModel.Instance.FormCompleted != DateTime.MinValue)
- ReadOnly = true;
-
- }
-
- public void LoadItems(TEntity parent, Guid formid, TInstance instance, DigitalFormLayout? layout = null)
- {
- List<DigitalFormVariable> variables = new List<DigitalFormVariable>();
-
- var loadLayout = Task.Run(() =>
- {
- DigitalFormLayout = layout ?? QueryDigitalFormLayout(formid);
- });
-
- var loadDFDataModel = Task.Run(() =>
- {
- variables = QueryVariables(formid);
- DigitalFormDataModel = new DigitalFormDataModel<TEntity, TEntityLink, TInstance>(parent, instance, variables.ToArray());
- DigitalFormDataModel.Load(null);
- Entity = DigitalFormDataModel.Entity;
- });
-
- Task.WaitAll(loadLayout, loadDFDataModel);
-
- DFLayout.LoadLayout(DigitalFormLayout.Layout);
-
- DFLayout.LoadVariables(variables);
-
- DigitalFormDataModel.Instance.Form.ID = DigitalFormLayout.Form.ID;
-
- DigitalFormDataModel.Variables = variables.ToArray();
-
- if (!string.IsNullOrWhiteSpace(DigitalFormDataModel.Instance.FormData))
- NewForm = false;
- if (DigitalFormDataModel.Instance.FormCompleted != DateTime.MinValue)
- ReadOnly = true;
-
- }
- private IDigitalFormInstance GetInstance(Guid iD)
- {
- return new Client<TInstance>().Query(
- new Filter<TInstance>(x => x.ID).IsEqualTo(iD)
- ).Rows.FirstOrDefault().ToObject<TInstance>();
- }
- public DigitalFormLayout? QueryDigitalFormLayout(Guid formid)
- {
- CoreTable layouts = new Client<DigitalFormLayout>().Query(
- new Filter<DigitalFormLayout>(x => x.Form.ID).IsEqualTo(formid)
- .And(x => x.Active).IsEqualTo(true),
- new Columns<DigitalFormLayout>(ColumnTypeFlags.None).Add(x => x.ID)
- .Add(x => x.Form.ID)
- .Add(x => x.Form.AppliesTo)
- .Add(x => x.Layout)
- .Add(x => x.Type)
- );
- var row = layouts.Rows.FirstOrDefault(r => r.Get<DigitalFormLayout, DFLayoutType>(c => c.Type) == DFLayoutType.Mobile)
- ?? layouts.Rows.FirstOrDefault();
- DigitalFormLayout? layout = row?.ToObject<DigitalFormLayout>();
- return layout;
- }
-
- public List<DigitalFormVariable> QueryVariables(Guid formid)
- {
- List<DigitalFormVariable> variables = new List<DigitalFormVariable>();
-
- var table = new Client<DigitalFormVariable>().Query(
- new Filter<DigitalFormVariable>(x => x.Form.ID)
- .IsEqualTo(formid),
- new Columns<DigitalFormVariable>(ColumnTypeFlags.None).Add(x => x.Code)
- .Add(x => x.Parameters)
- .Add(x => x.Description)
- .Add(x => x.VariableType),
- null
- );
-
- foreach (CoreRow coreRow in table.Rows)
- variables.Add(CreateVariable(coreRow));
- return variables;
- }
-
- // public List<DigitalFormVariable> QueryVariables(DigitalFormLayout layout)
- // {
- // List<DigitalFormVariable> variables = new List<DigitalFormVariable>();
- //
- // var table = new Client<DigitalFormVariable>().Query(
- // new Filter<DigitalFormVariable>(x => x.Form.ID).IsEqualTo(layout.Form.ID),
- // new Columns<DigitalFormVariable>(x => x.Code, x => x.Parameters, x => x.Description, x => x.VariableType),
- // null
- // );
- // foreach (CoreRow coreRow in table.Rows)
- // variables.Add(CreateVariable(coreRow));
- //
- // return variables;
- // }
-
- private DigitalFormVariable CreateVariable(CoreRow row)
- {
- DigitalFormVariable v = new DigitalFormVariable();
- v.Code = row.Get<DigitalFormVariable, string>(x => x.Code);
- v.Parameters = row.Get<DigitalFormVariable, string>(x => x.Parameters);
- v.Description = row.Get<DigitalFormVariable, string>(x => x.Description);
- v.VariableType = row.Get<DigitalFormVariable, string>(x => x.VariableType);
- return v;
- }
- // public void SetPropertyValues(QAFormViewer viewer) //currently does not include Employee Forms
- // {
- // try
- // {
- // if (DigitalFormLayout.Form.AppliesTo.Equals("Kanban"))
- // {
- // foreach (KeyValuePair<string, string> pair in viewer.EntityResults)
- // {
- // if (pair.Key.Contains("ID"))
- // {
- // //this only sets the entity lookup.ID, not the description or code - is this an issue??
- // CoreUtils.SetPropertyValue(Entity, pair.Key, Guid.Parse(pair.Value));
- // }
- // else if (DateTime.TryParse(pair.Value, out DateTime datetime))
- // {
- // string parsedDate = "";
- // parsedDate = datetime.ToString("yyyy-mm-dd hh:mm:ss.zzz"); ;
- // CoreUtils.SetPropertyValue(Entity, pair.Key, parsedDate);
- // }
- // else
- // {
- // CoreUtils.SetPropertyValue(Entity, pair.Key, pair.Value);
- // }
- //
- // }
- // }
- // else if (DigitalFormLayout.Form.AppliesTo.Equals("LeaveRequest"))
- // {
- // foreach (KeyValuePair<string, string> pair in viewer.EntityResults)
- // {
- // if (pair.Key.Contains("ID"))
- // {
- // CoreUtils.SetPropertyValue(Entity, pair.Key, Guid.Parse(pair.Value));
- // }
- // else if (pair.Key.Equals("From"))
- // {
- // (Entity as LeaveRequest).From = DateTime.Parse(pair.Value);
- // }
- // else if (pair.Key.Equals("To"))
- // {
- // (Entity as LeaveRequest).To = DateTime.Parse(pair.Value);
- // }
- // else if (pair.Key.Equals("FromTime"))
- // {
- // (Entity as LeaveRequest).FromTime = TimeSpan.Parse(pair.Value);
- // }
- // else if (pair.Key.Equals("ToTime"))
- // {
- // (Entity as LeaveRequest).ToTime = TimeSpan.Parse(pair.Value);
- // if ((Entity as LeaveRequest).ToTime == new TimeSpan(0))
- // {
- // (Entity as LeaveRequest).ToTime = new TimeSpan(23, 59, 59);
- // }
- // }
- // else if (pair.Key.Equals("Notes"))
- // {
- // (Entity as LeaveRequest).Notes = (Entity as LeaveRequest).Notes + System.Environment.NewLine + pair.Value;
- // }
- // else
- // {
- // CoreUtils.SetPropertyValue(Entity, pair.Key, pair.Value);
- // }
- // }
- // }
- // }
- // catch (Exception e)
- // {
- // viewer.errors.Add(e.Message);
- // }
- // }
- private void CheckSubscriber()
- {
- var sub = new Client<KanbanSubscriber>().Query(
- new Filter<KanbanSubscriber>(x => x.Kanban.ID).IsEqualTo(Entity.ID),
- new Columns<KanbanSubscriber>(ColumnTypeFlags.None).Add(x => x.ID)
- );
- if (sub.Rows.Count == 0)
- AddSubscriber();
- }
- private void AddSubscriber()
- {
- KanbanSubscriber subscriber = new KanbanSubscriber();
- subscriber.Kanban.ID = Entity.ID;
- subscriber.Assignee = true;
- subscriber.Employee.ID = App.Data.Me.ID;
- new Client<KanbanSubscriber>().Save(subscriber, "Updated From Mobile Device");
- }
- enum SaveType
- {
- BeforeSave,
- AfterSave,
- }
- }
- }
|