1 package FS::cust_main_county;
4 use vars qw( @ISA @EXPORT_OK $conf
5 @cust_main_county %cust_main_county $countyflag );
7 use FS::Record qw( qsearch );
9 @ISA = qw( FS::Record );
10 @EXPORT_OK = qw( regionselector );
12 @cust_main_county = ();
15 #ask FS::UID to run this stuff for us later
16 $FS::UID::callback{'FS::cust_main_county'} = sub {
22 FS::cust_main_county - Object methods for cust_main_county objects
26 use FS::cust_main_county;
28 $record = new FS::cust_main_county \%hash;
29 $record = new FS::cust_main_county { 'column' => 'value' };
31 $error = $record->insert;
33 $error = $new_record->replace($old_record);
35 $error = $record->delete;
37 $error = $record->check;
39 ($county_html, $state_html, $country_html) =
40 FS::cust_main_county::regionselector( $county, $state, $country );
44 An FS::cust_main_county object represents a tax rate, defined by locale.
45 FS::cust_main_county inherits from FS::Record. The following fields are
50 =item taxnum - primary key (assigned automatically for new tax rates)
58 =item tax - percentage
68 Creates a new tax rate. To add the tax rate to the database, see L<"insert">.
72 sub table { 'cust_main_county'; }
76 Adds this tax rate to the database. If there is an error, returns the error,
77 otherwise returns false.
81 Deletes this tax rate from the database. If there is an error, returns the
82 error, otherwise returns false.
84 =item replace OLD_RECORD
86 Replaces the OLD_RECORD with this one in the database. If there is an error,
87 returns the error, otherwise returns false.
91 Checks all fields to make sure this is a valid tax rate. If there is an error,
92 returns the error, otherwise returns false. Called by the insert and replace
100 $self->ut_numbern('taxnum')
101 || $self->ut_textn('state')
102 || $self->ut_textn('county')
103 || $self->ut_text('country')
104 || $self->ut_float('tax')
115 =item regionselector [ COUNTY STATE COUNTRY [ PREFIX [ ONCHANGE ] ] ]
120 my ( $selected_county, $selected_state, $selected_country,
121 $prefix, $onchange ) = @_;
125 # unless ( @cust_main_county ) { #cache
126 @cust_main_county = qsearch('cust_main_county', {} );
127 foreach my $c ( @cust_main_county ) {
128 $countyflag=1 if $c->county;
129 push @{$cust_main_county{$c->country}{$c->state}}, $c->county;
132 $countyflag=1 if $selected_county;
134 my $script_html = <<END;
136 function opt(what,value,text) {
137 var optionName = new Option(text, value, false, false);
138 var length = what.length;
139 what.options[length] = optionName;
141 function ${prefix}country_changed(what) {
142 country = what.options[what.selectedIndex].text;
143 for ( var i = what.form.${prefix}state.length; i >= 0; i-- )
144 what.form.${prefix}state.options[i] = null;
146 #what.form.${prefix}state.options[0] = new Option('', '', false, true);
148 foreach my $country ( sort keys %cust_main_county ) {
149 $script_html .= "\nif ( country == \"$country\" ) {\n";
150 foreach my $state ( sort keys %{$cust_main_county{$country}} ) {
151 my $text = $state || '(n/a)';
152 $script_html .= qq!opt(what.form.${prefix}state, "$state", "$text");\n!;
154 $script_html .= "}\n";
157 $script_html .= <<END;
159 function ${prefix}state_changed(what) {
163 $script_html .= <<END;
164 state = what.options[what.selectedIndex].text;
165 country = what.form.${prefix}country.options[what.form.${prefix}country.selectedIndex].text;
166 for ( var i = what.form.${prefix}county.length; i >= 0; i-- )
167 what.form.${prefix}county.options[i] = null;
170 foreach my $country ( sort keys %cust_main_county ) {
171 $script_html .= "\nif ( country == \"$country\" ) {\n";
172 foreach my $state ( sort keys %{$cust_main_county{$country}} ) {
173 $script_html .= "\nif ( state == \"$state\" ) {\n";
174 foreach my $county ( sort @{$cust_main_county{$country}{$state}} ) {
175 my $text = $county || '(n/a)';
177 qq!opt(what.form.${prefix}county, "$county", "$text");\n!;
179 $script_html .= "}\n";
181 $script_html .= "}\n";
185 $script_html .= <<END;
190 my $county_html = $script_html;
192 $county_html .= qq!<SELECT NAME="${prefix}county" onChange="$onchange">!;
193 $county_html .= '</SELECT>';
196 qq!<INPUT TYPE="hidden" NAME="${prefix}county" VALUE="$selected_county">!;
199 my $state_html = qq!<SELECT NAME="${prefix}state" !.
200 qq!onChange="${prefix}state_changed(this); $onchange">!;
201 foreach my $state ( sort keys %{ $cust_main_county{$selected_country} } ) {
202 my $text = $state || '(n/a)';
203 my $selected = $state eq $selected_state ? 'SELECTED' : '';
204 $state_html .= "\n<OPTION $selected VALUE=$state>$text</OPTION>"
206 $state_html .= '</SELECT>';
208 $state_html .= '</SELECT>';
210 my $country_html = qq!<SELECT NAME="${prefix}country" !.
211 qq!onChange="${prefix}country_changed(this); $onchange">!;
212 my $countrydefault = $conf->config('countrydefault') || 'US';
213 foreach my $country (
214 sort { ($b eq $countrydefault) <=> ($a eq $countrydefault) or $a cmp $b }
215 keys %cust_main_county
217 my $selected = $country eq $selected_country ? ' SELECTED' : '';
218 $country_html .= "\n<OPTION$selected>$country</OPTION>"
220 $country_html .= '</SELECT>';
222 ($county_html, $state_html, $country_html);
230 regionseletor? putting web ui components in here? they should probably live
235 L<FS::Record>, L<FS::cust_main>, L<FS::cust_bill>, schema.html from the base