X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FAM.pm;h=fc7bb7378a3e3f88f93f5cb201d42de255fe85dd;hb=a7820e648c271e85f408353c1be009ad16a5b70c;hp=a3f7f7c27a04afed1c0235055f9651adfd37aa8a;hpb=08882e8ce50b1e317d313dac8f27d306dae4492d;p=kivitendo-erp.git diff --git a/SL/AM.pm b/SL/AM.pm index a3f7f7c27..fc7bb7378 100644 --- a/SL/AM.pm +++ b/SL/AM.pm @@ -851,7 +851,7 @@ sub delete_business { sub language { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ($self, $myconfig, $form, $return_list) = @_; # connect to database my $dbh = $form->dbconnect($myconfig); @@ -864,14 +864,22 @@ sub language { $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); + my $ary = []; + while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - push @{ $form->{ALL} }, $ref; + push(@{ $ary }, $ref); } $sth->finish; $dbh->disconnect; $main::lxdebug->leave_sub(); + + if ($return_list) { + return @{$ary}; + } else { + $form->{ALL} = $ary; + } } sub get_language { @@ -963,12 +971,17 @@ sub delete_language { my ($self, $myconfig, $form) = @_; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->dbconnect_noauto($myconfig); + + my $query = "DELETE FROM units_language WHERE language_id = ?"; + $dbh->do($query, undef, $form->{"id"}) || + $form->dberror($query . " ($form->{id})"); - my $query = "DELETE FROM language WHERE id = ?"; + $query = "DELETE FROM language WHERE id = ?"; $dbh->do($query, undef, $form->{"id"}) || $form->dberror($query . " ($form->{id})"); + $dbh->commit(); $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -1037,8 +1050,10 @@ sub get_buchungsgruppe { } - $query = "SELECT inventory_accno_id FROM defaults"; - ($form->{"std_inventory_accno_id"}) = $dbh->selectrow_array($query); + $query = "SELECT inventory_accno_id, income_accno_id, expense_accno_id ". + "FROM defaults"; + ($form->{"std_inventory_accno_id"}, $form->{"std_income_accno_id"}, + $form->{"std_expense_accno_id"}) = $dbh->selectrow_array($query); my $module = "IC"; $query = qq|SELECT c.accno, c.description, c.link, c.id, @@ -1151,6 +1166,7 @@ sub printer { $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); + $form->{"ALL"} = []; while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $form->{ALL} }, $ref; } @@ -1522,7 +1538,6 @@ sub save_preferences { servicenumber = '$form->{servicenumber}', yearend = '$form->{yearend}', curr = '$form->{curr}', - weightunit = '$form->{weightunit}', businessnumber = '$form->{businessnumber}' |; $dbh->do($query) || $form->dberror($query); @@ -2040,9 +2055,35 @@ sub retrieve_units { } $sth->finish(); - foreach my $unit (keys(%{$units})) { - ($units->{$unit}->{"${prefix}base_unit"}, $units->{$unit}->{"${prefix}factor"}) = AM->get_base_unit($units, $unit); + 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(); @@ -2051,6 +2092,28 @@ sub retrieve_units { 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(); @@ -2142,12 +2205,24 @@ sub unit_select_html { sub add_unit { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form, $name, $base_unit, $factor, $type) = @_; + my ($self, $myconfig, $form, $name, $base_unit, $factor, $type, $languages) = @_; - my $dbh = $form->dbconnect($myconfig); + 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(); @@ -2162,16 +2237,23 @@ sub save_units { 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 = ?"; - $sth = $dbh->prepare($query); - map({ $sth->execute($_) || $form->dberror($query . " ($_)"); } @{$delete_units}); - $sth->finish(); + $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; @@ -2182,6 +2264,14 @@ sub save_units { } 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"}); @@ -2189,6 +2279,7 @@ sub save_units { } $sth->finish(); + $sth_lang->finish(); $dbh->commit(); $dbh->disconnect();