コード例 #1
0
ファイル: views.py プロジェクト: aculich/coldfront
    def post(self, request):
        if EMAIL_ENABLED:
            send_email_template('Upgrade Account Request',
                                'email/upgrade_account_request.txt',
                                {'user': request.user}, request.user.email,
                                [EMAIL_TICKET_SYSTEM_ADDRESS])

        messages.success(request, 'Your request has been sent')
        return HttpResponseRedirect(reverse('user-profile'))
コード例 #2
0
    def get(self, request, pk):
        subscription_obj = get_object_or_404(Subscription, pk=pk)

        subscription_status_active_obj = SubscriptionStatusChoice.objects.get(
            name='Active')
        subscription_obj.status = subscription_status_active_obj
        subscription_obj.save()

        messages.success(
            request,
            'Subscription to {} has been ACTIVATED for {} {} ({})'.format(
                subscription_obj.get_parent_resource,
                subscription_obj.project.pi.first_name,
                subscription_obj.project.pi.last_name,
                subscription_obj.project.pi.username))

        resource_name = subscription_obj.get_parent_resource
        domain_url = get_domain_url(self.request)
        subscription_url = '{}{}'.format(
            domain_url,
            reverse('subscription-detail', kwargs={'pk': subscription_obj.pk}))

        if EMAIL_ENABLED:
            template_context = {
                'center_name': EMAIL_CENTER_NAME,
                'resource': resource_name,
                'subscription_url': subscription_url,
                'signature': EMAIL_SIGNATURE,
                'opt_out_instruction_url': EMAIL_OPT_OUT_INSTRUCTION_URL
            }

            email_receiver_list = []

            for subscription_user in subscription_obj.subscriptionuser_set.exclude(
                    status__name__in=['Removed', 'Error']):
                subscription_activate_user.send(
                    sender=self.__class__,
                    subscription_user_pk=subscription_user.pk)
                if subscription_user.subscription.project.projectuser_set.get(
                        user=subscription_user.user).enable_notifications:
                    email_receiver_list.append(subscription_user.user.email)

            send_email_template('Subscription Activated',
                                'email/subscription_activated.txt',
                                template_context, EMAIL_SENDER,
                                email_receiver_list)

        return HttpResponseRedirect(reverse('subscription-request-list'))
コード例 #3
0
ファイル: views.py プロジェクト: aculich/coldfront
    def post(self, request, *args, **kwargs):
        project_obj = get_object_or_404(Project, pk=self.kwargs.get('pk'))
        project_review_form = ProjectReviewForm(project_obj.pk, request.POST)

        project_review_status_choice = ProjectReviewStatusChoice.objects.get(
            name='Pending')

        if project_review_form.is_valid():
            form_data = project_review_form.cleaned_data
            project_review_obj = ProjectReview.objects.create(
                project=project_obj,
                reason_for_not_updating_project=form_data.get('reason'),
                status=project_review_status_choice)

            project_obj.force_review = False
            project_obj.save()

            domain_url = get_domain_url(self.request)
            url = '{}{}'.format(domain_url, reverse('project-review-list'))

            if EMAIL_ENABLED:
                send_email_template('New project review has been submitted',
                                    'email/new_project_review.txt',
                                    {'url': url}, EMAIL_SENDER, [
                                        EMAIL_DIRECTOR_EMAIL_ADDRESS,
                                    ])

            messages.success(request, 'Project reviewed successfully.')
            return HttpResponseRedirect(
                reverse('project-detail', kwargs={'pk': project_obj.pk}))
        else:
            messages.error(
                request,
                'There was an error in processing  your project review.')
            return HttpResponseRedirect(
                reverse('project-detail', kwargs={'pk': project_obj.pk}))
コード例 #4
0
    def form_valid(self, form):
        form_data = form.cleaned_data
        project_obj = get_object_or_404(Project,
                                        pk=self.kwargs.get('project_pk'))
        resource_obj = form_data.get('resource')
        justification = form_data.get('justification')
        quantity = form_data.get('quantity', 1)

        usernames = form_data.get('users')
        usernames.append(project_obj.pi.username)
        usernames = list(set(usernames))

        users = [User.objects.get(username=username) for username in usernames]
        if project_obj.pi not in users:
            users.append(project_obj.pi)

        active_until = datetime.datetime.now() + relativedelta(years=1)
        subscription_new_status = SubscriptionStatusChoice.objects.get(
            name='New')
        subscription_obj = Subscription.objects.create(
            project=project_obj,
            justification=justification,
            quantity=quantity,
            active_until=active_until,
            status=subscription_new_status)
        subscription_obj.resources.add(resource_obj)

        for linked_resource in resource_obj.linked_resources.all():
            subscription_obj.resources.add(linked_resource)

        subscription_user_active_status = SubscriptionUserStatusChoice.objects.get(
            name='Active')
        for user in users:
            subscription_user_obj = SubscriptionUser.objects.create(
                subscription=subscription_obj,
                user=user,
                status=subscription_user_active_status)

        pi_name = '{} {} ({})'.format(subscription_obj.project.pi.first_name,
                                      subscription_obj.project.pi.last_name,
                                      subscription_obj.project.pi.username)
        resource_name = subscription_obj.get_parent_resource
        domain_url = get_domain_url(self.request)
        url = '{}{}'.format(domain_url, reverse('subscription-request-list'))

        if EMAIL_ENABLED:
            template_context = {
                'pi': pi_name,
                'resource': resource_name,
                'url': url
            }

            send_email_template(
                'New subscription request: {} - {}'.format(
                    pi_name,
                    resource_name), 'email/new_subscription_request.txt',
                template_context, EMAIL_SENDER, [
                    EMAIL_TICKET_SYSTEM_ADDRESS,
                ])

        return super().form_valid(form)
コード例 #5
0
    def post(self, request, *args, **kwargs):
        pk = self.kwargs.get('pk')
        old_subscription_obj = get_object_or_404(Subscription, pk=pk)

        users_in_subscription = self.get_users_in_subscription(
            old_subscription_obj)

        formset = formset_factory(SubscriptionReviewUserForm,
                                  max_num=len(users_in_subscription))
        formset = formset(request.POST,
                          initial=users_in_subscription,
                          prefix='userform')

        if not users_in_subscription or formset.is_valid():
            subscription_pending_status_choice = SubscriptionStatusChoice.objects.get(
                name='Pending')
            subscription_inactive_status_choice = SubscriptionStatusChoice.objects.get(
                name='Inactive (Renewed)')

            subscription_user_active_status_choice = SubscriptionUserStatusChoice.objects.get(
                name='Active')

            project_user_remove_status_choice = ProjectUserStatusChoice.objects.get(
                name='Removed')

            active_until = datetime.datetime.now() + relativedelta(years=1)

            new_subscription_obj = Subscription.objects.create(
                project=old_subscription_obj.project,
                justification=old_subscription_obj.justification,
                quantity=old_subscription_obj.quantity,
                active_until=active_until,
                status=subscription_pending_status_choice)

            for resource in old_subscription_obj.resources.all():
                new_subscription_obj.resources.add(resource)

            # Add PI
            subscription_user_obj = SubscriptionUser.objects.create(
                subscription=new_subscription_obj,
                user=old_subscription_obj.project.pi,
                status=subscription_user_active_status_choice)

            # Copy subscription attributes

            for subscription_attribute_obj in old_subscription_obj.subscriptionattribute_set.all(
            ):
                subscription_attribute_obj.pk = None
                subscription_attribute_obj.id = None
                subscription_attribute_obj.subscription = new_subscription_obj
                subscription_attribute_obj.save()

            if users_in_subscription:
                for form in formset:
                    user_form_data = form.cleaned_data

                    user_obj = User.objects.get(
                        username=user_form_data.get('username'))

                    user_status = user_form_data.get('user_status')

                    if user_status == 'keep_in_subscription_and_project':
                        subscription_user_obj = SubscriptionUser.objects.create(
                            subscription=new_subscription_obj,
                            user=user_obj,
                            status=subscription_user_active_status_choice)

                    elif user_status == 'keep_in_project_only':
                        subscription_user_obj = old_subscription_obj.subscriptionuser_set.get(
                            user=user_obj)
                        subscription_remove_user.send(
                            sender=self.__class__,
                            subscription_user_pk=subscription_user_obj.pk)

                    elif user_status == 'remove_from_project':
                        project_user_obj = ProjectUser.objects.get(
                            project=old_subscription_obj.project,
                            user=user_obj)
                        project_user_obj.status = project_user_remove_status_choice
                        project_user_obj.save()
                        subscription_user_obj = old_subscription_obj.subscriptionuser_set.get(
                            user=user_obj)
                        subscription_remove_user.send(
                            sender=self.__class__,
                            subscription_user_pk=subscription_user_obj.pk)

            old_subscription_obj.status = subscription_inactive_status_choice
            old_subscription_obj.save()

            pi_name = '{} {} ({})'.format(
                new_subscription_obj.project.pi.first_name,
                new_subscription_obj.project.pi.last_name,
                new_subscription_obj.project.pi.username)
            resource_name = new_subscription_obj.get_parent_resource
            domain_url = get_domain_url(self.request)
            url = '{}{}'.format(domain_url,
                                reverse('subscription-request-list'))

            if EMAIL_ENABLED:
                template_context = {
                    'pi': pi_name,
                    'resource': resource_name,
                    'url': url
                }

                send_email_template(
                    'Subscription renewed: {} - {}'.format(
                        pi_name,
                        resource_name), 'email/subscription_renewed.txt',
                    template_context, EMAIL_SENDER, [
                        EMAIL_TICKET_SYSTEM_ADDRESS,
                    ])

            messages.success(request, 'Subscription renewed successfully')
            return HttpResponseRedirect(
                reverse('project-detail',
                        kwargs={'pk': new_subscription_obj.project.pk}))
コード例 #6
0
def send_expiry_emails():
    ### Subscriptions expiring

    for days_remaining in sorted(
            set(EMAIL_SUBSCRIPTION_EXPIRING_NOTIFICATION_DAYS)):
        expring_in_days = datetime.datetime.today() + datetime.timedelta(
            days=days_remaining)

        for subscription_obj in Subscription.objects.filter(
                status__name='Active', active_until=expring_in_days):

            subscripion_renew_url = '{}/{}/{}/{}/'.format(
                CENTER_BASE_URL.strip('/'), 'subscription',
                subscription_obj.pk, 'renew')

            resource_name = subscription_obj.get_parent_resource.name

            template_context = {
                'center_name': CENTER_NAME,
                'subscription_type': resource_name,
                'expring_in_days': days_remaining,
                'subscripion_renew_url': subscripion_renew_url,
                'project_renewal_help_url': CENTER_PROJECT_RENEWAL_HELP_URL,
                'opt_out_instruction_url': EMAIL_OPT_OUT_INSTRUCTION_URL,
                'signature': EMAIL_SIGNATURE
            }

            email_receiver_list = []
            for subscription_user in subscription_obj.project.projectuser_set.all(
            ):
                if subscription_user.enable_notifications:
                    email_receiver_list.append(subscription_user.user.email)

            send_email_template(
                'Subscription to {} expiring in {} days'.format(
                    resource_name,
                    days_remaining), 'email/subscription_expiring.txt',
                template_context, EMAIL_SENDER, email_receiver_list)

            logger.info(
                'Subscription to {} expiring in {} days email sent to PI {}.'.
                format(resource_name, days_remaining,
                       subscription_obj.project.pi.username))

    ### Expired subscriptions

    expring_in_days = datetime.datetime.today() + datetime.timedelta(days=-1)

    for subscription_obj in Subscription.objects.filter(
            active_until=expring_in_days):

        resource_name = subscription_obj.get_parent_resource.name

        subscripion_renew_url = '{}/{}/{}/{}/'.format(
            CENTER_BASE_URL.strip('/'), 'subscription', subscription_obj.pk,
            'renew')

        project_url = '{}/{}/{}/'.format(CENTER_BASE_URL.strip('/'), 'project',
                                         subscription_obj.project.pk)

        template_context = {
            'center_name': CENTER_NAME,
            'subscription_type': resource_name,
            'project_renewal_help_url': CENTER_PROJECT_RENEWAL_HELP_URL,
            'project_url': project_url,
            'opt_out_instruction_url': EMAIL_OPT_OUT_INSTRUCTION_URL,
            'signature': EMAIL_SIGNATURE
        }

        email_receiver_list = []
        for subscription_user in subscription_obj.project.projectuser_set.all(
        ):
            if subscription_user.enable_notifications:
                email_receiver_list.append(subscription_user.user.email)

        send_email_template(
            'Subscription to {} has expired'.format(resource_name),
            'email/subscription_expired.txt', template_context, EMAIL_SENDER,
            email_receiver_list)

        logger.info('Subscription to {} expired email sent to PI {}.'.format(
            resource_name, days_remaining,
            subscription_obj.project.pi.username))