return \@res;
}
+__PACKAGE__->register_method(
+ method => 'rec_hold_parts',
+ api_name => 'open-ils.search.metabib.record_hold_parts',
+ signature => q/
+ Returns a list of {label :foo, id : bar} objects for viable monograph parts
+ for a given record or metarecord.
+ /
+);
+
+sub rec_hold_parts {
+ my( $self, $conn, $args ) = @_;
+
+ my $rec = $$args{record};
+ my $mrec = $$args{metarecord};
+ my $pickup_lib = $$args{pickup_lib};
+ my $e = new_editor();
+
+ my $query = {
+ select => {bmp => ['id', 'label']},
+ from => 'bmp',
+ where => {
+ id => {
+ in => {
+ select => {'acpm' => ['part']},
+ where => {'+acp' => { 'deleted' => 'f'}},
+ distinct => 1,
+ }
+ }
+ }
+ };
+
+ if($rec) {
+ $query->{where}->{id}->{in}->{from} = {acpm => {acp => {join => {acn => {join => 'bre'}}}}};
+ $query->{where}->{id}->{in}->{where}->{'+bre'} = {id => $rec}
+
+ } else {
+
+ $query->{where}->{id}->{in}->{from} =
+ {acpm => {acp => {join => {acn => {join => {bre => {join => {
+ mmrsm => {
+ field => 'source',
+ fkey => 'id',
+ filter => {metarecord => $mrec}
+ }
+ }}}}}}}}; # weee
+ }
+
+ if(defined $pickup_lib) {
+ my $hard_boundary = $U->ou_ancestor_setting_value($pickup_lib, OILS_SETTING_HOLD_HARD_BOUNDARY);
+ if($hard_boundary) {
+ my $orgs = $e->json_query({from => ['actor.org_unit_descendants' => $pickup_lib, $hard_boundary]});
+ $query->{where}->{'+acp'}->{circ_lib} = [ map { $_->{id} } @$orgs ];
+ }
+ }
+
+ return $e->json_query($query);
+}
+
+
__PACKAGE__->register_method(
<!ENTITY common.call.number.label "Call Number:">
<!ENTITY common.isbn.label "ISBN:">
<!ENTITY common.issn.label "ISSN:">
+<!ENTITY common.mono_parts.label "Monograph Parts:">
<!ENTITY common.copy.barcode.label "Copy Barcode:">
<!ENTITY common.issuance_label.label "Issuance Label:">
<!ENTITY common.hold.place "Place hold for my account">
T : 'record',
V : 'volume',
I : 'issuance',
- C : 'copy'
+ C : 'copy',
+ P : 'part'
};
if( args.type == 'M' && ! args.metarecordObject)
holdArgs.metarecordObject = args.metarecordObject = findRecord(args.metarecord, 'M');
- if(doneCallback) doneCallback(args);
+ _h_set_parts(args, doneCallback);
}
);
req.send();
} else {
- if(doneCallback) doneCallback(args);
+ _h_set_parts(args, doneCallback);
}
return args;
}
+function _h_set_parts(args, doneCallback) {
+
+ if(args.recordParts) {
+ if(doneCallback) doneCallback(args);
+ } else {
+ var params = { pickup_lib: args.pickup_lib };
+
+ if (args.type == 'M') {
+ if( !args.metarecord && args.record) {
+ params.metarecord = args.metarecord = args.record;
+ delete(args.record);
+ } else {
+ params.metarecord = args.metarecordObject.doc_id();
+ }
+ } else {
+ params.record = args.record;
+ }
+
+ if( ! args.record ) {
+ if( args.metarecord )
+ params.metarecord = args.metarecord;
+ else
+ params.metarecord = args.metarecordObject.doc_id();
+ }
+
+ var req = new Request('open-ils.search:open-ils.search.metabib.record_hold_parts', params);
+ req.callback(
+ function(r) {
+ holdArgs.recordParts = r.getResultObject();
+ if(doneCallback)
+ doneCallback();
+ }
+ );
+ req.send();
+ }
+}
+
function holdsDrawWindow() {
hideMe($('holds_issuance_row'));
}
+ if(holdArgs.recordParts && holdArgs.recordParts.length) {
+ unHideMe($('holds_parts_row'));
+ dojo.forEach(
+ holdArgs.recordParts,
+ function(part) {
+ insertSelectorVal($('holds_parts_selector'), -1, part.label, part.id);
+ }
+ );
+ }
+
removeChildren($('holds_format'));
var mods_formats = rec.types_of_resource();
hold_type : holdArgs.type,
patronid : holdArgs.recipient.id(),
depth : 0,
- pickup_lib : pickuplib
+ pickup_lib : pickuplib,
+ partid : holdArgs.part
};
if(recurse) {
else
hold.email_notify(0);
+ var part = getSelectorVal($('holds_parts_selector'));
+ if(part) {
+ holdArgs.type = 'P';
+ holdArgs.part = part;
+ }
+
var target = holdArgs[holdTargetTypeMap[holdArgs.type]];
+ // a mono part is selected
+
hold.pickup_lib(org);
//hold.request_lib(org);
hold.requestor(holdArgs.requestor.id());
<td class='holds_cell' id='holds_physical_desc'> </td>
</tr>
+ <tr class='hide_me' id='holds_parts_row'>
+ <td class='holds_cell'>&common.mono_parts.label;</td>
+ <td class='holds_cell'>
+ <select id='holds_parts_selector'>
+ <option value=''></option>
+ </select>
+ </td>
+ </tr>
+
<tr class='hide_me' id='holds_cn_row'>
<td class='holds_cell'>&common.call.number.label;</td>
<td class='holds_cell'><b id='holds_cn'/> </td>