X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Freason_type.pm;h=1d049861d92527264302ebc0b3131b553520ab7d;hp=89278d08a982e7293740e420af7f0bad4408b6ff;hb=dbf521cf2f1f1a05f4722006f339b2595c8ee70f;hpb=9509e5bfb7f9331303153cac24d7bfecbe2ea9f1 diff --git a/FS/FS/reason_type.pm b/FS/FS/reason_type.pm index 89278d08a..1d049861d 100644 --- a/FS/FS/reason_type.pm +++ b/FS/FS/reason_type.pm @@ -3,9 +3,40 @@ package FS::reason_type; use strict; use vars qw( @ISA ); use FS::Record qw( qsearch qsearchs ); +use Tie::IxHash; @ISA = qw(FS::Record); +tie our %class_name, 'Tie::IxHash', ( + 'C' => 'cancel', + 'R' => 'credit', + 'S' => 'suspend', + 'F' => 'refund', + 'X' => 'credit void', + 'I' => 'invoice void', + 'P' => 'payment void', +); + +our %class_purpose = ( + 'C' => 'explain why a customer package was cancelled', + 'R' => 'explain why a customer was credited', + 'S' => 'explain why a customer package was suspended', + 'F' => 'explain why a customer was refunded', + 'X' => 'explain why a credit was voided', + 'I' => 'explain why an invoice was voided', + 'P' => 'explain why a payment was voided', +); + +our %class_add_access_right = ( + 'C' => 'Add on-the-fly cancel reason', + 'R' => 'Add on-the-fly credit reason', + 'S' => 'Add on-the-fly suspend reason', + 'F' => 'Add on-the-fly refund reason', + 'X' => 'Add on-the-fly void reason', + 'I' => 'Add on-the-fly void reason', + 'P' => 'Add on-the-fly void reason', +); + =head1 NAME FS::reason_type - Object methods for reason_type records @@ -34,7 +65,7 @@ inherits from FS::Record. The following fields are currently supported: =item typenum - primary key -=item class - currently 'C' or 'S' for cancel or suspend +=item class - one of the keys of %class_name =item type - name of the type of reason @@ -89,7 +120,7 @@ sub check { my $error = $self->ut_numbern('typenum') - || $self->ut_enum('class', [ 'C', 'S' ] ) + || $self->ut_enum('class', [ keys %class_name ] ) || $self->ut_text('type') ; return $error if $error; @@ -119,6 +150,58 @@ sub enabled_reasons { } ); } +# Used by FS::Setup to initialize a new database. +sub _populate_initial_data { # class method + my ($self, %opts) = @_; + + my $conf = new FS::Conf; + + foreach ( keys %class_name ) { + my $object = $self->new( {'class' => $_, + 'type' => ucfirst($class_name{$_}). ' Reason', + } ); + my $error = $object->insert(); + die "error inserting $self into database: $error\n" + if $error; + } + + my $object = qsearchs('reason_type', { 'class' => 'R' }); + die "can't find credit reason type just inserted!\n" + unless $object; + + foreach ( keys %FS::cust_credit::reasontype_map ) { +# my $object = $self->new( {'class' => 'R', +# 'type' => $FS::cust_credit::reasontype_map{$_}, +# } ); +# my $error = $object->insert(); +# die "error inserting $self into database: $error\n" +# if $error; + $conf->set($_, $object->typenum); + } + + ''; + +} + +# Used by FS::Upgrade to migrate to a new database. +sub _upgrade_data { # class method + my ($self, %opts) = @_; + + foreach ( keys %class_name ) { + unless (scalar(qsearch('reason_type', { 'class' => $_ }))) { + my $object = $self->new( {'class' => $_, + 'type' => ucfirst($class_name{$_}), + } ); + my $error = $object->insert(); + die "error inserting $self into database: $error\n" + if $error; + } + } + + ''; + +} + =back =head1 BUGS