浏览代码

Merge remote-tracking branch 'origin/nick' into kenric

Kenric Nugteren 2 年之前
父节点
当前提交
35995c8b72

+ 2 - 2
InABox.Client.Remote.Shared/RemoteClient.cs

@@ -290,7 +290,7 @@ namespace InABox.Clients
 
             PrepareRequest(request);
 
-            var response = SendRequest<SaveRequest<TEntity>, SaveResponse<TEntity>>(request, "Save", SerializationFormat.Binary, SerializationFormat.Json);
+            var response = SendRequest<SaveRequest<TEntity>, SaveResponse<TEntity>>(request, "Save", SerializationFormat.Json, SerializationFormat.Json);
             switch (response.Status)
             {
                 case StatusCode.OK:
@@ -334,7 +334,7 @@ namespace InABox.Clients
 
             PrepareRequest(request);
 
-            var response = SendRequest<MultiSaveRequest<TEntity>, MultiSaveResponse<TEntity>>(request, "MultiSave", SerializationFormat.Binary, SerializationFormat.Json);
+            var response = SendRequest<MultiSaveRequest<TEntity>, MultiSaveResponse<TEntity>>(request, "MultiSave", SerializationFormat.Json, SerializationFormat.Json);
             switch (response.Status)
             {
                 case StatusCode.OK:

+ 46 - 4
InABox.Core/DigitalForms/DataModel/DigitalFormDataModel.cs

@@ -1,17 +1,42 @@
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using InABox.Clients;
 
 namespace InABox.Core
 {
+    public enum MobileLogType
+    {
+        START,
+        END
+    }
+    public class MobileLog
+    {
+        public string Message { get; set; }
+
+        public MobileLog(string message, MobileLogType type)
+        {
+            Message = type + " " + message + "(" + DateTime.Now.ToString("m.s.fffff") + ")";        
+        }
+
+        public static string ProduceLog(List<MobileLog> logs)
+        {
+            string finallog = "";
+            foreach (var log in logs)
+            {
+                finallog = finallog + System.Environment.NewLine + log.Message;
+            }
+            return finallog;
+        }
+    }
     public class DigitalFormDataModel<TEntity, TEntityLink, TInstance> : IDigitalFormDataModel
         where TEntity : Entity, IRemotable, IPersistent, new()
         where TEntityLink : EntityLink<TEntity>
         where TInstance : Entity, IRemotable, IPersistent, IDigitalFormInstance<TEntityLink>, new()
     {
         private readonly bool bRequiresLoad = true;
-
+        List<MobileLog> logs = new List<MobileLog>();
         public DigitalFormDataModel(Guid entityid, Guid instanceid)
         {
             Entity = new TEntity();
@@ -55,7 +80,7 @@ namespace InABox.Core
             }
         }
 
-        public IDigitalFormInstance Instance { get; private set; }
+        public IDigitalFormInstance Instance { get; set; }
 
         public event DigitalFormUpdateHandler OnModelSaved;
 
@@ -63,6 +88,7 @@ namespace InABox.Core
 
         public void Load(Action<IDigitalFormDataModel>? callback = null)
         {
+            logs.Add(new MobileLog("Load", MobileLogType.START));
             if (!bRequiresLoad)
             {
                 callback?.Invoke(this);
@@ -73,6 +99,8 @@ namespace InABox.Core
 
             DoAddQueries(client);
 
+            logs.Add(new MobileLog("Query", MobileLogType.START));
+
             if (callback == null)
             {
                 if (client.Count > 0)
@@ -92,6 +120,9 @@ namespace InABox.Core
                 else
                     callback.Invoke(this);
             }
+            logs.Add(new MobileLog("Query", MobileLogType.END));
+            logs.Add(new MobileLog("Load", MobileLogType.END));
+            var log = MobileLog.ProduceLog(logs);
         }
 
         public void Update(Action<IDigitalFormDataModel>? callback = null)
@@ -123,7 +154,7 @@ namespace InABox.Core
                 client.Add(
                     new QueryDef<TEntity>(
                         new Filter<TEntity>(x => x.ID).IsEqualTo(Entity.ID),
-                        null,
+                        new Columns<TEntity>(x => x.ID),
                         null
                     ),
                     typeof(TEntity)
@@ -133,7 +164,18 @@ namespace InABox.Core
                 client.Add(
                     new QueryDef<TInstance>(
                         new Filter<TInstance>(x => x.ID).IsEqualTo(Instance.ID),
-                        null,
+                        new Columns<TInstance>
+                        (
+                            x => x.ID, 
+                            x => x.FormData, 
+                            x => x.Form.ID,
+                            x => x.FormCompleted,
+                            x => x.FormCompletedBy.ID,
+                            x => x.Created,
+                            x => x.FormOpen,
+                            x => x.BlobData
+                            
+                            ),
                         null
                     ),
                     typeof(TInstance)

+ 1 - 1
InABox.Core/DigitalForms/DataModel/IDigitalFormDataModel.cs

@@ -9,7 +9,7 @@ namespace InABox.Core
     public interface IDigitalFormDataModel
     {
         public Entity Entity { get; set; }
-        IDigitalFormInstance Instance { get; }
+        IDigitalFormInstance Instance { get; set;  }
 
         event DigitalFormUpdateHandler OnModelSaved;
 

+ 1 - 1
InABox.Core/DigitalForms/Layouts/Fields/DFLayoutBooleanField/DFLayoutBooleanField.cs

@@ -1,7 +1,7 @@
 namespace InABox.Core
 {
     [Caption("Boolean")]
-    public class DFLayoutBooleanField : DFLayoutField<DFLayoutBooleanFieldProperties>, IDFLayoutFormField, IDFLayoutObsoleteField
+    public class DFLayoutBooleanField : DFLayoutField<DFLayoutBooleanFieldProperties>, IDFLayoutFormField
     {
     }
 }

+ 33 - 41
InABox.Server/RestService.cs

@@ -1,11 +1,7 @@
 using System.Reflection;
-using GenHTTP.Api.Protocol;
-using GenHTTP.Modules.IO.Streaming;
 using InABox.Clients;
 using InABox.Core;
 using InABox.Database;
-using Microsoft.Exchange.WebServices.Data;
-using NPOI.SS.Formula.Functions;
 
 namespace InABox.API
 {
@@ -34,7 +30,7 @@ namespace InABox.API
         protected static Guid ValidateRequest(Request request, out string? userID)
         {
             var session = request.Credentials.Session;
-            if(session != Guid.Empty)
+            if (session != Guid.Empty)
             {
                 var valid = CredentialsCache.Validate(session, out userID);
                 if (valid != Guid.Empty)
@@ -43,7 +39,7 @@ namespace InABox.API
                 }
                 return valid;
             }
-            else if(request.Credentials.UserID is not null
+            else if (request.Credentials.UserID is not null
                 && request.Credentials.Password is not null
                 && CredentialsCache.IsBypassed(request.Credentials.UserID, request.Credentials.Password))
             {
@@ -77,7 +73,7 @@ namespace InABox.API
                 foreach (var item in request.TableTypes)
                 {
                     var type = CoreUtils.GetEntity(item.Value);
-                    if(type.IsAssignableTo(typeof(ISecure)) && !isSecure)
+                    if (type.IsAssignableTo(typeof(ISecure)) && !isSecure)
                     {
                         Logger.Send(LogType.Error, userid, $"{type} is a secure entity. Request failed");
                     }
@@ -129,7 +125,7 @@ namespace InABox.API
                     reLogin = true;
                 }
             }
-            if(user == null)
+            if (user == null)
             {
                 if (request.UsePIN)
                 {
@@ -182,7 +178,7 @@ namespace InABox.API
                 response.UserGuid = user.ID;
                 response.UserID = user.UserID;
                 response.SecurityID = user.SecurityGroup.ID;
-                response.Session = user.ID == CoreUtils.FullGuid ? 
+                response.Session = user.ID == CoreUtils.FullGuid ?
                     CredentialsCache.NewSession(user, true, DateTime.MaxValue) :
                     CredentialsCache.NewSession(user, true);
                 response.PasswordExpiration = CheckPasswordExpiration ? user.PasswordExpiration : DateTime.MinValue;
@@ -222,7 +218,7 @@ namespace InABox.API
             response.Status = StatusCode.OK;
             return response;
         }
-        
+
         public static InfoResponse Info(InfoRequest request)
         {
             var response = new InfoResponse()
@@ -237,7 +233,7 @@ namespace InABox.API
             response.Status = StatusCode.OK;
             return response;
         }
-        
+
     }
 
     public class RestService<TEntity> : RestService where TEntity : Entity, new()
@@ -340,26 +336,25 @@ namespace InABox.API
             try
             {
                 var e = request.Item;
-                var oldValues = new Dictionary<string, object?>();
-                foreach (var key in e.OriginalValues.Keys)
-                {
-                    oldValues.Add(key, CoreUtils.GetPropertyValue(e, key));
-                }
-                    
+
+                var preSaveChanges = BaseObjectExtensions.GetOriginaValues(e, false);
+
                 var store = DbFactory.FindStore<TEntity>(userguid, userid, request.Credentials.Platform, request.Credentials.Version);
+
                 store.Save(e, request.AuditNote);
 
                 if (request.ReturnOnlyChanged)
                 {
-                    foreach(var (key, value) in e.OriginalValues)
+                    var currentChanges = BaseObjectExtensions.GetOriginaValues(e, false);
+
+                    foreach (var (key, value) in currentChanges)
                     {
-                        if(oldValues.TryGetValue(key, out var oldValue))
+                        if (preSaveChanges.TryGetValue(key, out var oldValue))
                         {
-                            var curValue = CoreUtils.GetPropertyValue(e, key);
-                            if(!Equals(curValue, oldValue))
+                            if (!Equals(value, oldValue))
                             {
                                 response.ChangedValues.Add(key, CoreUtils.GetPropertyValue(e, key));
-                            }
+                            }                          
                         }
                         else
                         {
@@ -408,47 +403,44 @@ namespace InABox.API
                     request.Items != null ? string.Join(", ", request.Items.Select(x => x.ToString())) : request + " (null)"));
             try
             {
+                var originals = new Dictionary<TEntity, Dictionary<string, object>>();
 
                 var es = request.Items;
 
-                var oldValuesList = new List<Dictionary<string, object?>>();
-                foreach(var e in es)
-                {
-                    var oldValues = new Dictionary<string, object?>();
-                    foreach (var key in e.OriginalValues.Keys)
-                    {
-                        oldValues.Add(key, CoreUtils.GetPropertyValue(e, key));
-                    }
-                    oldValuesList.Add(oldValues);
-                }
+                foreach (var e in es)
+                    originals[e] = BaseObjectExtensions.GetOriginaValues(e, false);
 
                 var store = DbFactory.FindStore<TEntity>(userguid, userid, request.Credentials.Platform, request.Credentials.Version);
 
                 store.Save(es, request.AuditNote);
 
                 if (request.ReturnOnlyChanged)
-                {
-                    for(int i = 0; i < es.Length; ++i)
+                {                  
+                    for (int i = 0; i < es.Length; ++i)
                     {
+                        var result = new Dictionary<string, object>();
+
                         var e = es[i];
 
-                        var changedValues = new Dictionary<string, object?>();
-                        var oldValues = oldValuesList[i];
-                        foreach (var (key, value) in e.OriginalValues)
+                        var currentChanges = BaseObjectExtensions.GetOriginaValues(e, false);
+
+                        var preSaveChanges = originals[e];
+
+                        foreach (var (key, value) in currentChanges)
                         {
-                            if (oldValues.TryGetValue(key, out var oldValue))
+                            if (preSaveChanges.TryGetValue(key, out var oldValue))
                             {
                                 if (!Equals(value, oldValue))
                                 {
-                                    changedValues.Add(key, value);
+                                    result[key] = CoreUtils.GetPropertyValue(e, key);
                                 }
                             }
                             else
                             {
-                                changedValues.Add(key, value);
+                                result[key] = CoreUtils.GetPropertyValue(e, key);
                             }
                         }
-                        response.ChangedValues.Add(changedValues);
+                        response.ChangedValues.Add(result);
                     }
                 }
                 else