X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_credit.pm;h=d0aa3a4b4fe5c1c47e6c31f0a51807a37e6570e1;hb=dd2249efe0daa3fc3257029de84d212aa89a4ee9;hp=6cbe1d046780fe4aa172f40a7e8a4f5e43c05bf8;hpb=7753d82a54563e4c9189d54ec23fac969e592e89;p=freeside.git diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm index 6cbe1d046..d0aa3a4b4 100644 --- a/FS/FS/cust_credit.pm +++ b/FS/FS/cust_credit.pm @@ -8,11 +8,13 @@ use FS::Misc qw(send_email); use FS::Record qw( qsearch qsearchs dbdef ); use FS::cust_main_Mixin; use FS::cust_main; +use FS::cust_pkg; use FS::cust_refund; use FS::cust_credit_bill; use FS::part_pkg; use FS::reason_type; use FS::reason; +use FS::cust_event; @ISA = qw( FS::cust_main_Mixin FS::Record ); $me = '[ FS::cust_credit ]'; @@ -58,22 +60,46 @@ FS::Record. The following fields are currently supported: =over 4 -=item crednum - primary key (assigned automatically for new credits) +=item crednum -=item custnum - customer (see L) +Primary key (assigned automatically for new credits) -=item amount - amount of the credit +=item custnum -=item _date - specified as a UNIX timestamp; see L. Also see +Customer (see L) + +=item amount + +Amount of the credit + +=item _date + +Specified as a UNIX timestamp; see L. Also see L and L for conversion functions. -=item otaker - order taker (assigned automatically, see L) +=item otaker + +Order taker (assigned automatically, see L) + +=item reason + +Text ( deprecated ) + +=item reasonnum + +Reason (see L) + +=item addlinfo + +Text -=item reason - text ( deprecated ) +=item closed -=item reasonum - int reason (see L) +Books closed flag, empty or `Y' -=item closed - books closed flag, empty or `Y' +=item pkgnum + +Desired pkgnum when using experimental package balances. =back @@ -209,7 +235,8 @@ sub delete { my $cust_main = $self->cust_main; my $error = send_email( - 'from' => $conf->config('invoice_from'), #??? well as good as any + 'from' => $conf->config('invoice_from', $self->cust_main->agentnum), + #invoice_from??? well as good as any 'to' => $conf->config('deletecredits'), 'subject' => 'FREESIDE NOTIFICATION: Credit deleted', 'body' => [ @@ -262,14 +289,20 @@ methods. sub check { my $self = shift; + $self->otaker(getotaker) unless ($self->otaker); + my $error = $self->ut_numbern('crednum') || $self->ut_number('custnum') || $self->ut_numbern('_date') || $self->ut_money('amount') + || $self->ut_alpha('otaker') || $self->ut_textn('reason') || $self->ut_foreign_key('reasonnum', 'reason', 'reasonnum') + || $self->ut_textn('addlinfo') || $self->ut_enum('closed', [ '', 'Y' ]) + || $self->ut_foreign_keyn('pkgnum', 'cust_pkg', 'pkgnum') + || $self->ut_foreign_keyn('eventnum', 'cust_event', 'eventnum') ; return $error if $error; @@ -280,29 +313,9 @@ sub check { $self->_date(time) unless $self->_date; - $self->otaker(getotaker); - $self->SUPER::check; } -=item cust_refund - -Depreciated. See the cust_credit_refund method. - -#Returns all refunds (see L) for this credit. - -=cut - -sub cust_refund { - use Carp; - croak "FS::cust_credit->cust_pay depreciated; see ". - "FS::cust_credit->cust_credit_refund"; - #my $self = shift; - #sort { $a->_date <=> $b->_date } - # qsearch( 'cust_refund', { 'crednum' => $self->crednum } ) - #; -} - =item cust_credit_refund Returns all refund applications (see L) for this credit. @@ -330,15 +343,15 @@ sub cust_credit_bill { ; } -=item credited +=item unapplied -Returns the amount of this credit that is still outstanding; which is +Returns the amount of this credit that is still unapplied/outstanding; amount minus all refund applications (see L) and applications to invoices (see L). =cut -sub credited { +sub unapplied { my $self = shift; my $amount = $self->amount; $amount -= $_->amount foreach ( $self->cust_credit_refund ); @@ -346,6 +359,18 @@ sub credited { sprintf( "%.2f", $amount ); } +=item credited + +Deprecated name for the unapplied method. + +=cut + +sub credited { + my $self = shift; + #carp "cust_credit->credited deprecated; use ->unapplied"; + $self->unapplied(@_); +} + =item cust_main Returns the customer (see L) for this credit. @@ -388,6 +413,7 @@ sub reason { if (!$reason && $typenum) { $reason = new FS::reason( { 'reason_type' => $typenum, 'reason' => $value, + 'disabled' => 'Y', } ); $reason->insert and $reason = undef; } @@ -400,27 +426,26 @@ sub reason { $dbh->commit or die $dbh->errstr if $oldAutoCommit; - $reason ? $reason->reason : ''; + ( $reason ? $reason->reason : '' ). + ( $self->addlinfo ? ' '.$self->addlinfo : '' ); } # _upgrade_data # # Used by FS::Upgrade to migrate to a new database. -# -# sub _upgrade_data { # class method - my ($self, %opts) = @_; + my ($class, %opts) = @_; - warn "$me upgrading $self\n" if $DEBUG; + warn "$me upgrading $class\n" if $DEBUG; - if (defined dbdef->table($self->table)->column('reason')) { + if (defined dbdef->table($class->table)->column('reason')) { warn "$me Checking for unmigrated reasons\n" if $DEBUG; - my @cust_credits = qsearch({ 'table' => $self->table, - 'hashref' => {}, - 'extrasql' => 'WHERE reason IS NOT NULL', + my @cust_credits = qsearch({ 'table' => $class->table, + 'hashref' => {}, + 'extra_sql' => 'WHERE reason IS NOT NULL', }); if (scalar(grep { $_->getfield('reason') =~ /\S/ } @cust_credits)) { @@ -430,7 +455,7 @@ sub _upgrade_data { # class method unless ($reason_type) { $reason_type = new FS::reason_type( $hashref ); my $error = $reason_type->insert(); - die "$self had error inserting FS::reason_type into database: $error\n" + die "$class had error inserting FS::reason_type into database: $error\n" if $error; } @@ -439,6 +464,7 @@ sub _upgrade_data { # class method }; my $noreason = qsearchs( 'reason', $hashref ); unless ($noreason) { + $hashref->{'disabled'} = 'Y'; $noreason = new FS::reason( $hashref ); my $error = $noreason->insert(); die "can't insert legacy reason '(none)' into database: $error\n" @@ -458,8 +484,8 @@ sub _upgrade_data { # class method $cust_credit->setfield('reason', ''); my $error = $cust_credit->replace; - warn "*** WARNING: error replacing reason in $self ". - $self->crednum. ": $error ***\n" + warn "*** WARNING: error replacing reason in $class ". + $cust_credit->crednum. ": $error ***\n" if $error; } } @@ -475,11 +501,10 @@ sub _upgrade_data { # class method unless ($reason_type) { $reason_type = new FS::reason_type( $hashref ); my $error = $reason_type->insert(); - die "$self had error inserting FS::reason_type into database: $error\n" + die "$class had error inserting FS::reason_type into database: $error\n" if $error; } - # or clause for 1.7.x - $conf->set($_, $reason_type->typenum) or die "failed setting config"; + $conf->set($_, $reason_type->typenum); } } @@ -490,7 +515,7 @@ sub _upgrade_data { # class method unless ($reason_type) { $reason_type = new FS::reason_type( $hashref ); my $error = $reason_type->insert(); - die "$self had error inserting FS::reason_type into database: $error\n" + die "$class had error inserting FS::reason_type into database: $error\n" if $error; } @@ -525,13 +550,13 @@ sub _upgrade_data { # class method =over 4 -=item credited_sql +=item unapplied_sql Returns an SQL fragment to retreive the unapplied amount. =cut -sub credited_sql { +sub unapplied_sql { #my $class = shift; "amount @@ -549,14 +574,29 @@ sub credited_sql { } +=item credited_sql + +Deprecated name for the unapplied_sql method. + +=cut + +sub credited_sql { + #my $class = shift; + + #carp "cust_credit->credited_sql deprecated; use ->unapplied_sql"; + + #$class->unapplied_sql(@_); + unapplied_sql(); +} + =back =head1 BUGS The delete method. The replace method. -B and B should probably be called B and -B. +B and B are now called B and +B. The old method names should start to give warnings. =head1 SEE ALSO