public void UpdatePersonLists_2Changes_NonInSubscription_NothingAddedInSubscription_And_NoNotificationCreated(string municipalityCode)
        {
            var dce = new DataChangeEvent[] {
                new DataChangeEvent()
                {
                    PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid()
                },
                new DataChangeEvent()
                {
                    PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid()
                }
            };

            var sub = Utils.CreateCriteriaSubscription(municipalityCode);

            using (var dataContext = new EventBrokerDataContext())
            {
                dataContext.DataChangeEvents.InsertAllOnSubmit(dce);
                dataContext.Subscriptions.InsertOnSubmit(sub);
                dataContext.SubmitChanges();
            }
            using (var dataContext = new EventBrokerDataContext())
            {
                int records            = dataContext.UpdatePersonLists(DateTime.Now, (int)Data.SubscriptionType.SubscriptionTypes.DataChange);
                var subscriptionPerson = dataContext.SubscriptionPersons.Where(sp => sp.SubscriptionId == sub.SubscriptionId).SingleOrDefault();
                Assert.Null(subscriptionPerson);

                var notif = dataContext.EventNotifications.Where(en => en.SubscriptionId == sub.SubscriptionId).SingleOrDefault();
                Assert.Null(notif);
            }
        }
        /// <summary>
        /// Deletes the given subscription from the database
        /// </summary>
        /// <param name="subscriptionId"></param>
        /// <param name="subscriptionType"></param>
        /// <returns></returns>
        private bool DeleteSubscription(Guid subscriptionId, CprBroker.EventBroker.Data.SubscriptionType.SubscriptionTypes subscriptionType)
        {
            // Find the Subscription object and delete it and its children
            using (EventBrokerDataContext dataContext = new EventBrokerDataContext())
            {
                System.Data.Linq.DataLoadOptions loadOptions = new System.Data.Linq.DataLoadOptions();
                Subscription.SetLoadOptionsForChildren(loadOptions);
                dataContext.LoadOptions = loadOptions;

                var subscription = (from sub in dataContext.Subscriptions
                                    where sub.SubscriptionId == subscriptionId && !sub.Deactivated.HasValue && sub.SubscriptionTypeId == (int)subscriptionType
                                    select sub
                                    ).SingleOrDefault();

                if (subscription != null)
                {
                    subscription.Deactivated = DateTime.Now;
                    dataContext.SubmitChanges();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
 public static void ClearDatabase()
 {
     using (var dataContext = new EventBrokerDataContext())
     {
         dataContext.BirthdateEventNotifications.DeleteAllOnSubmit(dataContext.BirthdateEventNotifications);
         dataContext.BirthdateSubscriptions.DeleteAllOnSubmit(dataContext.BirthdateSubscriptions);
         dataContext.DataChangeEvents.DeleteAllOnSubmit(dataContext.DataChangeEvents);
         dataContext.DataSubscriptions.DeleteAllOnSubmit(dataContext.DataSubscriptions);
         dataContext.EventNotifications.DeleteAllOnSubmit(dataContext.EventNotifications);
         dataContext.SubscriptionCriteriaMatches.DeleteAllOnSubmit(dataContext.SubscriptionCriteriaMatches);
         dataContext.SubscriptionPersons.DeleteAllOnSubmit(dataContext.SubscriptionPersons);
         //dataContext.Subscriptions.DeleteAllOnSubmit(dataContext.Subscriptions);
         dataContext.SubmitChanges();
     }
 }
 /// <summary>
 /// Interface implementation
 /// </summary>
 public ChangeSubscriptionType Subscribe(ChannelBaseType notificationChannel, Guid[] personUuids)
 {
     using (EventBrokerDataContext dataContext = new EventBrokerDataContext())
     {
         Data.Subscription subscription = AddSubscription(dataContext, Data.SubscriptionType.SubscriptionTypes.DataChange, CprBroker.Engine.BrokerContext.Current.ApplicationId.Value, notificationChannel, personUuids, null);
         if (subscription != null)
         {
             subscription.DataSubscription = new DataSubscription();
         }
         dataContext.SubmitChanges();
         if (subscription != null)
         {
             // Now get the subscription from the database to make sure everything is OK
             return(GetActiveSubscriptionsList(subscription.SubscriptionId).SingleOrDefault() as ChangeSubscriptionType);
         }
     }
     return(null);
 }
 /// <summary>
 /// Interface implementation
 /// </summary>
 public ChangeSubscriptionType SubscribeOnCriteria(ChannelBaseType notificationChannel, SoegObjektType criteria)
 {
     using (EventBrokerDataContext dataContext = new EventBrokerDataContext())
     {
         /*
          * For now we assign this data type as a data change type.
          */
         Data.Subscription subscription = AddSubscription(dataContext, Data.SubscriptionType.SubscriptionTypes.DataChange /* May be changed later */, CprBroker.Engine.BrokerContext.Current.ApplicationId.Value, notificationChannel, new Guid[0], criteria);
         if (subscription != null)
         {
             subscription.DataSubscription = new DataSubscription();
         }
         dataContext.SubmitChanges();
         if (subscription != null)
         {
             // Now get the subscription from the database to make sure everything is OK
             return(GetActiveSubscriptionsList(subscription.SubscriptionId).SingleOrDefault() as ChangeSubscriptionType);
         }
     }
     return(null);
 }
        /// <summary>
        /// Interface implementation
        /// </summary>
        public BirthdateSubscriptionType SubscribeOnBirthdate(ChannelBaseType notificationChannel, Nullable <int> years, int priorDays, Guid[] personUuids)
        {
            using (EventBrokerDataContext dataContext = new EventBrokerDataContext())
            {
                Data.Subscription subscription = AddSubscription(dataContext, Data.SubscriptionType.SubscriptionTypes.Birthdate, CprBroker.Engine.BrokerContext.Current.ApplicationId.Value, notificationChannel, personUuids, null);
                if (subscription != null)
                {
                    subscription.BirthdateSubscription           = new BirthdateSubscription();
                    subscription.BirthdateSubscription.AgeYears  = years;
                    subscription.BirthdateSubscription.PriorDays = priorDays;
                }

                dataContext.SubmitChanges();
                if (subscription != null)
                {
                    // Now get the subscription from the database to make sure everything is OK
                    return(GetActiveSubscriptionsList(subscription.SubscriptionId).SingleOrDefault() as BirthdateSubscriptionType);
                }
            }
            return(null);
        }
        public void UpdatePersonLists_2Changes_1MovingIn_PersonAdded(string municipalityCode)
        {
            var dce = new DataChangeEvent[] {
                new DataChangeEvent()
                {
                    PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid()
                },
                new DataChangeEvent()
                {
                    PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid()
                }
            };

            var sub = Utils.CreateCriteriaSubscription(municipalityCode);

            sub.SubscriptionCriteriaMatches.Add(new SubscriptionCriteriaMatch()
            {
                SubscriptionCriteriaMatchId = Guid.NewGuid(), DataChangeEvent = dce[0]
            });

            using (var dataContext = new EventBrokerDataContext())
            {
                dataContext.DataChangeEvents.InsertAllOnSubmit(dce);
                dataContext.Subscriptions.InsertOnSubmit(sub);
                dataContext.SubmitChanges();
            }
            using (var dataContext = new EventBrokerDataContext())
            {
                int records             = dataContext.UpdatePersonLists(DateTime.Now, (int)Data.SubscriptionType.SubscriptionTypes.DataChange);
                var subscriptionPersons = dataContext.SubscriptionPersons.Where(sp => sp.SubscriptionId == sub.SubscriptionId && sp.Removed == null).ToArray();
                Assert.AreEqual(1, subscriptionPersons.Length);
                Assert.Null(subscriptionPersons[0].Removed);

                var notif = dataContext.EventNotifications.Where(en => en.SubscriptionId == sub.SubscriptionId).SingleOrDefault();
                Assert.Null(notif);
            }
        }
        public void UpdatePersonLists_2Changes_1MovingOut_PersonRemovedAndNotoficationAdded(string municipalityCode)
        {
            var dce = new DataChangeEvent[] {
                new DataChangeEvent()
                {
                    PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid()
                },
                new DataChangeEvent()
                {
                    PersonRegistrationId = Guid.NewGuid(), DueDate = DateTime.Now, ReceivedDate = DateTime.Now, PersonUuid = Guid.NewGuid(), DataChangeEventId = Guid.NewGuid()
                }
            };

            var sub = Utils.CreateCriteriaSubscription(municipalityCode);

            sub.SubscriptionPersons.Add(new SubscriptionPerson()
            {
                SubscriptionPersonId = Guid.NewGuid(), PersonUuid = dce[0].PersonUuid, Created = DateTime.Now, Removed = null
            });

            using (var dataContext = new EventBrokerDataContext())
            {
                dataContext.DataChangeEvents.InsertAllOnSubmit(dce);
                dataContext.Subscriptions.InsertOnSubmit(sub);
                dataContext.SubmitChanges();
            }
            using (var dataContext = new EventBrokerDataContext())
            {
                int records            = dataContext.UpdatePersonLists(DateTime.Now, (int)Data.SubscriptionType.SubscriptionTypes.DataChange);
                var subscriptionPerson = dataContext.SubscriptionPersons.Where(sp => sp.SubscriptionId == sub.SubscriptionId).Single();
                Assert.NotNull(subscriptionPerson.Removed);

                var notif = dataContext.EventNotifications.Where(en => en.SubscriptionId == sub.SubscriptionId).Single();
                Assert.NotNull(notif.IsLastNotification);
                Assert.True(notif.IsLastNotification.Value);
            }
        }