summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/modules/Voucher.sql38
-rw-r--r--sql/modules/chart.sql13
2 files changed, 51 insertions, 0 deletions
diff --git a/sql/modules/Voucher.sql b/sql/modules/Voucher.sql
index f095b92a..31de0bae 100644
--- a/sql/modules/Voucher.sql
+++ b/sql/modules/Voucher.sql
@@ -330,3 +330,41 @@ BEGIN
RETURN 1;
END;
$$ language plpgsql;
+
+CREATE OR REPLACE FUNCTION voucher__delete(in_voucher_id int)
+RETURNS int AS
+$$
+DECLARE
+ voucher_row RECORD;
+BEGIN
+ SELECT * INTO voucher_row FROM voucher WHERE id = in_voucher_id;
+ IF voucher_row.batch_class IN (1, 2, 5) THEN
+ DELETE from acc_trans WHERE trans_id = voucher_row.trans_id;
+ DELETE FROM ar WHERE id = voucher_row.trans_id;
+ DELETE FROM ap WHERE id = voucher_row.trans_id;
+ DELETE FROM gl WHERE id = voucher_row.trans_id;
+ DELETE FROM voucher WHERE id = voucher_row.id;
+ DELETE FROM transactions WHERE id = voucher_row.trans_id;
+ ELSE
+ update ar set paid = amount +
+ (select sum(amount) from acc_trans
+ join chart ON (acc_trans.chart_id = chart.id)
+ where link = 'AR' AND trans_id = ar.id
+ AND (voucher_id IS NULL
+ OR voucher_id <> voucher_row.id))
+ where id in (select trans_id from acc_trans
+ where voucher_id = voucher_row.id);
+
+ update ap set paid = amount - (select sum(amount) from acc_trans
+ join chart ON (acc_trans.chart_id = chart.id)
+ where link = 'AP' AND trans_id = ap.id
+ AND (voucher_id IS NULL
+ OR voucher_id <> voucher_row.id))
+ where id in (select trans_id from acc_trans
+ where voucher_id = voucher_row.id);
+
+ DELETE FROM acc_trans where voucher_id = voucher_row.id;
+ END IF;
+ RETURN 1;
+END;
+$$ LANGUAGE PLPGSQL;
diff --git a/sql/modules/chart.sql b/sql/modules/chart.sql
index 4575bc69..0a6b6e58 100644
--- a/sql/modules/chart.sql
+++ b/sql/modules/chart.sql
@@ -1,3 +1,16 @@
+CREATE OR REPLACE FUNCTION chart_list_all()
+RETURNS SETOF chart AS
+$$
+DECLARE out_row chart%ROWTYPE;
+BEGIN
+ FOR out_row IN
+ SELECT * FROM chart ORDER BY accno
+ LOOP
+ RETURN next out_row;
+ END LOOP;
+END;
+$$ LANGUAGE PLPGSQL;
+
CREATE OR REPLACE FUNCTION chart_list_cash(in_account_class int)
RETURNS SETOF chart AS
$$