summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/drafts.pl130
-rw-r--r--scripts/vouchers.pl4
-rw-r--r--sql/modules/Drafts.sql27
3 files changed, 152 insertions, 9 deletions
diff --git a/scripts/drafts.pl b/scripts/drafts.pl
new file mode 100644
index 00000000..741b5fed
--- /dev/null
+++ b/scripts/drafts.pl
@@ -0,0 +1,130 @@
+
+package LedgerSMB::Scripts::vouchers;
+our $VERSION = '0.1';
+
+use LedgerSMB::DBObject::Draft;
+use LedgerSMB::Template;
+use strict;
+
+sub search {
+ my ($request) = @_;
+ my $template = LedgerSMB::Template->new(
+ user =>$request->{_user},
+ locale => $request->{_locale},
+ path => 'UI',
+ template => 'batch/search_transactions',
+ format => 'HTML'
+ );
+ $template->render($request);
+}
+
+sub list_drafts {
+ my ($request) = @_;
+ my $draft= LedgerSMB::Draft->new(base => $request);
+ my @search_results = $draft->search;
+ $draft->{script} = "drafts.pl";
+
+ my @columns =
+ qw(select id transdate reference description, amount);
+
+ my $base_href = "drafts.pl";
+ my $search_href = "$base_href?action=list_transactions";
+ my $draft_href= "$base_href?action=get_transaction";
+
+ for my $key (
+ qw(class_id approved created_by description amount_gt amount_lt)
+ ){
+ $search_href .= "&$key=$draft->{key}";
+ }
+
+ my %column_heading = (
+ 'select' => $draft->{_locale}->text('Select'),
+ transaction_total => {
+ text => $draft->{_locale}->text('AR/AP/GL Total'),
+ href => "$search_href&order_by=transaction_total"
+ },
+ payment_total => {
+ text => $draft->{_locale}->text('Paid/Received Total'),
+ href => "$search_href&order_by=payment_total"
+ },
+ description => {
+ text => $draft->{_locale}->text('Description'),
+ href => "$search_href&order_by=description"
+ },
+ control_code => {
+ text => $draft->{_locale}->text('Batch Number'),
+ href => "$search_href&order_by=control_code"
+ },
+ id => {
+ text => $draft->{_locale}->text('ID'),
+ href => "$search_href&order_by=control_code"
+ },
+ );
+ my $count = 0;
+ my @rows;
+ for my $result (@search_results){
+ ++$count;
+ $draft->{"row_$count"} = $result->{id};
+ push @rows, {
+ 'select' => {
+ input => {
+ type => 'checkbox',
+ value => 1,
+ name => "draft_$result->{id}"
+ }
+ },
+ transaction_total => $draft->format_amount(
+ amount => $result->{transaction_total}
+ ),
+ payment_total => $draft->format_amount (
+ amount => $result->{payment_total}
+ ),
+ description => $result->{description},
+ control_code => {
+ text => $result->{control_code},
+ href => "$draft_href&draft_id=$result->{id}",
+
+ },
+ id => $result->{id},
+ };
+ }
+ $draft->{rowcount} = $count;
+ my $template = LedgerSMB::Template->new(
+ user => $request->{_user},
+ locale => $request->{_locale},
+ path => 'UI',
+ template => 'form-dynatable',
+ format => ($draft->{format}) ? $draft->{format} : 'HTML',
+ );
+
+ my $hiddens = $draft->take_top_level();
+ $draft->{rowcount} = "$count";
+ delete $draft->{search_results};
+
+ $template->render({
+ form => $draft,
+ columns => \@columns,
+ heading => \%column_heading,
+ rows => \@rows,
+ hiddens => $hiddens,
+ buttons => [{
+ name => 'action',
+ type => 'submit',
+ text => $request->{_locale}->text('Post'),
+ value => 'draft_approve',
+ class => 'submit',
+ },{
+ name => 'action',
+ type => 'submit',
+ text => $request->{_locale}->text('Delete'),
+ value => 'draft_delete',
+ class => 'submit',
+ }]
+ });
+}
+
+
+
+sub delete_drafts {
+ my ($request) = @_;
+}
diff --git a/scripts/vouchers.pl b/scripts/vouchers.pl
index e6eb7f39..321c0303 100644
--- a/scripts/vouchers.pl
+++ b/scripts/vouchers.pl
@@ -38,10 +38,6 @@ sub create_vouchers {
add_vouchers($batch);
}
-sub search_transactions {
-}
-
-
sub add_vouchers {
# This function is not safe for caching as long as the scripts are in bin.
# This is because these scripts import all functions into the *current*
diff --git a/sql/modules/Drafts.sql b/sql/modules/Drafts.sql
index 40312388..c2fc5abb 100644
--- a/sql/modules/Drafts.sql
+++ b/sql/modules/Drafts.sql
@@ -1,6 +1,7 @@
CREATE TYPE draft_search_result AS (
id int,
transdate date,
+ reference text,
description text,
amount numeric
);
@@ -12,7 +13,8 @@ $$
DECLARE out_row RECORD;
BEGIN
FOR out_row IN
- SELECT trans.id, trans.transdate, trans.description,
+ SELECT trans.id, trans.transdate, trans.reference,
+ trans.description,
sum(case when in_type = 'ap' AND chart.link = 'AP'
THEN line.amount
WHEN in_type = 'ar' AND chart.link = 'AR'
@@ -22,13 +24,16 @@ BEGIN
ELSE 0
END) as amount
FROM (
- SELECT id, transdate, description, approved from ap
+ SELECT id, transdate, invnumber as reference,
+ description, approved from ap
WHERE in_type = 'ap'
UNION
- SELECT id, transdate, description, approved from ar
+ SELECT id, transdate, invnumber as reference,
+ description, approved from ar
WHERE in_type = 'ar'
UNION
- SELECT id, transdate, description, approved from gl
+ SELECT id, transdate, reference, description,
+ approved from gl
WHERE in_type = 'gl'
) trans
JOIN acc_trans line ON (trans.id = line.trans_id)
@@ -63,7 +68,19 @@ begin
ELSE
raise exception 'Invalid table % in draft_approve for transaction %', t_table, in_id;
END IF;
- RETURN FOUND;
+
+ IF NOT FOUND THEN
+ RETURN FALSE;
+ END IF;
+
+ UPDATE transactions
+ SET approved_by =
+ (select entity_id FROM users
+ WHERE username = SESSION_USER),
+ approved_at = now()
+ WHERE id = in_id;
+
+ RETURN TRUE;
END;
$$ LANGUAGE PLPGSQL SECURITY DEFINER;