瀏覽代碼

New mobile KanbanForms are not saved before editing
Added "Not Submitted" to Leave Request Forms

Frank van den Bos 1 年之前
父節點
當前提交
9f52739035

+ 40 - 85
prs.mobile.new/PRS.Mobile/Components/DigitalForms/Editor/DataModels/DigitalFormHostModel.cs

@@ -4,9 +4,7 @@ using InABox.Core;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
-using XF.Material.Forms.UI.Dialogs;
 using IDigitalFormInstance = InABox.Core.IDigitalFormInstance;
 
 namespace PRS.Mobile
@@ -23,10 +21,7 @@ namespace PRS.Mobile
         public Entity Entity { get; set; }
         public bool ReadOnly { get; set; }
         public bool NewForm { get; set; }
-
-        public event OnDigitalFormHostModelSaved OnDigitalFormHostModelSaved;
-        public event OnDigitalFormHostModelBeforeSave OnDigitalFormHostModelBeforeSave;
-
+        
         public DigitalFormHostModel()
         {
             DFLayout = new DFLayout();
@@ -70,23 +65,49 @@ namespace PRS.Mobile
 
             if (DigitalFormDataModel.Instance.FormCompleted != DateTime.MinValue)
                 ReadOnly = true;
-
-            DigitalFormDataModel.BeforeModelSaved += (m) =>
+            
+        }
+        
+        public void LoadItems(TEntity parent, Guid formid, TInstance instance, DigitalFormLayout? layout = null)
+        {
+            List<DigitalFormVariable> variables = new List<DigitalFormVariable>();
+            
+            var loadLayout = Task.Run(() =>
             {
-                OnDigitalFormHostModelBeforeSave?.Invoke();
-                DigitalFormDataModel.Entity = Entity;
-                CheckEntity(SaveType.BeforeSave);
-            };
-
-            DigitalFormDataModel.OnModelSaved += async (m) =>
+                DigitalFormLayout = layout ?? QueryDigitalFormLayout(formid);
+            });
+            
+            var getVariables = Task.Run(() =>
+            {
+                variables = QueryVariables(formid);
+            });
+            
+            var loadDFDataModel = Task.Run(() =>
             {
-                var userResponseRequest = CheckEntity(SaveType.AfterSave);
-                var response = await OnDigitalFormHostModelSaved?.Invoke(userResponseRequest);
-                if (response == DigitalFormHostUserResponse.Yes)
-                    DoResponseActions(userResponseRequest);
-            };
+                DigitalFormDataModel = new DigitalFormDataModel<TEntity, TEntityLink, TInstance>(parent, instance);
+                DigitalFormDataModel.Load(null);
+                Entity = DigitalFormDataModel.Entity;
+            });
+            
+            Task.WaitAll(loadLayout, getVariables, 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(
@@ -228,74 +249,8 @@ namespace PRS.Mobile
         //     }
         // }
 
-        private void DoResponseActions(DigitalFormHostResponseRequest userResponseRequest)
-        {
-            if (userResponseRequest == DigitalFormHostResponseRequest.CloseKanban)
-            {
-                var kanban = Entity as Kanban;
-                kanban.Category = "Complete";
-                Task.Run(() => { new Client<Kanban>().Save(kanban, "Completed after completing all forms for task"); });
-            }
-        }
 
-        private DigitalFormHostResponseRequest CheckEntity(SaveType saveType)
-        {
-            if (Entity.GetType() == typeof(Kanban))
-                return DoKanbanActions(saveType);
-            else if (Entity.GetType() == typeof(LeaveRequest))
-                (Entity as LeaveRequest).EmployeeLink.ID = App.Data.Me.ID;
-            return DigitalFormHostResponseRequest.None;
-        }
-
-        private DigitalFormHostResponseRequest DoKanbanActions(SaveType saveType)
-        {
-            if (saveType == SaveType.BeforeSave)
-                CheckAndCreateKanban();
-            else if (saveType == SaveType.AfterSave)
-            {
-                CheckSubscriber();
-                return CheckKanbanForms();
-            }
-            return DigitalFormHostResponseRequest.None;
-        }
-
-        private DigitalFormHostResponseRequest CheckKanbanForms()
-        {
-            if (Entity.ID != Guid.Empty)
-            {
-                CoreTable table = new Client<KanbanForm>().Query(new Filter<KanbanForm>(x => x.Parent.ID).IsEqualTo(Entity.ID),
-                        new Columns<KanbanForm>(x => x.FormCompleted));
-                if (table.Rows.Any())
-                {
-                    List<DateTime> dates = new List<DateTime>();
-                    foreach (CoreRow row in table.Rows)
-                    {
-                        dates.Add(row.Get<KanbanForm, DateTime>(x => x.FormCompleted));
-                    }
-                    var incompletedates = dates.Where(x => x.Equals(DateTime.MinValue));
-                    if (!incompletedates.Any())
-                    {
-                        return DigitalFormHostResponseRequest.CloseKanban;
-                    }
-                }
-            }
-            return DigitalFormHostResponseRequest.None;
-        }
 
-        private void CheckAndCreateKanban()
-        {
-            if (Entity.ID == Guid.Empty)
-            {
-                Kanban kanban = Entity as Kanban;
-                kanban.EmployeeLink.ID = App.Data.Me.ID;
-                kanban.DueDate = DateTime.Today;
-                kanban.Title = "Form - " + DigitalFormLayout.Form.Description;
-                kanban.Notes = new string[] { "Created by Forms App" };
-                kanban.Category = "In Progress";
-
-                Entity = kanban;
-            }
-        }
 
         private void CheckSubscriber()
         {

+ 1 - 21
prs.mobile.new/PRS.Mobile/Components/DigitalForms/Editor/DataModels/IDigitalFormHostModel.cs

@@ -5,11 +5,8 @@ using System.Threading.Tasks;
 namespace PRS.Mobile
 {
     public delegate void OnDigitalFormHostModelBeforeSave();
-    public delegate Task<DigitalFormHostUserResponse> OnDigitalFormHostModelSaved(DigitalFormHostResponseRequest responseRequest);
     public interface IDigitalFormHostModel
     {
-        public event OnDigitalFormHostModelSaved OnDigitalFormHostModelSaved;
-        public event OnDigitalFormHostModelBeforeSave OnDigitalFormHostModelBeforeSave;
         public IDigitalFormDataModel DigitalFormDataModel { get; set; }
         public Entity Entity { get; set; }
         public DFLayout DFLayout { get; set; }
@@ -17,23 +14,6 @@ namespace PRS.Mobile
         public bool ReadOnly { get; set; }
         public bool NewForm { get; set; }
         public void LoadItems(Entity parent, Guid formid, Guid instanceid, DigitalFormLayout layout = null);
-
-        //public void LoadItems(Entity parent, DigitalFormLayout layout, Entity form = null);
-
-        //public void SetPropertyValues(QAFormViewer viewer);
-
-    }
-    public enum DigitalFormHostUserResponse
-    {
-        Yes,
-        No
     }
-
-    public enum DigitalFormHostResponseRequest
-    {
-        None,
-        CloseKanban
-    }
-
-
+    
 }

+ 15 - 15
prs.mobile.new/PRS.Mobile/Components/DigitalForms/Editor/DigitalFormHost.xaml.cs

@@ -54,21 +54,21 @@ namespace PRS.Mobile
             //     Model.SetPropertyValues(viewer);
             // };
 
-            Model.OnDigitalFormHostModelSaved += async (responseRequest) =>
-            {
-                bool bDeleted = !Model.DigitalFormDataModel.Instance.FormCancelled.IsEmpty();
-                DisplayAlert("Success", $"{Model.DigitalFormDataModel.Instance.Form.Description} {(bDeleted ? "Deleted" : "Saved")} successfully", "OK");
-                if (!bDeleted && (responseRequest == DigitalFormHostResponseRequest.CloseKanban))
-                {
-                    string chosenOption = await DisplayActionSheet("Input Required", "All forms for this task are complete. Complete this task as well?", null, "Yes", "No");
-                    switch (chosenOption)
-                    {
-                        case "Yes":
-                            return DigitalFormHostUserResponse.Yes;
-                    }
-                }
-                return DigitalFormHostUserResponse.No;
-            };
+            // Model.OnDigitalFormHostModelSaved += async (responseRequest) =>
+            // {
+            //     bool bDeleted = !Model.DigitalFormDataModel.Instance.FormCancelled.IsEmpty();
+            //     DisplayAlert("Success", $"{Model.DigitalFormDataModel.Instance.Form.Description} {(bDeleted ? "Deleted" : "Saved")} successfully", "OK");
+            //     if (!bDeleted && (responseRequest == DigitalFormHostResponseRequest.CloseKanban))
+            //     {
+            //         string chosenOption = await DisplayActionSheet("Input Required", "All forms for this task are complete. Complete this task as well?", null, "Yes", "No");
+            //         switch (chosenOption)
+            //         {
+            //             case "Yes":
+            //                 return DigitalFormHostUserResponse.Yes;
+            //         }
+            //     }
+            //     return DigitalFormHostUserResponse.No;
+            // };
 
             _saveButton.IsVisible = !Model.ReadOnly;
             //_saveProgress.IsEnabled = !Model.ReadOnly;

+ 9 - 4
prs.mobile.new/PRS.Mobile/Modules/Forms/KanbanForms.xaml.cs

@@ -42,18 +42,23 @@ namespace PRS.Mobile
                 kanban.EmployeeID = App.Data.Me.ID;
                 kanban.ManagerID = App.Data.Me.ID;
                 kanban.Title = args.Form.Description;
-                kanban.Save("Created on Mobile Device");
+                //kanban.Save("Created on Mobile Device");
                 form = App.Data.KanbanForms.AddItem();
                 form.FormID = args.Form.ID;
                 form.FormCode = args.Form.Code;
                 form.FormDescription = args.Form.Description;
                 form.ParentID = kanban.ID;
-                form.Save("Created on Mobile Device");
+                //form.Save("Created on Mobile Device");
             }
             Dispatcher.BeginInvokeOnMainThread(() =>
             {
-                _forms.RefreshData(false,false);
-                _forms.EditForm<Kanban,KanbanLink,KanbanForm>(form,kanban.Entity);
+                var model = new DigitalFormHostModel<Kanban, KanbanLink, KanbanForm>();
+                model.LoadItems(kanban.Entity, form.FormID, form.Entity, null);
+                var host = new DigitalFormHost(model);
+                host.OnClosing += (_, _) => _forms.RefreshData(true, false);
+                Navigation.PushAsync(host);
+                //_forms.RefreshData(false,false);
+                //_forms.EditForm<Kanban,KanbanLink,KanbanForm>(form,kanban.Entity);
             });
             
 

+ 3 - 3
prs.mobile.new/PRS.Mobile/Modules/Human Resources/Leave Requests/List/LeaveRequestList.xaml.cs

@@ -22,12 +22,12 @@ namespace PRS.Mobile
         {
             if ((value?.OpenForms ?? 0) > 0)
                 return ImageSource.FromFile("question");
-            return (value?.Status ?? LeaveRequestStatus.InProgress) switch
+            return (value?.Status ?? LeaveRequestStatus.NotSubmitted) switch
             {
                 LeaveRequestStatus.InProgress => ImageSource.FromFile("clock"),
                 LeaveRequestStatus.Approved => ImageSource.FromFile("tick"),
                 LeaveRequestStatus.Rejected => ImageSource.FromFile("cross"),
-                _ => null
+                _ => ImageSource.FromFile("warning")
             };
         }
     }
@@ -43,7 +43,7 @@ namespace PRS.Mobile
                 LeaveRequestStatus.InProgress => "Awaiting Approval",
                 LeaveRequestStatus.Approved => "Approved",
                 LeaveRequestStatus.Rejected => "Rejected",
-                _ => ""
+                _ => "Not Submitted"
             };
         }
     }