]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/staff/admin/serials/pattern_template.js
LP#1708291: web staff client serials module
[working/Evergreen.git] / Open-ILS / web / js / ui / default / staff / admin / serials / pattern_template.js
1 angular.module('egAdminConfig',
2     ['ngRoute','ui.bootstrap','egCoreMod','egUiMod','egGridMod','egFmRecordEditorMod','egSerialsMod','egSerialsAppDep'])
3
4 .controller('PatternTemplate',
5        ['$scope','$q','$timeout','$location','$window','$uibModal','egCore','egGridDataProvider',
6         'egConfirmDialog','ngToast',
7 function($scope , $q , $timeout , $location , $window , $uibModal , egCore , egGridDataProvider ,
8          egConfirmDialog , ngToast) {
9
10     egCore.startup.go(); // standalone mode requires manual startup
11
12     $scope.new_record = function() {
13         spawn_editor();
14     }
15
16     $scope.need_one_selected = function() {
17         var items = $scope.gridControls.selectedItems();
18         if (items.length == 1) return false;
19         return true;
20     };
21
22     $scope.edit_record = function(items) {
23         if (items.length != 1) return;
24         spawn_editor(items[0].id);
25     }
26
27     spawn_editor = function(id) {
28         var templ;
29         if (arguments.length == 1) {
30             templ = '<eg-edit-fm-record idl-class="spt" mode="update" record-id="id" on-save="ok" on-cancel="cancel" custom-field-templates="customFieldTemplates"></eg-edit-fm-record>';
31         } else {
32             templ = '<eg-edit-fm-record idl-class="spt" mode="create" on-save="ok" on-cancel="cancel" custom-field-templates="customFieldTemplates" org-default-allowed="owning_lib"></eg-edit-fm-record>';
33         }
34         gridControls = $scope.gridControls;
35         $uibModal.open({
36             template : templ,
37             controller : [
38                         '$scope', '$uibModalInstance',
39                 function($scope ,  $uibModalInstance) {
40                     $scope.id = id;
41
42                     $scope.openPatternEditorDialog = function(pred) {
43                         $uibModal.open({
44                             templateUrl: './serials/t_pattern_editor_dialog',
45                             size: 'lg',
46                             windowClass: 'eg-wide-modal',
47                             backdrop: 'static',
48                             controller:
49                                 ['$scope', '$uibModalInstance', function($scope, $uibModalInstance) {
50                                 $scope.focusMe = true;
51                                 $scope.showShare = false;
52                                 $scope.patternCode = pred.pattern_code;
53                                 $scope.ok = function(patternCode) { $uibModalInstance.close(patternCode) }
54                                 $scope.cancel = function () { $uibModalInstance.dismiss() }
55                             }]
56                         }).result.then(function (patternCode) {
57                             if (pred.pattern_code !== patternCode) {
58                                 pred.pattern_code = patternCode;
59                             }
60                         });
61                     }
62
63                     $scope.customFieldTemplates = {
64                         share_depth : {
65                             template : '<eg-share-depth-selector ng-model="rec_flat[field.name]">'
66                         },
67                         pattern_code : {
68                             handlers : {
69                                 openPatternEditorDialog : $scope.openPatternEditorDialog
70                             },
71                             template : '<button class="btn btn-default" ng-click="field.handlers.openPatternEditorDialog(rec_flat)">Pattern Wizard</button>' + // FIXME i18n
72                                        // using a required hidden input as a way to ensure that
73                                        // the pattern wizard has been used
74                                        '<input type="hidden" required ng-model="rec_flat[field.name]">'
75                         }
76                     }
77
78                     $scope.ok = function($event) {
79                         $uibModalInstance.close();
80                         gridControls.refresh();
81                     }
82     
83                     $scope.cancel = function($event) {
84                         $uibModalInstance.dismiss();
85                     }
86                 }
87             ]
88         });
89     }
90
91     $scope.delete_selected = function(selected) {
92         if (!selected || !selected.length) return;
93         var ids = selected.map(function(rec) { return rec.id });
94
95         egConfirmDialog.open(
96             egCore.strings.EG_CONFIRM_DELETE_PATTERN_TEMPLATE_TITLE,
97             egCore.strings.EG_CONFIRM_DELETE_PATTERN_TEMPLATE_BODY,
98             { count : ids.length }
99         ).result.then(function() {
100             var promises = [];
101             var list = [];
102             angular.forEach(selected, function(rec) {
103                 promises.push(
104                     egCore.pcrud.retrieve('spt', rec.id).then(function(r) {
105                         list.push(r);
106                     })
107                 );
108             })
109             $q.all(promises).then(function() {
110                 egCore.pcrud.remove(list).then(function() {
111                     ngToast.success(egCore.strings.PATTERN_TEMPLATE_SUCCESS_DELETE);
112                     $scope.gridControls.refresh();
113                 },
114                 function() {
115                     ngToast.success(egCore.strings.PATTERN_TEMPLATE_FAIL_DELETE);
116                 });
117             });
118         });
119     }
120
121     function generateQuery() {
122         return {
123             'id' : { '!=' : null },
124         }
125     }
126
127     $scope.gridControls = {
128         setQuery : function() {
129             return generateQuery();
130         },
131         setSort : function() {
132             return ['owning_lib.name','name'];
133         }
134     }
135 }])