Changeset 5b834ab


Ignore:
Timestamp:
Sep 8, 2011, 1:31:12 AM (14 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, space-access, stable, stage, test-hooks
Children:
aa31d18
Parents:
bb674c2
git-author:
Alex Dehnert <adehnert@…> (09/08/11 00:51:05)
git-committer:
Alex Dehnert <adehnert@…> (09/08/11 01:31:12)
Message:

Support basic start-of-year form

  • Anti-hazing acknowledgement
  • Group membership information
  • Group membership confirmation
Location:
asadb
Files:
7 added
4 edited

Legend:

Unmodified
Added
Removed
  • asadb/forms/admin.py

    rbb674c2 r5b834ab  
    2222admin.site.register(forms.models.FYSM, FYSMAdmin)
    2323admin.site.register(forms.models.FYSMCategory, FYSMCategoryAdmin)
     24
     25class Admin_GroupMembershipUpdate(admin.ModelAdmin):
     26    list_display = (
     27        'pk',
     28        'group',
     29        'update_time',
     30        'updater_name',
     31        'updater_title',
     32        'num_undergrads',
     33        'num_grads',
     34        'num_community',
     35        'num_other',
     36    )
     37    list_display_links = ('pk', 'group', )
     38admin.site.register(forms.models.GroupMembershipUpdate, Admin_GroupMembershipUpdate)
     39
     40class Admin_PersonMembershipUpdate(admin.ModelAdmin):
     41    list_display = (
     42        'pk',
     43        'username',
     44        'update_time',
     45    )
     46    list_display_links = ('pk', 'username', )
     47admin.site.register(forms.models.PersonMembershipUpdate, Admin_PersonMembershipUpdate)
  • asadb/forms/models.py

    rbb674c2 r5b834ab  
    135135            preview.update_time = cls.never_updated
    136136            preview.save()
     137
     138
     139class GroupMembershipUpdate(models.Model):
     140    update_time = models.DateTimeField(default=datetime.datetime.utcfromtimestamp(0))
     141    updater_name = models.CharField(max_length=30)
     142    updater_title = models.CharField(max_length=30, help_text="You need not hold any particular title in the group, but we like to know who is completing the form.")
     143   
     144    group = models.ForeignKey(groups.models.Group, help_text="If your group does not appear in the list above, then please email asa-exec@mit.edu.")
     145    group_email = models.EmailField(help_text="The text of the law will be automatically distributed to your members via this list, in order to comply with the law.")
     146    officer_email = models.EmailField()
     147
     148    membership_definition = models.TextField()
     149    num_undergrads = models.IntegerField()
     150    num_grads = models.IntegerField()
     151    num_community = models.IntegerField()
     152    num_other = models.IntegerField()
     153
     154    membership_list = models.TextField(help_text="Member emails on separate lines (Athena usernames where applicable)")
     155
     156    compliance_statement = "By checking this, I hereby affirm that I have read and understand Chapter 269: Sections 17, 18, and 19 of Massachusetts Law. I furthermore attest that I will distribute to group members, pledges, and/or applicants, copies of Massachusetts Law 269: 17, 18, 19 and that our organization, group, or team agrees to comply with the provisions of that law. (See below for text.)"
     157    no_hazing = models.BooleanField(help_text=compliance_statement)
     158
     159
     160class PersonMembershipUpdate(models.Model):
     161    update_time = models.DateTimeField(default=datetime.datetime.utcfromtimestamp(0))
     162    username = models.CharField(max_length=30)
     163    groups = models.ManyToManyField(groups.models.Group, help_text="By selecting a group here, you indicate that you are an active member of the group in question.<br>If your group does not appear in the list above, then please email asa-exec@mit.edu.<br>")
  • asadb/forms/views.py

    r2c0eaa1 r5b834ab  
    220220    }
    221221    return render_to_response('fysm/thanks.html', context, context_instance=RequestContext(request), )
     222
     223#####################
     224# Membership update #
     225#####################
     226
     227class Form_GroupMembershipUpdate(ModelForm):
     228    def __init__(self, *args, **kwargs):
     229        super(Form_GroupMembershipUpdate, self).__init__(*args, **kwargs)
     230        self.fields['no_hazing'].required = True
     231
     232    class Meta:
     233        model = forms.models.GroupMembershipUpdate
     234        fields = [
     235            'group',
     236            'updater_title',
     237            'group_email',
     238            'officer_email',
     239            'no_hazing',
     240            'membership_definition',
     241            'num_undergrads',
     242            'num_grads',
     243            'num_community',
     244            'num_other',
     245            'membership_list',
     246        ]
     247
     248@login_required
     249def group_membership_update(request, ):
     250    year = datetime.date.today().year
     251
     252    initial = {
     253    }
     254    update_obj = forms.models.GroupMembershipUpdate()
     255    update_obj.update_time  = datetime.datetime.now()
     256    update_obj.updater_name = request.user.username
     257
     258    confirm_path = reverse('membership-confirm', )
     259    confirm_uri = '%s://%s%s' % (request.is_secure() and 'https' or 'http',
     260         request.get_host(), confirm_path)
     261
     262    if request.method == 'POST': # If the form has been submitted...
     263        form = Form_GroupMembershipUpdate(request.POST, request.FILES, instance=update_obj) # A form bound to the POST data
     264
     265        if form.is_valid(): # All validation rules pass
     266            request_obj = form.save()
     267            group_obj = request_obj.group
     268
     269
     270            # Send email
     271            tmpl = get_template('membership/anti-hazing.txt')
     272            ctx = Context({
     273                'update': request_obj,
     274                'group': group_obj,
     275                'submitter': request.user,
     276            })
     277            body = tmpl.render(ctx)
     278            email = EmailMessage(
     279                subject='ASA Anti-Hazing Acknowledgement for %s' % (
     280                    group_obj.name,
     281                ),
     282                body=body,
     283                from_email=request.user.email,
     284                to=[request_obj.group_email, ],
     285                cc=[request_obj.officer_email, ],
     286                #bcc=['asa-db-outgoing@mit.edu', ],
     287            )
     288            email.send()
     289
     290            # Send email
     291            tmpl = get_template('membership/submit-confirm-email.txt')
     292            ctx = Context({
     293                'update': request_obj,
     294                'group': group_obj,
     295                'submitter': request.user,
     296                'confirm_uri': confirm_uri,
     297            })
     298            body = tmpl.render(ctx)
     299            email = EmailMessage(
     300                subject='ASA Membership Information for %s' % (
     301                    group_obj.name,
     302                ),
     303                body=body,
     304                from_email=request.user.email,
     305                to=[request_obj.officer_email, ],
     306                #bcc=['asa-db-outgoing@mit.edu', ],
     307            )
     308            email.send()
     309
     310            return HttpResponseRedirect(reverse('membership-thanks', )) # Redirect after POST
     311
     312    else:
     313        form = Form_GroupMembershipUpdate(initial=initial, ) # An unbound form
     314
     315    context = {
     316        'form':form,
     317        'confirm_uri': confirm_uri,
     318        'pagename':'groups',
     319    }
     320    return render_to_response('membership/update.html', context, context_instance=RequestContext(request), )
     321
     322class Form_PersonMembershipUpdate(ModelForm):
     323    class Meta:
     324        model = forms.models.PersonMembershipUpdate
     325        fields = [
     326            'groups',
     327        ]
     328
     329@login_required
     330def person_membership_update(request, ):
     331    year = datetime.date.today().year
     332
     333    initial = {
     334    }
     335    update_obj = forms.models.PersonMembershipUpdate()
     336    update_obj.update_time  = datetime.datetime.now()
     337    update_obj.username = request.user.username
     338
     339    if request.method == 'POST': # If the form has been submitted...
     340        form = Form_PersonMembershipUpdate(request.POST, request.FILES, instance=update_obj) # A form bound to the POST data
     341
     342        if form.is_valid(): # All validation rules pass
     343            request_obj = form.save()
     344            return HttpResponseRedirect(reverse('membership-thanks', )) # Redirect after POST
     345
     346    else:
     347        form = Form_PersonMembershipUpdate(initial=initial, ) # An unbound form
     348
     349    context = {
     350        'form':form,
     351        'pagename':'groups',
     352    }
     353    return render_to_response('membership/confirm.html', context, context_instance=RequestContext(request), )
  • asadb/urls.py

    rb01b0ba r5b834ab  
    3535    url(r'^fysm/(?:(\d+)/)?(?:([\w-]+)/)?$', forms.views.fysm_by_years, name='fysm', ),
    3636
     37    url(r'^membership/update/$', forms.views.group_membership_update, name='membership-update', ),
     38    url(r'^membership/confirm/$', forms.views.person_membership_update, name='membership-confirm', ),
     39    url(
     40        r'^membership/thanks/$',
     41        'django.views.generic.simple.direct_to_template',
     42        {'template': 'membership/thanks.html', 'extra_context': { 'pagename':'groups' }, },
     43        name='membership-thanks',
     44    ),
     45
    3746    # Group list
    3847    url(
Note: See TracChangeset for help on using the changeset viewer.