using Comal.Classes; namespace Comal.Stores { internal class ScheduleStore : BaseStore { //private void UpdateActiveScheduleCount(Schedule entity) //{ // Type doctype = entity.DocumentType(); // var linktype = CoreUtils.TypeList( // AppDomain.CurrentDomain.GetAssemblies(), // x => (typeof(IEntityLink).GetTypeInfo().IsAssignableFrom(x) && (x.BaseType.GenericTypeArguments.Length == 1) && (x.BaseType.GenericTypeArguments[0] == doctype)) // ).FirstOrDefault(); // if (linktype == null) // return; // var link = Activator.CreateInstance(linktype) as IEntityLink; // link.ID = entity.DocumentID; // if (entity.HasOriginalValue(x=>x.DocumentID)) // ((BaseObject)link).OriginalValues["ID"] = entity.GetOriginalValue(x=>x.DocumentID); // ParameterExpression parameter = Expression.Parameter(doctype, "x"); // MemberExpression property = Expression.Property(parameter, "ActiveSchedules"); // var delegateType = typeof(Func<,>).MakeGenericType(doctype, typeof(int)); // var tgt = Expression.Lambda(delegateType, property, parameter); // //var tgt = CoreUtils.CreateMemberExpression(entity.DocumentType, "ActiveSchedules"); // Type aggtype = typeof(IntegerAggregate<,>).MakeGenericType(entity.GetType(), doctype); // var agg = Activator.CreateInstance(aggtype, null, tgt, AggregateType.Count); // Array arr = Array.CreateInstance(aggtype, 1); // arr.SetValue(agg, 0); // MethodInfo method = this.GetType().GetMethod("UpdateAggregate"); // MethodInfo generic = method.MakeGenericMethod(doctype); // generic.Invoke(this, new object[] { entity, link, arr }); //} //private enum ScheduleAction //{ // Update, // Delete //} //private void CheckScheduleActive(Schedule entity, ScheduleAction action) //{ // if (action == ScheduleAction.Delete) // { // // Is the stored version of this schedule Active? // bool bActive = entity.OriginalValues.ContainsKey("Active") ? (bool)entity.OriginalValues["Active"] : entity.Active; // if (bActive) // { // entity.DocumentID = Guid.Empty; // UpdateActiveScheduleCount(entity); // } // } // else // { // // Is this a new schedule that has already been set to active? // if (entity.ID.Equals(Guid.Empty) && entity.Active) // UpdateActiveScheduleCount(entity); // // Has the Active flag been changed? // else if (entity.OriginalValues.ContainsKey("Active")) // { // bool bOrig = false; // bool.TryParse(entity.OriginalValues["Active"].ToString(), out bOrig); // bool bCurrent = entity.Active; // if (bOrig != bCurrent) // { // Guid id = entity.DocumentID; // if (!bCurrent) // entity.DocumentID = Guid.Empty; // UpdateActiveScheduleCount(entity); // entity.DocumentID = id; // } // } // } //} protected override void BeforeSave(Schedule entity) { base.BeforeSave(entity); //CheckScheduleActive(entity,ScheduleAction.Update); } protected override void BeforeDelete(Schedule entity) { base.BeforeDelete(entity); //CheckScheduleActive(entity, ScheduleAction.Delete); } } }