summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/Schema.pm3
-rw-r--r--FS/FS/cust_pay.pm8
2 files changed, 10 insertions, 1 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index 771b88b70..9d4a054b0 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -552,10 +552,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;
}