var noEmailMessage;\r
var noEmailMessageXUL;\r
\r
+var holdTargetTypeMap = {\r
+ M : 'metarecord',\r
+ T : 'record',\r
+ V : 'volume',\r
+ I : 'issuance',\r
+ C : 'copy'\r
+};\r
+\r
function hideResultsPage(bool) {\r
if(!bool) {\r
unHideMe($('result_header'));\r
args.type = hold.hold_type();\r
var target = hold.target();\r
\r
- switch(args.type) {\r
- case 'M':\r
- args.metarecord = target;\r
- break;\r
- case 'T':\r
- args.record = target;\r
- break;\r
- case 'V':\r
- args.volume = target;\r
- break;\r
- case 'C':\r
- args.copy = target;\r
- break;\r
- }\r
+ args[holdTargetTypeMap[args.type]] = target;\r
return args;\r
}\r
\r
if( type == 'V' ) {\r
_h_set_vol(args, doneCallback);\r
\r
+ } else if (type == 'I') {\r
+ _h_set_issuance(args, doneCallback);\r
} else {\r
if( type == 'T' ) {\r
_h_set_rec(args, doneCallback);\r
}\r
}\r
\r
+function _h_set_issuance(args, doneCallback) {\r
+\r
+ if( args.issuanceObject ) {\r
+ args.issuance = args.issuanceObject.id();\r
+ args.record = args.issuanceObject.subscription().record_entry();\r
+ _h_set_rec(args, doneCallback);\r
+\r
+ } else {\r
+\r
+ var vreq = new Request(FETCH_ISSUANCE, [args.issuance]);\r
+ vreq.callback(\r
+ function(r) {\r
+ var issuance = r.getResultObject()[0];\r
+ args.issuanceObject = issuance;\r
+ args.record = issuance.subscription().record_entry();\r
+ _h_set_rec(args, doneCallback);\r
+ }\r
+ );\r
+ vreq.send();\r
+ }\r
+}\r
+\r
function _h_set_rec(args, doneCallback) {\r
\r
if(args.recordObject) \r
appendClear($('holds_title'), text(rec.title()));\r
appendClear($('holds_author'), text(rec.author()));\r
\r
- if( holdArgs.type == 'V' || holdArgs.type == 'C' ) {\r
+ if( holdArgs.type == 'I' ) {\r
+ unHideMe($('holds_type_row'));\r
+ unHideMe($('holds_is_issuance'));\r
+ unHideMe($('holds_issuance_row'));\r
+ appendClear($('holds_issuance_label'), text(holdArgs.issuanceObject.label()));\r
+\r
+ } else if( holdArgs.type == 'V' || holdArgs.type == 'C' ) {\r
+\r
\r
unHideMe($('holds_type_row'));\r
unHideMe($('holds_cn_row'));\r
hideMe($('holds_type_row'));\r
hideMe($('holds_copy_row'));\r
hideMe($('holds_cn_row'));\r
+ hideMe($('holds_issuance_row'));\r
}\r
\r
removeChildren($('holds_format'));\r
\r
function holdsSetFormatSelector() {\r
var type = holdArgs.type;\r
- if( type == 'C' || type == 'V' || holdArgs.editHold ) return;\r
+ if( type == 'C' || type == 'V' || type == 'I' || holdArgs.editHold ) return;\r
\r
var data = holdsGetFormats();\r
var avail_formats = data.avail_formats;\r
var args = { \r
titleid : holdArgs.record,\r
volume_id : holdArgs.volume,\r
+ issuanceid : holdArgs.issuance,\r
copy_id : holdArgs.copy,\r
hold_type : holdArgs.type,\r
patronid : holdArgs.recipient.id(),\r
else\r
hold.email_notify(0);\r
\r
- var target;\r
-\r
- switch(holdArgs.type) {\r
- case 'M':\r
- target = holdArgs.metarecord; break;\r
- case 'T':\r
- target = holdArgs.record; break;\r
- case 'V':\r
- target = holdArgs.volume; break;\r
- case 'C':\r
- target = holdArgs.copy; break;\r
- }\r
-\r
-\r
+ var target = holdArgs[holdTargetTypeMap[holdArgs.type]];\r
\r
hold.pickup_lib(org); \r
//hold.request_lib(org); \r
attachEvt("rdetail", "recordDrawn", rdetailBuildInfoRows);\r
attachEvt("rdetail", "recordDrawn", rdetailGetPageIds);\r
\r
+dojo.requireLocalization("openils.opac", "opac");\r
+\r
/* Per-skin configuration settings */\r
var rdetailLocalOnly = true;\r
var rdetailShowLocal = true;\r
var rdetailShowCopyLocation = true;\r
var rdetailGoogleBookPreview = false;\r
-var rdetailDisplaySerialHoldings = true;\r
var rdetailEnableRefWorks = false;\r
var rdetailRefWorksHost = 'http://www.refworks.com';\r
\r
var localTOC;\r
var cachedRecords;\r
var _statusPositions = {};\r
-var opac_strings;\r
+var opac_strings = dojo.i18n.getLocalization("openils.opac", "opac");\r
\r
var nextContainerIndex;\r
\r
hideMe(dojo.byId('canvas_main'));\r
}\r
\r
-/* serials are currently the only use of Dojo strings in the OPAC */\r
- if (rdetailDisplaySerialHoldings) {\r
- dojo.require("dijit.Menu");\r
- dojo.require("dijit.form.Button");\r
- dojo.requireLocalization("openils.opac", "opac");\r
- opac_strings = dojo.i18n.getLocalization("openils.opac", "opac");\r
- }\r
}\r
\r
function rdetailReload() {\r
}\r
}\r
\r
-\r
- if (rdetailDisplaySerialHoldings) {\r
- var req = new Request(FETCH_MFHD_SUMMARY, getRid());\r
- req.callback(_holdingsDraw);\r
- req.send();\r
- if (isXUL()) {\r
- var here = findOrgUnit(getLocation());\r
- dojo.place("<div id='mfhd_ad_menu' class='hide_me'></div>", "rdetail_details_table", "after");\r
- var mfhd_add = new dijit.Menu({style:"float: right;"});\r
- new dijit.MenuItem({onClick:function(){\r
- var req = new Request(CREATE_MFHD_RECORD, G.user.session, 1, here.id(), getRid());\r
- var res = req.send();\r
- alert(dojo.string.substitute(opac_strings.CREATED_MFHD_RECORD, [here.name()]));\r
- }, label:opac_strings.CREATE_MFHD}).placeAt(mfhd_add);\r
- mfhd_add.placeAt('mfhd_ad_menu');\r
- }\r
- }\r
-\r
detachAllEvt("result", "idsReceived");\r
G.evt.result.hitCountReceived = [];\r
G.evt.result.recordReceived = [];\r
GBPViewer.load('ISBN:' + cleanISBN(record.isbn()) );\r
\r
}\r
+\r
+function rdetailDrawExpandedHoldings(anchor, bibid, type) {\r
+ var offsets = {"basic": 0, "index": 0, "supplement": 0};\r
+ var limit = 10; /* XXX give user control over this? */\r
+ var target_id = "holding_type_" + type;\r
+ var target = dojo.byId(target_id);\r
+\r
+ anchor.innerHTML = "[-]";\r
+ anchor.oldonclick = anchor.onclick;\r
+ anchor.onclick = function() {\r
+ anchor.onclick = anchor.oldonclick;\r
+ anchor.innerHTML = "[+]";\r
+ dojo.empty(target);\r
+ };\r
+\r
+ function _load() {\r
+ dojo.empty(target);\r
+ fieldmapper.standardRequest(\r
+ ["open-ils.serial",\r
+ "open-ils.serial.received_siss.retrieve.by_bib.atomic"], {\r
+ "params": [bibid, {"offset": offsets[type], "limit": limit}],\r
+ "async": true,\r
+ "oncomplete": function(r) {\r
+ try {\r
+ if (msg = r.recv().content()) { /* sic, assignment */\r
+ if (!msg.length) return;\r
+ offsets[type] += msg.length;\r
+ var table = dojo.create("table", null, target);\r
+ dojo.forEach(\r
+ msg, function(o) {\r
+ var tr = dojo.create("tr", null, table);\r
+ dojo.create(\r
+ "td", {\r
+ "innerHTML": o.issuance.label(),\r
+ "style": {"paddingLeft": "3em"}\r
+ }, tr\r
+ );\r
+\r
+ if (!o.has_units) return;\r
+ /* can't place holds if no units */\r
+ var td = dojo.create("td", null, tr);\r
+ dojo.create(\r
+ "a", {\r
+ "href":"javascript:void(0);",\r
+ "style": {"marginLeft": "1.5em"},\r
+ "onclick": function() {\r
+ holdsDrawEditor({\r
+ "type": "I",\r
+ "issuance": o.issuance.id()\r
+ });\r
+ },\r
+ "innerHTML": "[" +\r
+ opac_strings.PLACE_HOLD + "]"\r
+ }, td\r
+ );\r
+ }\r
+ );\r
+ if (msg.length == limit) {\r
+ dojo.create("br", null, target);\r
+ dojo.create(\r
+ "a", {\r
+ "href": "javascript:void(0);",\r
+ "innerHTML":\r
+ "[" + opac_strings.MORE + "]",\r
+ "onclick": _load\r
+ }, target\r
+ );\r
+ }\r
+ }\r
+ } catch (E) {\r
+ void(0);\r
+ }\r
+ }\r
+ }\r
+ );\r
+ }\r
+ _load();\r
+}\r
<td class='holds_cell'><b id='holds_cn'/> </td>\r
</tr>\r
\r
+ <tr class='hide_me' id='holds_issuance_row'>\r
+ <td class='holds_cell'>&common.issuance_label.label;</td>\r
+ <td class='holds_cell'><b id='holds_issuance_label'/> </td>\r
+ </tr>\r
+\r
<tr class='hide_me' id='holds_copy_row'>\r
<td class='holds_cell'>&common.copy.barcode.label;</td>\r
<td class='holds_cell'><b id='holds_copy'/> </td>\r
<tr class='hide_me' id='holds_type_row'>\r
<td class='holds_cell'>&common.hold.type.label;</td>\r
<td class='holds_cell hide_me' id='holds_is_cn'><b>&common.hold.volume;</b></td>\r
+ <td class='holds_cell hide_me' id='holds_is_issuane'><b>&common.hold.issuance;</b></td>\r
<td class='holds_cell hide_me' id='holds_is_copy'><b>&common.hold.copy;</b></td>\r
</tr>\r
\r
</span>\r
</td>\r
</tr>\r
+ <tr class="result_table_title_cell hide_me">\r
+ <td class="rdetail_desc">\r
+ <strong>&rdetail.summary.issues_held;</strong>\r
+ </td>\r
+ <td templated="true" type="opac/slot-data"\r
+ query="datafield[tag='901'] subfield[code='c']"\r
+ class="rdetail_item" colspan="3">\r
+ ${holdingsStatement}\r
+ <span class="hide_me" name="holdingsStatement" type="opac/template-value"><![CDATA[\r
+ if (fetchOrgSettingDefault(\r
+ getLocation(),\r
+ "opac.fully_compressed_serial_holdings"\r
+ )) {\r
+ var bibid = BT.textContent(item_list[0]);\r
+ var blob = fieldmapper.standardRequest(\r
+ ["open-ils.serial",\r
+ "open-ils.serial.bib.summary_statements"],\r
+ [bibid, {\r
+ "orgid": getLocation(), "depth": getDepth()\r
+ }]\r
+ );\r
\r
+ var fake = dojo.create("td");\r
+ var something = false;\r
+\r
+ for (var i in blob) {\r
+ if (!blob[i].length) continue;\r
+ if (something) dojo.create("br", null, fake);\r
+ something = true;\r
+\r
+ var a = dojo.create(\r
+ "a", {\r
+ "innerHTML": "[+]",\r
+ "href": "javascript:void(0);",\r
+ "onclick":\r
+ "rdetailDrawExpandedHoldings(this,"+\r
+ bibid + ",'" + i + "');",\r
+ "style": {"marginRight": "1.5em"}\r
+ }, fake\r
+ );\r
+ dojo.create(\r
+ "span", {\r
+ "innerHTML": blob[i].join(", ")\r
+ }, fake\r
+ );\r
+ dojo.create(\r
+ "span", {"id": "holding_type_" + i}, fake\r
+ );\r
+ }\r
+\r
+ if (something)\r
+ unHideMe(slot.parentNode);\r
+\r
+ return fake.innerHTML;\r
+ } else {\r
+ return "";\r
+ }\r
+ ]]></span>\r
+ </td>\r
+ </tr>\r
\r
\r
<tr class='hide_me' id='rdetail_online_row'>\r