~hsiung0911/sahana-eden/test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# -*- coding: utf-8 -*-

"""
    Request Management System - Controllers
"""

module = request.controller

if module not in deployment_settings.modules:
    session.error = T("Module disabled!")
    redirect(URL(r=request, c="default", f="index"))

# Options Menu (available in all Functions' Views)
response.menu_options = [
    [T("Home"), False, URL(r=request, f="index")],
    [T("Request Aid"), False, URL(r=request, f="req", args="create")],
    [T("View Requests & Pledge Aid"), False, URL(r=request, f="req")],
    [T("View & Edit Pledges"),False, URL(r=request, f="pledge")]
]

# S3 framework functions
def index():
    "Module's Home Page"

    module_name = deployment_settings.modules[module].name_nice

    return dict(module_name=module_name, a=1)


def req(): #aid requests
    "RESTful CRUD controller"

    resource = request.function # pulls from table of combined aid request feeds (sms, tweets, manual)

    # Filter out non-actionable SMS requests:
#    response.s3.filter = (db.rms_req.actionable == True) | (db.rms_req.source_type != 2) # disabled b/c Ushahidi no longer updating actionaable fielde

    if request.args(0) and request.args(0) == "search_simple":
        pass
    else:
        # Uncomment to enable Server-side pagination:
        response.s3.pagination = True
        
    if request.args(0) == "create" or request.args(0) == "update": 
        db.rms_req.pledge_status.readable = False
    
    

    def req_postp(jr, output):
        if jr.representation in ("html", "popup"):
            if not jr.component:
                response.s3.actions = [
                    dict(label=str(T("Edit")), _class="action-btn", url=str(URL(r=request, args=["update", "[id]"]))),
                    dict(label=str(T("Pledge")), _class="action-btn", url=str(URL(r=request, args=["[id]", "pledge"])))
                ]
            elif jr.component_name == "pledge":
                response.s3.actions = [
                    dict(label=str(T("Details")), _class="action-btn", url=str(URL(r=request, args=["pledge", "[id]"])))
                ]
        return output
    response.s3.postp = req_postp

    output = shn_rest_controller(module, resource,
                                 editable=True,
                                 listadd=False,
                                 rheader=shn_rms_rheader)
                                 # call rheader to act as parent header for parent/child forms (layout defined below)

    return output


def pledge(): #pledges from agencies
    "RESTful CRUD controller"

    resource = request.function

    # Uncomment to enable Server-side pagination:
    #response.s3.pagination = True  #commented due to display problems
    
    
 

    #pledges = db(db.rms_pledge.status == 3).select() # changes the request status to completed when pledge delivered
                                                     # this is necessary to close the loop
    #for pledge in pledges:
    #    req = db(db.rms_req.id == pledge.req_id).update(completion_status = True)

    #db.commit()

    def pledge_postp(jr, output):
        if jr.representation in ("html", "popup"):
            if not jr.component:
                response.s3.actions = [
                    dict(label=str(READ), _class="action-btn", url=str(URL(r=request, args=["[id]", "read"])))
                ]
        return output
    response.s3.postp = pledge_postp

    response.s3.pagination = True
    return shn_rest_controller(module, resource, editable = True, listadd=False)


def shn_rms_rheader(jr):

    if jr.representation == "html":

        _next = jr.here()
        _same = jr.same()

        if jr.name == "req":
            aid_request = jr.record
            if aid_request:
                try:
                    location = db(db.gis_location.id == aid_request.location_id).select(limitby=(0, 1)).first()
                    location_represent = shn_gis_location_represent(location.id)
                except:
                    location_represent = None

                rheader = TABLE(TR(TH(T("Message: ")),
                                TD(aid_request.message, _colspan=3)),
                                TR(TH(T("Priority: ")),
                                aid_request.priority,
                                TH(T("Source Type: ")),
                                rms_req_source_type.get(aid_request.source_type, T("unknown"))),
                                TR(TH(T("Time of Request: ")),
                                aid_request.timestamp,
                                TH(T("Verified: ")),
                                aid_request.verified),
                                TR(TH(T("Location: ")),
                                location_represent,
                                TH(T("Actionable: ")),
                                aid_request.actionable))

                return rheader

    return None


def sms_complete(): #contributes to RSS feed for closing the loop with Ushahidi

    def t(record):
        return "Sahana Record Number: " + str(record.id)

    def d(record):
        ush_id = db(db.rms_sms_request.id == record.id).select("ush_id")[0]["ush_id"]
        smsrec = db(db.rms_sms_request.id == record.id).select("smsrec")[0]["smsrec"]

        return \
            "Ushahidi Link: " + A(ush_id, _href=ush_id).xml() + "<br>" + \
            "SMS Record: " + str(smsrec)

    rss = { "title" : t , "description" : d }
    response.s3.filter = (db.rms_req.completion_status == True) & (db.rms_req.source_type == 2)
    return shn_rest_controller(module, "req", editable=False, listadd=False, rss=rss)


def tweet_complete(): #contributes to RSS feed for closing the loop with TtT

    def t(record):
        return "Sahana Record Number: " + str(record.id)

    def d(record):
        ttt_id = db(db.rms_tweet_request.id == record.id).select("ttt_id")[0]["ttt_id"]
        return "Twitter: " + ttt_id

    rss = { "title" : t , "description" : d }
    response.s3.filter = (db.rms_req.completion_status == True) & (db.rms_req.source_type == 3)
    return shn_rest_controller(module, "req", editable=False, listadd=False, rss = rss)