Issue #23225:more progress
authorgaryhgohoos <gary@xtuple.com>
Wed, 6 Aug 2014 13:58:16 +0000 (09:58 -0400)
committergaryhgohoos <gary@xtuple.com>
Wed, 6 Aug 2014 13:58:16 +0000 (09:58 -0400)
foundation-database/public/functions/importbankreccleared.sql [new file with mode: 0644]
foundation-database/public/tables/bankrecimport.xml [new file with mode: 0644]

diff --git a/foundation-database/public/functions/importbankreccleared.sql b/foundation-database/public/functions/importbankreccleared.sql
new file mode 100644 (file)
index 0000000..394d1dc
--- /dev/null
@@ -0,0 +1,194 @@
+
+CREATE OR REPLACE FUNCTION importBankrecCleared(pBankrecid 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
+  _cleared BOOLEAN;
+  _b RECORD;
+  _r RECORD;
+
+BEGIN
+  -- cache some information
+  SELECT * INTO _b
+  FROM bankrec JOIN bankaccnt ON (bankaccnt_id=bankrec_bankaccnt_id)
+  WHERE (bankrec_id=pBankrecid);
+  IF (NOT FOUND) THEN
+    RAISE EXCEPTION 'bankrec not found';
+  END IF;
+  IF (_b.bankrec_posted) THEN
+    RAISE EXCEPTION 'bankrec already posted';
+  END IF;
+
+  -- loop thru bankrecimport and toggle cleared items
+  FOR _r IN
+  SELECT *,
+         COALESCE(bankrecimport_debit_amount, 0.0) AS debit,
+         COALESCE(bankrecimport_credit_amount, 0.0) AS credit
+  FROM bankrecimport
+--  WHERE (bankrecimport_?=_b.bankaccnt=?)
+  LOOP
+
+    IF ( (_r.debit > 0.0) AND (_r.credit > 0.0) ) THEN
+      RAISE EXCEPTION 'cannot determine if debit or credit';
+    END IF;
+
+    IF (_r.debit > 0.0) THEN
+      -- check receipts
+      SELECT gltrans_id AS id, 1 AS altid,
+             jrnluse_use AS use, gltrans_journalnumber AS jrnlnum,
+             COALESCE(date(jrnluse_date), gltrans_date) AS f_jrnldate,
+             COALESCE(bankrecitem_cleared, FALSE) AS cleared,
+             COALESCE(bankrecitem_effdate, gltrans_date) AS f_date,
+             gltrans_doctype AS doc_type,
+             gltrans_docnumber AS docnumber,
+             gltrans_notes AS notes,
+             currConcat(COALESCE(cashrcpt_curr_id, baseCurrId())) AS doc_curr,
+             COALESCE(bankrecitem_curr_rate, cashrcpt_curr_rate, currRate(bankaccnt_curr_id, gltrans_date)) AS doc_exchrate,
+             (gltrans_amount * -1.0) AS base_amount,
+             CASE WHEN (bankaccnt_curr_id=cashrcpt_curr_id) THEN
+               COALESCE( bankrecitem_amount,
+                         cashrcpt_amount,
+                         (currToLocal(bankaccnt_curr_id, gltrans_amount, gltrans_date) * -1.0) )
+                  ELSE
+               COALESCE( bankrecitem_amount,
+                         (currToLocal(bankaccnt_curr_id, gltrans_amount, gltrans_date) * -1.0) )
+             END AS amount,
+             COALESCE(date(jrnluse_date), gltrans_date) AS jrnldate,
+             gltrans_date AS sortdate
+        FROM bankaccnt
+        JOIN gltrans ON (bankaccnt_accnt_id=gltrans_accnt_id)
+        LEFT OUTER JOIN bankrecitem ON ((bankrecitem_source='GL')
+                                    AND (bankrecitem_source_id=gltrans_id)
+                                    AND (bankrecitem_bankrec_id=<? value("bankrecid") ?>)
+                                    AND (bankrecitem_cleared))
+        LEFT OUTER JOIN jrnluse ON (jrnluse_number=gltrans_journalnumber AND jrnluse_use='C/R')
+        LEFT OUTER JOIN cashrcpt  ON ((gltrans_source='A/R')
+                                  AND (gltrans_doctype='CR')
+                                  AND (gltrans_misc_id=cashrcpt_id))
+        LEFT OUTER JOIN checkhead ON ((gltrans_doctype='CK')
+                                  AND (gltrans_misc_id=checkhead_id))
+       WHERE ((NOT gltrans_deleted)
+         AND (NOT gltrans_rec)
+         AND (NOT COALESCE(checkhead_void, false))
+         AND (gltrans_amount < 0)
+         AND (gltrans_doctype != 'JP')
+         AND (bankaccnt_id=<? value("bankaccntid") ?>)
+       )
+
+
+
+
+
+
+ UNION ALL
+SELECT sltrans_id AS id, 2 AS altid,
+       jrnluse_use AS use, sltrans_journalnumber AS jrnlnum,
+       COALESCE(date(jrnluse_date), sltrans_date) AS f_jrnldate,
+       COALESCE(bankrecitem_cleared, FALSE) AS cleared,
+       COALESCE(bankrecitem_effdate, sltrans_date) AS f_date,
+       sltrans_doctype AS doc_type,
+       sltrans_docnumber AS docnumber,
+       sltrans_notes AS notes,
+       currConcat(COALESCE(cashrcpt_curr_id, baseCurrId())) AS doc_curr,
+       COALESCE(bankrecitem_curr_rate, cashrcpt_curr_rate, currRate(bankaccnt_curr_id, sltrans_date)) AS doc_exchrate,
+       (sltrans_amount * -1.0) AS base_amount,
+       CASE WHEN (bankaccnt_curr_id=cashrcpt_curr_id) THEN
+         COALESCE( bankrecitem_amount,
+                   cashrcpt_amount,
+                   (currToLocal(bankaccnt_curr_id, sltrans_amount, sltrans_date) * -1.0) )
+            ELSE
+         COALESCE( bankrecitem_amount,
+                   (currToLocal(bankaccnt_curr_id, sltrans_amount, sltrans_date) * -1.0) )
+       END AS amount,
+       COALESCE(date(jrnluse_date), sltrans_date) AS jrnldate,
+       sltrans_date AS sortdate,
+       'uomratio' AS doc_exchrate_xtnumericrole,
+       'curr' AS base_amount_xtnumericrole,
+       'curr' AS amount_xtnumericrole
+  FROM bankaccnt
+  JOIN sltrans ON (bankaccnt_accnt_id=sltrans_accnt_id)
+  LEFT OUTER JOIN bankrecitem ON ((bankrecitem_source='SL')
+                              AND (bankrecitem_source_id=sltrans_id)
+                              AND (bankrecitem_bankrec_id=<? value("bankrecid") ?>)
+                              AND (bankrecitem_cleared))
+  LEFT OUTER JOIN jrnluse ON (jrnluse_number=sltrans_journalnumber AND jrnluse_use='C/R')
+  LEFT OUTER JOIN cashrcpt  ON ((sltrans_source='A/R')
+                            AND (sltrans_doctype='CR')
+                            AND (sltrans_misc_id=cashrcpt_id))
+  LEFT OUTER JOIN checkhead ON ((sltrans_doctype='CK')
+                            AND (sltrans_misc_id=checkhead_id))
+ WHERE ((NOT sltrans_rec)
+   AND (NOT COALESCE(checkhead_void, false))
+   AND (sltrans_amount < 0)
+   AND (bankaccnt_id=<? value("bankaccntid") ?>)
+<? if exists("source") ?>
+   AND ('SL' = <? value("source") ?>)
+<? endif ?>
+<? if exists("sourceid") ?>
+   AND (sltrans_id = <? value("sourceid") ?>)
+<? endif ?>
+ )
+ UNION ALL
+SELECT bankadj_id AS id, 3 AS altid,
+       '' AS use, NULL AS jrnlnum, bankadj_date AS f_jrnldate,
+       COALESCE(bankrecitem_cleared, FALSE) AS cleared,
+       COALESCE(bankrecitem_effdate, bankadj_date) AS f_date,
+       'ADJ' AS doc_type,
+       bankadj_docnumber AS docnumber,
+       bankadjtype_name AS notes,
+       currConcat(bankadj_curr_id) AS doc_curr,
+       1.0 AS doc_exchrate,
+       CASE WHEN(bankadjtype_iscredit=true) THEN (bankadj_amount * -1.0) ELSE bankadj_amount END AS base_amount,
+       CASE WHEN(bankadjtype_iscredit=true) THEN (bankadj_amount * -1.0) ELSE bankadj_amount END AS amount,
+       bankadj_date AS jrnldate,
+       bankadj_date AS sortdate,
+       'uomratio' AS doc_exchrate_xtnumericrole,
+       'curr' AS base_amount_xtnumericrole,
+       'curr' AS amount_xtnumericrole
+  FROM (bankadjtype CROSS JOIN bankadj)
+               LEFT OUTER JOIN bankrecitem ON ((bankrecitem_source='AD')
+                                           AND (bankrecitem_source_id=bankadj_id)
+                                           AND (bankrecitem_bankrec_id=<? value("bankrecid") ?>))
+ WHERE ( (((bankadjtype_iscredit=false) AND (bankadj_amount > 0)) OR ((bankadjtype_iscredit=true) AND (bankadj_amount < 0)))
+   AND (bankadj_bankadjtype_id=bankadjtype_id)
+   AND (NOT bankadj_posted)
+   AND (bankadj_bankaccnt_id=<? value("bankaccntid") ?>)
+<? if exists("source") ?>
+   AND ('AD' = <? value("source") ?>)
+<? endif ?>
+<? if exists("sourceid") ?>
+   AND (bankadj_id = <? value("sourceid") ?>)
+<? endif ?>
+ )
+ORDER BY jrnldate, jrnlnum, sortdate;
+
+
+
+
+  SELECT bankrecitem_id, bankrecitem_cleared INTO _r
+    FROM bankrecitem
+   WHERE ( (bankrecitem_bankrec_id=pBankrecid)
+     AND   (bankrecitem_source=pSource)
+     AND   (bankrecitem_source_id=pSourceid) );
+  IF ( NOT FOUND ) THEN
+    _cleared := TRUE;
+    INSERT INTO bankrecitem
+    (bankrecitem_bankrec_id, bankrecitem_source,
+     bankrecitem_source_id, bankrecitem_cleared,
+     bankrecitem_curr_rate, bankrecitem_amount,
+     bankrecitem_effdate)
+    VALUES
+    (pBankrecid, pSource,
+     pSourceid, _cleared,
+     pCurrrate, pAmount,
+     pDate);
+  ELSE
+    _cleared := FALSE;
+    DELETE FROM bankrecitem 
+    WHERE bankrecitem_id = _r.bankrecitem_id;
+  END IF;
+
+  RETURN _cleared;
+END;
+$$ LANGUAGE 'plpgsql';
+
diff --git a/foundation-database/public/tables/bankrecimport.xml b/foundation-database/public/tables/bankrecimport.xml
new file mode 100644 (file)
index 0000000..53a374d
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE openCSVAtlasDef>
+<CSVAtlas>
+ <CSVMap>
+  <Name>bankrec</Name>
+  <Table>public.bankrecimport</Table>
+  <Action>Insert</Action>
+  <CSVMapField>
+   <Name>bankrecimport_reference</Name>
+   <Type>QString</Type>
+   <Column>8</Column>
+  </CSVMapField>
+  <CSVMapField>
+   <Name>bankrecimport_descrip</Name>
+   <Type>QString</Type>
+   <Column>4</Column>
+  </CSVMapField>
+  <CSVMapField>
+   <Name>bankrecimport_comment</Name>
+   <Type>QString</Type>
+   <Column>9</Column>
+  </CSVMapField>
+  <CSVMapField>
+   <Name>bankrecimport_debit_amount</Name>
+   <Type>double</Type>
+   <Column>5</Column>
+  </CSVMapField>
+  <CSVMapField>
+   <Name>bankrecimport_credit_amount</Name>
+   <Type>double</Type>
+   <Column>6</Column>
+  </CSVMapField>
+  <CSVMapField>
+   <Name>bankrecimport_effdate</Name>
+   <Type>QDate</Type>
+   <Column>1</Column>
+  </CSVMapField>
+ </CSVMap>
+</CSVAtlas>