LP#1618949 Patron edit forces required stat cats
authorBilly Horn <bhorn@catalystdevworks.com>
Mon, 7 Nov 2016 22:29:53 +0000 (14:29 -0800)
committerKathy Lussier <klussier@masslnc.org>
Wed, 17 May 2017 20:06:11 +0000 (16:06 -0400)
Display required stat cats as required form fields and prevent the
patron editor form from submitting when required stat cats do not have
values.

Signed-off-by: Billy Horn <bhorn@catalystdevworks.com>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js

index 4acd97e..073ccd4 100644 (file)
@@ -853,16 +853,20 @@ within the "form" by name for validation.
 </div>
 
 <div class="alert alert-success row" role="alert" 
-    ng-show="show_field('stat_cats')" ng-if="stat_cats.length > 0">
+    ng-show="show_field('stat_cats') || hasRequiredStatCat" ng-if="stat_cats.length > 0">
     <div class="col-md-6">[% l('Statistical Categories') %]</div>
 </div>
 
-<div class="row reg-field-row" 
-    ng-show="show_field('stat_cats')" ng-repeat="cat in stat_cats">
+<div class="row reg-field-row"
+     ng-show="show_field('stat_cats') || hasRequiredStatCat" ng-repeat="cat in stat_cats">
+     <!-- Display this stat cat when displaying all stat cats
+       or when this stat cat is required.  Wrap the body of 
+       stat cat display in a div for easy show/hide.  -->
+  <div ng-if="show_field('stat_cats') || cat.required() == 1">
   <div class="col-md-3 reg-field-label">
     <label>{{cat.name()}}</label>
   </div>
-  <div class="col-md-3 reg-field-input">
+  <div class="reg-field-input">
 
     <!-- Editable typeahead is not support in this version of 
         angularjs-bootstrap.  Requires Angular 1.4 and 
@@ -896,9 +900,10 @@ within the "form" by name for validation.
 
   <!-- Stat cat retrieval API uses open-ils.storage under the covers
       which represents DB bools at 1/0 instead of cstore-style t/f -->
-  <div class="col-md-3 reg-field-input" ng-if="cat.allow_freetext() == '1'">
-    <input type="text" ng-model="stat_cat_entry_maps[cat.id()]"/>
+  <div class="col-md-3 reg-field-input" ng-show="show_field('stat_cats') || hasRequiredStatCat" ng-if="cat.allow_freetext() == '1'">
+    <input type="text" ng-model="stat_cat_entry_maps[cat.id()]" class="form-control" ng-required="cat.required() == 1"/>
   </div>
+  </div><!-- show/hide -->
 </div>
 
 <!-- surveys -->
index f0a45cd..d6e1c47 100644 (file)
@@ -1216,6 +1216,9 @@ function($scope , $routeParams , $q , $uibModal , $window , egCore ,
         if ($scope.patron.isnew) 
             set_new_patron_defaults(prs);
 
+        $scope.hasRequiredStatCat = prs.stat_cats.filter(
+                function(cat) {return cat.required() == 1} ).length > 0;
+            
         $scope.page_data_loaded = true;
 
         prs.set_field_patterns(field_patterns);
@@ -1271,7 +1274,7 @@ function($scope , $routeParams , $q , $uibModal , $window , egCore ,
         'stat_cats' : 1,
         'surveys' : 1
     }; 
-
+    
     // Returns true if the selected field should be visible
     // given the current required/suggested/all setting.
     // The visibility flag applied to each field as a result of calling