Retrieve a circ object by id
@param authtoken Login session key
@pararm circid The id of the circ object
+ @param all_circ Returns an action.all_circulation object instead
+ of an action.circulation object to pick up aged circs.
/
);
+
sub retrieve_circ {
- my( $s, $c, $a, $i ) = @_;
+ my( $s, $c, $a, $i, $all_circ ) = @_;
my $e = new_editor(authtoken => $a);
return $e->event unless $e->checkauth;
- my $circ = $e->retrieve_action_circulation($i) or return $e->event;
- if( $e->requestor->id ne $circ->usr ) {
+ my $method = $all_circ ?
+ 'retrieve_all_action_circulation' :
+ 'retrieve_action_circulation';
+ my $circ = $e->$method($i) or return $e->event;
+ if( $e->requestor->id ne ($circ->usr || '') ) {
return $e->event unless $e->allowed('VIEW_CIRCULATIONS');
}
return $circ;
$count = 4 unless defined $count;
}
- return $e->search_action_circulation([
+ return $e->search_action_all_circulation([
{target_copy => $copyid},
{limit => $count, order_by => { circ => "xact_start DESC" }}
]);
'recurring_fine_rule'
],
},
- order_by => { circ => 'xact_start desc' },
+ order_by => { combcirc => 'xact_start desc' },
limit => 1
}
])->[0];
/* short-circuit this behavior. We don't want to mark an item damaged and still have it circulating. At least for now. Wait until someone asks for it. */
auto_checkin = true;
JSAN.use('patron.util');
+
+ if (!my_circ.usr()) {
+ alert(
+ document.getElementById('catStrings')
+ .getFormattedString(
+ 'staff.cat.util.mark_item_damaged.item_no_linked_patron',
+ copies[i].barcode()
+ )
+ );
+ continue;
+ }
var patron_obj = patron.util.retrieve_fleshed_au_via_id( ses(), my_circ.usr() );
var patron_name = patron.util.format_name( patron_obj ) + ' : ' + patron_obj.card().barcode();
var msg = $("catStrings").getFormattedString('staff.cat.util.mark_item_damaged.item_circulating_to_patron', [
if (details.circ.usr()) {
set("circ_usr", details.circ.usr());
- network.simple_request('FM_AU_FLESHED_RETRIEVE_VIA_ID',[ ses(), details.circ.usr() ], function(preq) {
+ network.simple_request('FM_AU_FLESHED_RETRIEVE_VIA_ID',
+ [ ses(), details.circ.usr() ], function(preq) {
var r_au = preq.getResultObject();
JSAN.use('patron.util');
set(
for (var i = 0; i < obj.selection_list.length; i++) {
var circs = obj.network.simple_request('FM_CIRC_RETRIEVE_VIA_COPY',[ses(),obj.selection_list[i].copy_id,1]);
if (circs.length > 0) {
- patrons[circs[0].usr()] = 1;
+ if (circs[0].usr()) {
+ patrons[circs[0].usr()] = 1;
+ } else {
+ alert(
+ document.getElementById('circStrings')
+ .getFormattedString(
+ 'staff.circ.item_no_user',
+ [obj.selection_list[i].barcode])
+ );
+ }
} else {
alert(document.getElementById('circStrings').getFormattedString('staff.circ.item_no_circs', [obj.selection_list[i].barcode]));
}
if (get_bool(r_circ.opac_renewal() ) ) r += 'OPAC ';
if (get_bool(r_circ.phone_renewal() ) ) r += 'PHONE ';
$('renewal').value = r || document.getElementById('circStrings').getString('staff.circ.checkout.no.btn');
- g.patron_id = r_circ.usr(); $('add_billing').disabled = false;
- g.network.simple_request('FM_AU_FLESHED_RETRIEVE_VIA_ID',[ ses(), r_circ.usr() ], function(preq) {
- var r_au = preq.getResultObject();
- JSAN.use('patron.util');
- $('patron_name').value = patron.util.format_name( r_au ) + ' : ' + r_au.card().barcode();
- patron.util.set_penalty_css(r_au);
- });
+ g.patron_id = r_circ.usr();
+ alert(g.patron_id);
+ if (g.patron_id) {
+ $('add_billing').disabled = false;
+ g.network.simple_request(
+ 'FM_AU_FLESHED_RETRIEVE_VIA_ID',[ ses(), r_circ.usr() ], function(preq) {
+ var r_au = preq.getResultObject();
+ JSAN.use('patron.util');
+ $('patron_name').value = patron.util.format_name( r_au ) + ' : ' + r_au.card().barcode();
+ patron.util.set_penalty_css(r_au);
+ });
+ }
} catch(E) {
+ alert(E);
g.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.circ_brief.failure'), E);
}
}
if (g.circ_id) {
- g.network.simple_request( 'FM_CIRC_RETRIEVE_VIA_ID', [ ses(), g.circ_id ], circ_callback);
+ g.network.simple_request( 'FM_CIRC_RETRIEVE_VIA_ID', [ ses(), g.circ_id, true ], circ_callback);
} else {
g.circ = g.data.temp_circ; g.data.temp_circ = null; g.data.stash('temp_circ');
g.circ_id = g.data.temp_circ_id; g.data.temp_circ_id = null; g.data.stash('temp_circ_id');
for (var i = 0; i < obj.selection_list.length; i++) {
var circs = obj.network.simple_request('FM_CIRC_RETRIEVE_VIA_COPY',[ses(),obj.selection_list[i].copy_id,1]);
if (circs.length > 0) {
- patrons[circs[0].usr()] = 1;
+ if (circs[0].usr()) {
+ patrons[circs[0].usr()] = 1;
+ } else {
+ alert(
+ document.getElementById('circStrings')
+ .getFormattedString(
+ 'staff.circ.item_no_user',
+ [obj.selection_list[i].barcode])
+ );
+ }
} else {
alert(document.getElementById('circStrings').getFormattedString('staff.circ.item_no_circs', [obj.selection_list[i].barcode]));
}
if (typeof my_xulG.retrieve_these_patrons == 'undefined') continue;
var patrons = my_xulG.retrieve_these_patrons;
for (var j = 0; j < patrons.length; j++) {
+
+ // combcirc objects may have a null value for user
+ if (!patrons[j]) continue;
+
if (typeof window.xulG == 'object' && typeof window.xulG.new_tab == 'function') {
try {
window.xulG.new_patron_tab( {}, { 'id' : patrons[j] } );
staff.circ.alert=Alert
staff.circ.item_no_circs=Item %1$s has never circulated.
+staff.circ.item_no_user=Item %1$s circulation has no linked user.
staff.circ.invalid_date=Invalid Date
staff.circ.future_date=Future Date
staff.circ.process_item=Check In / Process Item