]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/js/ui/default/staff/services/user-bucket.js
487c385843d8d209e0045e0c9831c7423f3b17ab
[Evergreen.git] / Open-ILS / web / js / ui / default / staff / services / user-bucket.js
1 /**
2  * User Buckets
3  *
4  */
5
6 angular.module('egUserBucketMod', ['egCoreMod'])
7 .factory('bucketSvc', ['$q','egCore', function($q,  egCore) {
8
9     var service = {
10         allBuckets : [], // un-fleshed user buckets
11         barcodeString : '', // last scanned barcode
12         barcodeRecords : [], // last scanned barcode results
13         currentBucket : null, // currently viewed bucket
14
15         // per-page list collections
16         pendingList : [],
17         viewList  : [],
18
19         // fetches all staff/user buckets for the authenticated user
20         // this function may only be called after startup.
21         fetchUserBuckets : function(force) {
22             if (this.allBuckets.length && !force) return;
23             var self = this;
24             return egCore.net.request(
25                 'open-ils.actor',
26                 'open-ils.actor.container.retrieve_by_class.authoritative',
27                 egCore.auth.token(), egCore.auth.user().id(), 
28                 'user', 'staff_client'
29             ).then(function(buckets) { self.allBuckets = buckets });
30         },
31
32         createBucket : function(name, desc) {
33             var deferred = $q.defer();
34             var bucket = new egCore.idl.cub();
35             bucket.owner(egCore.auth.user().id());
36             bucket.name(name);
37             bucket.description(desc || '');
38             bucket.btype('staff_client');
39
40             egCore.net.request(
41                 'open-ils.actor',
42                 'open-ils.actor.container.create',
43                 egCore.auth.token(), 'user', bucket
44             ).then(function(resp) {
45                 if (resp) {
46                     if (typeof resp == 'object') {
47                         console.error('bucket create error: ' + js2JSON(resp));
48                         deferred.reject();
49                     } else {
50                         deferred.resolve(resp);
51                     }
52                 }
53             });
54
55             return deferred.promise;
56         },
57
58         // edit the current bucket.  since we edit the 
59         // local object, there's no need to re-fetch.
60         editBucket : function(args) {
61             var bucket = service.currentBucket;
62             bucket.name(args.name);
63             bucket.description(args.desc);
64             bucket.pub(args.pub);
65             return egCore.net.request(
66                 'open-ils.actor',
67                 'open-ils.actor.container.update',
68                 egCore.auth.token(), 'user', bucket
69             );
70         }
71     }
72
73     // returns 1 if full refresh is needed
74     // returns 2 if list refresh only is needed
75     service.bucketRefreshLevel = function(id) {
76         if (!service.currentBucket) return 1;
77         if (service.bucketNeedsRefresh) {
78             service.bucketNeedsRefresh = false;
79             service.currentBucket = null;
80             return 1;
81         }
82         if (service.currentBucket.id() != id) return 1;
83         return 2;
84     }
85
86     // returns a promise, resolved with bucket, rejected if bucket is
87     // not fetch-able
88     service.fetchBucket = function(id) {
89         var refresh = service.bucketRefreshLevel(id);
90         if (refresh == 2) return $q.when(service.currentBucket);
91
92         var deferred = $q.defer();
93
94         egCore.net.request(
95             'open-ils.actor',
96             'open-ils.actor.container.flesh.authoritative',
97             egCore.auth.token(), 'user', id
98         ).then(function(bucket) {
99             var evt = egCore.evt.parse(bucket);
100             if (evt) {
101                 console.debug(evt);
102                 deferred.reject(evt);
103                 return;
104             }
105             service.currentBucket = bucket;
106             deferred.resolve(bucket);
107         });
108
109         return deferred.promise;
110     }
111
112     // deletes a single container item from a bucket by container item ID.
113     // promise is rejected on failure
114     service.detachUser = function(itemId) {
115         var deferred = $q.defer();
116         egCore.net.request(
117             'open-ils.actor',
118             'open-ils.actor.container.item.delete',
119             egCore.auth.token(), 'user', itemId
120         ).then(function(resp) { 
121             var evt = egCore.evt.parse(resp);
122             if (evt) {
123                 console.error(evt);
124                 deferred.reject(evt);
125                 return;
126             }
127             console.log('detached bucket item ' + itemId);
128             deferred.resolve(resp);
129         });
130
131         return deferred.promise;
132     }
133
134     // delete bucket by ID.
135     // resolved w/ response on successful delete,
136     // rejected otherwise.
137     service.deleteBucket = function(id) {
138         var deferred = $q.defer();
139         egCore.net.request(
140             'open-ils.actor',
141             'open-ils.actor.container.full_delete',
142             egCore.auth.token(), 'user', id
143         ).then(function(resp) {
144             var evt = egCore.evt.parse(resp);
145             if (evt) {
146                 console.error(evt);
147                 deferred.reject(evt);
148                 return;
149             }
150             deferred.resolve(resp);
151         });
152         return deferred.promise;
153     }
154
155     return service;
156 }])