Bugzilla – Attachment 193665 Details for
Bug 17015
New Koha Calendar
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 17015: (follow-up) add has_business_days_between() method to DiscreteCalendar.pm
Bug-17015-follow-up-add-hasbusinessdaysbetween-met.patch (text/plain), 4.42 KB, created by
Hammat wele
on 2026-02-23 17:47:00 UTC
(
hide
)
Description:
Bug 17015: (follow-up) add has_business_days_between() method to DiscreteCalendar.pm
Filename:
MIME Type:
Creator:
Hammat wele
Created:
2026-02-23 17:47:00 UTC
Size:
4.42 KB
patch
obsolete
>From d9e4a410934673c1cd6cfb09ded7c7522584316a Mon Sep 17 00:00:00 2001 >From: Hammat Wele <hammat.wele@inlibro.com> >Date: Mon, 23 Feb 2026 17:40:25 +0000 >Subject: [PATCH] Bug 17015: (follow-up) add has_business_days_between() method > to DiscreteCalendar.pm > >--- > Koha/DiscreteCalendar.pm | 22 +++++++++ > t/db_dependent/DiscreteCalendar.t | 77 ++++++++++++++++++++++++++++++- > 2 files changed, 98 insertions(+), 1 deletion(-) > >diff --git a/Koha/DiscreteCalendar.pm b/Koha/DiscreteCalendar.pm >index 178e2b1dfe5..d2e32ef5254 100644 >--- a/Koha/DiscreteCalendar.pm >+++ b/Koha/DiscreteCalendar.pm >@@ -525,6 +525,28 @@ sub get_week_days_holidays { > return @week_days; > } > >+sub has_business_days_between { >+ my ( $self, $start_dt, $end_dt ) = @_; >+ >+ # Clone dates to avoid modifying originals >+ my $current_date = $start_dt->clone->set_time_zone('floating'); >+ my $end_date = $end_dt->clone->set_time_zone('floating'); >+ >+ # Ensure start is before end >+ if ( $current_date->compare($end_date) >= 0 ) { >+ return 0; # Same date or start after end >+ } >+ >+ # Check each day between start and end (exclusive) >+ $current_date->add( days => 1 ); >+ while ( $current_date->compare($end_date) < 0 ) { >+ return 1 unless $self->is_holiday($current_date); >+ $current_date->add( days => 1 ); >+ } >+ >+ return 0; # No business days found >+} >+ > =head2 edit_holiday > > Modifies a date or a range of dates >diff --git a/t/db_dependent/DiscreteCalendar.t b/t/db_dependent/DiscreteCalendar.t >index 7c717c1cb4b..3b0b0ec7231 100755 >--- a/t/db_dependent/DiscreteCalendar.t >+++ b/t/db_dependent/DiscreteCalendar.t >@@ -18,7 +18,7 @@ > # along with Koha; if not, see <http://www.gnu.org/licenses>. > > use Modern::Perl; >-use Test::More tests => 50; >+use Test::More tests => 56; > use Test::MockModule; > > use t::lib::TestBuilder; >@@ -459,6 +459,81 @@ $calendar->copy_to_branch($branch2); > #Check if branch2 is also closed tomorrow after copying from branch1 > is($calendar2->is_opened($tomorrow), 0, "$branch2 close tomorrow after copying from $branch1"); > >+my $calendar3 = Koha::DiscreteCalendar->new( { branchcode => $branch1 } ); >+ >+# Base date >+my $monday = dt_from_string('2026-06-01'); # Monday >+my $tuesday = dt_from_string('2026-06-02'); # Tuesday >+my $wednesday = dt_from_string('2026-06-03'); # Wednesday >+my $thursday = dt_from_string('2026-06-04'); # Thursday >+my $friday = dt_from_string('2026-06-05'); # Friday >+my $saturday = dt_from_string('2026-06-06'); # Saturday >+$sunday = dt_from_string('2026-06-07'); # Sunday >+ >+# Add holidays (exceptions = closed days) >+$calendar3->edit_holiday( >+ { >+ title => "Holiday", >+ holiday_type => $Koha::DiscreteCalendar::HOLIDAYS->{EXCEPTION}, >+ start_date => $wednesday, >+ end_date => $wednesday, >+ } >+); >+ >+$calendar3->edit_holiday( >+ { >+ title => "Holiday", >+ holiday_type => $Koha::DiscreteCalendar::HOLIDAYS->{EXCEPTION}, >+ start_date => $saturday, >+ end_date => $saturday, >+ } >+); >+ >+$calendar3->edit_holiday( >+ { >+ title => "Holiday ", >+ holiday_type => $Koha::DiscreteCalendar::HOLIDAYS->{EXCEPTION}, >+ start_date => $sunday, >+ end_date => $sunday, >+ } >+); >+ >+# Test 1: Business day between two business days >+is( >+ $calendar->has_business_days_between( $monday, $wednesday ), 1, >+ 'Should find business day (Tuesday) between Monday and Wednesday' >+); >+ >+# Test 2: No business days between consecutive business days >+is( >+ $calendar->has_business_days_between( $monday, $tuesday ), 0, >+ 'Should find no business days between consecutive days' >+); >+ >+# Test 3: Holiday between two business days >+is( >+ $calendar->has_business_days_between( $tuesday, $thursday ), 0, >+ 'Should find no business days when only holiday (Wednesday) is between' >+); >+ >+# Test 4: Multiple days with business days >+is( >+ $calendar->has_business_days_between( $monday, $friday ), 1, >+ 'Should find business days between Monday and Friday' >+); >+ >+# Test 5: Only holidays between dates >+is( >+ $calendar->has_business_days_between( $friday, $sunday ), 0, >+ 'Should find no business days between Friday and Sunday (Saturday is holiday)' >+); >+ >+# Test 6: Same date >+is( >+ $calendar->has_business_days_between( $monday, $monday ), 0, >+ 'Should find no business days between same date' >+); >+ > $schema->storage->txn_rollback; > > 1; >-- >2.34.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 17015
:
53859
|
54318
|
54419
|
59166
|
59167
|
59168
|
59169
|
59170
|
59171
|
59267
|
59268
|
59269
|
59270
|
59271
|
59463
|
59516
|
59517
|
59518
|
59519
|
59520
|
59561
|
59562
|
59586
|
59587
|
59888
|
59889
|
60902
|
60903
|
60904
|
60905
|
60906
|
60986
|
61737
|
62375
|
62376
|
62380
|
63257
|
63282
|
63362
|
63363
|
63364
|
63365
|
63366
|
63367
|
64235
|
65073
|
65074
|
65075
|
65076
|
65077
|
67721
|
67722
|
67723
|
67724
|
67725
|
67879
|
67929
|
67930
|
67931
|
67932
|
67933
|
67934
|
68392
|
68393
|
68394
|
68395
|
68396
|
68397
|
71634
|
71635
|
71636
|
71637
|
71638
|
72890
|
73145
|
74859
|
74860
|
74861
|
74862
|
74863
|
74864
|
74865
|
74866
|
75444
|
75479
|
76594
|
77249
|
77250
|
77607
|
77608
|
77609
|
77610
|
77611
|
77612
|
77613
|
77770
|
77771
|
77772
|
77773
|
77774
|
79035
|
80523
|
80524
|
80525
|
80526
|
80527
|
80528
|
80529
|
80530
|
80531
|
80532
|
80533
|
80534
|
80535
|
83547
|
85394
|
85677
|
85678
|
85679
|
85680
|
85681
|
85682
|
85683
|
85684
|
85685
|
85686
|
85687
|
85688
|
85689
|
85690
|
85691
|
92595
|
92596
|
92597
|
92598
|
100079
|
110383
|
110384
|
110386
|
110387
|
110388
|
110389
|
113541
|
113905
|
115501
|
115502
|
115503
|
115504
|
115505
|
115506
|
115507
|
115508
|
115509
|
115510
|
115511
|
118554
|
118555
|
118556
|
118557
|
118558
|
118559
|
119095
|
119097
|
119099
|
119100
|
119101
|
119102
|
131619
|
131620
|
131621
|
131622
|
131623
|
131624
|
131625
|
131626
|
131634
|
131635
|
131636
|
131637
|
131638
|
131639
|
131640
|
131641
|
131667
|
132199
|
133596
|
133597
|
133598
|
133599
|
133600
|
133601
|
133602
|
133603
|
133604
|
133605
|
133678
|
137219
|
137220
|
137221
|
137222
|
137223
|
137224
|
137225
|
137226
|
137227
|
137228
|
137229
|
139378
|
139379
|
139380
|
139381
|
139382
|
139599
|
139600
|
139601
|
139602
|
139603
|
139851
|
140150
|
141176
|
144257
|
144258
|
144259
|
144260
|
144261
|
144262
|
144264
|
144268
|
144269
|
144270
|
144271
|
144272
|
144273
|
151438
|
151439
|
151440
|
151441
|
151442
|
151443
|
151444
|
151445
|
151446
|
151447
|
151448
|
151449
|
151450
|
156340
|
156341
|
156342
|
156343
|
156344
|
156345
|
156346
|
156347
|
156348
|
156349
|
156350
|
156351
|
156352
|
156353
|
156354
|
156355
|
157656
|
157657
|
157658
|
157659
|
157660
|
157661
|
157662
|
157663
|
157664
|
157665
|
157666
|
157667
|
157668
|
157669
|
157670
|
157671
|
157672
|
167805
|
167806
|
167807
|
167808
|
167809
|
180312
|
180313
|
180314
|
180315
|
180316
|
180552
|
180962
|
181466
|
183006
|
185569
|
185570
|
185571
|
185572
|
185573
|
185574
|
185575
|
185576
|
185577
|
193656
|
193657
|
193658
|
193659
|
193660
|
193661
|
193662
|
193663
|
193664
| 193665