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'))
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'))
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}))
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)
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}))
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))