From: Mike Rylander Date: Fri, 23 Mar 2012 16:23:59 +0000 (-0400) Subject: Allow fines to accrue during closings X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=6b54d175bebb62a6ba310de1846a1119dbe6c889;p=working%2FEvergreen.git Allow fines to accrue during closings Evergreen skips fines during scheduled closings. With this commit, a new Org Unit Setting labeled 'Charge fines on overdue circulations when closed' is available to force fines to accrue during closures. This work is sponsored by the NC Cardinal consortium in North Carolina. Signed-off-by: Mike Rylander --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm index f6a4515a2d..b448026052 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm @@ -14,6 +14,9 @@ use DateTime::Format::ISO8601; use OpenILS::Utils::Penalty; use POSIX qw(ceil); use OpenILS::Application::Circ::CircCommon; +use OpenILS::Application::AppUtils; +my $U = "OpenILS::Application::AppUtils"; + sub isTrue { my $v = shift; @@ -901,6 +904,9 @@ sub generate_fines { my $recurring_fine = int($c->$recurring_fine_method * 100); my $max_fine = int($c->max_fine * 100); + my $skip_closed_check = $U->ou_ancestor_setting_value($c->$circ_lib_method, 'circ.fines.charge_when_closed'); + $skip_closed_check = $skip_closed_check ? $skip_closed_check->{value} : 0; + my ($latest_billing_ts, $latest_amount) = ('',0); for (my $bill = 1; $bill <= $pending_fine_count; $bill++) { @@ -921,22 +927,24 @@ sub generate_fines { $current_bill_count--; } - my $dow = $billing_ts->day_of_week_0(); - my $dow_open = "dow_${dow}_open"; - my $dow_close = "dow_${dow}_close"; + if (!$skip_closed_check) { + my $dow = $billing_ts->day_of_week_0(); + my $dow_open = "dow_${dow}_open"; + my $dow_close = "dow_${dow}_close"; - if (my $h = $hoo{$c->$circ_lib_method}) { - next if ( $h->$dow_open eq '00:00:00' and $h->$dow_close eq '00:00:00'); + if (my $h = $hoo{$c->$circ_lib_method}) { + next if ( $h->$dow_open eq '00:00:00' and $h->$dow_close eq '00:00:00'); + } + + my $timestamptz = $billing_ts->strftime('%FT%T%z'); + my @cl = actor::org_unit::closed_date->search_where( + { close_start => { '<=' => $timestamptz }, + close_end => { '>=' => $timestamptz }, + org_unit => $c->$circ_lib_method } + ); + next if (@cl); } - my $timestamptz = $billing_ts->strftime('%FT%T%z'); - my @cl = actor::org_unit::closed_date->search_where( - { close_start => { '<=' => $timestamptz }, - close_end => { '>=' => $timestamptz }, - org_unit => $c->$circ_lib_method } - ); - next if (@cl); - $current_fine_total += $recurring_fine; $latest_amount += $recurring_fine; $latest_billing_ts = $timestamptz; diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index bc3321f756..aa98c2e6d5 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -11409,6 +11409,26 @@ SELECT SETVAL('config.usr_activity_type_id_seq'::TEXT, 1000); INSERT INTO config.org_unit_setting_type (name, label, description, grp, datatype) VALUES ( + 'circ.fines.charge_when_closed', + oils_i18n_gettext( + 'circ.fines.charge_when_closed', + 'Charge fines on overdue circulations when closed', + 'coust', + 'label' + ), + oils_i18n_gettext( + 'circ.fines.charge_when_closed', + 'Normally, fines are not charged when a library is closed. When set to True, fines will be charged during scheduled closings and normal weekly closed days.', + 'coust', + 'description' + ), + 'circ', + 'bool' + ); + +INSERT INTO config.org_unit_setting_type + (name, label, description, grp, datatype) + VALUES ( 'circ.patron.usr_activity_retrieve.max', oils_i18n_gettext( 'circ.patron.usr_activity_retrieve.max', diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.fine-when-closed.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.fine-when-closed.sql new file mode 100644 index 0000000000..e3989cd105 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.fine-when-closed.sql @@ -0,0 +1,21 @@ + +INSERT INTO config.org_unit_setting_type + (name, label, description, grp, datatype) + VALUES ( + 'circ.fines.charge_when_closed', + oils_i18n_gettext( + 'circ.fines.charge_when_closed', + 'Charge fines on overdue circulations when closed', + 'coust', + 'label' + ), + oils_i18n_gettext( + 'circ.fines.charge_when_closed', + 'Normally, fines are not charged when a library is closed. When set to True, fines will be charged during scheduled closings and normal weekly closed days.', + 'coust', + 'description' + ), + 'circ', + 'bool' + ); +