use FS::agent;
use FS::sales;
use FS::cust_credit_void;
+use FS::cust_bill_pkg;
use FS::upgrade_journal;
$me = '[ FS::cust_credit ]';
my $cust_main = $self->cust_main;
my $error = send_email(
- 'from' => $conf->config('invoice_from', $self->cust_main->agentnum),
+ 'from' => $conf->invoice_from_full($self->cust_main->agentnum),
#invoice_from??? well as good as any
'to' => $conf->config('deletecredits'),
'subject' => 'FREESIDE NOTIFICATION: Credit deleted',
=cut
-# yes, false laziness with cust_pay and cust_bill
-# but frankly I don't have time to fix it now
-
sub void {
my $self = shift;
my $reason = shift;
+ unless (ref($reason) || !$reason) {
+ $reason = FS::reason->new_or_existing(
+ 'class' => 'X',
+ 'type' => 'Void credit',
+ 'reason' => $reason
+ );
+ }
+
local $SIG{HUP} = 'IGNORE';
local $SIG{INT} = 'IGNORE';
local $SIG{QUIT} = 'IGNORE';
my $cust_credit_void = new FS::cust_credit_void ( {
map { $_ => $self->get($_) } $self->fields
} );
- $cust_credit_void->set('void_reason', $reason);
+ $cust_credit_void->set('void_reasonnum', $reason->reasonnum);
my $error = $cust_credit_void->insert;
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
'apply' => 1, #0 leaves the credit unapplied
#the credit
- 'newreasonnum' => scalar($cgi->param('newreasonnum')),
- 'newreasonnum_type' => scalar($cgi->param('newreasonnumT')),
map { $_ => scalar($cgi->param($_)) }
#fields('cust_credit')
- qw( custnum _date amount reason reasonnum addlinfo ), #pkgnum eventnum
+ qw( custnum _date amount reasonnum addlinfo ), #pkgnum eventnum
);
=cut
#maybe i should just be an insert with extra args instead of a class method
-use FS::cust_bill_pkg;
sub credit_lineitems {
my( $class, %arg ) = @_;
my $curuser = $FS::CurrentUser::CurrentUser;
#});
my $error = '';
- if ($arg{reasonnum} == -1) {
-
- $error = 'Enter a new reason (or select an existing one)'
- unless $arg{newreasonnum} !~ /^\s*$/;
- my $reason = new FS::reason {
- 'reason' => $arg{newreasonnum},
- 'reason_type' => $arg{newreasonnum_type},
- };
- $error ||= $reason->insert;
- if ( $error ) {
- $dbh->rollback if $oldAutoCommit;
- return "Error inserting reason: $error";
- }
- $arg{reasonnum} = $reason->reasonnum;
- }
my $cust_credit = new FS::cust_credit ( {
map { $_ => $arg{$_} }
#fields('cust_credit')
- qw( custnum _date amount reason reasonnum addlinfo ), #pkgnum eventnum
+ qw( custnum _date amount reasonnum addlinfo ), #pkgnum eventnum
} );
$error = $cust_credit->insert;
if ( $error ) {
# recalculate taxes with new amounts
$taxlisthash{$invnum} ||= {};
- my $part_pkg = $cust_bill_pkg->part_pkg;
- $cust_main->_handle_taxes( $part_pkg,
- $taxlisthash{$invnum},
- $cust_bill_pkg,
- $cust_bill_pkg->cust_pkg,
- $cust_bill_pkg->cust_bill->_date, #invoice time
- $cust_bill_pkg->cust_pkg->pkgpart,
- );
+ if ( $cust_bill_pkg->pkgnum or $cust_bill_pkg->feepart ) {
+ $cust_main->_handle_taxes( $taxlisthash{$invnum}, $cust_bill_pkg );
+ } # otherwise the item itself is a tax, and assume the caller knows
+ # what they're doing
}
###
# we still have to deal with the possibility that the tax links don't
# cover the whole amount of tax because of an incomplete upgrade...
- if ($amount > 0) {
+ if ($amount > 0.005) {
$cust_credit_bill{$invnum} += $amount;
push @{ $cust_credit_bill_pkg{$invnum} },
new FS::cust_credit_bill_pkg {
'billpkgnum' => $tax_item->billpkgnum,
- 'amount' => $amount,
+ 'amount' => sprintf('%.2f', $amount),
'setuprecur' => 'setup',
};