X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FForm.pm;h=c163532842950a2db75a5805e79a0a7de3c35e00;hb=e19b3820427e1f56c17cf541647a90d8d8f33ab4;hp=25886980a2b3137b7b2f1eb1c88a41c9ad05df9a;hpb=3aaf323a185bff9ff15d5384122b5600e969080f;p=kivitendo-erp.git diff --git a/SL/Form.pm b/SL/Form.pm index 25886980a..c16353284 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -1,4 +1,4 @@ -#===================================================================== +#==================================================================== # LX-Office ERP # Copyright (C) 2004 # Based on SQL-Ledger Version 2.1.9 @@ -382,8 +382,8 @@ function fokus(){document.$self->{fokus}.focus();} $jsscript = qq| + + $self->{javascript} |; } @@ -450,25 +450,25 @@ sub write_trigger { $trigger_1 = qq| Calendar.setup( -  { -    inputField  : "$inputField_1", -    ifFormat    :"$ifFormat", -    align    : "$align_1",      -    button      : "$button_1" -  } -  ); + { + inputField : "$inputField_1", + ifFormat :"$ifFormat", + align : "$align_1", + button : "$button_1" + } + ); |; if ($qty == 2) { $trigger_2 = qq| Calendar.setup( { -     inputField  : "$inputField_2", -     ifFormat    :"$ifFormat", -    align    : "$align_2",      -    button      : "$button_2" -  } -  ); + inputField : "$inputField_2", + ifFormat :"$ifFormat", + align : "$align_2", + button : "$button_2" + } + ); |; } $jsscript = qq| @@ -519,6 +519,12 @@ sub format_amount { $main::lxdebug->enter_sub(); my ($self, $myconfig, $amount, $places, $dash) = @_; + + #Workaround for $format_amount calls without $places + if (!defined $places){ + (my $dec) = ($amount =~ /\.(\d+)/); + $places = length $dec; + } if ($places =~ /\d/) { $amount = $self->round_amount($amount, $places); @@ -540,19 +546,19 @@ sub format_amount { $amount =~ s/\d{3,}?/$&,/g; $amount =~ s/,$//; $amount = join '', reverse split //, $amount; - $amount .= "\.$dec".$fillup; + $amount .= "\.$dec".$fillup if ($places ne '' && $places*1 != 0); } if ($myconfig->{numberformat} eq '1.000,00') { $amount =~ s/\d{3,}?/$&./g; $amount =~ s/\.$//; $amount = join '', reverse split //, $amount; - $amount .= ",$dec" .$fillup; + $amount .= ",$dec".$fillup if ($places ne '' && $places*1 != 0); } if ($myconfig->{numberformat} eq '1000,00') { $amount = "$whole"; - $amount .= ",$dec" .$fillup; + $amount .= ",$dec" .$fillup if ($places ne '' && $places*1 != 0); } if ($dash =~ /-/) { @@ -584,19 +590,44 @@ sub parse_amount { $main::lxdebug->enter_sub(); my ($self, $myconfig, $amount) = @_; - - if (!(substr($amount, -3, 1) eq ".")) { - if ( ($myconfig->{numberformat} eq '1.000,00') - || ($myconfig->{numberformat} eq '1000,00')) { - $amount =~ s/\.//g; - $amount =~ s/,/\./; - } - - $amount =~ s/,//g; - } - + $main::lxdebug->message(LXDebug::DEBUG2, "Start amount: $amount"); + + if ($myconfig->{in_numberformat} == 1){ + # Extra input number format 1000.00 or 1000,00 + $main::lxdebug->message(LXDebug::DEBUG2, "in_numberformat: " . $main::locale->text('1000,00 or 1000.00')); + $amount =~ s/,/\./g; + #$main::lxdebug->message(LXDebug::DEBUG2, "1.Parsed Number: $amount") if ($amount); + $amount = scalar reverse $amount; + #$main::lxdebug->message(LXDebug::DEBUG2, "2.Parsed Number: $amount") if ($amount); + $amount =~ s/\./DOT/; + #$main::lxdebug->message(LXDebug::DEBUG2, "3.Parsed Number: $amount") if ($amount); + $amount =~ s/\.//g; + #$main::lxdebug->message(LXDebug::DEBUG2, "4.Parsed Number: $amount") if ($amount); + $amount =~ s/DOT/\./; + #$main::lxdebug->message(LXDebug::DEBUG2, "5.Parsed Number:" . $amount) if ($amount); + $amount = scalar reverse $amount ; + $main::lxdebug->message(LXDebug::DEBUG2, "Parsed amount:" . $amount . "\n"); + + return ($amount * 1); + + } + $main::lxdebug->message(LXDebug::DEBUG2, "in_numberformat: " . $main::locale->text('equal Outputformat')); + $main::lxdebug->message(LXDebug::DEBUG2, " = numberformat: $myconfig->{numberformat}"); + if ( ($myconfig->{numberformat} eq '1.000,00') + || ($myconfig->{numberformat} eq '1000,00')) { + $amount =~ s/\.//g; + $amount =~ s/,/\./; + } + + if ($myconfig->{numberformat} eq "1'000.00") { + $amount =~ s/'//g; + } + + $amount =~ s/,//g; + + $main::lxdebug->message(LXDebug::DEBUG2, "Parsed amount:" . $amount. "\n") if ($amount); $main::lxdebug->leave_sub(); - + return ($amount * 1); } @@ -604,26 +635,21 @@ sub round_amount { $main::lxdebug->enter_sub(); my ($self, $amount, $places) = @_; - my $rc; + my $round_amount; - # $places = 3 if $places == 2; - - if (($places * 1) >= 0) { - - # add 1/10^$places+3 - $rc = - sprintf("%.${places}f", - $amount + (1 / (10**($places + 3))) * (($amount > 0) ? 1 : -1)); - } else { - $places *= -1; - $rc = - sprintf("%.f", $amount / (10**$places) + (($amount > 0) ? 0.1 : -0.1)) * - (10**$places); - } + # Rounding like "Kaufmannsrunden" + # Descr. http://de.wikipedia.org/wiki/Rundung + # Inspired by + # http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q4.13.html + # Solves Bug: 189 + # Udo Spallek + $amount = $amount * (10 ** ($places)); + $round_amount = int($amount + .5 * ($amount <=> 0))/(10**($places)); $main::lxdebug->leave_sub(); - return $rc; + return $round_amount; + } @@ -851,6 +877,7 @@ sub parse_template { } s/<%(.+?)%>/$self->{$1}/g; + s/<\/nobr>/ /g; print OUT; } @@ -1035,7 +1062,7 @@ sub format_string { next unless ($self->{$field} =~ /\/); $self->{$field} =~ s/\//g; if ($field =~ /.*_(\d+)$/) { - if ($self->{"_forced_pagebreaks"}) { + if (!$self->{"_forced_pagebreaks"}) { $self->{"_forced_pagebreaks"} = []; } push(@{ $self->{"_forced_pagebreaks"} }, "$1"); @@ -1105,9 +1132,6 @@ sub format_string { 'u' => 'underline'); foreach my $field (@fields) { - if ($field =~ /descrip/) { - print(STDERR "QFT: ${field}: " . $self->{$field} . "\n"); - } foreach my $key (keys(%markup_replace)) { my $new = $markup_replace{$key}; $self->{$field} =~ @@ -1285,6 +1309,11 @@ sub get_exchangerate { $main::lxdebug->enter_sub(); my ($self, $dbh, $curr, $transdate, $fld) = @_; + + unless ($transdate) { + $main::lxdebug->leave_sub(); + return ""; + } my $query = qq|SELECT e.$fld FROM exchangerate e WHERE e.curr = '$curr' @@ -1675,7 +1704,7 @@ sub create_links { LEFT Join tax t ON (a.taxkey = t.taxkey) WHERE a.trans_id = $self->{id} AND a.fx_transaction = '0' - ORDER BY a.transdate|; + ORDER BY a.oid,a.transdate|; $sth = $dbh->prepare($query); $sth->execute || $self->dberror($query); @@ -1685,12 +1714,17 @@ sub create_links { $self->{exchangerate} = $self->get_exchangerate($dbh, $self->{currency}, $self->{transdate}, $fld); + my $index=0; # store amounts in {acc_trans}{$key} for multiple accounts while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { $ref->{exchangerate} = $self->get_exchangerate($dbh, $self->{currency}, $ref->{transdate}, $fld); + if ( !($xkeyref{ $ref->{accno} } =~ /tax/)) { + $index++; + } + $ref->{index} = $index; push @{ $self->{acc_trans}{ $xkeyref{ $ref->{accno} } } }, $ref; } @@ -1768,10 +1802,9 @@ sub lastname_used { $where = "quotation = '1'"; } - my $query = qq|SELECT id FROM $arap - WHERE id IN (SELECT MAX(id) FROM $arap + my $query = qq|SELECT MAX(id) FROM $arap WHERE $where - AND ${table}_id > 0)|; + AND ${table}_id > 0|; my $sth = $dbh->prepare($query); $sth->execute || $self->dberror($query); @@ -2125,6 +2158,38 @@ sub get_partsgroup { } +sub get_pricegroup { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $p) = @_; + + my $dbh = $self->dbconnect($myconfig); + + my $query = qq|SELECT p.id, p.pricegroup + FROM pricegroup p|; + + $query .= qq| + ORDER BY pricegroup|; + + if ($p->{all}) { + $query = qq|SELECT id, pricegroup FROM pricegroup + ORDER BY pricegroup|; + } + + my $sth = $dbh->prepare($query); + $sth->execute || $self->dberror($query); + + $self->{all_pricegroup} = (); + while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { + push @{ $self->{all_pricegroup} }, $ref; + } + $sth->finish; + $dbh->disconnect; + + $main::lxdebug->leave_sub(); +} + + sub audittrail { my ($self, $dbh, $myconfig, $audittrail) = @_; @@ -2185,7 +2250,7 @@ sub audittrail { $query = qq|INSERT INTO audittrail (trans_id, tablename, reference, formname, action, employee_id, transdate) VALUES ( $audittrail->{id}, '$audittrail->{tablename}', | - .$dbh->quote($audittrail->{reference}).qq|', + .$dbh->quote($audittrail->{reference}).qq|, '$audittrail->{formname}', '$audittrail->{action}', $employee_id, '$audittrail->{transdate}')|; } else {