X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill_pkg_detail.pm;h=008f3ff7782a8c7901769ffbe5d7429a1bc2326e;hb=07560581aedba753147fcb3f6a5e7c30bdc2f77f;hp=f40ce5869cd41d49b3f046eef27b4f8da6a52c89;hpb=e6f3d047e87488badad86b71508b1f4d07c981f9;p=freeside.git diff --git a/FS/FS/cust_bill_pkg_detail.pm b/FS/FS/cust_bill_pkg_detail.pm index f40ce5869..008f3ff77 100644 --- a/FS/FS/cust_bill_pkg_detail.pm +++ b/FS/FS/cust_bill_pkg_detail.pm @@ -4,6 +4,7 @@ use strict; use vars qw( @ISA $me $DEBUG %GetInfoType ); use FS::Record qw( qsearch qsearchs dbdef dbh ); use FS::cust_bill_pkg; +use FS::Conf; @ISA = qw(FS::Record); $me = '[ FS::cust_bill_pkg_detail ]'; @@ -102,10 +103,26 @@ and replace methods. sub check { my $self = shift; + my $conf = new FS::Conf; + + my $phonenum = $self->phonenum; + my $phonenum_check_method; + if ( $conf->exists('svc_phone-allow_alpha_phonenum') ) { + $phonenum =~ s/\W//g; + $phonenum_check_method = 'ut_alphan'; + } else { + $phonenum =~ s/\D//g; + $phonenum_check_method = 'ut_numbern'; + } + $self->phonenum($phonenum); + $self->ut_numbern('detailnum') || $self->ut_foreign_key('billpkgnum', 'cust_bill_pkg', 'billpkgnum') + || $self->ut_moneyn('amount') || $self->ut_enum('format', [ '', 'C' ] ) || $self->ut_text('detail') + || $self->ut_foreign_keyn('classnum', 'usage_class', 'classnum') + || $self->$phonenum_check_method('phonenum') || $self->SUPER::check ; @@ -148,6 +165,37 @@ sub _upgrade_data { # class method } + } elsif ( $dbh->{pg_server_version} =~ /^704/ ) { # earlier? + + # ideally this would be supported in DBIx-DBSchema and friends + + # XXX_FIXME better locking + + foreach my $table ( qw( cust_bill_pkg_detail h_cust_bill_pkg_detail ) ){ + + warn "updating $table column classnum to integer\n" if $DEBUG; + + my $sql = "ALTER TABLE $table RENAME classnum TO old_classnum"; + my $sth = $dbh->prepare($sql) or die $dbh->errstr; + $sth->execute or die $sth->errstr; + + my $def = dbdef->table($table)->column('classnum'); + $def->type('integer'); + $def->length(''); + $sql = "ALTER TABLE $table ADD COLUMN ". $def->line($dbh); + $sth = $dbh->prepare($sql) or die $dbh->errstr; + $sth->execute or die $sth->errstr; + + $sql = "UPDATE $table SET classnum = int4( text( old_classnum ) )"; + $sth = $dbh->prepare($sql) or die $dbh->errstr; + $sth->execute or die $sth->errstr; + + $sql = "ALTER TABLE $table DROP old_classnum"; + $sth = $dbh->prepare($sql) or die $dbh->errstr; + $sth->execute or die $sth->errstr; + + } + } else { die "cust_bill_pkg_detail classnum upgrade unsupported for this Pg version\n";