Beispiel #1
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)
        })
Beispiel #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.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,
        })
Beispiel #3
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)
                  })
Beispiel #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.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,
                  })