X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2FFS%2Fpart_pkg.pm;h=4a0d157ca8b990307ff8a1f046cb386cbe6fd4fe;hb=077bb34b3467c3320440c49b76064f664c0eee98;hp=9f231780afbcb2596a851f3d09a8bc58ef477107;hpb=5fa2ec5b24f52ddb14e569970ccb8a24cadbc6b1;p=freeside.git diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 9f231780a..4a0d157ca 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -277,19 +277,20 @@ sub insert { } if ( $options{'part_pkg_vendor'} ) { - my($exportnum,$vendor_pkg_id); - my %options_part_pkg_vendor = $options{'part_pkg_vendor'}; - while(($exportnum,$vendor_pkg_id) = each %options_part_pkg_vendor){ - my $ppv = new FS::part_pkg_vendor( { - 'pkgpart' => $self->pkgpart, - 'exportnum' => $exportnum, - 'vendor_pkg_id' => $vendor_pkg_id, - } ); - my $error = $ppv->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error inserting part_pkg_vendor record: $error"; - } + while ( my ($exportnum, $vendor_pkg_id) = + each %{ $options{part_pkg_vendor} } + ) + { + my $ppv = new FS::part_pkg_vendor( { + 'pkgpart' => $self->pkgpart, + 'exportnum' => $exportnum, + 'vendor_pkg_id' => $vendor_pkg_id, + } ); + my $error = $ppv->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "Error inserting part_pkg_vendor record: $error"; + } } } @@ -456,48 +457,48 @@ sub replace { if ( $options->{'part_pkg_vendor'} ) { my($exportnum,$vendor_pkg_id); while ( ($exportnum,$vendor_pkg_id) - = each %{$options->{'part_pkg_vendor'}} ) { - my $noinsert = 0; - foreach my $part_pkg_vendor ( @part_pkg_vendor ) { - if($exportnum == $part_pkg_vendor->exportnum - && $vendor_pkg_id ne $part_pkg_vendor->vendor_pkg_id) { - $part_pkg_vendor->vendor_pkg_id($vendor_pkg_id); - my $error = $part_pkg_vendor->replace; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error replacing part_pkg_vendor record: $error"; - } - $noinsert = 1; - last; - } - elsif($exportnum == $part_pkg_vendor->exportnum - && $vendor_pkg_id eq $part_pkg_vendor->vendor_pkg_id) { - $noinsert = 1; - last; - } - } - unless ( $noinsert ) { - my $ppv = new FS::part_pkg_vendor( { - 'pkgpart' => $new->pkgpart, - 'exportnum' => $exportnum, - 'vendor_pkg_id' => $vendor_pkg_id, - } ); - my $error = $ppv->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error inserting part_pkg_vendor record: $error"; - } - } - push @current_exportnum, $exportnum; + = each %{$options->{'part_pkg_vendor'}} ) { + my $noinsert = 0; + foreach my $part_pkg_vendor ( @part_pkg_vendor ) { + if($exportnum == $part_pkg_vendor->exportnum + && $vendor_pkg_id ne $part_pkg_vendor->vendor_pkg_id) { + $part_pkg_vendor->vendor_pkg_id($vendor_pkg_id); + my $error = $part_pkg_vendor->replace; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "Error replacing part_pkg_vendor record: $error"; + } + $noinsert = 1; + last; + } + elsif($exportnum == $part_pkg_vendor->exportnum + && $vendor_pkg_id eq $part_pkg_vendor->vendor_pkg_id) { + $noinsert = 1; + last; + } + } + unless ( $noinsert ) { + my $ppv = new FS::part_pkg_vendor( { + 'pkgpart' => $new->pkgpart, + 'exportnum' => $exportnum, + 'vendor_pkg_id' => $vendor_pkg_id, + } ); + my $error = $ppv->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "Error inserting part_pkg_vendor record: $error"; + } + } + push @current_exportnum, $exportnum; } } foreach my $part_pkg_vendor ( @part_pkg_vendor ) { unless ( grep($_ eq $part_pkg_vendor->exportnum, @current_exportnum) ) { - my $error = $part_pkg_vendor->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error deleting part_pkg_vendor record: $error"; - } + my $error = $part_pkg_vendor->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "Error deleting part_pkg_vendor record: $error"; + } } } @@ -552,6 +553,8 @@ sub check { || $self->ut_enum('disabled', [ '', 'Y' ] ) || $self->ut_enum('custom', [ '', 'Y' ] ) || $self->ut_enum('no_auto', [ '', 'Y' ]) + || $self->ut_enum('recur_show_zero', [ '', 'Y' ]) + || $self->ut_enum('setup_show_zero', [ '', 'Y' ]) #|| $self->ut_moneyn('setup_cost') #|| $self->ut_moneyn('recur_cost') || $self->ut_floatn('setup_cost') @@ -605,6 +608,10 @@ sub pkg_comment { $pre. $self->pkg. ' - '. $self->custom_comment; } +sub price_info { # safety, in case a part_pkg hasn't defined price_info + ''; +} + sub custom_comment { my $self = shift; ( $self->custom ? '(CUSTOM) ' : '' ). $self->comment . ' ' . $self->price_info; @@ -1478,6 +1485,40 @@ sub _upgrade_data { # class method die $error if $error; } } + + # migrate use_disposition_taqua and use_disposition to disposition_in + @part_pkg_option = qsearch('part_pkg_option', + { 'optionname' => { op => 'LIKE', + value => 'use_disposition%', + }, + 'optionvalue' => 1, + }); + my %newopts = map { $_->pkgpart => $_ } + qsearch('part_pkg_option', { 'optionname' => 'disposition_in', } ); + foreach my $old_opt (@part_pkg_option) { + my $pkgpart = $old_opt->pkgpart; + my $newval = $old_opt->optionname eq 'use_disposition_taqua' ? '100' + : 'ANSWERED'; + my $error = $old_opt->delete; + die $error if $error; + + if ( exists($newopts{$pkgpart}) ) { + my $opt = $newopts{$pkgpart}; + $opt->optionvalue($opt->optionvalue.",$newval"); + $error = $opt->replace; + die $error if $error; + } else { + my $new_opt = new FS::part_pkg_option { + 'pkgpart' => $pkgpart, + 'optionname' => 'disposition_in', + 'optionvalue' => $newval, + }; + $error = $new_opt->insert; + die $error if $error; + $newopts{$pkgpart} = $new_opt; + } + } + } =item curuser_pkgs_sql @@ -1590,6 +1631,10 @@ foreach my $name (keys(%info)) { my $parents = $info{$name}->{'inherit_fields'} || []; my (%fields, %field_exists, @fieldorder); foreach my $parent ($name, @$parents) { + if ( !exists($info{$parent}) ) { + warn "$name tried to inherit from nonexistent '$parent'\n"; + next; + } %fields = ( # avoid replacing existing fields %{ $info{$parent}->{'fields'} || {} }, %fields @@ -1599,7 +1644,8 @@ foreach my $name (keys(%info)) { next if $field_exists{$_}; $field_exists{$_} = 1; # allow inheritors to remove inherited fields from the fieldorder - push @fieldorder, $_ if !exists($fields{$_}->{'disabled'}); + push @fieldorder, $_ if !exists($fields{$_}) or + !exists($fields{$_}->{'disabled'}); } } $plans{$name}->{'fields'} = \%fields;