Skip to content

Commit

Permalink
Membership Report filtering by region (#1247)
Browse files Browse the repository at this point in the history
* Add Region filter option to member_quick_list report

Incomplete

* Basic region selection functionality working using URL parameter for Current Member Quick List

* Added Region URL parameter for CSV output

* Add Region search option to membership_quick_list.html

* Added Region Filter to Current Members Quick List report

* Create search-region-form.html

Creating inclusion tag for Region search functionality

- Search form html

* Update membership_tags.py

New search_region_form tag

* Basic building blocks for Region filter functionality for Membership reports

* Update search-region-form.html

Added reference to (currently not working) javascript

* Update utils.py

new add_region_filter utility function to support region filtering for membership searches

* Update views.py

Use new utility add_region_filter method

* Update views.py

Remove commented out code

Basic building blocks for Region filtering of Membership reports in place

* refactor filtering by region for Members Quick List

so that user input is validated automatically, and it is more Django friendly.

* missing "region_url_param"

---------

Co-authored-by: Jenny Qian <jqian@tendenci.com>
  • Loading branch information
rob-hills and jennyq committed Jan 5, 2024
1 parent 5a86179 commit c06fc9d
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 5 deletions.
8 changes: 8 additions & 0 deletions tendenci/apps/memberships/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
from tendenci.apps.emails.models import Email
from tendenci.apps.base.utils import validate_email
from tendenci.apps.base.utils import get_timezone_choices
from tendenci.apps.regions.models import Region


THIS_YEAR = datetime.today().year
Expand Down Expand Up @@ -136,6 +137,13 @@ def assign_search_fields(form, app_field_objs):
form.fields[obj.field_name] = forms.CharField(label=obj.label, required=False)


class RegionForm(FormControlWidgetMixin, forms.Form):
region = forms.ModelChoiceField(label=_("Select a region"),
queryset=Region.objects.filter(status_detail='active').order_by('region_name'),
empty_label="All",
required=False)


class MemberSearchForm(FormControlWidgetMixin, forms.Form):
def __init__(self, *args, **kwargs):
app_fields = kwargs.pop('app_fields')
Expand Down
4 changes: 4 additions & 0 deletions tendenci/apps/memberships/templatetags/membership_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ def render_membership_field(request, field_obj,
return {'request': request, 'field_obj': field_obj,
'field': field, 'field_pwd': field_pwd}

@register.inclusion_tag('memberships/search-region-form.html', takes_context=True)
def search_region_form(context):
return context


@register.filter
def get_actions(membership, user):
Expand Down
1 change: 1 addition & 0 deletions tendenci/apps/memberships/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
from tendenci.apps.profiles.utils import make_username_unique, spawn_username
from tendenci.apps.emails.models import Email
from tendenci.apps.educations.models import Education
from tendenci.apps.regions.models import Region
from tendenci.apps.base.utils import escape_csv, Echo


Expand Down
22 changes: 20 additions & 2 deletions tendenci/apps/memberships/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,15 @@
AutoRenewSetupForm,
MessageForm,
MemberSearchForm,
EmailMembersForm)
EmailMembersForm,
RegionForm)
from tendenci.apps.memberships.utils import (prepare_chart_data,
get_days, get_over_time_stats, iter_memberships,
get_membership_stats, ImportMembDefault,
get_membership_app, get_membership_summary_data,
email_pending_members,
email_membership_members)
from tendenci.apps.regions.models import Region
from tendenci.apps.base.forms import CaptchaForm
from tendenci.apps.perms.decorators import is_enabled
from tendenci.apps.theme.utils import get_template_content_raw
Expand Down Expand Up @@ -2494,6 +2496,17 @@ def report_member_quick_list(request, template_name='reports/membership_quick_li
""" Table view of current members fname, lname and company only.
"""
members = MembershipDefault.objects.filter(status=1, status_detail="active").order_by('user__last_name')
region_form = None
region_name = None
region_url_param = ''
if members.filter(region__isnull=False).exists():
region_form = RegionForm(request.GET)
if region_form.is_valid():
region = region_form.cleaned_data['region']
if region:
region_name = region.region_name
region_url_param = f'&region={region.id}'
members = members.filter(region_id=region.id)

# returns csv response ---------------
ouput = request.GET.get('output', '')
Expand Down Expand Up @@ -2526,7 +2539,12 @@ def report_member_quick_list(request, template_name='reports/membership_quick_li

EventLog.objects.log()

return render_to_resp(request=request, template_name=template_name, context={'members': members})
context={'members': members,
'region_form': region_form,
'region_name': region_name,
'region_url_param': region_url_param}
# return render_to_resp(request=request, template_name=template_name, context={'members': members, 'region_id':region_id, 'region_name':region_name, 'region_url_param':region_url_param, 'regions':regions})
return render_to_resp(request=request, template_name=template_name, context=context)


@staff_member_required
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{% if region_form %}
<form class="search-form pull-right form-inline" id="frm_region" action="{% url "reports-members-quick-list" %}" method="get">
{{ region_form.region.label }}: {{ region_form.region }}
</form>

<script type="text/javascript">
$(document).ready(function() {

$('#id_region').on('change', function (e) {
if ($(this).val() == '')
{
$(this).prop('disabled', true);
}
$("form#frm_region").submit();
});

});
</script>
{% endif %}
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@
{% extends "reports/base.html" %}
{% load membership_tags %}

{% block content %}
<div class="page-header">
<h1>{% trans "Current Members Quick List" %}</h1>
<h1>{% trans "Current Members Quick List" %}
{% if region_name %}
- {{ region_name }}
{% endif %}
</h1>

</div>
<div class="mems-wrap">

<p class="pull-left">
{% if members %}
<a class="btn btn-primary" href="{% url "reports-members-quick-list" %}?output=csv{{ region_url_param }}">

{% trans 'Download CSV File' %}</a>
{% endif %}
{% search_region_form %}
</p>
{% if members %}
<p><a class="btn btn-primary" href="{% url "reports-members-quick-list" %}?output=csv">
{% trans 'Download CSV File' %}</a></p>
<table class="table table-tendenci-reports">
<tr>
<th>{% trans "Last Name" %}</th>
Expand All @@ -25,5 +38,6 @@ <h1>{% trans "Current Members Quick List" %}</h1>
{% else %}
{% trans "No active members." %}
{% endif %}

</div>
{% endblock content %}

0 comments on commit c06fc9d

Please sign in to comment.