def details(request, account_id, building_id):
    account = get_object_or_404(Account, pk=account_id)
    building = get_object_or_404(Building, pk=building_id)
    if check_permission(request, account, building) 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_building_info_csv(request, building)
            return CSVResponse(data=data_out, output_name="BuildingSpeak_Report_Building_Info")

    main_page_help_text = "Building Details - view Building details and contact info."
    tab_help_text = "click to export building 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": building.get_all_alerts(reverse_boolean=True),
        "building": building,
        "building_ESPM_primary_function": building.get_ESPM_primary_function_display(),
    }

    template_name = "buildingspeakapp/buildings/details.html"
    return render(request, template_name, RequestContext(request, context))
def info(request, account_id, building_id):
    account = get_object_or_404(Account, pk=account_id)
    building = get_object_or_404(Building, pk=building_id)
    if check_permission(request, account, building) 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()
                building.messages.add(new_event)
                success_message = "'%s' on %s successfully added to building: %s." % (
                    new_event.subject,
                    new_event.when.strftime("%m/%d/%Y"),
                    building.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_building_info_csv(request, building)
            return CSVResponse(data=data_out, output_name="BuildingSpeak_Report_Building_Info")

    main_page_help_text = "Building Info - view image, lists of efficiency measures, spaces, etc."
    tab_help_text = "click to export Building 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() == building],
        "events": building.get_all_events(reverse_boolean=True),
        "building": building,
        "building_measures": EfficiencyMeasure.objects.filter(
            Q(equipments__buildings=building) | Q(meters__building=building)
        )
        .distinct()
        .order_by("name"),
        "building_spaces": building.space_set.order_by("name"),
        "adding_events_is_enabled": True,
    }

    template_name = "buildingspeakapp/buildings/info.html"
    return render(request, template_name, RequestContext(request, context))