~dhis-mobile-devs/dhis-mobile/lwuit-tracking

« back to all changes in this revision

Viewing changes to src/org/hisp/dhis/mobile/view/PersonDashboardView.java

  • Committer: Hong Em
  • Date: 2014-11-18 05:46:44 UTC
  • Revision ID: em.hispvietnam@gmail.com-20141118054644-nk766oqs3b5frv7q
Add feature: Shortcut link to Add relationship

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
 * @version PersonDashboardView.java 3:03:11 PM Feb 15, 2013 $
33
33
 */
34
34
 
 
35
import java.io.IOException;
35
36
import java.util.Vector;
36
37
 
 
38
import javax.microedition.rms.RecordStoreException;
 
39
import javax.microedition.rms.RecordStoreFullException;
 
40
import javax.microedition.rms.RecordStoreNotFoundException;
 
41
 
37
42
import org.hisp.dhis.mobile.connection.ConnectionManager;
38
43
import org.hisp.dhis.mobile.log.LogMan;
39
44
import org.hisp.dhis.mobile.midlet.DHISMIDlet;
50
55
import org.hisp.dhis.mobile.recordstore.PatientRecordStore;
51
56
import org.hisp.dhis.mobile.recordstore.ProgramRecordStore;
52
57
import org.hisp.dhis.mobile.recordstore.RelationshipTypeRecordStore;
 
58
import org.hisp.dhis.mobile.recordstore.RelativeRelationshipRecordStore;
53
59
import org.hisp.dhis.mobile.ui.Text;
54
60
 
55
61
import com.sun.lwuit.Button;
65
71
import com.sun.lwuit.layouts.BoxLayout;
66
72
import com.sun.lwuit.plaf.Style;
67
73
 
68
 
public class PersonDashboardView extends AbstractView implements ActionListener {
69
 
        private static final String CLASS_TAG = "PersonDashboardView";
 
74
public class PersonDashboardView
 
75
    extends AbstractView
 
76
    implements ActionListener
 
77
{
 
78
    private static final String CLASS_TAG = "PersonDashboardView";
70
79
 
71
80
    private NameBasedMIDlet namebasedMidlet;
72
81
 
73
 
        private Form mainForm;
74
 
 
75
 
        private Command backCommand;
76
 
 
77
 
        private Patient patient;
78
 
 
79
 
        private Program vsProgram;
80
 
 
81
 
        private int previousScreen;
82
 
 
83
 
        private Dialog confirmDialog;
84
 
 
85
 
        public PersonDashboardView(DHISMIDlet dhisMIDlet) {
86
 
                super(dhisMIDlet);
87
 
                this.namebasedMidlet = (NameBasedMIDlet) dhisMIDlet;
88
 
        }
89
 
 
90
 
        public void prepareView() {
91
 
                System.gc();
92
 
                this.getMainForm();
93
 
 
94
 
                // clear previous data
95
 
                mainForm.removeAll();
96
 
 
97
 
                Style labelStyle = new Style();
98
 
                labelStyle.setBgColor(0xcccccc);
99
 
 
100
 
                // show current programs
101
 
                if (patient.getEnrollmentPrograms() != null) {
102
 
                        Label currentProgramlbl = new Label("Active Programs");
103
 
                        currentProgramlbl.setUnselectedStyle(labelStyle);
104
 
                        currentProgramlbl.setSelectedStyle(labelStyle);
105
 
                        mainForm.addComponent(currentProgramlbl);
106
 
                        this.preparePrograms();
107
 
                }
108
 
 
109
 
                // show completed programs
110
 
                if (patient.getCompletedPrograms() != null) {
111
 
                        Label completedProgramlbl = new Label("Completed Programs");
112
 
                        completedProgramlbl.setUnselectedStyle(labelStyle);
113
 
                        completedProgramlbl.setSelectedStyle(labelStyle);
114
 
                        mainForm.addComponent(completedProgramlbl);
115
 
                        this.prepareCompletedPrograms();
116
 
                }
117
 
 
118
 
                Label lblDetail = new Label("Details");
119
 
                lblDetail.setUnselectedStyle(labelStyle);
120
 
                lblDetail.setSelectedStyle(labelStyle);
121
 
 
122
 
                TextArea org = new TextArea();
123
 
                if (patient.getOrganisationUnitName() == null) {
124
 
                        org.setText("Organisation Unit: empty");
125
 
                } else {
126
 
                        org.setText("Organisation Unit: "
127
 
                                        + patient.getOrganisationUnitName());
128
 
                }
129
 
                org.setEditable(false);
130
 
                org.setEnabled(false);
131
 
 
132
 
                mainForm.addComponent(lblDetail);
133
 
                mainForm.addComponent(org);
134
 
 
135
 
                for (int i = 0; i < patient.getPatientAttValues().size(); i++) {
136
 
                        PatientAttribute patientAttribute = (PatientAttribute) patient
137
 
                                        .getPatientAttValues().elementAt(i);
138
 
                        TextArea attributeTextare = new TextArea(patientAttribute.getName()
139
 
                                        + " :" + patientAttribute.getValue());
140
 
                        attributeTextare.setEditable(false);
141
 
                        attributeTextare.setEnabled(false);
142
 
                        mainForm.addComponent(attributeTextare);
143
 
                }
144
 
 
145
 
                // show enrollable programs
146
 
                Label lblEnrollmentProgram = new Label("Enroll In Program");
147
 
                lblEnrollmentProgram.setUnselectedStyle(labelStyle);
148
 
                lblEnrollmentProgram.setSelectedStyle(labelStyle);
149
 
                mainForm.addComponent(lblEnrollmentProgram);
150
 
                this.prepareEnrollmentPrograms();
151
 
 
152
 
                // show relationship
153
 
                if (patient.getRelationships() != null) {
154
 
                        Label relationshiplbl = new Label("Relationships");
155
 
                        relationshiplbl.setUnselectedStyle(labelStyle);
156
 
                        relationshiplbl.setSelectedStyle(labelStyle);
157
 
                        mainForm.addComponent(relationshiplbl);
158
 
                        this.prepareRelationships();
159
 
                }
160
 
 
161
 
                // show enrollment relationship
162
 
                Label lblEnrollmentRelationship = new Label("Add Relative");
163
 
                lblEnrollmentRelationship.setUnselectedStyle(labelStyle);
164
 
                lblEnrollmentRelationship.setSelectedStyle(labelStyle);
165
 
                mainForm.addComponent(lblEnrollmentRelationship);
166
 
                this.prepareEnrollmentRelationships();
167
 
 
168
 
                // Add new
169
 
 
170
 
        }
171
 
 
172
 
        public void showView() {
173
 
                this.prepareView();
174
 
                this.getMainForm().show();
175
 
        }
176
 
 
177
 
        public void actionPerformed(ActionEvent ae) {
178
 
                if (ae.getCommand().getCommandName().equals(Text.BACK())) {
179
 
                        mainForm = null;
180
 
                        backCommand = null;
181
 
                        try {
182
 
                                PatientRecordStore.savePatient(patient);
183
 
                        } catch (Exception e) {
184
 
                                LogMan.log("UI," + CLASS_TAG, e);
185
 
                                e.printStackTrace();
186
 
                        }
187
 
                        patient = null;
188
 
                        System.gc();
189
 
 
190
 
                        if (previousScreen == namebasedMidlet.HISTORY_PERSON_LIST_VIEW) {
191
 
                                ModelList modelList;
192
 
                                try {
193
 
                                        modelList = PatientRecordStore.getCurrentPatients();
194
 
                                        namebasedMidlet.getHistoryPersonListView().setModelList(
195
 
                                                        modelList);
196
 
                                        namebasedMidlet.getHistoryPersonListView().showView();
197
 
                                } catch (Exception e) {
198
 
                                        LogMan.log("UI," + CLASS_TAG, e);
199
 
                                        e.printStackTrace();
200
 
                                }
201
 
                        } else if (previousScreen == namebasedMidlet.VISIT_SCHEDULE_VIEW) {
202
 
                                namebasedMidlet.getVisitScheduleMenuView()
203
 
                                                .setProgram(vsProgram);
204
 
                                namebasedMidlet.getVisitScheduleMenuView().showView();
205
 
                        } else {
206
 
                                namebasedMidlet
207
 
                                                .getFindBeneficiaryView()
208
 
                                                .getMainForm()
209
 
                                                .removeComponent(
210
 
                                                                namebasedMidlet.getFindBeneficiaryView()
211
 
                                                                                .getNotification());
212
 
                                namebasedMidlet.getFindBeneficiaryView().showView();
213
 
                        }
214
 
                }
215
 
        }
216
 
 
217
 
        public int getPreviousScreen() {
218
 
                return previousScreen;
219
 
        }
220
 
 
221
 
        public void setPreviousScreen(int previousScreen) {
222
 
                this.previousScreen = previousScreen;
223
 
        }
224
 
 
225
 
        public Form getMainForm() {
226
 
                if (mainForm == null) {
227
 
                        mainForm = new Form("Dashboard");
228
 
                        mainForm.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
229
 
                        mainForm.setScrollableY(true);
230
 
                        mainForm.setTransitionOutAnimator(CommonTransitions.createSlide(
231
 
                                        CommonTransitions.SLIDE_HORIZONTAL, true, 200));
232
 
 
233
 
                        mainForm.addCommand(this.getBackCommand());
234
 
                        mainForm.addCommandListener(this);
235
 
                }
236
 
                return mainForm;
237
 
 
238
 
        }
239
 
 
240
 
        public void setMainForm(Form mainForm) {
241
 
                this.mainForm = mainForm;
242
 
        }
243
 
 
244
 
        public Command getBackCommand() {
245
 
                if (backCommand == null) {
246
 
                        backCommand = new Command(Text.BACK());
247
 
                }
248
 
                return backCommand;
249
 
        }
250
 
 
251
 
        public void setBackCommand(Command backCommand) {
252
 
                this.backCommand = backCommand;
253
 
        }
254
 
 
255
 
        public void preparePrograms() {
256
 
                Vector programs = patient.getEnrollmentPrograms();
257
 
 
258
 
                if (programs != null) {
259
 
                        for (int i = 0; i < programs.size(); i++) {
260
 
                                final ProgramInstance programInstance = (ProgramInstance) programs
261
 
                                                .elementAt(i);
262
 
 
263
 
                                if (programInstance.getProgramStageInstances().size() > 1) {
264
 
                                        LinkButton programLink = new LinkButton(
265
 
                                                        programInstance.getName());
266
 
 
267
 
                                        programLink.addActionListener(new ActionListener() {
268
 
                                                public void actionPerformed(ActionEvent ae) {
269
 
                                                        namebasedMidlet.getProgramStageListView()
270
 
                                                                        .setPatient(patient);
271
 
                                                        namebasedMidlet.getProgramStageListView()
272
 
                                                                        .setProgramInstance(programInstance);
273
 
                                                        namebasedMidlet.getProgramStageListView()
274
 
                                                                        .showView();
275
 
                                                }
276
 
                                        });
277
 
 
278
 
                                        mainForm.addComponent(programLink);
279
 
 
280
 
                                        // show uncompleted program stage
281
 
                                        for (int j = 0; j < programInstance
282
 
                                                        .getProgramStageInstances().size(); j++) {
283
 
                                                final ProgramStage programStage = (ProgramStage) programInstance
284
 
                                                                .getProgramStageInstances().elementAt(j);
285
 
                                                if (programStage.isCompleted() == false) {
286
 
                                                        String label = programStage.getName();
287
 
                                                        if (programStage.getDueDate() != null
288
 
                                                                        && !programStage.getDueDate().equals("")) {
289
 
                                                                label += " (" + programStage.getDueDate() + ")";
290
 
                                                        }
291
 
                                                        LinkButton programStageLink = new LinkButton("--"
292
 
                                                                        + label);
293
 
                                                        programStageLink
294
 
                                                                        .addActionListener(new ActionListener() {
295
 
                                                                                public void actionPerformed(
296
 
                                                                                                ActionEvent arg) {
297
 
                                                                                        if (programStage.getSections()
298
 
                                                                                                        .size() > 0) {
299
 
                                                                                                namebasedMidlet
300
 
                                                                                                                .getSectionListView()
301
 
                                                                                                                .setPatient(patient);
302
 
                                                                                                namebasedMidlet
303
 
                                                                                                                .getSectionListView()
304
 
                                                                                                                .setProgramStage(
305
 
                                                                                                                                programStage);
306
 
                                                                                                namebasedMidlet
307
 
                                                                                                                .getSectionListView()
308
 
                                                                                                                .showView();
309
 
                                                                                        } else {
310
 
                                                                                                namebasedMidlet
311
 
                                                                                                                .getTrackingDataEntryView()
312
 
                                                                                                                .setPatient(patient);
313
 
                                                                                                namebasedMidlet
314
 
                                                                                                                .getTrackingDataEntryView()
315
 
                                                                                                                .setProgramStage(
316
 
                                                                                                                                programStage);
317
 
                                                                                                namebasedMidlet
318
 
                                                                                                                .getTrackingDataEntryView()
319
 
                                                                                                                .setTitle(
320
 
                                                                                                                                programStage
321
 
                                                                                                                                                .getName());
322
 
                                                                                                namebasedMidlet
323
 
                                                                                                                .getTrackingDataEntryView()
324
 
                                                                                                                .showView();
325
 
                                                                                        }
326
 
                                                                                }
327
 
                                                                        });
328
 
                                                        mainForm.addComponent(programStageLink);
329
 
                                                        break;
330
 
                                                }
331
 
                                        }
332
 
                                }
333
 
                                // show program has only one program stage which is repeatable
334
 
                                else if (programInstance.getProgramStageInstances().size() == 1) {
335
 
                                        // Single event
336
 
                                        final ProgramStage programStageSingle = (ProgramStage) programInstance
337
 
                                                        .getProgramStageInstances().elementAt(0);
338
 
                                        LinkButton programLink = new LinkButton(
339
 
                                                        programInstance.getName());
340
 
                                        programLink.addActionListener(new ActionListener() {
341
 
                                                public void actionPerformed(ActionEvent ae) {
342
 
                                                        namebasedMidlet.getTrackingDataEntryView()
343
 
                                                                        .setPatient(patient);
344
 
                                                        namebasedMidlet.getTrackingDataEntryView()
345
 
                                                                        .setProgramStage(programStageSingle);
346
 
                                                        namebasedMidlet.getTrackingDataEntryView()
347
 
                                                                        .setTitle(programStageSingle.getName());
348
 
                                                        namebasedMidlet.getTrackingDataEntryView()
349
 
                                                                        .showView();
350
 
                                                }
351
 
                                        });
352
 
 
353
 
                                        mainForm.addComponent(programLink);
354
 
                                        final ProgramStage programStage = (ProgramStage) programInstance
355
 
                                                        .getProgramStageInstances().elementAt(0);
356
 
                                        if (programStage.isRepeatable()) {
357
 
                                                LinkButton programStageLink = new LinkButton("--"
358
 
                                                                + programStage.getName());
359
 
                                                programStageLink
360
 
                                                                .addActionListener(new ActionListener() {
361
 
                                                                        public void actionPerformed(ActionEvent arg) {
362
 
                                                                                namebasedMidlet
363
 
                                                                                                .getTrackingDataEntryView()
364
 
                                                                                                .setPatient(patient);
365
 
                                                                                namebasedMidlet
366
 
                                                                                                .getTrackingDataEntryView()
367
 
                                                                                                .setProgramStage(programStage);
368
 
                                                                                namebasedMidlet
369
 
                                                                                                .getTrackingDataEntryView()
370
 
                                                                                                .showView();
371
 
                                                                        }
372
 
                                                                });
373
 
                                                mainForm.addComponent(programStageLink);
374
 
                                        }
375
 
                                }
376
 
                                System.gc();
377
 
                        }
378
 
                }
379
 
                programs = null;
380
 
                System.gc();
381
 
        }
382
 
 
383
 
        public void prepareEnrollmentPrograms() {
384
 
                Vector programs = null;
385
 
 
386
 
                try {
387
 
                        programs = ProgramRecordStore.getEnrollablePrograms(patient);
388
 
                } catch (Exception e) {
389
 
                        LogMan.log("UI," + CLASS_TAG, e);
390
 
                        e.printStackTrace();
391
 
                }
392
 
                for (int i = 0; i < programs.size(); i++) {
393
 
                        final Program program = (Program) programs.elementAt(i);
394
 
 
395
 
                        if (program.getType() != 3) {
396
 
 
397
 
                                LinkButton enrollmentProgramLink = new LinkButton(
398
 
                                                program.getName());
399
 
 
400
 
                                enrollmentProgramLink.addActionListener(new ActionListener() {
401
 
                                        public void actionPerformed(ActionEvent arg) {
402
 
                                                confirmDialog = new Dialog();
403
 
                                                confirmDialog.setTitle("Confirmation");
404
 
                                                Button yButton = new Button(Text.YES());
405
 
                                                Button nButton = new Button(Text.NO());
406
 
                                                Label label = new Label(
407
 
                                                                "Do you want to enroll in this program?");
408
 
 
409
 
                                                yButton.addActionListener(new ActionListener() {
410
 
 
411
 
                                                        public void actionPerformed(ActionEvent ae) {
412
 
                                                                ConnectionManager.setUrl(namebasedMidlet
413
 
                                                                                .getCurrentOrgUnit()
414
 
                                                                                .getEnrollProgramUrl());
415
 
 
416
 
                                                                ConnectionManager.enrollProgram(
417
 
                                                                                patient.getId(), program.getId(),
418
 
                                                                                program.getName());
419
 
                                                        }
420
 
                                                });
421
 
 
422
 
                                                nButton.addActionListener(new ActionListener() {
423
 
 
424
 
                                                        public void actionPerformed(ActionEvent ae) {
425
 
                                                                confirmDialog = (Dialog) Display.getInstance()
426
 
                                                                                .getCurrent();
427
 
                                                                confirmDialog.dispose();
428
 
                                                                confirmDialog = null;
429
 
                                                                System.gc();
430
 
 
431
 
                                                        }
432
 
                                                });
433
 
                                                confirmDialog.addComponent(label);
434
 
                                                confirmDialog.addComponent(yButton);
435
 
                                                confirmDialog.addComponent(nButton);
436
 
 
437
 
                                                confirmDialog.show();
438
 
                                        }
439
 
                                });
440
 
 
441
 
                                mainForm.addComponent(enrollmentProgramLink);
442
 
                        }
443
 
                }
444
 
 
445
 
        }
446
 
 
447
 
        public void prepareRelationships() {
448
 
                if (patient.getRelationships() != null) {
449
 
                        for (int i = 0; i < patient.getRelationships().size(); i++) {
450
 
                                final Relationship relationship = (Relationship) patient
451
 
                                                .getRelationships().elementAt(i);
452
 
 
453
 
                                LinkButton relationshipLink = new LinkButton(
454
 
                                                relationship.getbIsToA() + ": "
455
 
                                                                + relationship.getPersonBName());
456
 
 
457
 
                                relationshipLink.addActionListener(new ActionListener() {
458
 
                                        public void actionPerformed(ActionEvent arg) {
459
 
                                                mainForm = null;
460
 
                                                backCommand = null;
461
 
                                                patient = null;
462
 
                                                namebasedMidlet.getWaitingView().showView();
463
 
                                                ConnectionManager.setUrl(namebasedMidlet
464
 
                                                                .getCurrentOrgUnit().getFindPatientUrl());
465
 
                                                ConnectionManager.getPatientById(
466
 
                                                                relationship.getPersonBId() + "",
467
 
                                                                previousScreen, null);
468
 
                                        }
469
 
                                });
470
 
 
471
 
                                mainForm.addComponent(relationshipLink);
472
 
                        }
473
 
                }
474
 
        }
475
 
 
476
 
        public void prepareEnrollmentRelationships() {
477
 
                Vector relTypes = null;
478
 
                try {
479
 
                        relTypes = RelationshipTypeRecordStore.loadAllRelationshipType();
480
 
                } catch (Exception e) {
481
 
                        LogMan.log("UI," + CLASS_TAG, e);
482
 
                        e.printStackTrace();
483
 
                }
484
 
                if (relTypes == null || relTypes.size() > 0) {
485
 
                        for (int i = 0; i < relTypes.size(); i++) {
486
 
                                final RelationshipType relType = (RelationshipType) relTypes
487
 
                                                .elementAt(i);
488
 
 
489
 
                                final Relationship enrollmentRelationship = new Relationship();
490
 
                                enrollmentRelationship.setaIsToB(relType.getAIsToB());
491
 
                                enrollmentRelationship.setbIsToA(relType.getBIsToA());
492
 
                                enrollmentRelationship.setId(relType.getId());
493
 
                                enrollmentRelationship.setName(relType.getName());
494
 
 
495
 
                                LinkButton enrollmentRelationshipLink = new LinkButton(
496
 
                                                enrollmentRelationship.getName());
497
 
                                enrollmentRelationshipLink
498
 
                                                .addActionListener(new ActionListener() {
499
 
                                                        public void actionPerformed(ActionEvent ae) {
500
 
                                                                enrollmentRelationship.setPersonAId(patient
501
 
                                                                                .getId());
502
 
                                                                enrollmentRelationship.setPersonAName(patient
503
 
                                                                                .getDisplayInListAttributeValues());
504
 
                                                                namebasedMidlet.getAddingRelationshipView()
505
 
                                                                                .setEnrollmentRelationship(
506
 
                                                                                                enrollmentRelationship);
507
 
                                                                namebasedMidlet.getAddingRelationshipView()
508
 
                                                                                .resetIndexes();
509
 
                                                                namebasedMidlet.getAddingRelationshipView()
510
 
                                                                                .showView();
511
 
                                                        }
512
 
                                                });
513
 
                                mainForm.addComponent(enrollmentRelationshipLink);
514
 
                        }
515
 
                } else {
516
 
                        LinkButton relationshipLink = new LinkButton("Not Available");
517
 
                        mainForm.addComponent(relationshipLink);
518
 
                }
519
 
        }
520
 
 
521
 
        public void prepareCompletedPrograms() {
522
 
                Vector completedPrograms = patient.getCompletedPrograms();
523
 
                for (int i = 0; i < completedPrograms.size(); i++) {
524
 
                        TextArea completedProgramNameTxt = new TextArea(
525
 
                                        ((ProgramInstance) completedPrograms.elementAt(i))
526
 
                                                        .getName());
527
 
                        completedProgramNameTxt.setEditable(false);
528
 
                        completedProgramNameTxt.setEnabled(false);
529
 
                        mainForm.addComponent(completedProgramNameTxt);
530
 
                }
531
 
        }
532
 
 
533
 
        public Patient getPatient() {
534
 
                return patient;
535
 
        }
536
 
 
537
 
        public void setPatient(Patient patient) {
538
 
                this.patient = patient;
539
 
        }
540
 
 
541
 
        public Program getVSProgram() {
542
 
                return vsProgram;
543
 
        }
544
 
 
545
 
        public void setVSProgram(Program vsProgram) {
546
 
                this.vsProgram = vsProgram;
547
 
        }
 
82
    private Form mainForm;
 
83
 
 
84
    private Command backCommand;
 
85
 
 
86
    private Patient patient;
 
87
 
 
88
    private Program vsProgram;
 
89
 
 
90
    private int previousScreen;
 
91
 
 
92
    private Dialog confirmDialog;
 
93
 
 
94
    public PersonDashboardView( DHISMIDlet dhisMIDlet )
 
95
    {
 
96
        super( dhisMIDlet );
 
97
        this.namebasedMidlet = (NameBasedMIDlet) dhisMIDlet;
 
98
    }
 
99
 
 
100
    public void prepareView()
 
101
    {
 
102
        System.gc();
 
103
        this.getMainForm();
 
104
 
 
105
        // clear previous data
 
106
        mainForm.removeAll();
 
107
 
 
108
        Style labelStyle = new Style();
 
109
        labelStyle.setBgColor( 0xcccccc );
 
110
 
 
111
        // show current programs
 
112
        if ( patient.getEnrollmentPrograms() != null )
 
113
        {
 
114
            Label currentProgramlbl = new Label( "Active Programs" );
 
115
            currentProgramlbl.setUnselectedStyle( labelStyle );
 
116
            currentProgramlbl.setSelectedStyle( labelStyle );
 
117
            mainForm.addComponent( currentProgramlbl );
 
118
            this.preparePrograms();
 
119
 
 
120
        }
 
121
 
 
122
        // show completed programs
 
123
        if ( patient.getCompletedPrograms() != null )
 
124
        {
 
125
            Label completedProgramlbl = new Label( "Completed Programs" );
 
126
            completedProgramlbl.setUnselectedStyle( labelStyle );
 
127
            completedProgramlbl.setSelectedStyle( labelStyle );
 
128
            mainForm.addComponent( completedProgramlbl );
 
129
            this.prepareCompletedPrograms();
 
130
        }
 
131
 
 
132
        Label lblDetail = new Label( "Details" );
 
133
        lblDetail.setUnselectedStyle( labelStyle );
 
134
        lblDetail.setSelectedStyle( labelStyle );
 
135
 
 
136
        TextArea org = new TextArea();
 
137
        if ( patient.getOrganisationUnitName() == null )
 
138
        {
 
139
            org.setText( "Organisation Unit: empty" );
 
140
        }
 
141
        else
 
142
        {
 
143
            org.setText( "Organisation Unit: " + patient.getOrganisationUnitName() );
 
144
        }
 
145
        org.setEditable( false );
 
146
        org.setEnabled( false );
 
147
 
 
148
        mainForm.addComponent( lblDetail );
 
149
        mainForm.addComponent( org );
 
150
 
 
151
        for ( int i = 0; i < patient.getPatientAttValues().size(); i++ )
 
152
        {
 
153
            PatientAttribute patientAttribute = (PatientAttribute) patient.getPatientAttValues().elementAt( i );
 
154
            TextArea attributeTextare = new TextArea( patientAttribute.getName() + " :" + patientAttribute.getValue() );
 
155
            attributeTextare.setEditable( false );
 
156
            attributeTextare.setEnabled( false );
 
157
            mainForm.addComponent( attributeTextare );
 
158
        }
 
159
 
 
160
        // show enrollable programs
 
161
        Label lblEnrollmentProgram = new Label( "Enroll In Program" );
 
162
        lblEnrollmentProgram.setUnselectedStyle( labelStyle );
 
163
        lblEnrollmentProgram.setSelectedStyle( labelStyle );
 
164
        mainForm.addComponent( lblEnrollmentProgram );
 
165
        this.prepareEnrollmentPrograms();
 
166
 
 
167
        // show relationship
 
168
        if ( patient.getRelationships() != null )
 
169
        {
 
170
            Label relationshiplbl = new Label( "Relationships" );
 
171
            relationshiplbl.setUnselectedStyle( labelStyle );
 
172
            relationshiplbl.setSelectedStyle( labelStyle );
 
173
            mainForm.addComponent( relationshiplbl );
 
174
            this.prepareRelationships();
 
175
        }
 
176
 
 
177
        // show enrollment relationship
 
178
        Label lblEnrollmentRelationship = new Label( "Add Relative" );
 
179
        lblEnrollmentRelationship.setUnselectedStyle( labelStyle );
 
180
        lblEnrollmentRelationship.setSelectedStyle( labelStyle );
 
181
        mainForm.addComponent( lblEnrollmentRelationship );
 
182
        this.prepareEnrollmentRelationships();
 
183
        try
 
184
        {
 
185
            this.prepareShortcutLinkToAddRelative();
 
186
        }
 
187
        catch ( Exception e )
 
188
        {
 
189
            e.printStackTrace();
 
190
        }
 
191
 
 
192
        // Add new
 
193
 
 
194
    }
 
195
 
 
196
    public void showView()
 
197
    {
 
198
        this.prepareView();
 
199
        this.getMainForm().show();
 
200
    }
 
201
 
 
202
    public void actionPerformed( ActionEvent ae )
 
203
    {
 
204
        if ( ae.getCommand().getCommandName().equals( Text.BACK() ) )
 
205
        {
 
206
            mainForm = null;
 
207
            backCommand = null;
 
208
            try
 
209
            {
 
210
                PatientRecordStore.savePatient( patient );
 
211
            }
 
212
            catch ( Exception e )
 
213
            {
 
214
                LogMan.log( "UI," + CLASS_TAG, e );
 
215
                e.printStackTrace();
 
216
            }
 
217
            patient = null;
 
218
            System.gc();
 
219
 
 
220
            if ( previousScreen == namebasedMidlet.HISTORY_PERSON_LIST_VIEW )
 
221
            {
 
222
                ModelList modelList;
 
223
                try
 
224
                {
 
225
                    modelList = PatientRecordStore.getCurrentPatients();
 
226
                    namebasedMidlet.getHistoryPersonListView().setModelList( modelList );
 
227
                    namebasedMidlet.getHistoryPersonListView().showView();
 
228
                }
 
229
                catch ( Exception e )
 
230
                {
 
231
                    LogMan.log( "UI," + CLASS_TAG, e );
 
232
                    e.printStackTrace();
 
233
                }
 
234
            }
 
235
            else if ( previousScreen == namebasedMidlet.VISIT_SCHEDULE_VIEW )
 
236
            {
 
237
                namebasedMidlet.getVisitScheduleMenuView().setProgram( vsProgram );
 
238
                namebasedMidlet.getVisitScheduleMenuView().showView();
 
239
            }
 
240
            else
 
241
            {
 
242
                namebasedMidlet.getFindBeneficiaryView().getMainForm()
 
243
                    .removeComponent( namebasedMidlet.getFindBeneficiaryView().getNotification() );
 
244
                namebasedMidlet.getFindBeneficiaryView().showView();
 
245
            }
 
246
        }
 
247
    }
 
248
 
 
249
    public int getPreviousScreen()
 
250
    {
 
251
        return previousScreen;
 
252
    }
 
253
 
 
254
    public void setPreviousScreen( int previousScreen )
 
255
    {
 
256
        this.previousScreen = previousScreen;
 
257
    }
 
258
 
 
259
    public Form getMainForm()
 
260
    {
 
261
        if ( mainForm == null )
 
262
        {
 
263
            mainForm = new Form( "Dashboard" );
 
264
            mainForm.setLayout( new BoxLayout( BoxLayout.Y_AXIS ) );
 
265
            mainForm.setScrollableY( true );
 
266
            mainForm.setTransitionOutAnimator( CommonTransitions.createSlide( CommonTransitions.SLIDE_HORIZONTAL, true,
 
267
                200 ) );
 
268
 
 
269
            mainForm.addCommand( this.getBackCommand() );
 
270
            mainForm.addCommandListener( this );
 
271
        }
 
272
        return mainForm;
 
273
 
 
274
    }
 
275
 
 
276
    public void setMainForm( Form mainForm )
 
277
    {
 
278
        this.mainForm = mainForm;
 
279
    }
 
280
 
 
281
    public Command getBackCommand()
 
282
    {
 
283
        if ( backCommand == null )
 
284
        {
 
285
            backCommand = new Command( Text.BACK() );
 
286
        }
 
287
        return backCommand;
 
288
    }
 
289
 
 
290
    public void setBackCommand( Command backCommand )
 
291
    {
 
292
        this.backCommand = backCommand;
 
293
    }
 
294
 
 
295
    public void preparePrograms()
 
296
    {
 
297
        Vector programs = patient.getEnrollmentPrograms();
 
298
 
 
299
        if ( programs != null )
 
300
        {
 
301
            for ( int i = 0; i < programs.size(); i++ )
 
302
            {
 
303
                final ProgramInstance programInstance = (ProgramInstance) programs.elementAt( i );
 
304
 
 
305
                if ( programInstance.getProgramStageInstances().size() > 1 )
 
306
                {
 
307
                    LinkButton programLink = new LinkButton( programInstance.getName() );
 
308
 
 
309
                    programLink.addActionListener( new ActionListener()
 
310
                    {
 
311
                        public void actionPerformed( ActionEvent ae )
 
312
                        {
 
313
                            namebasedMidlet.getProgramStageListView().setPatient( patient );
 
314
                            namebasedMidlet.getProgramStageListView().setProgramInstance( programInstance );
 
315
                            namebasedMidlet.getProgramStageListView().showView();
 
316
                        }
 
317
                    } );
 
318
 
 
319
                    mainForm.addComponent( programLink );
 
320
 
 
321
                    // show uncompleted program stage
 
322
                    for ( int j = 0; j < programInstance.getProgramStageInstances().size(); j++ )
 
323
                    {
 
324
                        final ProgramStage programStage = (ProgramStage) programInstance.getProgramStageInstances()
 
325
                            .elementAt( j );
 
326
                        if ( programStage.isCompleted() == false )
 
327
                        {
 
328
                            String label = programStage.getName();
 
329
                            if ( programStage.getDueDate() != null && !programStage.getDueDate().equals( "" ) )
 
330
                            {
 
331
                                label += " (" + programStage.getDueDate() + ")";
 
332
                            }
 
333
                            LinkButton programStageLink = new LinkButton( "--" + label );
 
334
                            programStageLink.addActionListener( new ActionListener()
 
335
                            {
 
336
                                public void actionPerformed( ActionEvent arg )
 
337
                                {
 
338
                                    if ( programStage.getSections().size() > 0 )
 
339
                                    {
 
340
                                        namebasedMidlet.getSectionListView().setPatient( patient );
 
341
                                        namebasedMidlet.getSectionListView().setProgramStage( programStage );
 
342
                                        namebasedMidlet.getSectionListView().showView();
 
343
                                    }
 
344
                                    else
 
345
                                    {
 
346
                                        namebasedMidlet.getTrackingDataEntryView().setPatient( patient );
 
347
                                        namebasedMidlet.getTrackingDataEntryView().setProgramStage( programStage );
 
348
                                        namebasedMidlet.getTrackingDataEntryView().setTitle( programStage.getName() );
 
349
                                        namebasedMidlet.getTrackingDataEntryView().showView();
 
350
                                    }
 
351
                                }
 
352
                            } );
 
353
                            mainForm.addComponent( programStageLink );
 
354
                            break;
 
355
                        }
 
356
                    }
 
357
                }
 
358
                // show program has only one program stage which is repeatable
 
359
                else if ( programInstance.getProgramStageInstances().size() == 1 )
 
360
                {
 
361
                    // Single event
 
362
                    final ProgramStage programStageSingle = (ProgramStage) programInstance.getProgramStageInstances()
 
363
                        .elementAt( 0 );
 
364
                    LinkButton programLink = new LinkButton( programInstance.getName() );
 
365
                    programLink.addActionListener( new ActionListener()
 
366
                    {
 
367
                        public void actionPerformed( ActionEvent ae )
 
368
                        {
 
369
                            namebasedMidlet.getTrackingDataEntryView().setPatient( patient );
 
370
                            namebasedMidlet.getTrackingDataEntryView().setProgramStage( programStageSingle );
 
371
                            namebasedMidlet.getTrackingDataEntryView().setTitle( programStageSingle.getName() );
 
372
                            namebasedMidlet.getTrackingDataEntryView().showView();
 
373
                        }
 
374
                    } );
 
375
 
 
376
                    mainForm.addComponent( programLink );
 
377
                    final ProgramStage programStage = (ProgramStage) programInstance.getProgramStageInstances()
 
378
                        .elementAt( 0 );
 
379
                    if ( programStage.isRepeatable() )
 
380
                    {
 
381
                        LinkButton programStageLink = new LinkButton( "--" + programStage.getName() );
 
382
                        programStageLink.addActionListener( new ActionListener()
 
383
                        {
 
384
                            public void actionPerformed( ActionEvent arg )
 
385
                            {
 
386
                                namebasedMidlet.getTrackingDataEntryView().setPatient( patient );
 
387
                                namebasedMidlet.getTrackingDataEntryView().setProgramStage( programStage );
 
388
                                namebasedMidlet.getTrackingDataEntryView().showView();
 
389
                            }
 
390
                        } );
 
391
                        mainForm.addComponent( programStageLink );
 
392
                    }
 
393
                }
 
394
                System.gc();
 
395
            }
 
396
        }
 
397
        programs = null;
 
398
        System.gc();
 
399
    }
 
400
 
 
401
    public void prepareShortcutLinkToAddRelative()
 
402
        throws RecordStoreFullException, RecordStoreNotFoundException, RecordStoreException, IOException
 
403
    {
 
404
        Vector programs = patient.getEnrollmentPrograms();
 
405
 
 
406
        if ( programs != null )
 
407
        {
 
408
            for ( int i = 0; i < programs.size(); i++ )
 
409
            {
 
410
                final ProgramInstance programInstance = (ProgramInstance) programs.elementAt( i );
 
411
                final Program program = ProgramRecordStore.getProgram( programInstance.getProgramId() );
 
412
                final Program relativeProgram = ProgramRecordStore.getProgram( program.getRelatedProgramId() );
 
413
                LinkButton shortcutLink = new LinkButton( program.getRelationshipText() );
 
414
                shortcutLink.addActionListener( new ActionListener()
 
415
                {
 
416
 
 
417
                    public void actionPerformed( ActionEvent ae )
 
418
                    {
 
419
                        namebasedMidlet.getWaitingView().showView();
 
420
                        try
 
421
                        {
 
422
                           RelativeRelationshipRecordStore.deleteAll();
 
423
                           RelativeRelationshipRecordStore.saveId( String.valueOf( patient.getId() ) );
 
424
                            
 
425
                            if ( program.getType() != 3 )
 
426
                            {
 
427
                                ConnectionManager.setUrl( namebasedMidlet.getCurrentOrgUnit().getGetVariesInfoUrl() );
 
428
                                if(relativeProgram != null){
 
429
                                    namebasedMidlet.getAddRelativeView().setProgram( relativeProgram );
 
430
                                    namebasedMidlet.getAddRelativeView().prepareView();
 
431
                                    namebasedMidlet.getAddRelativeView().showView();
 
432
                                }
 
433
                                else{
 
434
                                    namebasedMidlet.getAddRelativeView().setProgram( program );
 
435
                                    namebasedMidlet.getAddRelativeView().prepareView();
 
436
                                    namebasedMidlet.getAddRelativeView().showView();
 
437
                                }
 
438
                                
 
439
 
 
440
                            }
 
441
 
 
442
                        }
 
443
                        catch ( Exception e )
 
444
                        {
 
445
                            e.printStackTrace();
 
446
                        }
 
447
 
 
448
                    }
 
449
                } );
 
450
 
 
451
                mainForm.addComponent( shortcutLink );
 
452
 
 
453
            }
 
454
 
 
455
            System.gc();
 
456
        }
 
457
 
 
458
        programs = null;
 
459
        System.gc();
 
460
 
 
461
    }
 
462
 
 
463
    public void prepareEnrollmentPrograms()
 
464
    {
 
465
        Vector programs = null;
 
466
 
 
467
        try
 
468
        {
 
469
            programs = ProgramRecordStore.getEnrollablePrograms( patient );
 
470
        }
 
471
        catch ( Exception e )
 
472
        {
 
473
            LogMan.log( "UI," + CLASS_TAG, e );
 
474
            e.printStackTrace();
 
475
        }
 
476
        for ( int i = 0; i < programs.size(); i++ )
 
477
        {
 
478
            final Program program = (Program) programs.elementAt( i );
 
479
 
 
480
            if ( program.getType() != 3 )
 
481
            {
 
482
 
 
483
                LinkButton enrollmentProgramLink = new LinkButton( program.getName() );
 
484
 
 
485
                enrollmentProgramLink.addActionListener( new ActionListener()
 
486
                {
 
487
                    public void actionPerformed( ActionEvent arg )
 
488
                    {
 
489
                        confirmDialog = new Dialog();
 
490
                        confirmDialog.setTitle( "Confirmation" );
 
491
                        Button yButton = new Button( Text.YES() );
 
492
                        Button nButton = new Button( Text.NO() );
 
493
                        Label label = new Label( "Do you want to enroll in this program?" );
 
494
 
 
495
                        yButton.addActionListener( new ActionListener()
 
496
                        {
 
497
 
 
498
                            public void actionPerformed( ActionEvent ae )
 
499
                            {
 
500
                                ConnectionManager.setUrl( namebasedMidlet.getCurrentOrgUnit().getEnrollProgramUrl() );
 
501
 
 
502
                                ConnectionManager.enrollProgram( patient.getId(), program.getId(), program.getName() );
 
503
                            }
 
504
                        } );
 
505
 
 
506
                        nButton.addActionListener( new ActionListener()
 
507
                        {
 
508
 
 
509
                            public void actionPerformed( ActionEvent ae )
 
510
                            {
 
511
                                confirmDialog = (Dialog) Display.getInstance().getCurrent();
 
512
                                confirmDialog.dispose();
 
513
                                confirmDialog = null;
 
514
                                System.gc();
 
515
 
 
516
                            }
 
517
                        } );
 
518
                        confirmDialog.addComponent( label );
 
519
                        confirmDialog.addComponent( yButton );
 
520
                        confirmDialog.addComponent( nButton );
 
521
 
 
522
                        confirmDialog.show();
 
523
                    }
 
524
                } );
 
525
 
 
526
                mainForm.addComponent( enrollmentProgramLink );
 
527
            }
 
528
        }
 
529
 
 
530
    }
 
531
 
 
532
    public void prepareRelationships()
 
533
    {
 
534
        if ( patient.getRelationships() != null )
 
535
        {
 
536
            for ( int i = 0; i < patient.getRelationships().size(); i++ )
 
537
            {
 
538
                final Relationship relationship = (Relationship) patient.getRelationships().elementAt( i );
 
539
 
 
540
                LinkButton relationshipLink = new LinkButton( relationship.getbIsToA() + ": "
 
541
                    + relationship.getPersonBName() );
 
542
 
 
543
                relationshipLink.addActionListener( new ActionListener()
 
544
                {
 
545
                    public void actionPerformed( ActionEvent arg )
 
546
                    {
 
547
                        mainForm = null;
 
548
                        backCommand = null;
 
549
                        patient = null;
 
550
                        namebasedMidlet.getWaitingView().showView();
 
551
                        ConnectionManager.setUrl( namebasedMidlet.getCurrentOrgUnit().getFindPatientUrl() );
 
552
                        ConnectionManager.getPatientById( relationship.getPersonBId() + "", previousScreen, null );
 
553
                    }
 
554
                } );
 
555
 
 
556
                mainForm.addComponent( relationshipLink );
 
557
            }
 
558
        }
 
559
    }
 
560
 
 
561
    public void prepareEnrollmentRelationships()
 
562
    {
 
563
        Vector relTypes = null;
 
564
        try
 
565
        {
 
566
            relTypes = RelationshipTypeRecordStore.loadAllRelationshipType();
 
567
 
 
568
        }
 
569
        catch ( Exception e )
 
570
        {
 
571
            LogMan.log( "UI," + CLASS_TAG, e );
 
572
            e.printStackTrace();
 
573
        }
 
574
        if ( relTypes == null || relTypes.size() > 0 )
 
575
        {
 
576
            for ( int i = 0; i < relTypes.size(); i++ )
 
577
            {
 
578
                final RelationshipType relType = (RelationshipType) relTypes.elementAt( i );
 
579
                final Relationship enrollmentRelationship = new Relationship();
 
580
                enrollmentRelationship.setaIsToB( relType.getAIsToB() );
 
581
                enrollmentRelationship.setbIsToA( relType.getBIsToA() );
 
582
                enrollmentRelationship.setId( relType.getId() );
 
583
                enrollmentRelationship.setName( relType.getName() );
 
584
 
 
585
                LinkButton enrollmentRelationshipLink = new LinkButton( enrollmentRelationship.getName() );
 
586
                enrollmentRelationshipLink.addActionListener( new ActionListener()
 
587
                {
 
588
                    public void actionPerformed( ActionEvent ae )
 
589
                    {
 
590
                        enrollmentRelationship.setPersonAId( patient.getId() );
 
591
                        enrollmentRelationship.setPersonAName( patient.getDisplayInListAttributeValues() );
 
592
                        namebasedMidlet.getAddingRelationshipView().setEnrollmentRelationship( enrollmentRelationship );
 
593
                        namebasedMidlet.getAddingRelationshipView().resetIndexes();
 
594
                        namebasedMidlet.getAddingRelationshipView().showView();
 
595
                    }
 
596
                } );
 
597
                mainForm.addComponent( enrollmentRelationshipLink );
 
598
            }
 
599
        }
 
600
        else
 
601
        {
 
602
            LinkButton relationshipLink = new LinkButton( "Not Available" );
 
603
            mainForm.addComponent( relationshipLink );
 
604
        }
 
605
    }
 
606
 
 
607
    public void prepareCompletedPrograms()
 
608
    {
 
609
        Vector completedPrograms = patient.getCompletedPrograms();
 
610
        for ( int i = 0; i < completedPrograms.size(); i++ )
 
611
        {
 
612
            TextArea completedProgramNameTxt = new TextArea(
 
613
                ((ProgramInstance) completedPrograms.elementAt( i )).getName() );
 
614
            completedProgramNameTxt.setEditable( false );
 
615
            completedProgramNameTxt.setEnabled( false );
 
616
            mainForm.addComponent( completedProgramNameTxt );
 
617
        }
 
618
    }
 
619
 
 
620
    public Patient getPatient()
 
621
    {
 
622
        return patient;
 
623
    }
 
624
 
 
625
    public void setPatient( Patient patient )
 
626
    {
 
627
        this.patient = patient;
 
628
    }
 
629
 
 
630
    public Program getVSProgram()
 
631
    {
 
632
        return vsProgram;
 
633
    }
 
634
 
 
635
    public void setVSProgram( Program vsProgram )
 
636
    {
 
637
        this.vsProgram = vsProgram;
 
638
    }
548
639
}