~hsiung0911/sahana-eden/test

« back to all changes in this revision

Viewing changes to controllers/rms.py

  • Committer: eliao
  • Date: 2010-08-01 09:56:45 UTC
  • Revision ID: eliao@ibm-l3bw307-20100801095645-gsq9wcmjan0o0tby
This is my change

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
 
 
3
"""
 
4
    Request Management System - Controllers
 
5
"""
 
6
 
 
7
module = request.controller
 
8
 
 
9
if module not in deployment_settings.modules:
 
10
    session.error = T("Module disabled!")
 
11
    redirect(URL(r=request, c="default", f="index"))
 
12
 
 
13
# Options Menu (available in all Functions' Views)
 
14
response.menu_options = [
 
15
    [T("Home"), False, URL(r=request, f="index")],
 
16
    [T("Request Aid"), False, URL(r=request, f="req", args="create")],
 
17
    [T("View Requests & Pledge Aid"), False, URL(r=request, f="req")],
 
18
    [T("View & Edit Pledges"),False, URL(r=request, f="pledge")]
 
19
]
 
20
 
 
21
# S3 framework functions
 
22
def index():
 
23
    "Module's Home Page"
 
24
 
 
25
    module_name = deployment_settings.modules[module].name_nice
 
26
 
 
27
    return dict(module_name=module_name, a=1)
 
28
 
 
29
 
 
30
def req(): #aid requests
 
31
    "RESTful CRUD controller"
 
32
 
 
33
    resource = request.function # pulls from table of combined aid request feeds (sms, tweets, manual)
 
34
 
 
35
    # Filter out non-actionable SMS requests:
 
36
#    response.s3.filter = (db.rms_req.actionable == True) | (db.rms_req.source_type != 2) # disabled b/c Ushahidi no longer updating actionaable fielde
 
37
 
 
38
    if request.args(0) and request.args(0) == "search_simple":
 
39
        pass
 
40
    else:
 
41
        # Uncomment to enable Server-side pagination:
 
42
        response.s3.pagination = True
 
43
        
 
44
    if request.args(0) == "create" or request.args(0) == "update": 
 
45
        db.rms_req.pledge_status.readable = False
 
46
    
 
47
    
 
48
 
 
49
    def req_postp(jr, output):
 
50
        if jr.representation in ("html", "popup"):
 
51
            if not jr.component:
 
52
                response.s3.actions = [
 
53
                    dict(label=str(T("Edit")), _class="action-btn", url=str(URL(r=request, args=["update", "[id]"]))),
 
54
                    dict(label=str(T("Pledge")), _class="action-btn", url=str(URL(r=request, args=["[id]", "pledge"])))
 
55
                ]
 
56
            elif jr.component_name == "pledge":
 
57
                response.s3.actions = [
 
58
                    dict(label=str(T("Details")), _class="action-btn", url=str(URL(r=request, args=["pledge", "[id]"])))
 
59
                ]
 
60
        return output
 
61
    response.s3.postp = req_postp
 
62
 
 
63
    output = shn_rest_controller(module, resource,
 
64
                                 editable=True,
 
65
                                 listadd=False,
 
66
                                 rheader=shn_rms_rheader)
 
67
                                 # call rheader to act as parent header for parent/child forms (layout defined below)
 
68
 
 
69
    return output
 
70
 
 
71
 
 
72
def pledge(): #pledges from agencies
 
73
    "RESTful CRUD controller"
 
74
 
 
75
    resource = request.function
 
76
 
 
77
    # Uncomment to enable Server-side pagination:
 
78
    #response.s3.pagination = True  #commented due to display problems
 
79
    
 
80
    
 
81
 
 
82
 
 
83
    #pledges = db(db.rms_pledge.status == 3).select() # changes the request status to completed when pledge delivered
 
84
                                                     # this is necessary to close the loop
 
85
    #for pledge in pledges:
 
86
    #    req = db(db.rms_req.id == pledge.req_id).update(completion_status = True)
 
87
 
 
88
    #db.commit()
 
89
 
 
90
    def pledge_postp(jr, output):
 
91
        if jr.representation in ("html", "popup"):
 
92
            if not jr.component:
 
93
                response.s3.actions = [
 
94
                    dict(label=str(READ), _class="action-btn", url=str(URL(r=request, args=["[id]", "read"])))
 
95
                ]
 
96
        return output
 
97
    response.s3.postp = pledge_postp
 
98
 
 
99
    response.s3.pagination = True
 
100
    return shn_rest_controller(module, resource, editable = True, listadd=False)
 
101
 
 
102
 
 
103
def shn_rms_rheader(jr):
 
104
 
 
105
    if jr.representation == "html":
 
106
 
 
107
        _next = jr.here()
 
108
        _same = jr.same()
 
109
 
 
110
        if jr.name == "req":
 
111
            aid_request = jr.record
 
112
            if aid_request:
 
113
                try:
 
114
                    location = db(db.gis_location.id == aid_request.location_id).select(limitby=(0, 1)).first()
 
115
                    location_represent = shn_gis_location_represent(location.id)
 
116
                except:
 
117
                    location_represent = None
 
118
 
 
119
                rheader = TABLE(TR(TH(T("Message: ")),
 
120
                                TD(aid_request.message, _colspan=3)),
 
121
                                TR(TH(T("Priority: ")),
 
122
                                aid_request.priority,
 
123
                                TH(T("Source Type: ")),
 
124
                                rms_req_source_type.get(aid_request.source_type, T("unknown"))),
 
125
                                TR(TH(T("Time of Request: ")),
 
126
                                aid_request.timestamp,
 
127
                                TH(T("Verified: ")),
 
128
                                aid_request.verified),
 
129
                                TR(TH(T("Location: ")),
 
130
                                location_represent,
 
131
                                TH(T("Actionable: ")),
 
132
                                aid_request.actionable))
 
133
 
 
134
                return rheader
 
135
 
 
136
    return None
 
137
 
 
138
 
 
139
def sms_complete(): #contributes to RSS feed for closing the loop with Ushahidi
 
140
 
 
141
    def t(record):
 
142
        return "Sahana Record Number: " + str(record.id)
 
143
 
 
144
    def d(record):
 
145
        ush_id = db(db.rms_sms_request.id == record.id).select("ush_id")[0]["ush_id"]
 
146
        smsrec = db(db.rms_sms_request.id == record.id).select("smsrec")[0]["smsrec"]
 
147
 
 
148
        return \
 
149
            "Ushahidi Link: " + A(ush_id, _href=ush_id).xml() + "<br>" + \
 
150
            "SMS Record: " + str(smsrec)
 
151
 
 
152
    rss = { "title" : t , "description" : d }
 
153
    response.s3.filter = (db.rms_req.completion_status == True) & (db.rms_req.source_type == 2)
 
154
    return shn_rest_controller(module, "req", editable=False, listadd=False, rss=rss)
 
155
 
 
156
 
 
157
def tweet_complete(): #contributes to RSS feed for closing the loop with TtT
 
158
 
 
159
    def t(record):
 
160
        return "Sahana Record Number: " + str(record.id)
 
161
 
 
162
    def d(record):
 
163
        ttt_id = db(db.rms_tweet_request.id == record.id).select("ttt_id")[0]["ttt_id"]
 
164
        return "Twitter: " + ttt_id
 
165
 
 
166
    rss = { "title" : t , "description" : d }
 
167
    response.s3.filter = (db.rms_req.completion_status == True) & (db.rms_req.source_type == 3)
 
168
    return shn_rest_controller(module, "req", editable=False, listadd=False, rss = rss)