package AM;
+use Carp;
use Data::Dumper;
use SL::DBUtils;
+use strict;
+
sub get_account {
$main::lxdebug->enter_sub();
};
- $main::lxdebug->message(LXDebug::QUERY, "\$query=\n $query");
+ $main::lxdebug->message(LXDebug->QUERY(), "\$query=\n $query");
my $sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
foreach my $key (keys %$ref) {
$form->{"$key"} = $ref->{"$key"};
# get default accounts
$query = qq|SELECT inventory_accno_id, income_accno_id, expense_accno_id
FROM defaults|;
- $main::lxdebug->message(LXDebug::QUERY, "\$query=\n $query");
+ $main::lxdebug->message(LXDebug->QUERY(), "\$query=\n $query");
$sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- $ref = $sth->fetchrow_hashref(NAME_lc);
+ $ref = $sth->fetchrow_hashref("NAME_lc");
- map { $form->{$_} = $ref->{$_} } keys %ref;
+ map { $form->{$_} = $ref->{$_} } keys %{ $ref };
$sth->finish;
rate
FROM tax ORDER BY taxkey
};
- $main::lxdebug->message(LXDebug::QUERY, "\$query=\n $query");
+ $main::lxdebug->message(LXDebug->QUERY(), "\$query=\n $query");
$sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
$form->{TAXKEY} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{TAXKEY} }, $ref;
}
FROM chart
WHERE link = ?
ORDER BY accno|;
- $main::lxdebug->message(LXDebug::QUERY, "\$query=\n $query");
+ $main::lxdebug->message(LXDebug->QUERY(), "\$query=\n $query");
$sth = $dbh->prepare($query);
$sth->execute($form->{link}) || $form->dberror($query . " ($form->{link})");
$form->{NEWACCOUNT} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{NEWACCOUNT} }, $ref;
}
WHERE tk.chart_id = ?
ORDER BY startdate DESC
};
- $main::lxdebug->message(LXDebug::QUERY, "\$query=\n $query");
+ $main::lxdebug->message(LXDebug->QUERY(), "\$query=\n $query");
$sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
$form->{ACCOUNT_TAXKEYS} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{ACCOUNT_TAXKEYS} }, $ref;
}
# check if we have any transactions
$query = qq|SELECT a.trans_id FROM acc_trans a
WHERE a.chart_id = ?|;
- $main::lxdebug->message(LXDebug::QUERY, "\$query=\n $query");
+ $main::lxdebug->message(LXDebug->QUERY(), "\$query=\n $query");
$sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
if ($form->{new_chart_id}) {
$query = qq|SELECT current_date-valid_from FROM chart
WHERE id = ?|;
- $main::lxdebug->message(LXDebug::QUERY, "\$query=\n $query");
+ $main::lxdebug->message(LXDebug->QUERY(), "\$query=\n $query");
my ($count) = selectrow_query($form, $dbh, $query, $form->{id});
if ($count >=0) {
$form->{new_chart_valid} = 1;
$form->{id} = "";
}
+ if (!$form->{id} || $form->{id} eq "") {
+ $query = qq|SELECT nextval('id')|;
+ ($form->{"id"}) = selectrow_query($form, $dbh, $query);
+ $query = qq|INSERT INTO chart (id, accno) VALUES (?, ?)|;
+ do_query($form, $dbh, $query, $form->{"id"}, $form->{"accno"});
+ }
+
my @values;
if ($form->{id}) {
$form->{id},
);
- }
- elsif ($form->{id} && !$form->{new_chart_valid}) {
-
- $query = qq|
- UPDATE chart
- SET new_chart_id = ?,
- valid_from = ?
- WHERE id = ?
- |;
-
- @values = (
- conv_i($form->{new_chart_id}),
- conv_date($form->{valid_from}),
- $form->{id}
- );
- }
- else {
-
- $query = qq|
- INSERT INTO chart (
- accno,
- description,
- charttype,
- category,
- link,
- pos_bwa,
- pos_bilanz,
- pos_eur,
- new_chart_id,
- valid_from,
- datevautomatik )
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
- |;
-
- @values = (
- $form->{accno},
- $form->{description},
- $form->{charttype},
- $form->{category}, $form->{link},
- conv_i($form->{pos_bwa}),
- conv_i($form->{pos_bilanz}), conv_i($form->{pos_eur}),
- conv_i($form->{new_chart_id}),
- conv_date($form->{valid_from}),
- ($form->{datevautomatik} eq 'T') ? 'true':'false',
- );
-
}
do_query($form, $dbh, $query, @values);
# Loop control
# Check if the account already exists, else cancel
+
+ print(STDERR "Keine Taxkeys weil ID =: $form->{id}\n");
+
last READTAXKEYS if ( $form->{'id'} == 0);
# check if there is a startdate
next READTAXKEYS;
}
- # check if there is at least one relation to pos_ustva or tax_id
- if ( $form->{"taxkey_pos_ustva_$tk_count"} eq '' && $form->{"taxkey_tax_$tk_count"} == 0 ) {
- $tk_count++;
- next READTAXKEYS;
- }
-
# Add valid taxkeys into the array
push @taxkeys ,
{
FROM department d
ORDER BY 2|;
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
$form->{ALL} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{ALL} }, $ref;
}
my $sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
map { $form->{$_} = $ref->{$_} } keys %$ref;
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my ($query);
# connect to database
my $dbh = $form->dbconnect($myconfig);
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my ($query);
# connect to database
my $dbh = $form->dbconnect($myconfig);
FROM leads
ORDER BY 2|;
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- $form->{ALL};
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{ALL} }, $ref;
}
my $sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
map { $form->{$_} = $ref->{$_} } keys %$ref;
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my ($query);
# connect to database
my $dbh = $form->dbconnect($myconfig);
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my ($query);
# connect to database
my $dbh = $form->dbconnect($myconfig);
# connect to database
my $dbh = $form->dbconnect($myconfig);
- my $query = qq|SELECT id, description, discount, customernumberinit
+ my $query = qq|SELECT id, description, discount, customernumberinit, salesman
FROM business
ORDER BY 2|;
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- $form->{ALL};
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{ALL} }, $ref;
}
my $dbh = $form->dbconnect($myconfig);
my $query =
- qq|SELECT b.description, b.discount, b.customernumberinit
+ qq|SELECT b.description, b.discount, b.customernumberinit, b.salesman
FROM business b
WHERE b.id = ?|;
my $sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
map { $form->{$_} = $ref->{$_} } keys %$ref;
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my ($query);
# connect to database
my $dbh = $form->dbconnect($myconfig);
- my @values = ($form->{description}, $form->{discount},
- $form->{customernumberinit});
+ my @values = ($form->{description}, $form->{discount}, $form->{customernumberinit}, $form->{salesman} ? 't' : 'f');
# id is the old record
if ($form->{id}) {
$query = qq|UPDATE business SET
description = ?,
discount = ?,
- customernumberinit = ?
+ customernumberinit = ?,
+ salesman = ?
WHERE id = ?|;
push(@values, $form->{id});
} else {
$query = qq|INSERT INTO business
- (description, discount, customernumberinit)
- VALUES (?, ?, ?)|;
+ (description, discount, customernumberinit, salesman)
+ VALUES (?, ?, ?, ?)|;
}
do_query($form, $dbh, $query, @values);
# connect to database
my $dbh = $form->dbconnect($myconfig);
- $query = qq|DELETE FROM business
+ my $query = qq|DELETE FROM business
WHERE id = ?|;
do_query($form, $dbh, $query, $form->{id});
" output_numberformat, output_dateformat, output_longdates " .
"FROM language ORDER BY description";
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
my $ary = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push(@{ $ary }, $ref);
}
my $sth = $dbh->prepare($query);
$sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
map { $form->{$_} = $ref->{$_} } keys %$ref;
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my $query;
# connect to database
my $dbh = $form->dbconnect_noauto($myconfig);
foreach my $table (qw(translation_payment_terms units_language)) {
- my $query = qq|DELETE FROM $table WHERE language_id = ?|;
+ $query = qq|DELETE FROM $table WHERE language_id = ?|;
do_query($form, $dbh, $query, $form->{"id"});
}
FROM buchungsgruppen
ORDER BY sortkey|;
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
$form->{ALL} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{ALL} }, $ref;
}
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my $query;
# connect to database
my $dbh = $form->dbconnect($myconfig);
if ($form->{id}) {
- my $query =
+ $query =
qq|SELECT description, inventory_accno_id,
(SELECT accno FROM chart WHERE id = inventory_accno_id) AS inventory_accno,
income_accno_id_0,
my $sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
map { $form->{$_} = $ref->{$_} } keys %$ref;
$sth->finish;
- my $query =
+ $query =
qq|SELECT count(id) = 0 AS orphaned
FROM parts
WHERE buchungsgruppen_id = ?|;
my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
foreach my $key (split(/:/, $ref->{link})) {
if (!$form->{"std_inventory_accno_id"} && ($key eq "IC")) {
$form->{"std_inventory_accno_id"} = $ref->{"id"};
# connect to database
my $dbh = $form->dbconnect($myconfig);
- $query = qq|DELETE FROM buchungsgruppen WHERE id = ?|;
+ my $query = qq|DELETE FROM buchungsgruppen WHERE id = ?|;
do_query($form, $dbh, $query, $form->{id});
$dbh->disconnect;
my ($self, $myconfig, $form, $table) = @_;
# connect to database
- my $dbh = $form->dbconnect_noauto($myconfig);
+ my $dbh = $form->get_standard_dbh($myconfig);
my $query =
qq|SELECT
(SELECT sortkey FROM $table WHERE id = ?) AS sortkey1,
(SELECT sortkey FROM $table WHERE id = ?) AS sortkey2|;
- my @values = ($form->{"id1"}, $form->{"id2"});
+ my @values = ($form->{"id1"}, $form->{"id2"});
my @sortkeys = selectrow_query($form, $dbh, $query, @values);
- $main::lxdebug->dump(0, "v", \@values);
- $main::lxdebug->dump(0, "s", \@sortkeys);
-
- $query = qq|UPDATE $table SET sortkey = ? WHERE id = ?|;
- my $sth = $dbh->prepare($query);
- $sth->execute($sortkeys[1], $form->{"id1"}) ||
- $form->dberror($query . " ($sortkeys[1], $form->{id1})");
- $sth->execute($sortkeys[0], $form->{"id2"}) ||
- $form->dberror($query . " ($sortkeys[0], $form->{id2})");
- $sth->finish();
-
- $dbh->commit();
- $dbh->disconnect;
-
- $main::lxdebug->leave_sub();
-}
-
-sub printer {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form) = @_;
-
- # connect to database
- my $dbh = $form->dbconnect($myconfig);
-
- my $query = qq|SELECT id, printer_description, template_code, printer_command
- FROM printers
- ORDER BY 2|;
-
- $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
-
- $form->{"ALL"} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
- push @{ $form->{ALL} }, $ref;
- }
-
- $sth->finish;
- $dbh->disconnect;
-
- $main::lxdebug->leave_sub();
-}
-
-sub get_printer {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form) = @_;
-
- # connect to database
- my $dbh = $form->dbconnect($myconfig);
-
- my $query =
- qq|SELECT p.printer_description, p.template_code, p.printer_command
- FROM printers p
- WHERE p.id = ?|;
- my $sth = $dbh->prepare($query);
- $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
-
- my $ref = $sth->fetchrow_hashref(NAME_lc);
-
- map { $form->{$_} = $ref->{$_} } keys %$ref;
-
- $sth->finish;
-
- $dbh->disconnect;
-
- $main::lxdebug->leave_sub();
-}
-
-sub save_printer {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form) = @_;
-
- # connect to database
- my $dbh = $form->dbconnect($myconfig);
- my @values = ($form->{printer_description},
- $form->{template_code},
- $form->{printer_command});
+ $query = qq|UPDATE $table SET sortkey = ? WHERE id = ?|;
+ my $sth = prepare_query($form, $dbh, $query);
- # id is the old record
- if ($form->{id}) {
- $query = qq|UPDATE printers SET
- printer_description = ?, template_code = ?, printer_command = ?
- WHERE id = ?|;
- push(@values, $form->{id});
- } else {
- $query = qq|INSERT INTO printers
- (printer_description, template_code, printer_command)
- VALUES (?, ?, ?)|;
- }
- do_query($form, $dbh, $query, @values);
-
- $dbh->disconnect;
-
- $main::lxdebug->leave_sub();
-}
+ do_statement($form, $sth, $query, $sortkeys[1], $form->{"id1"});
+ do_statement($form, $sth, $query, $sortkeys[0], $form->{"id2"});
-sub delete_printer {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form) = @_;
-
- # connect to database
- my $dbh = $form->dbconnect($myconfig);
-
- $query = qq|DELETE FROM printers
- WHERE id = ?|;
- do_query($form, $dbh, $query, $form->{id});
+ $sth->finish();
- $dbh->disconnect;
+ $dbh->commit();
$main::lxdebug->leave_sub();
}
my $query = qq|SELECT * FROM payment_terms ORDER BY sortkey|;
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
$form->{ALL} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{ALL} }, $ref;
}
my $sth = $dbh->prepare($query);
$sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
map { $form->{$_} = $ref->{$_} } keys %$ref;
$sth->finish();
$sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})");
my %mapping;
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
$mapping{ $ref->{"language_id"} } = $ref
unless (defined($mapping{ $ref->{"language_id"} }));
}
$query = qq|UPDATE payment_terms SET
description = ?, description_long = ?,
- ranking = ?,
terms_netto = ?, terms_skonto = ?,
percent_skonto = ?
WHERE id = ?|;
my @values = ($form->{description}, $form->{description_long},
- $form->{ranking} * 1,
$form->{terms_netto} * 1, $form->{terms_skonto} * 1,
$form->{percent_skonto} * 1,
$form->{id});
return $error;
}
-sub save_preferences {
+sub save_defaults {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $form, $memberfile, $userspath, $webdav) = @_;
+ my $self = shift;
+ my %params = @_;
- map { ($form->{$_}) = split(/--/, $form->{$_}) }
- qw(inventory_accno income_accno expense_accno fxgain_accno fxloss_accno);
+ my $myconfig = \%main::myconfig;
+ my $form = $main::form;
- my @a;
- $form->{curr} =~ s/ //g;
- map { push(@a, uc pack "A3", $_) if $_ } split(/:/, $form->{curr});
- $form->{curr} = join ':', @a;
+ my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig);
- # connect to database
- my $dbh = $form->dbconnect_noauto($myconfig);
+ my %accnos;
+ map { ($accnos{$_}) = split(m/--/, $form->{$_}) } qw(inventory_accno income_accno expense_accno fxgain_accno fxloss_accno);
+
+ $form->{curr} =~ s/ //g;
+ my @currencies = grep { $_ ne '' } split m/:/, $form->{curr};
+ my $currency = join ':', @currencies;
# these defaults are database wide
- # user specific variables are in myconfig
- # save defaults
+
my $query =
- qq|UPDATE defaults SET | .
- qq|inventory_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
- qq|income_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
- qq|expense_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
- qq|fxgain_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
- qq|fxloss_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
- qq|invnumber = ?, | .
- qq|cnnumber = ?, | .
- qq|sonumber = ?, | .
- qq|ponumber = ?, | .
- qq|sqnumber = ?, | .
- qq|rfqnumber = ?, | .
- qq|customernumber = ?, | .
- qq|vendornumber = ?, | .
- qq|articlenumber = ?, | .
- qq|servicenumber = ?, | .
- qq|yearend = ?, | .
- qq|curr = ?, | .
- qq|businessnumber = ?|;
- my @values = ($form->{inventory_accno}, $form->{income_accno},
- $form->{expense_accno},
- $form->{fxgain_accno}, $form->{fxloss_accno},
- $form->{invnumber}, $form->{cnnumber},
- $form->{sonumber}, $form->{ponumber},
- $form->{sqnumber}, $form->{rfqnumber},
- $form->{customernumber}, $form->{vendornumber},
- $form->{articlenumber}, $form->{servicenumber},
- $form->{yearend}, $form->{curr},
- $form->{businessnumber});
+ qq|UPDATE defaults SET
+ inventory_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?),
+ income_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?),
+ expense_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?),
+ fxgain_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?),
+ fxloss_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?),
+ invnumber = ?,
+ cnnumber = ?,
+ sonumber = ?,
+ ponumber = ?,
+ sqnumber = ?,
+ rfqnumber = ?,
+ customernumber = ?,
+ vendornumber = ?,
+ articlenumber = ?,
+ servicenumber = ?,
+ sdonumber = ?,
+ pdonumber = ?,
+ yearend = ?,
+ curr = ?,
+ businessnumber = ?,
+ weightunit = ?|;
+ my @values = ($accnos{inventory_accno}, $accnos{income_accno}, $accnos{expense_accno},
+ $accnos{fxgain_accno}, $accnos{fxloss_accno},
+ $form->{invnumber}, $form->{cnnumber},
+ $form->{sonumber}, $form->{ponumber},
+ $form->{sqnumber}, $form->{rfqnumber},
+ $form->{customernumber}, $form->{vendornumber},
+ $form->{articlenumber}, $form->{servicenumber},
+ $form->{sdonumber}, $form->{pdonumber},
+ $form->{yearend}, $currency,
+ $form->{businessnumber}, $form->{weightunit});
do_query($form, $dbh, $query, @values);
+ $dbh->commit();
+
+ $main::lxdebug->leave_sub();
+}
+
+
+sub save_preferences {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form, $webdav) = @_;
+
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my ($currency, $businessnumber) = selectrow_query($form, $dbh, qq|SELECT curr, businessnumber FROM defaults|);
+
# update name
- $query = qq|UPDATE employee
- SET name = ?
- WHERE login = ?|;
+ my $query = qq|UPDATE employee SET name = ? WHERE login = ?|;
do_query($form, $dbh, $query, $form->{name}, $form->{login});
- my $rc = $dbh->commit;
- $dbh->disconnect;
+ my $rc = $dbh->commit();
# save first currency in myconfig
- $form->{currency} = substr($form->{curr}, 0, 3);
+ $currency =~ s/:.*//;
+ $form->{currency} = $currency;
- my $myconfig = new User "$memberfile", "$form->{login}";
+ $form->{businessnumber} = $businessnumber;
+
+ $myconfig = new User($form->{login});
foreach my $item (keys %$form) {
$myconfig->{$item} = $form->{$item};
}
- $myconfig->save_member($memberfile, $userspath);
-
- if ($webdav) {
- @webdavdirs =
- qw(angebote bestellungen rechnungen anfragen lieferantenbestellungen einkaufsrechnungen);
- foreach $directory (@webdavdirs) {
- $file = "webdav/" . $directory . "/webdav-user";
- if ($myconfig->{$directory}) {
- open(HTACCESS, "$file") or die "cannot open webdav-user $!\n";
- while (<HTACCESS>) {
- ($login, $password) = split(/:/, $_);
- if ($login ne $form->{login}) {
- $newfile .= $_;
- }
- }
- close(HTACCESS);
- open(HTACCESS, "> $file") or die "cannot open webdav-user $!\n";
- $newfile .= $myconfig->{login} . ":" . $myconfig->{password} . "\n";
- print(HTACCESS $newfile);
- close(HTACCESS);
- } else {
- $form->{$directory} = 0;
- open(HTACCESS, "$file") or die "cannot open webdav-user $!\n";
- while (<HTACCESS>) {
- ($login, $password) = split(/:/, $_);
- if ($login ne $form->{login}) {
- $newfile .= $_;
- }
- }
- close(HTACCESS);
- open(HTACCESS, "> $file") or die "cannot open webdav-user $!\n";
- print(HTACCESS $newfile);
- close(HTACCESS);
- }
- }
+ $myconfig->save_member($main::memberfile);
+
+ my $auth = $main::auth;
+
+ if ($auth->can_change_password()
+ && defined $form->{new_password}
+ && ($form->{new_password} ne '********')) {
+ $auth->change_password($form->{login}, $form->{new_password});
+
+ $form->{password} = $form->{new_password};
+ $auth->set_session_value('password', $form->{password});
+ $auth->create_or_refresh_session();
}
$main::lxdebug->leave_sub();
return $rc;
}
+sub get_defaults {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+ my %params = @_;
+
+ my $myconfig = \%main::myconfig;
+ my $form = $main::form;
+
+ my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig);
+
+ my $defaults = selectfirst_hashref_query($form, $dbh, qq|SELECT * FROM defaults|) || {};
+
+ $defaults->{weightunit} ||= 'kg';
+
+ $main::lxdebug->leave_sub();
+
+ return $defaults;
+}
+
sub defaultaccounts {
$main::lxdebug->enter_sub();
my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- $form->{defaults} = $sth->fetchrow_hashref(NAME_lc);
- $form->{defaults}{IC} = $form->{defaults}{inventory_accno_id};
- $form->{defaults}{IC_income} = $form->{defaults}{income_accno_id};
- $form->{defaults}{IC_expense} = $form->{defaults}{expense_accno_id};
- $form->{defaults}{FX_gain} = $form->{defaults}{fxgain_accno_id};
- $form->{defaults}{FX_loss} = $form->{defaults}{fxloss_accno_id};
+ $form->{defaults} = $sth->fetchrow_hashref("NAME_lc");
+ $form->{defaults}{IC} = $form->{defaults}{inventory_accno_id};
+ $form->{defaults}{IC_income} = $form->{defaults}{income_accno_id};
+ $form->{defaults}{IC_expense} = $form->{defaults}{expense_accno_id};
+ $form->{defaults}{FX_gain} = $form->{defaults}{fxgain_accno_id};
+ $form->{defaults}{FX_loss} = $form->{defaults}{fxloss_accno_id};
+
+ $form->{defaults}{weightunit} ||= 'kg';
$sth->finish;
$sth = $dbh->prepare($query);
$sth->execute || $self->dberror($query);
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
foreach my $key (split(/:/, $ref->{link})) {
if ($key =~ /IC/) {
- $nkey = $key;
+ my $nkey = $key;
if ($key =~ /cogs/) {
$nkey = "IC_expense";
}
$sth = $dbh->prepare($query);
$sth->execute || $self->dberror($query);
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
%{ $form->{IC}{FX_gain}{ $ref->{accno} } } = (
id => $ref->{id},
description => $ref->{description}
$sth = $dbh->prepare($query);
$sth->execute || $self->dberror($query);
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
%{ $form->{IC}{FX_loss}{ $ref->{accno} } } = (
id => $ref->{id},
description => $ref->{description}
$sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
$form->{taxrates}{ $ref->{accno} }{id} = $ref->{id};
$form->{taxrates}{ $ref->{accno} }{description} = $ref->{description};
$form->{taxrates}{ $ref->{accno} }{taxnumber} = $ref->{taxnumber}
sub retrieve_units {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $form, $type, $prefix) = @_;
+ my ($self, $myconfig, $form, $prefix) = @_;
- my $dbh = $form->dbconnect($myconfig);
+ my $dbh = $form->get_standard_dbh;
my $query = "SELECT *, base_unit AS original_base_unit FROM units";
- my @values;
- if ($type) {
- $query .= " WHERE (type = ?)";
- @values = ($type);
- }
- my $sth = $dbh->prepare($query);
- $sth->execute(@values) || $form->dberror($query . " (" . join(", ", @values) . ")");
+ my $sth = prepare_execute_query($form, $dbh, $query);
my $units = {};
while (my $ref = $sth->fetchrow_hashref()) {
$sth = $dbh->prepare($query_lang);
$sth->execute() || $form->dberror($query_lang);
my @languages;
- while ($ref = $sth->fetchrow_hashref()) {
+ while (my $ref = $sth->fetchrow_hashref()) {
push(@languages, $ref);
}
$sth->finish();
}
$sth->execute($unit->{"name"}) || $form->dberror($query_lang . " (" . $unit->{"name"} . ")");
- while ($ref = $sth->fetchrow_hashref()) {
+ while (my $ref = $sth->fetchrow_hashref()) {
map({ $unit->{"LANGUAGES"}->{$ref->{"template_code"}}->{$_} = $ref->{$_} } keys(%{$ref}));
}
}
- $sth->finish();
-
- $dbh->disconnect();
+ $sth->finish;
$main::lxdebug->leave_sub();
return $units;
}
+sub retrieve_all_units {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+
+ if (!$main::all_units) {
+ $main::all_units = $self->retrieve_units(\%main::myconfig, $main::form);
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return $main::all_units;
+}
+
+
sub translate_units {
$main::lxdebug->enter_sub();
$main::lxdebug->leave_sub();
}
+sub convertible_units {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+ my $units = shift;
+ my $filter_unit = shift;
+ my $not_smaller = shift;
+
+ my $conv_units = [];
+
+ $filter_unit = $units->{$filter_unit};
+
+ foreach my $name (sort { lc $a cmp lc $b } keys %{ $units }) {
+ my $unit = $units->{$name};
+
+ if (($unit->{base_unit} eq $filter_unit->{base_unit}) &&
+ (!$not_smaller || ($unit->{factor} >= $filter_unit->{factor}))) {
+ push @{$conv_units}, $unit;
+ }
+ }
+
+ my @sorted = sort { $b->{factor} <=> $a->{factor} } @{ $conv_units };
+
+ $main::lxdebug->leave_sub();
+
+ return \@sorted;
+}
+
+# if $a is translatable to $b, return the factor between them.
+# else return 1
+sub convert_unit {
+ $main::lxdebug->enter_sub(2);
+ my ($this, $a, $b, $all_units) = @_;
+
+ $main::lxdebug->leave_sub(2) and return 0 unless $a && $b;
+ $main::lxdebug->leave_sub(2) and return 0 unless $all_units->{$a} && $all_units->{$b};
+ $main::lxdebug->leave_sub(2) and return 0 unless $all_units->{$a}{base_unit} eq $all_units->{$b}{base_unit};
+ $main::lxdebug->leave_sub(2) and return $all_units->{$a}{factor} / $all_units->{$b}{factor};
+}
+
sub unit_select_data {
$main::lxdebug->enter_sub();
- my ($self, $units, $selected, $empty_entry) = @_;
+ my ($self, $units, $selected, $empty_entry, $convertible_into) = @_;
my $select = [];
}
foreach my $unit (sort({ $units->{$a}->{"sortkey"} <=> $units->{$b}->{"sortkey"} } keys(%{$units}))) {
- push(@{$select}, { "name" => $unit,
- "base_unit" => $units->{$unit}->{"base_unit"},
- "factor" => $units->{$unit}->{"factor"},
- "selected" => ($unit eq $selected) ? "selected" : "" });
+ if (!$convertible_into ||
+ ($units->{$convertible_into} &&
+ ($units->{$convertible_into}->{base_unit} eq $units->{$unit}->{base_unit}))) {
+ push @{$select}, { "name" => $unit,
+ "base_unit" => $units->{$unit}->{"base_unit"},
+ "factor" => $units->{$unit}->{"factor"},
+ "selected" => ($unit eq $selected) ? "selected" : "" };
+ }
}
$main::lxdebug->leave_sub();
return $select;
}
+sub sum_with_unit {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+
+ my $units = $self->retrieve_all_units();
+
+ my $sum = 0;
+ my $base_unit;
+
+ while (2 <= scalar(@_)) {
+ my $qty = shift(@_);
+ my $unit = $units->{shift(@_)};
+
+ croak "No unit defined with name $unit" if (!defined $unit);
+
+ if (!$base_unit) {
+ $base_unit = $unit->{base_unit};
+ } elsif ($base_unit ne $unit->{base_unit}) {
+ croak "Adding values with incompatible base units $base_unit/$unit->{base_unit}";
+ }
+
+ $sum += $qty * $unit->{factor};
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return wantarray ? ($sum, $base_unit) : $sum;
+}
+
sub add_unit {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $form, $name, $base_unit, $factor, $type, $languages) = @_;
+ my ($self, $myconfig, $form, $name, $base_unit, $factor, $languages) = @_;
my $dbh = $form->dbconnect_noauto($myconfig);
my $query = qq|SELECT COALESCE(MAX(sortkey), 0) + 1 FROM units|;
my ($sortkey) = selectrow_query($form, $dbh, $query);
- $query = "INSERT INTO units (name, base_unit, factor, type, sortkey) " .
- "VALUES (?, ?, ?, ?, ?)";
- do_query($form, $dbh, $query, $name, $base_unit, $factor, $type, $sortkey);
+ $query = "INSERT INTO units (name, base_unit, factor, sortkey) " .
+ "VALUES (?, ?, ?, ?)";
+ do_query($form, $dbh, $query, $name, $base_unit, $factor, $sortkey);
if ($languages) {
$query = "INSERT INTO units_language (unit, language_id, localized, localized_plural) VALUES (?, ?, ?, ?)";
sub save_units {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $form, $type, $units, $delete_units) = @_;
+ my ($self, $myconfig, $form, $units, $delete_units) = @_;
my $dbh = $form->dbconnect_noauto($myconfig);
sub swap_units {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $form, $dir, $name_1, $unit_type) = @_;
+ my ($self, $myconfig, $form, $dir, $name_1) = @_;
my $dbh = $form->dbconnect_noauto($myconfig);
$query =
qq|SELECT sortkey FROM units | .
- qq|WHERE sortkey | . ($dir eq "down" ? ">" : "<") . qq| ? AND type = ? | .
+ qq|WHERE sortkey | . ($dir eq "down" ? ">" : "<") . qq| ? | .
qq|ORDER BY sortkey | . ($dir eq "down" ? "ASC" : "DESC") . qq| LIMIT 1|;
- my ($sortkey_2) = selectrow_query($form, $dbh, $query, $sortkey_1, $unit_type);
+ my ($sortkey_2) = selectrow_query($form, $dbh, $query, $sortkey_1);
if (defined($sortkey_1)) {
$query = qq|SELECT name FROM units WHERE sortkey = ${sortkey_2}|;
t.taxkey,
t.taxdescription,
round(t.rate * 100, 2) AS rate,
- c.accno AS taxnumber,
- c.description AS account_description
+ (SELECT accno FROM chart WHERE id = chart_id) AS taxnumber,
+ (SELECT description FROM chart WHERE id = chart_id) AS account_description
FROM tax t
- JOIN chart c on (chart_id = c.id)
ORDER BY taxkey|;
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
$form->{TAX} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{TAX} }, $ref;
}
# get Accounts from chart
my $query = qq{ SELECT
id,
- accno || ' - ' || description AS _taxaccount
+ accno || ' - ' || description AS taxaccount
FROM chart
WHERE link LIKE '%_tax%'
ORDER BY accno
};
- $sth = $dbh->prepare($query);
+ my $sth = $dbh->prepare($query);
$sth->execute || $form->dberror($query);
$form->{ACCOUNTS} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{ACCOUNTS} }, $ref;
}
my $sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
- my $ref = $sth->fetchrow_hashref(NAME_lc);
+ my $ref = $sth->fetchrow_hashref("NAME_lc");
map { $form->{$_} = $ref->{$_} } keys %$ref;
# see if it is used by a taxkey
$query = qq|SELECT count(*) FROM taxkeys
- WHERE tax_id = ?|;
+ WHERE tax_id = ? AND chart_id >0|;
($form->{orphaned}) = selectrow_query($form, $dbh, $query, $form->{id});
if (!$form->{orphaned} ) {
$query = qq|SELECT DISTINCT c.id, c.accno
FROM taxkeys tk
- LEFT JOIN tax t ON (t.id = tk.tax_id)
- LEFT JOIN chart c ON (c.id = tk.chart_id)
+ JOIN tax t ON (t.id = tk.tax_id)
+ JOIN chart c ON (c.id = tk.chart_id)
WHERE tk.tax_id = ?|;
$sth = $dbh->prepare($query);
$sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
$form->{TAXINUSE} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
push @{ $form->{TAXINUSE} }, $ref;
}
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my $query;
# connect to database
my $dbh = $form->get_standard_dbh($myconfig);
$form->{rate} = $form->{rate} / 100;
my @values = ($form->{taxkey}, $form->{taxdescription}, $form->{rate}, $form->{chart_id}, $form->{chart_id} );
- if ($form->{id}) {
+ if ($form->{id} ne "") {
$query = qq|UPDATE tax SET
taxkey = ?,
taxdescription = ?,
$main::lxdebug->enter_sub();
my ($self, $myconfig, $form) = @_;
+ my $query;
# connect to database
my $dbh = $form->get_standard_dbh($myconfig);
$main::lxdebug->leave_sub();
}
+sub save_price_factor {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my $query;
+ my @values = ($form->{description}, conv_i($form->{factor}));
+
+ if ($form->{id}) {
+ $query = qq|UPDATE price_factors SET description = ?, factor = ? WHERE id = ?|;
+ push @values, conv_i($form->{id});
+
+ } else {
+ $query = qq|INSERT INTO price_factors (description, factor, sortkey) VALUES (?, ?, (SELECT COALESCE(MAX(sortkey), 0) + 1 FROM price_factors))|;
+ }
+
+ do_query($form, $dbh, $query, @values);
+
+ $dbh->commit();
+
+ $main::lxdebug->leave_sub();
+}
+
+sub get_all_price_factors {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ $form->{PRICE_FACTORS} = selectall_hashref_query($form, $dbh, qq|SELECT * FROM price_factors ORDER BY sortkey|);
+
+ $main::lxdebug->leave_sub();
+}
+
+sub get_price_factor {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my $query = qq|SELECT description, factor,
+ ((SELECT COUNT(*) FROM parts WHERE price_factor_id = ?) +
+ (SELECT COUNT(*) FROM invoice WHERE price_factor_id = ?) +
+ (SELECT COUNT(*) FROM orderitems WHERE price_factor_id = ?)) = 0 AS orphaned
+ FROM price_factors WHERE id = ?|;
+
+ ($form->{description}, $form->{factor}, $form->{orphaned}) = selectrow_query($form, $dbh, $query, (conv_i($form->{id})) x 4);
+
+ $main::lxdebug->leave_sub();
+}
+
+sub delete_price_factor {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ do_query($form, $dbh, qq|DELETE FROM price_factors WHERE id = ?|, conv_i($form->{id}));
+ $dbh->commit();
+
+ $main::lxdebug->leave_sub();
+}
+
+sub save_warehouse {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my ($query, @values, $sth);
+
+ if (!$form->{id}) {
+ $query = qq|SELECT nextval('id')|;
+ ($form->{id}) = selectrow_query($form, $dbh, $query);
+
+ $query = qq|INSERT INTO warehouse (id, sortkey) VALUES (?, (SELECT COALESCE(MAX(sortkey), 0) + 1 FROM warehouse))|;
+ do_query($form, $dbh, $query, $form->{id});
+ }
+
+ do_query($form, $dbh, qq|UPDATE warehouse SET description = ?, invalid = ? WHERE id = ?|,
+ $form->{description}, $form->{invalid} ? 't' : 'f', conv_i($form->{id}));
+
+ if (0 < $form->{number_of_new_bins}) {
+ $query = qq|INSERT INTO bin (warehouse_id, description) VALUES (?, ?)|;
+ $sth = prepare_query($form, $dbh, $query);
+
+ foreach my $i (1..$form->{number_of_new_bins}) {
+ do_statement($form, $sth, $query, conv_i($form->{id}), "$form->{prefix}${i}");
+ }
+
+ $sth->finish();
+ }
+
+ $dbh->commit();
+
+ $main::lxdebug->leave_sub();
+}
+
+sub save_bins {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my ($query, @values, $commit_necessary, $sth);
+
+ @values = map { $form->{"id_${_}"} } grep { $form->{"delete_${_}"} } (1..$form->{rowcount});
+
+ if (@values) {
+ $query = qq|DELETE FROM bin WHERE id IN (| . join(', ', ('?') x scalar(@values)) . qq|)|;
+ do_query($form, $dbh, $query, @values);
+
+ $commit_necessary = 1;
+ }
+
+ $query = qq|UPDATE bin SET description = ? WHERE id = ?|;
+ $sth = prepare_query($form, $dbh, $query);
+
+ foreach my $row (1..$form->{rowcount}) {
+ next if ($form->{"delete_${row}"});
+
+ do_statement($form, $sth, $query, $form->{"description_${row}"}, conv_i($form->{"id_${row}"}));
+
+ $commit_necessary = 1;
+ }
+
+ $sth->finish();
+
+ $dbh->commit() if ($commit_necessary);
+
+ $main::lxdebug->leave_sub();
+}
+
+sub delete_warehouse {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my $id = conv_i($form->{id});
+ my $query = qq|SELECT i.bin_id FROM inventory i WHERE i.bin_id IN (SELECT b.id FROM bin b WHERE b.warehouse_id = ?) LIMIT 1|;
+ my ($count) = selectrow_query($form, $dbh, $query, $id);
+
+ if ($count) {
+ $main::lxdebug->leave_sub();
+ return 0;
+ }
+
+ do_query($form, $dbh, qq|DELETE FROM bin WHERE warehouse_id = ?|, conv_i($form->{id}));
+ do_query($form, $dbh, qq|DELETE FROM warehouse WHERE id = ?|, conv_i($form->{id}));
+
+ $dbh->commit();
+
+ $main::lxdebug->leave_sub();
+
+ return 1;
+}
+
+sub get_all_warehouses {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my $query = qq|SELECT w.id, w.description, w.invalid,
+ (SELECT COUNT(b.description) FROM bin b WHERE b.warehouse_id = w.id) AS number_of_bins
+ FROM warehouse w
+ ORDER BY w.sortkey|;
+
+ $form->{WAREHOUSES} = selectall_hashref_query($form, $dbh, $query);
+ $main::lxdebug->leave_sub();
+}
+
+sub get_warehouse {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ my $id = conv_i($form->{id});
+ my $query = qq|SELECT w.description, w.invalid
+ FROM warehouse w
+ WHERE w.id = ?|;
+
+ my $ref = selectfirst_hashref_query($form, $dbh, $query, $id);
+
+ map { $form->{$_} = $ref->{$_} } keys %{ $ref };
+
+ $query = qq|SELECT b.*, EXISTS
+ (SELECT i.warehouse_id
+ FROM inventory i
+ WHERE i.bin_id = b.id
+ LIMIT 1)
+ AS in_use
+ FROM bin b
+ WHERE b.warehouse_id = ?|;
+
+ $form->{BINS} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id}));
+
+ $main::lxdebug->leave_sub();
+}
1;