sort locations in dropdown, RT#10766
[freeside.git] / httemplate / elements / tr-select-cust_location.html
index 5e938b5..d44b1c4 100644 (file)
@@ -143,14 +143,14 @@ Example:
 </SCRIPT>
 
 <TR>
-  <TH ALIGN="right">Service&nbsp;location</TH>
+  <<%$th%> ALIGN="right"><% $opt{'label'} || 'Service&nbsp;location' %></<%$th%>>
   <TD COLSPAN=7>
     <SELECT NAME="locationnum" onChange="locationnum_changed(this);">
       <OPTION VALUE=""><% $opt{'empty_label'} || '(default service address)' |h %>
 %     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 %>
@@ -169,6 +169,7 @@ Example:
              #'onchange' ?  probably not
              'disabled'     => $disabled,
              'no_asterisks' => 1,
+             'no_bold'      => $opt{'no_bold'},
           )
 %>
 
@@ -186,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'};
 
@@ -212,13 +214,26 @@ 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';
 
+my $th = $opt{'no_bold'} ? 'TD' : 'TH';
+
 </%init>