dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #28783
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 14424: bug fix in event-capture, integration of tracker-capture with portal
------------------------------------------------------------
revno: 14424
committer: Abyot Asalefew Gizaw abyota@xxxxxxxxx
branch nick: dhis2
timestamp: Wed 2014-03-26 10:44:22 +0100
message:
bug fix in event-capture, integration of tracker-capture with portal
added:
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html
modified:
dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties
dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js
dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js
dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js
dhis-2/dhis-web/dhis-web-portal/pom.xml
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html
dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html
dhis-2/dhis-web/pom.xml
--
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-services/dhis-service-i18n/src/main/resources/i18n_global.properties'
--- dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties 2014-03-25 21:41:27 +0000
+++ dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties 2014-03-26 09:44:22 +0000
@@ -53,6 +53,7 @@
dhis-web-mapping=GIS
dhis-web-event-capture=Event Capture
dhis-web-event-reports=Event Reports
+dhis-web-tracker-capture=Tracker Capture
dhis-web-reporting=Reports
dhis-web-light=Mobile (Light)
dhis-web-mobile=Mobile (Smartphone)
@@ -95,7 +96,8 @@
intro_dhis-web-sms=Send SMS reminders and notifications manually or as scheduled tasks.
intro_dhis-web-spreadsheet-reporting=Generate and import data based on predefined Excel templates.
intro_dhis-web-event-reports=Query for events and create aggregated, dimensional analysis of events.
-intro_dhis-web-event-capture=Capture information about, validate and filter events.
+intro_dhis-web-event-capture=Capture information about single events.
+intro_dhis-web-tracker-capture=Capture information about trackable entities.
#-- Intro functions -------------------------------------------------------------#
=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js 2014-03-17 14:48:42 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/angular/ui-bootstrap-tpls-0.10.0.js 2014-03-26 09:44:22 +0000
@@ -3195,7 +3195,7 @@
//it might happen that several async queries were in progress if a user were typing fast
//but we are interested only in responses that correspond to the current view value
if (inputValue === modelCtrl.$viewValue ) {
- if (matches.length > 0) {
+ if (matches && matches.length > 0) {
typeaheadCtrl.active = 0;
typeaheadCtrl.matches.length = 0;
=== modified file 'dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js'
--- dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js 2014-03-19 10:37:49 +0000
+++ dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/controllers.js 2014-03-26 09:44:22 +0000
@@ -51,7 +51,7 @@
//apply translation - by now user's profile is fetched from server.
TranslationService.translate();
- var programs = storage.get('PROGRAMS');
+ var programs = storage.get('EVENT_PROGRAMS');
if( programs ){
$scope.loadPrograms($scope.selectedOrgUnit);
}
@@ -69,9 +69,9 @@
$scope.programs = [];
- var programs = storage.get('PROGRAMS');
+ var programs = storage.get('EVENT_PROGRAMS');
- if( programs ){
+ if( programs && programs != 'undefined' ){
for(var i=0; i<programs.length; i++){
var program = storage.get(programs[i].id);
if(program.organisationUnits.hasOwnProperty(orgUnit.id)){
@@ -144,13 +144,16 @@
for(var i=0; i < $scope.dhis2Events.length; i++){
//check if event is empty
- if(!angular.isUndefined($scope.dhis2Events[i].dataValues[0].dataElement)){
+ if(!angular.isUndefined($scope.dhis2Events[i].dataValues)){
$scope.dhis2Events[i].dataValues = orderByFilter($scope.dhis2Events[i].dataValues, '-dataElement');
angular.forEach($scope.dhis2Events[i].dataValues, function(dataValue){
- //converting int value to integer for proper sorting.
+ //converting event.datavalues[i].datavalue.dataelement = value to
+ //event[dataElement] = value for easier grid display.
var dataElement = $scope.programStageDataElements[dataValue.dataElement].dataElement;
if(angular.isObject(dataElement)){
+
+ //converting int string value to integer for proper sorting.
if(dataElement.type == 'int'){
if( !isNaN(parseInt(dataValue.value)) ){
dataValue.value = parseInt(dataValue.value);
@@ -160,11 +163,12 @@
}
}
+
$scope.dhis2Events[i][dataValue.dataElement] = dataValue.value;
}
- });
+ });
- delete $scope.dhis2Events[i].dataValues;
+ delete $scope.dhis2Events[i].dataValues;
}
else{//event is empty, remove from grid
var index = $scope.dhis2Events.indexOf($scope.dhis2Events[i]);
=== modified file 'dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js'
--- dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js 2014-03-19 08:22:59 +0000
+++ dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/scripts/event-capture.js 2014-03-26 09:44:22 +0000
@@ -18,9 +18,9 @@
var i18n_sync_failed = 'Upload to server failed, please try again later';
var i18n_uploading_data_notification = 'Uploading locally stored data to the server';
-var PROGRAMS_METADATA = 'PROGRAMS';
+var PROGRAMS_METADATA = 'EVENT_PROGRAMS';
-var EVENT_VALUES = 'EVENTVALUES';
+var EVENT_VALUES = 'EVENT_VALUES';
DAO.store = new dhis2.storage.Store({
name: 'dhis2',
@@ -168,16 +168,15 @@
function getMetaPrograms()
{
- var PROGRAMS_METADATA = 'PROGRAMS';
var def = $.Deferred();
$.ajax({
- url: '../api/programs.json',
+ url: '../api/programs',
type: 'GET',
- data:'type=3'
- }).done( function(response) {
+ data:'type=3&paging=false'
+ }).done( function(response) {
localStorage[PROGRAMS_METADATA] = JSON.stringify(response.programs);
- def.resolve( response.programs );
+ def.resolve(response.programs);
});
return def.promise();
@@ -298,7 +297,7 @@
events = JSON.stringify(events);
$.ajax( {
- url: '../api/events.json',
+ url: '../api/events',
type: 'POST',
data: events,
contentType: 'application/json',
=== modified file 'dhis-2/dhis-web/dhis-web-portal/pom.xml'
--- dhis-2/dhis-web/dhis-web-portal/pom.xml 2014-03-19 10:37:49 +0000
+++ dhis-2/dhis-web/dhis-web-portal/pom.xml 2014-03-26 09:44:22 +0000
@@ -198,6 +198,12 @@
</dependency>
<dependency>
<groupId>org.hisp.dhis</groupId>
+ <artifactId>dhis-web-tracker-capture</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <dependency>
+ <groupId>org.hisp.dhis</groupId>
<artifactId>dhis-web-maintenance-appmanager</artifactId>
<version>${project.version}</version>
<type>war</type>
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json 2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json 2014-03-26 09:44:22 +0000
@@ -29,6 +29,7 @@
"entity": "Entity",
"add_new": "Add new",
"new_event": "New event",
+ "create_new_event": "Create new event",
"close_search": "Close search",
"search_attributes": "Search attributes",
"search_for_dashboard": "Search for dashboard items",
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html 2014-03-17 15:59:31 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html 2014-03-26 09:44:22 +0000
@@ -5,13 +5,15 @@
<meta name="description" content="DHIS 2">
<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/ui/jquery-ui-1.9.1.custom.min.js"></script>
<link rel="stylesheet" type="text/css" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui-1.9.1.custom.css">
- <script type="text/javascript" src="../dhis-web-commons/bootstrap/js/bootstrap.min.js"></script>
+ <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">
<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-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js 2013-03-22 18:12:52 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js 2014-03-26 09:44:22 +0000
@@ -42,7 +42,7 @@
TranslationService.translate();
$scope.attributes = storage.get('ATTRIBUTES');
- var programs = storage.get('PROGRAMS');
+ var programs = storage.get('TRACKER_PROGRAMS');
if( programs ){
$scope.loadPrograms($scope.selectedOrgUnit);
}
@@ -60,9 +60,9 @@
$scope.programs = [];
- var programs = storage.get('PROGRAMS');
+ var programs = storage.get('TRACKER_PROGRAMS');
- if( programs ){
+ if( programs && programs != 'undefined'){
for(var i=0; i<programs.length; i++){
var program = storage.get(programs[i].id);
if(program.organisationUnits.hasOwnProperty(orgUnit.id)){
@@ -236,7 +236,8 @@
//listen for the selected items
$scope.$on('selectedItems', function(event, args) {
- $scope.selectedEntity = args.selectedEntity;
+ $scope.selectedEntity = args.selectedEntity;
+ $scope.trackedEntity = storage.get($scope.selectedEntity.trackedEntity);
});
})
@@ -255,7 +256,7 @@
//programs for enrollment
$scope.enrollments = [];
$scope.programs = [];
- var programs = storage.get('PROGRAMS');
+ var programs = storage.get('TRACKER_PROGRAMS');
//listen for the selected items
$scope.$on('selectedItems', function(event, args) {
@@ -305,14 +306,14 @@
}
});
- if( isEnrolled && selectedEnrollment ){
+ //if( isEnrolled && selectedEnrollment ){
//broadcast current selections for data entry
$rootScope.$broadcast('dataentry', {selectedEntity: $scope.selectedEntity,
selectedProgramId: prId,
selectedOrgUnitId: $scope.selectedOrgUnitId,
selectedEnrollment: selectedEnrollment});
- }
+ //}
};
})
@@ -428,13 +429,41 @@
console.log('need to create new event');
};
- $scope.showDataEntry = function(event){
+ $scope.showDataEntry = function(event){
if(event){
- $scope.currentEvent = event;
- $scope.currentStage = storage.get($scope.currentEvent.programStage);
+
+ $scope.currentEvent = event;
+ $scope.currentStage = storage.get($scope.currentEvent.programStage);
+
+ angular.forEach($scope.currentStage.programStageDataElements, function(prStDe){
+ $scope.currentStage.programStageDataElements[prStDe.dataElement.id] = prStDe.dataElement;
+ });
+
+ angular.forEach($scope.currentEvent.dataValues, function(dataValue){
+ var val = dataValue.value;
+ var de = $scope.currentStage.programStageDataElements[dataValue.dataElement];
+ if( de && de.type == 'int' && val){
+ val = parseInt(val);
+ }
+
+ $scope.currentEvent[dataValue.dataElement] = val;
+ });
}
- };
+ };
+})
+
+//Controller for the dashboard menu section
+.controller('DashboardMenuController',
+ function($scope,
+ storage,
+ TranslationService) {
+
+ TranslationService.translate();
+
+ $scope.dashboardMenu = {title: 'Menu', isOpen: true};
+
+ $scope.attributes = storage.get('ATTRIBUTES');
})
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js 2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/directives.js 2014-03-26 09:44:22 +0000
@@ -23,6 +23,49 @@
restrict: 'A',
link: function(scope, element, attrs){
+ //when tree has loaded, get selected orgunit - if there is any - and inform angular
+ $(function() {
+
+ var adapters = [];
+ var partial_adapters = [];
+
+ if( dhis2.ou.memoryOnly ) {
+ adapters = [ dhis2.storage.InMemoryAdapter ];
+ partial_adapters = [ dhis2.storage.InMemoryAdapter ];
+ } else {
+ adapters = [ dhis2.storage.IndexedDBAdapter, dhis2.storage.DomLocalStorageAdapter, dhis2.storage.InMemoryAdapter ];
+ partial_adapters = [ dhis2.storage.IndexedDBAdapter, dhis2.storage.DomSessionStorageAdapter, dhis2.storage.InMemoryAdapter ];
+ }
+
+ dhis2.ou.store = new dhis2.storage.Store({
+ name: OU_STORE_NAME,
+ objectStores: [
+ {
+ name: OU_KEY,
+ adapters: adapters
+ },
+ {
+ name: OU_PARTIAL_KEY,
+ adapters: partial_adapters
+ }
+ ]
+ });
+
+ dhis2.ou.store.open().done( function() {
+ selection.load();
+ $( "#orgUnitTree" ).one( "ouwtLoaded", function() {
+ var selected = selection.getSelected()[0];
+ selection.getOrganisationUnit(selected).done(function(data){
+ if( data ){
+ scope.selectedOrgUnit = {id: selected, name: data[selected].n};
+ scope.$apply();
+ }
+ });
+ } );
+
+ });
+ });
+
//listen to user selection, and inform angular
selection.setListenerFunction( organisationUnitSelected );
selection.responseReceived();
@@ -35,6 +78,20 @@
};
})
+.directive('sortable', function() {
+
+ return {
+ restrict: 'A',
+ link: function(scope, element, attrs){
+ element.sortable({
+ connectWith: ".connectedSortable",
+ placeholder: "ui-state-highlight",
+ tolerance: "pointer"
+ }).disableSelection();
+ //scope.$apply();
+ }
+ };
+})
.directive('dhisContextMenu', function(ContextMenuSelectedItem) {
return {
@@ -140,7 +197,7 @@
};
})
-.directive('typeaheadOpenOnFocus', function () {
+.directive('typeaheadOpenOnFocus', function ($compile) {
return {
require: ['typeahead', 'ngModel'],
link: function (scope, element, attr, ctrls) {
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js 2014-03-17 15:59:31 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/tracker-capture.js 2014-03-26 09:44:22 +0000
@@ -1,4 +1,3 @@
-
dhis2.util.namespace('dhis2.tc');
// whether current user has any organisation units
@@ -18,9 +17,9 @@
var i18n_sync_failed = 'Upload to server failed, please try again later';
var i18n_uploading_data_notification = 'Uploading locally stored data to the server';
-var PROGRAMS_METADATA = 'PROGRAMS';
+var PROGRAMS_METADATA = 'TRACKER_PROGRAMS';
-var EVENT_VALUES = 'EVENTVALUES';
+var TRACKER_VALUES = 'TRACKER_VALUES';
DAO.store = new dhis2.storage.Store({
name: 'dhis2',
@@ -38,7 +37,6 @@
};
})(jQuery);
-
/**
* Page init. The order of events is:
*
@@ -61,6 +59,7 @@
promise = promise.then( getUserProfile );
promise = promise.then( getAttributes );
+ promise = promise.then( getTrackedEntities );
promise = promise.then( getMetaPrograms );
promise = promise.then( getPrograms );
promise = promise.then( getProgramStages );
@@ -168,14 +167,13 @@
function getMetaPrograms()
{
- var PROGRAMS_METADATA = 'PROGRAMS';
var def = $.Deferred();
$.ajax({
- url: '../api/programs.json',
+ url: '../api/programs',
type: 'GET',
- data:'type=1'
- }).done( function(response) {
+ data:'type=1&paging=false'
+ }).done( function(response) {
localStorage[PROGRAMS_METADATA] = JSON.stringify(response.programs);
def.resolve( response.programs );
});
@@ -275,8 +273,9 @@
var def = $.Deferred();
$.ajax({
- url: '../api/trackedEntityAttributes.json?viewClass=detailed&paging=false',
- type: 'GET'
+ url: '../api/trackedEntityAttributes',
+ type: 'GET',
+ data:'viewClass=detailed&paging=false'
}).done( function(response) {
localStorage['ATTRIBUTES'] = JSON.stringify(response.trackedEntityAttributes);
def.resolve();
@@ -285,6 +284,24 @@
return def.promise();
}
+function getTrackedEntities()
+{
+ var def = $.Deferred();
+
+ $.ajax({
+ url: '../api/trackedEntities',
+ type: 'GET',
+ data:'viewClass=detailed&paging=false'
+ }).done( function(response) {
+ _.each(_.values(response.trackedEntities), function(te){
+ localStorage[te.id] = JSON.stringify(te);;
+ });
+ def.resolve();
+ });
+
+ return def.promise();
+}
+
function uploadLocalData()
{
if ( !dhis2.tc.storageManager.hasLocalData() )
@@ -392,7 +409,7 @@
*/
this.clear = function ()
{
- localStorage.removeItem(EVENT_VALUES);
+ localStorage.removeItem(TRACKER_VALUES);
};
/**
@@ -414,16 +431,16 @@
var events = {};
- if (localStorage[EVENT_VALUES] != null)
+ if (localStorage[TRACKER_VALUES] != null)
{
- events = JSON.parse(localStorage[EVENT_VALUES]);
+ events = JSON.parse(localStorage[TRACKER_VALUES]);
}
events[event.event] = event;
try
{
- localStorage[EVENT_VALUES] = JSON.stringify(events);
+ localStorage[TRACKER_VALUES] = JSON.stringify(events);
log('Successfully stored event - locally');
}
@@ -442,9 +459,9 @@
*/
this.getEvent = function(id)
{
- if (localStorage[EVENT_VALUES] != null)
+ if (localStorage[TRACKER_VALUES] != null)
{
- var events = JSON.parse(localStorage[EVENT_VALUES]);
+ var events = JSON.parse(localStorage[TRACKER_VALUES]);
return events[id];
}
@@ -464,7 +481,7 @@
if (events != null && events[event.event] != null)
{
delete events[event.event];
- localStorage[EVENT_VALUES] = JSON.stringify(events);
+ localStorage[TRACKER_VALUES] = JSON.stringify(events);
}
};
@@ -495,7 +512,7 @@
*/
this.getAllEvents = function()
{
- return localStorage[EVENT_VALUES] != null ? JSON.parse( localStorage[EVENT_VALUES] ) : null;
+ return localStorage[TRACKER_VALUES] != null ? JSON.parse( localStorage[TRACKER_VALUES] ) : null;
};
/**
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css 2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css 2014-03-26 09:44:22 +0000
@@ -1,3 +1,28 @@
+html, body {
+ height:100%;
+ margin: 0;
+ padding: 0;
+ background-color: white;
+ font-size: 10pt;
+}
+
+h1 {
+ font-size: 1.8em;
+}
+
+h2 {
+ font-size: 1.4em;
+}
+
+h3 {
+ font-size: 1em;
+}
+
+h4 {
+ font-size: 0.8em;
+ font-weight: bold;
+}
+
/*----------------------------------------------------------------------------*/
/* Form
/*----------------------------------------------------------------------------*/
@@ -7,8 +32,7 @@
width: 130px;
}
-input[type="text"]
-{
+.fixed-text-width {
width: 260px;
}
@@ -17,9 +41,9 @@
width: 240px;
}
-select
+.fixed-select-width
{
- width: 264px;
+ width: 260px;
}
textarea
@@ -38,58 +62,6 @@
margin-bottom: 10px;
}
-.heading-column
-{
- width: 400px;
-}
-
-td.input-column
-{
- padding-left: 5px;
- padding-right: 1px;
-}
-
-td.error {
- padding-left: 1em;
-}
-
-table.information, td.information
-{
- border:1px solid #808080;
- vertical-align:top;
- padding:10px;
-}
-
-.text-column
-{
- padding-left: 5px;
- padding-right: 6px;
- text-align: left;
-}
-
-.errorCell
-{
- background-color: #FFCFCF
-}
-
-.green-background
-{
- position: relative;
- border: 1px solid #a4d2a3;
- background-color: #d5efd5;
- padding-top: 10px;
- padding-right: 20px;
- padding-bottom: 5px;
- padding-left: 20px;
- margin-bottom: 15px;
- border-radius: 3px;
-}
-
-.searchInput
-{
- width: 240px;
-}
-
/*----------------------------------------------------------------------------*/
/* Button list
/*----------------------------------------------------------------------------*/
@@ -147,8 +119,7 @@
.stage-flow
{
height:100px;
- overflow-x:hidden;
- overflow-y:hidden;
+ overflow: scroll;
}
.table-flow
@@ -195,6 +166,11 @@
border: 2px solid;
}
+.new-event {
+ float: right;
+ cursor: pointer;
+}
+
.stage-completed {
background-color: #b9ffb9;
}
@@ -215,6 +191,10 @@
color: #b94a48;
}
+.stages-color {
+ display: block;
+}
+
input.stage-object[type="button"]
{
width: 135px;
@@ -334,7 +314,7 @@
/* --------------------------------------------------------------
-// App - specific (might change this if Lars is not happy
+// App - specific
// -------------------------------------------------------------- */
.container-heading {
@@ -342,26 +322,6 @@
padding: 12px;
}
-.container-1-4 {
- width: 25%;
- float: left;
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
-.container-1-2 {
- width: 50%;
- float: left;
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
-.container-1-1 {
- width: 100%;
- float: left;
- margin-top: 1em;
-}
-
div.paging a.active
{
text-decoration: none;
@@ -410,12 +370,11 @@
.bordered-div
{
border: 1px solid #c2c2c2;
- border-radius: 10px;
+ border-radius: 5px;
padding: 5px 10px;
margin-bottom: 20px;
}
-
.nav, .pagination, .carousel, .panel-title a {
cursor: pointer;
text-decoration: none;
@@ -529,484 +488,6 @@
font-weight: bold;
}
-/*----------------------------------------------------------------------------*/
-/* Bootstrap modal style
-/*----------------------------------------------------------------------------*/
-.modal-open {
- overflow: hidden
-}
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- display: none;
- overflow: auto;
- overflow-y: scroll
-}
-.modal.fade .modal-dialog {
- -webkit-transform: translate(0,-25%);
- -ms-transform: translate(0,-25%);
- transform: translate(0,-25%);
- -webkit-transition: -webkit-transform .3s ease-out;
- -moz-transition: -moz-transform .3s ease-out;
- -o-transition: -o-transform .3s ease-out;
- transition: transform .3s ease-out
-}
-.modal.in .modal-dialog {
- -webkit-transform: translate(0,0);
- -ms-transform: translate(0,0);
- transform: translate(0,0)
-}
-.modal-dialog {
- position: relative;
- z-index: 1050;
- width: auto;
- padding: 10px;
- margin-right: auto;
- margin-left: auto
-}
-.modal-content {
- position: relative;
- background-color: #fff;
- border: 1px solid #999;
- border: 1px solid rgba(0,0,0,0.2);
- border-radius: 6px;
- outline: 0;
- -webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5);
- box-shadow: 0 3px 9px rgba(0,0,0,0.5);
- background-clip: padding-box
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1030;
- background-color: #000
-}
-.modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0)
-}
-.modal-backdrop.in {
- opacity: .5;
- filter: alpha(opacity=50)
-}
-.modal-header {
- min-height: 16.428571429px;
- padding: 15px;
- border-bottom: 1px solid #e5e5e5
-}
-.modal-header .close {
- margin-top: -2px
-}
-.modal-title {
- margin: 0;
- line-height: 1.428571429
-}
-.modal-body {
- position: relative;
- padding: 20px
-}
-.modal-footer {
- padding: 19px 20px 20px;
- margin-top: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5
-}
-.modal-footer:before, .modal-footer:after {
- display: table;
- content: " "
-}
-.modal-footer:after {
- clear: both
-}
-.modal-footer:before, .modal-footer:after {
- display: table;
- content: " "
-}
-.modal-footer:after {
- clear: both
-}
-.modal-footer .btn+ .btn {
- margin-bottom: 0;
- margin-left: 5px
-}
-.modal-footer .btn-group .btn+ .btn {
- margin-left: -1px
-}
-.modal-footer .btn-block+ .btn-block {
- margin-left: 0
-}
-@media screen and (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- padding-top: 30px;
- padding-bottom: 30px
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.5);
- box-shadow: 0 5px 15px rgba(0,0,0,0.5)
- }
-}
-
-.container {
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto
-}
-.container:before, .container:after {
- display: table;
- content: " "
-}
-.container:after {
- clear: both
-}
-.container:before, .container:after {
- display: table;
- content: " "
-}
-.container:after {
- clear: both
-}
-@media (min-width: 768px) {
- .container {
- width: 750px
- } z-index: 1051;
-}
-@media (min-width: 992px) {
- .container {
- width: 970px
- }
-}
-@media (min-width: 1200px) {
- .container {
- width: 1170px
- }
-}
-.container > .navbar-header, .container > .navbar-collapse {
- margin-right: -15px;
- margin-left: -15px
-}
-@media (min-width: 768px) {
- .container > .navbar-header, .container > .navbar-collapse {
- margin-right: 0;
- margin-left: 0
- }
-}
-
-@media (min-width: 768px) {
- .navbar > .container .navbar-brand {
- margin-left: -15px
- }
-}
-
-.container .jumbotron {
- border-radius: 6px
-}
-@media screen and (min-width: 768px) {
- .jumbotron {
- padding-top: 48px;
- padding-bottom: 48px
- }
- .container .jumbotron {
- padding-right: 60px;
- padding-left: 60px
- }
- .jumbotron h1 {
- font-size: 63px
- }
-}
-
-.dropdown {
- position: relative
-}
-.dropdown-toggle:focus {
- outline: 0
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- font-size: 14px;
- list-style: none;
- background-color: #fff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0,0,0,0.15);
- border-radius: 4px;
- -webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175);
- box-shadow: 0 6px 12px rgba(0,0,0,0.175);
- background-clip: padding-box
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto
-}
-.dropdown-menu .divider {
- height: 1px;
- margin: 9px 0;
- overflow: hidden;
- background-color: #e5e5e5
-}
-
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.428571429;
- color: #333;
- white-space: nowrap
-}
-.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
- color: #262626;
- text-decoration: none;
- background-color: #f5f5f5
-}
-.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- background-color: #428bca;
- outline: 0
-}
-.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
- color: #999
-}
-.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- cursor: not-allowed;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false)
-}
-.open > .dropdown-menu {
- display: block
-}
-
-/*----------------------------------------------------------------------------*/
-/* Bootstrap panel style
-/*----------------------------------------------------------------------------*/
-
-.panel {
- font-family: LiberationSansRegular, arial, sans-serif !important;
- font-size: 9pt !important;
- margin-bottom: 20px;
- background-color: #fff;
- border: 1px solid transparent;
-
- -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.05);
- box-shadow: 0 1px 1px rgba(0,0,0,0.05)
-}
-.panel-body {
- padding: 10px
-}
-.panel-body:before, .panel-body:after {
- display: table;
- content: " "
-}
-.panel-body:after {
- clear: both
-}
-.panel-body:before, .panel-body:after {
- display: table;
- content: " "
-}
-.panel-body:after {
- clear: both
-}
-.panel > .list-group {
- margin-bottom: 0
-}
-.panel > .list-group .list-group-item {
- border-width: 1px 0
-}
-.panel > .list-group .list-group-item:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0
-}
-.panel > .list-group .list-group-item:last-child {
- border-bottom: 0
-}
-.panel-heading+ .list-group .list-group-item:first-child {
- border-top-width: 0
-}
-.panel > .table, .panel > .table-responsive {
- margin-bottom: 0
-}
-.panel > .panel-body+ .table, .panel > .panel-body+ .table-responsive {
- border-top: 1px solid #ddd
-}
-.panel > .table-bordered, .panel > .table-responsive > .table-bordered {
- border: 0
-}
-.panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0
-}
-.panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0
-}
-.panel > .table-bordered > thead > tr:last-child > th, .panel > .table-responsive > .table-bordered > thead > tr:last-child > th, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th, .panel > .table-bordered > thead > tr:last-child > td, .panel > .table-responsive > .table-bordered > thead > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0
-}
-.panel-heading {
- font-family: LiberationSansRegular, arial, sans-serif !important;
- font-size: 9pt !important;
- padding: 5px 10px;
- border-bottom: 1px solid transparent;
-
-}
-.panel-heading > .dropdown .dropdown-toggle {
- color: inherit
-}
-.panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-family: LiberationSansRegular, arial, sans-serif !important;
- font-size: 9pt !important;
-}
-.panel-title > a {
- color: #000;
-}
-.panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
-
-}
-.panel-group .panel {
- margin-bottom: 0;
- overflow: hidden;
-
-}
-.panel-group .panel+ .panel {
- margin-top: 5px
-}
-.panel-group .panel-heading {
- border-bottom: 0
-}
-.panel-group .panel-heading+ .panel-collapse .panel-body {
- border-top: 1px solid #ddd
-}
-.panel-group .panel-footer {
- border-top: 0
-}
-.panel-group .panel-footer+ .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd
-}
-.panel-default {
- border-color: #ddd
-}
-.panel-default > .panel-heading {
- color: #333;
- background-color: #f5f5f5;
- border-color: #ddd
-}
-.panel-default > .panel-heading+ .panel-collapse .panel-body {
- border-top-color: #ddd
-}
-.panel-default > .panel-heading > .dropdown .caret {
- border-color: #333 transparent
-}
-.panel-default > .panel-footer+ .panel-collapse .panel-body {
- border-bottom-color: #ddd
-}
-.panel-primary {
- border-color: #428bca
-}
-.panel-primary > .panel-heading {
- color: #fff;
- background-color: #428bca;
- border-color: #428bca
-}
-.panel-primary > .panel-heading+ .panel-collapse .panel-body {
- border-top-color: #428bca
-}
-.panel-primary > .panel-heading > .dropdown .caret {
- border-color: #fff transparent
-}
-.panel-primary > .panel-footer+ .panel-collapse .panel-body {
- border-bottom-color: #428bca
-}
-.panel-success {
- border-color: #d6e9c6
-}
-.panel-success > .panel-heading {
- color: #468847;
- background-color: #dff0d8;
- border-color: #d6e9c6
-}
-.panel-success > .panel-heading+ .panel-collapse .panel-body {
- border-top-color: #d6e9c6
-}
-.panel-success > .panel-heading > .dropdown .caret {
- border-color: #468847 transparent
-}
-.panel-success > .panel-footer+ .panel-collapse .panel-body {
- border-bottom-color: #d6e9c6
-}
-.panel-warning {
- border-color: #faebcc
-}
-.panel-warning > .panel-heading {
- color: #c09853;
- background-color: #fcf8e3;
- border-color: #faebcc
-}
-.panel-warning > .panel-heading+ .panel-collapse .panel-body {
- border-top-color: #faebcc
-}
-.panel-warning > .panel-heading > .dropdown .caret {
- border-color: #c09853 transparent
-}
-.panel-warning > .panel-footer+ .panel-collapse .panel-body {
- border-bottom-color: #faebcc
-}
-.panel-danger {
- border-color: #ebccd1
-}
-.panel-danger > .panel-heading {
- color: #b94a48;
- background-color: #f2dede;
- border-color: #ebccd1
-}
-.panel-danger > .panel-heading+ .panel-collapse .panel-body {
- border-top-color: #ebccd1
-}
-.panel-danger > .panel-heading > .dropdown .caret {
- border-color: #b94a48 transparent
-}
-.panel-danger > .panel-footer+ .panel-collapse .panel-body {
- border-bottom-color: #ebccd1
-}
-.panel-info {
- border-color: #bce8f1
-}
-.panel-info > .panel-heading {
- color: #3a87ad;
- background-color: #d9edf7;
- border-color: #bce8f1
-}
-.panel-info > .panel-heading+ .panel-collapse .panel-body {
- border-top-color: #bce8f1
-}
-.panel-info > .panel-heading > .dropdown .caret {
- border-color: #3a87ad transparent
-}
-.panel-info > .panel-footer+ .panel-collapse .panel-body {
- border-bottom-color: #bce8f1
-}
-
.contextMenuItems .divider {
height: 1px;
margin: 5px 0;
@@ -1018,11 +499,17 @@
/* Tracked entity
/*----------------------------------------------------------------------------*/
+.container-1 {
+ height: 100%;
+ min-height: 100%;
+}
+
.container-1-1 {
width: 100%;
float: left;
- margin-top: 50px;
- padding: 5px;
+ margin-top: 50px;
+ height: 100%;
+ min-height: 100%;
}
.container-1-2 {
@@ -1047,73 +534,21 @@
margin-bottom: 10px;
}
-.dashboard-container {
- margin-top: 50px;
- padding-left: 5px;
- position: relative;
-}
-
.dashboard-element-container {
max-height: 250px !important;
-}
-
-.list-element {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
- margin-left: -16px;
- margin-right: -16px;
-}
-
-.list-element:first-child {
- margin-top: -15px;
- border-top: none;
-}
-
-.list-element:last-child {
- margin-bottom: -15px;
- border-bottom: none;
-}
-
-.list-title
-{
- font-size: 12pt;
- font-weight: normal;
- color: #606060;
+ height: 250px !important;
+ overflow-x:auto;
+ overflow-y:auto;
+}
+
+.empty-dashboard-container{
+ min-height: 100px;
}
.horizonal-spacing{
margin-left: 20px;
}
-.vertial-spacing{
+.vertial-spacing {
margin-top: 10px;
-}
-
-/*
-*
-*/
-.panel-heading {
- padding: 10px 10px;
-}
-
-.panel-body {
- padding: 15px
-}
-.panel-body:before, .panel-body:after {
- display: table;
- content: " "
-}
-.panel-body:after {
- clear: both
-}
-.panel-body:before, .panel-body:after {
- display: table;
- content: " "
-}
-.panel-body:after {
- clear: both
}
\ No newline at end of file
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html 2013-03-22 16:15:16 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dashboard.html 2014-03-26 09:44:22 +0000
@@ -1,56 +1,39 @@
-<link rel="stylesheet" type="text/css" href="../dhis-web-commons/bootstrap/css/bootstrap.min.css">
-
-<div class="container-1-1">
-
- <div class="col-xs-12">
+<div class="container-1-1">
+ <div class="col-sm-12">
<div class="btn-toolbar" role="toolbar">
<button type="button" class="btn btn-default" ng-click="back()">{{'back'| translate}}</button>
<span class="horizonal-spacing">
- <input type="text" placeholder="{{'search_for_dashboard'| translate}}" />
+ <input class="fixed-text-width" type="text" placeholder="{{'search_for_dashboard'| translate}}" />
<button type="button" class="btn btn-default" ng-click="searchDashboard()">{{'search'| translate}}</button>
- </span>
-
- <!--<button type="button" class="btn btn-default" ng-click="remove()">{{'remove'| translate }} {{selectedProgram.trackedEntity.name|| 'entity' | translate}}</button>-->
- </div>
- </div>
-
- <div class='clearfix separator'></div>
-
- <div class='col-xs-12'>
- <div class="row">
- <div class="col-sm-3 col-md-3">
- <accordion>
- <accordion-group is-open="{{selected.isOpen}}">
- <accordion-heading>
- <span class="list-title">{{selected.title| translate}}</span>
- </accordion-heading>
- <div class="list-element-container">
- <div class="list-element" ng-repeat="selection in selected.selections">
- {{selection.title| translate}}
- <span class="right">
- {{selection.value| translate}}
- </span>
- </div>
- </div>
- </accordion-group>
- </accordion>
- </div>
- <div class="col-sm-3 col-md-3" ng-controller="ProfileController">
- <div ng-include="'views/profile.html'"></div>
- </div>
- <div class="col-sm-3 col-md-3" ng-controller="EnrollmentController">
- <div ng-include="'views/enrollment.html'"></div>
- </div>
- <div class="col-sm-3 col-md-3" ng-controller="NotesController">
- <div ng-include="'views/notes.html'"></div>
- </div>
+ </span>
</div>
</div>
<div class='separator'></div>
- <div class="col-xs-12" ng-controller="DataEntryController">
- <div ng-include="'views/dataentry.html'"></div>
- </div>
-
-</div>
\ No newline at end of file
+ <div class="col-sm-12">
+ <div class="row">
+ <div class="col-sm-6 col-md-8">
+ <div sortable class="row connectedSortable empty-dashboard-container">
+ <div class="col-sm-12" ng-controller="ProfileController" ng-include="'views/profile.html'"></div>
+ <div class="col-sm-12" ng-controller="DataEntryController" ng-include="'views/dataentry.html'"></div>
+ </div>
+ </div>
+ <div class="col-sm-6 col-md-4">
+ <div sortable class="row connectedSortable empty-dashboard-container">
+ <div class="col-sm-12">
+ <div ng-include="'views/selected.html'"></div>
+ </div>
+ <div class="col-sm-12" ng-controller="EnrollmentController">
+ <div ng-include="'views/enrollment.html'"></div>
+ </div>
+ <div class="col-sm-12" ng-controller="NotesController">
+ <div ng-include="'views/notes.html'"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html 2013-03-22 18:12:52 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/dataentry.html 2014-03-26 09:44:22 +0000
@@ -1,108 +1,78 @@
-<accordion>
- <accordion-group is-open="{{dataEntry.isOpen}}">
- <accordion-heading>
- <span class="list-title">{{dataEntry.title| translate}}</span>
- </accordion-heading>
- <div ng-show="dhis2Events">
+<div class="panel panel-default">
+ <div class="panel-heading">
+ {{dataEntry.title| translate}}
+ <span class="new-event" ng-click="createNewEvent()">
+ {{'create_new_event'| translate}}
+ </span>
+ </div>
+ <div class="panel-body">
+ <div ng-show="dhis2Events">
<table class="table-borderless">
<tbody>
<tr>
- <td>
- <div class="stage-flow">
- <table class="stage-flow">
- <tbody>
- <tr>
- <td class="inline-block" ng-repeat="dhis2Event in dhis2Events">
- <span class="block orgunit-container">{{dhis2Event.orgUnitName}}</span>
- <span class="arrow-container">→</span>
- <span class="stage-container"
- ng-class="{'current-stage': currentEvent.programStage == dhis2Event.programStage, '{{dhis2Event.statusColor}}': true}"
- ng-click="showDataEntry(dhis2Event)">
- {{dhis2Event.name}}<br/>
- {{dhis2Event.eventDate}}
- </span>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </td>
- <td class="right">
- <input type="button" class="entity-instance-object" value="{{'new_event'| translate}}" ng-click="createNewEvent()">
- </td>
+ <td class="inline-block" ng-repeat="dhis2Event in dhis2Events">
+ <span class="block orgunit-container">{{dhis2Event.orgUnitName}}</span>
+ <span class="arrow-container">→</span>
+ <span class="stage-container"
+ ng-class="{'current-stage': currentEvent.programStage == dhis2Event.programStage, '{{dhis2Event.statusColor}}': true}"
+ ng-click="showDataEntry(dhis2Event)">
+ {{dhis2Event.name}}<br/>
+ {{dhis2Event.eventDate}}
+ </span>
+ </td>
</tr>
</tbody>
</table>
<hr>
<div ng-show="currentEvent">
- <table class="dhis2-list-table-striped">
- <thead>
- <tr>
- <th>
- {{'data_element'| translate}}
- </th>
- <th>
- {{'value'| translate}}
- </th>
- </tr>
- </thead>
- <tbody id="list">
- <tr ng-repeat="prStDe in currentStage.programStageDataElements">
- <td class="max-column-width">
- {{prStDe.dataElement.name}}
- </td>
- <td class="max-column-width">
- <ng-form name="innerFormAdd">
- <div ng-switch="prStDe.dataElement.type">
- <div ng-switch-when="int">
- <input type="number"
- ng-model="currentEvent[prStDe.dataElement.id]"
- ng-required={{prStDe.compulsory}}
- name="foo"
- style="width:98%;"/>
- <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
- </div>
- <div ng-switch-when="string">
- <div class="container-fluid">
- <input type="text"
- ng-model="currentEvent[prStDe.dataElement.id]"
- ng-required={{prStDe.compulsory}}
- typeahead="option for option in prStDe.dataElement.optionSet.options | filter:$viewValue | limitTo:20"
- typeahead-open-on-focus
- name="foo"
- style="width:98%;">
- <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
- </div>
- </div>
- <div ng-switch-when="bool">
- <select ng-model="currentEvent[prStDe.dataElement.id]"
- ng-required={{prStDe.compulsory}}
- name="foo"
- style="width:98%;">
- <option value="">{{'please_select'| translate}}</option>
- <option value="0">{{'no'| translate}}</option>
- <option value="1">{{'yes'| translate}}</option>
- </select>
- <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
- </div>
- <div ng-switch-when="date">
- <input type="text"
- placeholder="yyyy-mm-dd"
- ng-date
- ng-model="currentEvent[prStDe.dataElement.id]"
- ng-required={{prStDe.compulsory}}
- name="foo"
- style="width:98%;">
- <span ng-show="outerForm.submitted && innerFormAdd.foo.$invalid" class="red">{{'required'| translate}}</span>
- </div>
- </div>
- </ng-form>
- </td>
- </tr>
- </tbody>
- </table>
+ <div class="form-group">
+ <div class="row" ng-repeat="prStDe in currentStage.programStageDataElements">
+ <div class="col-sm-6">
+ {{prStDe.dataElement.name}}-{{prStDe.dataElement.type}}
+ </div>
+ <div class="col-sm-6">
+ <div ng-switch="prStDe.dataElement.type">
+ <div ng-switch-when="int">
+ <input type="number"
+ class="form-control"
+ ng-model="currentEvent[prStDe.dataElement.id]"
+ ng-required={{prStDe.compulsory}}
+ name="foo"/>
+ </div>
+ <div ng-switch-when="string">
+ <input type="text"
+ class="form-control"
+ ng-model="currentEvent[prStDe.dataElement.id]"
+ ng-required={{prStDe.compulsory}}
+ typeahead="option for option in prStDe.dataElement.optionSet.options | filter:$viewValue | limitTo:20"
+ typeahead-open-on-focus
+ name="foo"/>
+ </div>
+ <div ng-switch-when="bool">
+ <select class="form-control"
+ ng-model="currentEvent[prStDe.dataElement.id]"
+ ng-required={{prStDe.compulsory}}
+ name="foo">
+ <option value="">{{'please_select'| translate}}</option>
+ <option value="0">{{'no'| translate}}</option>
+ <option value="1">{{'yes'| translate}}</option>
+ </select>
+ </div>
+ <div ng-switch-when="date">
+ <input type="text"
+ placeholder="yyyy-mm-dd"
+ ng-date
+ class="form-control"
+ ng-model="currentEvent[prStDe.dataElement.id]"
+ ng-required={{prStDe.compulsory}}
+ name="foo"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
</div>
</div>
- </accordion-group>
-</accordion>
\ No newline at end of file
+ </div>
+</div>
\ No newline at end of file
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html 2014-03-21 07:58:52 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/enrollment.html 2014-03-26 09:44:22 +0000
@@ -1,19 +1,38 @@
-<accordion>
+<!--<accordion>
<accordion-group is-open="{{enrollment.isOpen}}">
<accordion-heading>
<span class="list-title">{{enrollment.title| translate}}</span>
</accordion-heading>
- <div class="list-element-container">
- <div class="list-element">
+ <div>
+ <div>
{{'program'| translate}}
<span class="right">
<select ng-model="selectedProgram"
+ class="form-control"
ng-options="program as program.name for program in programs | orderBy: 'name'"
ng-change="loadEvents(selectedProgram.id)">
<option value="">{{'please_select'| translate}}</option>
</select>
</span>
- </div>
+ </div>
</div>
</accordion-group>
-</accordion>
\ No newline at end of file
+</accordion> -->
+<div class="panel panel-default">
+ <div class="panel-heading">{{enrollment.title| translate}}</div>
+ <div class="panel-body dashboard-element-container">
+ <div>
+ <div>
+ {{'program'| translate}}
+ <span class="right">
+ <select ng-model="selectedProgram"
+ class="form-control"
+ ng-options="program as program.name for program in programs | orderBy: 'name'"
+ ng-change="loadEvents(selectedProgram.id)">
+ <option value="">{{'please_select'| translate}}</option>
+ </select>
+ </span>
+ </div>
+ </div>
+ </div>
+</div>
\ No newline at end of file
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html 2014-03-19 16:58:56 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/notes.html 2014-03-26 09:44:22 +0000
@@ -1,8 +1,6 @@
-<accordion>
- <accordion-group is-open="{{notes.isOpen}}">
- <accordion-heading>
- <span class="list-title">{{notes.title| translate}}</span>
- </accordion-heading>
+<div class="panel panel-default">
+ <div class="panel-heading">{{notes.title| translate}}</div>
+ <div class="panel-body dashboard-element-container">
This is notes.
- </accordion-group>
-</accordion>
\ No newline at end of file
+ </div>
+</div>
\ No newline at end of file
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html 2014-03-19 16:58:56 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/profile.html 2014-03-26 09:44:22 +0000
@@ -1,42 +1,44 @@
-<accordion>
- <accordion-group is-open="{{profile.isOpen}}">
- <accordion-heading>
- <span class="list-title"> {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{profile.title| translate}}</span>
- </accordion-heading>
- <div>
- <div class="list-element" ng-repeat="attribute in selectedEntity.attributes">
- {{attribute.displayName}}
- <div class="right">
+<div class="panel panel-default">
+ <div class="panel-heading">{{trackedEntity.name|| 'entity' | translate}} {{profile.title| translate}}</div>
+ <div class="panel-body dashboard-element-container">
+ <div class="form-group">
+ <div class="row" ng-repeat="attribute in selectedEntity.attributes">
+ <div class="col-sm-6">
+ {{attribute.displayName}}
+ </div>
+ <div class="col-sm-6">
<div ng-switch="attribute.type">
<div ng-switch-when="date">
- <input type="text" ng-date ng-model="attribute.value" value="attribute.value | date:'yyyy-MM-dd"/>
+ <input type="text" class="form-control" ng-date ng-model="attribute.value" value="attribute.value | date:'yyyy-MM-dd"/>
</div>
<div ng-switch-when="trueOnly">
- <input type="checkbox" ng-model="attribute.value" />
+ <input type="checkbox" class="form-control" ng-model="attribute.value" />
</div>
<div ng-switch-when="bool">
- <select ng-model="attribute.value" />
+ <select ng-model="attribute.value" class="form-control">
<option value="">{{'please_select'| translate}}</option>
<option value="0">{{'no'| translate}}</option>
<option value="1">{{'yes'| translate}}</option>
</select>
</div>
<div ng-switch-when="combo">
- <input type="text"
+ <input type="text"
+ class="form-control"
ng-model="attribute.value"
- typeahead="option.name for option in attributes[attribute.attribute].personAttributeOptions | filter:$viewValue | limitTo:20"
+ typeahead="option for option in attributes[attribute.attribute].optionSet.options | filter:$viewValue | limitTo:20"
typeahead-open-on-focus
/>
</div>
<div ng-switch-when="number">
- <input type="number" ng-model="attribute.value" />
+ <input type="number" class="form-control" ng-model="attribute.value" />
</div>
<div ng-switch-default>
- <input type="text" ng-model="attribute.value" />
+ <input type="text" class="form-control" ng-model="attribute.value" />
</div>
</div>
</div>
+
</div>
- </div>
- </accordion-group>
-</accordion>
\ No newline at end of file
+ </div>
+ </div>
+</div>
\ No newline at end of file
=== added file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selected.html 2014-03-26 09:44:22 +0000
@@ -0,0 +1,13 @@
+<div class="panel panel-default">
+ <div class="panel-heading">{{selected.title| translate}}</div>
+ <div class="panel-body dashboard-element-container">
+ <div class="row" ng-repeat="selection in selected.selections">
+ <div class="col-sm-6">
+ {{selection.title| translate}}
+ </div>
+ <div class="col-sm-6">
+ <input type="text" class="form-control" value="{{selection.value| translate}}" ng-disabled="true"/>
+ </div>
+ </div>
+ </div>
+</div>
=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html 2014-03-19 16:58:56 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/selection.html 2014-03-26 09:44:22 +0000
@@ -25,13 +25,14 @@
<div>
<table>
<tr>
- <td><label>{{'registering_unit'| translate}}</label></td>
- <td><input type="text" selected-org-unit ng-model="selectedOrgUnit.name" value="{{selectedOrgUnit.name|| 'please_select'| translate}}" disabled=""></td>
+ <td>{{'registering_unit'| translate}}</td>
+ <td><input type="text" class="fixed-text-width" selected-org-unit ng-model="selectedOrgUnit.name" value="{{selectedOrgUnit.name|| 'please_select'| translate}}" disabled=""></td>
</tr>
<tr>
- <td><label>{{'program'| translate}}<em title="{{'required'| translate}}" class="required">*</em></label></td>
+ <td>{{'program'| translate}}<em title="{{'required'| translate}}" class="required">*</em></td>
<td>
- <select id="programId"
+ <select class="fixed-select-width"
+ id="programId"
name="programId"
ng-model="selectedProgram"
ng-options="program as program.name for program in programs | orderBy: 'name'"
@@ -60,7 +61,7 @@
<!-- selection ends -->
<!-- search begins -->
- <div style="width: 30%;">
+ <div style="width: 50%;">
<accordion>
<accordion>
<accordion-group is-open="{{searchField.isOpen}}">
@@ -68,40 +69,45 @@
{{searchField.title| translate}}
</accordion-heading>
<div>
- <div class="list-element" ng-repeat="attribute in attributes">
- {{attribute.name}}
- <div class="right">
- <div ng-switch="attribute.valueType">
- <div ng-switch-when="date">
- <input type="text" ng-date ng-model="attribute.value" />
- </div>
- <div ng-switch-when="trueOnly">
- <input type="checkbox" ng-model="attribute.value" />
- </div>
- <div ng-switch-when="bool">
- <select ng-model="attribute.value" />
- <option value="">{{'please_select'| translate}}</option>
- <option value="0">{{'no'| translate}}</option>
- <option value="1">{{'yes'| translate}}</option>
- </select>
- </div>
- <div ng-switch-when="combo">
- <input type="text"
- ng-model="attribute.value"
- typeahead="option.name for option in attribute.personAttributeOptions | filter:$viewValue | limitTo:20"
- typeahead-open-on-focus
- />
- </div>
- <div ng-switch-when="number">
- <input type="number" ng-model="attribute.value"/>
- </div>
- <div ng-switch-default>
- <input type="text" ng-model="attribute.value" />
- </div>
- </div>
+ <div class="form-group">
+ <div class="row" ng-repeat="attribute in attributes">
+ <div class="col-sm-6">
+ {{attribute.name}}
+ </div>
+ <div class="col-sm-6">
+ <div ng-switch="attribute.valueType">
+ <div ng-switch-when="date">
+ <input type="text" class="form-control" ng-date ng-model="attribute.value" />
+ </div>
+ <div ng-switch-when="trueOnly">
+ <input type="checkbox" class="form-control" ng-model="attribute.value" />
+ </div>
+ <div ng-switch-when="bool">
+ <select ng-model="attribute.value" class="form-control">
+ <option value="">{{'please_select'| translate}}</option>
+ <option value="0">{{'no'| translate}}</option>
+ <option value="1">{{'yes'| translate}}</option>
+ </select>
+ </div>
+ <div ng-switch-when="combo">
+ <input type="text"
+ class="form-control"
+ ng-model="attribute.value"
+ typeahead="option.name for option in attribute.personAttributeOptions | filter:$viewValue | limitTo:20"
+ typeahead-open-on-focus
+ />
+ </div>
+ <div ng-switch-when="number">
+ <input type="number" class="form-control" ng-model="attribute.value"/>
+ </div>
+ <div ng-switch-default>
+ <input type="text" class="form-control" ng-model="attribute.value" />
+ </div>
+ </div>
+ </div>
</div>
</div>
-
+
<div class="vertial-spacing">
<button ng-click="search()">{{'search'| translate}}</button>
</div>
@@ -117,17 +123,17 @@
<div ng-switch-when=""></div>
<div ng-switch-default>
<h2>
- {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{'list'| translate}}
+ {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}
</h2>
<div ng-switch="trackedEntityList.rows.length">
<div ng-switch-when="undefined">
<p>
- {{'empty'| translate}} {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{'list'| translate}}
+ {{'empty'| translate}} {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}
</p>
</div>
<div ng-switch-when="0">
<p>
- {{'empty'| translate}} {{selectedProgram.trackedEntity.name || 'entity' | translate}} {{'list'| translate}}
+ {{'empty'| translate}} {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}
</p>
</div>
<div ng-switch-default>
@@ -151,36 +157,36 @@
<!-- filter icon begins -->
<span class='pull-right'>
<span ng-show="gridColumn.type !== 'date'">
- <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter-without-content', false: 'filter-with-content'} [filterText[gridColumn.id] == undefined || filterText[gridColumn.id] == '']"><i class="fa fa-filter"></i></span></a>
+ <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter - without - content', false: 'filter - with - content'} [filterText[gridColumn.id] == undefined || filterText[gridColumn.id] == '']"><i class="fa fa-filter"></i></span></a>
</span>
<span ng-show="gridColumn.type === 'date'">
- <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter-without-content', false: 'filter-with-content'} [(filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == '') && (filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == '')]"><i class="fa fa-filter"></i></span></a>
+ <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter - without - content', false: 'filter - with - content'} [(filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == '') && (filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == '')]"><i class="fa fa-filter"></i></span></a>
</span>
</span>
<!-- filter icon ends -->
<!-- filter input field begins -->
- <div ng-show="gridColumn.showFilter">
- <span ng-show="gridColumn.type !== 'date'">
- <input type="text" ng-model="filterText[gridColumn.id]" ng-blur="filterInGrid(gridColumn)">
- </span>
- <span ng-show="gridColumn.type === 'date'">
- <input placeholder="{{'start_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].start" data-ng-date readonly="readonly">
- <span ng-hide="filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == ''">
- <a href ng-click='removeStartFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>
- </span>
- <input placeholder="{{'end_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].end" data-ng-date readonly="readonly">
- <span ng-hide="filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == ''">
- <a href ng-click='removeEndFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>
- </span>
- </span>
- </div>
- <!-- filter input field ends -->
- </th>
- </tr>
+ <div ng-show="gridColumn.showFilter">
+ <span ng-show="gridColumn.type !== 'date'">
+ <input type="text" ng-model="filterText[gridColumn.id]" ng-blur="filterInGrid(gridColumn)">
+ </span>
+ <span ng-show="gridColumn.type === 'date'">
+ <input placeholder="{{'start_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].start" data-ng-date readonly="readonly">
+ <span ng-hide="filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == ''">
+ <a href ng-click='removeStartFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>
+ </span>
+ <input placeholder="{{'end_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].end" data-ng-date readonly="readonly">
+ <span ng-hide="filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == ''">
+ <a href ng-click='removeEndFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>
+ </span>
+ </span>
+ </div>
+ <!-- filter input field ends -->
+ </th>
+ </tr>
</thead>
<tbody id="list">
- <tr ng-repeat="trackedEntity in trackedEntityList.rows | paginate:rowsPerPage | orderBy:sortHeader:reverse | gridFilter:filterText:currentFilter"
+ <tr ng-repeat="trackedEntity in trackedEntityList.rows| paginate:rowsPerPage | orderBy:sortHeader:reverse | gridFilter:filterText:currentFilter"
ng-click="showDashboard(trackedEntity)">
<td class="max-column-width"
=== modified file 'dhis-2/dhis-web/pom.xml'
--- dhis-2/dhis-web/pom.xml 2014-03-19 10:37:49 +0000
+++ dhis-2/dhis-web/pom.xml 2014-03-26 09:44:22 +0000
@@ -27,7 +27,6 @@
<module>dhis-web-pivot</module>
<module>dhis-web-dashboard-integration</module>
<module>dhis-web-event-reports</module>
- <module>dhis-web-tracker-capture</module>
<module>dhis-web-caseentry</module>
<module>dhis-web-light</module>
<module>dhis-web-mobile</module>