<field name="xact" oils_persist:virtual="true" reporter:datatype="link"/>
<field name="grocery" oils_persist:virtual="true" reporter:datatype="link"/>
<field name="circulation" oils_persist:virtual="true" reporter:datatype="link"/>
+ <field name="reservation" oils_persist:virtual="true" reporter:datatype="link"/>
<field name="billing_location" reporter:datatype="link"/>
</fields>
<links>
<link field="xact" reltype="might_have" key="id" map="" class="mbt"/>
<link field="circulation" reltype="might_have" key="id" map="" class="circ"/>
<link field="grocery" reltype="might_have" key="id" map="" class="mg"/>
+ <link field="reservation" reltype="might_have" key="id" map="" class="bresv"/>
<link field="billing_location" reltype="has_a" key="id" map="" class="aou"/>
</links>
</class>
{
flesh => 4,
flesh_fields => {
- mobts => ['circulation', 'grocery'],
+ mobts => [qw/grocery circulation reservation/],
+ bresv => ['target_resource_type'],
+ brt => ['record'],
mg => ['billings'],
mb => ['btype'],
circ => ['target_copy'],
qw/total_paid total_owed balance_owed/
);
+ my $marc_xml = undef;
+ if ($mobts->xact_type eq 'reservation' and
+ $mobts->reservation->target_resource_type->record) {
+ $marc_xml = XML::LibXML->new->parse_string(
+ $mobts->reservation->target_resource_type->record->marc
+ );
+ } elsif ($mobts->xact_type eq 'circulation' and
+ $circ->target_copy->call_number->id != -1) {
+ $marc_xml = XML::LibXML->new->parse_string(
+ $circ->target_copy->call_number->record->marc
+ );
+ }
+
push(
@{$ctx->{"fines"}->{$mobts->grocery ? "grocery" : "circulation"}},
{
xact => $mobts,
last_grocery_billing => $last_billing,
- marc_xml => ($mobts->xact_type ne 'circulation' or $circ->target_copy->call_number->id == -1) ?
- undef :
- XML::LibXML->new->parse_string($circ->target_copy->call_number->record->marc),
+ marc_xml => $marc_xml
}
);
}
<tbody id='myopac_circ_trans_tbody'>
[% FOR f IN ctx.fines.circulation;
attrs = {marc_xml => f.marc_xml};
- PROCESS get_marc_attrs args=attrs %]
+ IF f.marc_xml;
+ PROCESS get_marc_attrs args=attrs;
+ ELSIF f.xact.reservation;
+ attrs.title = f.xact.reservation.target_resource_type.name;
+ END %]
<tr id='myopac_circ_trans_row'>
<td>
<a href="[% ctx.opac_root %]/record/[% f.xact.circulation.target_copy.call_number.record.id %]">[% attrs.title %]</a>
<a href="[% ctx.opac_root %]/results?qtype=author&query=[% attrs.author | replace('[,\.:;]', '') | url %]">[% attrs.author %]</a>
</td>
<td name='myopac_circ_trans_start'>
- [% date.format(
- ctx.parse_datetime(
- f.xact.circulation.xact_start
- ), DATE_FORMAT
- ) %]
+ [% ts = f.xact.circulation.xact_start || f.xact.reservation.start_time || 0;
+ IF ts;
+ date.format(ctx.parse_datetime(ts), DATE_FORMAT);
+ END %]
</td>
<td name='myopac_circ_trans_due'>
- [% date.format(
- ctx.parse_datetime(
- f.xact.circulation.due_date
- ), DATE_FORMAT
- ) %]
+ [% ts = f.xact.circulation.due_date || f.xact.reservation.end_time || 0;
+ IF ts;
+ date.format(ctx.parse_datetime(ts), DATE_FORMAT);
+ END %]
</td>
<td name='myopac_circ_trans_finished'>
- [% IF f.xact.circulation.checkin_time;
- date.format(
- ctx.parse_datetime(
- f.xact.circulation.checkin_time
- ), DATE_FORMAT
- );
+ [% ts = f.xact.circulation.checkin_time || f.xact.reservation.return_time || 0;
+ IF ts;
+ date.format(ctx.parse_datetime(ts), DATE_FORMAT);
ELSE %]
<!-- XXX TODO fines aren't really accruing
if circ has hit maxfines. more clarity