diff options
-rwxr-xr-x | LedgerSMB.pm | 8 | ||||
-rw-r--r-- | LedgerSMB/Auth.pm (renamed from LedgerSMB/Session.pm) | 8 | ||||
-rwxr-xr-x | LedgerSMB/Auth/DB.pm (renamed from LedgerSMB/Session/DB.pm) | 2 | ||||
-rw-r--r-- | LedgerSMB/User.pm | 2 | ||||
-rw-r--r-- | lsmb-request.pl | 1 | ||||
-rwxr-xr-x | old-handler.pl | 4 | ||||
-rw-r--r-- | scripts/login.pl | 3 | ||||
-rw-r--r-- | sql/modules/Voucher.sql | 232 |
8 files changed, 73 insertions, 187 deletions
diff --git a/LedgerSMB.pm b/LedgerSMB.pm index 81e34759..7b555e10 100755 --- a/LedgerSMB.pm +++ b/LedgerSMB.pm @@ -125,7 +125,7 @@ use CGI::Simple; use Math::BigFloat; use LedgerSMB::Sysconfig; use Data::Dumper; -use LedgerSMB::Session; +use LedgerSMB::Auth; use LedgerSMB::Template; use LedgerSMB::Locale; use LedgerSMB::User; @@ -195,7 +195,7 @@ sub new { if ($self->is_run_mode('cgi', 'mod_perl')) { #check for valid session unless this is an inital authentication #request -- CT - if (!Session::session_check( $cookie{"LedgerSMB"}, $self) ) { + if (!LedgerSMB::Auth::session_check( $cookie{"LedgerSMB"}, $self) ) { $self->_get_password("Session Expired"); exit; } @@ -215,7 +215,7 @@ sub new { sub _get_password { my ($self) = shift @_; $self->{sessionexpired} = shift @_; - Session::credential_prompt(); + LedgerSMB::Auth::credential_prompt(); exit; } @@ -634,7 +634,7 @@ sub _db_init { my $self = shift @_; my %args = @_; - my $creds = Session::get_credentials(); + my $creds = LedgerSMB::Auth::get_credentials(); $self->{login} = $creds->{login}; if (!$self->{company}){ diff --git a/LedgerSMB/Session.pm b/LedgerSMB/Auth.pm index dbc2d1c3..fec8209c 100644 --- a/LedgerSMB/Session.pm +++ b/LedgerSMB/Auth.pm @@ -12,12 +12,12 @@ # This is a simple abstraction layer allowing other session handling mechanisms # (For example Kerberos tickets) as the application progresses. -package Session; +package LedgerSMB::Auth; use LedgerSMB::Sysconfig; -if ( !${LedgerSMB::Sysconfig::session} ) { - ${LedgerSMB::Sysconfig::session} = 'DB'; +if ( !${LedgerSMB::Sysconfig::auth} ) { + ${LedgerSMB::Sysconfig::auth} = 'DB'; } -require "LedgerSMB/Session/" . ${LedgerSMB::Sysconfig::session} . ".pm"; +require "LedgerSMB/Auth/" . ${LedgerSMB::Sysconfig::auth} . ".pm"; diff --git a/LedgerSMB/Session/DB.pm b/LedgerSMB/Auth/DB.pm index 419ca5d3..da89711f 100755 --- a/LedgerSMB/Session/DB.pm +++ b/LedgerSMB/Auth/DB.pm @@ -27,7 +27,7 @@ # password_check - compares the password with the stored cryted password # (ver. < 1.2) and the md5 one (ver. >= 1.2) #==================================================================== -package Session; +package LedgerSMB::Auth; use MIME::Base64; use strict; diff --git a/LedgerSMB/User.pm b/LedgerSMB/User.pm index b5c5c757..e4654d9b 100644 --- a/LedgerSMB/User.pm +++ b/LedgerSMB/User.pm @@ -57,7 +57,7 @@ Deprecated package LedgerSMB::User; use LedgerSMB::Sysconfig; -use LedgerSMB::Session; +use LedgerSMB::Auth; use Data::Dumper; =item LedgerSMB::User->new($login); diff --git a/lsmb-request.pl b/lsmb-request.pl index 5c75d6f3..dcaa5cf4 100644 --- a/lsmb-request.pl +++ b/lsmb-request.pl @@ -29,7 +29,6 @@ $| = 1; use LedgerSMB::User; use LedgerSMB; use LedgerSMB::Locale; -use LedgerSMB::Session; use Data::Dumper; # for custom preprocessing logic diff --git a/old-handler.pl b/old-handler.pl index 4100711f..0e2f634c 100755 --- a/old-handler.pl +++ b/old-handler.pl @@ -55,7 +55,7 @@ $| = 1; use LedgerSMB::User; use LedgerSMB::Form; use LedgerSMB::Locale; -use LedgerSMB::Session; +use LedgerSMB::Auth; use Data::Dumper; require "common.pl"; @@ -170,7 +170,7 @@ sub check_password { } #check for valid session - if ( !Session::session_check( $cookie{"LedgerSMB"}, $form ) ) { + if ( !LedgerSMB::Auth::session_check( $cookie{"LedgerSMB"}, $form ) ) { &getpassword(1); exit; } diff --git a/scripts/login.pl b/scripts/login.pl index c51b3fbd..1ce79587 100644 --- a/scripts/login.pl +++ b/scripts/login.pl @@ -4,6 +4,7 @@ our $VERSION = 1.0; use LedgerSMB::Locale; use LedgerSMB::Form; # Required for now to integrate with menu module. use LedgerSMB::User; +use LedgerSMB::Auth; use strict; sub __default { @@ -63,7 +64,7 @@ sub logout { my ($request) = @_; $request->{callback} = ""; $request->{endsession} = 1; - Session::session_destroy($request); + LedgerSMB::Auth::session_destroy($request); print "Location: login.pl\n"; print "Content-type: text/html\n\n"; exit; diff --git a/sql/modules/Voucher.sql b/sql/modules/Voucher.sql index c21105c4..84df47f0 100644 --- a/sql/modules/Voucher.sql +++ b/sql/modules/Voucher.sql @@ -81,193 +81,79 @@ CREATE TYPE voucher_list AS ( transaction_id integer, amount numeric, transaction_date date, - voucher_number text + batch_class text ); -CREATE OR REPLACE FUNCTION voucher_list_ap (in_batch_id integer) -RETURNS SETOF voucher_list AS +CREATE OR REPLACE FUNCTION voucher_list (in_batch_id integer) +RETURNS SETOF voucher_list AS $$ -DECLARE - voucher_out voucher_list%ROWTYPE; -BEGIN - FOR voucher_out IN SELECT v.id, a.invnumber AS reference, - c.name ||' -- ' || c.vendornumber AS description, - v.batch_id, a.id AS transaction_id, - a.amount, v.voucher_number - FROM vouchers v - JOIN ap a ON (a.id = v.trans_id) - JOIN vendor c ON (c.id = a.vendor_id) - WHERE v.br_id = in_batch_id - - LOOP - RETURN NEXT voucher_out; - END LOOP; - -END; -$$ LANGUAGE PLPGSQL; - -CREATE OR REPLACE FUNCTION voucher_list_payment (in_batch_id integer) -RETURNS SETOF voucher_list AS -$$ -DECLARE - voucher_out voucher_list%ROWTYPE; +declare voucher_item record; BEGIN - FOR voucher_out IN SELECT v.id, c.vendornumber AS reference, - c.name AS description, in_batch_id AS batch_id, - v.transaction_id AS transaction_id, sum(ac.amount) AS amount, - v.voucher_number - FROM acc_trans ac - JOIN vouchers v ON (v.id = ac.vr_id AND v.transaction_id = ac.trans_id) - JOIN chart ch ON (ch.id = ac.chart_id) - JOIN ap a ON (a.id = ac.trans_id) - JOIN vendor c ON (c.id = a.vendor_id) - WHERE v.br_id = in_batch_id - AND ch.link LIKE '%AP_paid%' - GROUP BY v.id, c.name, c.vendornumber, v.voucher_number, - a.vendor_id, v.transaction_id - - + 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_out; + RETURN NEXT voucher_item; END LOOP; - END; -$$ LANGUAGE PLPGSQL; - -CREATE OR REPLACE FUNCTION voucher_list_payment_reversal (in_batch_id integer) -RETURNS SETOF voucher_list AS -$$ -DECLARE - voucher_out voucher_list%ROWTYPE; -BEGIN - FOR voucher_out IN - SELECT v.id, ac.source AS reference, - c.vendornumber || ' -- ' || c.name AS description, - sum(ac.amount) * -1 AS amount, in_batch_id AS batch_id, - v.transaction_id AS transaction_id, v.voucher_number - FROM acc_trans ac - JOIN vr v ON (v.id = ac.vr_id AND v.trans_id = ac.trans_id) - JOIN chart ch ON (ch.id = ac.chart_id) - JOIN ap a ON (a.id = ac.trans_id) - JOIN vendor c ON (c.id = a.vendor_id) - WHERE vr.br_id = in_batch_id - AND c.link LIKE '%AP_paid%' - GROUP BY v.id, c.name, c.vendornumber, v.voucher_number, - a.vendor_id, ac.source +$$ language plpgsql; - LOOP - RETURN NEXT voucher_out; - 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 OR REPLACE FUNCTION voucher_list_ap (in_batch_id integer) -RETURNS SETOF voucher_list AS +CREATE FUNCTION batch_list RETURNS SETOF batch_list_item AS $$ -DECLARE - voucher_out voucher_list%ROWTYPE; -BEGIN - FOR voucher_out IN - SELECT v.id, g.reference, g.description, in_batch_id AS batch_id, - SUM(ac.amount) AS amount, g.id AS transaction_id, - v.vouchernumber - FROM acc_trans ac - JOIN gl g ON (g.id = ac.trans_id) - JOIN vouchers v ON (v.trans_id = g.id) - WHERE v.batch_id = in_batch_id - AND ac.amount >= 0 - GROUP BY g.id, g.reference, g.description, v.id, - v.voucher_number - - LOOP - RETURN NEXT voucher_out; - END LOOP; - -END; $$ LANGUAGE PLPGSQL; -CREATE OR REPLACE FUNCTION batch_post (in_batch_id integer[], in_batch text, - in_control_amount NUMERIC) -RETURNS BOOL AS -$$ -DECLARE - control_amount NUMERIC; - voucher voucher%ROWTYPE; - incriment NUMERIC; -BEGIN --- CHECK CONTROL NUMBERS - IF in_batch = 'gl' THEN - SELECT sum(amount) INTO control_amount - FROM acc_trans - WHERE trans_id IN ( - SELECT id FROM gl - WHERE coalesce(approved, false) != true) - AND trans_id IN ( - SELECT transaction_id FROM voucher - WHERE batch_id = ANY (in_batch_id)) - AND coalesce(approved, false) != true - AND amount > 0 - FOR UPDATE; - - ELSE IF in_batch like '%payment%' THEN - - SELECT sum(ac.amount) INTO control_amount - FROM acc_trans ac - JOIN voucher v ON (v.transaction_id = ac.trans_id) - WHERE v.batch_id = ANY (in_batch_id) - AND ac.vr_id = v.id - AND coalesce(approved, false) = false - FOR UPDATE; - - ELSE - SELECT sum(amount) INTO control_amount - FROM acc_trans - WHERE trans_id IN - (SELECT transaction_id FROM voucher - WHERE batch_id = ANY (in_batch_id)) - AND trans_id IN - (SELECT trans_id FROM ap - WHERE coalesce(approved, false) = false) - AND amount > 0 - FOR UPDATE; - - END IF; - - IF control_amount != in_control_amount THEN - RETURN FALSE; - END IF; - --- TODO: POST TRANSACTIONALLY - - IF in_batch like '%payment%' THEN - ELSE - UPDATE acc_trans - SET approved = true - WHERE trans_id IN - (SELECT transaction_id FROM voucher - WHERE batch_id = ANY (in_batch_id)); - - IF in_batch = 'gl' THEN +CREATE OR REPLACE FUNCTION batch_post in_batch_id INTEGER) +returns int AS +$$; - UPDATE gl SET approved = true - WHERE trans_id IN - (SELECT transaction_id FROM voucher - WHERE batch_id = ANY (in_batch_id)); - - ELSE - UPDATE ap SET approved = true - WHERE trans_id IN - (SELECT transaction_id FROM voucher - WHERE batch_id = ANY (in_batch_id)); - END IF; - END IF; - - RETURN TRUE; -END; $$ LANGUAGE PLPGSQL; - - CREATE OR REPLACE FUNCTION batch_create( in_batch_number text, in_description text, in_batch_class text) RETURNS int AS $$ |