From 75f5ce01a8c6b0cc12991e9f25487d8e14b272a5 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Sun, 21 Jun 2020 20:06:07 +0000 Subject: [PATCH] --- .../Controllers/JobOperationsController.cs | 6 +- server/AyaNova/DataList/UserDataList.cs | 136 ++++++++++++++++++ server/AyaNova/biz/AyaFormFieldDefinitions.cs | 1 + server/AyaNova/models/User.cs | 7 +- server/AyaNova/resource/de.json | 3 +- server/AyaNova/resource/en.json | 3 +- server/AyaNova/resource/es.json | 3 +- server/AyaNova/resource/fr.json | 3 +- 8 files changed, 153 insertions(+), 9 deletions(-) create mode 100644 server/AyaNova/DataList/UserDataList.cs diff --git a/server/AyaNova/Controllers/JobOperationsController.cs b/server/AyaNova/Controllers/JobOperationsController.cs index cc21f1b4..0dce6404 100644 --- a/server/AyaNova/Controllers/JobOperationsController.cs +++ b/server/AyaNova/Controllers/JobOperationsController.cs @@ -82,8 +82,10 @@ namespace AyaNova.Api.Controllers [HttpGet("status/{gid}")] public async Task GetJobStatus([FromRoute] Guid gid) { - if (serverState.IsClosed) - return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + //this is called from things that might be running and have server temporarily locked down (e.g. seeding) + //so it should never return an error on closed + // if (serverState.IsClosed) + // return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); //This is called by the UI to monitor any operation that triggers a job so it really should be available to any logged in user // if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.ServerJob)) diff --git a/server/AyaNova/DataList/UserDataList.cs b/server/AyaNova/DataList/UserDataList.cs new file mode 100644 index 00000000..ab652219 --- /dev/null +++ b/server/AyaNova/DataList/UserDataList.cs @@ -0,0 +1,136 @@ +using System.Collections.Generic; +using Newtonsoft.Json.Linq; +using AyaNova.Biz; +namespace AyaNova.DataList +{ + internal class UserDataList : AyaDataList + { + + public UserDataList() + { + DefaultListObjectType = AyaType.User; + SQLFrom = "from auser"; + var RoleSet = BizRoles.GetRoleSet(DefaultListObjectType); + AllowedRoles = RoleSet.ReadFullRecord | RoleSet.Change; + + //Default ListView + dynamic dlistView = new JArray(); + + dynamic cm = new JObject(); + cm.fld = "username"; + dlistView.Add(cm); + + cm = new JObject(); + cm.fld = "useremployeenumber"; + dlistView.Add(cm); + + cm = new JObject(); + cm.fld = "useractive"; + dlistView.Add(cm); + + // cm = new JObject(); + // cm.fld = "usernotes"; + // dlistView.Add(cm); + + cm = new JObject(); + cm.fld = "userroles"; + dlistView.Add(cm); + + cm = new JObject(); + cm.fld = "userlastlogin"; + dlistView.Add(cm); + + + DefaultListView = dlistView.ToString(Newtonsoft.Json.Formatting.None); + + + + //NOTE: Due to the join, all the sql id and name fields that can conflict with the joined (in this case User) table need to be specified completely + FieldDefinitions = new List(); + //DPRECATED FieldDefinitions.Add(new AyaDataListFieldDefinition { FieldKey = "df", AyaObjectType = (int)AyaType.User, SqlIdColumnName = "auser.id" }); + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "User", + FieldKey = "username", + AyaObjectType = (int)AyaType.User, + UiFieldDataType = (int)UiFieldDataType.Text, + SqlIdColumnName = "auser.id", + SqlValueColumnName = "auser.name", + IsRowId = true + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "Active", + FieldKey = "useractive", + UiFieldDataType = (int)UiFieldDataType.Bool, + SqlValueColumnName = "auser.active" + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "AuthorizationRoles", + FieldKey = "userroles", + UiFieldDataType = (int)UiFieldDataType.Enum, + EnumType = AyaNova.Util.StringUtil.TrimTypeName(typeof(AuthorizationRoles).ToString()), + SqlValueColumnName = "auser.roles" + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "LastLogin", + FieldKey = "userlastlogin", + UiFieldDataType = (int)UiFieldDataType.DateTime, + SqlValueColumnName = "auser.lastlogin" + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "UserType", + FieldKey = "usertype", + UiFieldDataType = (int)UiFieldDataType.Enum, + EnumType = AyaNova.Util.StringUtil.TrimTypeName(typeof(UserType).ToString()), + SqlValueColumnName = "auser.usertype" + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "UserEmployeeNumber", + FieldKey = "useremployeenumber", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "auser.employeenumber" + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "UserNotes", + FieldKey = "usernotes", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "auser.notes" + }); + + + // //------------------------- + //NOT SURE ABOUT CUSTOM FIELDS + //NEED TO COME BACK TO THIS ONCE CLIENT IS CONSUMING THESE LISTS + //WIDGETLIST has custom fields so good test before doing here + + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom1", FieldKey = "widgetcustom1", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom2", FieldKey = "widgetcustom2", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom3", FieldKey = "widgetcustom3", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom4", FieldKey = "widgetcustom4", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom5", FieldKey = "widgetcustom5", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom6", FieldKey = "widgetcustom6", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom7", FieldKey = "widgetcustom7", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom8", FieldKey = "widgetcustom8", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom9", FieldKey = "widgetcustom9", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom10", FieldKey = "widgetcustom10", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom11", FieldKey = "widgetcustom11", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom12", FieldKey = "widgetcustom12", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom13", FieldKey = "widgetcustom13", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom14", FieldKey = "widgetcustom14", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom15", FieldKey = "widgetcustom15", IsCustomField = true }); + // FieldDefinitions.Add(new AyaDataListFieldDefinition { TKey = "WidgetCustom16", FieldKey = "widgetcustom16", IsCustomField = true }); + } + }//eoc +}//eons \ No newline at end of file diff --git a/server/AyaNova/biz/AyaFormFieldDefinitions.cs b/server/AyaNova/biz/AyaFormFieldDefinitions.cs index c5786baa..e73535a3 100644 --- a/server/AyaNova/biz/AyaFormFieldDefinitions.cs +++ b/server/AyaNova/biz/AyaFormFieldDefinitions.cs @@ -94,6 +94,7 @@ namespace AyaNova.Biz l.Add(new AyaFormFieldDefinition { TKey = "UserNotes", FieldKey = "Notes" }); l.Add(new AyaFormFieldDefinition { TKey = "UserType", FieldKey = "UserType", Hideable = false }); l.Add(new AyaFormFieldDefinition { TKey = "Active", FieldKey = "Active", Hideable = false }); + l.Add(new AyaFormFieldDefinition { TKey = "LastLogin", FieldKey = "LastLogin" }); l.Add(new AyaFormFieldDefinition { TKey = "Tags", FieldKey = "Tags" }); l.Add(new AyaFormFieldDefinition { TKey = "Wiki", FieldKey = "Wiki" }); l.Add(new AyaFormFieldDefinition { TKey = "Attachments", FieldKey = "Attachments" }); diff --git a/server/AyaNova/models/User.cs b/server/AyaNova/models/User.cs index 2d2ba46b..1fe54d3d 100644 --- a/server/AyaNova/models/User.cs +++ b/server/AyaNova/models/User.cs @@ -11,7 +11,7 @@ namespace AyaNova.Models public dtUser() { Tags = new List(); - LastLogin = DateTime.MinValue; + } public long Id { get; set; } public uint Concurrency { get; set; } @@ -29,7 +29,7 @@ namespace AyaNova.Models public string CustomFields { get; set; } public List Tags { get; set; } - public DateTime LastLogin { get; set; } + public DateTime? LastLogin { get; set; } }//eoc public class User : ICoreBizObjectModel @@ -42,7 +42,7 @@ namespace AyaNova.Models [Required, MaxLength(255)] public string Name { get; set; } - public DateTime LastLogin { get; set; } + public DateTime? LastLogin { get; set; } public string Login { get; set; } public string Password { get; set; } @@ -82,6 +82,7 @@ namespace AyaNova.Models public User() { Tags = new List(); + } public bool IsTech diff --git a/server/AyaNova/resource/de.json b/server/AyaNova/resource/de.json index ca631c4c..5a218318 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -1834,5 +1834,6 @@ "JobFailed":"Job fehlgeschlagen", "MaintenanceExpired":"Wartung abgelaufen", "MaintenanceExpiredNote":"Das Support- und Update-Abonnement ist jetzt abgelaufen.\nAyaNova kann nicht aktualisiert werden und der Support ist nicht mehr verfügbar", - "CopyDbId":"Datenbank-ID kopieren" + "CopyDbId":"Datenbank-ID kopieren", + "LastLogin":"Letzte Anmeldezeit" } \ No newline at end of file diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index 4a351d8a..a489c056 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -1833,7 +1833,8 @@ "JobFailed":"Job failed", "MaintenanceExpired":"Maintenance expired", "MaintenanceExpiredNote":"The support and updates subscription has now expired\nAyaNova can not be updated and support is no longer available", - "CopyDbId":"Copy database id" + "CopyDbId":"Copy database id", + "LastLogin":"Last login" } \ No newline at end of file diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index f0228e14..63011f45 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -1834,5 +1834,6 @@ "JobFailed":"Trabajo fallido", "MaintenanceExpired":"Mantenimiento expirado", "MaintenanceExpiredNote":"La suscripción de soporte y actualizaciones ha caducado\nAyaNova no se puede actualizar y el soporte ya no está disponible", - "CopyDbId":"Copiar ID de base de datos" + "CopyDbId":"Copiar ID de base de datos", + "LastLogin":"Última hora de inicio de sesión" } \ No newline at end of file diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index 952157d6..b02cf2cf 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -1834,5 +1834,6 @@ "JobFailed":"Le travail a échoué", "MaintenanceExpired":"Maintenance expirée", "MaintenanceExpiredNote":"L'abonnement au support et aux mises à jour a expiré\nAyaNova ne peut pas être mis à jour et le support n'est plus disponible", - "CopyDbId":"Copier l'ID de la base de données" + "CopyDbId":"Copier l'ID de la base de données", + "LastLogin":"Dernière connexion" } \ No newline at end of file