foreach my $idx (0 .. scalar @{ $curr->{$key} } - 1) {
my $first_array_entry = 1;
- foreach my $hash_key (sort keys %{ $curr->{$key}->[$idx] }) {
- push @result, $self->_flatten_variables_rec($curr->{$key}->[$idx], $prefix . $key . ($first_array_entry ? '[+].' : '[].'), $hash_key);
- $first_array_entry = 0;
+ my $element = $curr->{$key}[$idx];
+
+ if ('HASH' eq ref $element) {
+ foreach my $hash_key (sort keys %{ $element }) {
+ push @result, $self->_flatten_variables_rec($element, $prefix . $key . ($first_array_entry ? '[+].' : '[].'), $hash_key);
+ $first_array_entry = 0;
+ }
+ } else {
+ @result = ({ 'key' => $prefix . $key . ($first_array_entry ? '[+]' : '[]'), 'value' => $element });
}
}
}
$ext_for_format = $self->{"format"} =~ m/pdf/ ? 'pdf' : 'odt';
} elsif ($self->{"format"} =~ /(postscript|pdf)/i) {
- $ENV{"TEXINPUTS"} = ".:" . getcwd() . "/" . $myconfig->{"templates"} . ":" . $ENV{"TEXINPUTS"};
$template_type = 'LaTeX';
$ext_for_format = 'pdf';
# Database routines used throughout
-sub _dbconnect_options {
- my $self = shift;
- my $options = { pg_enable_utf8 => $::locale->is_utf8,
- @_ };
-
- return $options;
-}
-
sub dbconnect {
$main::lxdebug->enter_sub(2);
my ($self, $myconfig) = @_;
# connect to database
- my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, $self->_dbconnect_options)
+ my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, SL::DBConnect->get_options)
or $self->dberror;
# set db options
my ($self, $myconfig) = @_;
# connect to database
- my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, $self->_dbconnect_options(AutoCommit => 0))
+ my $dbh = SL::DBConnect->connect($myconfig->{dbconnect}, $myconfig->{dbuser}, $myconfig->{dbpasswd}, SL::DBConnect->get_options(AutoCommit => 0))
or $self->dberror;
# set db options
$main::lxdebug->leave_sub();
return;
}
- $query = qq|SELECT curr FROM defaults|;
-
- my ($currency) = selectrow_query($self, $dbh, $query);
- my ($defaultcurrency) = split m/:/, $currency;
+ $query = qq|SELECT name AS curr FROM currencies WHERE id=(SELECT currency_id FROM defaults)|;
+ my ($defaultcurrency) = selectrow_query($self, $dbh, $query);
if ($curr eq $defaultcurrency) {
$main::lxdebug->leave_sub();
return;
}
- $query = qq|SELECT e.curr FROM exchangerate e
- WHERE e.curr = ? AND e.transdate = ?
+ $query = qq|SELECT e.currency_id FROM exchangerate e
+ WHERE e.currency_id = (SELECT cu.id FROM currencies cu WHERE cu.name=?) AND e.transdate = ?
FOR UPDATE|;
my $sth = prepare_execute_query($self, $dbh, $query, $curr, $transdate);
if ($sth->fetchrow_array) {
$query = qq|UPDATE exchangerate
SET $set
- WHERE curr = ?
+ WHERE currency_id = (SELECT id FROM currencies WHERE name = ?)
AND transdate = ?|;
} else {
- $query = qq|INSERT INTO exchangerate (curr, buy, sell, transdate)
- VALUES (?, $buy, $sell, ?)|;
+ $query = qq|INSERT INTO exchangerate (currency_id, buy, sell, transdate)
+ VALUES ((SELECT id FROM currencies WHERE name = ?), $buy, $sell, ?)|;
}
$sth->finish;
do_query($self, $dbh, $query, $curr, $transdate);
return 1;
}
- $query = qq|SELECT curr FROM defaults|;
+ $query = qq|SELECT name AS curr FROM currencies WHERE id = (SELECT currency_id FROM defaults)|;
- my ($currency) = selectrow_query($self, $dbh, $query);
- my ($defaultcurrency) = split m/:/, $currency;
+ my ($defaultcurrency) = selectrow_query($self, $dbh, $query);
- if ($currency eq $defaultcurrency) {
+ if ($curr eq $defaultcurrency) {
$main::lxdebug->leave_sub();
return 1;
}
$query = qq|SELECT e.$fld FROM exchangerate e
- WHERE e.curr = ? AND e.transdate = ?|;
+ WHERE e.currency_id = (SELECT id FROM currencies WHERE name = ?) AND e.transdate = ?|;
my ($exchangerate) = selectrow_query($self, $dbh, $query, $curr, $transdate);
my $dbh = $self->get_standard_dbh($myconfig);
my $query = qq|SELECT e.$fld FROM exchangerate e
- WHERE e.curr = ? AND e.transdate = ?|;
+ WHERE e.currency_id = (SELECT id FROM currencies WHERE name = ?) AND e.transdate = ?|;
my ($exchangerate) = selectrow_query($self, $dbh, $query, $currency, $transdate);
my $self = shift;
my $myconfig = shift || \%::myconfig;
my $dbh = $self->get_standard_dbh($myconfig);
+ my @currencies =();
- my $query = qq|SELECT curr FROM defaults|;
-
- my ($curr) = selectrow_query($self, $dbh, $query);
- my @currencies = grep { $_ } map { s/\s//g; $_ } split m/:/, $curr;
+ my $query = qq|SELECT name FROM currencies|;
+ my @currencies = map { $_->{name} } selectall_hashref_query($self, $dbh, $query);
$main::lxdebug->leave_sub();
$main::lxdebug->enter_sub();
my ($self, $myconfig) = @_;
- my @currencies = $self->get_all_currencies($myconfig);
+ my $dbh = $self->get_standard_dbh($myconfig);
+ my $query = qq|SELECT name AS curr FROM currencies WHERE id = (SELECT currency_id FROM defaults)|;
+
+ my ($defaultcurrency) = selectrow_query($self, $dbh, $query);
$main::lxdebug->leave_sub();
- return $currencies[0];
+ return $defaultcurrency;
}
sub set_payment_options {
my $where = @where ? ' WHERE ' . join(' AND ', map { "($_)" } @where) : '';
- my $query = qq|SELECT * FROM tax $where ORDER BY taxkey|;
+ my $query = qq|SELECT * FROM tax $where ORDER BY taxkey, rate|;
$self->{$key} = selectall_hashref_query($self, $dbh, $query);
$key = "all_currencies" unless ($key);
- my $query = qq|SELECT curr AS currency FROM defaults|;
-
- $self->{$key} = [split(/\:/ , selectfirst_hashref_query($self, $dbh, $query)->{currency})];
+ $self->{$key} = [$self->get_all_currencies()];
$main::lxdebug->leave_sub();
}
$query =
qq|SELECT
a.cp_id, a.invnumber, a.transdate, a.${table}_id, a.datepaid,
- a.duedate, a.ordnumber, a.taxincluded, a.curr AS currency, a.notes,
+ a.duedate, a.ordnumber, a.taxincluded, (SELECT cu.name FROM currencies cu WHERE cu.id=a.currency_id) AS currency, a.notes,
a.intnotes, a.department_id, a.amount AS oldinvtotal,
a.paid AS oldtotalpaid, a.employee_id, a.gldate, a.type,
a.globalproject_id, ${extra_columns}
$self->{$key} = $ref->{$key};
}
- # remove any trailing whitespace
- $self->{currency} =~ s/\s*$//;
-
my $transdate = "current_date";
if ($self->{transdate}) {
$transdate = $dbh->quote($self->{transdate});
}
$sth->finish;
+ #check das:
$query =
qq|SELECT
- d.curr AS currencies, d.closedto, d.revtrans,
+ d.closedto, d.revtrans,
+ (SELECT cu.name FROM currencies cu WHERE cu.id=d.currency_id) AS defaultcurrency,
(SELECT c.accno FROM chart c WHERE d.fxgain_accno_id = c.id) AS fxgain_accno,
(SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno
FROM defaults d|;
# get date
$query =
qq|SELECT
- current_date AS transdate, d.curr AS currencies, d.closedto, d.revtrans,
+ current_date AS transdate, d.closedto, d.revtrans,
+ (SELECT cu.name FROM currencies cu WHERE cu.id=d.currency_id) AS defaultcurrency,
(SELECT c.accno FROM chart c WHERE d.fxgain_accno_id = c.id) AS fxgain_accno,
(SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno
FROM defaults d|;
if ($self->{"$self->{vc}_id"}) {
# only setup currency
- ($self->{currency}) = split(/:/, $self->{currencies}) if !$self->{currency};
+ ($self->{currency}) = $self->{defaultcurrency} if !$self->{currency};
} else {
my ($arap, $where);
$table = $table eq "customer" ? "customer" : "vendor";
- my %column_map = ("a.curr" => "currency",
- "a.${table}_id" => "${table}_id",
+ my %column_map = ("a.${table}_id" => "${table}_id",
"a.department_id" => "department_id",
"d.description" => "department",
"ct.name" => $table,
- "ct.curr" => "cv_curr",
+ "cu.name" => "currency",
"current_date + ct.terms" => "duedate",
);
if ($self->{type} =~ /delivery_order/) {
$arap = 'delivery_orders';
- delete $column_map{"a.curr"};
- delete $column_map{"ct.curr"};
+ delete $column_map{"cu.currency"};
} elsif ($self->{type} =~ /_order/) {
$arap = 'oe';
FROM $arap a
LEFT JOIN $table ct ON (a.${table}_id = ct.id)
LEFT JOIN department d ON (a.department_id = d.id)
+ LEFT JOIN currencies cu ON (cu.id=ct.currency_id)
WHERE a.id = ?|;
my $ref = selectfirst_hashref_query($self, $dbh, $query, $trans_id);
map { $self->{$_} = $ref->{$_} } values %column_map;
- # remove any trailing whitespace
- $self->{currency} =~ s/\s*$// if $self->{currency};
- $self->{cv_curr} =~ s/\s*$// if $self->{cv_curr};
-
- # if customer/vendor currency is set use this
- $self->{currency} = $self->{cv_curr} if $self->{cv_curr};
-
$main::lxdebug->leave_sub();
}
IC->retrieve_accounts(\%::myconfig, $self, map { $_ => $self->{"id_$_"} } 1 .. $self->{rowcount});
if ($self->{type} =~ /_delivery_order$/) {
- DO->order_details();
+ DO->order_details(\%::myconfig, $self);
} elsif ($self->{type} =~ /sales_order|sales_quotation|request_quotation|purchase_order/) {
OE->order_details(\%::myconfig, $self);
} else {