X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fbrowse%2Fcust_main_county.cgi;h=26a3e21b9662c0bbdb3b8659eef01a0d2254674d;hp=6d89edcfa4ff6ffab1e4fb2b7b0a43faad82b75e;hb=ac8410cdb67639afeb84c84e975fffadf3e6cce1;hpb=01758c90c7d2c2b83569b9138ac9a315f1695a56 diff --git a/httemplate/browse/cust_main_county.cgi b/httemplate/browse/cust_main_county.cgi index 6d89edcfa..26a3e21b9 100755 --- a/httemplate/browse/cust_main_county.cgi +++ b/httemplate/browse/cust_main_county.cgi @@ -10,7 +10,9 @@ 'table' => 'cust_main_county', 'hashref' => $hashref, 'order_by' => - 'ORDER BY country, state, county, taxclass', + 'ORDER BY country, state, county, city, '. + 'district, taxclass, '. + "COALESCE(taxname, '')", }, 'count_query' => $count_query, 'header' => \@header, @@ -46,7 +48,7 @@ my $exempt_sub = sub { }; my $cs_oldrow; -my $cell_style; +my $cell_style = ''; my $cell_style_sub = sub { my $row = shift; if ( $cs_oldrow ne $row ) { @@ -54,11 +56,10 @@ my $cell_style_sub = sub { if ( $cs_oldrow->country ne $row->country ) { $cell_style = 'border-top:2px solid #000000'; } elsif ( $cs_oldrow->state ne $row->state ) { - #$cell_style = 'border-top:1px solid #cccccc'; #default? - $cell_style = 'border-top:1px solid #bbbbbb'; - } elsif ( $cs_oldrow->state eq $row->state ) { - #$cell_style = 'border-top:dashed 1px dark gray'; - #$cell_style = 'border-top:1px dashed #cccccc'; + $cell_style = 'border-top:1px solid #888888'; + } elsif ( $cs_oldrow->county ne $row->county ) { + $cell_style = 'border-top:1px solid #cccccc'; + } else { $cell_style = ''; } } @@ -441,76 +442,134 @@ if ( $taxclass ) { $cell_style = ''; -my @header = ( 'Country', 'State/Province', 'County', 'City' ); -my @header2 = ( '', '', '', '', ); -my @links = ( '', '', '', '', ); -my @link_onclicks = ( '', '', '', '', ); -my $align = 'llll'; +my @header = ( 'Country', 'State/Province', 'County', 'City', '' ); +# last column is 'district', but usually unused +my @header2 = ( '', '', '', '', '' ); +my @links = ( '', '', '', '', '' ); +my @link_onclicks = ( '', '', '', '', '' ); +my $align = 'lllll'; my %seen_country = (); my %seen_state = (); +my %seen_county = (); my @fields = ( sub { my $country = shift->country; return '' if $seen_country{$country}++; - code2country($country). " ($country)"; + FS::geocode_Mixin->code2country($country). " ($country)"; }, + + #state sub { my $label = $seen_state{$_[0]->country}->{$_[0]->state}++ ? '' : state_label($_[0]->state, $_[0]->country); + my $countylinks = ( $_[0]->county && $label ) ? ' '. add_link( desc => 'Add more counties', col => 'state', - label=> 'add more counties', + label=> 'add more counties', row => $_[0], cgi => $cgi, ). ' '. collapse_link( col => 'state', - label=> 'remove all counties', + label=> 'remove all counties', row => $_[0], cgi => $cgi, ) : ''; + my $addlink = ( $_[0]->state ? '' : ' '. expand_link( desc => 'Add States', row => $_[0], - label => 'add states', + label => 'add states', cgi => $cgi, ) ); + $label.$countylinks.$addlink; }, - sub { $_[0]->county - ? $_[0]->county. ' '. - remove_link( col => 'county', - label=> 'remove county', - row => $_[0], - cgi => $cgi, - ) + + #county + sub { my $label = + $seen_county{$_[0]->country}->{$_[0]->state}->{$_[0]->county}++ + ? '' : $_[0]->county; + + my $citylinks = ''; + if ( $label ) { + $citylinks = $_[0]->city + ? ' '. add_link( + desc => 'Add more cities', + col => 'county', + label=> 'add more cities', + row => $_[0], + cgi => $cgi, + ). + ' '. collapse_link( + col => 'county', + label=> 'remove all cities', + row => $_[0], + cgi => $cgi, + ) + : ' '. remove_link( col => 'county', + label=> 'remove county', + row => $_[0], + cgi => $cgi, + ); + } + + $_[0]->county + ? $label.$citylinks : '(all) '. expand_link( desc => 'Add Counties', row => $_[0], - label => 'add counties', + label => 'add counties', cgi => $cgi, ); }, - sub { $_[0]->city - ? $_[0]->city. ' '. - collapse_link( col => 'county', - label=> 'remove cities', - row => $_[0], - cgi => $cgi, - ) - : '(all) '. - expand_link( desc => 'Add Cities', - row => $_[0], - label => 'add cities', - cgi => $cgi, + + #city + sub { + my $r = shift; + if ( $r->city ) { + + if ( $r->taxclass #but if it has a taxclass, can't remove + or $r->district ) { # or a district + $r->city; + } else { + $r->city. ' '. + remove_link( col => 'city', + label=> 'remove city', + row => $r, + cgi => $cgi, ); + } + } else { + '(all) '. + expand_link( desc => 'Add Cities', + row => $r, + label => 'add cities', + cgi => $cgi, + ); + } }, + + #district + sub { + my $r = shift; + if ( $r->district ) { + $r->district . ' '. + remove_link( col => 'district', + label=> 'remove district', + row => $r, + cgi => $cgi, + ); + } + # manually editing districts is not exactly intended + }, + ); my @color = ( @@ -523,10 +582,24 @@ my @color = ( if ( $conf->exists('enable_taxclasses') ) { push @header, qq!Tax class (add new)!; push @header2, '(per-package classification)'; - push @fields, sub { $_[0]->taxclass || '(all) '. - separate_taxclasses_link($_[0], 'Separate Taxclasses'). - 'separate taxclasses' - }; + push @fields, sub { + my $r = shift; + if ( $r->taxclass ) { + $r->taxclass; + } else { + my $sql = 'SELECT COUNT(*) FROM cust_main_county + WHERE country = ? AND state = ? AND county = ? + AND city = ? AND taxclass IS NOT NULL'; + if ( FS::Record->scalar_sql($sql, map $r->$_, + qw( country state county city) ) ) { + '(none)'; + } else { + '(all) '. + separate_taxclasses_link($r, 'Separate Taxclasses'). + 'separate taxclasses'; + } + } + }; push @color, sub { shift->taxclass ? '000000' : '999999' }; push @links, ''; push @link_onclicks, ''; @@ -553,7 +626,8 @@ my $cb_sub = sub { my $cust_main_county = shift; if ( $cb_oldrow ) { - if ( $cb_oldrow->city ne $cust_main_county->city + if ( $cb_oldrow->district ne $cust_main_county->district + || $cb_oldrow->city ne $cust_main_county->city || $cb_oldrow->county ne $cust_main_county->county || $cb_oldrow->state ne $cust_main_county->state || $cb_oldrow->country ne $cust_main_county->country