sort locations in dropdown, RT#10766
[freeside.git] / httemplate / elements / tr-select-cust_location.html
index f266497..d44b1c4 100644 (file)
@@ -150,7 +150,7 @@ Example:
 %     my @locations = $cust_main ? $cust_main->cust_location : ();
 %     push @locations, $cust_location
 %       if !$cust_main && $cust_location && $cust_location->locationnum>0;
-%     foreach my $loc ( @locations ) {
+%     foreach my $loc ( sort $location_sort @locations ) {
         <OPTION VALUE="<% $loc->locationnum %>"
                 <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
         ><% $loc->line |h %>
@@ -187,6 +187,7 @@ my $statedefault = $conf->config('statedefault')
 
 my %opt = @_;
 my $cgi           = $opt{'cgi'};
+my $cust_pkg     = $opt{'cust_pkg'};
 my $cust_main     = $opt{'cust_main'};
 my $prospect_main = $opt{'prospect_main'};
 
@@ -213,11 +214,22 @@ if ( $locationnum && $locationnum != -1 ) {
   $cust_location = new FS::cust_location;
   if ( $locationnum == -1 ) {
     $cust_location->$_( $cgi->param($_) ) foreach @location_fields;
+  } elsif ( $cust_pkg && $cust_pkg->locationnum ) {
+    my $pkg_location = $cust_pkg->cust_location;
+    $cust_location->$_( $pkg_location->$_ ) foreach @location_fields;
+    $opt{'empty_label'} ||= 'package address: '.$pkg_location->line;
   } elsif ( $cust_main ) {
     $cust_location->$_( $cust_main->get($prefix.$_) ) foreach @location_fields;
   }
 }
 
+my $location_sort = sub {
+     $a->country  cmp $b->country
+  or $a->city     cmp $b->city
+  or $a->address1 cmp $b->address1
+  or $a->address2 cmp $b->address2
+};
+
 my $disabled = ( $locationnum == -1 || ($editable && $locationnum) )
                  ? ''
                  : 'DISABLED';