-
-
{{'required'| translate}}
+
-
=== 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 2015-03-16 14:15:34 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/report/tei-report-controller.js 2015-03-19 10:18:00 +0000
@@ -120,7 +120,7 @@
providedElsewhereExists = true;
$scope.allowProvidedElsewhereExists[st.id] = true;
}
- }
+ }
});
});
=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/i18n/i18n_app.properties'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/i18n/i18n_app.properties 2015-03-19 03:43:44 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/i18n/i18n_app.properties 2015-03-19 10:18:00 +0000
@@ -291,6 +291,7 @@
completed_enrollment=Only those with completed enrollment
filter_events=Filter events
list_events=List all events
+period=Period
jan=January
feb=February
mar=March
@@ -302,4 +303,5 @@
sep=September
oct=October
nov=November
-dec=December
\ No newline at end of file
+dec=December
+week=Week
\ No newline at end of file
=== 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 2015-03-05 15:48:50 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/index.html 2015-03-19 10:18:00 +0000
@@ -20,6 +20,7 @@
+
@@ -61,8 +62,7 @@
-
-
+
=== 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 2015-03-12 10:55:00 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js 2015-03-19 10:18:00 +0000
@@ -263,7 +263,7 @@
$scope.doSearch = true;
if(!$scope.sortColumn.id){
- $scope.sortGrid({id: 'created', name: $translate('registration_date'), valueType: 'date', displayInListNoProgram: false, showFilter: false, show: true});
+ $scope.sortGrid({id: 'created', name: $translate('registration_date'), valueType: 'date', displayInListNoProgram: false, showFilter: false, show: false});
}
});
};
=== 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 2015-03-16 14:14:10 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/services.js 2015-03-19 10:18:00 +0000
@@ -1,4 +1,4 @@
-/* global angular */
+/* global angular, moment, dhis2 */
'use strict';
@@ -51,52 +51,11 @@
})
/* current selections */
-.service('PeriodService', function($translate, CalendarService){
+.service('PeriodService', function($translate, $filter, DateUtils, CalendarService){
var calendarSetting = CalendarService.getSetting();
- var months = [
- $translate('jan'),
- $translate('feb'),
- $translate('mar'),
- $translate('apr'),
- $translate('may'),
- $translate('jun'),
- $translate('jul'),
- $translate('aug'),
- $translate('sep'),
- $translate('oct'),
- $translate('nov'),
- $translate('dec')
- ];
-
- this.getMonths = function(){
- return months;
- };
-
- this.getPeriods = function(events, stage){
- var periods = [];
- if(stage){
- angular.forEach(events, function(event){
- periods.push({event: event.event, name: event.sortingDate, stage: stage.id});
- });
- /*if(stage.standardInterval === 30){
- angular.forEach(events, function(event){
- var obj = {year: moment(event.sortingDate, calendarSetting.momentFormat).year(), month: moment(event.sortingDate, calendarSetting.momentFormat).month(), week: moment(event.sortingDate, calendarSetting.momentFormat).week(), day: moment(event.sortingDate, calendarSetting.momentFormat).day()};
- periods.push({event: event.event, name: months[obj.month] + ' ' + obj.year, stage: stage.id});
- });
- }
- else{
- angular.forEach(events, function(event){
- periods.push({event: event.event, name: event.sortingDate, stage: stage.id});
- });
- }*/
- }
-
- return periods;
- };
-
-
- this.splitDate = function(dateValue){
+
+ var splitDate = function(dateValue){
if(!dateValue){
return;
}
@@ -104,6 +63,53 @@
return {year: moment(dateValue, calendarSetting.momentFormat).year(), month: moment(dateValue, calendarSetting.momentFormat).month(), week: moment(dateValue, calendarSetting.momentFormat).week(), day: moment(dateValue, calendarSetting.momentFormat).day()};
};
+
+ this.getPeriods = function(events, stage, enrollment){
+
+ if(!stage){
+ return;
+ }
+
+ var referenceDate = enrollment.dateOfIncident ? enrollment.dateOfIncident : enrollment.dateOfEnrollment;
+ var offset = stage.minDaysFromStart;
+
+ if(stage.generatedByEnrollmentDate){
+ referenceDate = enrollment.dateOfEnrollment;
+ }
+
+ var occupiedPeriods = [];
+ var availablePeriods = [];
+ if(!stage.periodType){
+ angular.forEach(events, function(event){
+ occupiedPeriods.push({event: event.event, name: event.sortingDate, stage: stage.id});
+ });
+
+ }
+ else{
+
+ var startDate = DateUtils.format( moment(referenceDate, calendarSetting.momentFormat).add(offset, 'days') );
+ var periodOffet = splitDate(DateUtils.getToday()).year - splitDate(startDate).year;
+
+ //generate availablePeriods
+ var pt = new PeriodType();
+ var d2Periods = pt.get(stage.periodType).generatePeriods({offset: periodOffet, filterFuturePeriods: false, reversePeriods: false});
+ angular.forEach(d2Periods, function(p){
+ p.endDate = DateUtils.formatFromApiToUser(p.endDate);
+ p.startDate = DateUtils.formatFromApiToUser(p.startDate);
+ availablePeriods[p.endDate] = p;
+ });
+
+ //get occupied periods
+ angular.forEach(events, function(event){
+ var p = availablePeriods[event.sortingDate];
+ if(p){
+ occupiedPeriods.push({event: event.event, name: p.name, stage: stage.id, eventDate: event.sortingDate});
+ delete availablePeriods[event.sortingDate];
+ }
+ });
+ }
+ return {occupiedPeriods: occupiedPeriods, availablePeriods: availablePeriods};
+ };
})
/* Factory to fetch optionSets */
@@ -1214,8 +1220,7 @@
column.show = false;
if( (column.id === 'orgUnitName' && ouMode !== 'SELECTED') ||
column.displayInListNoProgram ||
- column.displayInList ||
- column.id === 'created'){
+ column.displayInList){
column.show = true;
}
column.showFilter = false;
@@ -1251,12 +1256,14 @@
};
})
-.service('EventUtils', function(DateUtils, CalendarService, OptionSetService, $filter, orderByFilter){
+.service('EventUtils', function(DateUtils, PeriodService, CalendarService, OptionSetService, $filter, orderByFilter){
- var getEventDueDate = function(eventsByStage, programStage, enrollment){
+ var getEventDueDate = function(eventsByStage, programStage, enrollment){
+
var referenceDate = enrollment.dateOfIncident ? enrollment.dateOfIncident : enrollment.dateOfEnrollment,
offset = programStage.minDaysFromStart,
- calendarSetting = CalendarService.getSetting();
+ calendarSetting = CalendarService.getSetting(),
+ dueDate;
if(programStage.generatedByEnrollmentDate){
referenceDate = enrollment.dateOfEnrollment;
@@ -1271,30 +1278,71 @@
});
if(evs.length > 0){
- evs = orderByFilter(evs, '-eventDate');
- referenceDate = evs[0].eventDate;
- offset = programStage.standardInterval ? programStage.standardInterval : 0;
- }
+ evs = orderByFilter(evs, '-eventDate');
+ if(programStage.periodType){
+
+ }
+ else{
+ referenceDate = evs[0].eventDate;
+ offset = programStage.standardInterval;
+ }
+ }
}
-
- var dueDate = moment(referenceDate, calendarSetting.momentFormat).add('d', offset)._d;
- dueDate = $filter('date')(dueDate, calendarSetting.keyDateFormat);
+ dueDate = moment(referenceDate, calendarSetting.momentFormat).add('d', offset)._d;
+ dueDate = $filter('date')(dueDate, calendarSetting.keyDateFormat);
return dueDate;
};
+ var getEventDuePeriod = function(eventsByStage, programStage, enrollment){
+
+ var evs = [];
+ angular.forEach(eventsByStage, function(ev){
+ if(ev.eventDate){
+ evs.push(ev);
+ }
+ });
+
+ if(evs.length > 0){
+ evs = orderByFilter(evs, '-eventDate');
+ }
+
+ var availabelPeriods = PeriodService.getPeriods(evs,programStage, enrollment).availablePeriods;
+ var periods = [];
+ for(var k in availabelPeriods){
+ if(availabelPeriods.hasOwnProperty(k)){
+ periods.push( availabelPeriods[k] );
+ }
+ }
+ return periods;
+ };
+
return {
- createDummyEvent: function(eventsPerStage, programStage, orgUnit, enrollment){
- var today = DateUtils.getToday();
- var dueDate = getEventDueDate(eventsPerStage, programStage, enrollment);
- var dummyEvent = {programStage: programStage.id,
+ createDummyEvent: function(eventsPerStage, tei, program, programStage, orgUnit, enrollment){
+ var today = DateUtils.getToday();
+ var dummyEvent = {trackedEntityInstance: tei.trackedEntityInstance,
+ programStage: programStage.id,
+ program: program.id,
orgUnit: orgUnit.id,
orgUnitName: orgUnit.name,
- dueDate: dueDate,
- sortingDate: dueDate,
name: programStage.name,
reportDateDescription: programStage.reportDateDescription,
enrollmentStatus: 'ACTIVE',
+ enrollment: enrollment.enrollment,
status: 'SCHEDULED'};
+
+ if(programStage.periodType){
+ var periods = getEventDuePeriod(eventsPerStage, programStage, enrollment);
+ dummyEvent.dueDate = periods[0].endDate;
+ dummyEvent.periodName = periods[0].name;
+ dummyEvent.eventDate = dummyEvent.dueDate;
+ dummyEvent.periods = periods;
+ }
+ else{
+ dummyEvent.dueDate = getEventDueDate(eventsPerStage, programStage, enrollment);
+ }
+
+ dummyEvent.sortingDate = dummyEvent.dueDate;
+
if(programStage.captureCoordinates){
dummyEvent.coordinate = {};
@@ -1342,10 +1390,20 @@
program: program.id,
programStage: stage.id,
orgUnit: orgUnit.id,
- dueDate: DateUtils.formatFromUserToApi(getEventDueDate(null,stage, enrollment)),
+ enrollment: enrollment.enrollment,
status: 'SCHEDULE'
};
-
+ if(stage.periodType){
+ var periods = getEventDuePeriod(null, stage, enrollment);
+ newEvent.dueDate = DateUtils.formatFromUserToApi(periods[0].dueDate);;
+ newEvent.eventDate = newEvent.dueDate;
+ //newEvent.periodName = periods[0].name;
+ //newEvent.periods = periods;
+ }
+ else{
+ newEvent.dueDate = DateUtils.formatFromUserToApi(getEventDueDate(null,stage, enrollment));
+ }
+
if(stage.openAfterEnrollment){
if(stage.reportDateToUse === 'dateOfIncident'){
newEvent.eventDate = DateUtils.formatFromUserToApi(enrollment.dateOfIncident);
=== 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 2015-03-16 14:14:10 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js 2015-03-19 10:18:00 +0000
@@ -29,16 +29,6 @@
objectStores: ['programs', 'programStages', 'trackedEntities', 'trackedEntityForms', 'attributes', 'relationshipTypes', 'optionSets', 'programValidations', 'ouLevels']
});
-(function($) {
- $.safeEach = function(arr, fn)
- {
- if (arr)
- {
- $.each(arr, fn);
- }
- };
-})(jQuery);
-
/**
* Page init. The order of events is:
*
=== 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 2015-03-11 15:02:58 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/styles/style.css 2015-03-19 10:18:00 +0000
@@ -90,7 +90,6 @@
.vertical-center {
line-height: inherit;
vertical-align: middle;
-
}
.empty-event-container {
@@ -1011,4 +1010,9 @@
.mouse-pointer {
cursor: pointer;
+}
+
+ .form-horizontal .control-label {
+ display: table-cell;
+ vertical-align: middle;
}
\ No newline at end of file
=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.angular.services.js'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.angular.services.js 2015-02-12 14:25:04 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.angular.services.js 2015-03-19 10:18:00 +0000
@@ -237,93 +237,98 @@
if(attributes.hasOwnProperty('name')){
attributes['name'] = fieldId;
}
+
+ var prStDe = programStageDataElements[fieldId];
+
+ if( prStDe && prStDe.dataElement && prStDe.dataElement.type ){
- //check data element type and generate corresponding angular input field
- if(programStageDataElements[fieldId].dataElement.type === "int"){
- newInputField = '
';
- }
- if(programStageDataElements[fieldId].dataElement.type === "string"){
- if(programStageDataElements[fieldId].dataElement.optionSet){
- var optionSetId = programStageDataElements[fieldId].dataElement.optionSet.id;
- newInputField = '
';
- }
- else{
- newInputField = '
';
- }
- }
- if(programStageDataElements[fieldId].dataElement.type === "bool"){
- newInputField = '
';
- }
- if(programStageDataElements[fieldId].dataElement.type === "date"){
- var maxDate = programStageDataElements[fieldId].allowFutureDate ? '' : 0;
- newInputField = '
';
- }
- if(programStageDataElements[fieldId].dataElement.type === "trueOnly"){
- newInputField = '
';
- }
+ //check data element type and generate corresponding angular input field
+ if(prStDe.dataElement.type === "int"){
+ newInputField = '
';
+ }
+ if(prStDe.dataElement.type === "string"){
+ if(prStDe.dataElement.optionSet){
+ var optionSetId = prStDe.dataElement.optionSet.id;
+ newInputField = '
';
+ }
+ else{
+ newInputField = '
';
+ }
+ }
+ if(prStDe.dataElement.type === "bool"){
+ newInputField = '
';
+ }
+ if(prStDe.dataElement.type === "date"){
+ var maxDate = prStDe.allowFutureDate ? '' : 0;
+ newInputField = '
';
+ }
+ if(prStDe.dataElement.type.type === "trueOnly"){
+ newInputField = '
';
+ }
+ }
}
newInputField = newInputField + '
{{getErrorMessage(' + errorMessageId + ')}} ';
@@ -371,105 +376,111 @@
var fieldName = attId;
var attMaxDate = trackedEntityFormAttributes[attId].allowFutureDate ? '' : 0;
- //check attribute type and generate corresponding angular input field
- if(trackedEntityFormAttributes[attId].valueType === "number"){
- newInputField = '
';
- }
- else if(trackedEntityFormAttributes[attId].valueType === "optionSet"){
- var optionSetId = trackedEntityFormAttributes[attId].optionSet.id;
- newInputField = '
';
- }
- else if(trackedEntityFormAttributes[attId].valueType === "bool"){
- newInputField = '
';
- }
- else if(trackedEntityFormAttributes[attId].valueType === "date"){
- newInputField = '
';
- }
- else if(trackedEntityFormAttributes[attId].valueType === "trueOnly"){
- newInputField = '
';
- }
- else if(trackedEntityFormAttributes[attId].valueType === "email"){
- newInputField = '
';
- }
- else {
- newInputField = '
';
- }
+ var att = trackedEntityFormAttributes[attId];
+
+ if( att ){
+
+ //check attribute type and generate corresponding angular input field
+ if(att.valueType === "number"){
+ newInputField = '
';
+ }
+ else if(att.valueType === "optionSet"){
+ var optionSetId = att.optionSet.id;
+ newInputField = '
';
+ }
+ else if(att.valueType === "bool"){
+ newInputField = '
';
+ }
+ else if(att.valueType === "date"){
+ newInputField = '
';
+ }
+ else if(att.valueType === "trueOnly"){
+ newInputField = '
';
+ }
+ else if(att.valueType === "email"){
+ newInputField = '
';
+ }
+ else {
+ newInputField = '
';
+ }
+ }
+
}
if(attributes.hasOwnProperty('programid')){