sub _store_value {
$main::lxdebug->enter_sub(2);
- my $self = shift;
+ my $curr = shift;
my $key = shift;
my $value = shift;
- my $curr = $self;
-
while ($key =~ /\[\+?\]\.|\./) {
substr($key, 0, $+[0]) = '';
sub _input_to_hash {
$main::lxdebug->enter_sub(2);
- my $self = shift;
- my $input = shift;
+ my $params = shift;
+ my $input = shift;
- my @pairs = split(/&/, $input);
+ my @pairs = split(/&/, $input);
foreach (@pairs) {
my ($key, $value) = split(/=/, $_, 2);
- $self->_store_value($self->unescape($key), $self->unescape($value));
+ _store_value($params, unescape(undef, $key), unescape(undef, $value));
}
$main::lxdebug->leave_sub(2);
sub _request_to_hash {
$main::lxdebug->enter_sub(2);
- my $self = shift;
- my $input = shift;
+ my $params = shift;
+ my $input = shift;
if (!$ENV{'CONTENT_TYPE'}
|| ($ENV{'CONTENT_TYPE'} !~ /multipart\/form-data\s*;\s*boundary\s*=\s*(.+)$/)) {
- $self->_input_to_hash($input);
+ _input_to_hash($params, $input);
$main::lxdebug->leave_sub(2);
return;
substr $line, $-[0], $+[0] - $-[0], "";
}
- $previous = $self->_store_value($name, '');
- $self->{FILENAME} = $filename if ($filename);
+ $previous = _store_value($params, $name, '');
+ $params->{FILENAME} = $filename if ($filename);
next;
}
$main::lxdebug->leave_sub(2);
}
+sub _recode_recursively {
+ my ($iconv, $param) = @_;
+
+ if (ref $param eq 'HASH') {
+ foreach my $key (keys %{ $param }) {
+ if (!ref $param->{$key}) {
+ $param->{$key} = $iconv->convert($param->{$key});
+ } else {
+ _recode_recursively($iconv, $param->{$key});
+ }
+ }
+
+ } elsif (ref $param eq 'ARRAY') {
+ foreach my $idx (0 .. scalar(@{ $param }) - 1) {
+ if (!ref $param->[$idx]) {
+ $param->[$idx] = $iconv->convert($param->[$idx]);
+ } else {
+ _recode_recursively($iconv, $param->[$idx]);
+ }
+ }
+ }
+}
+
sub new {
$main::lxdebug->enter_sub();
bless $self, $type;
- $self->_request_to_hash($_);
+ my $parameters = { };
+ _request_to_hash($parameters, $_);
+
+ my $db_charset = $main::dbcharset;
+ $db_charset ||= Common::DEFAULT_CHARSET;
+
+ if ($parameters->{INPUT_ENCODING} && (lc $parameters->{INPUT_ENCODING} ne $db_charset)) {
+ require Text::Iconv;
+ my $iconv = Text::Iconv->new($parameters->{INPUT_ENCODING}, $db_charset);
+
+ _recode_recursively($iconv, $parameters);
+
+ delete $parameters{INPUT_ENCODING};
+ }
+
+ map { $self->{$_} = $parameters->{$_}; } keys %{ $parameters };
$self->{action} = lc $self->{action};
$self->{action} =~ s/( |-|,|\#)/_/g;
$self->{"cwd"} = getcwd();
$self->{"tmpdir"} = $self->{cwd} . "/${userspath}";
+ my $ext_for_format;
+
if ($self->{"format"} =~ /(opendocument|oasis)/i) {
- $template = OpenDocumentTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+ $template = OpenDocumentTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+ $ext_for_format = 'odt';
+
} elsif ($self->{"format"} =~ /(postscript|pdf)/i) {
$ENV{"TEXINPUTS"} = ".:" . getcwd() . "/" . $myconfig->{"templates"} . ":" . $ENV{"TEXINPUTS"};
- $template = LaTeXTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
- } elsif (($self->{"format"} =~ /html/i) ||
- (!$self->{"format"} && ($self->{"IN"} =~ /html$/i))) {
- $template = HTMLTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
- } elsif (($self->{"format"} =~ /xml/i) ||
- (!$self->{"format"} && ($self->{"IN"} =~ /xml$/i))) {
- $template = XMLTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+ $template = LaTeXTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+ $ext_for_format = 'pdf';
+
+ } elsif (($self->{"format"} =~ /html/i) || (!$self->{"format"} && ($self->{"IN"} =~ /html$/i))) {
+ $template = HTMLTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+ $ext_for_format = 'html';
+
+ } elsif (($self->{"format"} =~ /xml/i) || (!$self->{"format"} && ($self->{"IN"} =~ /xml$/i))) {
+ $template = XMLTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+ $ext_for_format = 'xml';
+
} elsif ( $self->{"format"} =~ /elsterwinston/i ) {
$template = XMLTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+
} elsif ( $self->{"format"} =~ /elstertaxbird/i ) {
$template = XMLTemplate->new($self->{"IN"}, $self, $myconfig, $userspath);
+
} elsif ( defined $self->{'format'}) {
$self->error("Outputformat not defined. This may be a future feature: $self->{'format'}");
+
} elsif ( $self->{'format'} eq '' ) {
$self->error("No Outputformat given: $self->{'format'}");
+
} else { #Catch the rest
$self->error("Outputformat not defined: $self->{'format'}");
}
} else {
if (!$self->{"do_not_attach"}) {
- @{ $mail->{attachments} } =
- ({ "filename" => $self->{"tmpfile"},
- "name" => $self->{"attachment_filename"} ?
- $self->{"attachment_filename"} : $self->{"tmpfile"} });
+ my $attachment_name = $self->{attachment_filename} || $self->{tmpfile};
+ $attachment_name =~ s/\.(.+?)$/.${ext_for_format}/ if ($ext_for_format);
+ $mail->{attachments} = [{ "filename" => $self->{tmpfile},
+ "name" => $attachment_name }];
}
$mail->{message} =~ s/\r//g;
my ($self, $myconfig, $currency, $transdate, $fld) = @_;
+ if ($fld !~/^buy|sell$/) {
+ $self->error('Fatal: check_exchangerate called with invalid buy/sell argument');
+ }
+
unless ($transdate) {
$main::lxdebug->leave_sub();
return "";
sub get_duedate {
$main::lxdebug->enter_sub();
- my ($self, $myconfig) = @_;
+ my ($self, $myconfig, $reference_date) = @_;
- my $dbh = $self->get_standard_dbh($myconfig);
- my $query = qq|SELECT current_date + terms_netto FROM payment_terms WHERE id = ?|;
- ($self->{duedate}) = selectrow_query($self, $dbh, $query, $self->{payment_id});
+ my $reference_date = $reference_date ? conv_dateq($reference_date) . '::DATE' : 'current_date';
+
+ my $dbh = $self->get_standard_dbh($myconfig);
+ my $query = qq|SELECT ${reference_date} + terms_netto FROM payment_terms WHERE id = ?|;
+ my ($duedate) = selectrow_query($self, $dbh, $query, $self->{payment_id});
$main::lxdebug->leave_sub();
+
+ return $duedate;
}
sub _get_contacts {