~dongpo-deng/sahana-eden/test

1 by Deng Dongpo
initial
1
# -*- coding: utf-8 -*-
2
3
"""
4
    NIM Nursing Information Manager
5
6
    @author: nursix
7
"""
8
9
module = "nim"
10
if deployment_settings.has_module(module):
11
12
    # Settings
13
    resource = 'setting'
14
    table = module + '_' + resource
15
    db.define_table(table,
16
                    Field('audit_read', 'boolean'),
17
                    Field('audit_write', 'boolean'),
18
                    migrate=migrate)
19
20
    # *****************************************************************************
21
    #
22
    def shn_nim_represent_user(id):
23
24
        table = auth.settings.table_user
25
26
        if id:
27
            user = db(table.id==id).select(table.first_name, table.last_name)
28
            if user:
29
                user = user[0]
30
                name = user.first_name
31
                if user.last_name:
32
                    name = "%s %s" % (name, user.last_name)
33
                return name
34
35
        return None
36
37
    user_id = db.Table(None, 'user_id',
38
                    Field('user_id', auth.settings.table_user,
39
                            requires = IS_NULL_OR(IS_ONE_OF(db, auth.settings.table_user.id, shn_nim_represent_user)),
40
                            represent = lambda id: (id and [shn_nim_represent_user(id)] or ["None"])[0],
41
                            ondelete = 'RESTRICT',
42
                            label = T('Nurse')
43
                            )
44
                    )
45
46
    if auth.user is not None:
47
        user_id.user_id.default = auth.user.id
48
49
    # *****************************************************************************
50
    # Anamnesis: General
51
    #
52
    nim_care_strategy_opts = {
53
        1: T("Counselling"),
54
        2: T("Assisted Self-care"),
55
        3: T("Family Care"),
56
        4: T("Assisted Family Care"),
57
        5: T("Professional Care"),
58
        6: T("Medical Attention"),
59
        7: T("On-site Hospitalization"),
60
        8: T("Evacuation"),
61
        99: T("Self-care")
62
    }
63
64
    resource = 'anamnesis'
65
    table = module + '_' + resource
66
    db.define_table(table, timestamp, uuidstamp, deletion_status,
67
                        person_id,                          # Person ID
68
                        user_id,
69
                        shelter_id,
70
                        Field('opt_nim_care_strategy',
71
                            'integer',
72
                            requires = IS_IN_SET(nim_care_strategy_opts, zero=None),
73
                            default = 99,
74
                            label = T('Care Strategy'),
75
                            represent = lambda opt: nim_care_strategy_opts.get(opt, UNKNOWN_OPT)),
76
                        Field('lang_spoken'),
77
                        Field('lang_understood'),
78
                        Field('lang_comment'),
79
                        migrate=migrate)
80
81
    # Component
82
    s3xrc.model.add_component(module, resource,
83
                              multiple=False,
84
                              joinby=dict(pr_person='person_id'),
85
                              deletable=True,
86
                              editable=True)
87
88
    s3xrc.model.configure(db[table],
89
                          list_fields = ['id', 'opt_nim_care_strategy'])
90
91
    # *****************************************************************************
92
    # Anamnesis: Disabilities
93
    #
94
    resource = 'disabilities'
95
    table = module + '_' + resource
96
    db.define_table(table, timestamp, uuidstamp, deletion_status,
97
                        person_id,                          # Person ID
98
                        Field('disabilities'),
99
                        migrate=migrate)
100
101
    # Component
102
    s3xrc.model.add_component(module, resource,
103
                              multiple=False,
104
                              joinby=dict(pr_person='person_id'),
105
                              deletable=True,
106
                              editable=True)
107
108
    s3xrc.model.configure(db[table],
109
                          list_fields = ['id', 'disabilities'])
110
111
    # *****************************************************************************
112
    # Anamnesis: Diseases
113
    #
114
    resource = 'diseases'
115
    table = module + '_' + resource
116
    db.define_table(table, timestamp, uuidstamp, deletion_status,
117
                        person_id,                          # Person ID
118
                        Field('diseases'),
119
                        migrate=migrate)
120
121
    # Component
122
    s3xrc.model.add_component(module, resource,
123
                              multiple=False,
124
                              joinby=dict(pr_person='person_id'),
125
                              deletable=True,
126
                              editable=True)
127
128
    s3xrc.model.configure(db[table],
129
                          list_fields = ['id', 'diseases'])
130
131
    # *****************************************************************************
132
    # Anamnesis: Injuries
133
    #
134
    resource = 'injuries'
135
    table = module + '_' + resource
136
    db.define_table(table, timestamp, uuidstamp, deletion_status,
137
                        person_id,                          # Person ID
138
                        Field('injuries'),
139
                        migrate=migrate)
140
141
    # Component
142
    s3xrc.model.add_component(module, resource,
143
                              multiple=False,
144
                              joinby=dict(pr_person='person_id'),
145
                              deletable=True,
146
                              editable=True)
147
148
    s3xrc.model.configure(db[table],
149
                          list_fields = ['id', 'injuries'])
150
151
    # *****************************************************************************
152
    # Anamnesis: Treatments
153
    #
154
    resource = 'treatments'
155
    table = module + '_' + resource
156
    db.define_table(table, timestamp, uuidstamp, deletion_status,
157
                        person_id,                          # Person ID
158
                        Field('treatments'),
159
                        migrate=migrate)
160
161
    # Component
162
    s3xrc.model.add_component(module, resource,
163
                              multiple=False,
164
                              joinby=dict(pr_person='person_id'),
165
                              deletable=True,
166
                              editable=True)
167
168
    s3xrc.model.configure(db[table],
169
                          list_fields = ['id', 'treatments'])
170
171
    # *****************************************************************************
172
    # Status, physical
173
    #
174
    resource = 'care_status_physical'
175
    table = module + '_' + resource
176
    db.define_table(table, timestamp, uuidstamp, deletion_status,
177
                        person_id,                          # Person ID
178
                        user_id,                            # Nurse
179
                        Field('time', 'datetime'),          # Timestamp
180
                        Field('status', 'text'),
181
                        migrate=migrate)
182
183
    db[table].person_id.label = T("Person")
184
185
    db[table].time.requires = IS_UTC_DATETIME(utc_offset=shn_user_utc_offset(), allow_future=False)
186
    db[table].time.represent = lambda value: shn_as_local_time(value)
187
188
    # Component
189
    s3xrc.model.add_component(module, resource,
190
                              multiple=True,
191
                              joinby=dict(pr_person='person_id'),
192
                              deletable=True,
193
                              editable=True)
194
195
    s3xrc.model.configure(db[table],
196
                          list_fields = ['id', 'user_id', 'time'])
197
198
    # *****************************************************************************
199
    # Care Status: Mental
200
    #
201
    resource = 'care_status_mental'
202
    table = module + '_' + resource
203
    db.define_table(table, timestamp, uuidstamp, deletion_status,
204
                        person_id,                          # Person ID
205
                        Field('status', 'text'),
206
                        migrate=migrate)
207
208
    # Component
209
    s3xrc.model.add_component(module, resource,
210
                              multiple=True,
211
                              joinby=dict(pr_person='person_id'),
212
                              deletable=True,
213
                              editable=True)
214
215
    s3xrc.model.configure(db[table], list_fields = ['id'])
216
217
    # *****************************************************************************
218
    # Care Status: Social
219
    #
220
    resource = 'care_status_social'
221
    table = module + '_' + resource
222
    db.define_table(table, timestamp, uuidstamp, deletion_status,
223
                        person_id,                          # Person ID
224
                        Field('status', 'text'),
225
                        migrate=migrate)
226
227
    # Component
228
    s3xrc.model.add_component(module, resource,
229
                              multiple=True,
230
                              joinby=dict(pr_person='person_id'),
231
                              deletable=True,
232
                              editable=True)
233
234
    s3xrc.model.configure(db[table], list_fields = ['id'])
235
236
    # *****************************************************************************
237
    # Care Report: Planning
238
    #
239
    resource = 'care_report_problems'
240
    table = module + '_' + resource
241
    db.define_table(table, timestamp, uuidstamp, deletion_status,
242
                        person_id,                          # Person ID
243
                        Field('problems', 'text'),
244
                        migrate=migrate)
245
246
    # Component
247
    s3xrc.model.add_component(module, resource,
248
                              multiple=True,
249
                              joinby=dict(pr_person='person_id'),
250
                              deletable=True,
251
                              editable=True)
252
253
    s3xrc.model.configure(db[table], list_fields = ['id'])
254
255
    # *****************************************************************************
256
    # Care Report: Measures
257
    #
258
    resource = 'care_report_measures'
259
    table = module + '_' + resource
260
    db.define_table(table, timestamp, uuidstamp, deletion_status,
261
                        person_id,                          # Person ID
262
                        Field('time', 'datetime'),
263
                        Field('measures', length=256),
264
                        Field('report', 'text'),
265
                        migrate=migrate)
266
267
    db[table].time.requires = IS_UTC_DATETIME(utc_offset=shn_user_utc_offset(), allow_future=False)
268
    db[table].time.represent = lambda value: shn_as_local_time(value)
269
270
    # Component
271
    s3xrc.model.add_component(module, resource,
272
                              multiple=True,
273
                              joinby=dict(pr_person='person_id'),
274
                              deletable=True,
275
                              editable=True)
276
277
    s3xrc.model.configure(db[table], list_fields = ['id', 'time', 'measures'])
278
279
    # *****************************************************************************
280
    # Care Report: Planning
281
    #
282
    resource = 'care_report_planning'
283
    table = module + '_' + resource
284
    db.define_table(table, timestamp, uuidstamp, deletion_status,
285
                        person_id,                          # Person ID
286
                        Field('planning', 'text'),
287
                        migrate=migrate)
288
289
    # Component
290
    s3xrc.model.add_component(module, resource,
291
                              multiple=True,
292
                              joinby=dict(pr_person='person_id'),
293
                              deletable=True,
294
                              editable=True)
295
296
    s3xrc.model.configure(db[table], list_fields = ['id'])
297
298
    # *****************************************************************************
299
    # Functions
300
301
302
    # *****************************************************************************