def details(request, account_id, equipment_id):
    account = get_object_or_404(Account, pk=account_id)
    equipment = get_object_or_404(Equipment, pk=equipment_id)
    if check_permission(request, account, equipment) is False: return HttpResponseRedirect('/%s/status/' % (account.id))

    #---branching for POST vs. GET request
    if request.method == 'POST': # If a form has been submitted...
        if 'export_details_tab' in request.POST:
            data_out = generate_equipment_info_csv(request, equipment)
            return CSVResponse(data = data_out, output_name = 'BuildingSpeak_Report_Equipment_Info')

    main_page_help_text = 'Equipment Details - view equipment info.'
    tab_help_text = 'click to export Equipment info to CSV file'

    context = {
        'sidebar':        'buildingspeakapp/shared/account_sidebar.html',
        'tab':            'details',
        'main_page_help_text': main_page_help_text,
        'tab_help_text':      tab_help_text,
        'user':           request.user,
        'account':        account,
        'accounts':       request.user.account_set.order_by('id'),
        'buildings':      account.building_set.order_by('name'),
        'spaces':         Space.objects.filter(Q(building__account=account) | Q(meters__account=account)).distinct().order_by('name'),
        'meters':         account.meter_set.order_by('name'),
        'equipments':     Equipment.objects.filter(Q(buildings__account=account) | Q(meters__account=account)).distinct().order_by('name'),
        'measures':       EfficiencyMeasure.objects.filter(Q(equipments__buildings__account=account) | Q(meters__account=account)).distinct().order_by('name'),

        'alerts':         equipment.get_all_alerts(reverse_boolean=True),
        'equipment':      equipment,
    }

    template_name = 'buildingspeakapp/equipment/details.html'
    return render(request, template_name, RequestContext(request, context))
def info(request, account_id, equipment_id):
    account = get_object_or_404(Account, pk=account_id)
    equipment = get_object_or_404(Equipment, pk=equipment_id)
    if check_permission(request, account, equipment) is False: return HttpResponseRedirect('/%s/status/' % (account.id))
    
    #---branching for POST vs. GET request
    if request.method == 'POST': # If a form has been submitted...
    # ... and the form was the add event form
        if 'add_event' in request.POST:
          add_event_form = AddEventForm(request.POST)
          if add_event_form.is_valid(): # All validation rules pass
            # Process the data in add_event_form.cleaned_data
            new_event = Message()
            new_event.__setattr__('message_type', 'Event')
            new_event.__setattr__('when',         add_event_form.cleaned_data['when'])
            new_event.__setattr__('subject',      add_event_form.cleaned_data['subject'])
            new_event.save()
            equipment.messages.add(new_event)
            success_message = "'%s' on %s successfully added to equipment: %s." % (new_event.subject, new_event.when.strftime('%m/%d/%Y'), equipment.name)
            messages.success(request, success_message)
        # ... and the user has hit 'export' on the info tab
        elif 'export_info_tab' in request.POST:
            data_out = generate_equipment_info_csv(request, equipment)
            return CSVResponse(data = data_out, output_name = 'BuildingSpeak_Report_Equipment_Info')

    main_page_help_text = 'Equipment Info - view images, lists of efficiency measures, etc.'
    tab_help_text = 'click to export Equipment info to CSV file'

    context = {
        'sidebar':        'buildingspeakapp/shared/account_sidebar.html',
        'tab':            'info',
        'main_page_help_text': main_page_help_text,
        'tab_help_text':      tab_help_text,
        'user':           request.user,
        'account':        account,
        'accounts':       request.user.account_set.order_by('id'),
        'buildings':      account.building_set.order_by('name'),
        'spaces':         Space.objects.filter(Q(building__account=account) | Q(meters__account=account)).distinct().order_by('name'),
        'meters':         account.meter_set.order_by('name'),
        'equipments':     Equipment.objects.filter(Q(buildings__account=account) | Q(meters__account=account)).distinct().order_by('name'),
        'measures':       EfficiencyMeasure.objects.filter(Q(equipments__buildings__account=account) | Q(meters__account=account)).distinct().order_by('name'),

        'alerts':         [x for x in request.user.user_profile.alerts.all() if x.target() == equipment],
        'events':         equipment.get_all_events(reverse_boolean=True),
        'equipment':      equipment,
        'adding_events_is_enabled':   True,
    }
    
    template_name = 'buildingspeakapp/equipment/info.html'
    return render(request, template_name, RequestContext(request, context))