X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FMoreCommon.pm;h=32ca6b6c08938331cb4f396741e49957bc572e3f;hb=786b3862388eb8d4cdcc5dfc663a37fe0e9a82a1;hp=b0b64d155ab7d8ca17b03748f84b65bd44a69caa;hpb=805bd93013dc4ec6d0f5504ea25b7cf58359fda2;p=kivitendo-erp.git diff --git a/SL/MoreCommon.pm b/SL/MoreCommon.pm index b0b64d155..32ca6b6c0 100644 --- a/SL/MoreCommon.pm +++ b/SL/MoreCommon.pm @@ -3,18 +3,30 @@ package SL::MoreCommon; require Exporter; @ISA = qw(Exporter); -@EXPORT = qw(save_form restore_form); +@EXPORT = qw(save_form restore_form compare_numbers); use YAML; +use SL::AM; + sub save_form { $main::lxdebug->enter_sub(); + my @dont_dump_keys = @_; + my %not_dumped_values; + + foreach my $key (@dont_dump_keys) { + $not_dumped_values{$key} = $main::form->{$key}; + delete $main::form->{$key}; + } + my $old_form = YAML::Dump($main::form); $old_form =~ s|!|!:|g; $old_form =~ s|\n|!n|g; $old_form =~ s|\r|!r|g; + map { $main::form->{$_} = $not_dumped_values{$_} } keys %not_dumped_values; + $main::lxdebug->leave_sub(); return $old_form; @@ -23,20 +35,46 @@ sub save_form { sub restore_form { $main::lxdebug->enter_sub(); - my ($old_form, $no_delete) = @_; + my ($old_form, $no_delete, @keep_vars) = @_; - my $form = $main::form; + my $form = $main::form; + my %keep_vars_map = map { $_ => 1 } @keep_vars; - map { delete $form->{$_}; } keys %{$form} unless ($no_delete); + map { delete $form->{$_} if (!$keep_vars_map{$_}); } keys %{$form} unless ($no_delete); $old_form =~ s|!r|\r|g; $old_form =~ s|!n|\n|g; $old_form =~ s|![!:]|!|g; my $new_form = YAML::Load($old_form); - map { $form->{$_} = $new_form->{$_}; } keys %{$new_form}; + map { $form->{$_} = $new_form->{$_} if (!$keep_vars_map{$_}) } keys %{ $new_form }; $main::lxdebug->leave_sub(); } +sub compare_numbers { + $main::lxdebug->enter_sub(); + + my $a = shift; + my $a_unit = shift; + my $b = shift; + my $b_unit = shift; + + $main::all_units ||= AM->retrieve_units(\%main::myconfig, $main::form); + my $units = $main::all_units; + + if (!$units->{$a_unit} || !$units->{$b_unit} || ($units->{$a_unit}->{base_unit} ne $units->{$b_unit}->{base_unit})) { + $main::lxdebug->leave_sub(); + return undef; + } + + $a *= $units->{$a_unit}->{factor}; + $b *= $units->{$b_unit}->{factor}; + + $main::lxdebug->leave_sub(); + + return $a <=> $b; +} + + 1;