From 8a79ead8b600494b214d7492dab043d5dfc96587 Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 11 Apr 2009 21:42:52 +0000 Subject: migrate send_email, suspend_if_balance and credit events, RT#3905 --- bin/freeside-migrate-events | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'bin/freeside-migrate-events') 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; -- cgit v1.2.1 From cce53fdf4528bbb3571d2b73f6f25d87c9af6f67 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 4 Jun 2009 00:49:47 +0000 Subject: add a -m mode to improve performance so upgrade can complete for large databases, RT#5426 --- bin/freeside-migrate-events | 68 ++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 23 deletions(-) (limited to 'bin/freeside-migrate-events') diff --git a/bin/freeside-migrate-events b/bin/freeside-migrate-events index 4b46393eb..522d4b17c 100644 --- a/bin/freeside-migrate-events +++ b/bin/freeside-migrate-events @@ -1,14 +1,17 @@ #!/usr/bin/perl -w use strict; - -use FS::UID qw(adminsuidsetup); +use Getopt::Std; +use FS::UID qw( adminsuidsetup dbh ); use FS::Record qw( qsearch ); use FS::part_bill_event; use FS::part_event; use FS::cust_bill_event; use FS::cust_event; +use vars qw( $opt_m ); +getopts('m'); + my $user = shift or die &usage; adminsuidsetup($user); @@ -139,29 +142,46 @@ foreach my $part_bill_event ( #my $derror = $part_bill_event->delete; #die "error removing part_bill_event: $derror\n" if $derror; - foreach my $cust_bill_event ( - qsearch({ - 'table' => 'cust_bill_event', - 'hashref' => { 'eventpart' => $part_bill_event->eventpart, }, - }) - ) { - - my $cust_event = new FS::cust_event { - 'eventpart' => $part_event->eventpart, - 'tablenum' => $cust_bill_event->invnum, - '_date' => $cust_bill_event->_date, - 'status' => $cust_bill_event->status, - 'statustext' => $cust_bill_event->statustext, - }; + if ( $opt_m ) { - my $cerror = $cust_event->insert; - #die "error inserting cust_event: $cerror\n" if $cerror; - warn "error inserting cust_event: $cerror\n" if $cerror; - - #my $dcerror = $cust_bill_event->delete; - #die "error removing cust_bill_event: $dcerror\n" if $dcerror; + #this should probably just become the default once we're sure it works 100% + + my $sth = dbh->prepare(' + INSERT INTO cust_event ( eventpart, tablenum, _date, status, statustext ) + SELECT ? , invnum , _date, status, statustext + FROM cust_bill_event WHERE eventpart = ? + ') or die dbh->errstr; + + $sth->execute( $part_event->eventpart, $part_bill_event->eventpart ) + or die $sth->errstr; + + } else { - print "."; + foreach my $cust_bill_event ( + qsearch({ + 'table' => 'cust_bill_event', + 'hashref' => { 'eventpart' => $part_bill_event->eventpart, }, + }) + ) { + + my $cust_event = new FS::cust_event { + 'eventpart' => $part_event->eventpart, + 'tablenum' => $cust_bill_event->invnum, + '_date' => $cust_bill_event->_date, + 'status' => $cust_bill_event->status, + 'statustext' => $cust_bill_event->statustext, + }; + + my $cerror = $cust_event->insert; + #die "error inserting cust_event: $cerror\n" if $cerror; + warn "error inserting cust_event: $cerror\n" if $cerror; + + #my $dcerror = $cust_bill_event->delete; + #die "error removing cust_bill_event: $dcerror\n" if $dcerror; + + print "."; + + } } @@ -198,6 +218,8 @@ Doesn't migrate reasons. Doesn't delete the old events (which is not a big deal, since the new code won't run them...) +Can take lots of memory for large databases. + =head1 SEE ALSO =cut -- cgit v1.2.1 From 21ff7d72efff4294d16c1e6cf3c4eb374659c5d8 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 4 Jun 2009 03:49:51 +0000 Subject: much more efficient event migration: let the database do the work, RT#5426 --- bin/freeside-migrate-events | 68 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 35 deletions(-) (limited to 'bin/freeside-migrate-events') diff --git a/bin/freeside-migrate-events b/bin/freeside-migrate-events index 522d4b17c..3e8a6b209 100644 --- a/bin/freeside-migrate-events +++ b/bin/freeside-migrate-events @@ -1,7 +1,7 @@ #!/usr/bin/perl -w use strict; -use Getopt::Std; +#use Getopt::Std; use FS::UID qw( adminsuidsetup dbh ); use FS::Record qw( qsearch ); use FS::part_bill_event; @@ -9,8 +9,8 @@ use FS::part_event; use FS::cust_bill_event; use FS::cust_event; -use vars qw( $opt_m ); -getopts('m'); +#use vars qw( $opt_m ); +#getopts('m'); my $user = shift or die &usage; adminsuidsetup($user); @@ -142,9 +142,7 @@ foreach my $part_bill_event ( #my $derror = $part_bill_event->delete; #die "error removing part_bill_event: $derror\n" if $derror; - if ( $opt_m ) { - - #this should probably just become the default once we're sure it works 100% +# if ( $opt_m ) { my $sth = dbh->prepare(' INSERT INTO cust_event ( eventpart, tablenum, _date, status, statustext ) @@ -155,35 +153,35 @@ foreach my $part_bill_event ( $sth->execute( $part_event->eventpart, $part_bill_event->eventpart ) or die $sth->errstr; - } else { - - foreach my $cust_bill_event ( - qsearch({ - 'table' => 'cust_bill_event', - 'hashref' => { 'eventpart' => $part_bill_event->eventpart, }, - }) - ) { - - my $cust_event = new FS::cust_event { - 'eventpart' => $part_event->eventpart, - 'tablenum' => $cust_bill_event->invnum, - '_date' => $cust_bill_event->_date, - 'status' => $cust_bill_event->status, - 'statustext' => $cust_bill_event->statustext, - }; - - my $cerror = $cust_event->insert; - #die "error inserting cust_event: $cerror\n" if $cerror; - warn "error inserting cust_event: $cerror\n" if $cerror; - - #my $dcerror = $cust_bill_event->delete; - #die "error removing cust_bill_event: $dcerror\n" if $dcerror; - - print "."; - - } - - } +# } else { +# +# foreach my $cust_bill_event ( +# qsearch({ +# 'table' => 'cust_bill_event', +# 'hashref' => { 'eventpart' => $part_bill_event->eventpart, }, +# }) +# ) { +# +# my $cust_event = new FS::cust_event { +# 'eventpart' => $part_event->eventpart, +# 'tablenum' => $cust_bill_event->invnum, +# '_date' => $cust_bill_event->_date, +# 'status' => $cust_bill_event->status, +# 'statustext' => $cust_bill_event->statustext, +# }; +# +# my $cerror = $cust_event->insert; +# #die "error inserting cust_event: $cerror\n" if $cerror; +# warn "error inserting cust_event: $cerror\n" if $cerror; +# +# #my $dcerror = $cust_bill_event->delete; +# #die "error removing cust_bill_event: $dcerror\n" if $dcerror; +# +# print "."; +# +# } +# +# } print "\n"; -- cgit v1.2.1