-#=====================================================================
+#====================================================================
# LX-Office ERP
# Copyright (C) 2004
# Based on SQL-Ledger Version 2.1.9
$jsscript = qq|
<style type="text/css">\@import url(js/jscalendar/calendar-win2k-1.css);</style>
<script type="text/javascript" src="js/jscalendar/calendar.js"></script>
- <script type="text/javascript" src="js/jscalendar/lang/calendar-de.js"></script>
- <script type="text/javascript" src="js/jscalendar/calendar-setup.js"></script>
+ <script type="text/javascript" src="js/jscalendar/lang/calendar-de.js"></script>
+ <script type="text/javascript" src="js/jscalendar/calendar-setup.js"></script>
$self->{javascript}
|;
}
$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|
$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);
$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 =~ /-/) {
$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);
}
$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;
+
}
}
s/<%(.+?)%>/$self->{$1}/g;
+ s/<nobr><\/nobr>/ /g;
print OUT;
}
next unless ($self->{$field} =~ /\<pagebreak\>/);
$self->{$field} =~ s/\<pagebreak\>//g;
if ($field =~ /.*_(\d+)$/) {
- if ($self->{"_forced_pagebreaks"}) {
+ if (!$self->{"_forced_pagebreaks"}) {
$self->{"_forced_pagebreaks"} = [];
}
push(@{ $self->{"_forced_pagebreaks"} }, "$1");
'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} =~
$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'
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);
$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;
}
$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);
}
+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) = @_;
$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 {