From 8311a7b3557a72338d23fd2e75913ccbfa9d0ca8 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Wed, 4 Feb 2026 17:52:04 +0000 Subject: [PATCH] Bug 28530: (QA follow-up) Add POD documentation and database index - Add comprehensive POD documentation for lowest_ratio_library() method including parameter descriptions, return values, and algorithm explanation - Add database index on itemtype column in library_float_limits table to improve query performance when searching by itemtype Signed-off-by: Martin Renvoize --- Koha/Library/FloatLimits.pm | 29 +++++++++++++++++++ .../data/mysql/atomicupdate/bug_28530.pl | 1 + installer/data/mysql/kohastructure.sql | 1 + 3 files changed, 31 insertions(+) diff --git a/Koha/Library/FloatLimits.pm b/Koha/Library/FloatLimits.pm index df7c5c5f29b..2ed7efac98c 100644 --- a/Koha/Library/FloatLimits.pm +++ b/Koha/Library/FloatLimits.pm @@ -37,6 +37,35 @@ Koha::Library::FloatLimits - Koha Library::FloatLimit object set class =head3 lowest_ratio_library + my $library = Koha::Library::FloatLimits->lowest_ratio_library( + $item, $branchcode, $from_branch + ); + +Determines the optimal library to transfer an item to based on float limit ratios. + +This method calculates the ratio of current items to float limits for each library +with configured float limits for the item's type. It considers items currently at +the branch, items in transit to/from the branch, and respects library group +restrictions if the item's return policy is set to 'returnbylibrarygroup'. + +The method returns the library with the lowest ratio (most need for this item type), +with preference given to the current branch in case of ties. Returns undef if no +suitable transfer destination is found or if branch transfer limits prevent the +transfer. + +=over 4 + +=item * $item - Koha::Item object to be transferred + +=item * $branchcode - branchcode of the return/checkin location + +=item * $from_branch - (optional) branchcode where item was previously held, used for +adjusting item counts during the calculation + +=back + +Returns: Koha::Library object of the destination branch, or undef if no transfer needed + =cut sub lowest_ratio_library { diff --git a/installer/data/mysql/atomicupdate/bug_28530.pl b/installer/data/mysql/atomicupdate/bug_28530.pl index 605d50f84fd..e45f6e57df0 100755 --- a/installer/data/mysql/atomicupdate/bug_28530.pl +++ b/installer/data/mysql/atomicupdate/bug_28530.pl @@ -29,6 +29,7 @@ return { `itemtype` varchar(10) NOT NULL, `float_limit` int(11) NULL DEFAULT NULL, PRIMARY KEY (`branchcode`,`itemtype`), + KEY `itemtype_idx` (`itemtype`), CONSTRAINT `library_float_limits_ibfk_bc` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `library_float_limits_ibfk_it` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index c378c5fb7d1..480843aa7ea 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -6896,6 +6896,7 @@ CREATE TABLE `library_float_limits` ( `itemtype` varchar(10) NOT NULL, `float_limit` int(11) NULL DEFAULT NULL, PRIMARY KEY (`branchcode`,`itemtype`), + KEY `itemtype_idx` (`itemtype`), CONSTRAINT `library_float_limits_ibfk_bc` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `library_float_limits_ibfk_it` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 2.52.0