dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #37737
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 19273: tracker and event capture now present textarea for text data elements of type longText.
------------------------------------------------------------
revno: 19273
committer: Abyot Asalefew Gizaw <abyota@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2015-06-03 14:18:22 +0200
message:
tracker and event capture now present textarea for text data elements of type longText.
modified:
dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-capture/views/defaultForm.html
dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/default-form.html
--
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-event-capture/views/defaultForm.html'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-capture/views/defaultForm.html 2015-06-02 12:25:03 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-capture/views/defaultForm.html 2015-06-03 12:18:22 +0000
@@ -30,8 +30,7 @@
max-date='0'
ng-model="currentEvent.eventDate"
ng-disabled="editingEventInFull"
- ng-required="true"
-
+ ng-required="true"
d2-date-validator
name="eventDate"
input-field-id='eventDate'
@@ -45,8 +44,7 @@
{{'latitude'| translate}}<span class="pull-right"><a href ng-click="showMap(currentEvent)" title="{{'get_from_map'| translate}}"><i class="fa fa-map-marker fa-2x"></i></a></span>
<td>
<input type="number"
- ng-model="currentEvent.coordinate.latitude"
-
+ ng-model="currentEvent.coordinate.latitude"
name="latitude"
d2-coordinate-validator
ng-required="false"
@@ -61,8 +59,7 @@
</td>
<td>
<input type="number"
- ng-model="currentEvent.coordinate.longitude"
-
+ ng-model="currentEvent.coordinate.longitude"
name="longitude"
d2-coordinate-validator
ng-required="false"
@@ -128,7 +125,8 @@
ng-required={{eventGridColumn.compulsory}}
name="foo"
input-field-id={{eventGridColumn.id}}
- style="width:99%;"/>
+ style="width:99%;">
+ </textarea>
</span>
<span ng-if="eventGridColumn.textType!=='longText'">
<input type="text"
@@ -154,8 +152,7 @@
<input type="text"
placeholder="{{dhis2CalendarFormat.keyDateFormat}}"
d2-date
- max-date="prStDes[eventGridColumn.id].allowFutureDate ? '' : 0"
-
+ max-date="prStDes[eventGridColumn.id].allowFutureDate ? '' : 0"
d2-date-validator
ng-model="currentEvent[eventGridColumn.id]"
ng-required={{eventGridColumn.compulsory}}
@@ -170,6 +167,14 @@
name="foo"
input-field-id={{eventGridColumn.id}} />
</div>
+ <div ng-switch-default>
+ <input type="text"
+ ng-model="currentEvent[eventGridColumn.id]"
+ ng-required={{eventGridColumn.compulsory}}
+ name="foo"
+ input-field-id={{eventGridColumn.id}}
+ style="width:99%;"/>
+ </div>
</div>
<div ng-messages="innerForm.foo.$error" ng-if="interacted(innerForm.foo)" class="required" ng-messages-include="../dhis-web-commons/angular-forms/error-messages.html">
</div>
@@ -179,6 +184,8 @@
</tbody>
</table>
</div>
+
+
<div ng-class="" ng-if='selectedProgramStage.programStageSections.length'>
<table class="dhis2-list-table-striped">
<tbody>
@@ -201,8 +208,7 @@
max-date='0'
ng-model="currentEvent.eventDate"
ng-disabled="editingEventInFull"
- ng-required="true"
-
+ ng-required="true"
d2-date-validator
name="eventDate"
input-field-id='eventDate'
@@ -217,8 +223,7 @@
</td>
<td>
<input type="number"
- ng-model="currentEvent.coordinate.latitude"
-
+ ng-model="currentEvent.coordinate.latitude"
name="latitude"
d2-coordinate-validator
ng-required="false"
@@ -233,8 +238,7 @@
</td>
<td>
<input type="number"
- ng-model="currentEvent.coordinate.longitude"
-
+ ng-model="currentEvent.coordinate.longitude"
name="longitude"
d2-coordinate-validator
ng-required="false"
@@ -264,65 +268,71 @@
{{prStDes[de.dataElement.id].dataElement.formName ? prStDes[de.dataElement.id].dataElement.formName : prStDes[de.dataElement.id].dataElement.name}}<span ng-if="prStDes[de.dataElement.id].compulsory" class="required">*</span> </td>
<td >
<ng-form name="innerForm">
- <div ng-switch="prStDes[de.dataElement.id].dataElement.type">
+ <div ng-if="prStDes[de.dataElement.id].dataElement.optionSetValue">
+ <span ng-if="!selectedProgram.dataEntryMethod || optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options.length > 8">
+ <input type="text"
+ class="typeahead"
+ placeholder=" "
+ ng-model="currentEvent[de.dataElement.id]"
+ typeahead="option.name as option.name for option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options | filter:$viewValue | limitTo:20"
+ typeahead-focus-first="false"
+ typeahead-editable=false
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ name="foo"
+ input-field-id={{de.dataElement.id}}
+ style="width:98%;"/>
+ </span>
+ <span ng-if="selectedProgram.dataEntryMethod && prStDes[de.dataElement.id].dataElement.optionSet.options.length < 7">
+ <label>
+ <input type="radio"
+ name="foo"
+ input-field-id={{de.dataElement.id}}
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-model="currentEvent[de.dataElement.id]"
+ value=""> {{'no_value' | translate}}<br>
+ </label>
+ <label ng-repeat="option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options">
+ <input type="radio"
+ name={{de.dataElement.id}}
+ input-field-id={{de.dataElement.id}}
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-model="currentEvent[de.dataElement.id]"
+ value={{option.name}}> {{option.name}}<br>
+ </label>
+ </span>
+ </div>
+ <div ng-if="!prStDes[de.dataElement.id].dataElement.optionSetValue" ng-switch="prStDes[de.dataElement.id].dataElement.type">
<div ng-switch-when="int">
<input type="number"
d2-number-validator
number-type={{prStDes[de.dataElement.id].dataElement.numberType}}
- ng-model="currentEvent[de.dataElement.id]"
-
+ ng-model="currentEvent[de.dataElement.id]"
ng-required={{prStDes[de.dataElement.id].compulsory}}
name="foo"
input-field-id={{de.dataElement.id}}
style="width:99%;"/>
</div>
<div ng-switch-when="string">
- <div class="container-fluid" ng-if="prStDes[de.dataElement.id].dataElement.optionSet">
- <div class="overflow-visible" ng-if="!selectedProgram.dataEntryMethod || optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options.length > 8">
- <input type="text"
- class="typeahead"
- placeholder=" "
- ng-model="currentEvent[de.dataElement.id]"
- typeahead="option.name as option.name for option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options | filter:$viewValue | limitTo:20"
- typeahead-focus-first="false"
- typeahead-editable=false
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- name="foo"
- input-field-id={{de.dataElement.id}}
- style="width:98%;"/>
- </div>
- <span ng-if="selectedProgram.dataEntryMethod && prStDes[de.dataElement.id].dataElement.optionSet.options.length < 7">
- <label>
- <input type="radio"
- name="foo"
- input-field-id={{de.dataElement.id}}
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- ng-model="currentEvent[de.dataElement.id]"
- value=""> {{'no_value' | translate}}<br>
- </label>
- <label ng-repeat="option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options">
- <input type="radio"
- name={{de.dataElement.id}}
- input-field-id={{de.dataElement.id}}
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- ng-model="currentEvent[de.dataElement.id]"
- value={{option.name}}> {{option.name}}<br>
- </label>
- </span>
- </div>
- <div ng-if="!prStDes[de.dataElement.id].dataElement.optionSet">
- <input type="text"
- ng-model="currentEvent[de.dataElement.id]"
-
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- name="foo"
- input-field-id={{de.dataElement.id}}
- style="width:99%;"/>
- </div>
+ <span ng-if="prStDes[de.dataElement.id].dataElement.textType==='longText'">
+ <textarea rows="3"
+ ng-model="currentEvent[de.dataElement.id]"
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ name="foo"
+ input-field-id={{de.dataElement.id}}
+ style="width:99%;">
+ </textarea>
+ </span>
+ <span ng-if="prStDes[de.dataElement.id].dataElement.textType!=='longText'">
+ <input type="text"
+ ng-model="currentEvent[de.dataElement.id]"
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ name="foo"
+ input-field-id={{de.dataElement.id}}
+ style="width:99%;"/>
+ </span>
</div>
<div ng-switch-when="bool">
- <select ng-model="currentEvent[de.dataElement.id]"
-
+ <select ng-model="currentEvent[de.dataElement.id]"
ng-required={{prStDes[de.dataElement.id].compulsory}}
name="foo"
input-field-id={{de.dataElement.id}}
@@ -336,8 +346,7 @@
<input type="text"
placeholder="{{dhis2CalendarFormat.keyDateFormat}}"
d2-date
- max-date="prStDes[de.dataElement.id].allowFutureDate ? '' : 0"
-
+ max-date="prStDes[de.dataElement.id].allowFutureDate ? '' : 0"
d2-date-validator
ng-model="currentEvent[de.dataElement.id]"
ng-required={{prStDes[de.dataElement.id].compulsory}}
@@ -352,6 +361,14 @@
name="foo"
input-field-id={{de.dataElement.id}}/>
</div>
+ <div ng-switch-default>
+ <input type="text"
+ ng-model="currentEvent[de.dataElement.id]"
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ name="foo"
+ input-field-id={{de.dataElement.id}}
+ style="width:99%;"/>
+ </div>
</div>
<div ng-messages="innerForm.foo.$error" ng-if="interacted(innerForm.foo)" class="required" ng-messages-include="../dhis-web-commons/angular-forms/error-messages.html">
</div>
@@ -402,4 +419,4 @@
</span>
<br><span ng-if="isFormInvalid()" class="horizontal-spacing red">{{'form_invalid' | translate}}</span>
</div>
-<!-- buttons for event registration / update ends -->
+<!-- buttons for event registration / update ends --
=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/default-form.html'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/default-form.html 2015-06-02 19:07:17 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-tracker-capture/components/dataentry/default-form.html 2015-06-03 12:18:22 +0000
@@ -1,4 +1,5 @@
-<form name="outerForm" novalidate>
+<form name="outerForm" novalidate>
+
<table class="table-borderless table-striped" ng-if='currentEvent && !currentStage.programStageSections.length'>
<thead>
<tr class="col-md-12">
@@ -76,16 +77,17 @@
name="foo"/>
</div>
<div ng-switch-when="string">
- <span ng-if="eventGridColumn.textType==='longText'">
+ <span ng-if="prStDe.dataElement.textType==='longText'">
<textarea rows="3"
ng-class='getInputNotifcationClass(prStDe.dataElement.id,false)'
ng-model="currentEvent[prStDe.dataElement.id]"
ng-required={{prStDe.compulsory}}
ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
ng-blur="saveDatavalue(prStDe, innerForm.foo)"
- name="foo"/>
+ name="foo">
+ </textarea>
</span>
- <span ng-if="eventGridColumn.textType!=='longText'">
+ <span ng-if="prStDe.dataElement.textType!=='longText'">
<input type="text"
ng-class='getInputNotifcationClass(prStDe.dataElement.id,false)'
ng-model="currentEvent[prStDe.dataElement.id]"
@@ -114,8 +116,7 @@
d2-date-validator
max-date="prStDe.allowFutureDate ? '' : 0"
ng-class='getInputNotifcationClass(prStDe.dataElement.id,false)'
- ng-model="currentEvent[prStDe.dataElement.id]"
-
+ ng-model="currentEvent[prStDe.dataElement.id]"
ng-required={{prStDe.compulsory}}
ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
blur-or-change="saveDatavalue(prStDe, innerForm.foo)"
@@ -130,11 +131,19 @@
ng-change="saveDatavalue(prStDe, innerForm.foo)"
name="foo"/>
</div>
+ <div ng-switch-default>
+ <input type="text"
+ ng-class='getInputNotifcationClass(prStDe.dataElement.id,false)'
+ ng-model="currentEvent[prStDe.dataElement.id]"
+ ng-required={{prStDe.compulsory}}
+ ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
+ ng-blur="saveDatavalue(prStDe, innerForm.foo)"
+ name="foo"/>
+ </div>
</div>
<div ng-messages="innerForm.foo.$error" ng-if="interacted(innerForm.foo)" class="required" ng-messages-include="../dhis-web-commons/angular-forms/error-messages.html">
</div>
- </ng-form>
-
+ </ng-form>
</td>
<td class="col-md-2" ng-if="allowProvidedElsewhereExists">
<div class="align-center" ng-show="prStDe.allowProvidedElsewhere">
@@ -175,68 +184,55 @@
</td>
<td class="col-md-5">
<ng-form name="innerForm">
- <div ng-switch="prStDes[de.dataElement.id].dataElement.type">
+ <div ng-if="prStDes[de.dataElement.id].dataElement.optionSetValue">
+ <div ng-if="!selectedProgram.dataEntryMethod || optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options.length >= 7">
+ <input type="text"
+ ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
+ typeahead="option.name as option.name for option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options | filter:$viewValue | limitTo:20"
+ typeahead-focus-first="false"
+ typeahead-editable="false"
+ ng-blur="saveDatavalue(prStDes[de.dataElement.id])"
+ name="foo"/>
+ </div>
+ <div ng-if="selectedProgram.dataEntryMethod && optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options.length < 7">
+ <label>
+ <input type="radio"
+ ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,true)'
+ name={{currentEvent[prStDes[de.dataElement.id].dataElement.id]}}
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
+ ng-change="saveDatavalue(prStDes[de.dataElement.id])"
+ value=""> {{'no_value' | translate}}<br>
+ </label><br>
+ <span ng-repeat="option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options">
+ <label>
+ <input type="radio"
+ ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,true)'
+ name={{currentEvent[prStDes[de.dataElement.id].dataElement.id]}}
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
+ ng-change="saveDatavalue(prStDes[de.dataElement.id])"
+ value={{option.name}}> {{option.name}}
+ </label><br>
+ </span>
+ </div>
+ </div>
+ <div ng-if="!prStDes[de.dataElement.id].dataElement.optionSetValue" ng-switch="prStDes[de.dataElement.id].dataElement.type">
<div ng-switch-when="int">
<input type="number"
d2-number-validator
number-type={{prStDe.dataElement.numberType}}
ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
- ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
-
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
ng-required={{prStDes[de.dataElement.id].compulsory}}
ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
ng-blur="saveDatavalue(prStDes[de.dataElement.id], innerForm.foo)"
name="foo"/>
- </div>
- <div ng-switch-when="string">
- <div ng-if="prStDes[de.dataElement.id].dataElement.optionSet">
- <div ng-if="!selectedProgram.dataEntryMethod || optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options.length >= 7">
- <input type="text"
- ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
- ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
-
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
- typeahead="option.name as option.name for option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options | filter:$viewValue | limitTo:20"
- typeahead-focus-first="false"
- typeahead-editable="false"
- ng-blur="saveDatavalue(prStDes[de.dataElement.id])"
- name="foo"/>
- </div>
- <div ng-if="selectedProgram.dataEntryMethod && optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options.length < 7">
- <label>
- <input type="radio"
- ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,true)'
- name={{currentEvent[prStDes[de.dataElement.id].dataElement.id]}}
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
- ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
- ng-change="saveDatavalue(prStDes[de.dataElement.id])"
- value=""> {{'no_value' | translate}}<br>
- </label><br>
- <span ng-repeat="option in optionSets[prStDes[de.dataElement.id].dataElement.optionSet.id].options">
- <label>
- <input type="radio"
- ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,true)'
- name={{currentEvent[prStDes[de.dataElement.id].dataElement.id]}}
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
- ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
- ng-change="saveDatavalue(prStDes[de.dataElement.id])"
- value={{option.name}}> {{option.name}}
- </label><br>
- </span>
- </div>
- </div>
- <div ng-if="!prStDes[de.dataElement.id].dataElement.optionSet">
- <input type="text"
- ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
- ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
- ng-required={{prStDes[de.dataElement.id].compulsory}}
- ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
- ng-blur="saveDatavalue(prStDes[de.dataElement.id])"
- name="foo"/>
- </div>
</div>
<div ng-switch-when="bool">
<select ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
@@ -249,7 +245,6 @@
<option value="false">{{'no'| translate}}</option>
<option value="true">{{'yes'| translate}}</option>
</select>
-
</div>
<div ng-switch-when="date">
<input type="text"
@@ -258,8 +253,7 @@
d2-date-validator
max-date="prStDes[de.dataElement.id].allowFutureDate ? '' : 0"
ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
- ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
-
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
ng-required={{prStDes[de.dataElement.id].compulsory}}
ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
blur-or-change="saveDatavalue(prStDes[de.dataElement.id])"
@@ -274,6 +268,36 @@
ng-change="saveDatavalue(prStDes[de.dataElement.id], innerForm.foo)"
name="foo"/>
</div>
+ <div ng-switch-when="string">
+ <span ng-if="prStDes[de.dataElement.id].dataElement.textType==='longText'">
+ <textarea rows="3"
+ ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
+ ng-blur="saveDatavalue(prStDes[de.dataElement.id], innerForm.foo)"
+ name="foo">
+ </textarea>
+ </span>
+ <span ng-if="prStDes[de.dataElement.id].dataElement.textType!=='longText'">
+ <input type="text"
+ ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
+ ng-blur="saveDatavalue(prStDes[de.dataElement.id], innerForm.foo)"
+ name="foo"/>
+ </span>
+ </div>
+ <div ng-switch-default>
+ <input type="text"
+ ng-class='getInputNotifcationClass(prStDes[de.dataElement.id].dataElement.id,false)'
+ ng-model="currentEvent[prStDes[de.dataElement.id].dataElement.id]"
+ ng-required={{prStDes[de.dataElement.id].compulsory}}
+ ng-disabled="selectedEnrollment.status !== 'ACTIVE' || currentEvent.editingNotAllowed"
+ ng-blur="saveDatavalue(prStDes[de.dataElement.id])"
+ name="foo"/>
+ </div>
</div>
<div ng-messages="innerForm.foo.$error" ng-if="interacted(innerForm.foo)" class="required" ng-messages-include="../dhis-web-commons/angular-forms/error-messages.html">
</div>