summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2009-04-11 21:42:52 +0000
committerivan <ivan>2009-04-11 21:42:52 +0000
commit8a79ead8b600494b214d7492dab043d5dfc96587 (patch)
tree7026a438043201c6e8a0ab736dbd0465afe82fd0
parentb4cb5e5d2d4faca16911e1992fbda8fa1528ed4e (diff)
migrate send_email, suspend_if_balance and credit events, RT#3905
-rw-r--r--FS/FS/part_event/Action/writeoff.pm33
-rw-r--r--bin/freeside-migrate-events29
2 files changed, 56 insertions, 6 deletions
diff --git a/FS/FS/part_event/Action/writeoff.pm b/FS/FS/part_event/Action/writeoff.pm
new file mode 100644
index 000000000..fdea897fa
--- /dev/null
+++ b/FS/FS/part_event/Action/writeoff.pm
@@ -0,0 +1,33 @@
+package FS::part_event::Action::writeoff;
+
+use strict;
+use base qw( FS::part_event::Action );
+
+sub description { 'Write off bad debt with a credit entry.'; }
+
+sub option_fields {
+ (
+ #'charge' => { label=>'Amount', type=>'money', }, # size=>7, },
+ 'reasonnum' => { 'label' => 'Reason',
+ 'type' => 'select-reason',
+ 'reason_class' => 'R',
+ },
+ );
+}
+
+sub default_weight { 65; }
+
+sub do_action {
+ my( $self, $cust_object ) = @_;
+
+ my $cust_main = $self->cust_main($cust_object);
+
+ my $error = $cust_main->credit( $cust_main->balance,
+ $self->option('reasonnum'),
+ );
+ die $error if $error;
+
+ '';
+}
+
+1;
diff --git a/bin/freeside-migrate-events b/bin/freeside-migrate-events
index 76643b886..4b46393eb 100644
--- a/bin/freeside-migrate-events
+++ b/bin/freeside-migrate-events
@@ -16,20 +16,20 @@ my %plan2action = (
'fee' => 'fee',
'fee_percent' => 'NOTYET', #XXX need fee_percent action
'suspend' => 'suspend',
- 'suspend-if-balance' => 'NOTYET', #XXX "if balance" becomes a balance condition
+ 'suspend-if-balance' => 'suspend', #"if balance" becomes the balance cond
'suspend-if-pkgpart' => 'suspend_if_pkgpart',
'suspend-unless-pkgpart' => 'suspend_unless_pkgpart',
'cancel' => 'cancel',
'addpost' => 'addpost',
'comp' => 'NOTYET', #XXX or N/A or something
- 'credit' => 'NOTYET',
+ 'credit' => 'writeoff',
'realtime-card' => 'cust_bill_realtime_card',
'realtime-check' => 'cust_bill_realtime_check',
'realtime-lec' => 'cust_bill_realtime_lec',
'batch-card' => 'cust_bill_batch',
#?'retriable' =>
'send' => 'cust_bill_send',
- 'send_email' => 'NOTYET',
+ 'send_email' => 'cust_bill_email',
'send_alternate' => 'cust_bill_send_alternate',
'send_if_newest' => 'cust_bill_send_if_newest',
'send_agent' => 'cust_bill_send_agent',
@@ -64,7 +64,15 @@ foreach my $part_bill_event (
my %plandata = map { /^(\w+) (.*)$/; ($1, $2); }
split(/\n/, $part_bill_event->plandata);
- #XXX may need to fudge some plandata2option names!!!
+ #XXX may need to fudge some other plandata2option names
+
+ my $balanceover = 0;
+ my $honor_dundate = 0;
+
+ if ( $part_bill_event->plan eq 'suspend-if-balance' ) {
+ $balanceover = delete $plandata{'balanceover'};
+ $honor_dundate = ( (delete $plandata{'balance_honor_dundate'}) =~ /1/ );
+ }
my $part_event = new FS::part_event {
'event' => $part_bill_event->event,
@@ -86,12 +94,12 @@ foreach my $part_bill_event (
};
$error = $once->insert;
die $error if $error;
-
+
my $balance = new FS::part_event_condition {
'eventpart' => $part_event->eventpart,
'conditionname' => 'balance'
};
- $error = $balance->insert( 'balance' => 0 );
+ $error = $balance->insert( 'balance' => $balanceover );
die $error if $error;
my $cust_bill_owed = new FS::part_event_condition {
@@ -118,6 +126,15 @@ foreach my $part_bill_event (
die $error if $error;
}
+
+ if ( $honor_dundate ) {
+ my $dundate = new FS::part_event_condition {
+ 'eventpart' => $part_event->eventpart,
+ 'conditionname' => 'dundate'
+ };
+ $error = $dundate->insert();
+ die $error if $error;
+ }
#my $derror = $part_bill_event->delete;
#die "error removing part_bill_event: $derror\n" if $derror;