Bug 24159: Throw an exception if days_mode option is not given when needed
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 28 Feb 2020 12:33:13 +0000 (13:33 +0100)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 25 Jun 2020 08:51:59 +0000 (10:51 +0200)
Sponsored-by: Institute of Technology Carlow
Signed-off-by: Simon Perry <simon.perry@itcarlow.ie>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Koha/Calendar.pm
Koha/CirculationRules.pm

index ef397cd..0d600a6 100644 (file)
@@ -1,14 +1,14 @@
 package Koha::Calendar;
-use strict;
-use warnings;
-use 5.010;
 
+use Modern::Perl;
+
+use Carp;
 use DateTime;
 use DateTime::Set;
 use DateTime::Duration;
 use C4::Context;
 use Koha::Caches;
-use Carp;
+use Koha::Exceptions;
 
 sub new {
     my ( $classname, %options ) = @_;
@@ -47,7 +47,6 @@ sub _init {
           1;
     }
 
-    $self->{days_mode}       ||= C4::Context->preference('useDaysMode');
     $self->{test}            = 0;
     return;
 }
@@ -137,6 +136,10 @@ sub single_holidays {
 sub addDate {
     my ( $self, $startdate, $add_duration, $unit ) = @_;
 
+
+    Koha::Exceptions::MissingParameter->throw("Missing mandatory option for Koha:Calendar->addDate: days_mode")
+        unless exists $self->{days_mode};
+
     # Default to days duration (legacy support I guess)
     if ( ref $add_duration ne 'DateTime::Duration' ) {
         $add_duration = DateTime::Duration->new( days => $add_duration );
@@ -165,6 +168,9 @@ sub addHours {
     # If we are using the calendar behave for now as if Datedue
     # was the chosen option (current intended behaviour)
 
+    Koha::Exceptions::MissingParameter->throw("Missing mandatory option for Koha:Calendar->addHours: days_mode")
+        unless exists $self->{days_mode};
+
     if ( $self->{days_mode} ne 'Days' &&
           $self->is_holiday($base_date) ) {
 
@@ -185,7 +191,8 @@ sub addDays {
     my ( $self, $startdate, $days_duration ) = @_;
     my $base_date = $startdate->clone();
 
-    $self->{days_mode} ||= q{};
+    Koha::Exceptions::MissingParameter->throw("Missing mandatory option for Koha:Calendar->addDays: days_mode")
+        unless exists $self->{days_mode};
 
     if ( $self->{days_mode} eq 'Calendar' ) {
         # use the calendar to skip all days the library is closed
@@ -235,6 +242,9 @@ sub addDays {
 sub get_push_amt {
     my ( $self, $base_date) = @_;
 
+    Koha::Exceptions::MissingParameter->throw("Missing mandatory option for Koha:Calendar->get_push_amt: days_mode")
+        unless exists $self->{days_mode};
+
     my $dow = $base_date->day_of_week;
     return (
         # We're using Dayweek useDaysMode option
@@ -288,6 +298,10 @@ sub is_holiday {
 
 sub next_open_days {
     my ( $self, $dt, $to_add ) = @_;
+
+    Koha::Exceptions::MissingParameter->throw("Missing mandatory option for Koha:Calendar->next_open_days: days_mode")
+        unless exists $self->{days_mode};
+
     my $base_date = $dt->clone();
 
     $base_date->add(days => $to_add);
@@ -300,6 +314,10 @@ sub next_open_days {
 
 sub prev_open_days {
     my ( $self, $dt, $to_sub ) = @_;
+
+    Koha::Exceptions::MissingParameter->throw("Missing mandatory option for Koha:Calendar->get_open_days: days_mode")
+        unless exists $self->{days_mode};
+
     my $base_date = $dt->clone();
 
     # It feels logical to be passed a positive number, though we're
@@ -323,6 +341,9 @@ sub days_forward {
     my $start_dt = shift;
     my $num_days = shift;
 
+    Koha::Exceptions::MissingParameter->throw("Missing mandatory option for Koha:Calendar->days_forward: days_mode")
+        unless exists $self->{days_mode};
+
     return $start_dt unless $num_days > 0;
 
     my $base_dt = $start_dt->clone();
index df68310..17e7674 100644 (file)
@@ -109,6 +109,9 @@ our $RULE_KINDS = {
     issuelength => {
         scope => [ 'branchcode', 'categorycode', 'itemtype' ],
     },
+    useDaysMode => {
+        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
+    },
     lengthunit => {
         scope => [ 'branchcode', 'categorycode', 'itemtype' ],
     },