CASE
WHEN (
((fine_interval >= '1 day' AND due_date >= 'today') OR (fine_interval < '1 day' AND due_date > 'now'))
- AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','LONGOVERDUE'))
+ AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','CLAIMSNEVERCHECKEDOUT','LONGOVERDUE'))
) THEN 1
ELSE 0
END
CASE
WHEN (
((fine_interval >= '1 day' AND due_date < 'today') OR (fine_interval < '1 day' AND due_date < 'now'))
- AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','LONGOVERDUE'))
+ AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','CLAIMSNEVERCHECKEDOUT','LONGOVERDUE'))
) THEN 1
ELSE 0
END
SUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'LOST') THEN 1 ELSE 0 END) AS lost,
SUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'CLAIMSRETURNED') THEN 1 ELSE 0 END) AS claims_returned,
+ SUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'CLAIMSNEVERCHECKEDOUT') THEN 1 ELSE 0 END) AS claims_never_checked_out,
SUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'LONGOVERDUE') THEN 1 ELSE 0 END) AS long_overdue
FROM action.circulation
WHERE checkin_time IS NULL
<field reporter:label="Overdue" name="overdue" reporter:datatype="text"/>
<field reporter:label="Lost" name="lost" reporter:datatype="text"/>
<field reporter:label="Claims Returned" name="claims_returned" reporter:datatype="text"/>
+ <field reporter:label="Claims Never Checked Out" name="claims_never_checked_out" reporter:datatype="text"/>
<field reporter:label="Long Overdue" name="long_overdue" reporter:datatype="text"/>
</fields>
<links>
CASE
WHEN (
((fine_interval >= '1 day' AND due_date >= 'today') OR (fine_interval < '1 day' AND due_date > 'now'))
- AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','LONGOVERDUE'))
+ AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','CLAIMSNEVERCHECKEDOUT','LONGOVERDUE'))
) THEN id
ELSE 0
END
CASE
WHEN (
((fine_interval >= '1 day' AND due_date < 'today') OR (fine_interval < '1 day' AND due_date < 'now'))
- AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','LONGOVERDUE'))
+ AND (stop_fines IS NULL OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','CLAIMSNEVERCHECKEDOUT','LONGOVERDUE'))
) THEN id
ELSE 0
END
ARRAY_TO_STRING(ARRAY_ACCUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'LOST') THEN id ELSE 0 END),',') AS lost,
ARRAY_TO_STRING(ARRAY_ACCUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'CLAIMSRETURNED') THEN id ELSE 0 END),',') AS claims_returned,
+ ARRAY_TO_STRING(ARRAY_ACCUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'CLAIMSNEVERCHECKEDOUT') THEN id ELSE 0 END),',') AS claims_never_checked_out,
ARRAY_TO_STRING(ARRAY_ACCUM( CASE WHEN (xact_finish IS NULL AND stop_fines = 'LONGOVERDUE') THEN id ELSE 0 END),',') AS long_overdue
FROM action.circulation
WHERE checkin_time IS NULL
<field reporter:label="Overdue" name="overdue" reporter:datatype="text"/>
<field reporter:label="Lost" name="lost" reporter:datatype="text"/>
<field reporter:label="Claims Returned" name="claims_returned" reporter:datatype="text"/>
+ <field reporter:label="Claims Never Checked Out" name="claims_never_checked_out" reporter:datatype="text"/>
<field reporter:label="Long Overdue" name="long_overdue" reporter:datatype="text"/>
</fields>
<links>
overdue => [],
lost => [],
claims_returned => [],
+ claims_never_checked_out => [],
long_overdue => []
);
my $meth = 'retrieve_action_open_circ_';
overdue => 0,
lost => 0,
claims_returned => 0,
+ claims_never_checked_out => 0,
long_overdue => 0
);
} else {
AND ( (fine_interval >= '1 day' AND due_date >= 'today')
OR (fine_interval < '1 day' AND due_date > 'now' ))
AND (stop_fines IS NULL
- OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','LONGOVERDUE'))
+ OR stop_fines NOT IN ('LOST','CLAIMSRETURNED','CLAIMSNEVERCHECKEDOUT','LONGOVERDUE'))
SQL
my $out = actor::user->db_Main->selectcol_arrayref($out_sql, {}, $usr);
my $cl = actor::user->db_Main->selectcol_arrayref($cl_sql, {}, $usr);
+ my $cl_sql2 = <<" SQL";
+ SELECT id
+ FROM action.circulation
+ WHERE usr = ? AND checkin_time IS NULL AND stop_fines = 'CLAIMSNEVERCHECKEDOUT'
+ SQL
+
+ my $cl2 = actor::user->db_Main->selectcol_arrayref($cl_sql2, {}, $usr);
+
my $lo_sql = <<" SQL";
SELECT id
FROM action.circulation
overdue => scalar(@$od),
lost => scalar(@$lost),
claims_returned => scalar(@$cl),
+ claims_never_checked_out => scalar(@$cl2),
long_overdue => scalar(@$lo),
};
}
overdue => $od,
lost => $lost,
claims_returned => $cl,
+ claims_never_checked_out => $cl2,
long_overdue => $lo,
};
}
obj.checkouts = obj.checkouts.concat( robj.out );
obj.checkouts2 = obj.checkouts2.concat( robj.lost );
obj.checkouts2 = obj.checkouts2.concat( robj.claims_returned );
+ obj.checkouts2 = obj.checkouts2.concat( robj.claims_never_checked_out );
obj.checkouts2 = obj.checkouts2.concat( robj.long_overdue );
}
var robj = obj.network.simple_request(
} else {
obj.checkouts2 = obj.checkouts2.concat( robj.lost );
obj.checkouts2 = obj.checkouts2.concat( robj.claims_returned );
+ obj.checkouts2 = obj.checkouts2.concat( robj.claims_never_checked_out );
obj.checkouts2 = obj.checkouts2.concat( robj.long_overdue );
}
}
var e4 = document.getElementById( 'patron_long_overdue' ); if (e4) util.widgets.set_text(e4,'...');
var e5 = document.getElementById( 'patron_lost' ); if (e5) util.widgets.set_text(e5,'...');
var e6 = document.getElementById( 'patron_noncat' ); if (e6) util.widgets.set_text(e6,'...');
+ var e7 = document.getElementById( 'patron_claimed_never_checked_out' ); if (e7) util.widgets.set_text(e7,'...');
var under_btn;
if (xulG) {
if (xulG.display_window) {
try {
var robj = req.getResultObject();
var do_not_tally_claims_returned = String( obj.OpenILS.data.hash.aous['circ.do_not_tally_claims_returned'] ) == 'true';
+ // we'll include claims_never_checked_out in our consideration of this setting
util.widgets.set_text(e,
robj.out
+ robj.overdue
+ (do_not_tally_claims_returned ? 0 : robj.claims_returned)
+ + (do_not_tally_claims_returned ? 0 : robj.claims_never_checked_out)
+ robj.long_overdue
);
if (e2) util.widgets.set_text(e2, robj.overdue );
if (e3) util.widgets.set_text(e3, robj.claims_returned );
+ if (e7) util.widgets.set_text(e7, robj.claims_never_checked_out );
if (e4) util.widgets.set_text(e4, robj.long_overdue );
if (e5) util.widgets.set_text(e5, robj.lost );
if (under_btn) util.widgets.set_text(under_btn,
robj.out
+ robj.overdue
+ (do_not_tally_claims_returned ? 0 : robj.claims_returned)
+ + (do_not_tally_claims_returned ? 0 : robj.claims_never_checked_out)
+ robj.long_overdue
)
/* + ( robj.overdue > 0 ? '*' : '' ) */
<label id="PatronSummaryStatus_claimed_returned_label" value="&staff.patron.summary_overlay.claimed_returned.value;" class="copyable text_right items_long_overdue label subgroup" />
<description id="patron_claimed_returned" class="copyable items_claimed_returned value subgroup" />
</row>
+ <row id="pdsgr7a">
+ <label id="PatronSummaryStatus_claimed_never_checked_out_label" value="&staff.patron.summary_overlay.claimed_never_checked_out.value;" class="copyable text_right items_long_overdue label subgroup" />
+ <description id="patron_claimed_never_checked_out" class="copyable items_claimed_never_checked_out value subgroup" />
+ </row>
<row id="pdsgr6">
<label id="PatronSummaryStatus_lost_label" value="&staff.patron.summary_overlay.lost_label.value;" class="copyable text_left items_lost label"/>
<description id="patron_lost" class="copyable items_lost value"/>