From: Sven Schöling Date: Mon, 4 Apr 2016 11:39:32 +0000 (+0200) Subject: Reapply "Form: round_amount precision support" X-Git-Tag: release-3.4.1~260 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=a2bab345aedcfbb03bdf0e0aa1f28a5c57a5d02b;p=kivitendo-erp.git Reapply "Form: round_amount precision support" Und mit neuer Autorschaft neu. --- diff --git a/SL/DB/MetaSetup/Default.pm b/SL/DB/MetaSetup/Default.pm index 4f0fcf058..96c4b0f1f 100644 --- a/SL/DB/MetaSetup/Default.pm +++ b/SL/DB/MetaSetup/Default.pm @@ -78,6 +78,7 @@ __PACKAGE__->meta->columns( payments_changeable => { type => 'integer', default => '0', not_null => 1 }, pdonumber => { type => 'text' }, ponumber => { type => 'text' }, + precision => { type => 'numeric', default => '0.01', not_null => 1, precision => 15, scale => 5 }, profit_determination => { type => 'text' }, project_status_id => { type => 'integer' }, project_type_id => { type => 'integer' }, diff --git a/SL/Form.pm b/SL/Form.pm index 9dbe7a784..98bb4dbe2 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -948,12 +948,17 @@ sub parse_amount { } sub round_amount { - my ($self, $amount, $places) = @_; + my ($self, $amount, $places, $adjust) = @_; return 0 if !defined $amount; $places //= 0; + if ($adjust) { + my $precision = $::instance_conf->get_precision || 0.01; + return $self->round_amount( $self->round_amount($amount / $precision, 0) * $precision, $places); + } + # 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 diff --git a/sql/Pg-upgrade2/defaults_add_precision.sql b/sql/Pg-upgrade2/defaults_add_precision.sql new file mode 100644 index 000000000..88f854cab --- /dev/null +++ b/sql/Pg-upgrade2/defaults_add_precision.sql @@ -0,0 +1,5 @@ +-- @tag: defaults_add_precision +-- @description: adds new column 'precision' in table defaults, used to round amounts +-- @depends: release_3_0_0 +ALTER TABLE defaults ADD COLUMN precision NUMERIC(15,5) NOT NULL DEFAULT(0.01); +