+
+ $self->get('taxtype') =~ /^FS::(\w+)$/;
+ my $rate_table = $1;
+ $error ||= $self->ut_foreign_key('taxnum', $rate_table, 'taxnum');
+
+ return $error if $error;
+
+ if ( $self->get('exempt_cust') ) {
+ $self->set($_ => '') for qw(
+ exempt_cust_taxname exempt_setup exempt_recur exempt_monthly month year
+ );
+ } elsif ( $self->get('exempt_cust_taxname') ) {
+ $self->set($_ => '') for qw(
+ exempt_setup exempt_recur exempt_monthly month year
+ );
+ } elsif ( $self->get('exempt_setup') || $self->get('exempt_recur') ) {
+ $self->set($_ => '') for qw(exempt_monthly month year);
+ } elsif ( $self->get('exempt_monthly') ) {
+ $self->year =~ /^\d{4}$/
+ or return "illegal exemption year: '".$self->year."'";
+ $self->month >= 1 && $self->month <= 12
+ or return "illegal exemption month: '".$self->month."'";
+ } else {
+ return "no exemption type selected";
+ }
+
+ '';
+}
+
+=item cust_main_county
+
+=item tax_rate
+
+Returns the associated tax definition if it still exists in the database.
+Otherwise returns false.
+
+=cut
+
+sub cust_main_county {
+ my $self = shift;
+ my $class = $self->taxtype;
+ $class->by_key($self->taxnum);
+}
+
+sub tax_rate {
+ my $self = shift;
+ my $class = $self->taxtype;
+ $class->by_key($self->taxnum);
+}
+
+sub _upgrade_data {
+ my $class = shift;
+
+ my $journal = 'cust_tax_exempt_pkg_flags';
+ if ( !FS::upgrade_journal->is_done($journal) ) {
+ my $sql = "UPDATE cust_tax_exempt_pkg SET exempt_monthly = 'Y' ".
+ "WHERE month IS NOT NULL";
+ dbh->do($sql) or die dbh->errstr;
+ FS::upgrade_journal->set_done($journal);
+ }
+
+ $journal = 'cust_tax_exempt_pkg_taxtype';
+ if ( !FS::upgrade_journal->is_done($journal) ) {
+ my $sql = "UPDATE cust_tax_exempt_pkg ".
+ "SET taxtype = 'FS::cust_main_county' WHERE taxtype IS NULL";
+ dbh->do($sql) or die dbh->errstr;
+ $sql = "UPDATE cust_tax_exempt_pkg_void ".
+ "SET taxtype = 'FS::cust_main_county' WHERE taxtype IS NULL";
+ dbh->do($sql) or die dbh->errstr;
+ FS::upgrade_journal->set_done($journal);
+ }
+
+