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=refs%2Fheads%2Frel_2_1_with_closed_fining;p=evergreen%2Fequinox.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. Logic repiars and out-of-scope (strict) variable repairs from Bill Erickson. This work is sponsored by the NC Cardinal consortium in North Carolina. Signed-off-by: Mike Rylander Signed-off-by: Bill Erickson --- 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 e4d7354b80..5af16061fd 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 @@ -13,6 +13,9 @@ use DateTime; 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; @@ -913,6 +916,10 @@ 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->to_fieldmapper->id, 'circ.fines.charge_when_closed'); + $skip_closed_check = $U->is_true($skip_closed_check); + my ($latest_billing_ts, $latest_amount) = ('',0); for (my $bill = 1; $bill <= $pending_fine_count; $bill++) { @@ -933,22 +940,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"; + my $timestamptz = $billing_ts->strftime('%FT%T%z'); + 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 @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 67cd3f61f6..28386a7130 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -8711,6 +8711,26 @@ INSERT INTO config.org_unit_setting_type ); 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, datatype ) VALUES ( 'circ.user_merge.delete_cards', 'Circ: Patron Merge Barcode Delete', 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' + ); +