Merge lp:~zubairassad89/sahana-eden/vms_gsoc into lp:~sahana-eden-vms/sahana-eden/vms

Proposed by zubair assad
Status: Merged
Approved by: Pat Tressel
Approved revision: 786
Merged at revision: 786
Proposed branch: lp:~zubairassad89/sahana-eden/vms_gsoc
Merge into: lp:~sahana-eden-vms/sahana-eden/vms
Diff against target: 99 lines (+60/-2)
2 files modified
controllers/vol.py (+58/-2)
views/vol/view_team_map.html (+2/-0)
To merge this branch: bzr merge lp:~zubairassad89/sahana-eden/vms_gsoc
Reviewer Review Type Date Requested Status
Pat Tressel Approve
Review via email: mp+32361@code.launchpad.net

Commit message

Mapping Team Members of a Team aka Group

Description of the change

Mapping Team Members of a Team aka Group

To post a comment you must log in.
Revision history for this message
Pat Tressel (ptressel) wrote :

Looks good!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'controllers/vol.py'
2--- controllers/vol.py 2010-08-05 19:00:29 +0000
3+++ controllers/vol.py 2010-08-11 18:18:50 +0000
4@@ -4,6 +4,8 @@
5 Volunteer Management System
6 """
7
8+from gluon.sql import Rows
9+
10 module = request.controller
11
12 if module not in deployment_settings.modules:
13@@ -43,7 +45,9 @@
14 if selection:
15 team_name = shn_pr_group_represent(group_id)
16 menu_teams = [
17- ["%s %s" % (T("Team:"), team_name), False, URL(r=request, f="group", args=[group_id, "read"])],
18+ ["%s %s" % (T("Team:"), team_name), False, URL(r=request, f="group", args=[group_id, "read"]),[
19+ [T("Map Team"), False, URL(r=request, f="view_team_map", args=[group_id])],
20+ ]],
21 ]
22 menu.extend(menu_teams)
23
24@@ -78,7 +82,7 @@
25 menu.extend(menu_skills)
26 if auth.user is not None:
27 menu_user = [
28- [T("My Tasks"), False, URL(r=request, f="task", args="")]
29+ [T("My Tasks"), False, URL(r=request, f="task", args="")],
30 ]
31 menu.extend(menu_user)
32 response.menu_options = menu
33@@ -371,6 +375,58 @@
34
35
36 # -----------------------------------------------------------------------------
37+def view_team_map():
38+ """
39+ Map Location of Volunteer in a Team.
40+ Use most recent presence if available, else any address that's available.
41+ """
42+
43+ group_id = request.args(0)
44+
45+ members_query = (db.pr_group_membership.group_id == group_id)
46+ members = db(members_query).select(db.pr_group_membership.person_id) #members of a team aka group
47+ member_person_ids = [ x.person_id for x in members ] #list of members
48+
49+ #Presence Data of the members with Presence Logs
50+ presence_rows = db(db.pr_person.id.belongs(member_person_ids) & (db.pr_presence.pe_id == db.pr_person.pe_id) & (db.gis_location.id == db.pr_presence.location_id)).select(db.gis_location.ALL, db.pr_person.id, orderby=~db.pr_presence.time)
51+ #Get Latest Presence Data
52+ person_location_sort = presence_rows.sort(lambda row:row.pr_person.id)
53+ previous_person_id = None
54+ locations_list = []
55+ for row in person_location_sort:
56+ if row.pr_person.id != previous_person_id:
57+ locations_list.append(row["gis_location"])
58+ member_person_ids.remove(row.pr_person.id)
59+ previous_person_id = row.pr_person.id
60+
61+ #Address of those members without Presence data
62+ address = db(db.pr_person.id.belongs(member_person_ids) & (db.pr_address.pe_id == db.pr_person.pe_id) & (db.gis_location.id == db.pr_address.location_id)).select(db.gis_location.ALL)
63+
64+ locations_list.extend(address)
65+
66+ if locations_list:
67+
68+ bounds = gis.get_bounds(features=locations_list)
69+
70+ volunteer = {"feature_group" : "People"}
71+ html = gis.show_map(
72+ feature_queries = [{"name" : "Volunteer", "query" : locations_list, "active" : True, "marker" : db(db.gis_marker.name == "volunteer").select().first().id}],
73+ feature_groups = [volunteer],
74+ wms_browser = {"name" : "Risk Maps", "url" : "http://preview.grid.unep.ch:8080/geoserver/ows?service=WMS&request=GetCapabilities"},
75+ catalogue_overlays = True,
76+ catalogue_toolbar = True,
77+ toolbar = True,
78+ search = True,
79+ bbox = bounds,
80+ window = True,
81+ )
82+ return dict(map=html)
83+
84+ # TODO: What is an appropriate response if no location is available?
85+ return None
86+
87+
88+# -----------------------------------------------------------------------------
89 # TODO: Is resource a bad name, due to possible confusion with other usage?
90 def resource():
91 "Select resources a volunteer has."
92
93=== added file 'views/vol/view_team_map.html'
94--- views/vol/view_team_map.html 1970-01-01 00:00:00 +0000
95+++ views/vol/view_team_map.html 2010-08-11 18:18:50 +0000
96@@ -0,0 +1,2 @@
97+{{extend 'layout.html'}}
98+{{=XML(map)}}
99\ No newline at end of file

Subscribers

People subscribed via source and target branches

to all changes: