def test_meeting_invitation_activity(self): meeting = Meeting.objects.get(id=1) meeting2 = Meeting.objects.get(id=2) user = User.objects.get(id=1) meeting_invitation, _ = meeting.invite_user(user) meeting_invitation2, _ = meeting2.invite_user(user) # Add first activity activity = Activity(actor=user, verb=MeetingInvitationVerb, object=meeting_invitation, target=meeting_invitation.user, time=meeting_invitation.created_at) self.manager.add_activity(activity, [user.id], [NotificationFeed]) self.assertEqual(1, NotificationFeed.objects.count()) # Add second activity in the same group activity1 = Activity(actor=user, verb=MeetingInvitationVerb, object=meeting_invitation2, target=meeting_invitation.user, time=meeting_invitation.created_at) self.manager.add_activity(activity1, [user.id], [NotificationFeed]) self.assertEqual(1, NotificationFeed.objects.count()) # Remove fist activity self.manager.remove_activity(activity, [], [NotificationFeed]) self.assertEqual(1, NotificationFeed.objects.count()) # Remove the second activity and mage sure the aggregated activity is removed self.manager.remove_activity(activity1, [], [NotificationFeed]) self.assertEqual(0, NotificationFeed.objects.count())
def handle_create(self, instance, **kwargs): activity = Activity( actor=instance, verb=CompanyInterestVerb, object=instance, time=instance.created_at, extra_context={}, ) recipients = [ member.user for member in AbakusGroup.objects.get( name="Bedkom").memberships.all() ] self.manager.add_activity(activity, [recipient.pk for recipient in recipients], [NotificationFeed]) for recipient in recipients: notification = CompanyInterestNotification( recipient, company_interest=instance) notification.notify() send_email.delay( to_email=f"bedriftskontakt@{settings.GSUITE_DOMAIN}", context=instance.generate_mail_context(), subject="En ny bedrift har meldt sin interesse", plain_template="companies/email/company_interest.txt", html_template="companies/email/company_interest.html", )
def get_activity(self, comment, reply=False): return Activity(actor=comment.created_by, verb=CommentReplyVerb if reply else CommentVerb, object=comment, target=comment.content_object, time=comment.created_at, extra_context={'content': comment.text})
def get_activity(self, membership): return Activity(verb=GroupJoinVerb, actor=membership.user, target=membership.abakus_group, object=membership, time=membership.created_at, extra_context={})
def get_activity(self, registration): return Activity(verb=EventRegisterVerb, actor=registration.user, target=registration.event, object=registration, time=registration.created_at, extra_context={})
def get_activity(self, event): return Activity( actor=event.company, verb=EventCreateVerb, object=event, time=event.created_at, extra_context={"title": event.title}, )
def get_activity(self, meeting_invitation): return Activity( actor=meeting_invitation.created_by, verb=MeetingInvitationVerb, object=meeting_invitation, target=meeting_invitation.user, time=meeting_invitation.created_at, )
def get_activity(self, penalty): return Activity(actor=penalty.source_event, verb=PenaltyVerb, object=penalty, target=penalty.user, time=penalty.created_at, extra_context={ 'reason': penalty.reason, 'weight': penalty.weight, })
def handle_bump(self, registration): activity = Activity(actor=registration.event, verb=RegistrationBumpVerb, object=registration, target=registration.user) self.manager.add_activity(activity, [registration.user_id], [NotificationFeed]) # Send Notification notification = EventBumpNotification(registration.user, event=registration.event) notification.notify()
def handle_admin_registration(self, registration): activity = Activity(actor=registration.event, verb=AdminRegistrationVerb, object=registration, target=registration.user) self.manager.add_activity(activity, [registration.user_id], [NotificationFeed]) # Send Notification notification = EventAdminRegistrationNotification( registration.user, event=registration.event, reason=registration.admin_registration_reason) notification.notify()
def fanout(operation, activity, recipients, feed): """ Fanout is called in celery task and is responsible for distributing the actions into the destination feeds. """ activity = Activity.deserialize(activity) feed = apps.get_model("feeds", feed) if operation == ADD: return add_to_feed(activity, feed, recipients) elif operation == REMOVE: return remove_from_feed(activity, feed, recipients) raise ValueError("Invalid feed operation")
def handle_sent(self, instance): """ A restricted mail is successfully processed by the system. """ if not instance.created_by: return activity = Activity( actor=instance.created_by, verb=RestrictedMailSent, object=instance, time=instance.used, extra_context={} ) self.manager.add_activity(activity, [instance.created_by.pk], [NotificationFeed]) # Send notification notification = RestrictedMailSentNotification(instance.created_by) notification.notify()
def handle_payment_overdue(self, registration): """ Notify about payment overdue, called from a celery task run by beat. """ activity = Activity( actor=registration.event, verb=PaymentOverdueVerb, object=registration, target=registration.user, ) self.manager.add_activity(activity, [registration.user_id], [NotificationFeed]) # Send notification notification = EventPaymentOverdueNotification( registration.user, event=registration.event) notification.notify()
def handle_send(self, announcement): if not announcement.created_by: return activity = Activity(actor=announcement.created_by, verb=AnnouncementVerb, object=announcement, time=announcement.created_at, extra_context={}) recipients = announcement.lookup_recipients() self.manager.add_activity(activity, [recipient.pk for recipient in recipients], [NotificationFeed, PersonalFeed]) # Send notifications for recipient in recipients: notification = AnnouncementNotification(recipient, announcement=announcement) notification.notify()
def activities(self): return [ Activity.deserialize(activity) for activity in self.activity_store ]