Bug 15354: Fix translated itemtype descriptions in circ rules
[srvgit] / admin / smart-rules.pl
index e120bd8..8221a0d 100755 (executable)
@@ -460,8 +460,8 @@ $sth2->execute($language, $branch);
 
 while (my $row = $sth2->fetchrow_hashref) {
     $row->{'current_branch'} ||= $row->{'branchcode'};
-    $row->{'humanitemtype'} ||= $row->{'itemtype'};
-    $row->{'default_humanitemtype'} = 1 if $row->{'humanitemtype'} eq '*';
+    $row->{translated_description} ||= $row->{translated_description};
+    $row->{default_translated_description} = 1 if $row->{humanitemtype} eq '*';
     $row->{'humancategorycode'} ||= $row->{'categorycode'};
     $row->{'default_humancategorycode'} = 1 if $row->{'humancategorycode'} eq '*';
     $row->{'fine'} = sprintf('%.2f', $row->{'fine'});
@@ -516,26 +516,34 @@ foreach my $entry (@sorted_branch_cat_rules, @sorted_row_loop) {
 my $sth_branch_item;
 if ($branch eq "*") {
     $sth_branch_item = $dbh->prepare("
-        SELECT default_branch_item_rules.*, itemtypes.description AS humanitemtype
+        SELECT default_branch_item_rules.*,
+            COALESCE( localization.translation, itemtypes.description ) AS translated_description
         FROM default_branch_item_rules
         JOIN itemtypes USING (itemtype)
+        LEFT JOIN localization ON itemtypes.itemtype = localization.code
+            AND localization.entity = 'itemtypes'
+            AND localization.lang = ?
     ");
-    $sth_branch_item->execute();
+    $sth_branch_item->execute($language);
 } else {
     $sth_branch_item = $dbh->prepare("
-        SELECT branch_item_rules.*, itemtypes.description AS humanitemtype
+        SELECT branch_item_rules.*,
+            COALESCE( localization.translation, itemtypes.description ) AS translated_description
         FROM branch_item_rules
         JOIN itemtypes USING (itemtype)
+        LEFT JOIN localization ON itemtypes.itemtype = localization.code
+            AND localization.entity = 'itemtypes'
+            AND localization.lang = ?
         WHERE branch_item_rules.branchcode = ?
     ");
-    $sth_branch_item->execute($branch);
+    $sth_branch_item->execute($language, $branch);
 }
 
 my @branch_item_rules = ();
 while (my $row = $sth_branch_item->fetchrow_hashref) {
     push @branch_item_rules, $row;
 }
-my @sorted_branch_item_rules = sort { $a->{'humanitemtype'} cmp $b->{'humanitemtype'} } @branch_item_rules;
+my @sorted_branch_item_rules = sort { $a->{translated_description} cmp $b->{translated_description} } @branch_item_rules;
 
 # note undef holdallowed so that template can deal with them
 foreach my $entry (@sorted_branch_item_rules) {
@@ -609,11 +617,11 @@ sub by_category {
 
 sub by_itemtype {
     my ($a, $b) = @_;
-    if ($a->{'default_humanitemtype'}) {
-        return ($b->{'default_humanitemtype'} ? 0 : 1);
-    } elsif ($b->{'default_humanitemtype'}) {
+    if ($a->{default_translated_description}) {
+        return ($b->{'default_translated_description'} ? 0 : 1);
+    } elsif ($b->{'default_translated_description'}) {
         return -1;
     } else {
-        return $a->{'humanitemtype'} cmp $b->{'humanitemtype'};
+        return $a->{'translated_description'} cmp $b->{'translated_description'};
     }
 }