X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Freason.pm;h=f50af7ad3c04605578a0f8c372b9f05ea58c8415;hb=b3db3e68f602f3ca395a6bc272a4de6fef2d0895;hp=4c2587f0897f5acea861d64738326207f5137459;hpb=3af54162b6f9fae1c836390a3ff072af38d60550;p=freeside.git diff --git a/FS/FS/reason.pm b/FS/FS/reason.pm index 4c2587f08..f50af7ad3 100644 --- a/FS/FS/reason.pm +++ b/FS/FS/reason.pm @@ -161,13 +161,9 @@ Accepts an arrayref of reason objects, to be merged into this reason. Reasons must all have the same reason_type class as this one. Matching reasonnums will be replaced in the following tables: - cust_bill_void - cust_bill_pkg_void cust_credit cust_credit_void - cust_pay_void cust_pkg_reason - cust_refund =cut @@ -195,13 +191,9 @@ sub merge { $error = "Mismatched reason type class" unless $reason->reasontype->class eq $class; foreach my $table ( qw( - cust_bill_void - cust_bill_pkg_void cust_credit cust_credit_void - cust_pay_void cust_pkg_reason - cust_refund )) { last if $error; my @fields = ('reasonnum'); @@ -239,7 +231,8 @@ sub merge { Fetches the reason matching these parameters if there is one. If not, inserts one. Will also insert the reason type if necessary. CLASS must -be one of 'C' (cancel reasons), 'R' (credit reasons), or 'S' (suspend reasons). +be one of 'C' (cancel reasons), 'R' (credit reasons), 'S' (suspend reasons), +or 'F' (refund reasons). This will die if anything fails. @@ -250,14 +243,25 @@ sub new_or_existing { my %opt = @_; my $error = ''; - my %hash = ('class' => $opt{'class'}, 'type' => $opt{'type'}); - my $reason_type = qsearchs('reason_type', \%hash) - || FS::reason_type->new(\%hash); + my $reason_type; + if ( ref $opt{type} eq 'FS::reason_type' ) { + $reason_type = $opt{type}; + } elsif ( $opt{type} =~ /^\d+$/ ) { + $reason_type = FS::reason_type->by_key($opt{type}); + if (!$reason_type) { + die "reason_type #$opt{type} not found\n"; + } + } else { + my %hash = ('class' => $opt{'class'}, 'type' => $opt{'type'}); + $reason_type = qsearchs('reason_type', \%hash) + || FS::reason_type->new(\%hash); - $error = $reason_type->insert unless $reason_type->typenum; - die "error inserting reason type: $error\n" if $error; + $error = $reason_type->insert unless $reason_type->typenum; + die "error inserting reason type: $error\n" if $error; + } - %hash = ('reason_type' => $reason_type->typenum, 'reason' => $opt{'reason'}); + my %hash = ('reason_type' => $reason_type->typenum, + 'reason' => $opt{'reason'}); my $reason = qsearchs('reason', \%hash) || FS::reason->new(\%hash);