- if ($form->{media} eq 'email') {
- @{ $mail->{attachments} } = ($tmpfile);
- $err = $mail->send($out);
- }
-
- if ($form->{media} eq 'file') {
-
- open(IN, "$tmpfile") or $form->error("$tmpfile : $!");
- open(OUT, ">-") or $form->error("STDOUT : $!");
-
- print OUT qq|Content-Type: application/x-tar-gzip;
-Content-Disposition: attachment; filename="$myconfig->{dbname}-$form->{dbversion}.sql.gz"
-
-|;
-
- while (<IN>) {
- print OUT $_;
- }
-
- close(IN);
- close(OUT);
-
- }
-
- unlink "$tmpfile";
-
- $main::lxdebug->leave_sub();
-}
-
-sub closedto {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form) = @_;
-
- my $dbh = $form->dbconnect($myconfig);
-
- my $query = qq|SELECT closedto, revtrans FROM defaults|;
- my $sth = $dbh->prepare($query);
- $sth->execute || $form->dberror($query);
-
- ($form->{closedto}, $form->{revtrans}) = $sth->fetchrow_array;
-
- $sth->finish;
-
- $dbh->disconnect;
-
- $main::lxdebug->leave_sub();
-}
-
-sub closebooks {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form) = @_;
-
- my $dbh = $form->dbconnect($myconfig);
-
- if ($form->{revtrans}) {
-
- $query = qq|UPDATE defaults SET closedto = NULL,
- revtrans = '1'|;
- } elsif ($form->{closedto}) {
-
- $query = qq|UPDATE defaults SET closedto = '$form->{closedto}',
- revtrans = '0'|;
- } else {
-
- $query = qq|UPDATE defaults SET closedto = NULL,
- revtrans = '0'|;
- }
-
- # set close in defaults
- $dbh->do($query) || $form->dberror($query);
-
- $dbh->disconnect;
-
- $main::lxdebug->leave_sub();
-}
-
-sub get_base_unit {
- my ($self, $units, $unit_name, $factor) = @_;
-
- $factor = 1 unless ($factor);
-
- my $unit = $units->{$unit_name};
-
- if (!defined($unit) || !$unit->{"base_unit"} ||
- ($unit_name eq $unit->{"base_unit"})) {
- return ($unit_name, $factor);
- }
-
- return AM->get_base_unit($units, $unit->{"base_unit"}, $factor * $unit->{"factor"});
-}
-
-sub retrieve_units {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form, $type, $prefix) = @_;
-
- my $dbh = $form->dbconnect($myconfig);
-
- 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 $units = {};
- while (my $ref = $sth->fetchrow_hashref()) {
- $units->{$ref->{"name"}} = $ref;
- }
- $sth->finish();
-
- my $query_lang = "SELECT id, template_code FROM language ORDER BY description";
- $sth = $dbh->prepare($query_lang);
- $sth->execute() || $form->dberror($query_lang);
- my @languages;
- while ($ref = $sth->fetchrow_hashref()) {
- push(@languages, $ref);
- }
- $sth->finish();
-
- $query_lang = "SELECT ul.localized, ul.localized_plural, l.id, l.template_code " .
- "FROM units_language ul " .
- "LEFT JOIN language l ON ul.language_id = l.id " .
- "WHERE ul.unit = ?";
- $sth = $dbh->prepare($query_lang);
-
- foreach my $unit (values(%{$units})) {
- ($unit->{"${prefix}base_unit"}, $unit->{"${prefix}factor"}) = AM->get_base_unit($units, $unit->{"name"});
-
- $unit->{"LANGUAGES"} = {};
- foreach my $lang (@languages) {
- $unit->{"LANGUAGES"}->{$lang->{"template_code"}} = { "template_code" => $lang->{"template_code"} };
- }
-
- $sth->execute($unit->{"name"}) || $form->dberror($query_lang . " (" . $unit->{"name"} . ")");
- while ($ref = $sth->fetchrow_hashref()) {
- map({ $unit->{"LANGUAGES"}->{$ref->{"template_code"}}->{$_} = $ref->{$_} } keys(%{$ref}));
- }
- }
- $sth->finish();
-
- $dbh->disconnect();
-
- $main::lxdebug->leave_sub();
-
- return $units;
-}
-
-sub translate_units {
- $main::lxdebug->enter_sub();
-
- my ($self, $form, $template_code, $unit, $amount) = @_;
-
- my $units = $self->retrieve_units(\%main::myconfig, $form);
-
- my $h = $units->{$unit}->{"LANGUAGES"}->{$template_code};
- my $new_unit = $unit;
- if ($h) {
- if (($amount != 1) && $h->{"localized_plural"}) {
- $new_unit = $h->{"localized_plural"};
- } elsif ($h->{"localized"}) {
- $new_unit = $h->{"localized"};
- }
- }
-
- $main::lxdebug->leave_sub();
-
- return $new_unit;
-}
-
-sub units_in_use {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form, $units) = @_;
-
- my $dbh = $form->dbconnect($myconfig);
-
- foreach my $unit (values(%{$units})) {
- my $base_unit = $unit->{"original_base_unit"};
- while ($base_unit) {
- $units->{$base_unit}->{"DEPENDING_UNITS"} = [] unless ($units->{$base_unit}->{"DEPENDING_UNITS"});
- push(@{$units->{$base_unit}->{"DEPENDING_UNITS"}}, $unit->{"name"});
- $base_unit = $units->{$base_unit}->{"original_base_unit"};
- }
- }
-
- foreach my $unit (values(%{$units})) {
- $unit->{"in_use"} = 0;
- map({ $_ = $dbh->quote($_); } @{$unit->{"DEPENDING_UNITS"}});
-
- foreach my $table (qw(parts invoice orderitems)) {
- my $query = "SELECT COUNT(*) FROM $table WHERE unit ";
-
- if (0 == scalar(@{$unit->{"DEPENDING_UNITS"}})) {
- $query .= "= " . $dbh->quote($unit->{"name"});
- } else {
- $query .= "IN (" . $dbh->quote($unit->{"name"}) . "," . join(",", @{$unit->{"DEPENDING_UNITS"}}) . ")";
- }
-
- my ($count) = $dbh->selectrow_array($query);
- $form->dberror($query) if ($dbh->err);
-
- if ($count) {
- $unit->{"in_use"} = 1;
- last;
- }
- }
- }
-
- $dbh->disconnect();
-
- $main::lxdebug->leave_sub();
-}
-
-sub unit_select_data {
- $main::lxdebug->enter_sub();
-
- my ($self, $units, $selected, $empty_entry) = @_;
-
- my $select = [];
-
- if ($empty_entry) {
- push(@{$select}, { "name" => "", "base_unit" => "", "factor" => "", "selected" => "" });
- }
-
- foreach my $unit (sort({ lc($a) cmp lc($b) } keys(%{$units}))) {
- 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 unit_select_html {
- $main::lxdebug->enter_sub();
-
- my ($self, $units, $name, $selected, $convertible_into) = @_;
-
- my $select = "<select name=${name}>";
-
- foreach my $unit (sort({ lc($a) cmp lc($b) } keys(%{$units}))) {
- if (!$convertible_into ||
- ($units->{$convertible_into} &&
- ($units->{$convertible_into}->{"base_unit"} eq $units->{$unit}->{"base_unit"}))) {
- $select .= "<option" . (($unit eq $selected) ? " selected" : "") . ">${unit}</option>";
- }
- }
- $select .= "</select>";
-
- $main::lxdebug->leave_sub();
-
- return $select;
-}
-
-sub add_unit {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form, $name, $base_unit, $factor, $type, $languages) = @_;
-
- my $dbh = $form->dbconnect_noauto($myconfig);
-
- my $query = "INSERT INTO units (name, base_unit, factor, type) VALUES (?, ?, ?, ?)";
- $dbh->do($query, undef, $name, $base_unit, $factor, $type) || $form->dberror($query . " ($name, $base_unit, $factor, $type)");
-
- if ($languages) {
- $query = "INSERT INTO units_language (unit, language_id, localized, localized_plural) VALUES (?, ?, ?, ?)";
- my $sth = $dbh->prepare($query);
- foreach my $lang (@{$languages}) {
- my @values = ($name, $lang->{"id"}, $lang->{"localized"}, $lang->{"localized_plural"});
- $sth->execute(@values) || $form->dberror($query . " (" . join(", ", @values) . ")");
- }
- $sth->finish();
- }
-
- $dbh->commit();
- $dbh->disconnect();
-
- $main::lxdebug->leave_sub();
-}
-
-sub save_units {
- $main::lxdebug->enter_sub();
-
- my ($self, $myconfig, $form, $type, $units, $delete_units) = @_;
-
- my $dbh = $form->dbconnect_noauto($myconfig);
-
- my ($base_unit, $unit, $sth, $query);
-
- $query = "DELETE FROM units_language";
- $dbh->do($query) || $form->dberror($query);
-
- if ($delete_units && (0 != scalar(@{$delete_units}))) {
- $query = "DELETE FROM units WHERE name IN (";
- map({ $query .= "?," } @{$delete_units});
- substr($query, -1, 1) = ")";
- $dbh->do($query, undef, @{$delete_units}) ||
- $form->dberror($query . " (" . join(", ", @{$delete_units}) . ")");
- }
-
- $query = "UPDATE units SET name = ?, base_unit = ?, factor = ? WHERE name = ?";
- $sth = $dbh->prepare($query);
-
- my $query_lang = "INSERT INTO units_language (unit, language_id, localized, localized_plural) VALUES (?, ?, ?, ?)";
- my $sth_lang = $dbh->prepare($query_lang);
-
- foreach $unit (values(%{$units})) {
- $unit->{"depth"} = 0;
- my $base_unit = $unit;
- while ($base_unit->{"base_unit"}) {
- $unit->{"depth"}++;
- $base_unit = $units->{$base_unit->{"base_unit"}};
- }
- }
-
- foreach $unit (sort({ $a->{"depth"} <=> $b->{"depth"} } values(%{$units}))) {
- if ($unit->{"LANGUAGES"}) {
- foreach my $lang (@{$unit->{"LANGUAGES"}}) {
- next unless ($lang->{"id"} && $lang->{"localized"});
- my @values = ($unit->{"name"}, $lang->{"id"}, $lang->{"localized"}, $lang->{"localized_plural"});
- $sth_lang->execute(@values) || $form->dberror($query_lang . " (" . join(", ", @values) . ")");
- }
- }
-
- next if ($unit->{"unchanged_unit"});
-
- my @values = ($unit->{"name"}, $unit->{"base_unit"}, $unit->{"factor"}, $unit->{"old_name"});
- $sth->execute(@values) || $form->dberror($query . " (" . join(", ", @values) . ")");
- }
-
- $sth->finish();
- $sth_lang->finish();
- $dbh->commit();
- $dbh->disconnect();