| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | using System;using System.Collections.Generic;using System.Linq;using Comal.Classes;using InABox.Core;namespace Comal.Stores{    public class FormSubscription    {        public Guid EmployeeID { get; set; }        public Guid FormID { get; set; }    }    public static class FormSubscriptionCache    {        static FormSubscriptionCache()        {            Subscriptions = null;        }        public static FormSubscription[] Subscriptions { get; set; }    }    public abstract class EntityFormStore<TEntity, TParent, TParentLink> : BaseStore<TEntity>        where TEntity : EntityForm<TParent, TParentLink>, new()        where TParent : Entity, new()        where TParentLink : IEntityLink<TParent>, new()    {        private void CheckFormSubscriptionCache()        {            if (FormSubscriptionCache.Subscriptions == null)            {                Logger.Send(LogType.Information, UserID, "Refreshing Form Subscription Cache");                var subs = Provider.Query(                    null,                    new Columns<EmployeeFormSubscription>(x => x.Employee.ID, x => x.Form.ID)                );                FormSubscriptionCache.Subscriptions = subs.Rows.Select(r =>                    new FormSubscription                    {                        EmployeeID = r.Get<EmployeeFormSubscription, Guid>(c => c.Employee.ID),                        FormID = r.Get<EmployeeFormSubscription, Guid>(c => c.Form.ID)                    }                ).ToArray();            }        }        private void CheckFormSubscriptions(TEntity entity)        {            var instance = entity as IDigitalFormInstance;            if (instance != null                && entity.HasOriginalValue("FormCompleted")                && entity.GetOriginalValue<TEntity, DateTime>("FormCompleted") == DateTime.MinValue               )            {                var updates = new List<Notification>();                CheckFormSubscriptionCache();                var formid = (Guid)CoreUtils.GetPropertyValue(entity, "Form.ID");                var formname = (string)CoreUtils.GetPropertyValue(entity, "Form.Description");                var userid = (Guid)CoreUtils.GetPropertyValue(entity, "FormCompletedBy.ID");                if (userid == Guid.Empty)                    userid = UserGuid;                var emprow = userid != Guid.Empty                    ? Provider.Query(                        new Filter<Employee>(x => x.UserLink.ID).IsEqualTo(userid),                        new Columns<Employee>(x => x.ID, x => x.Name)                    ).Rows.FirstOrDefault()                    : null;                var empid = emprow != null ? emprow.Get<Employee, Guid>(x => x.ID) : Guid.Empty;                var empname = emprow != null ? emprow.Get<Employee, string>(x => x.Name) : UserID;                var subscriptions = FormSubscriptionCache.Subscriptions.Where(x => x.FormID == formid).ToArray();                foreach (var subscription in subscriptions)                {                    var notification = new Notification();                    notification.Employee.ID = subscription.EmployeeID;                    notification.Sender.ID = empid;                    notification.Title = "Form Completed: " + formname;                    notification.Description = string.Format("<html><body>{0} has completed a <u><b>{1}</b></u> digital form.</body></html>", empname,                        formname);                    notification.EntityType = entity.GetType().EntityName();                    notification.EntityID = entity.ID;                    updates.Add(notification);                }                if (updates.Any())                    FindSubStore<Notification>().Save(updates, "");            }        }        protected override void AfterSave(TEntity entity)        {            base.AfterSave(entity);            CheckFormSubscriptions(entity);        }    }    public class AssignmentFormStore : EntityFormStore<AssignmentForm, Assignment, AssignmentLink>    {    }    public class LeaveRequestFormStore : EntityFormStore<LeaveRequestForm, LeaveRequest, LeaveRequestLink>    {    }    public class JobITPFormStore : EntityFormStore<JobITPForm, JobITP, JobITPLink>    {    }    public class JobFormStore : EntityFormStore<JobForm, Job, JobLink>    {    }    public class EmployeeFormStore : EntityFormStore<EmployeeForm, Employee, EmployeeLink>    {    }    public class TimeSheetFormStore : EntityFormStore<TimeSheetForm, TimeSheet, TimeSheetLink>    {    }    public class KanbanFormStore : EntityFormStore<KanbanForm, Kanban, KanbanLink>    {    }}
 |