Add a "container_date" sort filter
authorJeff Godin <jgodin@tadl.org>
Fri, 16 May 2014 18:29:55 +0000 (14:29 -0400)
committerJeff Godin <jgodin@tadl.org>
Tue, 7 Apr 2015 16:29:01 +0000 (12:29 -0400)
Add a "container_date" sort filter

Limited to single bre containers only at this point.

Signed-off-by: Jeff Godin <jgodin@tadl.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm

index 147b165..3f204e9 100644 (file)
@@ -819,6 +819,10 @@ sub toSQL {
         $rank = "FIRST((SELECT create_date FROM biblio.record_entry rbr WHERE rbr.id = m.source))";
     } elsif ($sort_filter eq 'edit_date') {
         $rank = "FIRST((SELECT edit_date FROM biblio.record_entry rbr WHERE rbr.id = m.source))";
+    } elsif ($sort_filter eq 'container_date' && @{$$flat_plan{container_list}}) {
+        # Just the first container for now
+        my $container_id = $self->QueryParser->quote_value(@{$$flat_plan{container_list}}[0]);
+        $rank = "FIRST((SELECT create_time FROM container.biblio_record_entry_bucket_item cbrebi WHERE cbrebi.target_biblio_record_entry = m.source AND cbrebi.bucket = " . $container_id . "))";
     } else {
         # default to rel ranking
         $rank = $rel;
@@ -882,6 +886,7 @@ sub flatten {
     my $uses_bre = 0;
     my $uses_mrd = 0;
     my $uses_mrv = 0;
+    my @container_list;
 
     my @rank_list;
     for my $node ( @{$self->query_nodes} ) {
@@ -1116,6 +1121,7 @@ sub flatten {
                     my $rec_field = 'ci.target_biblio_record_entry';
                     if ($class eq 'bre') {
                         $class = 'biblio_record_entry';
+                        push @container_list, $cid;
                     } elsif ($class eq 'acn') {
                         $class = 'call_number';
                         $rec_field = 'cn.record';
@@ -1245,7 +1251,8 @@ sub flatten {
         with => $with,
         uses_bre => $uses_bre,
         uses_mrv => $uses_mrv,
-        uses_mrd => $uses_mrd
+        uses_mrd => $uses_mrd,
+        container_list => \@container_list
     };
 }