summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-03-18 13:45:14 -0700
committerMark Wells <mark@freeside.biz>2013-03-18 13:45:14 -0700
commit66631c3f1b7c9c2a532f04eded5a472fcf780a00 (patch)
treedbaeee7a60cd4a6994816b6c330e282b8035db06
parent8a26002c6bf6d2c42df5eb90ed760accb71acbb7 (diff)
fix upgrade of cust_pay.auth, #18548
-rw-r--r--FS/FS/cust_pay.pm28
1 files changed, 26 insertions, 2 deletions
diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm
index 4535aadb2..fa5672cdd 100644
--- a/FS/FS/cust_pay.pm
+++ b/FS/FS/cust_pay.pm
@@ -1032,18 +1032,42 @@ sub _upgrade_data { #class method
###
# not only cust_pay, but also voided and refunded payments
- if (!FS::upgrade_journal->is_done('cust_pay__parse_paybatch')) {
+ if (!FS::upgrade_journal->is_done('cust_pay__parse_paybatch_1')) {
# really inefficient, but again, only has to run once
foreach my $table (qw(cust_pay cust_pay_void cust_refund)) {
foreach my $object ( qsearch({
table => $table,
extra_sql => "WHERE payby IN('CARD','CHEK') ".
- "AND paybatch IS NOT NULL",
+ "AND (paybatch IS NOT NULL ".
+ "OR (paybatch IS NULL AND auth IS NULL) )",
}) )
{
+ if ( $object->paybatch eq '' ) {
+ # repair for a previous upgrade that didn't save 'auth'
+ my $pkey = $object->primary_key;
+ # find the last history record that had a paybatch value
+ my $h = qsearchs({
+ table => "h_$table",
+ hashref => {
+ $pkey => $object->$pkey,
+ paybatch => { op=>'!=', value=>''},
+ history_action => 'replace_old',
+ },
+ order_by => 'ORDER BY history_date DESC LIMIT 1',
+ });
+ if (!$h) {
+ warn "couldn't find paybatch history record for $table ".$object->$pkey."\n";
+ next;
+ }
+ # set paybatch to what it was in that record
+ $object->set('paybatch', $h->paybatch)
+ # and then upgrade it like the old records
+ }
+
my $parsed = $object->_parse_paybatch;
if (keys %$parsed) {
$object->set($_ => $parsed->{$_}) foreach keys %$parsed;
+ $object->set('auth' => $parsed->{authorization});
$object->set('paybatch', '');
my $error = $object->replace;
warn "error parsing CARD/CHEK paybatch fields on $object #".