diff options
author | einhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46> | 2007-07-21 17:15:06 +0000 |
---|---|---|
committer | einhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46> | 2007-07-21 17:15:06 +0000 |
commit | cb3ed4ec17fbe42bad05f94946bc033678f09019 (patch) | |
tree | 55296194e73c67449ebc858d8a56d59d92fceeee | |
parent | 33da5bb969ad49cef8f1d638ea72b094ca79f442 (diff) |
Correcting cumulative tax display issues, bug 1745757
git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/trunk@1434 4979c152-3d1c-0410-bac9-87ea11338e46
-rw-r--r-- | bin/io.pl | 34 | ||||
-rw-r--r-- | bin/ir.pl | 23 | ||||
-rw-r--r-- | bin/is.pl | 28 | ||||
-rw-r--r-- | bin/pos.pl | 22 |
4 files changed, 58 insertions, 49 deletions
@@ -84,6 +84,40 @@ if ( -f "bin/custom/$form->{login}_io.pl" ) { # $locale->text('Nov') # $locale->text('Dec') +sub _calc_taxes { + for $i (1 .. $form->{rowcount}){ + my $linetotal = + $form->parse_amount(\%myconfig, $form->{"sellprice_$i"}) + * $form->parse_amount(\%myconfig, $form->{"qty_$i"}) + * (1 - $form->parse_amount(\%myconfig, $form->{"discount_$i"}) + / 100); + @taxaccounts = Tax::init_taxes( + $form, $form->{"taxaccounts_$i"}, + $form->{'taxaccounts'} + ); + my $tax; + my $fxtax; + my $amount; + if ( $form->{taxincluded} ) { + $tax += $amount = + Tax::calculate_taxes( \@taxaccounts, $form, $linetotal, 1 ); + + $form->{"sellprice_$i"} -= $amount / $form->{"qty_$i"}; + } + else { + $tax += $amount = + Tax::calculate_taxes( \@taxaccounts, $form, $linetotal, 0 ); + $fxtax += + Tax::calculate_taxes( \@taxaccounts, $form, $fxlinetotal, 0 ) + if $fxlinetotal; + } + for (@taxaccounts) { + $form->{taxes}{$_->account} = 0 if ! $form->{taxes}{$_->account}; + $form->{taxes}{$_->account} += $_->value; + } + } +} + sub display_row { my $numrows = shift; @@ -469,7 +469,7 @@ sub form_header { } sub form_footer { - + _calc_taxes(); $form->{invtotal} = $form->{invsubtotal}; if ( ( $rows = $form->numtextrows( $form->{notes}, 35, 8 ) ) < 2 ) { @@ -483,7 +483,7 @@ sub form_footer { qq|<textarea name=notes rows=$rows cols=35 wrap=soft>$form->{notes}</textarea>|; $intnotes = qq|<textarea name=intnotes rows=$rows cols=35 wrap=soft>$form->{intnotes}</textarea>|; - + $tax = ""; $form->{taxincluded} = ( $form->{taxincluded} ) ? "checked" : ""; $taxincluded = ""; @@ -495,26 +495,17 @@ qq|<textarea name=intnotes rows=$rows cols=35 wrap=soft>$form->{intnotes}</texta } if ( !$form->{taxincluded} ) { - my @taxset = Tax::init_taxes( $form, $form->{taxaccounts} ); - foreach $taxobj (@taxset) { - $item = $taxobj->account; - $form->{invtotal} += $form->round_amount( - $form->{"${item}_rate"} * $form->{"${item}_base"}, 2); - $form->{"${item}_total"} = - $form->format_amount( \%myconfig, - $form->{"${item}_rate"} * $form->{"${item}_base"}, 2 ); - if ( $form->{"${item}_base"} ) { - $form->{"${item}_total"} = - $form->format_amount( \%myconfig, - $form->round_amount( $taxobj->value, 2 ), 2 ); - + foreach $item (keys %{$form->{taxes}}) { + my $taccno = $item; + $form->{invtotal} += $form->round_amount($form->{taxes}{$item}, 2); + $form->{"${taccno}_total"} = + $form->round_amount($form->{taxes}{$item}, 2); $tax .= qq| <tr> <th align=right>$form->{"${item}_description"}</th> <td align=right>$form->{"${item}_total"}</td> </tr> |; - } } $form->{invsubtotal} = @@ -518,7 +518,7 @@ sub form_header { } sub form_footer { - + _calc_taxes(); $form->{invtotal} = $form->{invsubtotal}; if ( ( $rows = $form->numtextrows( $form->{notes}, 35, 8 ) ) < 2 ) { @@ -549,20 +549,17 @@ qq|<textarea name=intnotes rows=$rows cols=35 wrap=soft>$form->{intnotes}</texta } if ( !$form->{taxincluded} ) { - my @taxes = Tax::init_taxes( $form, $form->{taxaccounts} ); - foreach $item (@taxes) { - my $taccno = $item->account; - $form->{invtotal} += $form->round_amount( - $form->{"${taccno}_rate"} * $form->{"${taccno}_base"}, 2); + foreach $item (keys %{$form->{taxes}}) { + my $taccno = $item; + $form->{invtotal} += $form->round_amount($form->{taxes}{$item}, 2); $form->{"${taccno}_total"} = - $form->format_amount( \%myconfig, - $form->{"${taccno}_rate"} * $form->{"${taccno}_base"}, 2 ); + $form->format_amount( \%myconfig, + $form->round_amount( $form->{taxes}{$item}, 2 ), 2 ); $tax .= qq| <tr> <th align=right>$form->{"${taccno}_description"}</th> <td align=right>$form->{"${taccno}_total"}</td> - </tr> - | if $form->{"${taccno}_base"}; + </tr>|; } $form->{invsubtotal} = @@ -834,7 +831,7 @@ qq|<td align=center><input name="memo_$i" size=11 value="$form->{"memo_$i"}"></t } sub update { - + $form->{taxes} = {}; $form->{exchangerate} = $form->parse_amount( \%myconfig, $form->{exchangerate} ); @@ -1011,13 +1008,8 @@ sub update { for ( split / /, $form->{"taxaccounts_$i"} ) { $form->{"${_}_base"} += $amount; } - if ( !$form->{taxincluded} ) { - my @taxes = - Tax::init_taxes( $form, $form->{"taxaccounts_$i"}, - $form->{taxaccounts} ); - $amount += - Tax::calculate_taxes( \@taxes, $form, $amount, 0 ); - } + + $form->{creditremaining} -= $amount; @@ -399,7 +399,7 @@ sub form_header { } sub form_footer { - + _calc_taxes(); $form->{invtotal} = $form->{invsubtotal}; $form->{taxincluded} = ( $form->{taxincluded} ) ? "checked" : ""; @@ -419,25 +419,17 @@ sub form_footer { if ( !$form->{taxincluded} ) { - my @taxset = Tax::init_taxes( $form, $form->{taxaccounts} ); - foreach $taxobj (@taxset) { - $item = $taxobj->account; - $form->{invtotal} += $form->round_amount( - $form->{"${item}_rate"} * $form->{"${item}_base"}, 2); - $form->{"${item}_total"} = - $form->format_amount( \%myconfig, - $form->{"${item}_rate"} * $form->{"${item}_base"}, 2 ); - if ( $form->{"${item}_base"} ) { - $form->{"${item}_total"} = + foreach $item (keys %{$form->{taxes}}) { + my $taccno = $item; + $form->{invtotal} += $form->round_amount($form->{taxes}{$item}, 2); + $form->{"${taccno}_total"} = $form->format_amount( \%myconfig, - $form->round_amount( $taxobj->value, 2 ), 2 ); + $form->round_amount( $form->{taxes}{$item}, 2 ), 2 ); $tax .= qq| <tr> <th align=right>$form->{"${item}_description"}</th> <td align=right>$form->{"${item}_total"}</td> - </tr> -|; - } + </tr>|; } $form->{invsubtotal} = |