diff options
author | Mark Wells <mark@freeside.biz> | 2013-04-30 21:05:49 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2013-05-02 13:21:06 -0700 |
commit | 7280c02bfea0defe3bec909e2de8a69c175ef61f (patch) | |
tree | d9fa89d3d48cb0214c6b5db94f095974db9230fd /FS/FS/reason.pm | |
parent | c7f829cfde03b3a81b2bd3e642a82ee0bc845f5d (diff) |
transfer package balances on package change, #22597
Diffstat (limited to 'FS/FS/reason.pm')
-rw-r--r-- | FS/FS/reason.pm | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/FS/FS/reason.pm b/FS/FS/reason.pm index a9a7d74..e6b20db 100644 --- a/FS/FS/reason.pm +++ b/FS/FS/reason.pm @@ -139,6 +139,43 @@ sub reasontype { =back +=head1 CLASS METHODS + +=over 4 + +=item new_or_existing reason => REASON, type => TYPE, class => CLASS + +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). + +This will die if anything fails. + +=cut + +sub new_or_existing { + my $class = shift; + my %opt = @_; + + my $error = ''; + my %hash = ('class' => $opt{'class'}, 'type' => $opt{'type'}); + my $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; + + %hash = ('reason_type' => $reason_type->typenum, 'reason' => $opt{'reason'}); + my $reason = qsearchs('reason', \%hash) + || FS::reason->new(\%hash); + + $error = $reason->insert unless $reason->reasonnum; + die "error inserting reason: $error\n" if $error; + + $reason; +} + + =head1 BUGS Here by termintes. Don't use on wooden computers. |