From: Dan Wells Date: Tue, 2 Jul 2013 15:59:29 +0000 (-0400) Subject: Improve overloaded MFHD::Holding comparison operator X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=4773d1d4c349753630a6441d23931f06be881cde;p=working%2FEvergreen.git Improve overloaded MFHD::Holding comparison operator This commit: - Makes the comparison operator consider chron data, not just enumeration data - Teaches the comparison operator a way to handle 'unsure' data (that is, data presented in brackets []) Signed-off-by: Dan Wells --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm index d5571d1a14..33781dd778 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Holding.pm @@ -898,12 +898,19 @@ sub _compare { # start doing the actual comparison my $result; - foreach my $key ('a'..'f') { + foreach my $key ('a'..'f', 'i'..'m') { if (defined($holding_1->field_values($key))) { if (!defined($holding_2->field_values($key))) { return 1; # more details equals 'greater' (?) } else { - $result = $holding_1->field_values($key)->[0] <=> $holding_2->field_values($key)->[0]; + my $holding_1_value = $holding_1->field_values($key)->[0]; + my $holding_1_unsure = ($holding_1_value =~ s/\[|\]//g); + my $holding_2_value = $holding_2->field_values($key)->[0]; + my $holding_2_unsure = ($holding_2_value =~ s/\[|\]//g); + $result = $holding_1_value <=> $holding_2_value; + if (!$result) { # they are 'equal' but we will sort 'maybe' values before 'sure' values (TODO: rethink this is it complicates some algorithms) + $result = $holding_2_unsure <=> $holding_1_unsure; + } } } elsif (defined($holding_2->field_values($key))) { return -1; # more details equals 'greater' (?)