circ_matrix_test
circ_matrix_ruleset
legacy_script_support
+ is_deposit
+ is_rental
+ deposit_billing
+ rental_billing
/;
$self->copy->call_number($self->volume->id);
$self->volume->record($self->title->id);
$self->is_precat(1) if $self->volume->id == OILS_PRECAT_CALL_NUMBER;
+ if($self->copy->deposit_amount and $self->copy->deposit_amount > 0) {
+ $self->is_deposit(1) if $U->is_true($self->copy->deposit);
+ $self->is_rental(1) unless $U->is_true($self->copy->deposit);
+ }
} else {
# We can't renew if there is no copy
return $self->bail_on_events(OpenILS::Event->new('ASSET_COPY_NOT_FOUND'))
}
}
- $self->is_precat(1) if $self->copy
- and $self->copy->call_number == OILS_PRECAT_CALL_NUMBER;
+ if($self->copy) {
+ $self->is_precat(1) if $self->copy->call_number == OILS_PRECAT_CALL_NUMBER;
+ if($self->copy->deposit_amount and $self->copy->deposit_amount > 0) {
+ $self->is_deposit(1) if $U->is_true($self->copy->deposit);
+ $self->is_rental(1) unless $U->is_true($self->copy->deposit);
+ }
+ }
# We can't renew if there is no copy
return $self->bail_on_events(@evts) if
$self->run_patron_permit_scripts();
$self->run_copy_permit_scripts()
unless $self->is_precat or $self->is_noncat;
+ $self->check_item_deposit_events();
$self->override_events() unless
$self->is_renewal and not $self->check_penalty_on_renew;
return if $self->bail_out;
payload => $self->mk_permit_key));
}
+sub check_item_deposit_events {
+ my $self = shift;
+ $self->push_events(OpenILS::Event->new('ITEM_DEPOSIT_REQUIRED')) if $self->is_deposit;
+ $self->push_events(OpenILS::Event->new('ITEM_RENTAL_FEE_REQUIRED')) if $self->is_rental;
+}
sub check_captured_holds {
my $self = shift;
$self->update_copy;
return if $self->bail_out;
+ $self->apply_deposit_fee();
+ return if $self->bail_out;
+
$self->handle_checkout_holds();
return if $self->bail_out;
circ => $self->circ,
record => $record,
holds_fulfilled => $self->fulfilled_holds,
+ deposit_bill => $self->deposit_billing,
+ rental_bill => $self->rental_billing
}
)
);
}
+sub apply_deposit_fee {
+ my $self = shift;
+ my $copy = $self->copy;
+ return unless $self->is_deposit or $self->is_rental;
+
+ my $bill = Fieldmapper::money::billing->new;
+ my $amount = $copy->deposit_amount;
+ my $billing_type;
+
+ if($self->is_deposit) {
+ $billing_type = OILS_BILLING_TYPE_DEPOSIT;
+ $self->deposit_billing($bill);
+ } else {
+ $billing_type = OILS_BILLING_TYPE_RENTAL;
+ $self->rental_billing($bill);
+ }
+
+ $bill->xact($self->circ->id);
+ $bill->amount($amount);
+ $bill->note(OILS_BILLING_NOTE_SYSTEM);
+ $bill->billing_type($billing_type);
+ $self->editor->create_money_billing($bill) or $self->bail_on_events($self->editor->event);
+
+ $logger->info("circulator: charged $amount on checkout with billing type $billing_type");
+}
+
sub update_copy {
my $self = shift;
my $copy = $self->copy;
if ($self->circ and $self->circ->stop_fines
and $self->circ->stop_fines eq OILS_STOP_FINES_CLAIMSRETURNED);
+ $self->check_circ_deposit();
+
# handle the overridable events
$self->override_events unless $self->is_renewal;
return if $self->bail_out;
return;
}
+# if a deposit was payed for this item, push the event
+sub check_circ_deposit {
+ my $self = shift;
+ return unless $self->circ;
+ my $deposit = $self->editor->search_money_billing(
+ { billing_type => OILS_BILLING_TYPE_DEPOSIT,
+ xact => $self->circ->id,
+ voided => 'f'
+ }, {idlist => 1})->[0];
+
+ $self->push_events(OpenILS::Event->new(
+ 'ITEM_DEPOSIT_PAID', payload => $deposit)) if $deposit;
+}
+
sub reshelve_copy {
my $self = shift;
my $force = $self->force || shift;