diff options
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/Schema.pm | 3 | ||||
| -rw-r--r-- | FS/FS/cust_pay.pm | 8 | 
2 files changed, 10 insertions, 1 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 4a7f8ab16..d7ba05208 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -528,10 +528,11 @@ sub tables_hashref {  	'paymask', 'varchar', 'NULL', $char_d, '', '',           'paydate',  'varchar', 'NULL', 10, '', '',           'paybatch', 'varchar',   'NULL', $char_d, '', '', #for auditing purposes. +        'payunique', 'varchar', 'NULL', $char_d, '', '', #separate paybatch "unique" functions from current usage          'closed',    'char', 'NULL', 1, '', '',         ],        'primary_key' => 'paynum', -      'unique' => [], +      'unique' => [ [ 'payunique' ] ],        'index' => [ [ 'custnum' ], [ 'paybatch' ], [ 'payby' ], [ '_date' ] ],      }, diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 30333e0c4..dc6bd4020 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -403,6 +403,7 @@ sub check {      || $self->ut_money('paid')      || $self->ut_numbern('_date')      || $self->ut_textn('paybatch') +    || $self->ut_textn('payunique')      || $self->ut_enum('closed', [ '', 'Y' ])      || $self->payinfo_check()    ; @@ -416,6 +417,13 @@ sub check {    $self->_date(time) unless $self->_date; +  # UNIQUE index should catch this too, without race conditions, but this +  # should give a better error message the other 99.9% of the time... +  if ( length($self->payunique) +       && qsearchs('cust_pay', { 'payunique' => $self->payunique } ) { +    return "duplicate transaction"; #well, it *could* be a better error message +  } +    $self->SUPER::check;  }  | 
