diff --git a/bikeshop_project/core/admin.py b/bikeshop_project/core/admin.py index 8c38f3f..cedce61 100644 --- a/bikeshop_project/core/admin.py +++ b/bikeshop_project/core/admin.py @@ -1,3 +1,5 @@ from django.contrib import admin +from .models import Membership, Payment # Register your models here. +admin.site.register([Membership, Payment]) diff --git a/bikeshop_project/core/forms.py b/bikeshop_project/core/forms.py new file mode 100644 index 0000000..2fce3f8 --- /dev/null +++ b/bikeshop_project/core/forms.py @@ -0,0 +1,77 @@ +import logging +from django.forms import BooleanField, CharField, CheckboxInput, RadioSelect, ModelForm, TextInput, HiddenInput, ChoiceField + +from registration.models import Member + +from .models import Membership, Payment + +logger = logging.getLogger('bikeshop') + + +class MembershipForm(ModelForm): + member = CharField(required=True, widget=HiddenInput()) + self_ident_other = CharField(required=False, label='Self identification', + widget=TextInput(attrs={'class': 'mdl-textfield__input'})) + gender_other = CharField(required=False, label='Other', widget=TextInput(attrs={'class': 'mdl-textfield__input'})) + safe_space = BooleanField(required=True, widget=CheckboxInput( + attrs={'class': 'mdl-checkbox__input'} + )) + respect_community = BooleanField(required=True, widget=CheckboxInput( + attrs={'class': 'mdl-checkbox__input'} + )) + give_back = BooleanField(required=True, widget=CheckboxInput( + attrs={'class': 'mdl-checkbox__input'} + )) + respect_shop = BooleanField(required=True, widget=CheckboxInput( + attrs={'class': 'mdl-checkbox__input'} + )) + + class Meta: + model = Membership + fields = ['renewed_at', 'self_identification', 'gender'] + + self_ident_choices = ( + ('First Nations; Métis; or Inuit', 'First Nations; Métis; or Inuit'), + ('visible minority', 'Visible Minority'), + ('caucasian', 'Caucasian'), + ('other', 'Other') + ) + + gender_choices = ( + ('male', 'Male'), + ('female', 'Female'), + ('other', 'Other') + ) + + widgets = { + 'self_identification': RadioSelect(choices=self_ident_choices, attrs={'class': 'mdl-radio__button'}), + 'gender': RadioSelect(choices=gender_choices, attrs={'class': 'mdl-radio__button'}), + 'renewed_at': TextInput(attrs={'class': 'mdl-textfield__input'}), + } + + def save(self, commit=True): + instance = super(MembershipForm, self).save(commit=False) + member = Member.objects.get(id=self.cleaned_data['member']) + instance.member = member + logger.debug(self.cleaned_data['self_identification']) + logger.debug(self.cleaned_data['gender']) + + if self.cleaned_data['gender_other']: + instance.gender = self.cleaned_data['gender_other'] + + if self.cleaned_data['self_ident_other']: + instance.self_identification = self.cleaned_data['self_ident_other'] + + if commit: + instance.save() + + return instance + + +class PaymentForm(ModelForm): + class Meta: + model = Payment + fields = ['type'] + widgets = { + 'type': RadioSelect(attrs={'class': 'mdl-radio__button'}) + } diff --git a/bikeshop_project/core/migrations/0007_auto_20160501_2253.py b/bikeshop_project/core/migrations/0007_auto_20160501_2253.py new file mode 100644 index 0000000..1219ac9 --- /dev/null +++ b/bikeshop_project/core/migrations/0007_auto_20160501_2253.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-01 22:53 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0006_auto_20160410_1833'), + ] + + operations = [ + migrations.RemoveField( + model_name='membership', + name='acknowledgement', + ), + migrations.RemoveField( + model_name='membership', + name='community', + ), + migrations.RemoveField( + model_name='membership', + name='give_back', + ), + migrations.RemoveField( + model_name='membership', + name='safe_space', + ), + ] diff --git a/bikeshop_project/core/migrations/0008_auto_20160526_0059.py b/bikeshop_project/core/migrations/0008_auto_20160526_0059.py new file mode 100644 index 0000000..b980641 --- /dev/null +++ b/bikeshop_project/core/migrations/0008_auto_20160526_0059.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-26 00:59 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0007_auto_20160501_2253'), + ] + + operations = [ + migrations.RemoveField( + model_name='payment', + name='membership', + ), + migrations.AddField( + model_name='membership', + name='payment', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Payment'), + ), + ] diff --git a/bikeshop_project/core/migrations/0009_remove_membership_member.py b/bikeshop_project/core/migrations/0009_remove_membership_member.py new file mode 100644 index 0000000..6a8d3ba --- /dev/null +++ b/bikeshop_project/core/migrations/0009_remove_membership_member.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-26 01:50 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0008_auto_20160526_0059'), + ] + + operations = [ + migrations.RemoveField( + model_name='membership', + name='member', + ), + ] diff --git a/bikeshop_project/core/migrations/0010_membership_member.py b/bikeshop_project/core/migrations/0010_membership_member.py new file mode 100644 index 0000000..c956f08 --- /dev/null +++ b/bikeshop_project/core/migrations/0010_membership_member.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 02:31 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('core', '0009_remove_membership_member'), + ] + + operations = [ + migrations.AddField( + model_name='membership', + name='member', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='membership', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/bikeshop_project/core/migrations/0011_auto_20160531_0233.py b/bikeshop_project/core/migrations/0011_auto_20160531_0233.py new file mode 100644 index 0000000..b310553 --- /dev/null +++ b/bikeshop_project/core/migrations/0011_auto_20160531_0233.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 02:33 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0010_membership_member'), + ] + + operations = [ + migrations.AlterField( + model_name='membership', + name='member', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/bikeshop_project/core/migrations/0012_auto_20160531_0234.py b/bikeshop_project/core/migrations/0012_auto_20160531_0234.py new file mode 100644 index 0000000..d4343da --- /dev/null +++ b/bikeshop_project/core/migrations/0012_auto_20160531_0234.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 02:34 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0011_auto_20160531_0233'), + ] + + operations = [ + migrations.RemoveField( + model_name='membership', + name='payment', + ), + migrations.AddField( + model_name='payment', + name='membership', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='payments', to='core.Membership'), + ), + ] diff --git a/bikeshop_project/core/migrations/0013_auto_20160531_0236.py b/bikeshop_project/core/migrations/0013_auto_20160531_0236.py new file mode 100644 index 0000000..5dae435 --- /dev/null +++ b/bikeshop_project/core/migrations/0013_auto_20160531_0236.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 02:36 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0012_auto_20160531_0234'), + ] + + operations = [ + migrations.RemoveField( + model_name='payment', + name='membership', + ), + migrations.AddField( + model_name='membership', + name='payment', + field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='membership', to='core.Payment'), + ), + ] diff --git a/bikeshop_project/core/migrations/0014_payment_paid.py b/bikeshop_project/core/migrations/0014_payment_paid.py new file mode 100644 index 0000000..67223fe --- /dev/null +++ b/bikeshop_project/core/migrations/0014_payment_paid.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 02:38 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0013_auto_20160531_0236'), + ] + + operations = [ + migrations.AddField( + model_name='payment', + name='paid', + field=models.BooleanField(default=False), + ), + ] diff --git a/bikeshop_project/core/migrations/0015_auto_20160531_0413.py b/bikeshop_project/core/migrations/0015_auto_20160531_0413.py new file mode 100644 index 0000000..3e6bdc0 --- /dev/null +++ b/bikeshop_project/core/migrations/0015_auto_20160531_0413.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 04:13 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0014_payment_paid'), + ] + + operations = [ + migrations.AlterField( + model_name='payment', + name='type', + field=models.CharField(choices=[('CASH', 'cash'), ('CHEQUE', 'cheque'), ('VOLUNTEERING', 'volunteering'), ('STRIPE', 'stripe'), ('PAYPAL', 'paypal')], default='None', max_length=12), + ), + ] diff --git a/bikeshop_project/core/migrations/0016_auto_20160531_0416.py b/bikeshop_project/core/migrations/0016_auto_20160531_0416.py new file mode 100644 index 0000000..55ee7fc --- /dev/null +++ b/bikeshop_project/core/migrations/0016_auto_20160531_0416.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 04:16 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0015_auto_20160531_0413'), + ] + + operations = [ + migrations.RemoveField( + model_name='payment', + name='paid', + ), + migrations.AlterField( + model_name='payment', + name='type', + field=models.CharField(choices=[('NONE', 'None'), ('CASH', 'Cash'), ('CHEQUE', 'Cheque'), ('VOLUNTEERING', 'Volunteering'), ('STRIPE', 'Stripe'), ('PAYPAL', 'PayPal')], default='NONE', max_length=12), + ), + ] diff --git a/bikeshop_project/core/models.py b/bikeshop_project/core/models.py index fb9b364..828ea8c 100644 --- a/bikeshop_project/core/models.py +++ b/bikeshop_project/core/models.py @@ -6,34 +6,35 @@ class Membership(models.Model): created_at = models.DateTimeField(auto_now_add=True) modified_at = models.DateTimeField(auto_now=True) renewed_at = models.DateTimeField(default=timezone.now) - member = models.OneToOneField( - 'registration.Member', - on_delete=models.CASCADE, - related_name='membership' - ) - safe_space = models.BooleanField(default=False) - community = models.BooleanField(default=False) - give_back = models.BooleanField(default=False) - # this should be a form field that requires the new member to type out there full name - acknowledgement = models.BooleanField(default=False) self_identification = models.CharField(max_length=255, null=True, blank=True) gender = models.CharField(max_length=255, null=True, blank=True) involvement = models.CharField(max_length=255, null=True, blank=True) + member = models.ForeignKey( + 'registration.Member', + on_delete=models.CASCADE, + related_name='memberships', + blank=True, + null=True + ) + payment = models.OneToOneField( + 'Payment', + on_delete=models.CASCADE, + related_name='membership', + blank=False, + null=True + ) class Payment(models.Model): - membership = models.ForeignKey( - 'Membership', - on_delete=models.CASCADE, - ) payment_choices = ( - ('CASH', 'cash'), - ('CHEQUE', 'cheque'), - ('VOLUNTEERING', 'volunteering'), - ('STRIPE', 'stripe'), - ('PAYPAL', 'paypal') + ('NONE', 'None'), + ('CASH', 'Cash'), + ('CHEQUE', 'Cheque'), + ('VOLUNTEERING', 'Volunteering'), + ('STRIPE', 'Stripe'), + ('PAYPAL', 'PayPal') ) - type = models.CharField(max_length=12, choices=payment_choices) + type = models.CharField(max_length=12, choices=payment_choices, default='NONE') created_at = models.DateTimeField(auto_now_add=True) diff --git a/bikeshop_project/core/static/scss/screen.scss b/bikeshop_project/core/static/scss/screen.scss index 1bd2db5..3c91d7b 100644 --- a/bikeshop_project/core/static/scss/screen.scss +++ b/bikeshop_project/core/static/scss/screen.scss @@ -7,6 +7,7 @@ @import "vendor/material-design-lite/src/layout/layout"; @import "vendor/material-design-lite/src/footer/mega_footer"; @import "vendor/material-design-lite/src/checkbox/checkbox"; +@import "vendor/material-design-lite/src/radio/radio"; @import "vendor/material-design-lite/src/button/button"; @import "vendor/material-design-lite/src/palette/palette"; @import "vendor/material-design-lite/src/menu/menu"; diff --git a/bikeshop_project/core/templates/membership_form.html b/bikeshop_project/core/templates/membership_form.html new file mode 100644 index 0000000..df5d49a --- /dev/null +++ b/bikeshop_project/core/templates/membership_form.html @@ -0,0 +1,192 @@ +{% extends 'base.html' %} +{% load staticfiles %} + +{% block styles %} + +{% endblock %} + +{% block content %} +
+

New Membership

+
+ + {% csrf_token %} + {{ membership_form.member }} +

The Bridge City Bicycle Co­operative aims to be a safe and respectful environment geared towards education, empowerment and community­building. In order to do so we need your input and support.

+ +

Member Privileges

+
    +
  • Access to the BCBC tools, stands, and workspace
  • +
  • Access to friendly mechanical assistance and education when available
  • +
  • Opportunity to engage in decisions and help to build and develop the community's vision
  • +
  • The Bridge City Bicycle Co­operative (BCBC) values the trust of its volunteers, staff and members and is committed to protecting the privacy of all personal information entrusted to it. As such, collected information will be used in accordance with our privacy policy outlined on our website and in our shop.
  • +
+ {% if membership_form.non_field_errors %} +
+ {{ membership_form.errors }} +
+ {% endif %} +
+

Member Responsibilities

+
Respect and Maintaining a Safe Space
+
    +
  • Respect others and self
  • +
  • Help others
  • +
  • Racist, ableist, ageist, homophobic, sexist, and classist behavior and language will not be tolerated
  • +
  • The BCBC seeks to build a healthy lifestyle community, and behavior seen as hindering this objective will not be tolerated
  • +
  • Ask for help: With tools, processes, and even emotions
  • +
+ +
+
+
Respect the Community
+
    +
  • Build positive relationships with Community Members
  • +
  • Build positive relationships with CNYC employees, volunteers, and patrons
  • +
+ +
+
+
Giving back
+

+ Our services are free and Members are encouraged to contribute in any way they can. Our vibrancy comes from the volunteer work of a large community with diverse skills and passions. There are so many ways to be a part of this community, regardless of whether or not you know how to change a tire (yet!). Ask how you can help out or get in touch with our volunteer coordinator (volunteer@bridgecitybicyclecoop.com) +

+ +
+
+
Respect the Space
+
    +
  • Replace tools when not using them so that others can play too.
  • +
  • Do not steal or borrow articles within the space for personal use.
  • +
  • If you don't know what it is, how to use it, or where it goes, ask someone
  • +
  • Ensure you always leave time to clean up after yourself and others, and then do so
  • +
  • If you have to leave in the middle of a project, put pieces into a small bag and attach it to the bike
  • +
  • Personal projects may be kept at the BCBC for a maximum of one day; however, this is highly discouraged due to lack of space and the concern for theft.
  • +
  • Label your bike with your name, phone number, and the last date you worked on it.
  • +
  • Do not force tools and use them only for their intended use. If you need help or guidance, ask someone! It’s what we’re here for!
  • +
+ +
+
+

Voluntary Self Identification

+

We want to make sure that all members of our community, regardless of race, ethnicity, and gender + are able to participate fully in the BCBC. Please share information about your race and/or + ethnicity so that we can track how well we are including all communities and whether there may be + barriers to certain groups’ participation. Thank you! Do you identify as: (In each category, check + all that apply)

+ {% for checkbox in membership_form.self_identification %} + + {% endfor %} + {% if membership_form.self_identification.errors %} + {{ membership_form.self_identification.errors }} + {% else %} + Hmm + {% endif %} +
+
+ {{ membership_form.self_ident_other }} + + {% if membership_form.self_ident_other.errors %} + {{ membership_form.self_ident_other.errors }} + {% endif %} +
+
+

Gender Identification

+ {% for checkbox in membership_form.gender %} + + {% endfor %} +
+
+ {{ membership_form.gender_other }} + + {% if membership_form.gender_other.errors %} + {{ membership_form.gender_other.errors }} + {% endif %} +
+
+ {{ membership_form.renewed_at }} + + {% if membership_form.renewed_at %} + {{ membership_form.renewed_at.errors }} + {% else %} + Incorrect date. + {% endif %} +
+
+ +
+

Payment Type

+ {% for checkbox in payment_form.type %} + + {% endfor %} +
+
+
+ +
+
+
+{% endblock %} + +{% block scripts %} + + + + + {% endblock %} \ No newline at end of file diff --git a/bikeshop_project/core/urls.py b/bikeshop_project/core/urls.py index f7687bd..bd1bde7 100644 --- a/bikeshop_project/core/urls.py +++ b/bikeshop_project/core/urls.py @@ -1,6 +1,7 @@ from django.conf.urls import url -from .views import DashboardView +from .views import DashboardView, NewMembershipView urlpatterns = [ - url(r'^$', DashboardView.as_view()), + url(r'^member/(?P[0-9]+)/membership/new/$', NewMembershipView.as_view(), name='new_membership'), + url(r'^$', DashboardView.as_view()) ] diff --git a/bikeshop_project/core/views.py b/bikeshop_project/core/views.py index aa475e1..4cd330d 100644 --- a/bikeshop_project/core/views.py +++ b/bikeshop_project/core/views.py @@ -1,7 +1,42 @@ +import logging + +from django.contrib import messages +from django.core.urlresolvers import reverse +from django.http import HttpResponseRedirect from django.template.response import TemplateResponse -from django.views.generic import View +from django.views.generic import TemplateView, View + +from registration.models import Member + +from .forms import MembershipForm, PaymentForm + +logger = logging.getLogger(__name__) class DashboardView(View): def get(self, request): - return TemplateResponse(request, 'dashboard.html') \ No newline at end of file + return TemplateResponse(request, 'dashboard.html') + + +class NewMembershipView(TemplateView): + template_name = 'membership_form.html' + + def get(self, request, member_id): + membership_form = MembershipForm(initial=dict(member=member_id)) + payment_form = PaymentForm() + return self.render_to_response(dict(membership_form=membership_form, payment_form=payment_form)) + + def post(self, request, member_id): + membership_form = MembershipForm(request.POST, initial=dict(member=member_id)) + payment_form = PaymentForm(request.POST) + member = Member.objects.get(id=member_id) + + if membership_form.is_valid() and payment_form.is_valid(): + new_payment = payment_form.save() + new_membership = membership_form.save() + new_membership.payment = new_payment + new_membership.save() + messages.add_message(request, messages.SUCCESS, 'Successfully created our newest member, {first} {last}' + .format(first=member.first_name, last=member.last_name)) + return HttpResponseRedirect(reverse('member_edit', kwargs=dict(member_id=member_id))) + return self.render_to_response(dict(membership_form=membership_form, payment_form=payment_form)) diff --git a/bikeshop_project/registration/admin.py b/bikeshop_project/registration/admin.py index 8c38f3f..388b91c 100644 --- a/bikeshop_project/registration/admin.py +++ b/bikeshop_project/registration/admin.py @@ -1,3 +1,6 @@ from django.contrib import admin +from .models import Member + # Register your models here. +admin.site.register(Member) \ No newline at end of file diff --git a/bikeshop_project/registration/forms.py b/bikeshop_project/registration/forms.py index bcc7694..a1da26d 100644 --- a/bikeshop_project/registration/forms.py +++ b/bikeshop_project/registration/forms.py @@ -4,24 +4,11 @@ from registration.models import Member class MemberForm(ModelForm): - # self_ident_other = CharField(required=False, label='Self identification', widget=TextInput(attrs={'class': 'mdl-textfield__input'})) - # gender_other = CharField(required=False, label='Other', widget=TextInput(attrs={'class': 'mdl-textfield__input'})) - # priveleges = BooleanField(label='I acknowledge', widget=CheckboxInput(attrs={'class': 'mdl-checkbox__input'})) - waiver_substitute = BooleanField(label='I have read and agree to the above terms & conditions.', widget=CheckboxInput(attrs={'class': 'mdl-checkbox__input'})) + waiver_substitute = BooleanField(required=False, label='I have read and agree to the above terms & conditions.', widget=CheckboxInput(attrs={'class': 'mdl-checkbox__input'})) class Meta: model = Member - self_ident_choices = ( - ('First Nations; Métis; or Inuit', 'First Nations; Métis; or Inuit'), - ('visible minority', 'Visible Minority'), - ('caucasian', 'Caucasian'), - ('Other', 'Other') - ) - gender_choices = ( - ('male', 'Male'), - ('female', 'Female'), - ('other', 'other') - ) + exclude = ('waiver',) fields = ['email', 'email_consent', 'first_name', 'last_name', 'preferred_name', 'date_of_birth', 'guardian_name', 'phone', 'street', 'city', 'province', 'country', 'post_code', 'waiver'] @@ -40,9 +27,6 @@ class MemberForm(ModelForm): 'country': TextInput(attrs={'class': 'mdl-textfield__input'}), 'post_code': TextInput(attrs={'class': 'mdl-textfield__input', 'pattern': '[A-Za-z][0-9][A-Za-z] [0-9][A-Za-z][0-9]'}), - # 'self_identification': CheckboxSelectMultiple(choices=self_ident_choices, - # attrs={'class': 'mdl-checkbox__input'}), - # 'gender': CheckboxSelectMultiple(choices=gender_choices, attrs={'class': 'mdl-checkbox__input'}), } labels = { diff --git a/bikeshop_project/registration/migrations/0005_member_membership.py b/bikeshop_project/registration/migrations/0005_member_membership.py new file mode 100644 index 0000000..d6c4c1c --- /dev/null +++ b/bikeshop_project/registration/migrations/0005_member_membership.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-26 01:50 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0009_remove_membership_member'), + ('registration', '0004_auto_20160410_1816'), + ] + + operations = [ + migrations.AddField( + model_name='member', + name='membership', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='member', to='core.Membership'), + ), + ] diff --git a/bikeshop_project/registration/migrations/0006_remove_member_membership.py b/bikeshop_project/registration/migrations/0006_remove_member_membership.py new file mode 100644 index 0000000..f5d750d --- /dev/null +++ b/bikeshop_project/registration/migrations/0006_remove_member_membership.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2016-05-31 02:31 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('registration', '0005_member_membership'), + ] + + operations = [ + migrations.RemoveField( + model_name='member', + name='membership', + ), + ] diff --git a/bikeshop_project/registration/templates/edit_member_form.html b/bikeshop_project/registration/templates/edit_member_form.html new file mode 100644 index 0000000..a89749c --- /dev/null +++ b/bikeshop_project/registration/templates/edit_member_form.html @@ -0,0 +1,198 @@ +{% extends 'base.html' %} +{% load staticfiles %} + +{% block styles %} + +{% endblock %} + +{% block scripts %} + + + + + +{% endblock %} + +{% block content %} +
+

{{ form.instance.first_name }} {{ form.instance.last_name }}

+

+ The Bridge City Bicycle Co-operative (herein referred to as The BCBC and The Community) is a nonprofit, + community bicycle repair education and resource co-operative. We offer our members nonjudgmental repair + space, tools and instruction during business hours (hours on website) by donation, and educational + workshops. We also offer reconditioned/recycled low cost bikes and parts for sale. + The BCBC is operated by volunteers; a medley of professionals, students, bike enthusiasts, activists, + and other community members who share a love for cycling in Saskatoon. Membership is open to all + individuals and costs $20 per year. A receipt will be issued to you once your membership fee has been paid. +

+
+ {% csrf_token %} + + {% if form.non_field_errors %} +
+ {{ form.errors }} +
+ {% endif %} +
+ {{ form.email }} + + {% if form.email.errors %} + {{ form.email.errors }} + {% else %} + Invalid email. + {% endif %} +
+
+ +
+
+ {{ form.first_name }} + + {% if form.first_name.errors %} + {{ form.first_name.errors }} + {% else %} + Name too long. + {% endif %} +
+
+ {{ form.last_name }} + + {% if form.last_name.errors %} + {{ form.last_name.errors }} + {% else %} + Name too long. + {% endif %} +
+
+ {{ form.preferred_name }} + + {% if form.preferred_name.errors %} + {{ form.preferred_name.errors }} + {% else %} + Name too long. + {% endif %} +
+
+ {{ form.date_of_birth }} + + {% if form.date_of_birth.errors %} + {{ form.date_of_birth.errors }} + {% else %} + Incorrect date. + {% endif %} +
+
+ {{ form.guardian_name }} + + {% if form.guardian_name.errors %} + {{ form.guardian_name.errors }} + {% else %} + Name too long. + {% endif %} +
+
+ {{ form.phone }} + + {% if form.phone.errors %} + {{ form.phone.errors }} + {% else %} + Digits only. + {% endif %} +
+
+ {{ form.post_code }} + + {% if form.post_code.errors %} + {{ form.post_code.errors }} + {% else %} + Format: A0A 0A0 + {% endif %} +
+
+ {{ form.street }} + + {% if form.street.errors %} + {{ form.street.errors }} + {% endif %} +
+
+ {{ form.city }} + + {% if form.city.errors %} + {{ form.city.errors }} + {% endif %} +
+
+ {{ form.province }} + + {% if form.province.errors %} + {{ form.province.errors }} + {% endif %} +
+
+ {{ form.country }} + + {% if form.country.errors %} + {{ form.country.errors }} + {% endif %} +
+
+ +
+
+
+ {% if not form.instance.membership %} +
+

No membership found.

+ Add membership +
+ {% endif %} +{% endblock %} diff --git a/bikeshop_project/registration/templates/member_form.html b/bikeshop_project/registration/templates/member_form.html index caf00b1..9f8328e 100644 --- a/bikeshop_project/registration/templates/member_form.html +++ b/bikeshop_project/registration/templates/member_form.html @@ -2,16 +2,16 @@ {% load staticfiles %} {% block styles %} - + {% endblock %} {% block scripts %} - +