Ejemplo n.º 1
0
def commuter(request):
    """
    Renders Commuterform or saves it in case of POST request. 
    """

    request = process_request(request)

    survey = Commutersurvey()

    employers = Employer.objects.filter(active=True)

    if request.method == 'POST':
        surveyform = CommuterForm(request.POST, instance=survey)
        survey.ip = request.META['REMOTE_ADDR']
        
        # check if user already checked in this month
        month = request.POST['month']
        email = request.POST['email']
        if Commutersurvey.objects.filter(month__iexact=month, email__iexact=email).exists():
            existing_survey = Commutersurvey.objects.filter(month__iexact=month, email__iexact=email).order_by('-created')[0]
            # addding existing id forces update
            survey.id = existing_survey.id
            survey.created = existing_survey.created

        # add new employer to GSI Employer list
        employer = request.POST['employer']
        if employer != "" and not Employer.objects.filter(name__exact=employer):
            new_employer = Employer(name=employer)
            new_employer.save()

        if surveyform.is_valid():
            surveyform.save() 
            return render_to_response('survey/thanks.html', locals(), context_instance=RequestContext(request))
        else:
            return render_to_response('survey/commuterform.html', locals(), context_instance=RequestContext(request))
    else:
        surveyform = CommuterForm(instance=survey)
        return render_to_response('survey/commuterform.html', locals(), context_instance=RequestContext(request))
Ejemplo n.º 2
0
def add_checkin(request):

    try:
        wr_day = Month.objects.get(open_checkin__lte=date.today(),
                                   close_checkin__gte=date.today())
    except Month.DoesNotExist:
        return redirect('/')

    if request.POST:
        # send the filled out forms in!
        # if the forms turn out to be not valid, they will still retain
        # the form data from the POST request this way.
        commute_form = CommuterForm(request.POST)
        extra_commute_form = ExtraCommuterForm(request.POST)

        normal_copy = NormalFromWorkSameAsAboveForm(request.POST)
        wrday_copy = WalkRideFromWorkSameAsAboveForm(request.POST)
        commute_copy = NormalIdenticalToWalkrideForm(request.POST)

        if not commute_form.is_valid():
            # instance = Commutersurvey()
            leg_formset_WRTW = MakeLegs_WRTW(request.POST, prefix='wtw')
            leg_formset_WRFW = MakeLegs_WRFW(request.POST, prefix='wfw')
            leg_formset_NormalTW = MakeLegs_NormalTW(request.POST,
                                                     prefix='ntw')
            leg_formset_NormalFW = MakeLegs_NormalFW(request.POST,
                                                     prefix='nfw')
        else:
            commutersurvey = commute_form.save(commit=False)
            commutersurvey.wr_day_month = wr_day
            commutersurvey.email = commute_form.cleaned_data['email']
            commutersurvey.employer = commute_form.cleaned_data['employer']
            if 'team' in commute_form.cleaned_data:
                commutersurvey.team = commute_form.cleaned_data['team']

            #extra_commute_form.is_valid() # creates cleaned_data

            #if 'share' in extra_commute_form.cleaned_data:
            commutersurvey.share = extra_commute_form['share'].value()

            #commutersurvey.comments = extra_commute_form.cleaned_data['comments']

            try:

                commutersurvey.questionOne = sanitizeQOM(
                    strip_tags(
                        extra_commute_form['questionOne'].value()))[0:499]
            except:
                pass

            try:
                commutersurvey.questionTwo = sanitizeQOM(
                    strip_tags(
                        extra_commute_form['questionTwo'].value()))[0:499]
            except:
                pass

            try:
                commutersurvey.questionThree = sanitizeQOM(
                    strip_tags(
                        extra_commute_form['questionThree'].value()))[0:499]
            except:
                pass

            try:
                commutersurvey.questionFour = sanitizeQOM(
                    strip_tags(
                        extra_commute_form['questionFour'].value()))[0:499]
            except:
                pass

            try:
                commutersurvey.questionFive = sanitizeQOM(
                    strip_tags(
                        extra_commute_form['questionFive'].value()))[0:499]
            except:
                pass

            # clear old session data
            request.session.clear()

            # write form responses to cookie
            for attr in ['name', 'email', 'home_address', 'work_address']:
                if attr in commute_form.cleaned_data:
                    request.session[attr] = commute_form.cleaned_data[attr]
            for attr in ['employer', 'team']:
                if attr in commute_form.cleaned_data:
                    if commute_form.cleaned_data[attr] is not None:
                        # import pdb; pdb.set_trace()
                        request.session[attr] = commute_form.cleaned_data[
                            attr].id
            for attr in ['share', 'volunteer']:
                try:
                    if attr in extra_commute_form:
                        request.session[attr] = extra_commute_form[attr].value(
                        )
                except:
                    pass

            # This is just to generate cleaned_data. The radio button choices will be valid.
            wrday_copy.is_valid()
            commute_copy.is_valid()
            normal_copy.is_valid()
            request.session['walkride_same_as_reverse'] = str(
                wrday_copy.cleaned_data['walkride_same_as_reverse'])
            request.session['normal_same_as_walkride'] = str(
                commute_copy.cleaned_data['normal_same_as_walkride'])
            request.session['normal_same_as_reverse'] = str(
                normal_copy.cleaned_data['normal_same_as_reverse'])

            ##################################
            # SAVE THE LEGS WITH THE CHECKIN #
            ##################################
            leg_formset_WRTW = MakeLegs_WRTW(request.POST,
                                             instance=commutersurvey,
                                             prefix='wtw')
            leg_formset_WRFW = MakeLegs_WRFW(request.POST,
                                             instance=commutersurvey,
                                             prefix='wfw')
            leg_formset_NormalTW = MakeLegs_NormalTW(request.POST,
                                                     instance=commutersurvey,
                                                     prefix='ntw')
            leg_formset_NormalFW = MakeLegs_NormalFW(request.POST,
                                                     instance=commutersurvey,
                                                     prefix='nfw')

            if leg_formset_WRTW.is_valid() and leg_formset_WRFW.is_valid(
            ) and leg_formset_NormalTW.is_valid(
            ) and leg_formset_NormalFW.is_valid():
                commutersurvey.save()
                leg_formset_WRTW.save()
                leg_formset_WRFW.save()
                leg_formset_NormalTW.save()
                leg_formset_NormalFW.save()

                write_formset_cookies(request, leg_formset_WRTW,
                                      leg_formset_WRFW, leg_formset_NormalTW,
                                      leg_formset_NormalFW)
                send_email(commutersurvey)

                try:
                    donation_organization = DonationOrganization.objects.get(
                        wr_day_month=current_or_next_month())
                except DonationOrganization.DoesNotExist:
                    donation_organization = None

                month = current_or_next_month()

                return render_to_response(
                    'survey/thanks.html', {
                        'person': commutersurvey.name,
                        'calories_burned': commutersurvey.calories_total,
                        'calorie_change': commutersurvey.calorie_change,
                        'carbon_change': -commutersurvey.carbon_change,
                        'change_type': commutersurvey.change_type,
                        'donation_organization': donation_organization,
                        'month': month
                    })
            else:
                pass
    else:
        # initialize forms with cookies
        initial_commute = {}
        initial_extra_commute = {}

        for attr in [
                'name', 'email', 'home_address', 'work_address', 'employer',
                'team'
        ]:
            if attr in request.session:
                initial_commute[attr] = request.session.get(attr)

        for attr in ['share', 'volunteer']:
            if attr in request.session:
                initial_extra_commute[attr] = request.session.get(attr)

        if 'employer' in request.session:
            id = request.session.get('employer')
            try:
                initial_commute['employer'] = Employer.objects.get(pk=id)
            except Employer.DoesNotExist:
                initial_commute['employer'] = ''
        if 'team' in request.session:
            teamid = request.session.get('team')
            if teamid:
                try:
                    initial_commute['team'] = Team.objects.get(pk=teamid)
                except Team.DoesNotExist:
                    initial_commute['team'] = ''

        commute_form = CommuterForm(initial=initial_commute)
        extra_commute_form = ExtraCommuterForm(initial=initial_extra_commute,
                                               label_suffix="")

        # TODO: use request session to instantiate the formsets with initial=[{},{},{}...] for each formset

        leg_formset_NormalTW = MakeLegs_NormalTW(instance=Commutersurvey(),
                                                 prefix='ntw')
        leg_formset_NormalFW = MakeLegs_NormalFW(instance=Commutersurvey(),
                                                 prefix='nfw')
        leg_formset_WRTW = MakeLegs_WRTW(instance=Commutersurvey(),
                                         prefix='wtw')
        leg_formset_WRFW = MakeLegs_WRFW(instance=Commutersurvey(),
                                         prefix='wfw')

        if 'normal_same_as_reverse' in request.session:
            normal_copy = NormalFromWorkSameAsAboveForm(
                initial={
                    'normal': request.session.get('normal_same_as_reverse')
                })
        else:
            normal_copy = NormalFromWorkSameAsAboveForm()

        if 'walkride_same_as_reverse' in request.session:
            wrday_copy = WalkRideFromWorkSameAsAboveForm(
                initial={
                    'wr_day': request.session.get('walkride_same_as_reverse')
                })
        else:
            wrday_copy = WalkRideFromWorkSameAsAboveForm()

        if 'normal_same_as_walkride' in request.session:
            commute_copy = NormalIdenticalToWalkrideForm(
                initial={
                    'commute': request.session.get('normal_same_as_walkride')
                })
        else:
            commute_copy = NormalIdenticalToWalkrideForm()

    # get previously entered legs if any.
    savedLegs = get_formset_cookies(request)

    # now just go ahead and render.
    return render(
        request, "survey/new_checkin.html", {
            'wr_day': wr_day.wr_day.strftime('%A, %B %d, %Y'),
            'wr_open': wr_day.open_checkin.strftime('%A, %B %d, %Y'),
            'wr_close': wr_day.close_checkin.strftime('%A, %B %d, %Y'),
            'form': commute_form,
            'extra_form': extra_commute_form,
            'NormalTW_formset': leg_formset_NormalTW,
            'NormalFW_formset': leg_formset_NormalFW,
            'WRTW_formset': leg_formset_WRTW,
            'WRFW_formset': leg_formset_WRFW,
            'normal_copy': normal_copy,
            'wrday_copy': wrday_copy,
            'commute_copy': commute_copy,
            'savedLegs': json.dumps(savedLegs)
        })
Ejemplo n.º 3
0
def api(request):
    """
    Simple REST api for survey data
    """

    request = process_request(request)

    if request.method == 'POST':
        data = request.POST.dict()
        # look for survey legs
        try:
            legs = json.loads(data['legs'])
            del data['legs']
        except KeyError:
            legs = []
        
        try:
            data['wr_day_month'] = Month.objects.get(pk=data['wr_day_month'])
        except Month.DoesNotExist:
            return HttpResponse('No such Walk/Ride Day.', status=500)

        try:
            data['employer'] = Employer.objects.get(pk=data['employer'])
        except Employer.DoesNotExist:
            return HttpResponse('No such Employer.', status=500)

        survey = Commutersurvey(**data)
        
        # check for existing survey
        try:
            existing_survey = Commutersurvey.objects.get(wr_day_month=data['wr_day_month'], email=data['email'])
            update_existing_survey(survey, existing_survey.id, existing_survey.created)
        except ObjectDoesNotExist:
            pass
        except MultipleObjectsReturned:
            # cleanup, keep the most recent one and delete the rest
            surveys = Commutersurvey.objects.filter(wr_day_month=data['wr_day_month'], email=data['email']).order_by('-created')
            for s in surveys[1:]:
                s.delete()
            update_existing_survey(survey, surveys[0].id, surveys[0].created)

        try:
            survey.save_with_legs(legs=legs)
            
            try:
                next_wr_day = 'Remember to check-in for next month\'s Walk/Ride Day on %s.' % Month.objects.active_months().filter(wr_day__gt=survey.wr_day_month.wr_day).reverse()[0].wr_day_humanized
            except IndexError:
                next_wr_day = 'Remember to check-in again next season.'
            
            template_content = [{
                'content': survey.name or survey.email, 
                'name': 'salutation'
            }, {
                'content': survey.wr_day_month.month,
                'name': 'current_wr_day'
            }, {
                'content': next_wr_day,
                'name': 'next_wr_day'
            }]
            message = {
                'from_email': '*****@*****.**',
                'from_name': 'Green Streets Initiative',
                'metadata': {'website': 'checkin.gogreenstreets.org'},
                'subject': 'Walk/Ride Day %s Checkin' % survey.wr_day_month.month,
                'to': [
                    {'email': survey.email, 
                    'name': survey.name or survey.email, 
                    'type': 'to'}
                ],
                'track_opens': True
            }
            send_email('checkin-confirmation', template_content, message)
            return HttpResponse(status=200)
        except:
            # email error details to Trello
            # FIXME: this could be done with the Trello API
            template_content = [{
                'content': request.META.get('HTTP_USER_AGENT'), 
                'name': 'browser'
            }, {
                'content': json.dumps(request.POST), 
                'name': 'form_data'
            }]
            message = {
                'from_email': '*****@*****.**',
                'from_name': 'Checkin',
                'metadata': {'website': 'checkin.gogreenstreets.org'},
                'subject': 'Checkin Error for %s' % request.POST['email'],
                'to': [{
                    'email': '*****@*****.**', 
                    'name': 'Checkin', 
                    'type': 'to'
                }]
            }
            send_email('checkin-error', template_content, message)
            return HttpResponse('Somehting went wrong.', status=500)

    return HttpResponse(status=403)
Ejemplo n.º 4
0
def add_checkin(request):

    try:
        wr_day = Month.objects.get(open_checkin__lte=date.today(),
                                   close_checkin__gte=date.today())
    except Month.DoesNotExist:
        return redirect('/')

    if request.method == 'POST':
        # send the filled out forms in!
        # if the forms turn out to be not valid, they will still retain
        # the form data from the POST request this way.

        commute_form = CommuterForm(request.POST)
        extra_commute_form = ExtraCommuterForm(request.POST)
        leg_formset_NormalTW = MakeLegs_NormalTW(request.POST,
                                                 instance=Commutersurvey(),
                                                 prefix='ntw')
        leg_formset_NormalFW = MakeLegs_NormalFW(request.POST,
                                                 instance=Commutersurvey(),
                                                 prefix='nfw')
        leg_formset_WRTW = MakeLegs_WRTW(request.POST,
                                         instance=Commutersurvey(),
                                         prefix='wtw')
        leg_formset_WRFW = MakeLegs_WRFW(request.POST,
                                         instance=Commutersurvey(),
                                         prefix='wfw')

        # if the main form is correct
        if commute_form.is_valid():
            commutersurvey = commute_form.save(commit=False)
            commutersurvey.wr_day_month = wr_day
            commutersurvey.email = commute_form.cleaned_data['email']
            commutersurvey.employer = commute_form.cleaned_data['employer']
            if 'team' in commute_form.cleaned_data:
                commutersurvey.team = commute_form.cleaned_data['team']

            # write form responses to cookie
            for attr in ['name', 'email', 'home_address', 'work_address']:
                # TODO: include employer and team
                if attr in commute_form.cleaned_data:
                    request.session[attr] = commute_form.cleaned_data[attr]

            extra_commute_form.is_valid()  # creates cleaned_data
            if 'share' in extra_commute_form.cleaned_data:
                commutersurvey.share = extra_commute_form.cleaned_data['share']
            commutersurvey.comments = extra_commute_form.cleaned_data[
                'comments']

            # write form responses to cookie
            for attr in ['share', 'comments', 'volunteer']:
                if attr in extra_commute_form.cleaned_data:
                    request.session[attr] = extra_commute_form.cleaned_data[
                        attr]

            leg_formset_NormalTW = MakeLegs_NormalTW(request.POST,
                                                     instance=commutersurvey,
                                                     prefix='ntw')
            leg_formset_NormalFW = MakeLegs_NormalFW(request.POST,
                                                     instance=commutersurvey,
                                                     prefix='nfw')
            leg_formset_WRTW = MakeLegs_WRTW(request.POST,
                                             instance=commutersurvey,
                                             prefix='wtw')
            leg_formset_WRFW = MakeLegs_WRFW(request.POST,
                                             instance=commutersurvey,
                                             prefix='wfw')

            # finally! we're good to go.
            if (leg_formset_WRTW.is_valid()
                    and leg_formset_NormalTW.is_valid()
                    and leg_formset_NormalFW.is_valid()
                    and leg_formset_WRFW.is_valid()):

                commutersurvey.save()
                leg_formset_WRTW.save()
                leg_formset_WRFW.save()
                leg_formset_NormalTW.save()
                leg_formset_NormalFW.save()
                # very simple email sending - replace using Mandrill API later
                name = commutersurvey.name or 'Supporter'
                subject = ('Walk/Ride Day ' +
                           commutersurvey.wr_day_month.month + ' Checkin')
                message_html = (
                    '<p>Dear {name},</p><p>Thank you for checking'
                    ' in your Walk/Ride Day commute! This email confirms your'
                    ' participation in {survey_date}\'s Walk/Ride Day! Feel '
                    'free to show it to our <a href="http://checkin'
                    '-greenstreets.rhcloud.com/retail" style="color:'
                    '#2ba6cb;text-decoration: none;">Retail Partners</a> '
                    'to take advantage of their offers of freebies, '
                    'discounts, and other goodies!</p><p>If you haven\'t already, <a href="http://'
                    'checkin2015-greenstreets.rhcloud.com/leaderboard/" '
                    'style="color: #2ba6cb;text-decoration: none;">CLICK HERE'
                    '</a> to see how your company did in the 2015 Corporate'
                    ' Challenge, which ended with the October Walk/Ride Day.</p>'
                    '<p>Thank you for being involved! Remember to check-in '
                    'for next month\'s Walk/Ride Day.</p><p>Warmly,<br>'
                    '<span style="color:#006600;font-weight:bold;">Janie Katz'
                    '-Christy, Director <br>Green Streets Initiative<br> '
                    '<span class="mobile_link">617-299-1872 (office)</p>'
                    '<p>Share with your friends and colleagues! '
                    '<a href="http://checkin.gogreenstreets.org" '
                    'style="color: #2ba6cb;text-decoration: none;">Make sure'
                    ' they get a chance to check in</p>'.format(
                        name=name,
                        survey_date=commutersurvey.wr_day_month.month))

                message_plain = (
                    'Dear Supporter, Thank you for checking in '
                    'your Walk/Ride Day commute! This email confirms your'
                    ' participation in ' + commutersurvey.wr_day_month.month +
                    '\'s Walk/Ride Day! Feel free to show it to our Retail'
                    ' Partners to take advantage of their offers of freebies,'
                    ' discounts, and other goodies! Thank you for being'
                    ' involved! Remember to check-in for next month\'s Walk/Ride'
                    ' Day. Warmly, Green Streets Initiative')
                recipient_list = [
                    commutersurvey.email,
                ]
                from_email = '*****@*****.**'
                send_mail(subject,
                          message_plain,
                          from_email,
                          recipient_list,
                          html_message=message_html,
                          fail_silently=True)
                return render_to_response(
                    'survey/thanks.html', {
                        'person': commutersurvey.name,
                        'calories_burned': commutersurvey.calories_total,
                        'calorie_change': commutersurvey.calorie_change,
                        'carbon_savings': commutersurvey.carbon_savings,
                        'change_type': commutersurvey.change_type
                    })

    else:
        # initialize forms with cookies
        initial_commute = {}
        initial_extra_commute = {}

        for attr in ['name', 'email', 'home_address', 'work_address']:
            if attr in request.session:
                initial_commute[attr] = request.session.get(attr)

        for attr in ['share', 'comments', 'volunteer']:
            if attr in request.session:
                initial_extra_commute[attr] = request.session.get(attr)

        commute_form = CommuterForm(initial=initial_commute)
        extra_commute_form = ExtraCommuterForm(initial=initial_extra_commute)

        # TODO: use request session to instantiate the formsets with initial=[{},{},{}...] for each formset

        leg_formset_NormalTW = MakeLegs_NormalTW(instance=Commutersurvey(),
                                                 prefix='ntw')
        leg_formset_NormalFW = MakeLegs_NormalFW(instance=Commutersurvey(),
                                                 prefix='nfw')
        leg_formset_WRTW = MakeLegs_WRTW(instance=Commutersurvey(),
                                         prefix='wtw')
        leg_formset_WRFW = MakeLegs_WRFW(instance=Commutersurvey(),
                                         prefix='wfw')

    return render(
        request, "survey/new_checkin.html", {
            'wr_day': wr_day,
            'form': commute_form,
            'extra_form': extra_commute_form,
            'NormalTW_formset': leg_formset_NormalTW,
            'NormalFW_formset': leg_formset_NormalFW,
            'WRTW_formset': leg_formset_WRTW,
            'WRFW_formset': leg_formset_WRFW
        })
Ejemplo n.º 5
0
def add_checkin(request):

    try:
        wr_day = Month.objects.get(open_checkin__lte=date.today(),
                                   close_checkin__gte=date.today())
    except Month.DoesNotExist:
        return redirect('/')

    if request.POST:
        # send the filled out forms in!
        # if the forms turn out to be not valid, they will still retain
        # the form data from the POST request this way.
        commute_form = CommuterForm(request.POST)
        extra_commute_form = ExtraCommuterForm(request.POST)

        normal_copy = NormalFromWorkSameAsAboveForm(request.POST)
        wrday_copy = WalkRideFromWorkSameAsAboveForm(request.POST)
        commute_copy = NormalIdenticalToWalkrideForm(request.POST)

        if not commute_form.is_valid():
            # instance = Commutersurvey()
            leg_formset_WRTW = MakeLegs_WRTW(request.POST, prefix='wtw')
            leg_formset_WRFW = MakeLegs_WRFW(request.POST, prefix='wfw')
            leg_formset_NormalTW = MakeLegs_NormalTW(request.POST,
                                                     prefix='ntw')
            leg_formset_NormalFW = MakeLegs_NormalFW(request.POST,
                                                     prefix='nfw')
        else:
            commutersurvey = commute_form.save(commit=False)
            commutersurvey.wr_day_month = wr_day
            commutersurvey.email = commute_form.cleaned_data['email']
            commutersurvey.employer = commute_form.cleaned_data['employer']
            if 'team' in commute_form.cleaned_data:
                commutersurvey.team = commute_form.cleaned_data['team']

            extra_commute_form.is_valid()  # creates cleaned_data
            if 'share' in extra_commute_form.cleaned_data:
                commutersurvey.share = extra_commute_form.cleaned_data['share']
            commutersurvey.comments = extra_commute_form.cleaned_data[
                'comments']

            # write form responses to cookie
            for attr in ['name', 'email', 'home_address', 'work_address']:
                if attr in commute_form.cleaned_data:
                    request.session[attr] = commute_form.cleaned_data[attr]
            for attr in ['employer', 'team']:
                if attr in commute_form.cleaned_data:
                    if commute_form.cleaned_data[attr] is not None:
                        # import pdb; pdb.set_trace()
                        request.session[attr] = commute_form.cleaned_data[
                            attr].id
            for attr in ['share', 'volunteer']:
                if attr in extra_commute_form.cleaned_data:
                    request.session[attr] = extra_commute_form.cleaned_data[
                        attr]

            # This is just to generate cleaned_data. The radio button choices will be valid.
            wrday_copy.is_valid()
            commute_copy.is_valid()
            normal_copy.is_valid()
            request.session['walkride_same_as_reverse'] = str(
                wrday_copy.cleaned_data['walkride_same_as_reverse'])
            request.session['normal_same_as_walkride'] = str(
                commute_copy.cleaned_data['normal_same_as_walkride'])
            request.session['normal_same_as_reverse'] = str(
                normal_copy.cleaned_data['normal_same_as_reverse'])

            ##################################
            # SAVE THE LEGS WITH THE CHECKIN #
            ##################################
            leg_formset_WRTW = MakeLegs_WRTW(request.POST,
                                             instance=commutersurvey,
                                             prefix='wtw')
            leg_formset_WRFW = MakeLegs_WRFW(request.POST,
                                             instance=commutersurvey,
                                             prefix='wfw')
            leg_formset_NormalTW = MakeLegs_NormalTW(request.POST,
                                                     instance=commutersurvey,
                                                     prefix='ntw')
            leg_formset_NormalFW = MakeLegs_NormalFW(request.POST,
                                                     instance=commutersurvey,
                                                     prefix='nfw')

            if leg_formset_WRTW.is_valid() and leg_formset_WRFW.is_valid(
            ) and leg_formset_NormalTW.is_valid(
            ) and leg_formset_NormalFW.is_valid():
                commutersurvey.save()
                leg_formset_WRTW.save()
                leg_formset_WRFW.save()
                leg_formset_NormalTW.save()
                leg_formset_NormalFW.save()

                write_formset_cookies(request, leg_formset_WRTW,
                                      leg_formset_WRFW, leg_formset_NormalTW,
                                      leg_formset_NormalFW)
                send_email(commutersurvey)
                return render_to_response(
                    'survey/thanks.html', {
                        'person': commutersurvey.name,
                        'calories_burned': commutersurvey.calories_total,
                        'calorie_change': commutersurvey.calorie_change,
                        'carbon_savings': commutersurvey.carbon_savings,
                        'change_type': commutersurvey.change_type,
                    },
                    context_instance=RequestContext(request))
            else:
                pass
    else:
        # initialize forms with cookies
        initial_commute = {}
        initial_extra_commute = {}

        for attr in [
                'name', 'email', 'home_address', 'work_address', 'employer',
                'team'
        ]:
            if attr in request.session:
                initial_commute[attr] = request.session.get(attr)

        for attr in ['share', 'volunteer']:
            if attr in request.session:
                initial_extra_commute[attr] = request.session.get(attr)

        if 'employer' in request.session:
            id = request.session.get('employer')
            try:
                initial_commute['employer'] = Employer.objects.get(pk=id)
            except Employer.DoesNotExist:
                initial_commute['employer'] = ''
        if 'team' in request.session:
            teamid = request.session.get('team')
            if teamid:
                try:
                    initial_commute['team'] = Team.objects.get(pk=teamid)
                except Team.DoesNotExist:
                    initial_commute['team'] = ''

        commute_form = CommuterForm(initial=initial_commute)
        extra_commute_form = ExtraCommuterForm(initial=initial_extra_commute)

        # TODO: use request session to instantiate the formsets with initial=[{},{},{}...] for each formset

        leg_formset_NormalTW = MakeLegs_NormalTW(instance=Commutersurvey(),
                                                 prefix='ntw')
        leg_formset_NormalFW = MakeLegs_NormalFW(instance=Commutersurvey(),
                                                 prefix='nfw')
        leg_formset_WRTW = MakeLegs_WRTW(instance=Commutersurvey(),
                                         prefix='wtw')
        leg_formset_WRFW = MakeLegs_WRFW(instance=Commutersurvey(),
                                         prefix='wfw')

        if 'normal_same_as_reverse' in request.session:
            normal_copy = NormalFromWorkSameAsAboveForm(
                initial={
                    'normal': request.session.get('normal_same_as_reverse')
                })
        else:
            normal_copy = NormalFromWorkSameAsAboveForm()

        if 'walkride_same_as_reverse' in request.session:
            wrday_copy = WalkRideFromWorkSameAsAboveForm(
                initial={
                    'wr_day': request.session.get('walkride_same_as_reverse')
                })
        else:
            wrday_copy = WalkRideFromWorkSameAsAboveForm()

        if 'normal_same_as_walkride' in request.session:
            commute_copy = NormalIdenticalToWalkrideForm(
                initial={
                    'commute': request.session.get('normal_same_as_walkride')
                })
        else:
            commute_copy = NormalIdenticalToWalkrideForm()

    # now just go ahead and render.
    return render(
        request, "survey/new_checkin.html", {
            'wr_day': wr_day,
            'form': commute_form,
            'extra_form': extra_commute_form,
            'NormalTW_formset': leg_formset_NormalTW,
            'NormalFW_formset': leg_formset_NormalFW,
            'WRTW_formset': leg_formset_WRTW,
            'WRFW_formset': leg_formset_WRFW,
            'normal_copy': normal_copy,
            'wrday_copy': wrday_copy,
            'commute_copy': commute_copy,
        })