CREATE OR REPLACE FUNCTION voucher_get_batch (in_batch_id integer) RETURNS batches AS $$ DECLARE batch_out batches%ROWTYPE; BEGIN SELECT * INTO batch_out FROM batches b WHERE b.id = in_batch_id; RETURN batch_out; END; $$ language plpgsql; CREATE TYPE batch_list AS ( id integer, batch_number text, description text, entered date, approved date, amount numeric, employee text, manager text); CREATE FUNCTION batch_search (in_batch text, in_description text, in_batch_number text, in_date_from date, in_date_to date, in_date_include date, in_approved boolean) RETURNS SETOF batch_list AS $$ DECLARE batch_out batch_list; BEGIN FOR batch_out IN SELECT b.id, b.batch, b.batch_number, b.description, b.entered, b.approved, b.amount, e.name AS employee, m.name AS manager FROM batches b LEFT JOIN employees e ON (b.employee_id = e.id) LEFT JOIN employees m ON (b.managerid = m.id) WHERE supplied_and_equal(in_batch, b.batch) AND supplied_and_like(in_description, description) AND supplied_and_like(in_batch_number, batch_number) AND supplied_and_later(in_date_from, entered) AND supplied_and_earlier(in_date_to, entered) AND (coalesce(in_approved, 'f') = (approved IS NULL)) LOOP RETURN NEXT batch_out; END LOOP; END; $$ language PLPGSQL; CREATE FUNCTION batch_post (in_batch text, in_login varchar, in_entered date, in_batch_number text, in_description text, in_id integer) RETURNS integer AS $$ BEGIN UPDATE batches SET batch_number = in_batch_number, description = in_description, entered = in_entered WHERE id = in_id; IF FOUND THEN RETURN in_id; END IF; INSERT INTO batches (batch, employee_id, batch_number, description, entered) VALUES (in_batch, (SELECT id FROM employees WHERE login = in_login), in_batch_number, description); RETURN currval('id'); END; $$ LANGUAGE PLPGSQL; CREATE TYPE voucher_list AS ( id int, reference text, description text, batch_id int, transaction_id integer, amount numeric, transaction_date date, batch_class text ); CREATE OR REPLACE FUNCTION voucher_list (in_batch_id integer) RETURNS SETOF voucher_list AS $$ declare voucher_item record; BEGIN FOR voucher_item IN SELECT v.id, a.invnumber, e.name, v.batch_id, v.trans_id, a.amount - a.paid, a.transdate, 'Payable' FROM voucher v JOIN ap a ON (v.trans_id = a.id) JOIN entity e ON (a.entity_id = e.id) WHERE v.batch_id = in_batch_id AND v.batch_class = (select id from batch_class WHERE class = 'payable') UNION SELECT v.id, a.invnumber, e.name, v.batch_id, v.trans_id, a.amount - a.paid, a.transdate, 'Receivable' FROM voucher v JOIN ar a ON (v.trans_id = a.id) JOIN entity e ON (a.entity_id = e.id) WHERE v.batch_id = in_batch_id AND v.batch_class = (select id from batch_class WHERE class = 'receivable') UNION SELECT v.id, a.source, a.memo, v.batch_id, v.trans_id, a.amount, a.transdate, bc.class FROM voucher v JOIN acc_trans a ON (v.trans_id = a.trans_id) JOIN batch_class bc ON (bc.id = v.batch_class) WHERE v.batch_id = in_batch_id AND a.voucher_id = v.id AND bc.class like 'payment%' OR bc.class like 'receipt%' UNION SELECT v.id, g.reference, g.description, v.batch_id, v.trans_id, sum(a.amount), g.transdate, 'gl' FROM voucher v JOIN gl g ON (g.id = v.trans_id) JOIN acc_trans a ON (v.trans_id = a.trans_id) WHERE a.amount > 0 AND v.batch_id = in_batch_id AND v.batch_class IN (select id from batch_class where class = 'gl') GROUP BY v.id, g.reference, g.description, v.batch_id, v.trans_id, g.transdate ORDER BY 7, 1 LOOP RETURN NEXT voucher_item; END LOOP; END; $$ language plpgsql; CREATE TYPE batch_list_item AS ( id integer, batch_class text, description text, created_by text, created_on date, total numeric ); CREATE FUNCTION batch_list RETURNS SETOF batch_list_item AS $$ $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION batch_post in_batch_id INTEGER) returns int AS $$; $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION batch_create( in_batch_number text, in_description text, in_batch_class text) RETURNS int AS $$ BEGIN INSERT INTO batch (batch_class_id, description, control_code, created_by) VALUES ((SELECT id FROM batch_class WHERE class = in_batch_class), in_description, in_batch_number, (select entity_id FROM users WHERE username = session_user)); return currval('batch_id_seq'); END; $$ LANGUAGE PLPGSQL;