def clone(self, request, pk): """ Make a clone of this notice. """ notice = get_object_or_404(Notice, pk=pk) notice_clone = Notice() ignore_fields = [ 'guid', 'id', 'create_dt', 'update_dt', 'creator', 'creator_username', 'owner', 'owner_username' ] field_names = [ field.name for field in notice.__class__._meta.fields if field.name not in ignore_fields ] for name in field_names: setattr(notice_clone, name, getattr(notice, name)) notice_clone.notice_name = 'Clone of %s' % notice_clone.notice_name notice_clone.creator = request.user notice_clone.creator_username = request.user.username notice_clone.owner = request.user notice_clone.owner_username = request.user.username notice_clone.save() return redirect( reverse( 'admin:memberships_notice_change', args=[notice_clone.pk], ))
def clone(self, request, pk): """ Make a clone of this notice. """ notice = get_object_or_404(Notice, pk=pk) notice_clone = Notice() ignore_fields = [ "guid", "id", "create_dt", "update_dt", "creator", "creator_username", "owner", "owner_username", ] field_names = [field.name for field in notice.__class__._meta.fields if field.name not in ignore_fields] for name in field_names: setattr(notice_clone, name, getattr(notice, name)) notice_clone.notice_name = "Clone of %s" % notice_clone.notice_name notice_clone.creator = request.user notice_clone.creator_username = request.user.username notice_clone.owner = request.user notice_clone.owner_username = request.user.username notice_clone.save() return redirect(reverse("admin:memberships_notice_change", args=[notice_clone.pk]))
def clone(self, request, pk): """ Make a clone of this notice. """ notice = get_object_or_404(Notice, pk=pk) notice_clone = Notice() ignore_fields = ['guid', 'id', 'create_dt', 'update_dt', 'creator', 'creator_username', 'owner', 'owner_username'] field_names = [field.name for field in notice.__class__._meta.fields if field.name not in ignore_fields] for name in field_names: setattr(notice_clone, name, getattr(notice, name)) notice_clone.notice_name = 'Clone of %s' % notice_clone.notice_name notice_clone.creator = request.user notice_clone.creator_username = request.user.username notice_clone.owner = request.user notice_clone.owner_username = request.user.username notice_clone.save() return redirect(reverse( 'admin:memberships_notice_change', args=[notice_clone.pk], ))
def application_entries(request, id=None, template_name="memberships/entries/details.html"): """ Displays the details of a membership application entry. """ if not id: return redirect(reverse('membership.application_entries_search')) entry = get_object_or_404(AppEntry, id=id) if not entry.allow_view_by(request.user): raise Http403 EventLog.objects.log(instance=entry) if request.method == "POST": form = MemberApproveForm(entry, request.POST) if form.is_valid(): status = request.POST.get('status', '') approve = (status.lower() == 'approve') or (status.lower() == 'approve renewal') entry.judge = request.user if approve: user_pk = int(form.cleaned_data['users']) if user_pk: entry.user = User.objects.get(pk=user_pk) else: entry.user = User.objects.create_user(**{ 'username': entry.spawn_username(entry.first_name, entry.last_name), 'email': entry.email, 'password': hashlib.sha1(entry.email).hexdigest()[:6] }) send_welcome_email(entry.user) # update application, user, # group, membership, and archive entry.approve() # silence old memberships within renewal period Membership.objects.silence_old_memberships(entry.user) # execute field functions (group subscriptions) entry.execute_field_functions() # send "approved" notification Notice.send_notice( request=request, entry=entry, emails=entry.email, notice_type='approve', membership=entry.membership, membership_type=entry.membership_type, ) EventLog.objects.log(instance=entry, action="approve") else: # if not approved entry.disapprove() # send "disapproved" notification Notice.send_notice( entry=entry, request=request, emails=entry.email, notice_type='disapprove', membership_type=entry.membership_type, ) EventLog.objects.log(instance=entry, action="disapprove") return redirect(reverse('membership.application_entries', args=[entry.pk])) else: # if request != POST form = MemberApproveForm(entry) return render_to_response(template_name, { 'entry': entry, 'form': form, }, context_instance=RequestContext(request))
def application_details(request, template_name="memberships/applications/details.html", **kwargs): """ Display a built membership application and handle submission. """ slug = kwargs.get('slug') cmb_id = kwargs.get('cmb_id') imv_id = kwargs.get('imv_id', 0) imv_guid = kwargs.get('imv_guid') secret_hash = kwargs.get('secret_hash', '') if not slug: raise Http404 user = request.user app = get_object_or_404(App, slug=slug) if not app.allow_view_by(user): raise Http403 # if this app is for corporation individuals, redirect them to corp-pre page if # they have not passed the security check. corporate_membership = None if hasattr(app, 'corp_app') and app.corp_app: if not cmb_id: # redirect them to the corp_pre page return redirect(reverse('membership.application_details_corp_pre', args=[app.slug])) corporate_membership = get_object_or_404(CorporateMembership, id=cmb_id) # check if they have verified their email or entered the secret code is_verified = False if request.user.profile.is_superuser or app.corp_app.authentication_method == 'admin': is_verified = True elif app.corp_app.authentication_method == 'email': try: indiv_veri = IndivMembEmailVeri8n.objects.get(pk=imv_id, guid=imv_guid) if indiv_veri.verified: is_verified = True except IndivMembEmailVeri8n.DoesNotExist: pass elif app.corp_app.authentication_method == 'secret_code': tmp_secret_hash = md5('%s%s' % (corporate_membership.secret_code, request.session.get('corp_hash_random_string', ''))).hexdigest() if secret_hash == tmp_secret_hash: is_verified = True if not is_verified: return redirect(reverse('membership.application_details_corp_pre', args=[slug])) EventLog.objects.log(instance=app) initial_dict = {} if hasattr(user, 'memberships'): is_only_a_member = [ user.profile.is_superuser == False, user.profile.is_member == True, ] if corporate_membership: # exclude corp. reps, creator and owner - they should be able to add new is_only_a_member.append(corporate_membership.allow_edit_by(user) == False) if user.profile.is_superuser: username = request.GET.get('username', unicode()) if username: try: registrant = User.objects.get(username=username) # get info from last time this app was filled out initial_dict = app.get_initial_info(registrant) except: pass elif all(is_only_a_member): # get info from last time this app was filled out initial_dict = app.get_initial_info(user) pending_entries = [] if hasattr(user, 'appentry_set'): pending_entries = user.appentry_set.filter( is_approved__isnull=True # pending ) # if an application entry was submitted # after your current membership was created if user.memberships.get_membership(): pending_entries.filter( entry_time__gte=user.memberships.get_membership().subscribe_dt ) try: app_entry_form = AppEntryForm( app, request.POST or None, request.FILES or None, user=user, corporate_membership=corporate_membership, initial=initial_dict ) except NoMembershipTypes as e: print e user_memberships = None if hasattr(user, 'memberships'): user_memberships = user.memberships.all() # non-admin has no membership-types available in this application # let them know to wait for their renewal period before trying again return render_to_response("memberships/applications/no-renew.html", { "app": app, "user": user, "memberships": user_memberships}, context_instance=RequestContext(request)) if request.method == "POST": if app_entry_form.is_valid(): entry = app_entry_form.save(commit=False) entry_invoice = entry.save_invoice() if user.is_authenticated(): entry.user = user entry.is_renewal = all(is_only_a_member) # add all permissions and save the model entry = update_perms_and_save(request, app_entry_form, entry) # administrators go to approve/disapprove page if user.profile.is_superuser: return redirect(reverse('membership.application_entries', args=[entry.pk])) # send "joined" notification Notice.send_notice( entry=entry, request=request, emails=entry.email, notice_type='join', membership_type=entry.membership_type, ) if entry_invoice.total == 0: if not entry_invoice.is_tendered: entry_invoice.tender(request.user) # online payment if entry_invoice.total > 0 and entry.payment_method and entry.payment_method.is_online: return HttpResponseRedirect(reverse( 'payment.pay_online', args=[entry_invoice.pk, entry_invoice.guid] )) if not entry.approval_required(): entry.user, created = entry.get_or_create_user() if created: send_welcome_email(entry.user) entry.approve() # silence old memberships within renewal period Membership.objects.silence_old_memberships(entry.user) # get user from the membership since it's null in the entry entry.user = entry.membership.user # send "approved" notification Notice.send_notice( request=request, emails=entry.email, notice_type='approve', membership=entry.membership, membership_type=entry.membership_type, ) # log - entry approval EventLog.objects.log(instance=entry) # log - entry submission EventLog.objects.log(instance=entry) return redirect(entry.confirmation_url) return render_to_response(template_name, { 'app': app, 'app_entry_form': app_entry_form, 'pending_entries': pending_entries, }, context_instance=RequestContext(request))
def application_details(request, template_name="memberships/applications/details.html", **kwargs): """ Display a built membership application and handle submission. """ slug = kwargs.get('slug') cmb_id = kwargs.get('cmb_id') imv_id = kwargs.get('imv_id', 0) imv_guid = kwargs.get('imv_guid') secret_hash = kwargs.get('secret_hash', '') if not slug: raise Http404 user = request.user app = get_object_or_404(App, slug=slug) if not app.allow_view_by(user): raise Http403 # if this app is for corporation individuals, redirect them to corp-pre page if # they have not passed the security check. corporate_membership = None if hasattr(app, 'corp_app') and app.corp_app: if not cmb_id: # redirect them to the corp_pre page return redirect(reverse('membership.application_details_corp_pre', args=[app.slug])) corporate_membership = get_object_or_404(CorporateMembership, id=cmb_id) # check if they have verified their email or entered the secret code is_verified = False if request.user.profile.is_superuser or app.corp_app.authentication_method == 'admin': is_verified = True elif app.corp_app.authentication_method == 'email': try: indiv_veri = IndivMembEmailVeri8n.objects.get(pk=imv_id, guid=imv_guid) if indiv_veri.verified: is_verified = True except IndivMembEmailVeri8n.DoesNotExist: pass elif app.corp_app.authentication_method == 'secret_code': tmp_secret_hash = md5('%s%s' % (corporate_membership.secret_code, request.session.get('corp_hash_random_string', ''))).hexdigest() if secret_hash == tmp_secret_hash: is_verified = True if not is_verified: return redirect(reverse('membership.application_details_corp_pre', args=[slug])) EventLog.objects.log(instance=app) initial_dict = {} if hasattr(user, 'memberships'): is_only_a_member = [ user.profile.is_superuser == False, user.profile.is_member == True, ] if corporate_membership: # exclude corp. reps, creator and owner - they should be able to add new is_only_a_member.append(corporate_membership.allow_edit_by(user) == False) if user.profile.is_superuser: username = request.GET.get('username', unicode()) if username: try: registrant = User.objects.get(username=username) # get info from last time this app was filled out initial_dict = app.get_initial_info(registrant) except: pass elif all(is_only_a_member): # get info from last time this app was filled out initial_dict = app.get_initial_info(user) pending_entries = [] if hasattr(user, 'appentry_set'): pending_entries = user.appentry_set.filter( is_approved__isnull=True # pending ) # if an application entry was submitted # after your current membership was created if user.memberships.get_membership(): pending_entries.filter( entry_time__gte=user.memberships.get_membership().subscribe_dt ) try: app_entry_form = AppEntryForm( app, request.POST or None, request.FILES or None, user=user, corporate_membership=corporate_membership, initial=initial_dict ) except NoMembershipTypes as e: print e # non-admin has no membership-types available in this application # let them know to wait for their renewal period before trying again return render_to_response("memberships/applications/no-renew.html", { "app": app, "user": user, "memberships": user.memberships.all()}, context_instance=RequestContext(request)) if request.method == "POST": if app_entry_form.is_valid(): entry = app_entry_form.save(commit=False) entry_invoice = entry.save_invoice() if user.is_authenticated(): entry.user = user entry.is_renewal = all(is_only_a_member) # add all permissions and save the model entry = update_perms_and_save(request, app_entry_form, entry) # administrators go to approve/disapprove page if user.profile.is_superuser: return redirect(reverse('membership.application_entries', args=[entry.pk])) # send "joined" notification Notice.send_notice( entry=entry, request=request, emails=entry.email, notice_type='join', membership_type=entry.membership_type, ) if entry_invoice.total == 0: if not entry_invoice.is_tendered: entry_invoice.tender(request.user) # online payment if entry_invoice.total > 0 and entry.payment_method and entry.payment_method.is_online: return HttpResponseRedirect(reverse( 'payments.views.pay_online', args=[entry_invoice.pk, entry_invoice.guid] )) if not entry.approval_required(): entry.user, created = entry.get_or_create_user() if created: send_welcome_email(entry.user) entry.approve() # silence old memberships within renewal period Membership.objects.silence_old_memberships(entry.user) # get user from the membership since it's null in the entry entry.user = entry.membership.user # send "approved" notification Notice.send_notice( request=request, emails=entry.email, notice_type='approve', membership=entry.membership, membership_type=entry.membership_type, ) # log - entry approval EventLog.objects.log(instance=entry) # log - entry submission EventLog.objects.log(instance=entry) return redirect(entry.confirmation_url) return render_to_response(template_name, { 'app': app, 'app_entry_form': app_entry_form, 'pending_entries': pending_entries, }, context_instance=RequestContext(request))