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',
101 ['$scope', '$uibModalInstance', function($scope, $uibModalInstance) {
102 $scope.focusMe = true;
103 $scope.record = egCore.idl.toHash(rb);
104 // non-integer numeric field require parseFloat
105 $scope.record.percentile = parseFloat($scope.record.percentile);
106 $scope.record_label = get_record_label();
107 $scope.fields = get_field_list($scope.record);
108 get_popularity_with_required();
109 $scope.ok = function(args) { $uibModalInstance.close(args) }
110 $scope.cancel = function () { $uibModalInstance.dismiss() }
112 }).result.then(function(args) {
113 var rb = new egCore.idl.rb();
114 if (action == 'update') rb.id(args.id);
116 rb.description(args.description);
117 rb.scope(args.scope);
118 rb.weight(args.weight);
119 rb.horizon_age(args.horizon_age);
120 rb.importance_age(args.importance_age);
121 rb.importance_interval(args.importance_interval);
122 rb.importance_scale(args.importance_scale);
123 rb.recalc_interval(args.recalc_interval);
124 rb.attr_filter(args.attr_filter);
125 rb.src_filter(args.src_filter);
126 rb.circ_mod_filter(args.circ_mod_filter);
127 rb.loc_grp_filter(args.loc_grp_filter);
128 rb.popularity_parameter(args.popularity_parameter);
129 rb.fixed_rating(args.fixed_rating);
130 rb.percentile(args.percentile);
131 rb.discard(args.discard);
132 rb.last_calc(args.last_calc);
133 if (action == 'create') {
134 egCore.pcrud.create(rb).then(function() { deferred.resolve(); });
136 egCore.pcrud.update(rb).then(function() { deferred.resolve(); });
139 return deferred.promise;
142 $scope.create_rb = function() {
143 var rb = new egCore.idl.rb();
145 // make sure an OU is selected by default
146 rb.scope(egCore.auth.user().ws_ou());
148 spawn_editor(rb, 'create').then(function() {
149 $scope.gridControls.refresh();
153 $scope.update_rb = function(selected) {
154 if (!selected || !selected.length) return;
156 egCore.pcrud.retrieve('rb', selected[0].id).then(function(rb) {
157 spawn_editor(rb, 'update').then(function() {
158 $scope.gridControls.refresh();
163 $scope.delete_rb = function(selected) {
164 if (!selected || !selected.length) return;
166 egCore.pcrud.retrieve('rb', selected[0].id).then(function(rb) {
167 egConfirmDialog.open(
168 egCore.strings.CONFIRM_DELETE_BADGE_TITLE,
169 egCore.strings.CONFIRM_DELETE_BADGE_BODY,
170 { name : rb.name(), id : rb.id() }
171 ).result.then(function() {
172 egCore.pcrud.remove(rb).then(function() {
173 $scope.gridControls.refresh();
179 $scope.gridControls = {
180 activateItem : function (item) {
181 $scope.update_rb([item]);
183 setQuery : function() {