2 # ---------------------------------------------------------------------------
3 # Copyright (C) 2008 Georgia Public Library Service / Equinox Software, Inc
4 # Mike Rylander <miker@esilibrary.com>
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License
8 # as published by the Free Software Foundation; either version 2
9 # of the License, or (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 # ---------------------------------------------------------------------------
18 if(!dojo._hasResource["fieldmapper.OrgUtils"]){
20 dojo._hasResource["fieldmapper.OrgUtils"] = true;
21 dojo.provide("fieldmapper.OrgUtils");
22 dojo.require("fieldmapper.Fieldmapper");
23 dojo.require("fieldmapper.OrgTree", true);
24 dojo.require("fieldmapper.OrgLasso", true);
26 fieldmapper.aou.slim_ok = true;
27 fieldmapper.aou.globalOrgTree = {};
28 fieldmapper.aou.OrgCache = {};
29 fieldmapper.aou.OrgCacheSN = {};
30 fieldmapper.aout.OrgTypeCache = {};
32 fieldmapper.aout.LoadOrgTypes = function () {
34 for (i in fieldmapper.aout.OrgTypeCache) {
38 var types = fieldmapper.standardRequest(['open-ils.actor','open-ils.actor.org_types.retrieve']);
40 for (i = 0; i < types.length; i++) {
41 fieldmapper.aout.OrgTypeCache[types[i].id()] = {
48 fieldmapper.aou.LoadOrg = function (id, slim_ok) {
49 if (slim_ok == null) slim_ok = fieldmapper.aou.slim_ok;
50 var slim_o = fieldmapper.aou.OrgCache[id];
52 if (slim_o && (slim_ok || slim_o.loaded))
53 return fieldmapper.aou.OrgCache[id].org;
55 var o = fieldmapper.standardRequest(['open-ils.actor','open-ils.actor.org_unit.retrieve'],[null,id]);
57 throw new Error("fieldmapper.aou.LoadOrg(): No org unit found with ID " + id);
59 o.children(slim_o.org.children());
60 fieldmapper.aou.OrgCache[o.id()] = { loaded : true, org : o };
63 fieldmapper.aou.findOrgUnit = fieldmapper.aou.LoadOrg;
66 for (var i = 0; i < _l.length; i++) {
67 fieldmapper.aou.OrgCache[_l[i][0]] = {
69 org : new fieldmapper.aou().fromHash({
74 opac_visible : _l[i][4],
81 for (var i in fieldmapper.aou.OrgCache) {
82 var x = fieldmapper.aou.OrgCache[i].org;
83 if (x.parent_ou() == null || x.parent_ou() == '') {
84 fieldmapper.aou.globalOrgTree = x;
88 var par = fieldmapper.aou.findOrgUnit(x.parent_ou(),true);
89 if (!par.children()) par.children([]);
90 par.children().push(x);
91 fieldmapper.aou.OrgCache[x.id()].treePtr = x;
94 for (var i = 0; i < globalOrgTypes.length; i++) {
95 fieldmapper.aout.OrgTypeCache[globalOrgTypes[i].id()] = {
97 type : globalOrgTypes[i]
103 /* ---------------------------------------------------------------------- */
105 fieldmapper.aou.prototype.fetchOrgSettingDefault = function (name) {
106 return this.standardRequest( fieldmapper.OpenSRF.methods.FETCH_ORG_SETTING, [this.id(), name] );
109 fieldmapper.aou.prototype.fetchOrgSettingBatch = function (nameList) {
110 return this.standardRequest( fieldmapper.OpenSRF.methods.FETCH_ORG_SETTING_BATCH, [this.id(), nameList] );
113 fieldmapper.aou.fetchOrgSettingDefault = function (orgId, name) {
114 return fieldmapper.standardRequest( fieldmapper.OpenSRF.methods.FETCH_ORG_SETTING, [orgId, name] );
117 fieldmapper.aou.fetchOrgSettingBatch = function (orgId, nameList) {
118 return fieldmapper.standardRequest( fieldmapper.OpenSRF.methods.FETCH_ORG_SETTING_BATCH, [orgId, nameList] );
121 fieldmapper.aout.findOrgType = function (id) {
122 fieldmapper.aout.LoadOrgTypes();
123 return fieldmapper.aout.OrgTypeCache[id].type;
126 fieldmapper.aou.prototype.findOrgDepth = function (id) {
127 if (!id) id = this.id;
128 if (!id) return null;
130 var org = fieldmapper.aou.findOrgUnit(id);
131 return fieldmapper.aout.findOrgType(
132 fieldmapper.aou.findOrgUnit(id).ou_type()
135 fieldmapper.aou.findOrgDepth = fieldmapper.aou.prototype.findOrgDepth;
137 fieldmapper.aout.findOrgTypeFromDepth = function (depth) {
138 if( depth == null ) return null;
139 fieldmapper.aout.LoadOrgTypes();
140 for( var i in fieldmapper.aout.OrgTypeCache ) {
141 var t = fieldmapper.aout.OrgTypeCache[i].type;
142 if( t.depth() == depth ) return t;
147 fieldmapper.aou.findOrgUnitSN = function (sn, slim_ok) {
148 if (slim_ok == null) slim_ok = fieldmapper.aou.slim_ok;
149 var org = fieldmapper.aou.OrgCacheSN[sn];
151 for (var i in fieldmapper.aou.OrgCache) {
152 var o = fieldmapper.aou.OrgCache[i];
153 if (o.org.shortname() == sn) {
154 fieldmapper.aou.OrgCacheSN[o.org.shortname()] = o;
159 if (!slim_ok && !fieldmapper.aou.OrgCache[org.id()].loaded) {
160 org = fieldmapper.standardRequest(fieldmapper.OpenSRF.methods.FETCH_ORG_BY_SHORTNAME, sn);
162 org.children = fieldmapper.aou.OrgCache[org.id()].children;
163 fieldmapper.aou.OrgCache[org.id()] = { loaded : true, org : org };
164 fieldmapper.aou.OrgCacheSN[org.shortname()] = { loaded : true, org : org };
172 fieldmapper.aou.prototype.orgNodeTrail = function(node, asId) {
173 if (!node) node = this;
174 if (!node) return [];
180 if (node.parent_ou())
181 node = fieldmapper.aou.findOrgUnit(node.parent_ou());
187 if (asId) return na.map(function(o) { return o.id(); });
190 fieldmapper.aou.orgNodeTrail = fieldmapper.aou.prototype.orgNodeTrail;
192 fieldmapper.aou.prototype.orgIsMine = function (me, org) {
193 if (this._isfieldmapper) {
198 if(!me || !org) return false;
200 if(me.id() == org.id()) return true;
202 for( var i in me.children() ) {
203 if(me.children()[i].orgIsMine(org)) return true;
208 /** Given an org id, returns an array of org units including
209 * the org for the ID provided and all descendant orgs */
210 fieldmapper.aou.descendantNodeList = function(orgId, asId) {
212 function addNode(node) {
215 list.push(node.id());
219 var children = node.children();
221 for(var i = 0; i < children.length; i++)
222 addNode(children[i]);
225 addNode(fieldmapper.aou.findOrgUnit(orgId));
229 fieldmapper.aou.fullPath = function(orgId, asId) {
231 var orgList = fieldmapper.aou.orgNodeTrail(fieldmapper.aou.findOrgUnit(orgId));
232 orgList.pop(); // prevent dupes
233 orgList = orgList.concat(fieldmapper.aou.descendantNodeList(orgId));
235 if(!asId) return orgList;
236 return orgList.map( function(node) { return node.id(); } );
239 dojo.addOnUnload( function () {
240 for (var i in fieldmapper.aou.OrgCache) {
241 x=fieldmapper.aou.OrgCache[i].treePtr;
246 fieldmapper.aou.OrgCache[i]=null;
248 fieldmapper.aou.globalOrgTree = null;
249 fieldmapper.aou.OrgCache = null;
250 fieldmapper.aou.OrgCacheSN = null;
251 fieldmapper.aout.OrgTypeCache = null;