summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xLedgerSMB.pm2
-rw-r--r--LedgerSMB/AA.pm24
-rw-r--r--LedgerSMB/CT.pm2
-rw-r--r--LedgerSMB/Form.pm20
-rw-r--r--LedgerSMB/IR.pm9
-rw-r--r--LedgerSMB/IS.pm10
-rw-r--r--LedgerSMB/Menu.pm1
-rwxr-xr-xLedgerSMB/Template.pm1
-rw-r--r--bin/aa.pl51
-rw-r--r--bin/ir.pl24
-rw-r--r--bin/is.pl25
-rw-r--r--lsmb-request.pl1
-rw-r--r--scripts/menu.pl2
13 files changed, 131 insertions, 41 deletions
diff --git a/LedgerSMB.pm b/LedgerSMB.pm
index 89aa2f92..083ecb8a 100755
--- a/LedgerSMB.pm
+++ b/LedgerSMB.pm
@@ -226,7 +226,7 @@ sub new {
sub _get_password {
my ($self) = shift @_;
$self->{sessionexpired} = shift @_;
- @{$self->{hidden}} = [];
+ $self->{hidden} = [];
for (keys %$self){
next if $_ =~ /(^script$|^endsession$|^password$)/;
my $attr = {};
diff --git a/LedgerSMB/AA.pm b/LedgerSMB/AA.pm
index c29652b0..29bf8ce3 100644
--- a/LedgerSMB/AA.pm
+++ b/LedgerSMB/AA.pm
@@ -39,6 +39,12 @@ use LedgerSMB::Sysconfig;
sub post_transaction {
my ( $self, $myconfig, $form ) = @_;
+ for (1 .. $form->{rowcount}){
+ $form->{"amount_$_"} = $form->parse_amount(
+ $myconfig, $form->{"amount_$_"}
+ );
+ $form->{"amount_$_"} *= -1 if $form->{reverse};
+ }
# connect to database
my $dbh = $form->{dbh};
@@ -89,11 +95,10 @@ sub post_transaction {
my %tax = ();
my $accno;
-
# add taxes
foreach $accno (@taxaccounts) {
- $fxtax += $tax{fxamount}{$accno} =
- $form->parse_amount( $myconfig, $form->{"tax_$accno"} );
+ $form->{"tax_$accno"} *= -1 if $form->{reverse};
+ $fxtax += $tax{fxamount}{$accno} = $form->{"tax_$accno"};
$tax += $tax{fxamount}{$accno};
push @{ $form->{acc_trans}{taxes} },
@@ -125,8 +130,7 @@ sub post_transaction {
my %amount = ();
my $fxinvamount = 0;
for ( 1 .. $form->{rowcount} ) {
- $fxinvamount += $amount{fxamount}{$_} =
- $form->parse_amount( $myconfig, $form->{"amount_$_"} );
+ $fxinvamount += $amount{fxamount}{$_} = $form->{"amount_$_"};
}
$form->{taxincluded} *= 1;
@@ -207,7 +211,11 @@ sub post_transaction {
# add payments
for $i ( 1 .. $form->{paidaccounts} ) {
- $fxamount = $form->parse_amount( $myconfig, $form->{"paid_$i"} );
+ $form->{"paid_$i"} = $form->parse_amount(
+ $myconfig, $form->{"paid_$i"}
+ );
+ $form->{"paid_$i"} *= -1 if $form->{reverse};
+ $fxamount = $form->{"paid_$i"};
if ($fxamount) {
$paid += $fxamount;
@@ -294,7 +302,7 @@ sub post_transaction {
SET invnumber = ?,
ordnumber = ?,
transdate = ?,
- $form->{vc}_id = ?,
+ entity_id = ?,
taxincluded = ?,
amount = ?,
duedate = ?,
@@ -304,7 +312,7 @@ sub post_transaction {
curr = ?,
notes = ?,
department_id = ?,
- employee_id = ?,
+ person_id = ?,
ponumber = ?
WHERE id = ?
|;
diff --git a/LedgerSMB/CT.pm b/LedgerSMB/CT.pm
index 768f2196..fd84016c 100644
--- a/LedgerSMB/CT.pm
+++ b/LedgerSMB/CT.pm
@@ -325,7 +325,7 @@ sub _save_vc {
$sth->execute(
$form->{entity_id}, $form->{entity_class}, $form->{discount},
$form->{taxincluded}, $form->{creditlimit},
- $form->{terms}, $form->{"$form->{vc}number"}, $form->{cc},
+ $form->{terms}, $form->{"$form->{db}number"}, $form->{cc},
$form->{bcc}, $form->{business_id},
$form->{language_code}, $form->{pricegroup_id}, $form->{curr},
$form->{startdate} || undef, $form->{enddate} || undef,
diff --git a/LedgerSMB/Form.pm b/LedgerSMB/Form.pm
index e0eaf529..f914ce46 100644
--- a/LedgerSMB/Form.pm
+++ b/LedgerSMB/Form.pm
@@ -1241,15 +1241,20 @@ sub all_vc {
my $sth;
- my $query = qq|SELECT count(*) FROM $vc|;
+ if ($vc eq 'customer'){
+ $self->{vc_class} = 2;
+ } else {
+ $self->{vc_class} = 1;
+ }
+ my $query = qq|SELECT count(*) FROM entity_credit_account where entity_class = ?|;
my $where;
- my @queryargs = ();
+ my @queryargs = ($self->{vc_class});
if ($transdate) {
- $query .= qq| WHERE (startdate IS NULL OR startdate <= ?)
+ $query .= qq| AND (startdate IS NULL OR startdate <= ?)
AND (enddate IS NULL OR enddate >= ?)|;
- @queryargs = ( $transdate, $transdate );
+ push (@queryargs, $transdate, $transdate );
}
$sth = $dbh->prepare($query);
@@ -1596,7 +1601,7 @@ sub create_links {
d.description AS department,
a.amount AS oldinvtotal, a.paid AS oldtotalpaid,
a.employee_id, e.name AS employee,
- c.language_code, a.ponumber
+ c.language_code, a.ponumber, a.reverse
FROM $arap a
JOIN $vc c ON (a.${vc}_id = c.id)
LEFT JOIN employee e ON (e.id = a.employee_id)
@@ -1664,6 +1669,9 @@ sub create_links {
$ref->{exchangerate} =
$self->get_exchangerate( $dbh, $self->{currency},
$ref->{transdate}, $fld );
+ if ($form->{reverse}){
+ $ref->{amount} *= -1;
+ }
push @{ $self->{acc_trans}{ $xkeyref{ $ref->{accno} } } }, $ref;
}
@@ -1741,7 +1749,7 @@ sub lastname_used {
where entity_id IS NOT NULL $where
order by id DESC limit 1)|;
- $sth = $dbh->prepare($query);
+ $sth = $self->{dbh}->prepare($query);
$sth->execute() || $self->dberror($query);
my $ref = $sth->fetchrow_hashref(NAME_lc);
diff --git a/LedgerSMB/IR.pm b/LedgerSMB/IR.pm
index 7a26de61..3c44df45 100644
--- a/LedgerSMB/IR.pm
+++ b/LedgerSMB/IR.pm
@@ -45,6 +45,7 @@ sub post_invoice {
unless $form->{invnumber};
for ( 1 .. $form->{rowcount} ) {
+ $form->{"qty_$_"} *= -1 if $form->{reverse};
unless ( $form->{"deliverydate_$_"} ) {
$form->{"deliverydate_$_"} = $form->{transdate};
}
@@ -285,6 +286,7 @@ sub post_invoice {
deliverydate = ?,
project_id = ?,
serialnumber = ?,
+ reverse = ?
notes = ?
WHERE id = ?|;
$sth = $dbh->prepare($query);
@@ -295,7 +297,8 @@ sub post_invoice {
$form->{"discount_$i"}, $allocated,
$form->{"unit_$i"}, $form->{"deliverydate_$i"},
$project_id, $form->{"serialnumber_$i"},
- $form->{"notes_$i"}, $invoice_id
+ $form->{reverse}, $form->{"notes_$i"},
+ $invoice_id
) || $form->dberror($query);
if (defined $form->{approved}) {
@@ -1070,7 +1073,7 @@ sub retrieve_invoice {
a.ordnumber, a.quonumber, a.paid, a.taxincluded,
a.notes, a.intnotes, a.curr AS currency,
a.vendor_id, a.language_code, a.ponumber,
- a.on_hold
+ a.on_hold, a.reverse
FROM ap a
WHERE id = ?|;
$sth = $dbh->prepare($query);
@@ -1138,7 +1141,7 @@ sub retrieve_invoice {
while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
$form->db_parse_numeric(sth=>$sth, hashref=>$ref);
-
+ $ref->{qty} *= -1 if $form->{reverse};
my ($dec) = ( $ref->{fxsellprice} =~ /\.(\d+)/ );
$dec = length $dec;
my $decimalplaces = ( $dec > 2 ) ? $dec : 2;
diff --git a/LedgerSMB/IS.pm b/LedgerSMB/IS.pm
index f76e13f2..4967f999 100644
--- a/LedgerSMB/IS.pm
+++ b/LedgerSMB/IS.pm
@@ -912,6 +912,9 @@ sub post_invoice {
foreach $i ( 1 .. $form->{rowcount} ) {
$form->{"qty_$i"} = $form->parse_amount( $myconfig, $form->{"qty_$i"} );
+ if ($form->{reverse}){
+ $form->{"qty_$i"} *= -1;
+ }
if ( $form->{"qty_$i"} ) {
@@ -1120,6 +1123,7 @@ sub post_invoice {
deliverydate = ?,
project_id = ?,
serialnumber = ?,
+ reverse = ?,
notes = ?
WHERE id = ?|;
@@ -1131,7 +1135,8 @@ sub post_invoice {
$form->{"discount_$i"}, $allocated,
$form->{"unit_$i"}, $form->{"deliverydate_$i"},
$project_id, $form->{"serialnumber_$i"},
- $form->{"notes_$i"}, $invoice_id
+ $form->{reverse}, $form->{"notes_$i"},
+ $invoice_id
) || $form->dberror($query);
if (defined $form->{approved}) {
@@ -1793,7 +1798,7 @@ sub retrieve_invoice {
a.intnotes,
a.duedate, a.taxincluded, a.curr AS currency,
a.employee_id, e.name AS employee, a.till,
- a.entity_id,
+ a.entity_id, a.reverse
a.language_code, a.ponumber,
a.on_hold
FROM ar a
@@ -1863,6 +1868,7 @@ sub retrieve_invoice {
while ( $ref = $sth->fetchrow_hashref(NAME_lc) ) {
$form->db_parse_numeric(sth=>$sth, hashref => $ref);
+ $ref->{qty} *= -1 if $form->{reverse};
my ($dec) = ( $ref->{fxsellprice} =~ /\.(\d+)/ );
$dec = length $dec;
my $decimalplaces = ( $dec > 2 ) ? $dec : 2;
diff --git a/LedgerSMB/Menu.pm b/LedgerSMB/Menu.pm
index b95b7a6a..9e29fdf2 100644
--- a/LedgerSMB/Menu.pm
+++ b/LedgerSMB/Menu.pm
@@ -19,7 +19,6 @@ package LedgerSMB::Menu;
use Config::Std;
use base(qw(LedgerSMB::DBObject));
-
1;
=head1 METHODS
diff --git a/LedgerSMB/Template.pm b/LedgerSMB/Template.pm
index 2366a9ca..ba2cd221 100755
--- a/LedgerSMB/Template.pm
+++ b/LedgerSMB/Template.pm
@@ -144,6 +144,7 @@ sub _http_output {
my $self = shift;
my $FH;
+ print STDERR "Content-Type: $self->{mimetype}; charset=utf-8\n\n";
if ($self->{mimetype} =~ /^text/) {
print "Content-Type: $self->{mimetype}; charset=utf-8\n\n";
} else {
diff --git a/bin/aa.pl b/bin/aa.pl
index 73550101..e097a7b2 100644
--- a/bin/aa.pl
+++ b/bin/aa.pl
@@ -92,6 +92,18 @@ sub add {
$form->{callback} =
"$form->{script}?action=add&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}"
unless $form->{callback};
+ if ($form->{type} eq "credit_note"){
+ $form->{reverse} = 1;
+ $form->{subtype} = 'credit_note';
+ $form->{type} = 'transaction';
+ } elsif ($form->{type} eq 'debit_note'){
+ $form->{reverse} = 1;
+ $form->{subtype} = 'debit_note';
+ $form->{type} = 'transaction';
+ }
+ else {
+ $form->{reverse} = 0;
+ }
&create_links;
@@ -103,6 +115,18 @@ sub add {
sub edit {
$form->{title} = "Edit";
+ if ($form->{reverse}){
+ if ($form->{ARAP} eq 'AR'){
+ $form->{subtype} = 'credit_note';
+ $form->{type} = 'transaction';
+ } elsif ($form->{ARAP} eq 'AP'){
+ $form->{subtype} = 'debit_note';
+ $form->{type} = 'transaction';
+ } else {
+ $form->error("Unknown AR/AP selection value: $form->{ARAP}");
+ }
+
+ }
&create_links;
&display_form;
@@ -375,12 +399,29 @@ qq|<option value="$_->{projectnumber}--$_->{id}">$_->{projectnumber}\n|;
sub form_header {
$title = $form->{title};
- $form->{title} = $locale->text("$title $form->{ARAP} Transaction");
+ if ($form->{reverse} == 0){
+ $form->{title} = $locale->text("$title $form->{ARAP} Transaction");
+ }
+ elsif($form->{reverse} == 1) {
+ if ($form->{subtype} eq 'credit_note'){
+ $form->{title} = $locale->text("$title Credit Note");
+ } elsif ($form->{subtype} eq 'debit_note'){
+ $form->{title} = $locale->text("$title Debit Note");
+ } else {
+ $form->error("Unknown subtype $form->{subtype} in $form->{ARAP} "
+ . "transaction.");
+ }
+ }
+ else {
+ $form->error('Reverse flag not true or false on AR/AP transaction');
+ }
$form->{taxincluded} = ( $form->{taxincluded} ) ? "checked" : "";
- # $locale->text('Add AR Transaction')
- # $locale->text('Edit AR Transaction')
+ # $locale->text('Add Debit Note')
+ # $locale->text('Edit Debit Note')
+ # $locale->text('Add Credit Note')
+ # $locale->text('Edit Credit Note')
# $locale->text('Add AP Transaction')
# $locale->text('Edit AP Transaction')
@@ -496,14 +537,14 @@ qq|<textarea name=notes rows=$rows cols=50 wrap=soft>$form->{notes}</textarea>|;
<body onload="document.forms[0].${focus}.focus()" />
<form method=post action=$form->{script}>
-
<input type=hidden name=type value="$form->{formname}">
<input type=hidden name=title value="$title">
|;
$form->hide_form(
- qw(id printed emailed sort closedto locked oldtransdate audittrail recurring checktax)
+ qw(id printed emailed sort closedto locked oldtransdate audittrail
+ recurring checktax reverse batch_id subtype)
);
if ( $form->{vc} eq 'customer' ) {
diff --git a/bin/ir.pl b/bin/ir.pl
index ed646c00..b0840827 100644
--- a/bin/ir.pl
+++ b/bin/ir.pl
@@ -50,8 +50,14 @@ require "bin/arap.pl";
# end of main
sub add {
-
- $form->{title} = $locale->text('Add Vendor Invoice');
+ if ($form->{type} eq 'debit_invoice'){
+ $form->{title} = $locale->text('Add Debit Invoice');
+ $form->{subtype} = 'debit_invoice';
+ $form->{reverse} = 1;
+ } else {
+ $form->{title} = $locale->text('Add Vendor Invoice');
+ $form->{reverse} = 0;
+ }
$form->{callback} =
"$form->{script}?action=add&type=$form->{type}&login=$form->{login}&path=$form->{path}&sessionid=$form->{sessionid}"
@@ -63,8 +69,13 @@ sub add {
}
sub edit {
-
- $form->{title} = $locale->text('Edit Vendor Invoice');
+ if ($form->{reverse}){
+ $form->{title} = $locale->text('Add Debit Invoice');
+ $form->{subtype} = 'debit_invoice';
+ } else {
+ $form->{title} = $locale->text('Edit Vendor Invoice');
+ }
+
&invoice_links;
&prepare_invoice;
@@ -367,7 +378,8 @@ sub form_header {
$form->{vc} = "vendor";
$form->hide_form(
- qw(id title vc type terms creditlimit creditremaining closedto locked shipped oldtransdate recurring)
+ qw(id title vc type terms creditlimit creditremaining closedto locked
+ shipped oldtransdate recurring reverse batch_id subtype)
);
print qq|
@@ -1139,4 +1151,4 @@ sub on_hold {
#&invoice_links(); # is that it?
&edit(); # it was already IN edit for this to be reached.
}
-} \ No newline at end of file
+}
diff --git a/bin/is.pl b/bin/is.pl
index a940fa7a..3caf8ffa 100644
--- a/bin/is.pl
+++ b/bin/is.pl
@@ -55,9 +55,14 @@ require "bin/io.pl";
# end of main
sub add {
-
- $form->{title} = $locale->text('Add Sales Invoice');
-
+ if ($form->{type} eq 'credit_invoice'){
+ $form->{title} = $locale->text('Add Credit Invoice');
+ $form->{subtype} = 'credit_invoice';
+ $form->{reverse} = 1;
+ } else {
+ $form->{title} = $locale->text('Add Sales Invoice');
+ $form->{reverse} = 0;
+ }
$form->{callback} =
"$form->{script}?action=add&type=$form->{type}&login=$form->{login}&path=$form->{path}&sessionid=$form->{sessionid}"
unless $form->{callback};
@@ -70,8 +75,12 @@ sub add {
sub edit {
- $form->{title} = $locale->text('Edit Sales Invoice');
-
+ if ($form->{reverse}) {
+ $form->{title} = $locale->text('Add Credit Invoice');
+ $form->{subtype} = 'credit_invoice';
+ } else {
+ $form->{title} = $locale->text('Add Sales Invoice');
+ }
&invoice_links;
&prepare_invoice;
&display_form;
@@ -402,7 +411,9 @@ sub form_header {
|;
$form->hide_form(
- qw(id type media format printed emailed queued title vc terms discount creditlimit creditremaining tradediscount business closedto locked shipped oldtransdate recurring)
+ qw(id type media format printed emailed queued title vc terms discount
+ creditlimit creditremaining tradediscount business closedto locked
+ shipped oldtransdate recurring reverse batch_id subtype)
);
print qq|
@@ -1198,4 +1209,4 @@ sub on_hold {
#&invoice_links(); # is that it?
&edit(); # it was already IN edit for this to be reached.
}
-} \ No newline at end of file
+}
diff --git a/lsmb-request.pl b/lsmb-request.pl
index 069d03d0..473ea39f 100644
--- a/lsmb-request.pl
+++ b/lsmb-request.pl
@@ -56,3 +56,4 @@ $script->can($request->{action})
|| $request->error($locale->text("Action Not Defined: ") . $request->{action});
$script->can($request->{action})->($request);
+1;
diff --git a/scripts/menu.pl b/scripts/menu.pl
index 678b71eb..ec96c307 100644
--- a/scripts/menu.pl
+++ b/scripts/menu.pl
@@ -37,7 +37,7 @@ sub display {
sub expanding_menu {
my ($request) = @_;
- my $menu = new LedgerSMB::Menu({base => $request});
+ my $menu = LedgerSMB::Menu->new({base => $request});
$menu->generate();
my $template = LedgerSMB::Template->new(
user => $request->{_user},