X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/07a735e0cb464b4cf96617578868957635410ad9..0b34e29fb04ad9ac9912f67b767f9f401700ca97:/SL/Form.pm diff --git a/SL/Form.pm b/SL/Form.pm index 8cab71c66..6a65a82bc 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -850,7 +850,7 @@ sub format_amount { return $amount; } -sub format_amount_unit { +sub format_amount_units { $main::lxdebug->enter_sub(); my $self = shift; @@ -969,19 +969,19 @@ sub parse_amount { sub round_amount { my ($self, $amount, $places, $adjust) = @_; + return 0 if !defined $amount; + if ($adjust) { - my $precision = 0.01; + my $precision = SL::DB::Default->get->precision || 0.01; # Round amounts to eight places before rounding to the requested # number of places. This gets rid of errors due to internal floating # point representation. $amount = int($amount * 10**8 + .5 * ($amount <=> 0)) / 10**8 if $places < 8; - $amount = int($amount / ($precision = _get_precision()) + ($amount <=> 0) * .5) * $precision; + $amount = int($amount / $precision + ($amount <=> 0) * .5) * $precision; $amount = int($amount * 10**$places + .5 * ($amount <=> 0)) / 10**$places; return $amount; } - return 0 if !defined $amount; - # We use Perl's knowledge of string representation for # rounding. First, convert the floating point number to a string # with a high number of places. Then split the string on the decimal @@ -2882,7 +2882,9 @@ sub create_links { d.closedto, d.revtrans, (SELECT cu.name FROM currencies cu WHERE cu.id=d.currency_id) AS defaultcurrency, (SELECT c.accno FROM chart c WHERE d.fxgain_accno_id = c.id) AS fxgain_accno, - (SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno + (SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno, + (SELECT c.accno FROM chart c WHERE d.rndgain_accno_id = c.id) AS rndgain_accno, + (SELECT c.accno FROM chart c WHERE d.rndloss_accno_id = c.id) AS rndloss_accno FROM defaults d|; $ref = selectfirst_hashref_query($self, $dbh, $query); map { $self->{$_} = $ref->{$_} } keys %$ref; @@ -2895,7 +2897,9 @@ sub create_links { current_date AS transdate, d.closedto, d.revtrans, (SELECT cu.name FROM currencies cu WHERE cu.id=d.currency_id) AS defaultcurrency, (SELECT c.accno FROM chart c WHERE d.fxgain_accno_id = c.id) AS fxgain_accno, - (SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno + (SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno, + (SELECT c.accno FROM chart c WHERE d.rndgain_accno_id = c.id) AS rndgain_accno, + (SELECT c.accno FROM chart c WHERE d.rndloss_accno_id = c.id) AS rndloss_accno FROM defaults d|; $ref = selectfirst_hashref_query($self, $dbh, $query); map { $self->{$_} = $ref->{$_} } keys %$ref; @@ -3694,22 +3698,6 @@ sub calculate_tax { return ($amount,$tax); }; -sub _get_precision { - my ( $self ) = @_; - my $precision = 0.01; - eval { - my $client = $::auth->{client}; - my $dbconnect = 'dbi:Pg:dbname=' . $client->{dbname} . ';host=' . $client->{dbhost} . ';port=' . $client->{dbport}; - my $dbh = DBI->connect($dbconnect, $client->{dbuser}, $client->{dbpasswd}); - my $query = q{ SELECT precision FROM defaults }; - (my $sth = $dbh->prepare($query))->execute; - ($precision) = selectrow_query($::form, $dbh, $query); - $sth->finish; - $dbh->disconnect; - }; - return $precision; -} - 1; __END__