X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FForm.pm;h=2e945895655401e5ae35dab94eaab84200c95227;hb=10c5bcd8845b264febd0c7bfd1a690e287703b54;hp=668fd9e4451c132983bf29f18751222ccd38c157;hpb=56f1a79e930b58250a21189303e328bce2896f8d;p=kivitendo-erp.git diff --git a/SL/Form.pm b/SL/Form.pm index 668fd9e44..2e9458956 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -59,6 +59,7 @@ use SL::CVar; use SL::DB; use SL::DBConnect; use SL::DBUtils; +use SL::DB::AdditionalBillingAddress; use SL::DB::Customer; use SL::DB::Default; use SL::DB::PaymentTerm; @@ -709,74 +710,6 @@ sub format_amount { SL::Helper::Number::_format_number($amount, $places, %$myconfig, dash => $dash); } -sub format_amount_units { - $main::lxdebug->enter_sub(); - - my $self = shift; - my %params = @_; - - my $myconfig = \%main::myconfig; - my $amount = $params{amount} * 1; - my $places = $params{places}; - my $part_unit_name = $params{part_unit}; - my $amount_unit_name = $params{amount_unit}; - my $conv_units = $params{conv_units}; - my $max_places = $params{max_places}; - - if (!$part_unit_name) { - $main::lxdebug->leave_sub(); - return ''; - } - - my $all_units = AM->retrieve_all_units; - - if (('' eq ref $conv_units) && ($conv_units =~ /convertible/)) { - $conv_units = AM->convertible_units($all_units, $part_unit_name, $conv_units eq 'convertible_not_smaller'); - } - - if (!scalar @{ $conv_units }) { - my $result = $self->format_amount($myconfig, $amount, $places, undef, $max_places) . " " . $part_unit_name; - $main::lxdebug->leave_sub(); - return $result; - } - - my $part_unit = $all_units->{$part_unit_name}; - my $conv_unit = ($amount_unit_name && ($amount_unit_name ne $part_unit_name)) ? $all_units->{$amount_unit_name} : $part_unit; - - $amount *= $conv_unit->{factor}; - - my @values; - my $num; - - foreach my $unit (@$conv_units) { - my $last = $unit->{name} eq $part_unit->{name}; - if (!$last) { - $num = int($amount / $unit->{factor}); - $amount -= $num * $unit->{factor}; - } - - if ($last ? $amount : $num) { - push @values, { "unit" => $unit->{name}, - "amount" => $last ? $amount / $unit->{factor} : $num, - "places" => $last ? $places : 0 }; - } - - last if $last; - } - - if (!@values) { - push @values, { "unit" => $part_unit_name, - "amount" => 0, - "places" => 0 }; - } - - my $result = join " ", map { $self->format_amount($myconfig, $_->{amount}, $_->{places}, undef, $max_places), $_->{unit} } @values; - - $main::lxdebug->leave_sub(); - - return $result; -} - sub format_string { $main::lxdebug->enter_sub(2); @@ -3222,6 +3155,8 @@ sub prepare_for_printing { IS->invoice_details(\%::myconfig, $self, $::locale); } + $self->set_addition_billing_address_print_variables; + # Chose extension & set source file name my $extension = 'html'; if ($self->{format} eq 'postscript') { @@ -3282,6 +3217,43 @@ sub prepare_for_printing { today => DateTime->today, }; + if ($defaults->print_interpolate_variables_in_positions) { + $self->substitute_placeholders_in_template_arrays({ field => 'description', type => 'text' }, { field => 'longdescription', type => 'html' }); + } + + return $self; +} + +sub set_addition_billing_address_print_variables { + my ($self) = @_; + + return if !$self->{billing_address_id}; + + my $address = SL::DB::Manager::AdditionalBillingAddress->find_by(id => $self->{billing_address_id}); + return if !$address; + + $self->{"billing_address_${_}"} = $address->$_ for map { $_->name } @{ $address->meta->columns }; +} + +sub substitute_placeholders_in_template_arrays { + my ($self, @fields) = @_; + + foreach my $spec (@fields) { + $spec = { field => $spec, type => 'text' } if !ref($spec); + my $field = $spec->{field}; + + next unless exists $self->{TEMPLATE_ARRAYS} && exists $self->{TEMPLATE_ARRAYS}->{$field}; + + my $tag_start = $spec->{type} eq 'html' ? '<%' : '<%'; + my $tag_end = $spec->{type} eq 'html' ? '%>' : '%>'; + my $formatter = $spec->{type} eq 'html' ? sub { $::locale->quote_special_chars('html', $_[0] // '') } : sub { $_[0] }; + + $self->{TEMPLATE_ARRAYS}->{$field} = [ + apply { s{${tag_start}(.+?)${tag_end}}{ $formatter->($self->{$1}) }eg } + @{ $self->{TEMPLATE_ARRAYS}->{$field} } + ]; + } + return $self; }