diff options
-rwxr-xr-x | LedgerSMB.pm | 2 | ||||
-rw-r--r-- | LedgerSMB/AA.pm | 24 | ||||
-rw-r--r-- | LedgerSMB/CT.pm | 2 | ||||
-rw-r--r-- | LedgerSMB/Form.pm | 20 | ||||
-rw-r--r-- | LedgerSMB/IR.pm | 9 | ||||
-rw-r--r-- | LedgerSMB/IS.pm | 10 | ||||
-rw-r--r-- | LedgerSMB/Menu.pm | 1 | ||||
-rwxr-xr-x | LedgerSMB/Template.pm | 1 | ||||
-rw-r--r-- | bin/aa.pl | 51 | ||||
-rw-r--r-- | bin/ir.pl | 24 | ||||
-rw-r--r-- | bin/is.pl | 25 | ||||
-rw-r--r-- | lsmb-request.pl | 1 | ||||
-rw-r--r-- | scripts/menu.pl | 2 |
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 { @@ -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' ) { @@ -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 +} @@ -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}, |