+ -- done with receipts
+
+ ELSE
+
+ -- handle checks
+
+ SELECT checkhead_id INTO _docid
+ FROM checkhead
+ WHERE (checkhead_number::TEXT=_r.bankrecimport_reference)
+ AND (checkhead_posted)
+ AND (NOT checkhead_void);
+ IF (FOUND) THEN
+ SELECT toggleBankrecCleared(_b.bankrec_id, 'GL', gltrans_id,
+ checkhead_curr_rate, _r.credit,
+ _r.bankrecimport_effdate) INTO _cleared
+ FROM checkhead JOIN gltrans ON ((gltrans_source='A/P')
+ AND (gltrans_doctype='CK')
+ AND (NOT gltrans_rec)
+ AND (gltrans_accnt_id=_b.bankaccnt_accnt_id)
+ AND (gltrans_misc_id=checkhead_id))
+ LEFT OUTER JOIN bankrecitem ON (bankrecitem_source='GL' AND
+ bankrecitem_source_id=gltrans_id)
+ WHERE (checkhead_id=_docid)
+ AND (NOT COALESCE(bankrecitem_cleared, FALSE));
+ ELSE
+
+ -- create and toggle bank adjustment
+ -- TODO define bank adjustment names
+
+ _bankadjid := -1;
+ SELECT bankadj_id INTO _bankadjid
+ FROM bankadj JOIN bankadjtype ON (bankadjtype_id=bankadj_bankadjtype_id)
+ WHERE (bankadjtype_id=fetchMetricValue('ImportBankRecCreditAdj'))
+ AND (bankadj_docnumber=_r.bankrecimport_reference);
+ IF (NOT FOUND) THEN
+ INSERT INTO bankadj
+ (bankadj_bankaccnt_id, bankadj_bankadjtype_id, bankadj_date, bankadj_docnumber,
+ bankadj_amount, bankadj_notes, bankadj_curr_id)
+ SELECT
+ _b.bankaccnt_id, bankadjtype_id, _r.bankrecimport_effdate, _r.bankrecimport_reference,
+ _r.credit, 'Import Bankrec Adjustment', _b.bankaccnt_curr_id
+ FROM bankadjtype
+ WHERE (bankadjtype_id=fetchMetricValue('ImportBankRecCreditAdj'))
+ RETURNING bankadj_id INTO _bankadjid;
+ END IF;
+
+ IF (_bankadjid > 0) THEN
+ SELECT toggleBankrecCleared(_b.bankrec_id, 'AD', _bankadjid,
+ 1.0, _r.credit,
+ _r.bankrecimport_effdate) INTO _cleared
+ FROM bankadj LEFT OUTER JOIN bankrecitem ON (bankrecitem_source='AD' AND
+ bankrecitem_source_id=_bankadjid)
+ WHERE (NOT COALESCE(bankrecitem_cleared, FALSE));
+ ELSE
+ RAISE EXCEPTION 'bankadjtype not found';
+ END IF;
+ END IF;
+
+ -- done with checks
+
+ END IF;