diff --git a/devdocs/specs/core-notification.txt b/devdocs/specs/core-notification.txt index 1c6db777..f16ff992 100644 --- a/devdocs/specs/core-notification.txt +++ b/devdocs/specs/core-notification.txt @@ -30,7 +30,7 @@ IMPLEMENTATION PATH / PLAN - code as minimal a route as possible to get to worki should it submit and send immediately bypassing generator as just an immediate test. OR maybe it's an option for the user to choose. - + widget / user crud ops and tag filtered in both App and in smtp Then viewed in UI and worked with, properly shows count waiting etc Examine system, bulletproof it as much as possible from first impressions @@ -40,6 +40,20 @@ IMPLEMENTATION PATH / PLAN - code as minimal a route as possible to get to worki todo: Make the notification subscription front end page At least enough to subscription to widget biz notifications with translation keys + route needed of existing subs + route to add sub + route to delete sub + ui list of subs editable and saveable as a collection? + biz object + do it like widgets list and widget items, list up front and edit behind + TODO: + Do from front end back to server + SubscriptionList datalist needed first + timespan ui type for grid display + then edit form and routes can be added + Going to need a timespan control for editing + + todo: make the ops notification front end page todo: make the biz notification page todo: implement the Widget and User crud notification systems as per spec with an eye to replicating everywhere and allowing for specialty other types in system diff --git a/server/AyaNova/DataList/NotifySubscriptionDataList.cs b/server/AyaNova/DataList/NotifySubscriptionDataList.cs new file mode 100644 index 00000000..9b301a93 --- /dev/null +++ b/server/AyaNova/DataList/NotifySubscriptionDataList.cs @@ -0,0 +1,138 @@ +using System.Collections.Generic; +using Newtonsoft.Json.Linq; +using AyaNova.Biz; +namespace AyaNova.DataList +{ + internal class NotifySubscriptionDataList : AyaDataList + { + + public NotifySubscriptionDataList() + { + DefaultListObjectType = AyaType.NotifySubscription; + 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 = "usertype"; + dlistView.Add(cm); + + cm = new JObject(); + cm.fld = "useractive"; + dlistView.Add(cm); + + cm = new JObject(); + cm.fld = "userlastlogin"; + dlistView.Add(cm); + + cm = new JObject(); + cm.fld = "userroles"; + 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 NotifySubscription) table need to be specified completely + FieldDefinitions = new List(); + //DPRECATED FieldDefinitions.Add(new AyaDataListFieldDefinition { FieldKey = "df", AyaObjectType = (int)AyaType.NotifySubscription, SqlIdColumnName = "auser.id" }); + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "NotifySubscription", + FieldKey = "username", + AyaObjectType = (int)AyaType.NotifySubscription, + 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 = "NotifySubscriptionType", + FieldKey = "usertype", + UiFieldDataType = (int)UiFieldDataType.Enum, + EnumType = AyaNova.Util.StringUtil.TrimTypeName(typeof(NotifySubscriptionType).ToString()), + SqlValueColumnName = "auser.usertype" + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "NotifySubscriptionEmployeeNumber", + FieldKey = "useremployeenumber", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "auser.employeenumber" + }); + + FieldDefinitions.Add(new AyaDataListFieldDefinition + { + TKey = "NotifySubscriptionNotes", + 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/AyaType.cs b/server/AyaNova/biz/AyaType.cs index 9e44c971..18f5658e 100644 --- a/server/AyaNova/biz/AyaType.cs +++ b/server/AyaNova/biz/AyaType.cs @@ -107,7 +107,7 @@ namespace AyaNova.Biz BizMetrics=48, Backup=49, Notification=50, - NotificationSubscription=51 + NotifySubscription=51 //NOTE: New objects added here need to also be added to the following classes: diff --git a/server/AyaNova/biz/BizRoles.cs b/server/AyaNova/biz/BizRoles.cs index 9d9405bb..3580318a 100644 --- a/server/AyaNova/biz/BizRoles.cs +++ b/server/AyaNova/biz/BizRoles.cs @@ -528,7 +528,7 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////// //NOTIFICATION_SUBSCRIPTION // - roles.Add(AyaType.NotificationSubscription, new BizRoleSet() + roles.Add(AyaType.NotifySubscription, new BizRoleSet() { Change = AuthorizationRoles.All, ReadFullRecord = AuthorizationRoles.All