[freeside-commits] branch FREESIDE_3_BRANCH updated. 90459fc5f9ea38ca9228bbe432792ca123ecd187

Ivan ivan at 420.am
Sun Jan 18 14:23:35 PST 2015


The branch, FREESIDE_3_BRANCH has been updated
       via  90459fc5f9ea38ca9228bbe432792ca123ecd187 (commit)
      from  c05354f2a79636b6f60a7be4f5aeb19348838eec (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 90459fc5f9ea38ca9228bbe432792ca123ecd187
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sun Jan 18 14:23:32 2015 -0800

    disable quotations without fully-qualifying all other searches, RT#20688, RT#22232

diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index 5494053..fd5f297 100644
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@ -6,7 +6,8 @@ use vars qw( $AUTOLOAD @ISA @EXPORT_OK $DEBUG
              $conf $conf_encryption $money_char $lat_lower $lon_upper
              $me
              $nowarn_identical $nowarn_classload
-             $no_update_diff $no_history $no_check_foreign
+             $no_update_diff $no_history $qsearch_qualify_columns
+             $no_check_foreign
              @encrypt_payby
            );
 use Exporter;
@@ -50,6 +51,9 @@ $nowarn_identical = 0;
 $nowarn_classload = 0;
 $no_update_diff = 0;
 $no_history = 0;
+
+$qsearch_qualify_columns = 0;
+
 $no_check_foreign = 0;
 
 my $rsa_module;
@@ -742,72 +746,74 @@ sub _from_hashref {
   return @return;
 }
 
-## makes this easier to read
-
 sub get_real_fields {
   my $table = shift;
   my $record = shift;
   my $real_fields = shift;
 
-   ## this huge map was previously inline, just broke it out to help read the qsearch method, should be optimized for readability
-      return ( 
-      map {
+  ## could be optimized more for readability
+  return ( 
+    map {
 
       my $op = '=';
       my $column = $_;
+      my $table_column = $qsearch_qualify_columns ? "$table.$column" : $column;
       my $type = dbdef->table($table)->column($column)->type;
       my $value = $record->{$column};
       $value = $value->{'value'} if ref($value);
-      if ( ref($record->{$_}) ) {
-        $op = $record->{$_}{'op'} if $record->{$_}{'op'};
+
+      if ( ref($record->{$column}) ) {
+        $op = $record->{$column}{'op'} if $record->{$column}{'op'};
         #$op = 'LIKE' if $op =~ /^ILIKE$/i && driver_name ne 'Pg';
         if ( uc($op) eq 'ILIKE' ) {
           $op = 'LIKE';
-          $record->{$_}{'value'} = lc($record->{$_}{'value'});
-          $column = "LOWER($_)";
+          $record->{$column}{'value'} = lc($record->{$column}{'value'});
+          $table_column = "LOWER($table_column)";
         }
-        $record->{$_} = $record->{$_}{'value'}
+        $record->{$column} = $record->{$column}{'value'}
       }
 
-      if ( ! defined( $record->{$_} ) || $record->{$_} eq '' ) {
+      if ( ! defined( $record->{$column} ) || $record->{$column} eq '' ) {
         if ( $op eq '=' ) {
           if ( driver_name eq 'Pg' ) {
             if ( $type =~ /(int|numeric|real|float4|(big)?serial)/i ) {
-              qq-( $column IS NULL )-;
+              qq-( $table_column IS NULL )-;
             } else {
-              qq-( $column IS NULL OR $column = '' )-;
+              qq-( $table_column IS NULL OR $table_column = '' )-;
             }
           } else {
-            qq-( $column IS NULL OR $column = "" )-;
+            qq-( $table_column IS NULL OR $table_column = "" )-;
           }
         } elsif ( $op eq '!=' ) {
           if ( driver_name eq 'Pg' ) {
             if ( $type =~ /(int|numeric|real|float4|(big)?serial)/i ) {
-              qq-( $column IS NOT NULL )-;
+              qq-( $table_column IS NOT NULL )-;
             } else {
-              qq-( $column IS NOT NULL AND $column != '' )-;
+              qq-( $table_column IS NOT NULL AND $table_column != '' )-;
             }
           } else {
-            qq-( $column IS NOT NULL AND $column != "" )-;
+            qq-( $table_column IS NOT NULL AND $table_column != "" )-;
           }
         } else {
           if ( driver_name eq 'Pg' ) {
-            qq-( $column $op '' )-;
+            qq-( $table_column $op '' )-;
           } else {
-            qq-( $column $op "" )-;
+            qq-( $table_column $op "" )-;
           }
         }
       } elsif ( $op eq '!=' ) {
-        qq-( $column IS NULL OR $column != ? )-;
+        qq-( $table_column IS NULL OR $table_column != ? )-;
       #if this needs to be re-enabled, it needs to use a custom op like
       #"APPROX=" or something (better name?, not '=', to avoid affecting other
       # searches
       #} elsif ( $op eq 'APPROX=' && _is_fs_float( $type, $value ) ) {
-      #  ( "$column <= ?", "$column >= ?" );
+      #  ( "$table_column <= ?", "$table_column >= ?" );
       } else {
-        "$column $op ?";
+        "$table_column $op ?";
       }
-    } @{ $real_fields } );  
+
+    } @{ $real_fields }
+  );  
 }
 
 =item by_key PRIMARY_KEY_VALUE
diff --git a/httemplate/search/quotation.html b/httemplate/search/quotation.html
index fbc35be..55c60f0 100755
--- a/httemplate/search/quotation.html
+++ b/httemplate/search/quotation.html
@@ -1,20 +1,22 @@
 <& elements/search.html,
-                 'title'       => emt('Quotation Search Results'),
-                 'html_init'   => $html_init,
-                 'menubar'     => $menubar,
-                 'name'        => 'quotations',
-                 'query'       => $sql_query,
-                 'count_query' => $count_query,
-                 'count_addl'  => $count_addl,
-                 'redirect'    => $link,
-                 'header'      => [ emt('Quotation #'),
-                                    emt('Setup'),
-                                    emt('Recurring'),
-                                    emt('Date'),
-                                    emt('Prospect'),
-                                    emt('Customer'),
-                                  ],
-                 'fields'      => [
+                 'title'              => emt('Quotation Search Results'),
+                 'html_init'          => $html_init,
+                 'menubar'            => $menubar,
+                 'name'               => 'quotations',
+                 'query'              => $sql_query,
+                 'count_query'        => $count_query,
+                 'count_addl'         => $count_addl,
+                 'redirect'           => $link,
+                 'disableable'        => 1,
+                 'disabled_statuspos' => 1,
+                 'header'             => [ emt('Quotation #'),
+                                           emt('Setup'),
+                                           emt('Recurring'),
+                                           emt('Date'),
+                                           emt('Prospect'),
+                                           emt('Customer'),
+                                         ],
+                 'fields'             => [
                    'quotationnum',
                    sub { $money_char. shift->total_setup },
                    sub { $money_char. shift->total_recur },
@@ -27,7 +29,7 @@
                        },
                    #\&FS::UI::Web::cust_fields,
                  ],
-                 'sort_fields' => [
+                 'sort_fields'        => [
                    'quotationnum',
                    '', #FS::quotation->total_setup_sql,
                    '', #FS::quotation->total_recur_sql,
@@ -43,7 +45,7 @@
                    $link,
                    $prospect_link,
                    $cust_link,
-                   #( map { $_ ne 'Cust. Status' ? $clink : '' }
+                   #( map { $_ ne 'Cust. Status' ? $cust_link : '' }
                    #      FS::UI::Web::cust_header()
                    #),
                  ],
@@ -71,6 +73,8 @@ my $curuser = $FS::CurrentUser::CurrentUser;
 die "access denied"
   unless $curuser->access_right('List quotations');
 
+local($FS::Record::qsearch_qualify_columns) = 1;
+
 my $join_prospect_main = 'LEFT JOIN prospect_main USING ( prospectnum )';
 my $join_cust_main = FS::UI::Web::join_cust_main('quotation');
 

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Record.pm                  |   54 +++++++++++++++++++++-----------------
 httemplate/search/quotation.html |   40 +++++++++++++++-------------
 2 files changed, 52 insertions(+), 42 deletions(-)




More information about the freeside-commits mailing list