------------------------------------------------------------ revno: 17080 committer: Abyot Asalefew Gizaw <aby...@gmail.com> branch nick: dhis2 timestamp: Mon 2014-10-13 16:47:39 +0200 message: tracker capture now respects user defined calendar settings modified: dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry.html dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment.html dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/notes/notes-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration.html dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/relationship/relationship-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/overdue-events-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/program-summary-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/reportForm.html dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/upcoming-events-controller.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/index.html dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/app.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/styles/style.css
-- lp:dhis2 https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk Your team DHIS 2 developers is subscribed to branch lp:dhis2. To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js 2014-10-08 14:18:50 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry-controller.js 2014-10-13 14:47:39 +0000 @@ -1,6 +1,5 @@ trackerCapture.controller('DataEntryController', function($scope, - $filter, DateUtils, EventUtils, orderByFilter, @@ -25,9 +24,7 @@ if(loginDetails){ storedBy = loginDetails.userCredentials.username; } - var today = moment(); - today = Date.parse(today); - today = $filter('date')(today, 'yyyy-MM-dd'); + var today = DateUtils.getToday(); $scope.invalidDate = false; //note @@ -83,30 +80,35 @@ $scope.getEvents = function(){ $scope.dhis2Events = ''; DHIS2EventFactory.getEventsByStatus($scope.selectedEntity.trackedEntityInstance, $scope.selectedOrgUnit.id, $scope.selectedProgram.id, 'ACTIVE').then(function(data){ - $scope.dhis2Events = data; + $scope.dhis2Events = data; if(angular.isObject($scope.dhis2Events)){ - angular.forEach($scope.dhis2Events, function(dhis2Event){ + angular.forEach($scope.dhis2Events, function(dhis2Event){ + if(dhis2Event.enrollment === $scope.selectedEnrollment.enrollment){ + + if(dhis2Event.notes){ + dhis2Event.notes = orderByFilter(dhis2Event.notes, '-storedDate'); + angular.forEach(dhis2Event.notes, function(note){ + note.storedDate = DateUtils.formatToHrsMins(note.storedDate); + }); + } - if(dhis2Event.enrollment === $scope.selectedEnrollment.enrollment){ var eventStage = $scope.selectedProgramWithStage[dhis2Event.programStage]; if(angular.isObject(eventStage)){ dhis2Event.name = eventStage.name; dhis2Event.reportDateDescription = eventStage.reportDateDescription; - dhis2Event.dueDate = DateUtils.format(dhis2Event.dueDate); + dhis2Event.dueDate = DateUtils.formatFromApiToUser(dhis2Event.dueDate); + dhis2Event.sortingDate = dhis2Event.dueDate; if(dhis2Event.eventDate){ - dhis2Event.eventDate = DateUtils.format(dhis2Event.eventDate); - dhis2Event.sortingDate = DateUtils.format(dhis2Event.eventDate); - } - else{ - dhis2Event.sortingDate = dhis2Event.dueDate; + dhis2Event.eventDate = DateUtils.formatFromApiToUser(dhis2Event.eventDate); + dhis2Event.sortingDate = dhis2Event.eventDate; } dhis2Event.statusColor = EventUtils.getEventStatusColor(dhis2Event); dhis2Event = EventUtils.setEventOrgUnitName(dhis2Event); } - } + } }); } @@ -120,7 +122,7 @@ if($scope.selectedEnrollment.status === 'ACTIVE'){ if(!angular.isObject(availableEvents)){ angular.forEach($scope.selectedProgram.programStages, function(programStage){ - var dummyEvent = EventUtils.createDummyEvent(programStage, $scope.selectedOrgUnit, $scope.selectedEnrollment); + var dummyEvent = EventUtils.createDummyEvent(availableEvents, programStage, $scope.selectedOrgUnit, $scope.selectedEnrollment); dummyEvents.push(dummyEvent); }); @@ -133,20 +135,40 @@ return dummyEvents; } else{ - for(var i=0; i<program.programStages.length; i++){ - var stageHasEvent = false; - for(var j=0; j<availableEvents.length && !program.programStages[i].repeatable && !stageHasEvent; j++){ - if(program.programStages[i].id === availableEvents[j].programStage){ - stageHasEvent = true; - } + var eventsPerStage = []; + angular.forEach(availableEvents, function(event){ + if(eventsPerStage[event.programStage]){ + eventsPerStage[event.programStage].push(event); } + else{ + eventsPerStage[event.programStage] = []; + eventsPerStage[event.programStage].push(event); + } + }); - if(!stageHasEvent){ + angular.forEach(program.programStages, function(stage){ + if(!eventsPerStage[stage.id]){ $scope.allowEventCreation = true; - var dummyEvent = EventUtils.createDummyEvent(program.programStages[i], $scope.selectedOrgUnit, $scope.selectedEnrollment); + var dummyEvent = EventUtils.createDummyEvent(availableEvents, stage, $scope.selectedOrgUnit, $scope.selectedEnrollment); dummyEvents.push(dummyEvent); } - } + else{ + if(stage.repeatable){ + var stageNeedsEvent = true; + for(var j=0; j<eventsPerStage[stage.id].length && stageNeedsEvent; j++){ + if(!eventsPerStage[stage.id][j].eventDate){ + stageNeedsEvent = false; + } + } + + if(stageNeedsEvent){ + $scope.allowEventCreation = true; + var dummyEvent = EventUtils.createDummyEvent(availableEvents, stage, $scope.selectedOrgUnit, $scope.selectedEnrollment); + dummyEvents.push(dummyEvent); + } + } + } + }); } } return dummyEvents; @@ -161,7 +183,7 @@ }; $scope.showDummyEventCreation = function(dummyEvent){ - + if(dummyEvent){ if($scope.currentDummyEvent == dummyEvent){ @@ -190,8 +212,8 @@ program: $scope.selectedProgram.id, programStage: $scope.currentDummyEvent.programStage, orgUnit: $scope.currentDummyEvent.orgUnit, - eventDate: $scope.currentDummyEvent.eventDate, - dueDate: $scope.currentDummyEvent.dueDate, + eventDate: DateUtils.formatFromUserToApi( $scope.currentDummyEvent.eventDate), + dueDate: DateUtils.formatFromUserToApi( $scope.currentDummyEvent.dueDate), status: 'SCHEDULE', notes: [], dataValues: [] @@ -228,7 +250,7 @@ }); }; - $scope.showDataEntry = function(event){ + $scope.showDataEntry = function(event){ //$scope.dueDateSaved = false; //$scope.eventDateSaved = false; @@ -269,19 +291,6 @@ $scope.getDataEntryForm = function(){ $scope.currentEvent.providedElsewhere = []; - - $scope.currentEvent.dueDate = DateUtils.format($scope.currentEvent.dueDate); - if($scope.currentEvent.eventDate){ - $scope.currentEvent.eventDate = DateUtils.format($scope.currentEvent.eventDate); - } - - if(!angular.isUndefined( $scope.currentEvent.notes)){ - $scope.currentEvent.notes = orderByFilter($scope.currentEvent.notes, '-storedDate'); - angular.forEach($scope.currentEvent.notes, function(note){ - note.storedDate = DateUtils.formatToHrsMins(note.storedDate); - }); - } - $scope.currentStage = $scope.selectedProgramWithStage[$scope.currentEvent.programStage]; @@ -303,11 +312,10 @@ angular.forEach($scope.currentEvent.dataValues, function(dataValue){ var val = dataValue.value; - if(val){ - var de = $scope.currentStage.programStageDataElements[dataValue.dataElement]; - if( de && de.type === 'int' && val){ + var de = $scope.currentStage.programStageDataElements[dataValue.dataElement]; + if(val){ + if( de && de.type === 'int'){ val = parseInt(val); - //dataValue.value = val; } } $scope.currentEvent[dataValue.dataElement] = val; @@ -392,49 +400,47 @@ }; $scope.saveEventDate = function(){ - + $scope.eventDateSaved = false; - if($scope.currentEvent.eventDate == ''){ - $scope.invalidDate = true; - return false; - } - else{ - var rawDate = angular.copy($scope.currentEvent.eventDate); - var convertedDate = DateUtils.format($scope.currentEvent.eventDate); - - if(rawDate !== convertedDate){ - $scope.invalidDate = true; - return false; - } - - var e = {event: $scope.currentEvent.event, - enrollment: $scope.currentEvent.enrollment, - dueDate: $scope.currentEvent.dueDate, - status: $scope.currentEvent.status == 'SCHEDULE' ? 'ACTIVE' : $scope.currentEvent.status, - program: $scope.currentEvent.program, - programStage: $scope.currentEvent.programStage, - orgUnit: $scope.currentEvent.orgUnit, - eventDate: $scope.currentEvent.eventDate, - trackedEntityInstance: $scope.currentEvent.trackedEntityInstance - }; - - DHIS2EventFactory.updateForEventDate(e).then(function(data){ - $scope.currentEvent.sortingDate = $scope.currentEvent.eventDate; - $scope.invalidDate = false; - $scope.eventDateSaved = true; - - var statusColor = EventUtils.getEventStatusColor($scope.currentEvent); - var continueLoop = true; - for(var i=0; i< $scope.dhis2Events.length && continueLoop; i++){ - if($scope.dhis2Events[i].event === $scope.currentEvent.event ){ - $scope.dhis2Events[i].statusColor = statusColor; - $scope.dhis2Events[i].status = e.status; - continueLoop = false; - } + if($scope.currentEvent.eventDate == ''){ + $scope.invalidDate = true; + return false; + } + + var rawDate = angular.copy($scope.currentEvent.eventDate); + var convertedDate = DateUtils.format($scope.currentEvent.eventDate); + + if(rawDate !== convertedDate){ + $scope.invalidDate = true; + return false; + } + + var e = {event: $scope.currentEvent.event, + enrollment: $scope.currentEvent.enrollment, + dueDate: DateUtils.formatFromUserToApi($scope.currentEvent.dueDate), + status: $scope.currentEvent.status == 'SCHEDULE' ? 'ACTIVE' : $scope.currentEvent.status, + program: $scope.currentEvent.program, + programStage: $scope.currentEvent.programStage, + orgUnit: $scope.currentEvent.orgUnit, + eventDate: DateUtils.formatFromUserToApi($scope.currentEvent.eventDate), + trackedEntityInstance: $scope.currentEvent.trackedEntityInstance + }; + + DHIS2EventFactory.updateForEventDate(e).then(function(data){ + $scope.currentEvent.sortingDate = $scope.currentEvent.eventDate; + $scope.invalidDate = false; + $scope.eventDateSaved = true; + + var statusColor = EventUtils.getEventStatusColor($scope.currentEvent); + var continueLoop = true; + for(var i=0; i< $scope.dhis2Events.length && continueLoop; i++){ + if($scope.dhis2Events[i].event === $scope.currentEvent.event ){ + $scope.dhis2Events[i].statusColor = statusColor; + $scope.dhis2Events[i].status = e.status; + continueLoop = false; } - }); - } - + } + }); }; $scope.saveDueDate = function(){ @@ -444,40 +450,40 @@ $scope.invalidDate = true; return false; } - else{ - var rawDate = angular.copy($scope.currentEvent.dueDate); - var convertedDate = DateUtils.format($scope.currentEvent.dueDate); - - if(rawDate !== convertedDate){ - $scope.invalidDate = true; - return false; - } - - var e = {event: $scope.currentEvent.event, - enrollment: $scope.currentEvent.enrollment, - dueDate: $scope.currentEvent.dueDate, - status: $scope.currentEvent.status, - program: $scope.currentEvent.program, - programStage: $scope.currentEvent.programStage, - orgUnit: $scope.currentEvent.orgUnit, - trackedEntityInstance: $scope.currentEvent.trackedEntityInstance - }; - - DHIS2EventFactory.update(e).then(function(data){ - $scope.invalidDate = false; - $scope.dueDateSaved = true; - $scope.currentEvent.sortingDate = $scope.currentEvent.dueDate; - var statusColor = EventUtils.getEventStatusColor($scope.currentEvent); - var continueLoop = true; - for(var i=0; i< $scope.dhis2Events.length && continueLoop; i++){ - if($scope.dhis2Events[i].event === $scope.currentEvent.event ){ - $scope.dhis2Events[i].statusColor = statusColor; - continueLoop = false; - } + + var rawDate = angular.copy($scope.currentEvent.dueDate); + var convertedDate = DateUtils.format($scope.currentEvent.dueDate); + + if(rawDate !== convertedDate){ + $scope.invalidDate = true; + return false; + } + + var e = {event: $scope.currentEvent.event, + enrollment: $scope.currentEvent.enrollment, + dueDate: DateUtils.formatFromUserToApi($scope.currentEvent.dueDate), + status: $scope.currentEvent.status, + program: $scope.currentEvent.program, + programStage: $scope.currentEvent.programStage, + orgUnit: $scope.currentEvent.orgUnit, + trackedEntityInstance: $scope.currentEvent.trackedEntityInstance + }; + + DHIS2EventFactory.update(e).then(function(data){ + $scope.invalidDate = false; + $scope.dueDateSaved = true; + $scope.currentEvent.sortingDate = $scope.currentEvent.dueDate; + var statusColor = EventUtils.getEventStatusColor($scope.currentEvent); + var continueLoop = true; + for(var i=0; i< $scope.dhis2Events.length && continueLoop; i++){ + if($scope.dhis2Events[i].event === $scope.currentEvent.event ){ + $scope.dhis2Events[i].statusColor = statusColor; + continueLoop = false; } - $scope.schedulingEnabled = !$scope.schedulingEnabled; - }); - } + } + $scope.schedulingEnabled = !$scope.schedulingEnabled; + }); + }; $scope.addNote = function(){ @@ -485,10 +491,10 @@ var newNote = {value: $scope.note}; if(angular.isUndefined( $scope.currentEvent.notes) ){ - $scope.currentEvent.notes = [{value: $scope.note, storedDate: today, storedBy: storedBy}]; + $scope.currentEvent.notes = [{value: $scope.note, storedDate: DateUtils.formatFromUserToApi(today), storedBy: storedBy}]; } else{ - $scope.currentEvent.notes.splice(0,0,{value: $scope.note, storedDate: today, storedBy: storedBy}); + $scope.currentEvent.notes.splice(0,0,{value: $scope.note, storedDate: DateUtils.formatFromUserToApi(today), storedBy: storedBy}); } var e = {event: $scope.currentEvent.event, === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry.html' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry.html 2014-10-09 13:41:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/dataentry.html 2014-10-13 14:47:39 +0000 @@ -31,7 +31,7 @@ <table class="table-borderless"> <tbody> <tr> - <td class="inline-block" ng-repeat="dhis2Event in dhis2Events| orderBy:'sortingDate':reverse"> + <td class="inline-block" ng-repeat="dhis2Event in dhis2Events | orderBy:'sortingDate':reverse"> <span class="block align-center">{{dhis2Event.eventOrgUnitName}}</span> <span class="stage-container" ng-class="{'current-stage': currentEvent && currentEvent.event == dhis2Event.event, '{{dhis2Event.statusColor}}': true}" @@ -84,7 +84,7 @@ <button type="button" class="btn btn-default small-horizonal-spacing" ng-click="closeEventCreation()">{{'cancel'| translate}}</button> </div> </div> - </form> + </form> </div> <div ng-if="currentEvent && !showEventCreationDiv"> @@ -92,14 +92,13 @@ <div class="col-md-6"> {{currentEvent.reportDateDescription}} <input type="text" - name="eventDate" placeholder="{{dhis2CalendarFormat.keyDateFormat}}" class="form-control" ng-class="{'input-success': eventDateSaved}" ng-date ng-model="currentEvent.eventDate" ng-disabled="currentEvent.status === 'SKIPPED'" - ng-required="true" + ng-required="true" blur-or-change="saveEventDate()"/> <span ng-if="invalidDate" class="error">{{'date_required'| translate}}</span> </div> @@ -111,12 +110,11 @@ <a href ng-click="enableRescheduling()" title="{{ schedulingEnabled ? 'disable_rescheduling' : 'enable_rescheduling' | translate}}"><span class="text-primary bold">{{'due_date'| translate}}</span></a> </span> <input type="text" - name="dueDate" placeholder="{{dhis2CalendarFormat.keyDateFormat}}" class="form-control" ng-class="{'input-success': dueDateSaved}" ng-date - ng-model="currentEvent.dueDate" + ng-model="currentEvent.dueDate" blur-or-change="saveDueDate()" ng-disabled="currentEvent.eventDate || !schedulingEnabled"/> <span ng-if="invalidDate" class="error">{{'date_required'| translate}}</span> === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment-controller.js 2014-10-09 13:41:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment-controller.js 2014-10-13 14:47:39 +0000 @@ -17,7 +17,7 @@ DialogService) { TranslationService.translate(); - $scope.today = DateUtils.format(moment()); + $scope.today = DateUtils.getToday(); //listen for the selected items $scope.$on('selectedItems', function(event, args) { @@ -77,19 +77,12 @@ }); if($scope.selectedEnrollment){//enrollment exists - $scope.selectedEnrollment.dateOfIncident = DateUtils.format($scope.selectedEnrollment.dateOfIncident); - $scope.selectedEnrollment.dateOfEnrollment = DateUtils.format($scope.selectedEnrollment.dateOfEnrollment); - - $scope.programStages = []; - - var incidentDate = $scope.selectedEnrollment ? $scope.selectedEnrollment.dateOfIncident : new Date(); - - angular.forEach($scope.selectedProgram.programStages, function(stage){ - - stage.dueDate = DateUtils.format(incidentDate); - stage.dueDate = moment(moment(incidentDate).add('d', stage.minDaysFromStart))._d; - stage.dueDate = DateUtils.format(stage.dueDate); - }); + $scope.selectedEnrollment.dateOfIncident = DateUtils.formatFromApiToUser($scope.selectedEnrollment.dateOfIncident); + $scope.selectedEnrollment.dateOfEnrollment = DateUtils.formatFromApiToUser($scope.selectedEnrollment.dateOfEnrollment); + + /*angular.forEach($scope.selectedProgram.programStages, function(stage){ + stage.dueDate = EventUtils.getEventDueDate(stage, $scope.selectedEnrollment); + });*/ } else{//prepare for possible enrollment AttributesFactory.getByProgram($scope.selectedProgram).then(function(atts){ @@ -171,8 +164,8 @@ var enrollment = {trackedEntityInstance: tei.trackedEntityInstance, program: $scope.selectedProgram.id, status: 'ACTIVE', - dateOfEnrollment: $scope.newEnrollment.dateOfEnrollment, - dateOfIncident: $scope.newEnrollment.dateOfIncident ? $scope.newEnrollment.dateOfIncident : $scope.newEnrollment.dateOfEnrollment + dateOfEnrollment: DateUtils.formatFromUserToApi($scope.newEnrollment.dateOfEnrollment), + dateOfIncident: $scope.newEnrollment.dateOfIncident ? DateUtils.formatFromUserToApi($scope.newEnrollment.dateOfIncident) : DateUtils.formatFromUserToApi($scope.newEnrollment.dateOfEnrollment) }; TEIService.update(tei).then(function(updateResponse){ @@ -284,7 +277,7 @@ $scope.autoGenerateEvents = function(){ if($scope.selectedTei && $scope.selectedProgram && $scope.selectedOrgUnit && $scope.selectedEnrollment){ - $scope.dhis2Events = {events: []}; + var dhis2Events = {events: []}; angular.forEach($scope.selectedProgram.programStages, function(stage){ if(stage.autoGenerateEvent){ var newEvent = { @@ -292,15 +285,15 @@ program: $scope.selectedProgram.id, programStage: stage.id, orgUnit: $scope.selectedOrgUnit.id, - dueDate: EventUtils.getEventDueDate(stage, $scope.selectedEnrollment), + dueDate: DateUtils.formatFromUserToApi( EventUtils.getEventDueDate(dhis2Events.events, stage, $scope.selectedEnrollment) ), status: 'SCHEDULE' }; - $scope.dhis2Events.events.push(newEvent); + dhis2Events.events.push(newEvent); } }); - if($scope.dhis2Events.events.length > 0){ - DHIS2EventFactory.create($scope.dhis2Events).then(function(data) { + if(dhis2Events.events.length > 0){ + DHIS2EventFactory.create(dhis2Events).then(function(data) { }); } } === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment.html' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment.html 2014-10-09 13:41:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/enrollment/enrollment.html 2014-10-13 14:47:39 +0000 @@ -85,7 +85,7 @@ name="dateOfEnrollment" class="form-control" ng-date - max-date="selectedProgram.selectEnrollmentDatesInFuture ? '' : today" + max-date="selectedProgram.selectEnrollmentDatesInFuture ? '' : 0" ng-model="newEnrollment.dateOfEnrollment" ng-required="true"/> <span ng-show="outerForm.submitted && outerForm.dateOfEnrollment.$invalid" class="red">{{'required'| translate}}</span> @@ -100,7 +100,7 @@ placeholder="{{dhis2CalendarFormat.keyDateFormat}}" class="form-control" ng-date - max-date="selectedProgram.selectIncidentDatesInFuture ? '' : today" + max-date="selectedProgram.selectIncidentDatesInFuture ? '' : 0" ng-model="newEnrollment.dateOfIncident" max-date="today"/> </td> === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/notes/notes-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/notes/notes-controller.js 2014-09-18 14:53:56 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/notes/notes-controller.js 2014-10-13 14:47:39 +0000 @@ -16,7 +16,7 @@ storedBy = loginDetails.userCredentials.username; } - var today = DateUtils.format(moment()); + var today = DateUtils.getToday(); $scope.showMessagingDiv = false; $scope.showNotesDiv = true; @@ -66,11 +66,11 @@ var newNote = {value: $scope.note}; if(angular.isUndefined( $scope.selectedEnrollment.notes) ){ - $scope.selectedEnrollment.notes = [{value: $scope.note, storedDate: today, storedBy: storedBy}]; + $scope.selectedEnrollment.notes = [{value: $scope.note, storedDate: DateUtils.formatFromUserToApi(today), storedBy: storedBy}]; } else{ - $scope.selectedEnrollment.notes.splice(0,0,{value: $scope.note, storedDate: today, storedBy: storedBy}); + $scope.selectedEnrollment.notes.splice(0,0,{value: $scope.note, storedDate: DateUtils.formatFromUserToApi(today), storedBy: storedBy}); } var e = angular.copy($scope.selectedEnrollment); === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration-controller.js 2014-10-09 15:37:26 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration-controller.js 2014-10-13 14:47:39 +0000 @@ -18,10 +18,10 @@ //do translation of the registration page TranslationService.translate(); - $scope.today = DateUtils.format(moment()); + $scope.today = DateUtils.getToday(); $scope.selectedOrgUnit = storage.get('SELECTED_OU'); - $scope.enrollment = {enrollmentDate: '', incidentDate: ''}; + $scope.enrollment = {dateOfEnrollment: '', dateOfIncident: ''}; /*AttributesFactory.getWithoutProgram().then(function(atts){ $scope.attributes = atts; @@ -35,13 +35,6 @@ //watch for selection of program $scope.$watch('selectedProgram', function() { - /*if( angular.isObject($scope.selectedProgram)){ - $scope.trackedEntityList = []; - AttributesFactory.getByProgram($scope.selectedProgram).then(function(atts){ - $scope.attributes = atts; - }); - }*/ - $scope.getAttributes(); }); @@ -118,9 +111,10 @@ var enrollment = {trackedEntityInstance: teiId, program: $scope.selectedProgram.id, status: 'ACTIVE', - dateOfEnrollment: $scope.enrollment.enrollmentDate, - dateOfIncident: $scope.enrollment.incidentDate - }; + dateOfEnrollment: DateUtils.formatFromUserToApi($scope.enrollment.dateOfEnrollment), + dateOfIncident: $scope.enrollment.dateOfIncident == '' ? DateUtils.formatFromUserToApi($scope.enrollment.dateOfEnrollment) : DateUtils.formatFromUserToApi($scope.enrollment.dateOfIncident) + }; + console.log('enrollment details: ', enrollment); EnrollmentService.enroll(enrollment).then(function(data){ if(data.status !== 'SUCCESS'){ //enrollment has failed @@ -133,7 +127,7 @@ } else{ enrollment.enrollment = data.reference; - $scope.autoGenerateEvents(teiId,$scope.selectedProgram, $scope.selectedOrgUnit, enrollment); + $scope.autoGenerateEvents(teiId,$scope.selectedProgram, $scope.selectedOrgUnit, $scope.enrollment); } }); } @@ -154,8 +148,8 @@ delete attribute.value; }); - $scope.enrollment.enrollmentDate = ''; - $scope.enrollment.incidentDate = ''; + $scope.enrollment.dateOfEnrollment = ''; + $scope.enrollment.dateOfIncident = ''; $scope.outerForm.submitted = false; @@ -167,7 +161,7 @@ $scope.tei.trackedEntityInstance = teiId; $scope.broadCastSelections(); } - }, 100); + }, 100); }); }; @@ -182,7 +176,7 @@ }); $scope.tei.orgUnitName = $scope.selectedOrgUnit.name; - $scope.tei.created = DateUtils.format(new Date()); + $scope.tei.created = DateUtils.formatFromApiToUser(new Date()); CurrentSelection.setRelationshipInfo({tei: $scope.tei, src: $scope.selectedRelationshipSource}); $timeout(function() { $rootScope.$broadcast('relationship', {}); @@ -200,13 +194,16 @@ program: program.id, programStage: stage.id, orgUnit: orgUnit.id, - dueDate: EventUtils.getEventDueDate(stage, enrollment), + dueDate: DateUtils.formatFromUserToApi(EventUtils.getEventDueDate(null,stage, enrollment)), status: 'SCHEDULE' }; + console.log('enrollment details: ', enrollment); + console.log('the event due date is: ', EventUtils.getEventDueDate(null,stage, enrollment)); dhis2Events.events.push(newEvent); } }); + console.log('the events are: ', dhis2Events); if(dhis2Events.events.length > 0){ DHIS2EventFactory.create(dhis2Events).then(function(data){ === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration.html' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration.html 2014-10-09 15:37:26 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/registration/registration.html 2014-10-13 14:47:39 +0000 @@ -115,8 +115,9 @@ name="dateOfEnrollment" class="form-control" ng-date - ng-model="enrollment.enrollmentDate" - max-date="selectedProgram.selectEnrollmentDatesInFuture ? '' : today" + ng-model="enrollment.dateOfEnrollment" + max-date="selectedProgram.selectEnrollmentDatesInFuture ? '' : 0" + min-date="" ng-required="true"/> <span ng-show="outerForm.submitted && outerForm.dateOfEnrollment.$invalid" class="error">{{'required'| translate}}</span> </td> @@ -127,11 +128,13 @@ </td> <td> <input type="text" - placeholder="{{dhis2CalendarFormat.keyDateFormat}}" + placeholder="{{dhis2CalendarFormat.keyDateFormat}}" + name="dateOfIncident" class="form-control" ng-date - max-date="selectedProgram.selectIncidentDatesInFuture ? '' : today" - ng-model="enrollment.incidentDate"/> + max-date="selectedProgram.selectIncidentDatesInFuture ? '' : 0" + min-date="" + ng-model="enrollment.dateOfIncident"/> </td> </tr> </table> === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/relationship/relationship-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/relationship/relationship-controller.js 2014-10-01 09:56:40 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/relationship/relationship-controller.js 2014-10-13 14:47:39 +0000 @@ -458,8 +458,8 @@ var enrollment = {trackedEntityInstance: teiId, program: $scope.selectedProgramForRelative.id, status: 'ACTIVE', - dateOfEnrollment: $scope.enrollment.enrollmentDate, - dateOfIncident: $scope.enrollment.incidentDate + dateOfEnrollment: DateUtils.formatFromUserToApi($scope.enrollment.enrollmentDate), + dateOfIncident: $scope.enrollment.incidentDate == '' ? DateUtils.formatFromUserToApi($scope.enrollment.enrollmentDate) : DateUtils.formatFromUserToApi($scope.enrollment.incidentDate) }; EnrollmentService.enroll(enrollment).then(function(data){ if(data.status !== 'SUCCESS'){ @@ -513,7 +513,7 @@ }); $scope.tei.orgUnitName = $scope.selectedOrgUnit.name; - $scope.tei.created = DateUtils.format(new Date()); + $scope.tei.created = DateUtils.formatFromApiToUser(new Date()); CurrentSelection.setRelationshipInfo({tei: $scope.tei, src: $scope.selectedRelationshipSource}); === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/overdue-events-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/overdue-events-controller.js 2014-09-18 13:36:12 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/overdue-events-controller.js 2014-10-13 14:47:39 +0000 @@ -15,7 +15,7 @@ TranslationService.translate(); - $scope.today = DateUtils.format(moment()); + $scope.today = DateUtils.getToday(); $scope.selectedOuMode = 'SELECTED'; $scope.report = {}; @@ -110,7 +110,7 @@ overdueEvent[att.attribute] = att.value; }); - overdueEvent.dueDate = DateUtils.format(row.dueDate); + overdueEvent.dueDate = DateUtils.formatFromApiToUser(row.dueDate); overdueEvent.event = row.event; overdueEvent.eventName = row.eventName; overdueEvent.followup = row.followup; @@ -118,7 +118,7 @@ overdueEvent.programStage = row.programStage; overdueEvent.trackedEntityInstance = row.trackedEntityInstance; overdueEvent.orgUnitName = row.registrationOrgUnit; - overdueEvent.created = DateUtils.format(row.registrationDate);; + overdueEvent.created = DateUtils.formatFromApiToUser(row.registrationDate);; $scope.overdueEvents.push(overdueEvent); }); === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/program-summary-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/program-summary-controller.js 2014-10-01 15:19:59 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/program-summary-controller.js 2014-10-13 14:47:39 +0000 @@ -13,7 +13,7 @@ TranslationService.translate(); - $scope.today = DateUtils.format(moment()); + $scope.today = DateUtils.getToday(); $scope.ouModes = [{name: 'SELECTED'}, {name: 'CHILDREN'}, {name: 'DESCENDANTS'}, {name: 'ACCESSIBLE'}]; $scope.selectedOuMode = $scope.ouModes[0]; @@ -85,14 +85,18 @@ var teis = TEIGridService.format(data,true); $scope.teiList = []; - DHIS2EventFactory.getByOrgUnitAndProgram($scope.selectedOrgUnit.id, $scope.selectedOuMode.name, $scope.selectedProgram.id, report.startDate, report.endDate).then(function(eventList){ + DHIS2EventFactory.getByOrgUnitAndProgram($scope.selectedOrgUnit.id, + $scope.selectedOuMode.name, + $scope.selectedProgram.id, + DateUtils.formatFromUserToApi(report.startDate), + DateUtils.formatFromUserToApi(report.endDate)).then(function(eventList){ $scope.dhis2Events = []; angular.forEach(eventList, function(ev){ if(ev.trackedEntityInstance){ ev.name = $scope.programStages[ev.programStage].name; ev.programName = $scope.selectedProgram.name; ev.statusColor = EventUtils.getEventStatusColor(ev); - ev.eventDate = DateUtils.format(ev.eventDate); + ev.eventDate = DateUtils.formatFromApiToUser(ev.eventDate); if($scope.dhis2Events[ev.trackedEntityInstance]){ if(teis.rows[ev.trackedEntityInstance]){ === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/reportForm.html' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/reportForm.html 2014-10-09 15:37:26 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/reportForm.html 2014-10-13 14:47:39 +0000 @@ -38,12 +38,19 @@ class="form-control" ng-date ng-model="report.startDate" - max="today" + max="today" ng-required="true"/> <span ng-show="outerForm.submitted && outerForm.reportStartDate.$invalid" style="color:red;font-size:12px">{{'required'| translate}} ({{dhis2CalendarFormat.keyDateFormat}})</span> </td> <td> - <input type="text" name="reportEndDate" placeholder="{{'end_date'| translate}} ({{dhis2CalendarFormat.keyDateFormat}})" class="form-control" ng-date ng-model="report.endDate" max="today" ng-required="true"/> + <input type="text" + name="reportEndDate" + placeholder="{{'end_date'| translate}} ({{dhis2CalendarFormat.keyDateFormat}})" + class="form-control" + ng-date + ng-model="report.endDate" + max="today" + ng-required="true"/> <span ng-show="outerForm.submitted && outerForm.reportEndDate.$invalid" style="color:red;font-size:12px">{{'required'| translate}} ({{dhis2CalendarFormat.keyDateFormat}})</span> </td> </tr> === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js 2014-10-08 08:48:34 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js 2014-10-13 14:47:39 +0000 @@ -61,7 +61,7 @@ angular.forEach(eventList, function(ev){ if(ev.program){ ev.visited = true; - ev.dueDate = DateUtils.format(ev.dueDate); + ev.dueDate = DateUtils.formatFromApiToUser(ev.dueDate); ev.sortingDate = ev.dueDate; ev.name = $scope.programStageNames[ev.programStage].name; ev.programName = $scope.programNames[ev.program].name; @@ -104,7 +104,7 @@ $scope.selectedReport = $scope.report[pr.id]; //today as report date - $scope.today = DateUtils.format(moment()); + $scope.today = DateUtils.getToday(); //process tei attributes, this is to have consistent display so that the tei //contains program attributes whether it has value or not @@ -150,8 +150,8 @@ //get enrollment details EnrollmentService.get(enr).then(function(enrollment){ - enrollment.dateOfEnrollment = DateUtils.format(enrollment.dateOfEnrollment); - enrollment.dateOfIncident = DateUtils.format(enrollment.dateOfIncident); + enrollment.dateOfEnrollment = DateUtils.formatFromApiToUser(enrollment.dateOfEnrollment); + enrollment.dateOfIncident = DateUtils.formatFromApiToUser(enrollment.dateOfIncident); angular.forEach(enrollment.notes, function(note){ note.storedDate = DateUtils.formatToHrsMins(note.storedDate); }); === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/upcoming-events-controller.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/upcoming-events-controller.js 2014-09-18 14:53:56 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/upcoming-events-controller.js 2014-10-13 14:47:39 +0000 @@ -15,7 +15,7 @@ TranslationService.translate(); - $scope.today = DateUtils.format(moment()); + $scope.today = DateUtils.getToday(); $scope.selectedOuMode = 'SELECTED'; $scope.report = {}; @@ -85,7 +85,14 @@ $scope.reportStarted = true; $scope.upcomingEvents = []; - EventReportService.getEventReport($scope.selectedOrgUnit.id, $scope.selectedOuMode, $scope.selectedProgram.id, $scope.report.startDate, $scope.report.endDate, 'ACTIVE','SCHEDULE', $scope.pager).then(function(data){ + EventReportService.getEventReport($scope.selectedOrgUnit.id, + $scope.selectedOuMode, + $scope.selectedProgram.id, + DateUtils.formatFromUserToApi($scope.report.startDate), + DateUtils.formatFromUserToApi($scope.report.endDate), + 'ACTIVE', + 'SCHEDULE', + $scope.pager).then(function(data){ if( data.pager ){ $scope.pager = data.pager; @@ -103,7 +110,7 @@ upcomingEvent[att.attribute] = att.value; }); - upcomingEvent.dueDate = DateUtils.format(row.dueDate); + upcomingEvent.dueDate = DateUtils.formatFromApiToUser(row.dueDate); upcomingEvent.event = row.event; upcomingEvent.eventName = row.eventName; upcomingEvent.followup = row.followup; @@ -111,7 +118,7 @@ upcomingEvent.programStage = row.programStage; upcomingEvent.trackedEntityInstance = row.trackedEntityInstance; upcomingEvent.orgUnitName = row.registrationOrgUnit; - upcomingEvent.created = DateUtils.format(row.registrationDate);; + upcomingEvent.created = DateUtils.formatFromApiToUser(row.registrationDate);; $scope.upcomingEvents.push(upcomingEvent); }); === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/index.html' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/index.html 2014-10-09 13:41:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/index.html 2014-10-13 14:47:39 +0000 @@ -7,17 +7,31 @@ <meta name="keywords" content="DHIS 2"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - - <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.min.js"></script> + + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.min.js"></script> <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/ui/jquery-ui.min.js"></script> - <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.tmpl.js"></script> - <link rel="stylesheet" type="text/css" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui.css"> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.plugin.min.js"></script> + + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.picker.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.plus.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.picker.ext.js"></script> + + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.coptic.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.ethiopian.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.islamic.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.julian.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.nepali.min.js"></script> + <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/calendars/jquery.calendars.thai.min.js"></script> + <link type="text/css" rel="stylesheet" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui.css"> + <link type="text/css" rel="stylesheet" href="../dhis-web-commons/javascripts/jQuery/calendars/css/ui-redmond.calendars.picker.css"> + <script type="text/javascript" src="../dhis-web-commons/select2/select2.min.js"></script> <link type="text/css" rel="stylesheet" media="screen" href="../dhis-web-commons/select2/select2.css"> <script type="text/javascript" src="../dhis-web-commons/bootstrap/js/bootstrap.min.js"></script> - <link rel="stylesheet" type="text/css" href="../dhis-web-commons/bootstrap/css/bootstrap.min.css"> + <link type="text/css" rel="stylesheet" href="../dhis-web-commons/bootstrap/css/bootstrap.min.css"> <script type="text/javascript" src="../dhis-web-commons/javascripts/angular/angular.js"></script> <script type="text/javascript" src="../dhis-web-commons/javascripts/angular/angular-resource.js"></script> === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/app.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/app.js 2014-10-09 13:41:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/app.js 2014-10-13 14:47:39 +0000 @@ -54,10 +54,8 @@ $translateProvider.preferredLanguage('en'); }) -.run(function($rootScope, storage){ - $rootScope.dhis2CalendarFormat = {keyDateFormat: 'yyyy-MM-dd', keyCalendar: 'iso8601'}; - var storedFormat = storage.get('CALENDAR_SETTING'); - if(angular.isObject(storedFormat) && storedFormat.keyDateFormat && storedFormat.keyCalendar){ - $rootScope.dhis2CalendarFormat = storedFormat; - } +.run(function($rootScope){ + setTimeout(function () { + $rootScope.$apply(function () {}); + }, 1000); }); === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js 2014-10-09 15:37:26 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js 2014-10-13 14:47:39 +0000 @@ -60,7 +60,7 @@ $scope.loadPrograms($scope.selectedOrgUnit); } - }); + }); //watch for changes in ou mode - mode could be selected without notifcation to grid column generator $scope.$watch('selectedOuMode.name', function() { @@ -85,8 +85,8 @@ } //load programs associated with the selected org unit. - $scope.loadPrograms = function(orgUnit) { - + $scope.loadPrograms = function(orgUnit) { + $scope.selectedOrgUnit = orgUnit; if (angular.isObject($scope.selectedOrgUnit)) { === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js 2014-10-09 13:41:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js 2014-10-13 14:47:39 +0000 @@ -17,7 +17,7 @@ }; }) -.directive('selectedOrgUnit', function() { +.directive('selectedOrgUnit', function(storage) { return { restrict: 'A', link: function(scope, element, attrs){ @@ -69,8 +69,8 @@ selection.setListenerFunction( organisationUnitSelected ); selection.responseReceived(); - function organisationUnitSelected( orgUnits, orgUnitNames ) { - scope.selectedOrgUnit = {id: orgUnits[0], name: orgUnitNames[0]}; + function organisationUnitSelected( orgUnits, orgUnitNames ) { + scope.selectedOrgUnit = {id: orgUnits[0], name: orgUnitNames[0]}; scope.$apply(); } } @@ -185,14 +185,14 @@ }; }) -.directive('ngDate', function(DateUtils, $rootScope) { +/*.directive('ngDate', function(DateUtils, $rootScope) { return { restrict: 'A', require: 'ngModel', link: function(scope, element, attrs, ctrl) { var dateFormat = 'yy-mm-dd'; - if($rootScope.keyDateFormat === 'dd-MM-yyyy'){ + if($rootScope.dhis2CalendarFormat.keyDateFormat === 'dd-MM-yyyy'){ dateFormat = 'dd-mm-yy'; } element.datepicker({ @@ -228,12 +228,64 @@ }); } }; +})*/ + +.directive('ngDate', function(DateUtils, CalendarService, storage, $parse) { + return { + restrict: 'A', + require: 'ngModel', + link: function(scope, element, attrs, ctrl) { + + var calendarSetting = CalendarService.getSetting(); + var dateFormat = 'yyyy-mm-dd'; + if(calendarSetting.keyDateFormat === 'dd-MM-yyyy'){ + dateFormat = 'dd-mm-yyyy'; + } + + var minDate = $parse(attrs.minDate)(scope), + maxDate = $parse(attrs.maxDate)(scope), + calendar = $.calendars.instance(calendarSetting.keyCalendar); + + element.calendarsPicker({ + changeMonth: true, + dateFormat: dateFormat, + yearRange: '-120:+30', + minDate: minDate, + maxDate: maxDate, + calendar: calendar, + renderer: $.calendars.picker.themeRollerRenderer, + onSelect: function(date) { + //scope.date = date; + ctrl.$setViewValue(date); + $(this).change(); + scope.$apply(); + } + }) + .change(function() { + var rawDate = this.value; + var convertedDate = DateUtils.format(this.value); + + if(rawDate != convertedDate){ + scope.invalidDate = true; + ctrl.$setViewValue(this.value); + ctrl.$setValidity('foo', false); + scope.$apply(); + } + else{ + scope.invalidDate = false; + ctrl.$setViewValue(this.value); + ctrl.$setValidity('foo', true); + scope.$apply(); + } + }); + } + }; }) .directive('blurOrChange', function() { return function( scope, elem, attrs) { - elem.datepicker({ + elem.calendarsPicker({ onSelect: function() { scope.$apply(attrs.blurOrChange); $(this).change(); === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js 2014-10-09 15:37:26 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js 2014-10-13 14:47:39 +0000 @@ -66,7 +66,6 @@ }; }) - /* Factory to fetch programs */ .factory('ProgramFactory', function($q, $rootScope, StorageService) { return { @@ -429,7 +428,7 @@ StorageService.currentStore.getAll('attributes').done(function(attributes){ angular.forEach(attributes, function(att){ if(att.optionSet){ - StorageService.currentStore.get('optionSets', att.optionSet.id).done(function(optionSet){ + StorageService.currentStore.get('optionSets', att.optionSet.id).done(function(optionSet){ att.optionSet = optionSet; }); } @@ -1209,31 +1208,61 @@ }; }) -.service('DateUtils', function($filter, storage, $rootScope){ +.service('DateUtils', function($filter, CalendarService){ return { format: function(dateValue) { - dateValue = Date.parse(dateValue); - dateValue = $filter('date')(dateValue, $rootScope.dhis2CalendarFormat.keyDateFormat); + if(!dateValue){ + return; + } + var calendarSetting = CalendarService.getSetting(); + dateValue = $filter('date')(dateValue, calendarSetting.keyDateFormat); return dateValue; }, - formatToHrsMins: function(dateValue) { + formatToHrsMins: function(dateValue) { + var calendarSetting = CalendarService.getSetting(); var dateFormat = 'YYYY-MM-DD @ hh:mm A'; - if($rootScope.dhis2CalendarFormat.keyDateFormat === 'dd-MM-yyyy'){ + if(calendarSetting.keyDateFormat === 'dd-MM-yyyy'){ dateFormat = 'DD-MM-YYYY @ hh:mm A'; } return moment(dateValue).format(dateFormat); + }, + getToday: function(){ + var calendarSetting = CalendarService.getSetting(); + var tdy = $.calendars.instance(calendarSetting.keyCalendar).newDate(); + var today = moment(tdy._year + '-' + tdy._month + '-' + tdy._day, 'YYYY-MM-DD')._d; + today = Date.parse(today); + today = $filter('date')(today, calendarSetting.keyDateFormat); + return today; + }, + formatFromUserToApi: function(dateValue){ + if(!dateValue){ + return; + } + var calendarSetting = CalendarService.getSetting(); + dateValue = moment(dateValue, calendarSetting.momentFormat)._d; + dateValue = Date.parse(dateValue); + dateValue = $filter('date')(dateValue, 'yyyy-MM-dd'); + return dateValue; + }, + formatFromApiToUser: function(dateValue){ + if(!dateValue){ + return; + } + var calendarSetting = CalendarService.getSetting(); + dateValue = moment(dateValue, 'YYYY-MM-DD')._d; + dateValue = Date.parse(dateValue); + dateValue = $filter('date')(dateValue, calendarSetting.keyDateFormat); + return dateValue; } }; }) -.service('EventUtils', function(DateUtils, OrgUnitService){ +.service('EventUtils', function(DateUtils, CalendarService, OrgUnitService, $filter, orderByFilter){ return { - createDummyEvent: function(programStage, orgUnit, enrollment){ - - var today = DateUtils.format(moment()); - - var dueDate = this.getEventDueDate(programStage, enrollment); + createDummyEvent: function(events, programStage, orgUnit, enrollment){ + var today = DateUtils.getToday(); + var dueDate = this.getEventDueDate(events, programStage, enrollment); var dummyEvent = {programStage: programStage.id, orgUnit: orgUnit.id, orgUnitName: orgUnit.name, @@ -1249,8 +1278,8 @@ return dummyEvent; }, getEventStatusColor: function(dhis2Event){ - var today = DateUtils.format(moment()); - var eventDate = today; + var eventDate = DateUtils.getToday(); + var calendarSetting = CalendarService.getSetting(); if(dhis2Event.eventDate){ eventDate = dhis2Event.eventDate; @@ -1267,17 +1296,34 @@ return 'alert alert-info'; //'stage-executed'; } else{ - if(moment(eventDate).isAfter(dhis2Event.dueDate)){ + if(moment(eventDate, calendarSetting.momentFormat).isAfter(dhis2Event.dueDate)){ return 'alert alert-danger';//'stage-overdue'; } return 'alert alert-warning';//'stage-on-time'; } } }, - getEventDueDate: function(programStage, enrollment){ - //var dueDate = DateUtils.format(enrollment.dateOfIncident); - var dueDate = moment(enrollment.dateOfIncident).add('d', programStage.minDaysFromStart); - dueDate = DateUtils.format(dueDate); + getEventDueDate: function(events, programStage, enrollment){ + var referenceDate = enrollment.dateOfIncident ? enrollment.dateOfIncident : enrollment.dateOfEnrollment; + var offset = programStage.minDaysFromStart; + + if(programStage.repeatable){ + var eventsPerStage = []; + angular.forEach(events, function(event){ + if(event.programStage === programStage.id){ + eventsPerStage.push(event); + } + }); + + if(eventsPerStage.length > 0){ + eventsPerStage = orderByFilter(eventsPerStage, '-eventDate'); + referenceDate = eventsPerStage[0].eventDate; + offset = programStage.standardInterval; + } + } + var calendarSetting = CalendarService.getSetting(); + var dueDate = moment(referenceDate, calendarSetting.momentFormat).add('d', offset)._d; + dueDate = $filter('date')(dueDate, calendarSetting.keyDateFormat); return dueDate; }, getEventOrgUnitName: function(orgUnitId){ @@ -1328,4 +1374,30 @@ return e; } }; +}) + +/* service for getting calendar setting */ +.service('CalendarService', function(storage, $rootScope){ + + return { + getSetting: function() { + + var dhis2CalendarFormat = {keyDateFormat: 'yyyy-MM-dd', keyCalendar: 'gregorian', momentFormat: 'YYYY-MM-DD'}; + var storedFormat = storage.get('CALENDAR_SETTING'); + if(angular.isObject(storedFormat) && storedFormat.keyDateFormat && storedFormat.keyCalendar){ + if(storedFormat.keyCalendar === 'iso8601'){ + storedFormat.keyCalendar = 'gregorian'; + } + + if(storedFormat.keyDateFormat === 'dd-MM-yyyy'){ + dhis2CalendarFormat.momentFormat = 'DD-MM-YYYY'; + } + + dhis2CalendarFormat.keyCalendar = storedFormat.keyCalendar; + dhis2CalendarFormat.keyDateFormat = storedFormat.keyDateFormat; + } + $rootScope.dhis2CalendarFormat = dhis2CalendarFormat; + return dhis2CalendarFormat; + } + }; }); \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js 2014-10-09 13:41:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js 2014-10-13 14:47:39 +0000 @@ -20,6 +20,8 @@ var TRACKER_VALUES = 'TRACKER_VALUES'; +var optionSetsInPromise = []; + dhis2.tc.store = new dhis2.storage.Store({ name: TC_STORE_NAME, adapters: [dhis2.storage.IndexedDBAdapter, dhis2.storage.DomSessionStorageAdapter, dhis2.storage.InMemoryAdapter], @@ -277,7 +279,8 @@ var d = $.Deferred(); var p = d.promise(); dhis2.tc.store.get('optionSets', attribute.optionSet.id).done(function(obj) { - if(!obj || obj.version !== attribute.optionSet.version) { + if((!obj || obj.version !== attribute.optionSet.version) && !optionSetsInPromise[attribute.optionSet.id]) { + optionSetsInPromise[attribute.optionSet.id] = attribute.optionSet.id; promise = promise.then( getOptionSet( attribute.optionSet.id ) ); } d.resolve(); @@ -394,7 +397,7 @@ return $.ajax( { url: '../api/programs.json', type: 'GET', - data: 'paging=false&filter=id:eq:' + id +'&fields=id,name,version,dataEntryMethod,relationshipText,relationshipFromA,dateOfEnrollmentDescription,dateOfIncidentDescription,displayIncidentDate,ignoreOverdueEvents,realionshipText,relationshipFromA,selectEnrollmentDatesInFuture,selectIncidentDatesInFuture,onlyEnrollOnce,externalAccess,displayOnAllOrgunit,registration,trackedEntity[id,name,description],userRoles[id,name],organisationUnits[id,name],programStages[id,name,version,minDaysFromStart,reportDateDescription,repeatable,autoGenerateEvent],programTrackedEntityAttributes[displayInList,mandatory,trackedEntityAttribute[id]]' + data: 'paging=false&filter=id:eq:' + id +'&fields=id,name,version,dataEntryMethod,relationshipText,relationshipFromA,dateOfEnrollmentDescription,dateOfIncidentDescription,displayIncidentDate,ignoreOverdueEvents,realionshipText,relationshipFromA,selectEnrollmentDatesInFuture,selectIncidentDatesInFuture,onlyEnrollOnce,externalAccess,displayOnAllOrgunit,registration,trackedEntity[id,name,description],userRoles[id,name],organisationUnits[id,name],programStages[id,name,version,minDaysFromStart,standardInterval,reportDateDescription,repeatable,autoGenerateEvent],programTrackedEntityAttributes[displayInList,mandatory,trackedEntityAttribute[id]]' }).done( function( response ){ _.each( _.values( response.programs ), function ( program ) { @@ -471,7 +474,7 @@ return $.ajax( { url: '../api/programStages.json', type: 'GET', - data: 'filter=id:eq:' + id +'&fields=id,name,version,dataEntryForm,captureCoordinates,blockEntryForm,autoGenerateEvent,reportDateDescription,minDaysFromStart,repeatable,programStageDataElements[displayInReports,allowProvidedElsewhere,allowDateInFuture,compulsory,dataElement[id,name,formName,type,optionSet[id]]]' + data: 'filter=id:eq:' + id +'&fields=id,name,version,dataEntryForm,captureCoordinates,blockEntryForm,autoGenerateEvent,reportDateDescription,minDaysFromStart,standardInterval,repeatable,programStageDataElements[displayInReports,allowProvidedElsewhere,allowDateInFuture,compulsory,dataElement[id,name,formName,type,optionSet[id]]]' }).done( function( response ){ _.each( _.values( response.programStages ), function( programStage ) { dhis2.tc.store.set( 'programStages', programStage ); @@ -496,22 +499,25 @@ var build = builder.promise(); _.each( _.values( programs ), function ( program ) { - _.each(_.values( program.programStages[0].programStageDataElements), function(prStDe){ - if( prStDe.dataElement.optionSet && prStDe.dataElement.optionSet.id ){ - build = build.then(function() { - var d = $.Deferred(); - var p = d.promise(); - dhis2.tc.store.get('optionSets', prStDe.dataElement.optionSet.id).done(function(obj) { - if(!obj || obj.version !== prStDe.dataElement.optionSet.version) { - promise = promise.then( getOptionSet( prStDe.dataElement.optionSet.id ) ); - } - d.resolve(); + _.each(_.values( program.programStages), function( programStage) { + _.each(_.values( programStage.programStageDataElements), function(prStDe){ + if( prStDe.dataElement.optionSet && prStDe.dataElement.optionSet.id ){ + build = build.then(function() { + var d = $.Deferred(); + var p = d.promise(); + dhis2.tc.store.get('optionSets', prStDe.dataElement.optionSet.id).done(function(obj) { + if((!obj || obj.version !== prStDe.dataElement.optionSet.version) && !optionSetsInPromise[prStDe.dataElement.optionSet.id]) { + optionSetsInPromise[prStDe.dataElement.optionSet.id] = prStDe.dataElement.optionSet.id; + promise = promise.then( getOptionSet( prStDe.dataElement.optionSet.id ) ); + } + d.resolve(); + }); + + return p; }); - - return p; - }); - } - }); + } + }); + }); }); build.done(function() { === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/styles/style.css' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/styles/style.css 2014-10-03 08:25:10 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/styles/style.css 2014-10-13 14:47:39 +0000 @@ -796,6 +796,11 @@ cursor: pointer; } +.ui-datepicker-group .ui-datepicker-header { + //height: 1.5em; + height: inherit; //this is to make it play nice with bootstrap +} + @media print { #header, #leftBar, .not-printable { display: none;
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp