start adding metarecord hold support
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 14 Jun 2006 22:00:59 +0000 (22:00 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 14 Jun 2006 22:00:59 +0000 (22:00 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@4624 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/common/js/config.js
Open-ILS/web/opac/common/js/utils.js
Open-ILS/web/opac/skin/default/js/holds.js
Open-ILS/web/opac/skin/default/xml/common/holds.xml

index 58fc173..2a8d2b8 100644 (file)
@@ -330,6 +330,7 @@ var FETCH_NON_CAT_TYPES                     = "open-ils.circ:open-ils.circ.non_cat_types.retrieve.
 var FETCH_BRE                                          = 'open-ils.search:open-ils.search.biblio.record_entry.slim.retrieve';
 var CHECK_USERNAME                             = 'open-ils.actor:open-ils.actor.username.exists';
 var FETCH_CIRC_BY_ID                           = 'open-ils.circ:open-ils.circ.retrieve';
+var FETCH_MR_DESCRIPTORS               = 'open-ils.search:open-ils.search.metabib.record_to_descriptors';
 
 /* ---------------------------------------------------------------------------- */
 
index 195f8ed..d39c87a 100644 (file)
@@ -521,3 +521,14 @@ function confirmId(id) {
 function goBack() { history.back(); }
 function goForward() { history.forward(); }
 
+
+function uniquify(arr) {
+       if(!arr) return [];
+       var newarr = [];
+       for( var i = 0; i < arr.length; i++ ) {
+               var item = arr[i];
+               if( ! grep( newarr, function(x) {return (x == item);}))
+                       newarr.push(item);
+       }
+       return newarr;
+}
index c77df30..0de3202 100644 (file)
@@ -1,7 +1,12 @@
 var holdsOrgSelectorBuilt = false;
 var holdArgs;
 
-
+/* 
+note: metarecord holds have a holdable_formats field that contains
+item_type(s)-item_forms(s)-language
+item_form and language are optional - if language exist and no 
+item_form is specified, use item_type(s)--language
+*/
 
 function holdsHandleStaff() {
        swapCanvas($('xulholds_box'));
@@ -64,7 +69,6 @@ function holdsDrawEditor(args) {
                holdArgs.status = req.result();
                _holdsUpdateEditHold();
        }  
-
 }
 
 
@@ -203,7 +207,39 @@ function _h_set_rec(args, doneCallback) {
        } else {
                args.recordObject = findRecord( args.record, 'T' );
        }
-       if(doneCallback) doneCallback(args);
+
+       if( args.type == 'T' || args.type == 'M' ) {
+               _h_set_rec_descriptors(args, doneCallback);
+       } else {
+               if(doneCallback) doneCallback(args);
+       }
+}
+
+function _h_set_rec_descriptors(args, doneCallback) {
+
+       /* grab the list of record desciptors attached to this records metarecord */
+       if( ! args.recordDescriptors )  {
+               var params = { record: args.record };
+
+               if( ! args.record ) {
+                       if( args.metarecord )
+                               params = { metarecord : args.metarecord };
+                       else 
+                               params = { metarecord : args.metarecordObject.id() };
+               }
+
+               var req = new Request(FETCH_MR_DESCRIPTORS, params );
+               req.callback(
+                       function(r) {
+                               args.recordDescriptors = r.getResultObject();
+                               if(doneCallback) doneCallback(args);
+                       }
+               );
+               req.send();
+
+       } else {
+               if(doneCallback) doneCallback(args);
+       }
 }
 
 
@@ -298,7 +334,68 @@ function __holdsDrawWindow() {
        }
 
        appendClear($('holds_physical_desc'), text(rec.physical_description()));
+
        if(holdArgs.type == 'M') hideMe($('hold_physical_desc_row'));
+
+       holdsSetFormatSelector();
+}
+
+function holdsSetFormatSelector() {
+       var type = holdArgs.type;
+       if( type == 'C' || type == 'V' ) return;
+
+       var data = holdGetAvailableTypesAndForms();
+       var avail_types = data.avail_types;
+       var avail_forms = data.avail_forms;
+       var item_lang   = data.item_lang;
+
+       /*
+       if( avail_types.length > 1 || avail_forms.length > 1 ) {
+               unHideMe($('holds_alt_formats_row'));
+               alert('lang: ' + item_lang + '\navail types: ' + avail_types + '\navail forms: ' + avail_forms);
+       }
+       */
+}
+
+
+function holdGetAvailableTypesAndForms() {
+
+       var item_types = [];
+       var item_forms  = [];
+       var item_lang;
+
+       var type = holdArgs.type;
+       var desc = holdArgs.recordDescriptors;
+       var rec = holdArgs.record;
+       var mrec = holdArgs.metarecord;
+
+       if( type == 'T' ) {
+
+               /* find our language */
+               for( var i = 0; i < desc.length; i++ ) {
+                       var d = desc[i];
+                       if( d.record() == holdArgs.record ) {
+                               item_lang = d.item_lang();
+                               break;
+                       }
+               }
+       }
+
+       for( var i = 0; i < desc.length; i++ ) {
+               var d = desc[i];
+               if( d.item_lang() != item_lang ) continue;
+               item_types.push(d.item_type());
+               item_forms.push(d.item_form());
+       }
+
+       item_types = uniquify(item_types);
+       item_forms = uniquify(item_forms);
+
+       return { 
+               avail_types : item_types, 
+               avail_forms     : item_forms, 
+               item_lang : item_lang 
+       };
 }
 
 
index 25867cf..8f112dd 100644 (file)
                                                <select id='holds_org_selector'> </select>
                                        </td>
                                </tr>
+                               <tr id='holds_alt_formats_row' class='hide_me'>
+                                       <td class='holds_cell'>
+                                               I would also be interested in receiving my hold in the following alternate formats:
+                                       </td>
+                                       <td class='holds_cell'>
+                                       </td>
+                               </tr>
+
                                <tr>
                                        <td class='holds_cell' align='center' colspan='2'>
                                                <button id='holds_submit'>&opac.holds.placeHold;</button>