Issue #23741:ensure no duplicate check numbers
authorgaryhgohoos <gary@xtuple.com>
Wed, 13 Aug 2014 18:49:43 +0000 (14:49 -0400)
committergaryhgohoos <gary@xtuple.com>
Wed, 13 Aug 2014 18:49:43 +0000 (14:49 -0400)
foundation-database/public/functions/fetchnextchecknumber.sql
foundation-database/public/functions/setnextchecknumber.sql

index 888b310..19da7a0 100644 (file)
@@ -1,10 +1,11 @@
 
-CREATE OR REPLACE FUNCTION fetchNextCheckNumber(INTEGER) RETURNS INTEGER AS '
+CREATE OR REPLACE FUNCTION fetchNextCheckNumber(pBankaccntid INTEGER) RETURNS INTEGER AS $$
 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
 -- See www.xtuple.com/CPAL for the full text of the software license.
 DECLARE
   pBankaccntid ALIAS FOR $1;
   _nextChkNumber INTEGER;
+  _checkheadid INTEGER;
 
 BEGIN
 
@@ -12,6 +13,18 @@ BEGIN
   FROM bankaccnt
   WHERE (bankaccnt_id=pBankaccntid);
 
+  WHILE (TRUE) LOOP
+    SELECT checkhead_id INTO _checkheadid
+    FROM checkhead
+    WHERE (checkhead_number=_nextChkNumber)
+      AND (checkhead_bankaccnt_id=pBankaccntid);
+    IF (NOT FOUND) THEN
+      EXIT;
+    ELSE
+      _nextChkNumber := _nextChkNumber + 1;
+    END IF;
+  END LOOP;
+
   UPDATE bankaccnt
   SET bankaccnt_nextchknum = (bankaccnt_nextchknum + 1)
   WHERE (bankaccnt_id=pBankaccntid);
@@ -19,5 +32,5 @@ BEGIN
   RETURN _nextChkNumber;
 
 END;
-' LANGUAGE 'plpgsql';
+$$ LANGUAGE 'plpgsql';
 
index a04b21a..98e915e 100644 (file)
@@ -1,19 +1,34 @@
 
-CREATE OR REPLACE FUNCTION setNextCheckNumber(INTEGER, INTEGER) RETURNS BOOLEAN AS '
+CREATE OR REPLACE FUNCTION setNextCheckNumber(pBankaccntid INTEGER,
+                                              pNextCheckNumber INTEGER) RETURNS BOOLEAN AS $$
 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
 -- See www.xtuple.com/CPAL for the full text of the software license.
 DECLARE
-  pBankaccntid ALIAS FOR $1;
-  pNextCheckNumber ALIAS FOR $2;
+  _nextChkNumber INTEGER;
+  _checkheadid INTEGER;
 
 BEGIN
 
+  _nextChkNumber := pNextCheckNumber;
+
+  WHILE (TRUE) LOOP
+    SELECT checkhead_id INTO _checkheadid
+    FROM checkhead
+    WHERE (checkhead_number=_nextChkNumber)
+      AND (checkhead_bankaccnt_id=pBankaccntid);
+    IF (NOT FOUND) THEN
+      EXIT;
+    ELSE
+      _nextChkNumber := _nextChkNumber + 1;
+    END IF;
+  END LOOP;
+
   UPDATE bankaccnt
-  SET bankaccnt_nextchknum=pNextCheckNumber
+  SET bankaccnt_nextchknum=_nextChkNumber
   WHERE (bankaccnt_id=pBankaccntid);
 
   RETURN TRUE;
 
 END;
-' LANGUAGE 'plpgsql';
+$$ LANGUAGE 'plpgsql';