X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=b58b11cfac981c5f015688f683d7289a0cc14bd3;hb=b16afdcb3d9ea99c7c125d64ee864d7dff63a384;hp=10ff3f916314111eda14b784c25f7f6b01fbbe0e;hpb=101cc49024f693a837e2ff74a89a300b7ecb8976;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 10ff3f916..b58b11cfa 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -2,15 +2,17 @@ package FS::svc_Common; use strict; use vars qw( @ISA $noexport_hack $DEBUG ); +use Carp; use FS::Record qw( qsearch qsearchs fields dbh ); +use FS::cust_main_Mixin; use FS::cust_svc; use FS::part_svc; use FS::queue; +use FS::cust_main; -@ISA = qw( FS::Record ); +@ISA = qw( FS::cust_main_Mixin FS::Record ); $DEBUG = 0; -#$DEBUG = 1; =head1 NAME @@ -33,6 +35,38 @@ inherit from, i.e. FS::svc_acct. FS::svc_Common inherits from FS::Record. =cut +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + my $self = {}; + bless ($self, $class); + + unless ( defined ( $self->table ) ) { + $self->{'Table'} = shift; + carp "warning: FS::Record::new called with table name ". $self->{'Table'}; + } + + #$self->{'Hash'} = shift; + my $newhash = shift; + $self->{'Hash'} = { map { $_ => $newhash->{$_} } qw(svcnum svcpart) }; + $self->setdefault; + $self->{'Hash'}{$_} = $newhash->{$_} + foreach #grep length($newhash->{$_}), + keys %$newhash; + + foreach my $field ( grep !defined($self->{'Hash'}{$_}), $self->fields ) { + $self->{'Hash'}{$field}=''; + } + + $self->_rebless if $self->can('_rebless'); + + $self->{'modified'} = 0; + + $self->_cache($self->{'Hash'}, shift) if $self->can('_cache') && @_; + + $self; +} + sub virtual_fields { # This restricts the fields based on part_svc_column and the svcpart of @@ -100,8 +134,11 @@ If I is set to an array reference, the jobnums of any export jobs will be added to the referenced array. If I is set to an array reference of FS::tablename objects (for -example, FS::acct_snarf objects), they will have their svcnum fieldsset and -will be inserted after this record, but before any exports are run. +example, FS::acct_snarf objects), they will have their svcnum field set and +will be inserted after this record, but before any exports are run. Each +element of the array can also optionally be a two-element array reference +containing the child object and the name of an alternate field to be filled in +with the newly-inserted svcnum, for example C<[ $svc_forward, 'srcsvc' ]> If I is set (to a scalar jobnum or an array reference of jobnums), all provisioning jobs will have a dependancy on the supplied @@ -172,8 +209,15 @@ sub insert { } foreach my $object ( @$objects ) { - $object->svcnum($self->svcnum); - $error = $object->insert; + my($field, $obj); + if ( ref($object) eq 'ARRAY' ) { + ($obj, $field) = @$object; + } else { + $obj = $object; + $field = 'svcnum'; + } + $obj->$field($self->svcnum); + $error = $obj->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error;