1 angular.module('egAdminRating',
2 ['ngRoute','ui.bootstrap','egCoreMod','egUiMod','egGridMod'])
5 ['$scope','$q','$timeout','$location','$window','$uibModal',
6 'egCore','egGridDataProvider','egConfirmDialog',
7 function($scope , $q , $timeout , $location , $window , $uibModal ,
8 egCore , egGridDataProvider , egConfirmDialog) {
12 function get_record_label() {
13 return egCore.idl.classes['rb'].label;
16 function flatten_linked_values(cls, list) {
18 var fields = egCore.idl.classes[cls].fields;
21 angular.forEach(fields, function(fld) {
22 if (fld.datatype == 'id') {
24 selector = fld.selector ? fld.selector : id_field;
28 angular.forEach(list, function(item) {
29 var rec = egCore.idl.toHash(item);
38 horizon_required = {};
39 percentile_required = {};
40 function get_popularity_with_required() {
41 egCore.pcrud.retrieveAll(
42 'rp', {}, {atomic : true}
43 ).then(function(list) {
44 angular.forEach(list, function(item) {
45 horizon_required[item.id()] = item.require_horizon();
46 percentile_required[item.id()] = item.require_percentile();
51 function get_field_list(rec) {
52 var fields = egCore.idl.classes['rb'].fields;
56 angular.forEach(fields, function(fld) {
57 if (fld.datatype == 'link') {
58 egCore.pcrud.retrieveAll(
59 fld.class, {}, {atomic : true}
60 ).then(function(list) {
61 fld.linked_values = flatten_linked_values(fld.class, list);
64 if (fld.datatype == 'org_unit') {
65 rec[fld.name + '_ou'] = {};
66 rec[fld.name + '_ou']['org'] = egCore.org.get(rec[fld.name]);
67 rec[fld.name + '_ou']['update_org'] = function(org) {
68 rec[fld.name] = org.id();
71 if (fld.name == 'last_calc') {
72 fld['readonly'] = true;
74 fld.is_required = function(record) {
77 if (fld.name == 'name') {
78 fld.is_required = function(record) {
82 if (fld.name == 'horizon_age') {
83 fld.is_required = function(record) {
84 return horizon_required[record['popularity_parameter']] == 't';
87 if (fld.name == 'percentile') {
88 fld.is_required = function(record) {
89 return percentile_required[record['popularity_parameter']] == 't';
96 function spawn_editor(rb, action) {
97 var deferred = $q.defer();
99 templateUrl: './admin/local/rating/edit_badge',
102 ['$scope', '$uibModalInstance', function($scope, $uibModalInstance) {
103 $scope.focusMe = true;
104 $scope.record = egCore.idl.toHash(rb);
105 // non-integer numeric field require parseFloat
106 $scope.record.percentile = parseFloat($scope.record.percentile);
107 $scope.record_label = get_record_label();
108 $scope.fields = get_field_list($scope.record);
109 get_popularity_with_required();
110 $scope.ok = function(args) { $uibModalInstance.close(args) }
111 $scope.cancel = function () { $uibModalInstance.dismiss() }
113 }).result.then(function(args) {
114 var rb = new egCore.idl.rb();
115 if (action == 'update') rb.id(args.id);
117 rb.description(args.description);
118 rb.scope(args.scope);
119 rb.weight(args.weight);
120 rb.horizon_age(args.horizon_age);
121 rb.importance_age(args.importance_age);
122 rb.importance_interval(args.importance_interval);
123 rb.importance_scale(args.importance_scale);
124 rb.recalc_interval(args.recalc_interval);
125 rb.attr_filter(args.attr_filter);
126 rb.src_filter(args.src_filter);
127 rb.circ_mod_filter(args.circ_mod_filter);
128 rb.loc_grp_filter(args.loc_grp_filter);
129 rb.popularity_parameter(args.popularity_parameter);
130 rb.fixed_rating(args.fixed_rating);
131 rb.percentile(args.percentile);
132 rb.discard(args.discard);
133 rb.last_calc(args.last_calc);
134 if (action == 'create') {
135 egCore.pcrud.create(rb).then(function() { deferred.resolve(); });
137 egCore.pcrud.update(rb).then(function() { deferred.resolve(); });
140 return deferred.promise;
143 $scope.create_rb = function() {
144 var rb = new egCore.idl.rb();
146 // make sure an OU is selected by default
147 rb.scope(egCore.auth.user().ws_ou());
149 spawn_editor(rb, 'create').then(function() {
150 $scope.gridControls.refresh();
154 $scope.update_rb = function(selected) {
155 if (!selected || !selected.length) return;
157 egCore.pcrud.retrieve('rb', selected[0].id).then(function(rb) {
158 spawn_editor(rb, 'update').then(function() {
159 $scope.gridControls.refresh();
164 $scope.delete_rb = function(selected) {
165 if (!selected || !selected.length) return;
167 egCore.pcrud.retrieve('rb', selected[0].id).then(function(rb) {
168 egConfirmDialog.open(
169 egCore.strings.CONFIRM_DELETE_BADGE_TITLE,
170 egCore.strings.CONFIRM_DELETE_BADGE_BODY,
171 { name : rb.name(), id : rb.id() }
172 ).result.then(function() {
173 egCore.pcrud.remove(rb).then(function() {
174 $scope.gridControls.refresh();
180 $scope.gridControls = {
181 activateItem : function (item) {
182 $scope.update_rb([item]);
184 setQuery : function() {