+ $main::lxdebug->leave_sub();
+}
+
+sub save_printer {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+ my $query;
+
+ # connect to database
+ my $dbh = $form->dbconnect($myconfig);
+
+ my @values = ($form->{printer_description},
+ $form->{template_code},
+ $form->{printer_command});
+
+ # 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();
+}
+
+sub delete_printer {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->dbconnect($myconfig);
+
+ my $query = qq|DELETE FROM printers
+ WHERE id = ?|;
+ do_query($form, $dbh, $query, $form->{id});
+
+ $dbh->disconnect;
+
+ $main::lxdebug->leave_sub();
+}
+
+sub payment {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->dbconnect($myconfig);
+
+ my $query = qq|SELECT * FROM payment_terms ORDER BY sortkey|;
+
+ my $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_payment {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->dbconnect($myconfig);
+
+ my $query = qq|SELECT * FROM payment_terms WHERE 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();
+
+ $query =
+ qq|SELECT t.language_id, t.description_long, l.description AS language | .
+ qq|FROM translation_payment_terms t | .
+ qq|LEFT JOIN language l ON t.language_id = l.id | .
+ qq|WHERE t.payment_terms_id = ? | .
+ qq|UNION | .
+ qq|SELECT l.id AS language_id, NULL AS description_long, | .
+ qq| l.description AS language | .
+ qq|FROM language l|;
+ $sth = $dbh->prepare($query);
+ $sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})");
+
+ my %mapping;
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
+ $mapping{ $ref->{"language_id"} } = $ref
+ unless (defined($mapping{ $ref->{"language_id"} }));
+ }
+ $sth->finish;
+
+ $form->{"TRANSLATION"} = [sort({ $a->{"language"} cmp $b->{"language"} }
+ values(%mapping))];
+
+ $dbh->disconnect;
+
+ $main::lxdebug->leave_sub();
+}
+
+sub save_payment {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->dbconnect_noauto($myconfig);
+
+ my $query;
+
+ if (!$form->{id}) {
+ $query = qq|SELECT nextval('id'), COALESCE(MAX(sortkey) + 1, 1) | .
+ qq|FROM payment_terms|;
+ my $sortkey;
+ ($form->{id}, $sortkey) = selectrow_query($form, $dbh, $query);
+
+ $query = qq|INSERT INTO payment_terms (id, sortkey) VALUES (?, ?)|;
+ do_query($form, $dbh, $query, $form->{id}, $sortkey);
+
+ } else {
+ $query =
+ qq|DELETE FROM translation_payment_terms | .
+ qq|WHERE payment_terms_id = ?|;
+ do_query($form, $dbh, $query, $form->{"id"});
+ }
+
+ $query = qq|UPDATE payment_terms SET
+ description = ?, description_long = ?,
+ terms_netto = ?, terms_skonto = ?,
+ percent_skonto = ?
+ WHERE id = ?|;
+ my @values = ($form->{description}, $form->{description_long},
+ $form->{terms_netto} * 1, $form->{terms_skonto} * 1,
+ $form->{percent_skonto} * 1,
+ $form->{id});
+ do_query($form, $dbh, $query, @values);
+
+ $query = qq|SELECT id FROM language|;
+ my @language_ids;
+ my $sth = $dbh->prepare($query);
+ $sth->execute() || $form->dberror($query);
+
+ while (my ($id) = $sth->fetchrow_array()) {
+ push(@language_ids, $id);
+ }
+ $sth->finish();
+
+ $query =
+ qq|INSERT INTO translation_payment_terms | .
+ qq|(language_id, payment_terms_id, description_long) | .
+ qq|VALUES (?, ?, ?)|;
+ $sth = $dbh->prepare($query);
+
+ foreach my $language_id (@language_ids) {
+ do_statement($form, $sth, $query, $language_id, $form->{"id"},
+ $form->{"description_long_${language_id}"});
+ }
+ $sth->finish();
+
+ $dbh->commit();
+ $dbh->disconnect;
+
+ $main::lxdebug->leave_sub();
+}
+
+sub delete_payment {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ # connect to database
+ my $dbh = $form->dbconnect_noauto($myconfig);
+
+ my $query =
+ qq|DELETE FROM translation_payment_terms WHERE payment_terms_id = ?|;
+ do_query($form, $dbh, $query, $form->{"id"});
+
+ $query = qq|DELETE FROM payment_terms WHERE id = ?|;
+ do_query($form, $dbh, $query, $form->{"id"});
+
+ $dbh->commit();
+ $dbh->disconnect;
+
+ $main::lxdebug->leave_sub();
+}
+
+
+sub prepare_template_filename {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ my ($filename, $display_filename);
+
+ if ($form->{type} eq "stylesheet") {
+ $filename = "css/$myconfig->{stylesheet}";
+ $display_filename = $myconfig->{stylesheet};
+
+ } else {
+ $filename = $form->{formname};
+
+ if ($form->{language}) {
+ my ($id, $template_code) = split(/--/, $form->{language});
+ $filename .= "_${template_code}";
+ }
+
+ if ($form->{printer}) {
+ my ($id, $template_code) = split(/--/, $form->{printer});
+ $filename .= "_${template_code}";
+ }
+
+ $filename .= "." . ($form->{format} eq "html" ? "html" : "tex");
+ $filename =~ s|.*/||;
+ $display_filename = $filename;
+ $filename = "$myconfig->{templates}/$filename";
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return ($filename, $display_filename);
+}
+
+
+sub load_template {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $filename) = @_;
+
+ my ($content, $lines) = ("", 0);
+
+ local *TEMPLATE;
+
+ if (open(TEMPLATE, $filename)) {
+ while (<TEMPLATE>) {
+ $content .= $_;
+ $lines++;
+ }
+ close(TEMPLATE);
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return ($content, $lines);
+}
+
+sub save_template {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $filename, $content) = @_;
+
+ local *TEMPLATE;
+
+ my $error = "";
+
+ if (open(TEMPLATE, ">$filename")) {
+ $content =~ s/\r\n/\n/g;
+ print(TEMPLATE $content);
+ close(TEMPLATE);
+ } else {
+ $error = $!;
+ }
+
+ $main::lxdebug->leave_sub();
+
+ return $error;
+}
+
+sub save_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 %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
+
+ my $query =
+ 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
+ my $query = qq|UPDATE employee SET name = ? WHERE login = ?|;
+ do_query($form, $dbh, $query, $form->{name}, $form->{login});
+
+ my $rc = $dbh->commit();
+
+ # save first currency in myconfig
+ $currency =~ s/:.*//;
+ $form->{currency} = $currency;
+
+ $form->{businessnumber} = $businessnumber;
+
+ $myconfig = new User($form->{login});