From: Moritz Bunkus Date: Fri, 19 Jan 2007 11:15:49 +0000 (+0000) Subject: Release 2.4.1 X-Git-Tag: release-2.4.1~1 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/3ddd61fa2af16ffa615dcab49e0e09141f80f31e?hp=ab4834b73a8f50d233037d5bc4cfe98074451cb8 Release 2.4.1 --- diff --git a/SL/AM.pm b/SL/AM.pm index 6249f54d6..ab8dc147a 100644 --- a/SL/AM.pm +++ b/SL/AM.pm @@ -851,26 +851,35 @@ 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); - my $query = qq|SELECT id, description, template_code, article_code - FROM language - ORDER BY 2|; + my $query = + "SELECT id, description, template_code, article_code, " . + " output_numberformat, output_dateformat, output_longdates " . + "FROM language ORDER BY description"; $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 { @@ -882,11 +891,11 @@ sub get_language { my $dbh = $form->dbconnect($myconfig); my $query = - qq|SELECT l.description, l.template_code, l.article_code - FROM language l - WHERE l.id = $form->{id}|; + "SELECT description, template_code, article_code, " . + " output_numberformat, output_dateformat, output_longdates " . + "FROM language WHERE id = ?"; my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})"); my $ref = $sth->fetchrow_hashref(NAME_lc); @@ -899,6 +908,26 @@ sub get_language { $main::lxdebug->leave_sub(); } +sub get_language_details { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form, $id) = @_; + + # connect to database + my $dbh = $form->dbconnect($myconfig); + + my $query = + "SELECT template_code, " . + " output_numberformat, output_dateformat, output_longdates " . + "FROM language WHERE id = ?"; + my @res = $dbh->selectrow_array($query, undef, $id); + $dbh->disconnect; + + $main::lxdebug->leave_sub(); + + return @res; +} + sub save_language { $main::lxdebug->enter_sub(); @@ -906,25 +935,30 @@ sub save_language { # connect to database my $dbh = $form->dbconnect($myconfig); + my (@values, $query); - $form->{description} =~ s/\'/\'\'/g; - $form->{article_code} =~ s/\'/\'\'/g; - $form->{template_code} =~ s/\'/\'\'/g; - + map({ push(@values, $form->{$_}); } + qw(description template_code article_code + output_numberformat output_dateformat output_longdates)); # id is the old record if ($form->{id}) { - $query = qq|UPDATE language SET - description = '$form->{description}', - template_code = '$form->{template_code}', - article_code = '$form->{article_code}' - WHERE id = $form->{id}|; + $query = + "UPDATE language SET " . + " description = ?, template_code = ?, article_code = ?, " . + " output_numberformat = ?, output_dateformat = ?, " . + " output_longdates = ? " . + "WHERE id = ?"; + push(@values, $form->{id}); } else { - $query = qq|INSERT INTO language - (description, template_code, article_code) - VALUES ('$form->{description}', '$form->{template_code}', '$form->{article_code}')|; + $query = + "INSERT INTO language (" . + " description, template_code, article_code, " . + " output_numberformat, output_dateformat, output_longdates" . + ") VALUES (?, ?, ?, ?, ?, ?)"; } - $dbh->do($query) || $form->dberror($query); + $dbh->do($query, undef, @values) || + $form->dberror($query . " (" . join(", ", @values) . ")"); $dbh->disconnect; @@ -937,12 +971,17 @@ sub delete_language { my ($self, $myconfig, $form) = @_; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = $form->dbconnect_noauto($myconfig); - $query = qq|DELETE FROM language - WHERE id = $form->{id}|; - $dbh->do($query) || $form->dberror($query); + my $query = "DELETE FROM units_language WHERE language_id = ?"; + $dbh->do($query, undef, $form->{"id"}) || + $form->dberror($query . " ($form->{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(); @@ -1011,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, @@ -1496,7 +1537,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); @@ -2014,9 +2054,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(); @@ -2025,6 +2091,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(); @@ -2116,12 +2204,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(); @@ -2136,16 +2236,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; @@ -2156,6 +2263,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"}); @@ -2163,6 +2278,7 @@ sub save_units { } $sth->finish(); + $sth_lang->finish(); $dbh->commit(); $dbh->disconnect(); diff --git a/SL/AP.pm b/SL/AP.pm index b0e044032..6925c20d1 100644 --- a/SL/AP.pm +++ b/SL/AP.pm @@ -470,5 +470,25 @@ sub ap_transactions { $main::lxdebug->leave_sub(); } +sub get_transdate { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form) = @_; + + # connect to database + my $dbh = $form->dbconnect($myconfig); + + my $query = + "SELECT COALESCE(" . + " (SELECT transdate FROM gl WHERE id = " . + " (SELECT MAX(id) FROM gl) LIMIT 1), " . + " current_date)"; + ($form->{transdate}) = $dbh->selectrow_array($query); + + $dbh->disconnect; + + $main::lxdebug->leave_sub(); +} + 1; diff --git a/SL/AR.pm b/SL/AR.pm index b4c0ae14d..5c588f37d 100644 --- a/SL/AR.pm +++ b/SL/AR.pm @@ -411,7 +411,7 @@ sub ar_transactions { my $query = qq|SELECT a.id, a.invnumber, a.ordnumber, a.transdate, a.duedate, a.netamount, a.amount, a.paid, c.name, a.invoice, a.datepaid, a.terms, a.notes, a.shipvia, - a.shippingpoint, + a.shippingpoint, a.storno, e.name AS employee FROM ar a JOIN customer c ON (a.customer_id = c.id) @@ -475,5 +475,25 @@ sub ar_transactions { $main::lxdebug->leave_sub(); } +sub get_transdate { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form) = @_; + + # connect to database + my $dbh = $form->dbconnect($myconfig); + + my $query = + "SELECT COALESCE(" . + " (SELECT transdate FROM gl WHERE id = " . + " (SELECT MAX(id) FROM gl) LIMIT 1), " . + " current_date)"; + ($form->{transdate}) = $dbh->selectrow_array($query); + + $dbh->disconnect; + + $main::lxdebug->leave_sub(); +} + 1; diff --git a/SL/CT.pm b/SL/CT.pm index f5729927e..3057391e3 100644 --- a/SL/CT.pm +++ b/SL/CT.pm @@ -37,7 +37,7 @@ package CT; use Data::Dumper; - +use SL::DBUtils; sub get_tuple { $main::lxdebug->enter_sub(); @@ -373,7 +373,6 @@ sub save_customer { $form->{obsolete} *= 1; $form->{business} *= 1; $form->{salesman_id} *= 1; - $form->{language_id} *= 1; $form->{payment_id} *= 1; $form->{taxzone_id} *= 1; $form->{creditlimit} = $form->parse_amount($myconfig, $form->{creditlimit}); @@ -472,7 +471,7 @@ sub save_customer { ustid = '$form->{ustid}', username = '$form->{username}', salesman_id = '$form->{salesman_id}', - language_id = '$form->{language_id}', + language_id = | . conv_i($form->{language_id}, "NULL") . qq|, payment_id = '$form->{payment_id}', taxzone_id = '$form->{taxzone_id}', user_password = | . $dbh->quote($form->{user_password}) . qq|, @@ -518,7 +517,6 @@ sub save_customer { $dbh->do($query) || $form->dberror($query); } } - print(STDERR "SHIPTO_ID $form->{shipto_id}\n"); # add shipto $form->add_shipto($dbh, $form->{id}, "CT"); @@ -553,7 +551,6 @@ sub save_vendor { $form->{obsolete} *= 1; $form->{business} *= 1; $form->{payment_id} *= 1; - $form->{language_id} *= 1; $form->{taxzone_id} *= 1; $form->{creditlimit} = $form->parse_amount($myconfig, $form->{creditlimit}); @@ -626,7 +623,7 @@ sub save_vendor { ustid = '$form->{ustid}', payment_id = '$form->{payment_id}', taxzone_id = '$form->{taxzone_id}', - language_id = '$form->{language_id}', + language_id = | . conv_i($form->{language_id}, "NULL") . qq|, username = '$form->{username}', user_password = '$form->{user_password}', v_customer_id = '$form->{v_customer_id}' diff --git a/SL/Common.pm b/SL/Common.pm index de1735ffe..33a6e2a6a 100644 --- a/SL/Common.pm +++ b/SL/Common.pm @@ -8,6 +8,17 @@ package Common; +use Time::HiRes qw(gettimeofday); + +sub unique_id { + my ($a, $b) = gettimeofday(); + return "${a}-${b}-${$}"; +} + +sub tmpname { + return "/tmp/lx-office-tmp-" . unique_id(); +} + sub retrieve_parts { $main::lxdebug->enter_sub(); diff --git a/SL/DATEV.pm b/SL/DATEV.pm index e0a0435eb..c83112fea 100644 --- a/SL/DATEV.pm +++ b/SL/DATEV.pm @@ -83,17 +83,17 @@ sub kne_export { $main::lxdebug->enter_sub(); my ($self, $myconfig, $form) = @_; - my $rc; + my @rc; if ($form->{exporttype} == 0) { - $rc = &kne_buchungsexport($myconfig, $form); + @rc = &kne_buchungsexport($myconfig, $form); } else { - $rc = &kne_stammdatenexport($myconfig, $form); + @rc = &kne_stammdatenexport($myconfig, $form); } $main::lxdebug->leave_sub(); - return $rc; + return @rc; } sub obe_export { @@ -391,7 +391,7 @@ sub make_kne_data_header { $to =~ s/ //g; if ($from ne "") { - my ($fday, $fmonth, $fyear) = split /\./, $from; + my ($fday, $fmonth, $fyear) = split(/\./, $from); if (length($fmonth) < 2) { $fmonth = "0" . $fmonth; } @@ -406,7 +406,7 @@ sub make_kne_data_header { $header .= $from; if ($to ne "") { - my ($tday, $tmonth, $tyear) = split /\./, $to; + my ($tday, $tmonth, $tyear) = split(/\./, $to); if (length($tmonth) < 2) { $tmonth = "0" . $tmonth; } @@ -470,7 +470,7 @@ sub datetofour { my ($date, $six) = @_; - ($day, $month, $year) = split /\./, $date; + ($day, $month, $year) = split(/\./, $date); if ($day =~ /^0/) { $day = substr($day, 1, 1); @@ -499,7 +499,7 @@ sub formatumsatz { my ($umsatz, $stellen) = @_; $umsatz =~ s/-//; - ($vorkomma, $nachkomma) = split /\./, $umsatz; + ($vorkomma, $nachkomma) = split(/\./, $umsatz); $umsatz = ""; if ($stellen > 0) { for ($i = $stellen; $i >= $stellen + 2 - length($vorkomma); $i--) { @@ -583,7 +583,9 @@ sub kne_buchungsexport { my ($myconfig, $form) = @_; - my $export_path = "datev/"; + my @filenames; + + my $export_path = $main::userspath . "/"; my $filename = "ED00000"; my $evfile = "EV01"; my @ed_versionsets; @@ -611,6 +613,7 @@ sub kne_buchungsexport { my $buchungssatz = ""; $filename++; my $ed_filename = $export_path . $filename; + push(@filenames, $filename); open(ED, "> $ed_filename") or die "can't open outputfile: $!\n"; $header = &make_kne_data_header($myconfig, $form, $fromto); $remaining_bytes -= length($header); @@ -822,6 +825,7 @@ sub kne_buchungsexport { #Make EV Verwaltungsdatei $ev_header = &make_ev_header($form, $fileno); $ev_filename = $export_path . $evfile; + push(@filenames, $evfile); open(EV, "> $ev_filename") or die "can't open outputfile: EV01\n"; print(EV $ev_header); @@ -829,11 +833,12 @@ sub kne_buchungsexport { print(EV $ed_versionset[$file]); } close(EV); - print qq|
Done.
- + print qq|
Done.
|; ### $main::lxdebug->leave_sub(); + + return @filenames; } sub kne_stammdatenexport { @@ -842,7 +847,15 @@ sub kne_stammdatenexport { my ($myconfig, $form) = @_; $form->{abrechnungsnr} = "99"; - my $export_path = "datev/"; + $form->header; + print qq| + + Export in Bearbeitung
+|; + + my @filenames; + + my $export_path = $main::userspath . "/"; my $filename = "ED00000"; my $evfile = "EV01"; my @ed_versionsets; @@ -854,6 +867,7 @@ sub kne_stammdatenexport { my $buchungssatz = ""; $filename++; my $ed_filename = $export_path . $filename; + push(@filenames, $filename); open(ED, "> $ed_filename") or die "can't open outputfile: $!\n"; $header = &make_kne_data_header($myconfig, $form, ""); $remaining_bytes -= length($header); @@ -911,6 +925,7 @@ sub kne_stammdatenexport { $ev_header = &make_ev_header($form, $fileno); $ev_filename = $export_path . $evfile; + push(@filenames, $evfile); open(EV, "> $ev_filename") or die "can't open outputfile: EV01\n"; print(EV $ev_header); @@ -922,7 +937,12 @@ sub kne_stammdatenexport { $dbh->disconnect; ### + print qq|
Done.
+|; + $main::lxdebug->leave_sub(); + + return @filenames; } 1; diff --git a/SL/DBUpgrade2.pm b/SL/DBUpgrade2.pm new file mode 100644 index 000000000..514448f6d --- /dev/null +++ b/SL/DBUpgrade2.pm @@ -0,0 +1,157 @@ +package SL::DBUpgrade2; + +require Exporter; +@ISA = qw(Exporter); + +@EXPORT = qw(parse_dbupdate_controls sort_dbupdate_controls); + +sub parse_dbupdate_controls { + $main::lxdebug->enter_sub(); + + my ($form, $dbdriver) = @_; + + my $locale = $main::locale; + + local *IN; + my %all_controls; + + my $path = "sql/${dbdriver}-upgrade2"; + + foreach my $file_name (<$path/*.sql>, <$path/*.pl>) { + next unless (open(IN, $file_name)); + + my $file = $file_name; + $file =~ s|.*/||; + + my $control = { + "priority" => 1000, + "depends" => [], + }; + + while () { + chomp(); + next unless (/^(--|\#)\s*\@/); + s/^(--|\#)\s*\@//; + s/\s*$//; + next if ($_ eq ""); + + my @fields = split(/\s*:\s*/, $_, 2); + next unless (scalar(@fields) == 2); + + if ($fields[0] eq "depends") { + push(@{$control->{"depends"}}, split(/\s+/, $fields[1])); + } else { + $control->{$fields[0]} = $fields[1]; + } + } + + _control_error($form, $file_name, + $locale->text("Missing 'tag' field.")) + unless ($control->{"tag"}); + + _control_error($form, $file_name, + $locale->text("The 'tag' field must only consist of " . + "alphanumeric characters or the carachters " . + "- _ ( )")) + if ($control->{"tag"} =~ /[^a-zA-Z0-9_\(\)\-]/); + + _control_error($form, $file_name, + sprintf($locale->text("More than one control file " . + "with the tag '%s' exist."), + $control->{"tag"})) + if (defined($all_controls{$control->{"tag"}})); + + _control_error($form, $file_name, + sprintf($locale->text("Missing 'description' field."))) + unless ($control->{"description"}); + + $control->{"priority"} *= 1; + $control->{"priority"} = 1000 unless ($control->{"priority"}); + + $control->{"file"} = $file; + + map({ delete($control->{$_}); } qw(depth applied)); + + $all_controls{$control->{"tag"}} = $control; + + close(IN); + } + + foreach my $control (values(%all_controls)) { + foreach my $dependency (@{$control->{"depends"}}) { + _control_error($form, $control->{"file"}, + sprintf($locale->text("Unknown dependency '%s'."), + $dependency)) + if (!defined($all_controls{$dependency})); + } + + map({ $_->{"loop"} = 0; } values(%all_controls)); + _check_for_loops($form, $control->{"file"}, \%all_controls, + $control->{"tag"}); + } + + map({ _dbupdate2_calculate_depth(\%all_controls, $_->{"tag"}) } + values(%all_controls)); + + $main::lxdebug->leave_sub(); + + return \%all_controls; +} + +sub _check_for_loops { + my ($form, $file_name, $controls, $tag, @path) = @_; + + push(@path, $tag); + + _control_error($form, $file_name, + $main::locale->text("Dependency loop detected:") . + " " . join(" -> ", @path)) + if ($controls->{$tag}->{"loop"}); + + $controls->{$tag}->{"loop"} = 1; + map({ _check_for_loops($form, $file_name, $controls, $_, @path); } + @{$controls->{$tag}->{"depends"}}); +} + +sub _control_error { + my ($form, $file_name, $message) = @_; + + my $form = $main::form; + my $locale = $main::locale; + + $form->error(sprintf($locale->text("Error in database control file '%s': %s"), + $file_name, $message)); +} + +sub _dbupdate2_calculate_depth { + $main::lxdebug->enter_sub(); + + my ($tree, $tag) = @_; + + my $node = $tree->{$tag}; + + return $main::lxdebug->leave_sub() if (defined($node->{"depth"})); + + my $max_depth = 0; + + foreach $tag (@{$node->{"depends"}}) { + _dbupdate2_calculate_depth($tree, $tag); + my $value = $tree->{$tag}->{"depth"}; + $max_depth = $value if ($value > $max_depth); + } + + $node->{"depth"} = $max_depth + 1; + + $main::lxdebug->leave_sub(); +} + +sub sort_dbupdate_controls { + return + sort({ $a->{"depth"} != $b->{"depth"} ? $a->{"depth"} <=> $b->{"depth"} : + $a->{"priority"} != $b->{"priority"} ? + $a->{"priority"} <=> $b->{"priority"} : + $a->{"tag"} cmp $b->{"tag"} } values(%{$_[0]})); +} + + +1; diff --git a/SL/Form.pm b/SL/Form.pm index ec41cc074..8b7612837 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -146,7 +146,7 @@ sub new { $self->{action} = lc $self->{action}; $self->{action} =~ s/( |-|,|\#)/_/g; - $self->{version} = "2.4.0"; + $self->{version} = "2.4.1"; $main::lxdebug->leave_sub(); @@ -349,7 +349,7 @@ sub isblank { sub header { $main::lxdebug->enter_sub(); - my ($self) = @_; + my ($self, $extra_code) = @_; if ($self->{header}) { $main::lxdebug->leave_sub(); @@ -366,6 +366,8 @@ sub header { |; } + $self->{favicon} = "favicon.ico" unless $self->{favicon}; + if ($self->{favicon} && (-f "$self->{favicon}")) { $favicon = qq| @@ -437,6 +439,7 @@ function fokus(){document.$self->{fokus}.focus();} + $extra_code |; @@ -773,7 +776,10 @@ sub parse_template { $self->{"notes"} = $self->{ $self->{"formname"} . "notes" }; map({ $self->{"employee_${_}"} = $myconfig->{$_}; } - qw(email tel fax name signature company address businessnumber)); + qw(email tel fax name signature company address businessnumber + co_ustid taxnumber duns)); + map({ $self->{"employee_${_}"} =~ s/\\n/\n/g; } + qw(company address signature)); $self->{copies} = 1 if (($self->{copies} *= 1) <= 0); @@ -799,9 +805,6 @@ sub parse_template { } close(OUT); - - use Data::Dumper; - #print(STDERR Dumper($self)); if ($template->uses_temp_file() || $self->{media} eq 'email') { @@ -836,7 +839,7 @@ sub parse_template { } else { - @{ $mail->{attachments} } = ($self->{tmpfile}) unless ($form->{do_not_attach}); + @{ $mail->{attachments} } = ($self->{tmpfile}) unless ($self->{do_not_attach}); $mail->{message} =~ s/\r\n/\n/g; $myconfig->{signature} =~ s/\\n/\n/g; @@ -865,10 +868,10 @@ sub parse_template { open(OUT, $self->{OUT}) or $self->error($self->cleanup . "$self->{OUT} : $!"); } else { - + $self->{attachment_filename} = $self->{tmpfile} if ($self->{attachment_filename} eq ''); # launch application print qq|Content-Type: | . $template->get_mime_type() . qq| -Content-Disposition: attachment; filename="$self->{tmpfile}" +Content-Disposition: attachment; filename="$self->{attachment_filename}" Content-Length: $numbytes |; @@ -1133,6 +1136,14 @@ sub set_payment_options { ($self->{terms_netto}, $self->{terms_skonto}, $self->{percent_skonto}, $self->{payment_terms}) = $sth->fetchrow_array; + if ($transdate eq "") { + if ($self->{invdate}) { + $transdate = $self->{invdate}; + } else { + $transdate = $self->{transdate}; + } + } + $sth->finish; my $query = qq|SELECT date '$transdate' + $self->{terms_netto} AS netto_date,date '$transdate' + $self->{terms_skonto} AS skonto_date FROM payment_terms LIMIT 1|; @@ -1141,11 +1152,20 @@ sub set_payment_options { ($self->{netto_date}, $self->{skonto_date}) = $sth->fetchrow_array; $sth->finish; - $self->{skonto_amount} = $self->format_amount($myconfig, ($self->parse_amount($myconfig, $self->{subtotal}) * $self->{percent_skonto}), 2); + my $total = ($self->{invtotal}) ? $self->{invtotal} : $self->{ordtotal}; + + $self->{skonto_amount} = $self->format_amount($myconfig, ($self->parse_amount($myconfig, $total) * $self->{percent_skonto}), 2); $self->{payment_terms} =~ s/<%netto_date%>/$self->{netto_date}/g; $self->{payment_terms} =~ s/<%skonto_date%>/$self->{skonto_date}/g; $self->{payment_terms} =~ s/<%skonto_amount%>/$self->{skonto_amount}/g; + $self->{payment_terms} =~ s/<%total%>/$self->{total}/g; + $self->{payment_terms} =~ s/<%invtotal%>/$self->{invtotal}/g; + $self->{payment_terms} =~ s/<%currency%>/$self->{currency}/g; + $self->{payment_terms} =~ s/<%terms_netto%>/$self->{terms_netto}/g; + $self->{payment_terms} =~ s/<%account_number%>/$self->{account_number}/g; + $self->{payment_terms} =~ s/<%bank%>/$self->{bank}/g; + $self->{payment_terms} =~ s/<%bank_code%>/$self->{bank_code}/g; $dbh->disconnect; } @@ -1252,7 +1272,7 @@ sub get_shipto { my $sth = $dbh->prepare($query); $sth->execute || $self->dberror($query); $ref = $sth->fetchrow_hashref(NAME_lc); - map { $form->{$_} = $ref->{$_} } keys %$ref; + map { $self->{$_} = $ref->{$_} } keys %$ref; $sth->finish; $dbh->disconnect; } @@ -1326,6 +1346,24 @@ sub get_employee { $main::lxdebug->leave_sub(); } +sub get_duedate { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig) = @_; + + my $dbh = $self->dbconnect($myconfig); + my $query = qq|SELECT current_date+terms_netto FROM payment_terms + WHERE id = '$self->{payment_id}'|; + my $sth = $dbh->prepare($query); + $sth->execute || $self->dberror($query); + + ($self->{duedate}) = $sth->fetchrow_array; + + $sth->finish; + + $main::lxdebug->leave_sub(); +} + # get other contact for transaction and form - html/tex sub get_contact { $main::lxdebug->enter_sub(); @@ -1507,7 +1545,7 @@ sub all_vc { FROM language ORDER BY 1|; $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); while ($ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $self->{languages} }, $ref; @@ -1519,7 +1557,7 @@ sub all_vc { FROM printers ORDER BY 1|; $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); while ($ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $self->{printers} }, $ref; @@ -1532,7 +1570,7 @@ sub all_vc { FROM payment_terms ORDER BY 1|; $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); while ($ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $self->{payment_terms} }, $ref; @@ -1558,7 +1596,7 @@ sub language_payment { FROM language ORDER BY 1|; my $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); while ($ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $self->{languages} }, $ref; @@ -1570,7 +1608,7 @@ sub language_payment { FROM printers ORDER BY 1|; $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); while ($ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $self->{printers} }, $ref; @@ -1582,7 +1620,7 @@ sub language_payment { FROM payment_terms ORDER BY 1|; $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); while ($ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $self->{payment_terms} }, $ref; @@ -1593,7 +1631,7 @@ sub language_payment { $query = qq|SELECT id, description FROM buchungsgruppen|; $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); $self->{BUCHUNGSGRUPPEN} = []; while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { @@ -1706,7 +1744,7 @@ sub create_links { $query = qq|SELECT id, description FROM tax_zones|; $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); + $sth->execute || $self->dberror($query); while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { @@ -2546,4 +2584,33 @@ sub parse_date { return ($yy, $mm, $dd); } +sub reformat_date { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $date, $output_format, $longformat) = @_; + + $main::lxdebug->leave_sub() and return "" unless ($date); + + my ($yy, $mm, $dd) = $self->parse_date($myconfig, $date); + + $output_format =~ /d+/; + substr($output_format, $-[0], $+[0] - $-[0]) = + sprintf("%0" . (length($&)) . "d", $dd); + + $output_format =~ /m+/; + substr($output_format, $-[0], $+[0] - $-[0]) = + sprintf("%0" . (length($&)) . "d", $mm); + + $output_format =~ /y+/; + if (length($&) == 2) { + $yy -= $yy >= 2000 ? 2000 : 1900; + } + substr($output_format, $-[0], $+[0] - $-[0]) = + sprintf("%0" . (length($&)) . "d", $yy); + + $main::lxdebug->leave_sub(); + + return $output_format; +} + 1; diff --git a/SL/GL.pm b/SL/GL.pm index 660c148ef..2b9a67a40 100644 --- a/SL/GL.pm +++ b/SL/GL.pm @@ -618,19 +618,19 @@ sub transaction { # retrieve individual rows $query = qq|SELECT c.accno, t.taxkey AS accnotaxkey, a.amount, a.memo, a.transdate, a.cleared, a.project_id, p.projectnumber,(SELECT p.projectnumber FROM project p - WHERE a.project_id = p.id) AS projectnumber, a.taxkey, t.rate AS taxrate, t.id, (SELECT c1.accno FROM chart c1, tax t1 WHERE t1.id=t.id AND c1.id=t.chart_id) AS taxaccno, t.id AS tax_id + WHERE a.project_id = p.id) AS projectnumber, a.taxkey, t.rate AS taxrate, t.id, (SELECT c1.accno FROM chart c1, tax t1 WHERE t1.id=t.id AND c1.id=t.chart_id) AS taxaccno, (SELECT tk.tax_id FROM taxkeys tk WHERE tk.chart_id =a.chart_id AND tk.startdate<=a.transdate ORDER BY tk.startdate desc LIMIT 1) AS tax_id FROM acc_trans a JOIN chart c ON (c.id = a.chart_id) LEFT JOIN project p ON (p.id = a.project_id) - LEFT JOIN tax t ON (t.id=(SELECT tk.tax_id from taxkeys tk WHERE (tk.taxkey_id=a.taxkey) AND ((CASE WHEN a.chart_id IN (SELECT chart_id FROM taxkeys WHERE taxkey_id=a.taxkey) THEN tk.chart_id=a.chart_id ELSE 1=1 END) OR (c.link='%tax%')) AND startdate <=a.transdate ORDER BY startdate DESC LIMIT 1)) + LEFT JOIN tax t ON (t.id=(SELECT tk.tax_id from taxkeys tk WHERE (tk.taxkey_id=a.taxkey) AND ((CASE WHEN a.chart_id IN (SELECT chart_id FROM taxkeys WHERE taxkey_id=a.taxkey) THEN tk.chart_id=a.chart_id ELSE 1=1 END) OR (c.link LIKE '%tax%')) AND startdate <=a.transdate ORDER BY startdate DESC LIMIT 1)) WHERE a.trans_id = $form->{id} AND a.fx_transaction = '0' ORDER BY a.oid,a.transdate|; - $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); + $form->{GL} = []; while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $form->{GL} }, $ref; } @@ -639,20 +639,21 @@ sub transaction { $query = qq| SELECT * FROM tax t order by t.taxkey|; $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); - $form->{TAX} = (); + $form->{TAX} = []; while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { push @{ $form->{TAX} }, $ref; } $sth->finish; } else { - $query = "SELECT current_date AS transdate, closedto, revtrans - FROM defaults"; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - ($form->{transdate}, $form->{closedto}, $form->{revtrans}) = - $sth->fetchrow_array; + $query = "SELECT closedto, revtrans FROM defaults"; + ($form->{closedto}, $form->{revtrans}) = $dbh->selectrow_array($query); + $query = + "SELECT COALESCE(" . + " (SELECT transdate FROM gl WHERE id = " . + " (SELECT MAX(id) FROM gl) LIMIT 1), " . + " current_date)"; + ($form->{transdate}) = $dbh->selectrow_array($query); # get tax description $query = qq| SELECT * FROM tax t order by t.taxkey|; diff --git a/SL/IC.pm b/SL/IC.pm index 6942c41c8..2bbf89a88 100644 --- a/SL/IC.pm +++ b/SL/IC.pm @@ -1519,22 +1519,12 @@ sub create_links { } $sth->finish; - if ($form->{id}) { - $query = qq|SELECT weightunit - FROM defaults|; - $sth = $dbh->prepare($query); - $sth->execute || $form->dberror($query); - - ($form->{weightunit}) = $sth->fetchrow_array; - $sth->finish; - - } else { - $query = qq|SELECT weightunit, current_date - FROM defaults|; + if (!$form->{id}) { + $query = qq|SELECT current_date FROM defaults|; $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); - ($form->{weightunit}, $form->{priceupdate}) = $sth->fetchrow_array; + ($form->{priceupdate}) = $sth->fetchrow_array; $sth->finish; } @@ -1783,6 +1773,8 @@ sub retrieve_accounts { } else { $transdate = $form->{deliverydate}; } + } elsif ($form->{type} eq "credit_note") { + $transdate = $form->{invdate}; } else { $transdate = $form->{transdate}; } @@ -1817,7 +1809,7 @@ sub retrieve_accounts { if (!$ref) { $dbh->disconnect(); - return $lxdebug->leave_sub(); + return $main::lxdebug->leave_sub(); } $ref->{"inventory_accno_id"} = undef unless ($ref->{"is_part"}); @@ -1852,7 +1844,10 @@ sub retrieve_accounts { $sth->finish(); $dbh->disconnect(); - return $main::lxdebug->leave_sub() unless ($ref); + unless ($ref) { + $main::lxdebug->leave_sub(); + return; + } $form->{"taxaccounts_$index"} = $ref->{"accno"}; if ($form->{"taxaccounts"} !~ /$ref->{accno}/) { @@ -1867,8 +1862,6 @@ sub retrieve_accounts { # " || taxaccounts_$index " . $form->{"taxaccounts_$index"} . # " || taxaccounts " . $form->{"taxaccounts"}); - $sth->finish(); - $main::lxdebug->leave_sub(); } 1; diff --git a/SL/IR.pm b/SL/IR.pm index 77df80603..a6f66659e 100644 --- a/SL/IR.pm +++ b/SL/IR.pm @@ -107,6 +107,10 @@ sub post_invoice { if ($form->{storno}) { $form->{"qty_$i"} *= -1; } + + if ($main::eur) { + $form->{"inventory_accno_$i"} = $form->{"expense_accno_$i"}; + } if ($form->{"qty_$i"} != 0) { @@ -1147,7 +1151,7 @@ sub retrieve_item { $form->{transdate} ? $dbh->quote($form->{transdate}) : "current_date"; } - my $query = qq|SELECT p.id, p.partnumber, p.description, p.sellprice, + my $query = qq|SELECT p.id, p.partnumber, p.description, p.lastcost AS sellprice, p.listprice, p.inventory_accno_id, c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from as inventory_valid, c2.accno AS income_accno, c2.new_chart_id AS income_new_chart, date($transdate) - c2.valid_from as income_valid, @@ -1218,7 +1222,7 @@ sub retrieve_item { sub vendor_details { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ($self, $myconfig, $form, @wanted_vars) = @_; # connect to database my $dbh = $form->dbconnect($myconfig); @@ -1245,6 +1249,13 @@ sub vendor_details { # remove id and taxincluded before copy back delete @$ref{qw(id taxincluded)}; + + if (scalar(@wanted_vars) > 0) { + my %h_wanted_vars; + map({ $h_wanted_vars{$_} = 1; } @wanted_vars); + map({ delete($ref->{$_}) unless ($h_wanted_vars{$_}); } keys(%{$ref})); + } + map { $form->{$_} = $ref->{$_} } keys %$ref; $sth->finish; diff --git a/SL/IS.pm b/SL/IS.pm index 7df695efb..cc8027b9a 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -391,7 +391,7 @@ sub project_description { sub customer_details { $main::lxdebug->enter_sub(); - my ($self, $myconfig, $form) = @_; + my ($self, $myconfig, $form, @wanted_vars) = @_; # connect to database my $dbh = $form->dbconnect($myconfig); @@ -416,6 +416,13 @@ sub customer_details { # remove id and taxincluded before copy back delete @$ref{qw(id taxincluded)}; + + if (scalar(@wanted_vars) > 0) { + my %h_wanted_vars; + map({ $h_wanted_vars{$_} = 1; } @wanted_vars); + map({ delete($ref->{$_}) unless ($h_wanted_vars{$_}); } keys(%{$ref})); + } + map { $form->{$_} = $ref->{$_} } keys %$ref; $sth->finish; @@ -672,7 +679,7 @@ sub post_invoice { $baseqty * -1) unless $form->{shipped}; - $allocated = &cogs($dbh, $form, $form->{"id_$i"}, $baseqty, $basefactor); + $allocated = &cogs($dbh, $form, $form->{"id_$i"}, $baseqty, $basefactor, $i); } } @@ -1239,14 +1246,17 @@ sub process_assembly { sub cogs { $main::lxdebug->enter_sub(); - my ($dbh, $form, $id, $totalqty, $basefactor) = @_; - + my ($dbh, $form, $id, $totalqty, $basefactor, $row) = @_; + $form->{taxzone_id} *=1; + my $transdate = ($form->{invdate}) ? "'$form->{invdate}'" : "current_date"; my $query = qq|SELECT i.id, i.trans_id, i.base_qty, i.allocated, i.sellprice, - (SELECT c.accno FROM chart c - WHERE p.inventory_accno_id = c.id) AS inventory_accno, - (SELECT c.accno FROM chart c - WHERE p.expense_accno_id = c.id) AS expense_accno + c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from as inventory_valid, + c2.accno AS income_accno, c2.new_chart_id AS income_new_chart, date($transdate) - c2.valid_from as income_valid, + c3.accno AS expense_accno, c3.new_chart_id AS expense_new_chart, date($transdate) - c3.valid_from as expense_valid FROM invoice i, parts p + LEFT JOIN chart c1 ON ((select inventory_accno_id from buchungsgruppen where id=p.buchungsgruppen_id) = c1.id) + LEFT JOIN chart c2 ON ((select income_accno_id_$form->{taxzone_id} from buchungsgruppen where id=p.buchungsgruppen_id) = c2.id) + LEFT JOIN chart c3 ON ((select expense_accno_id_$form->{taxzone_id} from buchungsgruppen where id=p.buchungsgruppen_id) = c3.id) WHERE i.parts_id = p.id AND i.parts_id = $id AND (i.base_qty + i.allocated) < 0 @@ -1269,12 +1279,12 @@ sub cogs { # sellprice is the cost of the item $linetotal = $form->round_amount(($ref->{sellprice} * $qty) / $basefactor, 2); - if (!$eur) { - + if (!$main::eur) { + $ref->{expense_accno} = ($form->{"expense_accno_$row"}) ? $form->{"expense_accno_$row"} : $ref->{expense_accno}; # add to expense $form->{amount}{ $form->{id} }{ $ref->{expense_accno} } += -$linetotal; $form->{expense_inventory} .= " " . $ref->{expense_accno}; - + $ref->{inventory_accno} = ($form->{"inventory_accno_$row"}) ? $form->{"inventory_accno_$row"} : $ref->{inventory_accno}; # deduct inventory $form->{amount}{ $form->{id} }{ $ref->{inventory_accno} } -= -$linetotal; $form->{expense_inventory} .= " " . $ref->{inventory_accno}; diff --git a/SL/Menu.pm b/SL/Menu.pm index 5da42e64a..b3ffd0f94 100644 --- a/SL/Menu.pm +++ b/SL/Menu.pm @@ -83,7 +83,7 @@ sub menuitem { # add other params foreach my $key (keys %{ $self->{$item} }) { $str .= "&" . $form->escape($key, 1) . "="; - ($value, $conf) = split /=/, $self->{$item}{$key}, 2; + ($value, $conf) = split(/=/, $self->{$item}{$key}, 2); $value = $myconfig->{$value} . "/$conf" if ($conf); $str .= $form->escape($value, 1); } @@ -99,6 +99,67 @@ sub menuitem { return $str; } +sub menuitem_v3 { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form, $item, $other) = @_; + + my $module = $form->{script}; + my $action = "section_menu"; + my $target = ""; + + if ($self->{$item}{module}) { + $module = $self->{$item}{module}; + } + if ($self->{$item}{action}) { + $action = $self->{$item}{action}; + } + if ($self->{$item}{target}) { + $target = $self->{$item}{target}; + } + + my $level = $form->escape($item); + + my $str = qq|escape($key, 1) . "="; + ($value, $conf) = split(/=/, $self->{$item}{$key}, 2); + $value = $myconfig->{$value} . "/$conf" if ($conf); + $str .= $form->escape($value, 1); + } + + $str .= '"'; + + if ($target) { + $str .= qq| target="| . $form->quote($target) . qq|"|; + } + + if ($other) { + foreach my $key (keys(%{$other})) { + $str .= qq| ${key}="| . $form->quote($other->{$key}) . qq|"|; + } + } + + $str .= ">"; + + $main::lxdebug->leave_sub(); + + return $str; +} + sub menuitemNew { my ($self, $myconfig, $form, $item) = @_; @@ -128,7 +189,7 @@ sub menuitemNew { # add other params foreach my $key (keys %{ $self->{$item} }) { $str .= "&" . $form->escape($key, 1) . "="; - ($value, $conf) = split /=/, $self->{$item}{$key}, 2; + ($value, $conf) = split(/=/, $self->{$item}{$key}, 2); $value = $myconfig->{$value} . "/$conf" if ($conf); $str .= $form->escape($value, 1); } @@ -150,7 +211,7 @@ sub access_control { @menu = grep { /^${menulevel}--/ } @{ $self->{ORDER} }; } - my @a = split /;/, $myconfig->{acs}; + my @a = split(/;/, $myconfig->{acs}); my $excl = (); # remove --AR, --AP from array diff --git a/SL/OE.pm b/SL/OE.pm index c5e36654d..e8127a27d 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -35,6 +35,7 @@ package OE; use SL::AM; +use SL::DBUtils; sub transactions { $main::lxdebug->enter_sub(); @@ -560,6 +561,21 @@ sub close_orders { $main::lxdebug->leave_sub(); } +sub close_order { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form) = @_; + + $main::lxdebug->leave_sub() unless ($form->{"id"}); + + my $dbh = $form->dbconnect($myconfig); + do_query($form, $dbh, qq|UPDATE oe SET closed = TRUE where ordnumber = ?|, + $form->{"id"}); + $dbh->disconnect; + + $main::lxdebug->leave_sub(); +} + sub delete { $main::lxdebug->enter_sub(); @@ -1005,7 +1021,9 @@ sub order_details { $sameitem = $item->[1]; map { push(@{ $form->{$_} }, "") } - qw(runningnumber number qty ship unit bin partnotes serialnumber reqdate sellprice listprice netprice discount linetotal); + qw(runningnumber number qty ship unit bin partnotes + serialnumber reqdate sellprice listprice netprice + discount p_discount linetotal); } $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); @@ -1165,7 +1183,9 @@ sub order_details { while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) { map { push(@{ $form->{$_} }, "") } - qw(runningnumber ship bin serialnumber number unit bin qty reqdate sellprice listprice netprice discount linetotal nodiscount_linetotal); + qw(runningnumber ship bin serialnumber number unit bin qty + reqdate sellprice listprice netprice discount p_discount + linetotal nodiscount_linetotal); $sameitem = ($ref->{partsgroup}) ? $ref->{partsgroup} : "--"; push(@{ $form->{description} }, $sameitem); } @@ -1176,7 +1196,9 @@ sub order_details { . qq|, $ref->{partnumber}, $ref->{description}|); map { push(@{ $form->{$_} }, "") } - qw(number unit qty runningnumber ship bin serialnumber reqdate sellprice listprice netprice discount linetotal nodiscount_linetotal); + qw(number unit qty runningnumber ship bin serialnumber reqdate + sellprice listprice netprice discount p_discount linetotal + nodiscount_linetotal); } $sth->finish; diff --git a/SL/Template.pm b/SL/Template.pm index 27ebb36a3..c7257e991 100644 --- a/SL/Template.pm +++ b/SL/Template.pm @@ -213,7 +213,9 @@ sub parse_foreach { $sum += $form->parse_amount($self->{"myconfig"}, $form->{"linetotal"}->[$i]); } - + + $form->{"cumulatelinetotal"}[$i] = $form->format_amount($self->{"myconfig"}, $sum, 2); + my $new_text = $self->parse_block($text, (@indices, $i)); return undef unless (defined($new_text)); $new_contents .= $start_tag . $new_text . $end_tag; @@ -1305,16 +1307,17 @@ sub format_string { sub get_mime_type() { my ($self) = @_; - if ($self->{"form"}->{"format"} =~ /xml/i) { + if ($self->{"form"}->{"format"} =~ /elsterwinston/i) { return "application/xml "; + } elsif ($self->{"form"}->{"format"} =~ /elstertaxbird/i) { + return "application/x-taxbird"; } else { - return "text/xml"; + return "text"; } } sub uses_temp_file { -# my ($self) = @_; - # no tempfile needet for XML Output + # tempfile needet for XML Output return 1; } diff --git a/SL/USTVA.pm b/SL/USTVA.pm index 505efb438..59e41b7b0 100644 --- a/SL/USTVA.pm +++ b/SL/USTVA.pm @@ -568,19 +568,19 @@ sub ustva { my $last_period = 0; my $category = "pos_ustva"; - my @categories_cent = qw(511 861 36 80 971 931 98 96 53 74 + my @category_cent = qw(511 861 36 80 971 931 98 96 53 74 85 65 66 61 62 67 63 64 59 69 39 83 Z43 Z45 Z53 Z62 Z65 Z67); - my @categories_euro = qw(41 44 49 43 48 51 86 35 77 76 91 97 93 + my @category_euro = qw(41 44 49 43 48 51 86 35 77 76 91 97 93 95 94 42 60 45 52 73 84); $form->{decimalplaces} *= 1; - foreach $item (@categories_cent) { + foreach $item (@category_cent) { $form->{"$item"} = 0; } - foreach $item (@categories_euro) { + foreach $item (@category_euro) { $form->{"$item"} = 0; } @@ -590,31 +590,23 @@ sub ustva { # # Berechnung der USTVA Formularfelder # + $form->{"51r"} = $form->{"511"}; $form->{"86r"} = $form->{"861"}; $form->{"97r"} = $form->{"971"}; $form->{"93r"} = $form->{"931"}; $form->{"Z43"} = - $form->{"511"} + $form->{"861"} + $form->{"36"} + $form->{"80"} + - $form->{"971"} + $form->{"931"} + $form->{"96"} + $form->{"98"}; + $form->{"511"} + $form->{"861"} + $form->{"36"} + $form->{"80"} + + $form->{"971"} + $form->{"931"} + $form->{"96"} + $form->{"98"}; $form->{"Z45"} = $form->{"Z43"}; $form->{"Z53"} = $form->{"Z43"}; $form->{"Z62"} = - $form->{"Z43"} - $form->{"66"} - $form->{"61"} - $form->{"62"} - - $form->{"63"} - $form->{"64"} - $form->{"59"}; + $form->{"Z43"} - $form->{"66"} - $form->{"61"} - $form->{"62"} - + $form->{"63"} - $form->{"64"} - $form->{"59"}; $form->{"Z65"} = $form->{"Z62"} - $form->{"69"}; $form->{"83"} = $form->{"Z65"} - $form->{"39"}; - - foreach $item (@categories_cent) { - $form->{$item} = - $form->format_amount($myconfig, $form->{$item}, '2', '0'); - } - - foreach $item (@categories_euro) { - $form->{$item} = - $form->format_amount($myconfig, $form->{$item}, '0', '0'); - } - + # Hier fehlen moeglicherweise noch einige Berechnungen! + $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -784,9 +776,7 @@ sub get_accounts_ustva { while ($ref = $sth->fetchrow_hashref(NAME_lc)) { # Bug 365 solved?! -# if ($ref->{amount} < 0) { - $ref->{amount} *= -1; -# } + $ref->{amount} *= -1; if ($category eq "pos_bwa") { if ($last_period) { $form->{ $ref->{$category} }{kumm} += $ref->{amount}; diff --git a/SL/User.pm b/SL/User.pm index f331ca4af..5217ef811 100644 --- a/SL/User.pm +++ b/SL/User.pm @@ -34,6 +34,8 @@ package User; +use SL::DBUpgrade2; + sub new { $main::lxdebug->enter_sub(); @@ -162,14 +164,21 @@ sub login { '$myconfig{tel}', 'user')|; $dbh->do($query); } + + $self->create_schema_info_table($form, $dbh); + $dbh->disconnect; $rc = 0; - if (&update_available($myconfig{"dbdriver"}, $dbversion)) { + my $controls = + parse_dbupdate_controls($form, $myconfig{"dbdriver"}); + + map({ $form->{$_} = $myconfig{$_} } + qw(dbname dbhost dbport dbdriver dbuser dbpasswd dbconnect)); - map { $form->{$_} = $myconfig{$_} } - qw(dbname dbhost dbport dbdriver dbuser dbpasswd dbconnect); + if (update_available($myconfig{"dbdriver"}, $dbversion) || + update2_available($form, $controls)) { $form->{"stylesheet"} = "lx-office-erp.css"; $form->{"title"} = $main::locale->text("Dataset upgrade"); @@ -185,8 +194,7 @@ sub login { } # update the tables - open FH, ">$userspath/nologin" or die " -$!"; + open(FH, ">$userspath/nologin") or die("$!"); # required for Oracle $form->{dbdefault} = $sid; @@ -196,11 +204,18 @@ $!"; $SIG{QUIT} = 'IGNORE'; $self->dbupdate($form); + $self->dbupdate2($form, $controls); # remove lock file - unlink "$userspath/nologin"; + unlink("$userspath/nologin"); - print($form->parse_html_template("dbupgrade/footer")); + my $menufile = + $self->{"menustyle"} eq "v3" ? "menuv3.pl" : + $self->{"menustyle"} eq "neu" ? "menunew.pl" : + "menu.pl"; + + print($form->parse_html_template("dbupgrade/footer", + { "menufile" => $menufile })); $rc = -2; @@ -346,20 +361,33 @@ sub dbcreate { my ($self, $form) = @_; + $form->{sid} = $form->{dbdefault}; + &dbconnect_vars($form, $form->{dbdefault}); + my $dbh = + DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) + or $form->dberror; + my %dbcreate = ( 'Pg' => qq|CREATE DATABASE "$form->{db}"|, 'Oracle' => qq|CREATE USER "$form->{db}" DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP IDENTIFIED BY "$form->{db}"| ); - $dbcreate{Pg} .= " WITH ENCODING = '$form->{encoding}'" if $form->{encoding}; + my %dboptions = ( + 'Pg' => [], + ); + + push(@{$dboptions{"Pg"}}, "ENCODING = " . $dbh->quote($form->{"encoding"})) + if ($form->{"encoding"}); + if ($form->{"dbdefault"}) { + my $dbdefault = $form->{"dbdefault"}; + $dbdefault =~ s/[^a-zA-Z0-9_\-]//g; + push(@{$dboptions{"Pg"}}, "TEMPLATE = $dbdefault"); + } - $form->{sid} = $form->{dbdefault}; - &dbconnect_vars($form, $form->{dbdefault}); - my $dbh = - DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) - or $form->dberror; my $query = qq|$dbcreate{$form->{dbdriver}}|; + $query .= " WITH " . join(" ", @{$dboptions{"Pg"}}) if (@{$dboptions{"Pg"}}); + $dbh->do($query) || $form->dberror($query); if ($form->{dbdriver} eq 'Oracle') { @@ -453,7 +481,7 @@ sub process_perl_script { sub process_query { $main::lxdebug->enter_sub(); - my ($self, $form, $dbh, $filename, $version) = @_; + my ($self, $form, $dbh, $filename, $version_or_control) = @_; # return unless (-f $filename); @@ -510,8 +538,13 @@ sub process_query { } } - if ($version) { - $dbh->do("UPDATE defaults SET version = " . $dbh->quote($version)); + if (ref($version_or_control) eq "HASH") { + $dbh->do("INSERT INTO schema_info (tag, login) VALUES (" . + $dbh->quote($version_or_control->{"tag"}) . ", " . + $dbh->quote($form->{"login"}) . ")"); + } elsif ($version_or_control) { + $dbh->do("UPDATE defaults SET version = " . + $dbh->quote($version_or_control)); } $dbh->commit(); @@ -719,12 +752,31 @@ sub update_available { opendir SQLDIR, "sql/${dbdriver}-upgrade" or &error("", "sql/${dbdriver}-upgrade: $!"); my @upgradescripts = - grep(/$form->{dbdriver}-upgrade-\Q$cur_version\E.*\.(sql|pl)/, readdir(SQLDIR)); + grep(/$form->{dbdriver}-upgrade-\Q$cur_version\E.*\.(sql|pl)$/, readdir(SQLDIR)); closedir SQLDIR; return ($#upgradescripts > -1); } +sub create_schema_info_table { + $main::lxdebug->enter_sub(); + + my ($self, $form, $dbh) = @_; + + my $query = "SELECT tag FROM schema_info LIMIT 1"; + if (!$dbh->do($query)) { + $query = + "CREATE TABLE schema_info (" . + " tag text, " . + " login text, " . + " itime timestamp DEFAULT now(), " . + " PRIMARY KEY (tag))"; + $dbh->do($query) || $form->dberror($query); + } + + $main::lxdebug->leave_sub(); +} + sub dbupdate { $main::lxdebug->enter_sub(); @@ -794,7 +846,7 @@ sub dbupdate { last if ($version < $mindb); # apply upgrade - $main::lxdebug->message(DEBUG2, "Appliying Update $upgradescript"); + $main::lxdebug->message(DEBUG2, "Applying Update $upgradescript"); if ($file_type eq "sql") { $self->process_query($form, $dbh, "sql/" . $form->{"dbdriver"} . "-upgrade/$upgradescript", $str_maxdb); } else { @@ -815,6 +867,112 @@ sub dbupdate { return $rc; } +sub dbupdate2 { + $main::lxdebug->enter_sub(); + + my ($self, $form, $controls) = @_; + + $form->{sid} = $form->{dbdefault}; + + my @upgradescripts = (); + my ($query, $sth, $tag); + my $rc = -2; + + @upgradescripts = sort_dbupdate_controls($controls); + + foreach my $db (split / /, $form->{dbupdate}) { + + next unless $form->{$db}; + + # strip db from dataset + $db =~ s/^db//; + &dbconnect_vars($form, $db); + + my $dbh = + DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) + or $form->dberror; + + map({ $_->{"applied"} = 0; } @upgradescripts); + + $query = "SELECT tag FROM schema_info"; + $sth = $dbh->prepare($query); + $sth->execute() || $form->dberror($query); + while (($tag) = $sth->fetchrow_array()) { + $controls->{$tag}->{"applied"} = 1 if (defined($controls->{$tag})); + } + $sth->finish(); + + my $all_applied = 1; + foreach (@upgradescripts) { + if (!$_->{"applied"}) { + $all_applied = 0; + last; + } + } + + next if ($all_applied); + + foreach my $control (@upgradescripts) { + next if ($control->{"applied"}); + + $control->{"file"} =~ /\.(sql|pl)$/; + my $file_type = $1; + + # apply upgrade + $main::lxdebug->message(DEBUG2, "Applying Update $control->{file}"); + print($form->parse_html_template("dbupgrade/upgrade_message2", + $control)); + + if ($file_type eq "sql") { + $self->process_query($form, $dbh, "sql/" . $form->{"dbdriver"} . + "-upgrade2/$control->{file}", $control); + } else { + $self->process_perl_script($form, $dbh, "sql/" . $form->{"dbdriver"} . + "-upgrade2/$control->{file}", $control); + } + } + + $rc = 0; + $dbh->disconnect; + + } + + $main::lxdebug->leave_sub(); + + return $rc; +} + +sub update2_available { + $main::lxdebug->enter_sub(); + + my ($form, $controls) = @_; + + map({ $_->{"applied"} = 0; } values(%{$controls})); + + dbconnect_vars($form, $form->{"dbname"}); + + my $dbh = + DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}) || + $form->dberror; + + my ($query, $tag, $sth); + + $query = "SELECT tag FROM schema_info"; + $sth = $dbh->prepare($query); + $sth->execute() || $form->dberror($query); + while (($tag) = $sth->fetchrow_array()) { + $controls->{$tag}->{"applied"} = 1 if (defined($controls->{$tag})); + } + $sth->finish(); + $dbh->disconnect(); + + map({ $main::lxdebug->leave_sub() and return 1 if (!$_->{"applied"}) } + values(%{$controls})); + + $main::lxdebug->leave_sub(); + return 0; +} + sub create_config { $main::lxdebug->enter_sub(); @@ -933,7 +1091,8 @@ sub config_vars { currency dateformat dbconnect dbdriver dbhost dbport dboptions dbname dbuser dbpasswd email fax name numberformat in_numberformat password printer role sid signature stylesheet tel templates vclimit angebote bestellungen rechnungen - anfragen lieferantenbestellungen einkaufsrechnungen steuernummer co_ustid duns menustyle); + anfragen lieferantenbestellungen einkaufsrechnungen taxnumber co_ustid duns menustyle + template_format copies show_form_details); $main::lxdebug->leave_sub(); diff --git a/VERSION b/VERSION index 197c4d5c2..005119baa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.0 +2.4.1 diff --git a/am.pl b/am.pl index a9b053232..df71c21e5 100755 --- a/am.pl +++ b/am.pl @@ -46,6 +46,11 @@ use SL::Form; eval { require "lx-erp.conf"; }; +if (defined($latex) && !defined($latex_templates)) { + $latex_templates = $latex; + undef($latex); +} + $form = new Form; # name of this script diff --git a/bin/mozilla/admin.pl b/bin/mozilla/admin.pl index b2f7576af..2eb53876c 100644 --- a/bin/mozilla/admin.pl +++ b/bin/mozilla/admin.pl @@ -440,11 +440,12 @@ sub form_header { } opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $!"); - @all = grep !/^\.\.?$/, readdir TEMPLATEDIR; + my @all = readdir(TEMPLATEDIR); + my @alldir = sort(grep({ -d "$templates/$_" && !/^\.\.?$/ } @all)); + my @allhtml = sort(grep({ -f "$templates/$_" && /\.html$/ } @all)); closedir TEMPLATEDIR; - @allhtml = sort grep /\.html/, @all; - @alldir = grep !/\.(html|tex|sty|odt)$/, @all; + @alldir = grep !/\.(html|tex|sty|odt|xml|txb)$/, @alldir; @alldir = grep !/^(webpages|\.svn)$/, @alldir; @allhtml = reverse grep !/Default/, @allhtml; @@ -473,7 +474,7 @@ sub form_header { } opendir CSS, "css/."; - @all = grep /.*\.css$/, readdir CSS; + @all = sort(grep({ /\.css$/ && ($_ ne "tabcontent.css") } readdir(CSS))); closedir CSS; foreach $item (@all) { @@ -483,12 +484,16 @@ sub form_header { $selectstylesheet .= qq||; + foreach $item (qw(1,000.00 1000.00 1.000,00 1000,00)) { + $numberformat .= + ($item eq $form->{output_numberformat}) + ? ""; + } + + my $dateformat = + qq||; + foreach $item (qw(mm-dd-yy mm/dd/yy dd-mm-yy dd/mm/yy dd.mm.yy yyyy-mm-dd)) { + $dateformat .= + ($item eq $form->{output_dateformat}) + ? ""; + } + print qq| @@ -1661,15 +1711,33 @@ sub language_header { | . $locale->text('Language') . qq| - + | . $locale->text('Template Code') . qq| - {template_code}> + | . $locale->text('Article Code') . qq| - {article_code}> + + + + | . $locale->text('Number Format') . qq| + + + + | . $locale->text('Date Format') . qq| + + + + | . $locale->text('Long Dates') . qq| + {output_longdates} ? " checked" : "") . + qq|>| . $locale->text("Yes") . + qq|{output_longdates} ? "" : " checked") . + qq|>| . $locale->text("No") . + qq|
@@ -1712,8 +1780,10 @@ sub add_buchungsgruppe { "$form->{script}?action=add_buchungsgruppe&path=$form->{path}&login=$form->{login}&password=$form->{password}" unless $form->{callback}; AM->get_buchungsgruppe(\%myconfig, \%$form); - if ($eur) { - $form->{"inventory_accno_id"} = $form->{"std_inventory_accno_id"}; + $form->{"inventory_accno_id"} = $form->{"std_inventory_accno_id"}; + for (my $i = 0; 4 > $i; $i++) { + map({ $form->{"${_}_accno_id_$i"} = $form->{"std_${_}_accno_id"}; } + qw(income expense)); } &buchungsgruppe_header; @@ -2385,7 +2455,7 @@ sub list_payment { - + {path}> {login}> @@ -2841,6 +2911,37 @@ sub config { $myconfig{$item} =~ s/\\n/\r\n/g; } + @formats = (); + if ($opendocument_templates && $openofficeorg_writer_bin && + $xvfb_bin && (-x $openofficeorg_writer_bin) && (-x $xvfb_bin)) { + push(@formats, { "name" => $locale->text("PDF (OpenDocument/OASIS)"), + "value" => "opendocument_pdf" }); + } + if ($latex_templates) { + push(@formats, { "name" => $locale->text("PDF"), "value" => "pdf" }); + } + push(@formats, { "name" => "HTML", "value" => "html" }); + if ($latex_templates) { + push(@formats, { "name" => $locale->text("Postscript"), + "value" => "postscript" }); + } + if ($opendocument_templates) { + push(@formats, { "name" => $locale->text("OpenDocument/OASIS"), + "value" => "opendocument" }); + } + + if (!$myconfig{"template_format"}) { + $myconfig{"template_format"} = "pdf"; + } + $template_format = ""; + foreach $item (@formats) { + $template_format .= + ""; + } + %countrycodes = User->country_codes; $countrycodes = ''; foreach $key (sort { $countrycodes{$a} cmp $countrycodes{$b} } @@ -2892,8 +2993,19 @@ sub config { $form->header; - if ($myconfig{menustyle} eq "old") { $oldS = "checked"; } - else { $newS = "checked"; } + if ($myconfig{menustyle} eq "old") { + $menustyle_old = "checked"; + } elsif ($myconfig{menustyle} eq "neu") { + $menustyle_neu = "checked"; + } elsif ($myconfig{menustyle} eq "v3") { + $menustyle_v3 = "checked"; + } + + my ($show_form_details, $hide_form_details); + $myconfig{"show_form_details"} = 1 + unless (defined($myconfig{"show_form_details"})); + $show_form_details = "checked" if ($myconfig{"show_form_details"}); + $hide_form_details = "checked" unless ($myconfig{"show_form_details"}); print qq| @@ -2968,10 +3080,35 @@ sub config { | . $locale->text('Setup Menu') . qq| -  New -  Old - +  | . + $locale->text("Top (CSS)") . qq| +  | . + $locale->text("Top (Javascript)") . qq| +  | . + $locale->text("Old (on the side)") . qq| + + + | . $locale->text('Form details (second row)') . qq| +   + +   + + + + | . $locale->text("Print options") . qq| + + + | . $locale->text('Default template format') . qq| + + + + | . $locale->text('Number of copies') . qq| + + + +   @@ -2980,16 +3117,8 @@ sub config { - - - - - - -
| . $locale->text('Year End') . qq| (mm/dd) {defaults}{yearend}>| . $locale->text('Weight Unit') . qq|
- | @@ -3465,20 +3594,39 @@ sub edit_units { AM->units_in_use(\%myconfig, $form, $units); map({ $units->{$_}->{"BASE_UNIT_DDBOX"} = AM->unit_select_data($units, $units->{$_}->{"base_unit"}, 1); } keys(%{$units})); + @languages = AM->language(\%myconfig, $form, 1); + @unit_list = (); foreach $name (sort({ lc($a) cmp lc($b) } grep({ !$units->{$_}->{"base_unit"} } keys(%{$units})))) { map({ push(@unit_list, $units->{$_}); } sort({ ($units->{$a}->{"resolved_factor"} * 1) <=> ($units->{$b}->{"resolved_factor"} * 1) } grep({ $units->{$_}->{"resolved_base_unit"} eq $name } keys(%{$units})))); } - map({ $_->{"factor"} = $form->format_amount(\%myconfig, $_->{"factor"}, 5) if ($_->{"factor"}); } @unit_list); + my $i = 1; + foreach (@unit_list) { + $_->{"factor"} = $form->format_amount(\%myconfig, $_->{"factor"}, 5) if ($_->{"factor"}); + $_->{"UNITLANGUAGES"} = []; + foreach my $lang (@languages) { + push(@{ $_->{"UNITLANGUAGES"} }, + { "idx" => $i, + "unit" => $_->{"name"}, + "language_id" => $lang->{"id"}, + "localized" => $_->{"LANGUAGES"}->{$lang->{"template_code"}}->{"localized"}, + "localized_plural" => $_->{"LANGUAGES"}->{$lang->{"template_code"}}->{"localized_plural"}, + }); + } + $i++; + } $units = AM->retrieve_units(\%myconfig, $form, $form->{"unit_type"}); $ddbox = AM->unit_select_data($units, undef, 1); $form->{"title"} = sprintf($locale->text("Add and edit %s"), $form->{"unit_type"} eq "dimension" ? $locale->text("dimension units") : $locale->text("service units")); $form->header(); - print($form->parse_html_template("am/edit_units", { "UNITS" => \@unit_list, "NEW_BASE_UNIT_DDBOX" => $ddbox })); + print($form->parse_html_template("am/edit_units", + { "UNITS" => \@unit_list, + "NEW_BASE_UNIT_DDBOX" => $ddbox, + "LANGUAGES" => \@languages })); $lxdebug->leave_sub(); } @@ -3488,7 +3636,8 @@ sub add_unit { $form->isblank("new_name", $locale->text("The name is missing.")); $units = AM->retrieve_units(\%myconfig, $form, $form->{"unit_type"}); - $form->show_generic_error($locale->text("A unit with this name does already exist.")) if ($units->{$form->{"new_name"}}); + $all_units = AM->retrieve_units(\%myconfig, $form); + $form->show_generic_error($locale->text("A unit with this name does already exist.")) if ($all_units->{$form->{"new_name"}}); my ($base_unit, $factor); if ($form->{"new_base_unit"}) { @@ -3500,7 +3649,16 @@ sub add_unit { $base_unit = $form->{"new_base_unit"}; } - AM->add_unit(\%myconfig, $form, $form->{"new_name"}, $base_unit, $factor, $form->{"unit_type"}); + my @languages; + foreach my $lang (AM->language(\%myconfig, $form, 1)) { + next unless ($form->{"new_localized_$lang->{id}"} || $form->{"new_localized_plural_$lang->{id}"}); + push(@languages, { "id" => $lang->{"id"}, + "localized" => $form->{"new_localized_$lang->{id}"}, + "localized_plural" => $form->{"new_localized_plural_$lang->{id}"}, + }); + } + + AM->add_unit(\%myconfig, $form, $form->{"new_name"}, $base_unit, $factor, $form->{"unit_type"}, \@languages); $form->{"saved_message"} = $locale->text("The unit has been saved."); @@ -3509,12 +3667,32 @@ sub add_unit { $lxdebug->leave_sub(); } +sub set_unit_languages { + $lxdebug->enter_sub(); + + my ($unit, $languages, $idx) = @_; + + $unit->{"LANGUAGES"} = []; + + foreach my $lang (@{$languages}) { + push(@{ $unit->{"LANGUAGES"} }, + { "id" => $lang->{"id"}, + "localized" => $form->{"localized_${idx}_$lang->{id}"}, + "localized_plural" => $form->{"localized_plural_${idx}_$lang->{id}"}, + }); + } + + $lxdebug->leave_sub(); +} + sub save_unit { $lxdebug->enter_sub(); $old_units = AM->retrieve_units(\%myconfig, $form, $form->{"unit_type"}, "resolved_"); AM->units_in_use(\%myconfig, $form, $old_units); + @languages = AM->language(\%myconfig, $form, 1); + $new_units = {}; @delete_units = (); foreach $i (1..($form->{"rowcount"} * 1)) { @@ -3526,6 +3704,7 @@ sub save_unit { if ($form->{"unchangeable_$i"}) { $new_units->{$form->{"old_name_$i"}} = $old_units->{$form->{"old_name_$i"}}; $new_units->{$form->{"old_name_$i"}}->{"unchanged_unit"} = 1; + set_unit_languages($new_units->{$form->{"old_name_$i"}}, \@languages, $i); next; } @@ -3544,6 +3723,7 @@ sub save_unit { my %h = map({ $_ => $form->{"${_}_$i"} } qw(name base_unit factor old_name)); $new_units->{$form->{"name_$i"}} = \%h; $new_units->{$form->{"name_$i"}}->{"row"} = $i; + set_unit_languages($new_units->{$form->{"old_name_$i"}}, \@languages, $i); } foreach $unit (values(%{$new_units})) { diff --git a/bin/mozilla/ap.pl b/bin/mozilla/ap.pl index 9cc84e7fe..03a2681ac 100644 --- a/bin/mozilla/ap.pl +++ b/bin/mozilla/ap.pl @@ -79,6 +79,7 @@ sub add { unless $form->{callback}; &create_links; + AP->get_transdate(\%myconfig, $form); &display_form; $lxdebug->leave_sub(); @@ -239,9 +240,9 @@ sub create_links { } $form->{"${key}_$k"} = "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}"; + my $q_description = quotemeta($form->{acc_trans}{$key}->[$i-1]->{description}); $form->{"select${key}"} =~ - /
" . $locale->text('Due Date') . ""; + $column_header{type} = + "" . $locale->text('Type') . ""; $column_header{invnumber} = "" . $locale->text('Invoice') @@ -1440,6 +1462,11 @@ sub ar_transactions { $column_data{invnumber} = "{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ar->{invnumber}"; + $column_data{type} = "" . + ($ar->{storno} ? $locale->text("Storno (one letter abbreviation)") : + $ar->{amount} < 0 ? + $locale->text("Credit note (one letter abbreviation)") : + $locale->text("Invoice (one letter abbreviation)")) . ""; $column_data{ordnumber} = "$ar->{ordnumber} "; $column_data{name} = "$ar->{name}"; $ar->{notes} =~ s/\r\n/
/g; diff --git a/bin/mozilla/ca.pl b/bin/mozilla/ca.pl index 45c8cc755..e499abe70 100644 --- a/bin/mozilla/ca.pl +++ b/bin/mozilla/ca.pl @@ -413,13 +413,12 @@ sub list_transactions { # construct link to source $href = "{module}.pl?path=$form->{path}&action=edit&id=$ca->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ca->{reference}"; - + my $debit = ($ca->{debit} != 0) ? $form->format_amount(\%myconfig, $ca->{debit}, 2, " ") : " "; $column_data{debit} = - "" - . $form->format_amount(\%myconfig, $ca->{debit}, 2, " ") . ""; + "$debit"; + my $credit = ($ca->{credit} != 0) ? $form->format_amount(\%myconfig, $ca->{credit}, 2, " ") : " "; $column_data{credit} = - "" - . $form->format_amount(\%myconfig, $ca->{credit}, 2, " ") . ""; + "$credit"; $form->{balance} += $ca->{amount}; $column_data{balance} = diff --git a/bin/mozilla/common.pl b/bin/mozilla/common.pl index 67b9e076f..30548f63f 100644 --- a/bin/mozilla/common.pl +++ b/bin/mozilla/common.pl @@ -420,4 +420,74 @@ sub H { return $form->quote_html($_[0]); } +sub format_dates { + $lxdebug->enter_sub(); + + my ($dateformat, $longformat, @indices) = @_; + + $dateformat = $myconfig{"dateformat"} unless ($dateformat); + + foreach my $idx (@indices) { + next unless (defined($form->{$idx})); + + if (!ref($form->{$idx})) { + $form->{$idx} = $locale->reformat_date(\%myconfig, $form->{$idx}, + $dateformat, $longformat); + + } elsif (ref($form->{$idx}) eq "ARRAY") { + for (my $i = 0; $i < scalar(@{$form->{$idx}}); $i++) { + $form->{$idx}->[$i] = + $locale->reformat_date(\%myconfig, $form->{$idx}->[$i], + $dateformat, $longformat); + } + } + } + + $lxdebug->leave_sub(); +} + +sub reformat_numbers { + $lxdebug->enter_sub(); + + my ($numberformat, $places, @indices) = @_; + + return $lxdebug->leave_sub() + if (!$numberformat || ($numberformat eq $myconfig{"numberformat"})); + + foreach my $idx (@indices) { + next unless (defined($form->{$idx})); + + if (!ref($form->{$idx})) { + $form->{$idx} = $form->parse_amount(\%myconfig, $form->{$idx}); + + } elsif (ref($form->{$idx}) eq "ARRAY") { + for (my $i = 0; $i < scalar(@{$form->{$idx}}); $i++) { + $form->{$idx}->[$i] = + $form->parse_amount(\%myconfig, $form->{$idx}->[$i]); + } + } + } + + my $saved_numberformat = $myconfig{"numberformat"}; + $myconfig{"numberformat"} = $numberformat; + + foreach my $idx (@indices) { + next unless (defined($form->{$idx})); + + if (!ref($form->{$idx})) { + $form->{$idx} = $form->format_amount(\%myconfig, $form->{$idx}, $places); + + } elsif (ref($form->{$idx}) eq "ARRAY") { + for (my $i = 0; $i < scalar(@{$form->{$idx}}); $i++) { + $form->{$idx}->[$i] = + $form->format_amount(\%myconfig, $form->{$idx}->[$i], $places); + } + } + } + + $myconfig{"numberformat"} = $saved_numberformat; + + $lxdebug->leave_sub(); +} + 1; diff --git a/bin/mozilla/ct.pl b/bin/mozilla/ct.pl index 923a18a1a..49672ab54 100644 --- a/bin/mozilla/ct.pl +++ b/bin/mozilla/ct.pl @@ -675,6 +675,7 @@ sub form_header { my $pjy = new CGI::Ajax( 'get_shipto' => $get_shipto_url ); $form->{selectshipto} = ""; + $form->{selectshipto} .= ""; if (@{ $form->{SHIPTO} }) { foreach $item (@{ $form->{SHIPTO} }) { if ($item->{shipto_id} == $form->{shipto_id}) { @@ -863,6 +864,7 @@ sub form_header { # $locale->text('Customer Number') # $locale->text('Vendor Number') $form->{fokus} = "ct.greeting"; + $form->{jsscript} = 1; $form->header; print qq| @@ -953,9 +955,9 @@ sub form_header { | . $locale->text('Credit Limit') . qq| - | . $locale->text('Terms: Net') . qq| - | - . $locale->text('days') . qq| + + | . $locale->text('Payment Terms') . qq| + | . $locale->text('Discount') . qq| % @@ -964,7 +966,7 @@ sub form_header { | . $locale->text('Tax Number / SSN') . qq| | . $locale->text('USt-IdNr.') . qq| - + $customer @@ -991,9 +993,6 @@ sub form_header { | . $locale->text('Obsolete') . qq| {obsolete}> - | . $locale->text('Payment Terms') . qq| - $taxzone @@ -1167,9 +1166,11 @@ $shipto $delivery | . $locale->text('From') . qq| - - | . $locale->text('Bis') . qq| - + + + | . $locale->text('To (time)') . qq| + + @@ -1182,7 +1183,8 @@ $shipto -|; +| . $form->write_trigger(\%myconfig, 2, "from", "BL", "trigger_from", + "to", "BL", "trigger_to"); $lxdebug->leave_sub(); } diff --git a/bin/mozilla/datev.pl b/bin/mozilla/datev.pl index 62a1cf006..9944abfba 100644 --- a/bin/mozilla/datev.pl +++ b/bin/mozilla/datev.pl @@ -25,6 +25,10 @@ # #====================================================================== +use POSIX qw(strftime getcwd); +use Archive::Zip qw(:ERROR_CODES :CONSTANTS); + +use SL::Common; use SL::DATEV; 1; @@ -80,13 +84,14 @@ sub export { - | - . $locale->text("Kontonummernerweiterung (KNE)") . qq| + | . # OBE-Export noch nicht implementiert! | . $locale->text("Kontonummernerweiterung (KNE)") . qq| + qq| | . $locale->text("Abrechnungsnummer") . qq| + | . $locale->text("Export Buchungsdaten") . qq| @@ -173,6 +178,7 @@ sub export_bewegungsdaten { . $locale->text('III') . qq| |; + $form->{"jsscript"} = 1; $form->header; print qq| @@ -209,9 +215,11 @@ sub export_bewegungsdaten {  | . $locale->text('Datum von') . qq| - + + | . $locale->text('bis') . qq| - + + @@ -221,6 +229,10 @@ sub export_bewegungsdaten { +| . $form->write_trigger(\%myconfig, 2, + "transdatefrom", "BL", "trigger_transdatefrom", + "transdateto", "BL", "trigger_transdateto") . qq| + @@ -321,14 +333,65 @@ sub export3 { DATEV->save_datev_stamm(\%myconfig, \%$form); + my $link = $form->{"script"} . "?"; + map({ $link .= "${_}=" . $form->escape($form->{$_}) . "&"; } qw(path login password)); + $link .= "action=download"; + if ($form->{kne}) { - if (DATEV->kne_export(\%myconfig, \%$form)) { - $form->redirect($locale->text('KNE Export erfolgreich!')); + my @filenames = DATEV->kne_export(\%myconfig, \%$form); + if (@filenames) { + print(qq|
| . $locale->text('KNE-Export erfolgreich!') . qq|
|); + $link .= "&filenames=" . $form->escape(join(":", @filenames)); + print(qq|
Download|); + } else { + $form->error("KNE-Export schlug fehl."); } } else { - if (DATEV->obe_export(\%myconfig, \%$form)) { - $form->redirect($locale->text('OBE Export erfolgreich!')); + my @filenames = DATEV->obe_export(\%myconfig, \%$form); + if (@filenames) { + print(qq|
| . $locale->text('OBE-Export erfolgreich!') . qq|
|); + $link .= "&filenames=" . $form->escape(join(":", @filenames)); + print(qq|
Download|); + } else { + $form->error("OBE-Export schlug fehl."); } } + + print(""); + + $lxdebug->leave_sub(); +} + +sub download { + $lxdebug->enter_sub(); + + my $tmp_name = Common->tmpname(); + my $zip_name = strftime("lx-office-datev-export-%Y%m%d.zip", + localtime(time())); + + my $cwd = getcwd(); + chdir("users") || die("chdir users"); + + my @filenames = split(/:/, $form->{"filenames"}); + map({ s|.*/||; $form->error("Eine der KNE-Exportdateien wurde nicht " . + "gefunden. Wurde der Export bereits " . + "durchgeführt?") unless (-f $_); } + @filenames); + + my $zip = Archive::Zip->new(); + map({ $zip->addFile($_); } @filenames); + $zip->writeToFileNamed($tmp_name); + chdir($cwd); + + open(IN, $tmp_name) || die("open $tmp_name"); + print("Content-Type: application/zip\n"); + print("Content-Disposition: attachment; filename=\"${zip_name}\"\n\n"); + while () { + print($_); + } + close(IN); + + unlink($tmp_name); + $lxdebug->leave_sub(); } diff --git a/bin/mozilla/gl.pl b/bin/mozilla/gl.pl index be71a67db..2668083bb 100644 --- a/bin/mozilla/gl.pl +++ b/bin/mozilla/gl.pl @@ -177,7 +177,7 @@ sub edit { $form->{totalcredit} += $ref->{amount}; $form->{"credit_$i"} = $ref->{amount}; } - $form->{"taxchart_$i"} = "0--"; + $form->{"taxchart_$i"} = "0--0.00"; $i++; } if ($ref->{taxaccno} && !$tax) { @@ -293,6 +293,7 @@ sub search { | . $locale->text('From') . qq| $button1 + | . $locale->text('To (time)') . qq| $button2 @@ -968,7 +969,7 @@ sub update { : $form->{"debit_$i"}; $j = $#a; if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) { - $form->{"taxchart_$i"} = "0--"; + $form->{"taxchart_$i"} = "0--0.00"; $form->{"tax_$i"} = 0; } if (!$form->{"korrektur_$i"}) { @@ -1609,7 +1610,7 @@ sub post { : $form->{"debit_$i"}; $j = $#a; if (($debitcredit && $credittax) || (!$debitcredit && $debittax)) { - $form->{"taxchart_$i"} = "0--"; + $form->{"taxchart_$i"} = "0--0.00"; $form->{"tax_$i"} = 0; } if (!$form->{"korrektur_$i"}) { diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index a6237fab3..06fc13f90 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -185,7 +185,7 @@ sub search {   | . $locale->text('From') . qq| $button1 - | . $locale->text('To') . qq| + | . $locale->text('To (time)') . qq| $button2 @@ -235,7 +235,7 @@ sub search { | . $locale->text('From') . qq| $button1 - | . $locale->text('To') . qq| + | . $locale->text('To (time)') . qq| $button2 @@ -1596,7 +1596,7 @@ sub generate_report { if ($form->{transdateto}) { $callback .= "&transdateto=$form->{transdateto}"; $option .= "\n
" - . $locale->text('To') + . $locale->text('To (time)') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1); } @@ -2071,6 +2071,8 @@ sub edit { IC->get_part(\%myconfig, \%$form); + $form->{"original_partnumber"} = $form->{"partnumber"}; + $form->{title} = $locale->text('Edit ' . ucfirst $form->{item}); &link_part; @@ -2332,11 +2334,6 @@ sub form_header { {weight}> - -   - $form->{weightunit} - {weightunit}> - @@ -2367,11 +2364,6 @@ sub form_header {  $form->{weight} {weight}> - -   - $form->{weightunit} - {weightunit}> - @@ -2561,6 +2553,7 @@ sub form_header { {rowcount}> + @@ -3189,7 +3182,10 @@ sub save_as_new { $lxdebug->enter_sub(); $form->{id} = 0; - $form->{partnumber} = ""; + if ($form->{"original_partnumber"} && + ($form->{"partnumber"} eq $form->{"original_partnumber"})) { + $form->{partnumber} = ""; + } &save; $lxdebug->leave_sub(); diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index b8f892b47..4f36c7818 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -33,7 +33,12 @@ # ####################################################################### +use SL::CT; use SL::IC; +use CGI::Ajax; +use CGI; + +require "$form->{path}/common.pl"; # any custom scripts for this one if (-f "$form->{path}/custom_io.pl") { @@ -85,6 +90,7 @@ use Data::Dumper; sub display_row { $lxdebug->enter_sub(); my $numrows = shift; + if ($lizenzen && $form->{vc} eq "customer") { if ($form->{type} =~ /sales_order/) { @column_index = (runningnumber, partnumber, description, ship, qty); @@ -192,9 +198,20 @@ sub display_row { . qq||; ############## ENDE Neueintrag ################## + $myconfig{"show_form_details"} = 1 + unless (defined($myconfig{"show_form_details"})); + $form->{"show_details"} = $myconfig{"show_form_details"} + unless (defined($form->{"show_details"})); + $form->{"show_details"} = $form->{"show_details"} ? 1 : 0; + my $show_details_new = 1 - $form->{"show_details"}; + my $show_details_checked = $form->{"show_details"} ? "checked" : ""; + print qq| - - |; - + |; + $form->{selectshipto} = $form->quote($form->{selectshipto}); + $shipto .= qq| |; @@ -494,13 +494,8 @@ sub form_header { $vclabel = ucfirst $form->{vc}; $vclabel = $locale->text($vclabel); - $terms = qq| - - - - -|; + $terms = qq||; if ($form->{business}) { $business = qq| @@ -539,26 +534,21 @@ sub form_header { foreach $item (@{ $form->{TAXZONE} }) { if ($item->{id} == $form->{taxzone_id}) { $form->{selecttaxzone} .= - ""; + ""; } else { $form->{selecttaxzone} .= - ""; + ""; } } } else { $form->{selecttaxzone} =~ s/ selected//g; if ($form->{taxzone_id} ne "") { - $form->{selecttaxzone} =~ s/value=$form->{taxzone_id}/value=$form->{taxzone_id} selected/; + $form->{selecttaxzone} =~ s/value=$form->{taxzone_id}>/value=$form->{taxzone_id} selected>/; } } - if ($form->{rowcount} >0) { - $form->{selecttaxzone} =~ / @@ -606,7 +596,7 @@ sub form_header { - +
+ + +
|; @@ -433,9 +450,13 @@ sub display_row { # Eintrag fuer Version 2.2.0 geaendert # # neue Optik im Rechnungsformular # ######################################## + + my $row_style_attr = + 'style="display:none;"' if (!$form->{"show_details"}); + # print second row print qq| - + |; $column_data{partnumber} = @@ -557,7 +578,8 @@ sub select_item { qq||; $column_data{onhand} = qq||; - + $column_data{unit} = + qq||; # list items with radio button on a form $form->header; @@ -615,7 +637,8 @@ sub select_item { qq||; - + $column_data{unit} = + qq||; $j++; $j %= 2; print qq| @@ -1165,6 +1188,13 @@ sub order { \%myconfig, $form->{currency}, $form->{transdate}, $buysell ))); + for $i (1 .. $form->{rowcount}) { + map({ $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, + $form->{"${_}_${i}"}) + if ($form->{"${_}_${i}"}) } + qw(ship qty sellprice listprice basefactor)); + } + &prepare_order; &display_form; @@ -1218,6 +1248,13 @@ sub quotation { \%myconfig, $form->{currency}, $form->{transdate}, $buysell ))); + for $i (1 .. $form->{rowcount}) { + map({ $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, + $form->{"${_}_${i}"}) + if ($form->{"${_}_${i}"}) } + qw(ship qty sellprice listprice basefactor)); + } + &prepare_order; &display_form; @@ -1245,6 +1282,11 @@ sub e_mail { $form->{email} = $form->{shiptoemail} if $form->{shiptoemail}; } + if ($form->{"cp_id"} && !$form->{"email"}) { + CT->get_contact(\%myconfig, $form); + $form->{"email"} = $form->{"cp_email"}; + } + $name = $form->{ $form->{vc} }; $name =~ s/--.*//g; $title = $locale->text('E-mail') . " $name"; @@ -1346,7 +1388,16 @@ sub send_email { sub print_options { $lxdebug->enter_sub(); $form->{sendmode} = "attachment"; - $form->{copies} = 3 unless $form->{copies}; + + $form->{"format"} = + $form->{"format"} ? $form->{"format"} : + $myconfig{"template_format"} ? $myconfig{"template_format"} : + "pdf"; + + $form->{"copies"} = + $form->{"copies"} ? $form->{"copies"} : + $myconfig{"copies"} ? $myconfig{"copies"} : + 3; $form->{PD}{ $form->{formname} } = "selected"; $form->{DF}{ $form->{format} } = "selected"; @@ -1457,7 +1508,7 @@ sub print_options { $format .= qq||; - if ($latex) { + if ($latex_templates) { $format .= qq||; } @@ -1753,9 +1804,14 @@ sub print_form { $form->{"cc"} = $saved_cc if ($saved_cc); $form->{"bcc"} = $saved_bcc if ($saved_bcc); - # format payment dates - for $i (1 .. $form->{paidaccounts} - 1) { - $form->{"datepaid_$i"} = $locale->date(\%myconfig, $form->{"datepaid_$i"}); + my ($language_tc, $output_numberformat, $output_dateformat, $output_longdates); + if ($form->{"language_id"}) { + ($language_tc, $output_numberformat, $output_dateformat, $output_longdates) = + AM->get_language_details(\%myconfig, $form, $form->{language_id}); + } else { + $output_dateformat = $myconfig{"dateformat"}; + $output_numberformat = $myconfig{"numberformat"}; + $output_longdates = 1; } ($form->{employee}) = split /--/, $form->{employee}; @@ -1768,17 +1824,6 @@ sub print_form { IS->invoice_details(\%myconfig, \%$form, $locale); } - # format global dates - map { $form->{$_} = $locale->date(\%myconfig, $form->{$_}, 1) } - ("${inv}date", "${due}date", "shippingdate", "deliverydate"); - - # format item dates - for my $field (qw(transdate_oe deliverydate_oe)) { - map { - $form->{$field}[$_] = $locale->date(\%myconfig, $form->{$field}[$_], 1); - } 0 .. $#{ $form->{$field} }; - } - if ($form->{shipto_id}) { $form->get_shipto(\%myconfig); } @@ -1800,24 +1845,59 @@ sub print_form { || $form->{formname} eq 'request_quotation') { $form->{shiptoname} = $myconfig{company}; $form->{shiptostreet} = $myconfig{address}; - } else { + } else { map { $form->{"shipto$_"} = $form->{$_} } @a; } } $form->{notes} =~ s/^\s+//g; - map({ $form->{$_} =~ s/\\n/\n/g; } qw(company address)); - $form->{templates} = "$myconfig{templates}"; $form->{language} = $form->get_template_language(\%myconfig); $form->{printer_code} = $form->get_printer_code(\%myconfig); if ($form->{language} ne "") { + map({ $form->{"unit"}->[$_] = + AM->translate_units($form, $form->{"language"}, + $form->{"unit"}->[$_], $form->{"qty"}->[$_]); } + (0..scalar(@{$form->{"unit"}}) - 1)); $form->{language} = "_" . $form->{language}; } + # Format dates. + format_dates($output_dateformat, $output_longdates, + qw(invdate orddate quodate pldate duedate reqdate transdate + shippingdate deliverydate validitydate paymentdate + datepaid transdate_oe deliverydate_oe + employee_startdate employee_enddate + ), + grep({ /^datepaid_\d+$/ || + /^transdate_oe_\d+$/ || + /^deliverydate_oe_\d+$/ || + /^reqdate_\d+$/ || + /^deliverydate_\d+$/ || + /^transdate_\d+$/ + } keys(%{$form}))); + + reformat_numbers($output_numberformat, 2, + qw(invtotal ordtotal quototal subtotal linetotal + listprice sellprice netprice discount + tax taxbase), + grep({ /^linetotal_\d+$/ || + /^listprice_\d+$/ || + /^sellprice_\d+$/ || + /^netprice_\d+$/ || + /^taxbase_\d+$/ || + /^discount_\d+$/ || + /^tax_\d+$/ + } keys(%{$form}))); + + reformat_numbers($output_numberformat, undef, + qw(qty), + grep({ /^qty_\d+$/ + } keys(%{$form}))); + if ($form->{printer_code} ne "") { $form->{printer_code} = "_" . $form->{printer_code}; } @@ -1936,14 +2016,14 @@ sub print_form { sub customer_details { $lxdebug->enter_sub(); - IS->customer_details(\%myconfig, \%$form); + IS->customer_details(\%myconfig, \%$form, @_); $lxdebug->leave_sub(); } sub vendor_details { $lxdebug->enter_sub(); - IR->vendor_details(\%myconfig, \%$form); + IR->vendor_details(\%myconfig, \%$form, @_); $lxdebug->leave_sub(); } @@ -1971,8 +2051,13 @@ sub ship_to { map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate creditlimit creditremaining); + my @shipto_vars = + qw(shiptoname shiptostreet shiptozipcode shiptocity shiptocountry + shiptocontact shiptophone shiptofax shiptoemail + shiptodepartment_1 shiptodepartment_2); + # get details for name - &{"$form->{vc}_details"}; + &{"$form->{vc}_details"}(@shipto_vars); $number = ($form->{vc} eq 'customer') @@ -2075,8 +2160,7 @@ sub ship_to { |; # delete shipto - map { delete $form->{$_} } - qw(shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax shiptoemail shiptodepartment_1 shiptodepartment_2 header); + map({ delete $form->{$_} } (@shipto_vars, qw(header))); $form->{title} = $title; foreach $key (keys %$form) { @@ -2156,3 +2240,18 @@ sub relink_accounts { $lxdebug->leave_sub(); } + + +sub set_duedate { + $lxdebug->enter_sub(); + + $form->get_duedate(\%myconfig); + + my $q = new CGI; + $result = "$form->{duedate}"; + print $q->header(); + print $result; + $lxdebug->leave_sub(); + +} + diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index 541eb6c06..b5df7f32d 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -279,10 +279,11 @@ sub form_header { foreach $item (@{ $form->{TAXZONE} }) { if ($item->{id} == $form->{taxzone_id}) { $form->{selecttaxzone} .= - ""; + ""; } else { $form->{selecttaxzone} .= - ""; + ""; } } @@ -292,11 +293,6 @@ sub form_header { $form->{selecttaxzone} =~ s/value=$form->{taxzone_id}/value=$form->{taxzone_id} selected/; } } - if ($form->{rowcount} >1) { - $form->{selecttaxzone} =~ / @@ -673,6 +669,7 @@ sub form_footer { |; + my @triggers = (); $form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"}); for $i (1 .. $form->{paidaccounts}) { @@ -712,7 +709,8 @@ sub form_footer { $column_data{"AP_paid_$i"} = qq||; $column_data{"datepaid_$i"} = - qq||; + qq||; $column_data{"source_$i"} = qq||; $column_data{"memo_$i"} = @@ -723,6 +721,7 @@ sub form_footer { print qq| |; + push(@triggers, "datepaid_$i", "BL", "trigger_datepaid_$i"); } print qq| @@ -755,6 +754,9 @@ sub form_footer { . $locale->text('Delete') . qq|"> |; } + print qq| +|; } else { if ($invdate > $closedto) { print qq|{invnumber} = "Storno zu " . $form->{invnumber}; - $form->{rowcount}--; &post(); $lxdebug->leave_sub(); } +sub use_as_template { + $lxdebug->enter_sub(); + + map { delete $form->{$_} } qw(printed emailed queued invnumber invdate deliverydate id datepaid_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno); + $form->{paidaccounts} = 1; + $form->{rowcount}--; + $form->{invdate} = $form->current_date(\%myconfig); + &display_form; + + $lxdebug->leave_sub(); +} + sub post_payment { $lxdebug->enter_sub(); for $i (1 .. $form->{paidaccounts}) { @@ -1002,10 +1016,6 @@ sub post { $form->{id} = 0 if $form->{postasnew}; - # get new invnumber in sequence if no invnumber is given or if posasnew was requested - if (!$form->{invnumber} || $form->{postasnew}) { - $form->{invnumber} = $form->update_defaults(\%myconfig, "invnumber"); - } relink_accounts(); $form->redirect( $locale->text('Invoice') diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 52e668233..d918b50d8 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -69,8 +69,6 @@ sub add { } &invoice_links; &prepare_invoice; - $form->{format} = "pdf"; - &display_form; $lxdebug->leave_sub(); @@ -324,16 +322,22 @@ sub form_header { } } + my $set_duedate_url = + "$form->{script}?login=$form->{login}&path=$form->{path}&password=$form->{password}&action=set_duedate"; + + my $pjx = new CGI::Ajax( 'set_duedate' => $set_duedate_url ); + push(@ { $form->{AJAX} }, $pjx); if (@{ $form->{TAXZONE} }) { $form->{selecttaxzone} = ""; foreach $item (@{ $form->{TAXZONE} }) { if ($item->{id} == $form->{taxzone_id}) { $form->{selecttaxzone} .= - ""; + ""; } else { $form->{selecttaxzone} .= - ""; + ""; } } @@ -343,11 +347,6 @@ sub form_header { $form->{selecttaxzone} =~ s/value=$form->{taxzone_id}/value=$form->{taxzone_id} selected/; } } - if ($form->{rowcount} >0) { - $form->{selecttaxzone} =~ / @@ -370,6 +369,7 @@ sub form_header { } } else { + $form->{selectshipto} = $form->unquote($form->{selectshipto}); $form->{selectshipto} =~ s/ selected//g; if ($form->{shipto_id} ne "") { $form->{selectshipto} =~ s/value=$form->{shipto_id}/value=$form->{shipto_id} selected/; @@ -378,8 +378,9 @@ sub form_header { $shipto = qq| - - |; + |; + $form->{selectshipto} = $form->quote($form->{selectshipto}); + $shipto .= qq| |; @@ -581,6 +582,8 @@ sub form_header { $onload = qq|alert('$credittext')|; } + $form->{"javascript"} .= qq| +
|; if ($lizenzen && $form->{type} eq "invoice" && $form->{vc} eq "customer") { @@ -546,7 +567,7 @@ sub set_pricegroup { sub select_item { $lxdebug->enter_sub(); - @column_index = qw(ndx partnumber description onhand sellprice); + @column_index = qw(ndx partnumber description onhand unit sellprice); $column_data{ndx} = qq| | . $locale->text('Price') . qq|| . $locale->text('Qty') . qq|| . $locale->text('Unit') . qq|{onhand}>| . $form->format_amount(\%myconfig, $ref->{onhand}, '', " ") . qq|$ref->{unit}
{"datepaid_$i"}>{"datepaid_$i"}> + {"source_$i"}>
| . $locale->text('Shipping Address') . qq|
+ + + + +
  [drucken]| + . $login . $datum . qq|   +
+|; +} + +sub acc_menu { + $locale = Locale->new($language, "menu"); + + $mainlevel = $form->{level}; + $mainlevel =~ s/$mainlevel--//g; + my $menu = new Menu "$menufile"; + $menu = new Menu "custom_$menufile" if (-f "custom_$menufile"); + $menu = new Menu "$form->{login}_$menufile" + if (-f "$form->{login}_$menufile"); + + $| = 1; + + return print_menu($menu); +} + +sub my_length { + my ($s) = @_; + my $len = 0; + my $i; + my $skip = 0; + + for ($i = 0; $i < length($s); $i++) { + my $c = substr($s, $i, 1); + if ($skip && ($c eq ";")) { + $skip = 0; + } elsif ($skip) { + next; + } elsif ($c eq "&") { + $skip = 1; + $len++; + } else { + $len++; + } + } + + return $len; +} + +sub print_menu { + my ($menu, $parent, $depth) = @_; + my $html; + + die if ($depth * 1 > 5); + + my @menuorder; + + @menuorder = $menu->access_control(\%myconfig, $parent); + + $parent .= "--" if ($parent); + + foreach my $item (@menuorder) { + substr($item, 0, length($parent)) = ""; + next if (($item eq "") || ($item =~ /--/)); + + my $menu_item = $menu->{"${parent}${item}"}; + my $menu_title = $locale->text($item); + my $menu_text = $menu_title; + + $menu_text =~ s/ /
/ if ($parent && (my_length($menu_text) >= 17)); + + my $target = "main_window"; + $target = $menu_item->{"target"} if ($menu_item->{"target"}); + + if ($menu_item->{"submenu"} || !defined($menu_item->{"module"}) || + ($menu_item->{"module"} eq "menu.pl")) { + + my $h = print_menu($menu, "${parent}${item}", $depth * 1 + 1); + if (!$parent) { + $html .= qq|
  • ${menu_text}

      ${h}
|; + } else { + $html .= qq|
  • ${menu_text}
      ${h}
  • |; + } + } else { + $html .= qq|
  • |; + $html .= $menu->menuitem_v3(\%myconfig, $form, "${parent}$item", + { "title" => $menu_title, + "target" => $target }); + $html .= qq|${menu_text}
  • |; + } + } + + return $html; +} diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index 9678b56e7..2e1e76344 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -284,7 +284,6 @@ sub order_links { sub prepare_order { $lxdebug->enter_sub(); - $form->{format} = "pdf" unless ($form->{print_and_save} && $form->{format}); $form->{media} = "screen"; $form->{formname} = $form->{type} unless $form->{formname}; @@ -433,11 +432,12 @@ sub form_header { ""; } else { $form->{selectshipto} .= - ""; + ""; } } } else { + $form->{selectshipto} = $form->unquote($form->{selectshipto}); $form->{selectshipto} =~ s/ selected//g; if ($form->{shipto_id} ne "") { $form->{selectshipto} =~ s/value=$form->{shipto_id}/value=$form->{shipto_id} selected/; @@ -446,9 +446,9 @@ sub form_header { $shipto = qq|
    | . $locale->text('Shipping Address') . qq|
    | . $locale->text('Terms: Net') . qq|{terms}> | - . $locale->text('days') . qq|
    | . $locale->text('Steuersatz') . qq|$form->{creditlimit} | . $locale->text('Remaining') . qq|$form->{creditremaining}$form->{creditremaining}
    @@ -710,6 +700,8 @@ sub form_header { $onload = qq|alert('$credittext')|; } + $form->{"javascript"} .= qq| \ No newline at end of file diff --git a/css/lx-office-erp.css b/css/lx-office-erp.css index 8d8ad3d96..90fc6a8fd 100644 --- a/css/lx-office-erp.css +++ b/css/lx-office-erp.css @@ -45,9 +45,13 @@ body { font-size: 10pt; background-color: white; background-image: url("../image/fade.png"); background-repeat:repeat-x; - color: black + color: black; } -// .bg { background-image: url("mn_hauptmenu.png");} + +/* .bg { + background-image: url("mn_hauptmenu.png"); +} */ + td { font-family: Verdana, Arial, Helvetica; color: black; @@ -226,3 +230,4 @@ h2.error { display: none; } } + diff --git a/css/menuv3.css b/css/menuv3.css new file mode 100644 index 000000000..2259abe8c --- /dev/null +++ b/css/menuv3.css @@ -0,0 +1,133 @@ +body { +behavior:url("css/csshover.htc"); +} + +#menu{ +width:100%; +float:left; +} + +#menu a, #menu h2, #menu div.x { +font:11px/16px arial,helvetica,sans-serif; +display:block; +border-width:1px; +border-style:solid; +border-color:#ccc #888 #555 #bbb; +white-space:nowrap; +margin:0; +padding:1px 0 1px 3px; +} + +#menu h2{ +color:#fff; +background:#000 url(../image/bg_css_menu.png) repeat 100% 100%; +} + +#menu a{ +background:#eee; +text-decoration:none; +} + +#menu a, #menu a:visited{ +color:#000; +} + +#menu a:hover{ +color:#a00; +background:#ddd; +} + +#menu a:active{ +color:#060; +background:#ccc; +} + +#menu ul{ +list-style:none; +margin:0; +padding:0; +float:left; +min-width:7em; +} + +#menu li{ +position:relative; +} + +#menu ul ul{ +position:absolute; +z-index:500; +top:auto; +display:none; +} + +#menu ul ul ul{ +top:0; +left:100%; +} + +/* Begin non-anchor hover selectors */ + +/* Enter the more specific element (div) selector +on non-anchor hovers for IE5.x to comply with the +older version of csshover.htc - V1.21.041022. It +improves IE's performance speed to use the older +file and this method */ + +div#menu h2:hover{ +background:#A3C5FF url(../image/expand3.gif) no-repeat -999px -9999px; +color:#a00; +} + +div#menu li:hover{ +cursor:pointer; +z-index:100; +} + +div#menu li:hover ul ul, +div#menu li li:hover ul ul, +div#menu li li li:hover ul ul, +div#menu li li li li:hover ul ul +{display:none;} + +div#menu li:hover ul, +div#menu li li:hover ul, +div#menu li li li:hover ul, +div#menu li li li li:hover ul +{display:block;} + +/* End of non-anchor hover selectors */ + +/* Styling for Expand */ + +#menu a.x, #menu a.x:visited{ +/*font-weight:bold;*/ +color:#000; +background:#eee url(../image/expand3.gif) no-repeat 100% 100%; +} + +#menu a.x:hover{ +color:#fff; +background:#000; +} + +#menu a.x:active{ +color:#060; +background:#ccc; +} + +#menu div.x, #menu div.x:visited{ +/*font-weight:bold;*/ +color:#000; +background:#eee url(../image/expand3.gif) no-repeat 100% 100%; +} + +#menu div.x:hover{ +color:#a00; +background:#ddd; +} + +#menu div.x:active{ +color:#060; +background:#ccc; +} diff --git a/doc/INSTALL b/doc/INSTALL index b9587fc9b..be9c5fc5d 100644 --- a/doc/INSTALL +++ b/doc/INSTALL @@ -169,12 +169,25 @@ enthalten. Andere Distributionen enthalten ihn in anderen Paketen. Nach der Installation müssen in der Datei "lx-erp.conf" zwei weitere Variablen angepasst werden: "$openofficeorg_writer_bin" muss den vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten. -"$xvfb_run_bin" muss den Pfad zu einem Script enthalten, dass den "X -virtual frame buffer" startet und direkt danach ein Programm in ihm -startet, das dem Script als Parameter übergeben wird. Lx-Office -enthält bereits ein solches Script namens "xvfb-run", das -standardmäßig verwendet wird. Es handelt sich dabei um eine gestutzte -Version des Scripts "xvfb-run" aus dem Debian-Paket "xvfb". +"$xvfb_bin" muss den Pfad zum "X virtual frame buffer" enthalten. + +Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit +OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn +die Variable "$openofficeorg_daemon" gesetzt ist, startet ein +OpenOffice, das auch nach der Umwandlung des Dokumentes gestartet +bleibt. Bei weiteren Umwandlungen wird dann diese laufende Instanz +benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung deutlich +reduziert wird, weil nicht für jedes Dokument ein OpenOffice gestartet +werden muss. Der Nachteil ist, dass diese Methode Python und die +Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2 sind. + +Ist "$openofficeorg_daemon" nicht gesetzt, so wird für jedes Dokument +OpenOffice neu gestartet und die Konvertierung mit Hilfe eines Makros +durchgeführt. Dieses Makro muss in der Dokumentenvorlage enthalten +sein und "Standard.Conversion.ConvertSelfToPDF()" heißen. Die +Beispielvorlage templates/German-invoice.odt enthält ein solches +Makro, das in jeder anderen Dokumentenvorlage ebenfalls enthalten sein +muss. Als letztes muss herausgefunden werden, welchen Namen OpenOffice.org Writer dem Verzeichnis mit den Benutzereinstellungen gibt. Unter diff --git a/doc/UPGRADE b/doc/UPGRADE index 8e11b5d8d..bd0da47e4 100644 --- a/doc/UPGRADE +++ b/doc/UPGRADE @@ -5,11 +5,28 @@ Wichtige Hinweise zum Upgrade von ** BITTE FERTIGEN SIE VOR DEM UPGRADE EIN BACKUP IHRER DATENBANK(EN) AN! ** +Upgrade von v2.4.0 auf 2.4.1 +============================ + +Ein Upgrade von v2.4.0 auf v2.4.1 besteht aus zwei Teilen: den Dateien +(einfaches Entpacken und Kopieren in das Installationsverzeichnis +genügen) sowie dem Datenbankupgrade. + +Das Datenbankupgrade wird automatisch gestartet, wenn sich der erste +Benutzer nach dem Upgrade der Dateien an Lx-Office anmeldet. + +** BITTE FERTIGEN SIE VOR DEM UPGRADE EIN BACKUP IHRER DATENBANK(EN) AN! ** + +Anders als beim Upgrade auf 2.4.0 handelt es bei den Datenbankupgrades +auf 2.4.1 nur um automatisch ablaufende Scripte, die keine +Benutzereingaben erfordern. + + Upgrade von v2.2.0 bis 2.2.2 auf 2.4.0 --------------------------------------- +====================================== Ein direktes Upgrade von den unmodifizierten Versionen 2.2.0, 2.2.1 -und 2.2.2 auf 2.4.0 ist möglich. Es solches Upgrade besteht aus zwei +und 2.2.2 auf 2.4.0 ist möglich. Ein solches Upgrade besteht aus zwei Teilen: den Dateien (einfaches Entpacken und Kopieren in das Installationsverzeichnis genügen) sowie dem Datenbankupgrade. @@ -110,3 +127,17 @@ korrekt zugeordnet. Wird in einer Verkaufs- oder Einkaufsmaske eine andere Steuerzone als Inland ausgewählt, werden bei den Artikeln auch automatisch die anderen Erlös- und Aufwandskonten der Buchungsgruppe verwendet. + +Dokumentenvorlagen, Umbennante Vorlagenvariablen +------------------------------------------------ + +Einige Variablen, die in Dokumentenvorlagen verwendet werden, mussten +aufgrund von Namenskonflikten umbenannt werden. Dazu gehören: + +* Adress- und Kontaktinformationen des angemeldeten Mitarbeiters. Die + Variablen "company", "address" und "businessnumber" haben alle einen + Präfix "employee_" bekommen und heißen nun "employee_company", + "employee_address" und "employee_businessnumber". + +Zu beachten ist außerdem, dass der Befehl <%include ...%> in +Dokumentenvorlagen nicht mehr zur Verfügung steht. diff --git a/doc/changelog b/doc/changelog index 4b4d028a0..0f20e4fad 100644 --- a/doc/changelog +++ b/doc/changelog @@ -1,6 +1,89 @@ #################################### # Veraenderungen von Lx-Office ERP # #################################### +2007-01-19 - Version 2.4.1 + - CSV-Import auf Verwendung von Buchungsgruppen angepasst + - Bei Einkaufs- und Verkaufsmasken lassen sich die zweiten Positionszeilen + verstecken und wieder anzeigen + - PDFs für die USTVA 2007 hinzugefügt + - Email-Funktion: Wenn bei den Kundendaten keine Emailadresse angegeben, + dafür aber ein Ansprechpartner ausgewählt ist, dann wird die Emailadresse + des Ansprechpartners automatisch eingetragen. + - Skontobeträge wurden fälschlicherweise vom Nettobetrag berechnet + - Neues, auf CSS basierendes Menü + - Bei allen Datumsfeldern den Javascript-Kalender hinzugefügt und an einigen + Stellen die Beschriftung berichtigt + - Fehler beim Buchen. Wenn EUR gesetzt war, wurde bei Eingangsrechnungen + das Bestandskonto angesprochen. Wenn EUR nicht gesetzt war, wurden beim + Verkauf die Kosten nicht vom Bestands- auf Kostenkonto umgebucht + - Beim Aufrufen der Masken für Dialogbuchen, Debitoren- und + Kreditorenrechnungen wird Datum der letzten Buchung als Datum für die + neue Maske ausgewählt + - Das Feld "Zahlungsziel" wurde aus den Masken entfernt + - Beim Anlegen von Buchungsgruppen werden die in den Benutzereinstelungen + festgelegten Standardkonten vorselektiert + - Beim DATEV-Export werden die Dateien nicht mehr auf dem Server abgelegt + sondern dem Benutzer direkt zum Download angeboten + - Die Bearbeitungsmöglichkeiten für Vorlagen wurden aus dem Menü entfern + - Verschiedene Konten und Buchungsgruppen wurden von "...16%..." auf + "...16%/19%..." umbenannt + - Anzeigefehler im Buchungsjournal: Wenn eine Buchung aufgerufen wird, + so werden jetzt die richtigen Konten in den Drop-Down-Listen ausgewählt + - Bei Einkaufsmasken wird der Einkaufs- und nicht der Verkaufspreis + vorbelegt + - Jeder Benutzer kann das standardmäßig vorausgewählte Vorlagenformat + festlegen + - Falsche Bestimmung des Steuersatzes bei Gutschriften behoben + - In den Vorlagen stehen diverse neue Variablen zur Verfügung + - Bei Eingangsrechnungen wird der richtige Nummernkreis verwendet + - Steuerzonen können überall auch nachträglich geändert werden + - Das Fälligkeitsdatum wird automatisch anhand der Zahlungsbedingungen + gesetzt + - $latex_templates und $latex werden nun beide akzeptiert und aktivieren + beide die Unterstützung von LaTeX-Vorlagen + - Falsche Steuerschlüsselangaben in Dantebanken behoben + - Fehler in den Kontenrahmendefinitionen für SKR03 und SKR04 behoben + - Aktualisierung der Dokumentation bzgl. Vorlagenvariablen und der + Verwendung von OpenDocument-Vorlagen + - Ersetzen der Einheitennamen anhand der Vorlagensprache + - Umformartierungen von Zahlen und Datumgsangaben anhand der + Vorlagensprache + - Bugfix 507 - interne Bemerkungen werden zu öffentlichen Bemerkungen + - Bugfix 502 - Keine PDF USTVA Vordrucke für 2007 vorhanden + - Bugfix 500, 503 - p_discount verrutscht in der Zeile bei "Waren gruppiert" + - Bugfix 499 - Ustva Export in Winston funktioniert nicht LX-Office 2.4.0.3 + - Bugfix 497 - Einkaufsrechnung lässt sich nicht stornieren + - Bugfix 495 - SQL-Fehler beim Löschen von Eiheiten + - Bugfix 494 - SQL-Fehler beim Eintragen von Dienstleistungseinheiten + - Bugfix 491 - Neue Ware erfassen umständlich + - Bugfix 484 - Newlines in der Firmenadresse und Berichte + - Bugfix 478 - Konten in Dialogbuchung werden nach Buchung nicht mehr + angezeigt + - Bugfix 476 - Umwandlung Kundenauftrag in Lieferantenauftrag: fehlerhafte + Zahlenformatierung + - Bugfix 475 - Bei Einkaufsmasken wird der falsche Standardpreis verwendet + - Bugfix 474 - Version 2.4.0: Kodierfehler in SL/IC.pm + - Bugfix 470 - Fehler nach update auf 2.4.0, alte Rechnungen anzeigen + - Bugfix 469 - Fehler bei Zahlungskonditionen erfassen + - Bugfix 468 - Unternehmer-Steuernummer steht nicht als Variable in + Latextemplates zur Verfügung + - Bugfix 466 - Templatevariable "ustid" wird nicht gefüllt + - Bugfix 465 - Internal Server Error bei Steuerfreien Rechnungen + - Bugfix 464 - Steuerzone ändern + - Bugfix 460 - Bei Wareneinkauf wird in der Rechnung der Verkaufspreis + gebucht + - Bugfix 449 - Variablen in Vorlagen + - Bugfix 442 - EUST wird in Winston-Export nicht berücksichtigt + - Bugfixes 400, 401, 479, 492, 493 - Diverse Rechtschreibfehler + - Bugfix 359 - Noch eine unklare Betitelung - Nur eine Kleinigkeit + - Bugfix 352 - Zahlungsziel in Auftrag und Angebot + - Bugfix 345 - Datevexport nur mit LXDEBUG<>0 + - Bugfix 309 - Konten anlegen und pflegen: Kontoart nicht ausreichend + auswählbar + - Bugfix 294 - Server Error bei Datev-Export + - Bugfix 291 - Wandeln von Angeboten/Anfragen verlieren Nachkommawerte + - Bugfix 151 - (Admin) Datenbank-Vorlage wird ignoriert + 2006-12-12 - Version 2.4.0 - USTVA jetzt mit Taxbird und Winston Anbindung (als Templates verfügbar) - Neues Steuersystem für beliebig viele Steuersätze pro Konto diff --git a/doc/dokumentenvorlagen-und-variablen.html b/doc/dokumentenvorlagen-und-variablen.html index 029ce0047..0620af35d 100644 --- a/doc/dokumentenvorlagen-und-variablen.html +++ b/doc/dokumentenvorlagen-und-variablen.html @@ -85,15 +85,6 @@ td { Blöcke, bedingte Anweisungen und Schleifen
      -
    1. - Einschänkungen für Blöcke in LaTeX-Vorlagen
    2. - -
    3. - Einschänkungen für Blöcke in OpenDocument-Vorlagen
    4. - -
    5. - Die include-Anweisung
    6. -
    7. Der if not-Block
    8. @@ -281,6 +272,10 @@ td { name Firmenname + + payment_terms + Zahlungskonditionen + phone Telefonnummer @@ -300,6 +295,16 @@ td { Land (Lieferadresse) * + + shiptodepartment1 + Abteilung 1 (Lieferadresse) + * + + + shiptodepartment2 + Abteilung 2 (Lieferadresse) + * + shiptoemail Email (Lieferadresse) @@ -338,10 +343,6 @@ td { taxnumber Steuernummer - - terms - Zahlungsziel - vendoremail Email des Lieferanten; nur für Lieferanten @@ -383,6 +384,26 @@ td {

      + + + + + + + + + + + + + + + + + + + + @@ -399,6 +420,10 @@ td { + + + + @@ -486,6 +511,10 @@ td { + + + + @@ -671,47 +700,11 @@ td { gesondert behandelt werden. Diese sind wie Variablennamen in spezieller Weise markiert: <%anweisung%>

      -

      - Einschänkungen für Blöcke in LaTeX-Vorlagen

      - -

      Achtung: Blöcke können in LaTeX-Vorlagen momentan nicht - verschachtelt werden. Das bedeutet, dass innerhalb einer - <%foreach%>-Schleife keine - <%if%>-Abfragen verwendet werden können. Dieses - kann man aber mit LaTeX-Bordmitteln selber nachgebildet werden. Dazu muss - im Vorspann das Paket ifthen eingebunden werden. Das Konstrukt - selber sieht dann wie folgt aus:

      - -

      \ifthenelse{\equal{<%variable%>}{}}{}{Dieser - Text erscheint nur, wenn <%variable%> nicht leer ist.}

      - -

      - Einschänkungen für Blöcke in OpenDocument-Vorlagen

      - -

      Die eben erwähnten Einschränkungen für - LaTeX-Vorlagen gelten in abgeschwächter Form auch für - OpenDocument-Vorlagen. Auch bei OpenDocument-Vorlagen können - Blöcke nicht verschachtelt werden. Einzige Ausnahme ist, dass - <if> und - <ifnot>-Blöcke innerhalb von - <foreach>-Blöcken auftreten - dürfen.

      - -

      Die include-Anweisung

      - -

      <%include dateiname.ext%>

      - -

      Dieser Block funktioniert nur in LaTeX- und HTML-Vorlagen.

      - -

      Fügt den Inhalt einer Datei an der entsprechenden Stelle ein. Der - eingefügte Text wird ganz normal durch den Parser behandelt und kann - Variablen und Blöcke enthalten.

      -

      Der if not-Block

      <%if not variablenname%>
      ...
      - <%end if>

      + <%end>

      Eine normale "if-not-then"-Bedingung. Die Zeilen zwischen dem "if not" und dem "end" werden nur ausgegeben, wenn die Variable "variablenname" nicht @@ -721,7 +714,7 @@ td {

      <%if variablenname%>
      ...
      - <%end if>

      + <%end>

      Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if" und dem "end" werden nur ausgegeben, wenn die Variable "variablenname" gesetzt und @@ -731,7 +724,7 @@ td {

      <%foreach variablenname%>
      ...
      - <%end foreach>

      + <%end>

      Fügt die Zeilen zwischen den beiden Anweisungen so oft ein, wie das Perl-Array der Variablen "variablenname" Elemente enthät. Dieses @@ -749,21 +742,20 @@ td { Artikelnummer: <%number%>
      Beschreibung: <%description%>
      ...
      - <%end foreach>

      + <%end>

      Besonderheit in OpenDocument-Vorlagen: Tritt ein - <foreach>-Blcok innerhalb einer Tabellenzelle + <foreach>-Block innerhalb einer Tabellenzelle auf, so wird die komplette Tabellenzeile so oft wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der Inhalt - zwischen <foreach> und <end - foreach> wiederholt, nicht aber die komplette Zeile, in - der er steht.

      + zwischen <foreach> und <end> + wiederholt, nicht aber die komplette Zeile, in der er steht.

      Der pagebreak-Block

      <%pagebreak ZpZ ZeS ZzS%>
      ...
      - <%end pagebreak%>

      + <%end>

      Dieser Block existiert nur in LaTeX-Vorlagen.

      diff --git a/doc/sql-upgrade-dateien.txt b/doc/sql-upgrade-dateien.txt new file mode 100644 index 000000000..5b9ae1808 --- /dev/null +++ b/doc/sql-upgrade-dateien.txt @@ -0,0 +1,142 @@ +Neuer Mechanismus für SQL-Upgradedateien +---------------------------------------- + +Der alte Mechanismus für SQL-Upgradescripte, der auf einer +Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für +diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele +Entwicklung im stable- und unstable-Baum betrifft. + +Dieser Mechanismus wurde für Lx-Office 2.4.1 deutlich erweitert. Es +werden weiterhin alle Scripte aus sql/Pg-upgrade +ausgeführt. Zusätzlich gibt es aber ein zweites Verzeichnis, +sql/Pg-upgrade2. In diesem Verzeichnis muss pro Datenbankupgrade eine +Datei existieren, die neben den eigentlich auszuführenden SQL- oder +Perl-Befehlen einige Kontrollinformationen enthält. + +Neu sind die Kontrollinformationen, die Abhängigkeiten und Prioritäten +definieren können werden, sodass Datenbankscripte zwar in einer +sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER TABLE" +erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE" angelegt +wurde), diese Reihenfolge aber so flexibel ist, dass man keine +Versionsnummern mehr braucht. + +Lx-Office merkt sich dabei, welches der Upgradescripte in +sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht +erneut aus. Dazu dient die Tabelle "schema_info", die bei der +Anmeldung automatisch angelegt wird. + +Format der Kontrollinformationen +-------------------------------- + +Die Kontrollinformationen sollten sich am Anfang der jeweiligen +Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält, +hat dabei das folgende Format: + +Für SQL-Upgradedateien: + +-- @key: value + + +Für Perl-Upgradedateien: + +# @key: value + + +Leerzeichen vor "value" werden entfern. + +Die folgenden Schlüsselworte werden verarbeitet: + +* tag: Wird zwingend benötigt. Dies ist der "Name" des + Upgrades. Dieser "tag" kann von anderen Kontrolldateien in ihren + Abhängigkeiten verwendet werden (Schlüsselwort "depends"). Der "tag" + ist auch der Name, der in der Datenbank eingetragen wird. + + Normalerweise sollte die Kontrolldatei genau so heißen wie der + "tag", nur mit der Endung ".sql" bzw. "pl". + + Ein Tag darf nur aus alphanumerischen Zeichen sowie den Zeichen _ - + ( ) bestehen. Insbesondere sind Leerzeichen nicht erlaubt und + sollten stattdessen mit Unterstrichen ersetzt werden. + +* description: Benötigt. Eine Beschreibung, was in diesem Update + passiert. Diese wird dem Benutzer beim eigentlichen Datenbankupdate + angezeigt. Während der Tag in englisch gehalten sein sollte, sollte + die Beschreibung auf Deutsch erfolgen. + +* depends: Optional. Eine mit Leerzeichen getrennte Liste von "tags", + von denen dieses Upgradescript abhängt. Lx-Office stellt sicher, + dass die in dieser Liste aufgeführten Scripte bereits durchgeführt + wurden, bevor dieses Script ausgeführt wird. + + Abhängigkeiten werden rekursiv betrachtet. Wenn also ein Script "b" + existiert, das von Änderungen in "a" abhängt, und eine neue + Kontrolldatei für "c" erstellt wird, die von Änderungen in "a" und + "b" abhängt, so genügt es, in "c" nur den Tag "b" als Abhängigkeit + zu definieren. + + Es ist nicht erlaubt, sich selbst referenzierende Abhängigkeiten zu + definieren (z.B. "a" -> "b", "b" -> "c" und "c" -> "a"). + +* priority: Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in + der Scripte ausgeführt werden, die die gleichen Abhängigkeitstiefen + besitzen. Fehlt dieser Parameter, so wird der Wert 1000 benutzt. + + Dies ist reine Kosmetik. Für echte Reihenfolgen muss "depends" + benutzt werden. Lx-Office sortiert die auszuführenden Scripte zuerst + nach der Abhängigkeitstiefe (wenn "z" von "y" abhängt und "y" von + "x", so hat "z" eine Abhängigkeitstiefe von 2, "y" von 1 und "x" von + 0. "x" würde hier zuerst ausgeführt, dann "y", dann "z"), dann nach + der Priorität und bei gleicher Priorität alphabetisch nach dem + "tag". + +Hilfsscript dbupgrade2_tool.pl +------------------------------ + +Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern, existiert +ein Hilfsscript namens "scripts/dbupgrade2_tool.pl". Es muss aus dem +Lx-Office-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool +liest alle Datenbankupgradescripte aus dem Verzeichnis sql/Pg-upgrade2 +aus. Es benutzt dafür die gleichen Methoden wie Lx-Office selber, +sodass alle Fehlersituationen von der Kommandozeile überprüft werden +können. + +Wird dem Script kein weiterer Parameter übergeben, so wird nur eine +Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann sich +aber auch Informationen auf verschiedene Art ausgeben lassen: + +1. Listenform: "./scripts/dbupgrade2_tool.pl --list" + + Gibt eine Liste aller Scripte aus. Die Liste ist in der Reihenfolge + sortiert, in der Lx-Office die Scripte ausführen würde. Es werden + neben der Listenposition der Tag, die Abhängigkeitstiefe und die + Priorität ausgegeben. + +2. Baumform: "./scripts/dbupgrade2_tool.pl --tree" + + Listet alle Tags in Baumform basierend auf den Abhängigkeiten + auf. Die "Wurzelknoten" sind dabei die Scripte, von denen keine + anderen abhängen. Die Unterknoten sind Scripte, die beim + übergeordneten Script als Abhängigkeit eingetragen sind. + +3. Umgekehrte Baumform: "./scripts/dbupgrade2_tool.pl --rtree" + + Listet alle Tags in Baumform basierend auf den Abhängigkeiten auf. + Die "Wurzelknoten" sind dabei die Scripte mit der geringsten + Abhängigkeitstiefe. Die Unterknoten sind Scripte, die das + übergeordnete Script als Abhängigkeit eingetragen haben. + +4. Baumform mit Postscriptausgabe: "./scripts/dbupgrade2_tool.pl --graphviz" + + Benötigt das Tool "graphviz", um mit seiner Hilfe die Baumform aus + 3. in eine Postscriptdatei namens "db_dependencies.ps" + auszugeben. Dies ist vermutlich die übersichtlichste Form, weil + hierbei jeder Knoten nur einmal ausgegeben wird. Bei den + Textmodusbaumformen hingegen können Knoten und all ihre + Abhängigkeiten mehrfach ausgegeben werden. + +5. Scripte, von denen kein anderes Script abhängt: + "./scripts/dbupgrade2_tool.pl --nodeps" + + Listet die Tags aller Scripte auf, von denen keine anderen Scripte + abhängen. + diff --git a/image/bg_css_menu.png b/image/bg_css_menu.png new file mode 100644 index 000000000..ce04a9871 Binary files /dev/null and b/image/bg_css_menu.png differ diff --git a/image/expand3.gif b/image/expand3.gif new file mode 100644 index 000000000..2c46f4ef3 Binary files /dev/null and b/image/expand3.gif differ diff --git a/js/show_form_details.js b/js/show_form_details.js new file mode 100644 index 000000000..df2ff615b --- /dev/null +++ b/js/show_form_details.js @@ -0,0 +1,4 @@ +function show_form_details(new_value) { + document.forms[0].show_details.value = new_value; + document.getElementById("update_button").click(); +} diff --git a/locale/de/Pg-upgrade-2.2.0.25-2.2.0.26 b/locale/de/Pg-upgrade-2.2.0.25-2.2.0.26 index 1a79fbdd3..62e6eee31 100644 --- a/locale/de/Pg-upgrade-2.2.0.25-2.2.0.26 +++ b/locale/de/Pg-upgrade-2.2.0.25-2.2.0.26 @@ -8,8 +8,11 @@ $self->{texts} = { }; $self->{subs} = { + 'get_base_unit' => 'get_base_unit', 'mydberror' => 'mydberror', 'myshowerror' => 'myshowerror', + 'retrieve_units' => 'retrieve_units', + 'unit_select_data' => 'unit_select_data', 'update_units' => 'update_units', 'update_units_add_unit' => 'update_units_add_unit', 'update_units_assign_known' => 'update_units_assign_known', diff --git a/locale/de/admin b/locale/de/admin index 0ebbd1755..cceb1f20b 100644 --- a/locale/de/admin +++ b/locale/de/admin @@ -29,11 +29,13 @@ $self->{texts} = { 'Date Format' => 'Datumsformat', 'Delete' => 'Löschen', 'Delete Dataset' => 'Datenbank löschen', + 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', 'Directory' => 'Verzeichnis', 'Driver' => 'Treiber', 'Dropdown Limit' => 'Auswahllistenbegrenzung', 'E-mail' => 'eMail', 'Edit User' => 'Benutzerdaten bearbeiten', + 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', 'Existing Datasets' => 'existierende Datenbanken', 'Fax' => 'Fax', 'File locked!' => 'Datei gesperrt!', @@ -48,6 +50,9 @@ $self->{texts} = { 'Login' => 'Anmeldung', 'Login name missing!' => 'Loginname fehlt.', 'Manager' => 'Manager', + 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', + 'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', + 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', 'Multibyte Encoding' => 'Schriftsatz', 'Name' => 'Name', 'New Templates' => 'neue Vorlagen', @@ -55,6 +60,7 @@ $self->{texts} = { 'No Dataset selected!' => 'Keine Datenbank ausgewählt!', 'Nothing to delete!' => 'Es konnte nichts gelöscht werden!', 'Number Format' => 'Zahlenformat', + 'Old (on the side)' => 'Alt (seitlich)', 'Oracle Database Administration' => 'Oracle Datenbankadministration', 'Password' => 'Passwort', 'Password changed!' => 'Passwort geändert!', @@ -68,15 +74,19 @@ $self->{texts} = { 'Setup Menu' => 'Menüsetup', 'Setup Templates' => 'Vorlagen auswählen', 'Signature' => 'Unterschrift', - 'Steuernummer' => 'Steuernummer', 'Stylesheet' => 'Stilvorlage', 'Supervisor' => 'Supervisor', + 'Tax number' => 'Steuernummer', 'Templates' => 'Vorlagen', + 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', 'The following Datasets are not in use and can be deleted' => 'Die folgenden Datenbanken sind nicht in Verwendung und können gelöscht werden', 'The following Datasets need to be updated' => 'Folgende Datenbanken müssen aktualisiert werden', 'The passwords do not match.' => 'Die Passwörter stimmen nicht überein.', 'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine Änderungen vorgenommen!', 'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => 'Um einer Gruppe einen neuen Benutzer hinzuzufügen, ändern und speichern Sie am einfachsten einen bestehen den Zugriffsnamen. Unter dem neuen Namen wird dann ein Benutzer mit denselben Einstellungen angelegt.', + 'Top (CSS)' => 'Oben (mit CSS)', + 'Top (Javascript)' => 'Oben (mit Javascript)', + 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'Unlock System' => 'System entsperren', 'Update Dataset' => 'Datenbank aktualisieren', 'Use Templates' => 'benutze Vorlagen', diff --git a/locale/de/all b/locale/de/all index 609e65f60..d4a86883f 100644 --- a/locale/de/all +++ b/locale/de/all @@ -33,6 +33,7 @@ $self->{texts} = { 'Account' => 'Konto', 'Account Number' => 'Kontonummer', 'Account Number missing!' => 'Kontonummer fehlt!', + 'Account Nummer' => 'Kontonummer', 'Account Type' => 'Kontoart', 'Account Type missing!' => 'Kontoart fehlt!', 'Account deleted!' => 'Konto gelöscht!', @@ -90,12 +91,14 @@ $self->{texts} = { 'All Accounts' => 'Alle Konten', 'All Datasets up to date!' => 'Alle Datenbanken sind auf aktuellem Stand.', 'All changes in that file have been reverted.' => 'Alle Änderungen in dieser Datei wurden rückgängig gemacht.', + 'Amended Advance Turnover Tax Return' => 'Berichtigte Anmeldung', + 'Amended Advance Turnover Tax Return (Nr. 10)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)', 'Amount' => 'Betrag', 'Amount Due' => 'Betrag fällig', - 'Angaben zum Finanzamt' => 'Angaben zum Finanzamt', 'Ansprechpartner' => '', - 'Application Error. No Format given!' => 'Fehler in der Anwendung. Das Format fehlt.', - 'Application Error. Wrong Format: ' => 'Fehler in der Anwendung. Falsches Format: ', + 'Application Error. No Format given' => 'Fehler in der Anwendung. Das Ausgabeformat fehlt.', + 'Application Error. Wrong Format' => 'Fehler in der Anwendung. Falsches Format: ', + 'Applying :' => 'Führe aus:', 'Apr' => 'Apr', 'April' => 'April', 'Are you sure you want to delete Invoice Number' => 'Soll die Rechnung mit folgender Nummer wirklich gelöscht werden:', @@ -113,6 +116,7 @@ aktualisieren wollen?', 'Asset' => 'Aktiva/Mittelverwendung', 'Assign new units' => 'Neue Einheiten zuweisen', 'Assign units' => 'Einheiten zuweisen', + 'Assume Tax Consultant Data in Tax Computation?' => 'Beraterdaten in UStVA übernehmen?', 'Attach PDF:' => 'PDF anhängen', 'Attachment' => 'als Anhang', 'Audit Control' => 'Bücherkontrolle', @@ -123,35 +127,27 @@ aktualisieren wollen?', 'Aufwand Inland' => '', 'Aug' => 'Aug', 'August' => 'August', - 'Ausgabeformat' => 'Ausgabeformat', - 'Ausgabeformat auswählen...' => 'Ausgabeformat auswählen...', 'Auto Send?' => 'Auto. Versand?', 'BG anzeigen' => 'BG anzeigen', 'BG hinzufügen' => 'BG hinzufügen', - 'BLZ: ' => 'BLZ: ', 'BOM' => 'Stückliste', 'BWA' => 'BWA', 'Back' => 'Zurück', - 'Back to user config...' => 'Benutzereinstellungen', 'Backup sent to' => 'Eine Sicherungskopie wurde gesandt an', 'Balance' => 'Bilanz', 'Balance Sheet' => 'Bilanz', 'Bank' => 'Bank', + 'Bank Code' => 'BLZ: ', + 'Bank Code (long)' => 'Bankleitzahl (BLZ)', 'Bank Code Number' => 'Bankleitzahl', - 'Bankleitzahl' => 'Bankleitzahl', - 'Bankleitzahl (BLZ)' => 'Bankleitzahl (BLZ)', - 'Bankverbindung' => 'Bankverbindung', - 'Bankverbindung des Finanzamts' => 'Bankverbindung des Finanzamts', - 'Bankverbindungen' => 'Bankverbindungen', - 'Bankverbindungen des Finanzamts' => 'Bankverbindungen des Finanzamts', + 'Bank Connection' => 'Bankverbindung', + 'Bank Connection Tax Office' => 'Bankverbindung des Finanzamts', 'Base unit' => 'Basiseinheit', 'Batch Printing' => 'Druck', 'Bcc' => 'Bcc', 'Belegnummer' => 'Buchungsnummer', - 'Beraterdaten in UStVA übernehmen?' => 'Beraterdaten in UStVA übernehmen?', 'Beratername' => 'Beratername', 'Beraternummer' => 'Beraternummer', - 'Berichtigte Anmeldung' => 'Berichtigte Anmeldung', 'Bestandskonto' => '', 'Bilanz' => 'Bilanz', 'Billing Address' => 'Rechnungsadresse', @@ -160,9 +156,6 @@ aktualisieren wollen?', 'Birthday' => 'Geburtstag', 'Bis' => 'bis', 'Bis Konto: ' => 'bis Konto: ', - 'Bitte Angaben überprüfen' => 'Bitte Angaben überprüfen', - 'Bitte alle Angaben überprüfen' => 'Bitte alle Angaben überprüfen', - 'Bitte eine Steuernummer angeben' => 'Bitte eine Steuernummer angeben', 'Body:' => 'Text:', 'Books are open' => 'Die Bücher sind geöffnet.', 'Bought' => 'Gekauft', @@ -216,12 +209,15 @@ aktualisieren wollen?', 'Character Set' => 'Zeichensatz', 'Chart of Accounts' => 'Kontenübersicht', 'Chart of accounts' => 'Kontenrahmen', - 'Check' => 'Scheck', + 'Check Details' => 'Bitte Angaben überprüfen', 'Checks' => 'Schecks', 'Choose Customer' => 'Endkunde wählen:', + 'Choose Outputformat' => 'Ausgabeformat auswählen...', 'Choose Vendor' => 'Händler wählen', + 'Choose a Tax Number' => 'Bitte eine Steuernummer angeben', 'City' => 'Stadt', 'Cleared Balance' => 'abgeschlossen', + 'Clearing Tax Received (No 71)' => 'Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)', 'Click on login name to edit!' => 'Zum Bearbeiten den Zugriffsnamen anklicken!', 'Close' => 'Übernehmen', 'Close Books up to' => 'Die Bücher abschließen bis zum', @@ -244,6 +240,7 @@ aktualisieren wollen?', 'Copies' => 'Kopien', 'Copy to COA' => 'In Kontenplan kopieren', 'Cost Center' => 'Kostenstelle', + 'Costs' => 'Kosten', 'Could not copy %s to %s. Reason: %s' => 'Die Datei "%s" konnte nicht nach "%s" kopiert werden. Grund: %s', 'Could not open the file users/members.' => 'Die Datei "users/members" konnte nicht geöffnet werden.', 'Could not rename %s to %s. Reason: %s' => 'Die Datei "%s" konnte nicht in "%s" umbenannt werden. Grund: %s', @@ -263,6 +260,7 @@ aktualisieren wollen?', 'Credit Note Number' => 'Gutschriftnummer', 'Credit Tax' => 'Umsatzsteuer', 'Credit Tax Account' => 'Umsatzsteuerkonto', + 'Credit note (one letter abbreviation)' => 'G', 'Curr' => 'Währung', 'Currency' => 'Währung', 'Current' => 'Betrag', @@ -304,7 +302,6 @@ aktualisieren wollen?', 'Date received missing!' => 'Empfangsdatum fehlt!', 'Datenträgernummer' => 'Datenträgernummer', 'Datum von' => 'Datum von', - 'Dauerfristverlängerung' => 'Dauerfristverlängerung', 'Debit' => 'Soll', 'Debit Account' => 'Sollkonto', 'Debit Tax' => 'Vorsteuer', @@ -314,6 +311,7 @@ aktualisieren wollen?', 'December' => 'Dezember', 'Decimalplaces' => 'Dezimalstellen', 'Decrease' => 'Verringern', + 'Default template format' => 'Standardvorlagenformat', 'Delete' => 'Löschen', 'Delete Account' => 'Konto löschen', 'Delete Dataset' => 'Datenbank löschen', @@ -322,6 +320,7 @@ aktualisieren wollen?', 'Department deleted!' => 'Abteilung gelöscht.', 'Department saved!' => 'Abteilung gespeichert.', 'Departments' => 'Abteilungen', + 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', 'Deposit' => 'Gutschrift', 'Description' => 'Beschreibung', 'Description missing!' => 'Beschreibung fehlt.', @@ -354,11 +353,12 @@ gestartet', 'Dunnings' => 'Mahnungen', 'E-mail' => 'eMail', 'E-mail Statement to' => 'Fälligkeitsabrechnung als eMail an', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', - 'ELSTER Export nach Taxbird' => 'ELSTER-Export nach Taxbird', + 'ELSTER Export (Taxbird)' => 'ELSTER-Export nach Taxbird', + 'ELSTER Export (Winston)' => 'ELSTER Export nach Winston', 'ELSTER Export nach Winston' => 'ELSTER Export nach Winston', - 'ELSTER-Steuernummer: ' => 'ELSTER-Steuernummer: ', + 'ELSTER Tax Number' => 'ELSTER-Steuernummer: ', 'EU with VAT ID' => 'EU mit UstId-Nummer', 'EU without VAT ID' => 'EU ohne UstId-Nummer', 'EUER' => 'Einnahmen-/Überschussrechnung', @@ -416,6 +416,7 @@ gestartet', 'Erlöse EU o. UStId' => 'Erlöse EU o. UStId', 'Erlöse Inland' => 'Erlöse Inland', 'Error' => 'Fehler', + 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', 'Error!' => 'Fehler!', 'Exch' => 'Wechselkurs.', 'Exchangerate' => 'Wechselkurs', @@ -433,21 +434,18 @@ gestartet', 'Export Buchungsdaten' => 'Export Buchungsdaten', 'Export Stammdaten' => 'Export Stammdaten', 'Extended' => 'Gesamt', + 'Extension Of Time' => 'Dauerfristverlängerung', 'Factor' => 'Faktor', 'Fax' => 'Fax', - 'Fax. : ' => 'Fax. : ', - 'Fax.: ' => 'Fax.: ', 'Feb' => 'Feb', 'February' => 'Februar', 'Fee' => 'Gebühr', 'File locked!' => 'Datei gesperrt!', - 'Finanzamt' => 'Finanzamt', - 'Finanzamt - Einstellungen' => 'Finanzamt - Einstellungen', - 'Firma' => 'Firma', 'Folgekonto' => 'Folgekonto', 'For each unit there\'s either no or exactly one base unit. If you chose a base unit then you also have to chose a factor. That way the new unit will be defined as a multiple of the base unit. The base unit must be the "smaller" one. A factor may not be less than 1. Therefore you may define "kg" with the base unit "g" and a factor of "1", but not the other way round.' => 'Einheiten haben entweder keine oder genau eine Basiseinheit, von der sie ein Vielfaches sind. Wenn Sie eine Basiseinheit auswählen, dann müssen Sie auch einen Faktor eingeben. Sie müssen Einheiten als ein Vielfaches einer kleineren Einheit eingeben. So ist die Definition von "kg" mit der Basiseinheit "g" und dem Faktor 1000 zulässig, die Definition von "g" mit der Basiseinheit "kg" und dem Faktor "0,001" hingegen nicht.', 'Foreign Exchange Gain' => 'Wechselkurserträge', 'Foreign Exchange Loss' => 'Wechselkursaufwendungen', + 'Form details (second row)' => 'Formulardetails (zweite Positionszeile)', 'Formula' => 'Formel', 'Free report period' => 'Freier Zeitraum', 'Fristsetzung' => 'Fristsetzung', @@ -470,12 +468,11 @@ gestartet', 'Groups' => 'Warengruppen', 'Gültig ab' => 'Gültig ab', 'HTML' => 'HTML', - 'HTML Templates' => 'HTML-Vorlagen', 'Heading' => 'Überschrift', 'Help' => 'Hilfe', - 'Help:' => 'Hilfe:', + 'Hide by default' => 'Standardmäßig verstecken', 'Hint-Missing-Preferences' => 'Bitte fehlende USTVA Einstellungen ergänzen (Menüpunkt: Programm)', - 'Hinweise' => 'Hinweise', + 'Hints' => 'Hinweise', 'Homepage' => 'Homepage', 'Host' => 'Datenbankcomputer', 'Hostname missing!' => 'Computername fehlt!', @@ -487,8 +484,6 @@ gestartet', 'If you see this message, you most likely just setup your LX-Office and haven\'t added any entry types. If this is the case, the option is accessible for administrators in the System menu.' => 'Wenn Sie diese Meldung sehen haben Sie wahrscheinlich ein frisches LX-Office Setup und noch keine Buchungsgruppen eingerichtet. Ein Administrator kann dies im Systemmenü erledigen.', 'Image' => 'Grafik', 'Import CSV' => '', - 'Impossible to create yearly Tax Report as PDF or Postscript
      Not yet implemented!' => 'Es ist noch nicht möglich, die Umsatzsteuervoranmeldung für das ganze Jahr als PDF oder Postscript auszugeben. Noch nicht implementiert.', - 'Impossible to create yearly Tax Report via Winston or Taxbird.
      Not yet implemented!' => 'Es ist noch nicht möglich, die Umsatzsteuervoranmeldung für das ganze Jahr für Winston oder Taxbird auszugeben. Noch nicht implementiert.', 'In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.' => 'In Lx-Office 2.4.0 muss der Administrator in den Systemeinstellungen eine Liste von verwendbaren Einheiten angeben.', 'In-line' => 'im Text', 'Include Exchangerate Difference' => 'Wechselkursunterschied einbeziehen', @@ -522,6 +517,7 @@ gestartet', 'Invno.' => 'Rg. Nr.', 'Invnumber' => 'Rechnungsnummer', 'Invoice' => 'Rechnung', + 'Invoice (one letter abbreviation)' => 'R', 'Invoice Date' => 'Rechnungsdatum', 'Invoice Date missing!' => 'Rechnungsdatum fehlt!', 'Invoice Duedate' => 'Fälligkeitsdatum', @@ -530,7 +526,6 @@ gestartet', 'Invoice deleted!' => 'Rechnung gelöscht!', 'Invoices' => 'Rechnungen', 'Is this a summary account to record' => 'Buchungskonto in', - 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)', 'It is possible to do this automatically for some Buchungsgruppen, but not for all.' => 'Es ist möglich, dies für einige, aber nicht für alle Buchungsgruppen automatisch zu erledigen.', 'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => 'Das ist für einige Einheiten automatisch möglich, aber bei anderen muss der Benutzer die neue Einheit auswählen.', 'Item deleted!' => 'Artikel gelöscht!', @@ -542,20 +537,13 @@ gestartet', 'July' => 'Juli', 'Jun' => 'Jun', 'June' => 'Juni', - 'KNE Export erfolgreich!' => 'KNE-Export erfolgreich!', + 'KNE-Export erfolgreich!' => 'KNE-Export erfolgreich!', 'KNr. beim Kunden' => 'KNr. beim Kunden', - 'Kein Firmenname hinterlegt!' => 'Kein Firmenname hinterlegt!', - 'Keine Firmenadresse hinterlegt!' => 'Keine Firmenadresse hinterlegt!', - 'Kontakt' => 'Kontakt', 'Konten' => 'Konten', - 'Konto: ' => 'Konto: ', - 'Kontonummer' => 'Kontonummer', 'Kontonummernerweiterung (KNE)' => 'Kontonummernerweiterung (KNE)', 'Korrektur' => 'Korrektur', - 'Kreditinstitut' => 'Kreditinstitut', 'Kundennummer' => 'Kundennummer', 'L' => 'L', - 'LaTeX Templates' => 'LaTeX-Vorlagen', 'Language' => 'Sprache', 'Language Values' => 'Sprachübersetzungen', 'Language deleted!' => 'Sprache gelöscht!', @@ -595,6 +583,7 @@ gestartet', 'List Pricegroups' => 'Preisgruppen anzeigen', 'List Printer' => 'Drucker anzeigen', 'List Transactions' => 'Buchungsliste', + 'Local Tax Office Preferences' => 'Angaben zum Finanzamt', 'Lock System' => 'System sperren', 'Lockfile created!' => 'System gesperrt!', 'Lockfile removed!' => 'System entsperrt!', @@ -602,6 +591,7 @@ gestartet', 'Login Name' => 'Benutzername', 'Login name missing!' => 'Loginname fehlt.', 'Logout' => 'Abmeldung', + 'Long Dates' => 'Lange Monatsnamen', 'Long Description' => 'Langtext', 'Lx-Office 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.' => 'Lx-Office 2.4.0 führt zwei neue Konzepte ein: Steuerzonen und Buchungsgruppen.', 'Lx-Office is about to update the database . You should create a backup of the database before proceeding because the backup might not be reversible.' => 'Lx-Office wird gleich die Datenbank aktualisieren. Sie sollten eine Sicherungskopie der Datenbank erstellen, bevor Sie fortfahren, da die Aktualisierung unter Umständen nicht umkehrbar ist.', @@ -620,6 +610,8 @@ gestartet', 'Method' => 'Verfahren', 'Microfiche' => 'Mikrofilm', 'Minimum Amount' => 'Mindestbetrag', + 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', + 'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', 'Missing Method!' => 'Fehlender Voranmeldungszeitraum', 'Missing Preferences: Outputroutine disabled' => 'Die Ausgabefunktionen sind wegen unzureichender Voreinstellungen deaktiviert!', 'Missing Tax Authoritys Preferences' => 'Fehlende Angaben zum Finanzamt!', @@ -629,6 +621,7 @@ gestartet', 'Model' => 'Modell', 'Monat' => 'Monat', 'Monthly' => 'monatlich', + 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', 'Multibyte Encoding' => 'Schriftsatz', 'MwSt. inkl.' => 'MwSt. inkl.', 'N/A' => 'N.Z.', @@ -641,6 +634,8 @@ gestartet', 'New unit' => 'Neue Einheit', 'Next Dunning Level' => 'Nächste Mahnstufe', 'No' => 'Nein', + 'No Company Address given' => 'Keine Firmenadresse hinterlegt!', + 'No Company Name given' => 'Kein Firmenname hinterlegt!', 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', 'No Database Drivers available!' => 'Kein Datenbanktreiber verfügbar!', 'No Dataset selected!' => 'Keine Datenbank ausgewählt!', @@ -667,15 +662,18 @@ gestartet', 'Number' => 'Nummer', 'Number Format' => 'Zahlenformat', 'Number missing in Row' => 'Nummer fehlt in Zeile', + 'Number of copies' => 'Anzahl Kopien', 'O' => 'O', - 'OBE Export erfolgreich!' => 'OBE-Export erfolgreich!', + 'OBE-Export erfolgreich!' => 'OBE-Export erfolgreich!', 'Obsolete' => 'Ungültig', 'Oct' => 'Okt', 'October' => 'Oktober', + 'Old (on the side)' => 'Alt (seitlich)', 'On Hand' => 'Auf Lager', 'On Order' => 'Ist bestellt', 'Open' => 'Offen', 'OpenDocument/OASIS' => 'OpenDocument/OASIS', + 'Openings' => 'Öffnungszeiten', 'Oracle Database Administration' => 'Oracle Datenbankadministration', 'Order' => 'Auftrag', 'Order Date' => 'Auftragsdatum', @@ -689,10 +687,10 @@ gestartet', 'Out of balance transaction!' => 'Buchung ist nicht ausgeglichen!', 'Out of balance!' => 'Summen stimmen nicht berein!', 'Output Number Format' => 'Zahlenformat (Ausgabe)', + 'Outputformat' => 'Ausgabeformat', 'Own Product' => 'eigenes Produkt', 'PDF' => 'PDF', 'PDF (OpenDocument/OASIS)' => 'PDF (OpenDocument/OASIS)', - 'PLZ, Ort' => 'PLZ, Ort', 'Packing List' => 'Lieferschein', 'Packing List Date missing!' => 'Datum für Verpackungsliste fehlt!', 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', @@ -735,6 +733,7 @@ gestartet', 'Please select a customer from the list below.' => 'Bitte einen Endkunden aus der Liste auswählen', 'Please select a vendor from the list below.' => 'Bitte einen Händler aus der Liste auswählen', 'Please select the chart of accounts this installation is using from the list below.' => 'Bitte wählen Sie den Kontenrahmen aus, der bei dieser Installation verwendet wird.', + 'Plural' => 'Plural', 'Port' => 'Port', 'Port missing!' => 'Portangabe fehlt!', 'Post' => 'Buchen', @@ -756,6 +755,7 @@ gestartet', 'Pricegroups' => 'Preisgruppen', 'Print' => 'Drucken', 'Print and Post' => 'Drucken und Buchen', + 'Print options' => 'Druckoptionen', 'Printed' => 'gedruckt.', 'Printer' => 'Drucker', 'Printer Command' => 'Druckbefehl', @@ -889,6 +889,8 @@ gestartet', 'Shopartikel' => 'Shopartikel', 'Short' => 'kurz', 'Show' => 'Zeigen', + 'Show by default' => 'Standardmäßig anzeigen', + 'Show details' => 'Details anzeigen', 'Show old dunnings' => 'Alte Mahnungen anzeigen', 'Signature' => 'Unterschrift', 'Skonto' => 'Skonto', @@ -906,16 +908,13 @@ gestartet', 'Step 2 of 3: Services' => 'Schritt 2 von 3: Dienstleistungen', 'Step 3 of 3: Assemblies' => 'Schritt 3 von 3: Erzeugnisse', 'Step 3 of 3: Default units' => 'Schritt 3 von 3: Standardeinheiten', - 'Steuerberater/-in' => 'Steuerberater/-in', - 'Steuernummer' => 'Steuernummer', - 'Steuernummer: ' => 'Steuernummer: ', 'Steuersatz' => 'Steuersatz', 'Stock' => 'einlagern', 'Stock Assembly' => 'Erzeugnis einlagern', 'Storno' => 'Storno', + 'Storno (one letter abbreviation)' => 'S', 'Storno Invoice' => 'Stornorechnung', 'Storno Packing List' => 'Stornolieferschein', - 'Straße' => 'Straße', 'Street' => 'Straße', 'Stylesheet' => 'Stilvorlage', 'Subject' => 'Betreff', @@ -926,23 +925,28 @@ gestartet', 'TOP100' => 'Top 100', 'Tax' => 'Steuer', 'Tax Accounts' => 'Steuerkonto', + 'Tax Consultant' => 'Steuerberater/-in', 'Tax Included' => 'Steuer im Preis inbegriffen', 'Tax Number' => 'Steuernummer', 'Tax Number / SSN' => 'Steuernummer', + 'Tax Office' => 'Finanzamt', + 'Tax Office Preferences' => 'Finanzamt - Einstellungen', + 'Tax Period' => 'Voranmeldungszeitraum', 'Tax collected' => 'vereinnahmte Steuer', + 'Tax number' => 'Steuernummer', 'Tax paid' => 'Vorsteuer', 'Taxable' => 'Steuerpflichtig', + 'Taxation' => 'Versteuerungs Verfahren', 'Taxkey' => 'Steuerschlüssel', - 'Tel. : ' => 'Tel. : ', - 'Tel.: ' => 'Tel.: ', - 'Telefon' => 'Telefon', + 'Tel' => 'Tel', + 'Telephone' => 'Telefon', 'Template' => 'Druckvorlage', 'Template Code' => 'Vorlagenkürzel', 'Template Code missing!' => 'Vorlagenkürzel fehlt!', 'Template saved!' => 'Schablone gespeichert!', 'Templates' => 'Vorlagen', 'Terms missing in row ' => '+Tage fehlen in Zeile ', - 'Terms: Net' => 'Zahlungsziel', + 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', 'The base unit does not exist or it is about to be deleted in row %d.' => 'Die Basiseinheit in Zeile %d existiert nicht oder soll gelöscht werden.', 'The base unit does not exist.' => 'Die Basiseinheit existiert nicht.', 'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.' => 'Die Beziehungen der Einheiten dürfen keine Schleifen beinhalten (z.B. wenn gesagt wird, dass Einheit As Basiseinheit B, Bs Basiseinheit C und Cs Basiseinheit A ist) in Zeile %d.', @@ -978,7 +982,10 @@ gestartet', 'This upgrade script tries to map all existing units in the database to the newly created units.' => 'Dieses Update-Script versucht, alle bestehenden Einheiten automatisch in die neuen Einheiten umzuwandeln.', 'Title' => 'Titel', 'To' => 'An', + 'To (time)' => 'Bis', 'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => 'Um einer Gruppe einen neuen Benutzer hinzuzufügen, ändern und speichern Sie am einfachsten einen bestehen den Zugriffsnamen. Unter dem neuen Namen wird dann ein Benutzer mit denselben Einstellungen angelegt.', + 'Top (CSS)' => 'Oben (mit CSS)', + 'Top (Javascript)' => 'Oben (mit Javascript)', 'Top 100' => 'Top 100', 'Top 100 hinzufuegen' => 'Top 100 hinzufügen', 'Top Level' => 'Hauptartikelbezeichnung', @@ -995,15 +1002,13 @@ gestartet', 'Transfer Inventory' => 'Ware umlagern', 'Transfer to' => 'umlagern nach', 'Trial Balance' => 'Saldenbilanz', + 'Type' => 'Typ', 'Type of Business' => 'Kundentyp', 'USTVA-Hint: Method' => 'Wenn Sie Ist-Versteuert sind, wählen Sie die Einnahmen-/Überschuß-Rechnung aus. Sind Sie Soll-Versteuert und bilanzverpflichtet, dann wählen Sie Bilanz aus.', 'USTVA-Hint: Tax Authoritys' => 'Bitte das Bundesland UND die Stadt bzw. den Einzugsbereich Ihres zuständigen Finanzamts auswählen.', 'USt-IdNr.' => 'USt-IdNr.', 'UStVA' => 'UStVA', - 'UStVA 2004' => 'UStVA 2004', - 'UStVA 2005' => 'UStVA 2005', - 'UStVA 2006' => 'UStVA 2006', - 'UStVA als PDF-Dokument' => 'UStVa als PDF-Dokument', + 'UStVA (PDF-Dokument)' => 'UStVa als PDF-Dokument', 'UStVA-Nr. 35' => 'Kz. 35', 'UStVA-Nr. 36' => 'Kz. 36', 'UStVA-Nr. 39' => 'Kz. 37', @@ -1052,6 +1057,7 @@ gestartet', 'Unit' => 'Einheit', 'Unit of measure' => 'Maßeinheit', 'Units' => 'Einheiten', + 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'Unlock System' => 'System entsperren', 'Until' => 'Bis', 'Update' => 'Erneuern', @@ -1060,8 +1066,10 @@ gestartet', 'Update complete' => 'Update beendet.', 'Update prices' => 'Preise aktualisieren', 'Updated' => 'Erneuert am', + 'Use As Template' => 'Als Vorlage verwenden', 'Use Templates' => 'benutze Vorlagen', 'User' => 'Benutzer', + 'User Config' => 'Benutzereinstellungen', 'User deleted!' => 'Benutzer gelöscht!', 'User saved!' => 'Benutzer gespeichert!', 'Username' => 'Benutzername', @@ -1078,15 +1086,10 @@ gestartet', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', 'Vendor saved!' => 'Lieferant gespeichert!', 'Vendors' => 'Lieferanten', - 'Verfahren' => 'Verfahren', - 'Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)' => 'Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)', 'Verrechnungseinheit' => 'Verrechnungseinheit', 'Version' => 'Version', 'View License' => 'Lizenz ansehen', 'Von Konto: ' => 'von Konto: ', - 'Voranmeldezeitraum' => 'Voranmeldezeitraum', - 'Voranmeldungszeitraum' => 'Voranmeldungszeitraum', - 'Vorschau' => 'Vorschau', 'WEBDAV-Zugriff' => 'WEBDAV-Zugriff', 'Warehouse' => 'Lager', 'Warehouse deleted!' => 'Das Lager wurde gelöscht.', @@ -1094,8 +1097,8 @@ gestartet', 'Warehouses' => 'Lager', 'Warnings during template upgrade' => 'Warnungen bei Aktualisierung der Dokumentenvorlagen', 'Weight' => 'Gewicht', - 'Weight Unit' => 'Gewichtseinheit', 'What type of item is this?' => 'Was ist dieser Artikel?', + 'With Extension Of Time' => 'mit Dauerfristverlängerung', 'Workflow purchase_order' => 'Workflow Lieferantenauftrag', 'Workflow request_quotation' => 'Workflow Preisanfrage', 'Workflow sales_order' => 'Workflow Auftrag', @@ -1105,6 +1108,7 @@ gestartet', 'Year' => 'Jahr', 'Year End' => 'Jahresende', 'Yearly' => 'jährlich', + 'Yearly taxreport not yet implemented' => 'Jährlicher Steuerreport für dieses Ausgabeformat noch nicht implementiert', 'Yes' => 'Ja', 'You are logged out!' => 'Auf Wiedersehen!', 'You can also create new units now.' => 'Sie können jetzt auch neue Einheiten anlegen.', @@ -1115,6 +1119,7 @@ gestartet', 'You have to create new Buchungsgruppen for all the combinations of inventory, income and expense accounts that have been used already.' => 'Sie müssen neue Buchungsgruppen für alle Kombinationen aus Inventar-, Erlös- und Aufwandskonto, die bereits benutzt wurden.', 'You must enter a host and port for local and remote connections!' => '"Rechner" und "Port" müssen für lokale und externe Verbindungen eingetragen werden!', 'Zeitraum' => 'Zeitraum', + 'Zip, City' => 'PLZ, Ort', 'Zipcode' => 'PLZ', 'accrual' => 'Bilanzierung (Soll-Versteuerung)', 'as at' => 'zum Stand', @@ -1127,7 +1132,6 @@ gestartet', 'config' => 'Konfiguration', 'continue' => 'weiter', 'customernumber not unique!' => 'Die Kundennummer ist schon vergeben', - 'days' => 'Tage', 'debug' => 'Debug', 'deliverydate' => 'Lieferdatum', 'dimension units' => 'Maßeinheiten', @@ -1147,6 +1151,7 @@ gestartet', 'month' => 'monatliche Abgabe', 'none (pricegroup)' => 'keine', 'number' => 'Nummer', + 'plural first char' => 'P', 'posted!' => 'gebucht', 'prices updated!' => ' Preise aktualisiert!', 'quarter' => 'vierteljährliche (quartalsweise) Abgabe', @@ -1157,13 +1162,15 @@ gestartet', 'sent' => 'gesendet', 'sent to printer' => 'an Drucker geschickt', 'service units' => 'Dienstleistungseinheiten', + 'singular first char' => 'S', 'soldtotal' => 'Verkaufte Anzahl', 'successfully created!' => 'wurde erfolgreich erstellt', 'successfully deleted!' => 'wurde erfolgreich gelöscht', + 'to (date)' => 'bis', + 'use program settings' => 'benutze Programmeinstellungen', 'ustva' => 'UStVA', 'website' => 'Webseite', 'winston_export' => 'Winston-Export', - 'Öffnungszeiten' => 'Öffnungszeiten', }; 1; diff --git a/locale/de/am b/locale/de/am index d37d99eb4..741a49dc4 100644 --- a/locale/de/am +++ b/locale/de/am @@ -60,17 +60,20 @@ $self->{texts} = { 'Continue' => 'Weiter', 'Copy to COA' => 'In Kontenplan kopieren', 'Cost Center' => 'Kostenstelle', + 'Costs' => 'Kosten', 'Credit' => 'Haben', 'Customer Number' => 'Kundennummer', 'Customernumberinit' => 'Kundennummernkreis', 'Dataset upgrade' => 'Datenbankaktualisierung', 'Date Format' => 'Datumsformat', 'Debit' => 'Soll', + 'Default template format' => 'Standardvorlagenformat', 'Delete' => 'Löschen', 'Delete Account' => 'Konto löschen', 'Department deleted!' => 'Abteilung gelöscht.', 'Department saved!' => 'Abteilung gespeichert.', 'Departments' => 'Abteilungen', + 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', 'Description' => 'Beschreibung', 'Description missing!' => 'Beschreibung fehlt.', 'Discount' => 'Rabatt', @@ -99,6 +102,7 @@ $self->{texts} = { 'Erlöse EU m. UStId' => 'Erlöse EU m. UStId', 'Erlöse EU o. UStId' => 'Erlöse EU o. UStId', 'Erlöse Inland' => 'Erlöse Inland', + 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', 'Expense' => 'Aufwandskonto', 'Expense Account' => 'Aufwandskonto', 'Expense/Asset' => 'Aufwand/Anlagen', @@ -106,12 +110,14 @@ $self->{texts} = { 'Folgekonto' => 'Folgekonto', 'Foreign Exchange Gain' => 'Wechselkurserträge', 'Foreign Exchange Loss' => 'Wechselkursaufwendungen', + 'Form details (second row)' => 'Formulardetails (zweite Positionszeile)', 'GIFI' => 'GIFI', 'GIFI deleted!' => 'GIFI gelöscht!', 'GIFI missing!' => 'GIFI fehlt!', 'GIFI saved!' => 'GIFI gespeichert!', 'Gültig ab' => 'Gültig ab', 'Heading' => 'Überschrift', + 'Hide by default' => 'Standardmäßig verstecken', 'Include in drop-down menus' => 'In Aufklappmenü aufnehmen', 'Input Number Format' => 'Zahlenformat (Eingabe)', 'Inventory' => 'Inventar', @@ -136,7 +142,11 @@ $self->{texts} = { 'Lead' => 'Kundenquelle', 'Liability' => 'Passiva/Mittelherkunft', 'Link' => 'Verknüpfungen', + 'Long Dates' => 'Lange Monatsnamen', 'Long Description' => 'Langtext', + 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', + 'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', + 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', 'Name' => 'Name', 'Netto Terms' => 'Zahlungsziel netto', 'No' => 'Nein', @@ -147,7 +157,13 @@ $self->{texts} = { 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'Number' => 'Nummer', + 'Number Format' => 'Zahlenformat', + 'Number of copies' => 'Anzahl Kopien', + 'Old (on the side)' => 'Alt (seitlich)', + 'OpenDocument/OASIS' => 'OpenDocument/OASIS', 'Output Number Format' => 'Zahlenformat (Ausgabe)', + 'PDF' => 'PDF', + 'PDF (OpenDocument/OASIS)' => 'PDF (OpenDocument/OASIS)', 'Part Number' => 'Artikelnummer', 'Part description' => 'Artikelbeschreibung', 'Parts Inventory' => 'Warenliste', @@ -159,7 +175,9 @@ $self->{texts} = { 'Payment terms deleted!' => 'Zahlungskonditionen gelöscht!', 'Phone' => 'Telefon', 'Please enter values' => 'Bitte Werte eingeben', + 'Postscript' => 'Postscript', 'Preferences saved!' => 'Einstellungen gespeichert!', + 'Print options' => 'Druckoptionen', 'Printer' => 'Drucker', 'Printer Command' => 'Druckbefehl', 'Printer Command missing!' => 'Druckbefehl fehlt', @@ -184,6 +202,7 @@ $self->{texts} = { 'Select an employee' => 'Angestellten auswählen', 'Service Items' => 'Dienstleistungen', 'Setup Menu' => 'Menüsetup', + 'Show by default' => 'Standardmäßig anzeigen', 'Signature' => 'Unterschrift', 'Skonto' => 'Skonto', 'Skonto Terms' => 'Zahlungsziel Skonto', @@ -195,6 +214,7 @@ $self->{texts} = { 'Template Code' => 'Vorlagenkürzel', 'Template Code missing!' => 'Vorlagenkürzel fehlt!', 'Template saved!' => 'Schablone gespeichert!', + 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', 'The base unit does not exist or it is about to be deleted in row %d.' => 'Die Basiseinheit in Zeile %d existiert nicht oder soll gelöscht werden.', 'The base unit does not exist.' => 'Die Basiseinheit existiert nicht.', 'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.' => 'Die Beziehungen der Einheiten dürfen keine Schleifen beinhalten (z.B. wenn gesagt wird, dass Einheit As Basiseinheit B, Bs Basiseinheit C und Cs Basiseinheit A ist) in Zeile %d.', @@ -207,6 +227,8 @@ $self->{texts} = { 'The unit in row %d has been deleted in the meantime.' => 'Die Einheit in Zeile %d ist in der Zwischentzeit gelöscht worden.', 'The unit in row %d has been used in the meantime and cannot be changed anymore.' => 'Die Einheit in Zeile %d wurde in der Zwischenzeit benutzt und kann nicht mehr geändert werden.', 'The units have been saved.' => 'Die Einheiten wurden gespeichert.', + 'Top (CSS)' => 'Oben (mit CSS)', + 'Top (Javascript)' => 'Oben (mit Javascript)', 'Transaction reversal enforced for all dates' => 'Fehleintragungen müssen für jeden Zeitraum mit einer Kontraeintragung ausgebessert werden', 'Transaction reversal enforced up to' => 'Fehleintragungen können bis zu dem angegebenen Zeitraum nur mit einer Kontraeintragung ausgebessert werden!', 'Type of Business' => 'Kundentyp', @@ -254,12 +276,12 @@ $self->{texts} = { 'UStVA-Nr. 98' => 'Kz. 98', 'Umsatzsteuervoranmeldung' => 'Umsatzsteuervoranmeldung', 'Unit' => 'Einheit', + 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'Value' => 'Wert', 'Variable' => 'Variable', 'Warehouse deleted!' => 'Das Lager wurde gelöscht.', 'Warehouse saved!' => 'Das Lager wurde gespeichert.', 'Warehouses' => 'Lager', - 'Weight Unit' => 'Gewichtseinheit', 'Year End' => 'Jahresende', 'Yes' => 'Ja', 'dimension units' => 'Maßeinheiten', @@ -267,6 +289,7 @@ $self->{texts} = { 'lead deleted!' => 'Kundenquelle gelöscht', 'lead saved!' => 'Kundenquelle geichert', 'service units' => 'Dienstleistungseinheiten', + 'use program settings' => 'benutze Programmeinstellungen', }; $self->{subs} = { @@ -328,6 +351,7 @@ $self->{subs} = { 'edit_warehouse' => 'edit_warehouse', 'employee_selection_internal' => 'employee_selection_internal', 'form_footer' => 'form_footer', + 'format_dates' => 'format_dates', 'gifi_footer' => 'gifi_footer', 'gifi_header' => 'gifi_header', 'language_header' => 'language_header', @@ -347,6 +371,7 @@ $self->{subs} = { 'payment_header' => 'payment_header', 'printer_header' => 'printer_header', 'project_selection_internal' => 'project_selection_internal', + 'reformat_numbers' => 'reformat_numbers', 'restore_form' => 'restore_form', 'save' => 'save', 'save_account' => 'save_account', @@ -370,6 +395,7 @@ $self->{subs} = { 'select_part' => 'select_part', 'select_part_internal' => 'select_part_internal', 'set_longdescription' => 'set_longdescription', + 'set_unit_languages' => 'set_unit_languages', 'sic_header' => 'sic_header', 'vendor_selection' => 'vendor_selection', 'warehouse_header' => 'warehouse_header', diff --git a/locale/de/ap b/locale/de/ap index 8d3bc6366..0c022c5e7 100644 --- a/locale/de/ap +++ b/locale/de/ap @@ -72,7 +72,6 @@ $self->{texts} = { 'Payment date missing!' => 'Tag der Zahlung fehlt!', 'Payments' => 'Zahlungsausgänge', 'Post' => 'Buchen', - 'Post as new' => 'Neu buchen', 'Project' => 'Projekt', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Remaining' => 'Rest', @@ -89,6 +88,7 @@ $self->{texts} = { 'Transaction deleted!' => 'Buchung gelöscht!', 'Transaction posted!' => 'Buchung verbucht!', 'Update' => 'Erneuern', + 'Use As Template' => 'Als Vorlage verwenden', 'Vendor' => 'Lieferant', 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor missing!' => 'Lieferant fehlt!', @@ -126,6 +126,7 @@ $self->{subs} = { 'select_name' => 'select_name', 'select_project' => 'select_project', 'update' => 'update', + 'use_as_template' => 'use_as_template', 'vendor_invoice' => 'vendor_invoice', 'yes' => 'yes', 'kreditorenbuchung' => 'ap_transaction', @@ -134,8 +135,8 @@ $self->{subs} = { 'löschen' => 'delete', 'kreditorenbuchung_bearbeiten' => 'edit_accounts_payables_transaction', 'buchen' => 'post', - 'neu_buchen' => 'post_as_new', 'erneuern' => 'update', + 'als_vorlage_verwenden' => 'use_as_template', 'einkaufsrechnung' => 'vendor_invoice', 'ja' => 'yes', }; diff --git a/locale/de/ar b/locale/de/ar index ad32f795d..03434d103 100644 --- a/locale/de/ar +++ b/locale/de/ar @@ -21,6 +21,7 @@ $self->{texts} = { 'Confirm!' => 'Bestätigen Sie!', 'Continue' => 'Weiter', 'Credit Limit' => 'Kreditlimit', + 'Credit note (one letter abbreviation)' => 'G', 'Currency' => 'Währung', 'Customer' => 'Kunde', 'Customer missing!' => 'Kundenname fehlt!', @@ -46,6 +47,7 @@ $self->{texts} = { 'Include in Report' => 'In Bericht aufnehmen', 'Incoming Payments' => 'Zahlungseingänge', 'Invoice' => 'Rechnung', + 'Invoice (one letter abbreviation)' => 'R', 'Invoice Date' => 'Rechnungsdatum', 'Invoice Date missing!' => 'Rechnungsdatum fehlt!', 'Invoice Number' => 'Rechnungsnummer', @@ -73,7 +75,6 @@ $self->{texts} = { 'Paid' => 'bezahlt', 'Payment date missing!' => 'Tag der Zahlung fehlt!', 'Post' => 'Buchen', - 'Post as new' => 'Neu buchen', 'Project' => 'Projekt', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Remaining' => 'Rest', @@ -86,6 +87,7 @@ $self->{texts} = { 'Ship via' => 'Transportmittel', 'Shipping Point' => 'Versandort', 'Source' => 'Beleg', + 'Storno (one letter abbreviation)' => 'S', 'Subtotal' => 'Zwischensumme', 'Tax' => 'Steuer', 'Tax Included' => 'Steuer im Preis inbegriffen', @@ -93,7 +95,9 @@ $self->{texts} = { 'Total' => 'Summe', 'Transaction deleted!' => 'Buchung gelöscht!', 'Transaction posted!' => 'Buchung verbucht!', + 'Type' => 'Typ', 'Update' => 'Erneuern', + 'Use As Template' => 'Als Vorlage verwenden', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', 'Yes' => 'Ja', 'button' => '?', @@ -128,15 +132,16 @@ $self->{subs} = { 'select_name' => 'select_name', 'select_project' => 'select_project', 'update' => 'update', + 'use_as_template' => 'use_as_template', 'vendor_invoice' => 'vendor_invoice', 'yes' => 'yes', 'debitorenbuchung' => 'ar_transaction', 'weiter' => 'continue', 'löschen' => 'delete', 'buchen' => 'post', - 'neu_buchen' => 'post_as_new', 'rechnung' => 'sales_invoice', 'erneuern' => 'update', + 'als_vorlage_verwenden' => 'use_as_template', 'ja' => 'yes', }; diff --git a/locale/de/cn b/locale/de/cn index 437cbee0d..4f75a3bd5 100644 --- a/locale/de/cn +++ b/locale/de/cn @@ -57,9 +57,10 @@ $self->{texts} = { 'Discount' => 'Rabatt', 'Due Date' => 'Fälligkeitsdatum', 'E-mail' => 'eMail', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', 'Edit Credit Note' => 'Gutschrift bearbeiten', + 'Enter longdescription' => 'Langtext eingeben', 'Exch' => 'Wechselkurs.', 'Exchangerate' => 'Wechselkurs', 'Exchangerate for payment missing!' => 'Es fehlt der Wechselkurs für die Bezahlung!', @@ -92,6 +93,12 @@ $self->{texts} = { 'May ' => 'Mai', 'Memo' => 'Memo', 'Message' => 'Nachricht', + 'Name' => 'Name', + 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', + 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', + 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', + 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'No.' => 'Position', 'Notes' => 'Bemerkungen', 'Nov' => 'Nov', @@ -112,10 +119,13 @@ $self->{texts} = { 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', 'Part' => 'Ware', 'Part Description' => 'Artikelbeschreibung', + 'Part Number' => 'Artikelnummer', + 'Part description' => 'Artikelbeschreibung', 'Payment Terms' => 'Zahlungskonditionen', 'Payment date missing!' => 'Tag der Zahlung fehlt!', 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', 'Post' => 'Buchen', 'Post as new' => 'Neu buchen', 'Postscript' => 'Postscript', @@ -128,6 +138,8 @@ $self->{texts} = { 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project description' => 'Projektbeschreibung', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Purchase Order' => 'Lieferantenauftrag', 'Qty' => 'Menge', @@ -144,6 +156,10 @@ $self->{texts} = { 'Sales Order' => 'Kundenauftrag', 'Salesperson' => 'Verkäufer', 'Screen' => 'Bildschirm', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a part' => 'Artikel auswählen', + 'Select a project' => 'Projekt auswählen', + 'Select an employee' => 'Angestellten auswählen', 'Select from one of the items below' => 'Wählen Sie einen der untenstehenden Einträge', 'Select from one of the names below' => 'Wählen Sie einen der untenstehenden Namen', 'Select from one of the projects below' => 'Wählen Sie eines der untenstehenden Projekte', @@ -157,6 +173,7 @@ $self->{texts} = { 'Ship via' => 'Transportmittel', 'Shipping Address' => 'Lieferadresse', 'Shipping Point' => 'Versandort', + 'Show details' => 'Details anzeigen', 'Source' => 'Beleg', 'Storno Invoice' => 'Stornorechnung', 'Storno Packing List' => 'Stornolieferschein', @@ -169,6 +186,8 @@ $self->{texts} = { 'Trade Discount' => 'Rabatt', 'Unit' => 'Einheit', 'Update' => 'Erneuern', + 'Value' => 'Wert', + 'Variable' => 'Variable', 'Vendor Number' => 'Lieferantennummer', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', 'What type of item is this?' => 'Was ist dieser Artikel?', @@ -184,11 +203,13 @@ $self->{texts} = { }; $self->{subs} = { + 'H' => 'H', 'acc_menu' => 'acc_menu', 'add' => 'add', 'add_transaction' => 'add_transaction', 'ap_transaction' => 'ap_transaction', 'ar_transaction' => 'ar_transaction', + 'calculate_qty' => 'calculate_qty', 'check_form' => 'check_form', 'check_name' => 'check_name', 'check_project' => 'check_project', @@ -196,13 +217,16 @@ $self->{subs} = { 'credit_note_links' => 'credit_note_links', 'customer_details' => 'customer_details', 'delete' => 'delete', + 'delivery_customer_selection' => 'delivery_customer_selection', 'display' => 'display', 'display_form' => 'display_form', 'display_row' => 'display_row', 'e_mail' => 'e_mail', 'edit' => 'edit', + 'employee_selection_internal' => 'employee_selection_internal', 'form_footer' => 'form_footer', 'form_header' => 'form_header', + 'format_dates' => 'format_dates', 'gl_transaction' => 'gl_transaction', 'invoicetotal' => 'invoicetotal', 'item_selected' => 'item_selected', @@ -210,6 +234,7 @@ $self->{subs} = { 'new_item' => 'new_item', 'new_license' => 'new_license', 'order' => 'order', + 'part_selection_internal' => 'part_selection_internal', 'post' => 'post', 'post_as_new' => 'post_as_new', 'prepare_credit_note' => 'prepare_credit_note', @@ -219,21 +244,32 @@ $self->{subs} = { 'print_form' => 'print_form', 'print_options' => 'print_options', 'project_selected' => 'project_selected', + 'project_selection_internal' => 'project_selection_internal', 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', 'request_for_quotation' => 'request_for_quotation', + 'restore_form' => 'restore_form', 'sales_invoice' => 'sales_invoice', + 'save_form' => 'save_form', 'section_menu' => 'section_menu', + 'select_employee' => 'select_employee', + 'select_employee_internal' => 'select_employee_internal', 'select_item' => 'select_item', 'select_name' => 'select_name', + 'select_part' => 'select_part', + 'select_part_internal' => 'select_part_internal', 'select_project' => 'select_project', 'send_email' => 'send_email', + 'set_duedate' => 'set_duedate', + 'set_longdescription' => 'set_longdescription', 'set_pricegroup' => 'set_pricegroup', 'ship_to' => 'ship_to', 'update' => 'update', 'validate_items' => 'validate_items', 'vendor_details' => 'vendor_details', 'vendor_invoice' => 'vendor_invoice', + 'vendor_selection' => 'vendor_selection', 'yes' => 'yes', 'weiter' => 'continue', 'löschen' => 'delete', diff --git a/locale/de/common b/locale/de/common index a8670a455..ec492113a 100644 --- a/locale/de/common +++ b/locale/de/common @@ -27,8 +27,10 @@ $self->{subs} = { 'calculate_qty' => 'calculate_qty', 'delivery_customer_selection' => 'delivery_customer_selection', 'employee_selection_internal' => 'employee_selection_internal', + 'format_dates' => 'format_dates', 'part_selection_internal' => 'part_selection_internal', 'project_selection_internal' => 'project_selection_internal', + 'reformat_numbers' => 'reformat_numbers', 'restore_form' => 'restore_form', 'save_form' => 'save_form', 'select_employee' => 'select_employee', diff --git a/locale/de/ct b/locale/de/ct index b6909c914..736838dc8 100644 --- a/locale/de/ct +++ b/locale/de/ct @@ -14,7 +14,6 @@ $self->{texts} = { 'Bcc' => 'Bcc', 'Billing Address' => 'Rechnungsadresse', 'Birthday' => 'Geburtstag', - 'Bis' => 'bis', 'Cannot delete customer!' => 'Kunde kann nicht gelöscht werden!', 'Cannot delete vendor!' => 'Lieferant kann nicht gelöscht werden!', 'Cc' => 'Cc', @@ -94,8 +93,8 @@ $self->{texts} = { 'Tax Number' => 'Steuernummer', 'Tax Number / SSN' => 'Steuernummer', 'Taxable' => 'Steuerpflichtig', - 'Terms: Net' => 'Zahlungsziel', 'Title' => 'Titel', + 'To (time)' => 'Bis', 'Type of Business' => 'Kundentyp', 'USt-IdNr.' => 'USt-IdNr.', 'Unit' => 'Einheit', @@ -108,7 +107,6 @@ $self->{texts} = { 'Vendors' => 'Lieferanten', 'Zipcode' => 'PLZ', 'customernumber not unique!' => 'Die Kundennummer ist schon vergeben', - 'days' => 'Tage', 's' => 's', }; diff --git a/locale/de/datev b/locale/de/datev index 699f5b327..7aa9b223b 100644 --- a/locale/de/datev +++ b/locale/de/datev @@ -22,7 +22,7 @@ $self->{texts} = { 'January' => 'Januar', 'July' => 'Juli', 'June' => 'Juni', - 'KNE Export erfolgreich!' => 'KNE-Export erfolgreich!', + 'KNE-Export erfolgreich!' => 'KNE-Export erfolgreich!', 'Konten' => 'Konten', 'Kontonummernerweiterung (KNE)' => 'Kontonummernerweiterung (KNE)', 'Mandantennummer' => 'Mandantennummer', @@ -30,7 +30,7 @@ $self->{texts} = { 'May' => 'Mai', 'Monat' => 'Monat', 'November' => 'November', - 'OBE Export erfolgreich!' => 'OBE-Export erfolgreich!', + 'OBE-Export erfolgreich!' => 'OBE-Export erfolgreich!', 'October' => 'Oktober', 'Password' => 'Passwort', 'Quartal' => 'Quartal', @@ -42,6 +42,7 @@ $self->{texts} = { $self->{subs} = { 'continue' => 'continue', + 'download' => 'download', 'export' => 'export', 'export2' => 'export2', 'export3' => 'export3', diff --git a/locale/de/dn b/locale/de/dn index 435850516..c298295ea 100644 --- a/locale/de/dn +++ b/locale/de/dn @@ -52,9 +52,10 @@ $self->{texts} = { gestartet', 'Dunning overview' => 'Mahnungsübersicht', 'E-mail' => 'eMail', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', 'Edit Dunning Process Config' => 'Mahnwesenkonfiguration bearbeiten', + 'Enter longdescription' => 'Langtext eingeben', 'Extended' => 'Gesamt', 'Fax' => 'Fax', 'Feb' => 'Feb', @@ -91,7 +92,13 @@ gestartet', 'May ' => 'Mai', 'Message' => 'Nachricht', 'Minimum Amount' => 'Mindestbetrag', + 'Name' => 'Name', 'Next Dunning Level' => 'Nächste Mahnstufe', + 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', + 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', + 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', + 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'No.' => 'Position', 'Notes' => 'Bemerkungen', 'Nov' => 'Nov', @@ -111,10 +118,13 @@ gestartet', 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', 'Part' => 'Ware', 'Part Description' => 'Artikelbeschreibung', + 'Part Number' => 'Artikelnummer', + 'Part description' => 'Artikelbeschreibung', 'Payment Terms missing in row ' => 'Zahlungsfrist fehlt in Zeile ', 'Payment until' => 'Zahlungseingänge bis', 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', 'Postscript' => 'Postscript', 'Price' => 'Preis', 'Pricegroup' => 'Preisgruppe', @@ -122,6 +132,8 @@ gestartet', 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project description' => 'Projektbeschreibung', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Purchase Order' => 'Lieferantenauftrag', 'Qty' => 'Menge', @@ -136,6 +148,10 @@ gestartet', 'Save' => 'Speichern', 'Screen' => 'Bildschirm', 'Search Dunning' => 'Mahnung suchen', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a part' => 'Artikel auswählen', + 'Select a project' => 'Projekt auswählen', + 'Select an employee' => 'Angestellten auswählen', 'Select from one of the items below' => 'Wählen Sie einen der untenstehenden Einträge', 'Select from one of the names below' => 'Wählen Sie einen der untenstehenden Namen', 'Select from one of the projects below' => 'Wählen Sie eines der untenstehenden Projekte', @@ -148,6 +164,7 @@ gestartet', 'Ship' => 'Lagerausgang', 'Ship to' => 'Lieferadresse', 'Shipping Address' => 'Lieferadresse', + 'Show details' => 'Details anzeigen', 'Show old dunnings' => 'Alte Mahnungen anzeigen', 'Start Dunning Process' => 'Mahnprozess starten', 'Storno Invoice' => 'Stornorechnung', @@ -162,6 +179,8 @@ gestartet', 'Total Fees' => 'Kumulierte Gebühren', 'Total Interest' => 'Kumulierte Zinsen', 'Unit' => 'Einheit', + 'Value' => 'Wert', + 'Variable' => 'Variable', 'Vendor Number' => 'Lieferantennummer', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', 'What type of item is this?' => 'Was ist dieser Artikel?', @@ -176,21 +195,26 @@ gestartet', }; $self->{subs} = { + 'H' => 'H', 'acc_menu' => 'acc_menu', 'add' => 'add', 'add_transaction' => 'add_transaction', 'ap_transaction' => 'ap_transaction', 'ar_transaction' => 'ar_transaction', + 'calculate_qty' => 'calculate_qty', 'check_form' => 'check_form', 'check_name' => 'check_name', 'check_project' => 'check_project', 'continue' => 'continue', 'customer_details' => 'customer_details', + 'delivery_customer_selection' => 'delivery_customer_selection', 'display' => 'display', 'display_form' => 'display_form', 'display_row' => 'display_row', 'e_mail' => 'e_mail', 'edit_config' => 'edit_config', + 'employee_selection_internal' => 'employee_selection_internal', + 'format_dates' => 'format_dates', 'gl_transaction' => 'gl_transaction', 'invoicetotal' => 'invoicetotal', 'item_selected' => 'item_selected', @@ -198,24 +222,35 @@ $self->{subs} = { 'new_item' => 'new_item', 'new_license' => 'new_license', 'order' => 'order', + 'part_selection_internal' => 'part_selection_internal', 'post_as_new' => 'post_as_new', 'print' => 'print', 'print_form' => 'print_form', 'print_options' => 'print_options', 'project_selected' => 'project_selected', + 'project_selection_internal' => 'project_selection_internal', 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', 'request_for_quotation' => 'request_for_quotation', + 'restore_form' => 'restore_form', 'sales_invoice' => 'sales_invoice', 'save' => 'save', 'save_dunning' => 'save_dunning', + 'save_form' => 'save_form', 'search' => 'search', 'section_menu' => 'section_menu', + 'select_employee' => 'select_employee', + 'select_employee_internal' => 'select_employee_internal', 'select_item' => 'select_item', 'select_name' => 'select_name', + 'select_part' => 'select_part', + 'select_part_internal' => 'select_part_internal', 'select_project' => 'select_project', 'send_email' => 'send_email', + 'set_duedate' => 'set_duedate', 'set_email' => 'set_email', + 'set_longdescription' => 'set_longdescription', 'set_pricegroup' => 'set_pricegroup', 'ship_to' => 'ship_to', 'show_dunning' => 'show_dunning', @@ -223,6 +258,7 @@ $self->{subs} = { 'validate_items' => 'validate_items', 'vendor_details' => 'vendor_details', 'vendor_invoice' => 'vendor_invoice', + 'vendor_selection' => 'vendor_selection', 'weiter' => 'continue', 'speichern' => 'save', }; diff --git a/locale/de/gl b/locale/de/gl index 77567e963..e73193bb9 100644 --- a/locale/de/gl +++ b/locale/de/gl @@ -91,6 +91,7 @@ $self->{texts} = { 'Subtotal' => 'Zwischensumme', 'Tax' => 'Steuer', 'Taxkey' => 'Steuerschlüssel', + 'To (time)' => 'Bis', 'Transaction Date missing!' => 'Buchungsdatum fehlt!', 'Transaction deleted!' => 'Buchung gelöscht!', 'Update' => 'Erneuern', diff --git a/locale/de/ic b/locale/de/ic index 295179031..79b33e878 100644 --- a/locale/de/ic +++ b/locale/de/ic @@ -13,6 +13,7 @@ $self->{texts} = { 'Add Request for Quotation' => 'Anfrage erfassen', 'Add Sales Order' => 'Auftrag erfassen', 'Add Service' => 'Dienstleistung erfassen', + 'Address' => 'Adresse', 'Apr' => 'Apr', 'April' => 'April', 'Are you sure you want to update the prices' => 'Sind Sie sicher, dass Sie die Preise @@ -53,12 +54,13 @@ aktualisieren wollen?', 'Discount' => 'Rabatt', 'Drawing' => 'Zeichnung', 'E-mail' => 'eMail', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', 'Edit ' => 'Bearbeiten', 'Edit Assembly' => 'Erzeugnis bearbeiten', 'Edit Part' => 'Ware bearbeiten', 'Edit Service' => 'Dienstleistung bearbeiten', + 'Enter longdescription' => 'Langtext eingeben', 'Expense' => 'Aufwandskonto', 'Extended' => 'Gesamt', 'Fax' => 'Fax', @@ -105,6 +107,11 @@ aktualisieren wollen?', 'Microfiche' => 'Mikrofilm', 'Model' => 'Modell', 'Name' => 'Name', + 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', + 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', + 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', + 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'No.' => 'Position', 'Not Discountable' => 'Nicht rabattierfähig', 'Notes' => 'Bemerkungen', @@ -133,6 +140,7 @@ aktualisieren wollen?', 'Part Description missing!' => 'Artikelbezeichnung fehlt!', 'Part Number' => 'Artikelnummer', 'Part Number missing!' => 'Artikelnummer fehlt!', + 'Part description' => 'Artikelbeschreibung', 'Partnumber must not be set to empty!' => 'Die Artikelnummer darf nicht auf leer geändert werden.', 'Partnumber not unique!' => 'Artikelnummer bereits vorhanden!', 'Parts' => 'Waren', @@ -140,6 +148,7 @@ aktualisieren wollen?', 'Payment Terms' => 'Zahlungskonditionen', 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', 'Postscript' => 'Postscript', 'Preis' => 'Preis', 'Preisklasse' => 'Preisgruppe', @@ -149,6 +158,8 @@ aktualisieren wollen?', 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project description' => 'Projektbeschreibung', 'Prozentual/Absolut' => 'Prozentual/Absolut', 'Purchase Order' => 'Lieferantenauftrag', 'Qty' => 'Menge', @@ -167,6 +178,10 @@ aktualisieren wollen?', 'Save' => 'Speichern', 'Save as new' => 'als neu speichern', 'Screen' => 'Bildschirm', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a part' => 'Artikel auswählen', + 'Select a project' => 'Projekt auswählen', + 'Select an employee' => 'Angestellten auswählen', 'Select from one of the items below' => 'Wählen Sie einen der untenstehenden Einträge', 'Select postscript or PDF!' => 'Postscript oder PDF auswählen!', 'Sell Price' => 'Verkaufspreis', @@ -183,6 +198,7 @@ aktualisieren wollen?', 'Shipping Address' => 'Lieferadresse', 'Shopartikel' => 'Shopartikel', 'Short' => 'kurz', + 'Show details' => 'Details anzeigen', 'Sold' => 'Verkauft', 'Stock' => 'einlagern', 'Stock Assembly' => 'Erzeugnis einlagern', @@ -194,6 +210,7 @@ aktualisieren wollen?', 'TOP100' => 'Top 100', 'The formula needs the following syntax:
      For regular article:
      Variablename= Variable Unit;
      Variablename2= Variable2 Unit2;
      ...
      ###
      Variable + ( Variable2 / Variable )
      Please be beware of the spaces in the formula
      ' => 'Die Formeln müssen in der folgenden Syntax eingegeben werden:
      Bei normalen Artikeln:
      Variablenname= Variable Einheit;
      Variablenname2= Variable2 Einheit2;
      ...
      ###
      Variable + Variable2 * ( Variable - Variable2 )
      Bitte achten Sie auf die Leerzeichen in der Formel
      Es muss jeweils die Gesamte Zeile eingegeben werden', 'To' => 'An', + 'To (time)' => 'Bis', 'Top 100' => 'Top 100', 'Top 100 hinzufuegen' => 'Top 100 hinzufügen', 'Top Level' => 'Hauptartikelbezeichnung', @@ -203,6 +220,8 @@ aktualisieren wollen?', 'Update' => 'Erneuern', 'Update prices' => 'Preise aktualisieren', 'Updated' => 'Erneuert am', + 'Value' => 'Wert', + 'Variable' => 'Variable', 'Vendor Number' => 'Lieferantennummer', 'Verrechnungseinheit' => 'Verrechnungseinheit', 'Weight' => 'Gewicht', @@ -224,23 +243,28 @@ aktualisieren wollen?', }; $self->{subs} = { + 'H' => 'H', 'acc_menu' => 'acc_menu', 'add' => 'add', 'addtop100' => 'addtop100', 'assembly_row' => 'assembly_row', + 'calculate_qty' => 'calculate_qty', 'check_form' => 'check_form', 'choice' => 'choice', 'confirm_price_update' => 'confirm_price_update', 'continue' => 'continue', 'customer_details' => 'customer_details', 'delete' => 'delete', + 'delivery_customer_selection' => 'delivery_customer_selection', 'display' => 'display', 'display_form' => 'display_form', 'display_row' => 'display_row', 'e_mail' => 'e_mail', 'edit' => 'edit', + 'employee_selection_internal' => 'employee_selection_internal', 'form_footer' => 'form_footer', 'form_header' => 'form_header', + 'format_dates' => 'format_dates', 'generate_report' => 'generate_report', 'invoicetotal' => 'invoicetotal', 'item_selected' => 'item_selected', @@ -251,6 +275,7 @@ $self->{subs} = { 'new_item' => 'new_item', 'new_license' => 'new_license', 'order' => 'order', + 'part_selection_internal' => 'part_selection_internal', 'parts_language_selection' => 'parts_language_selection', 'parts_subtotal' => 'parts_subtotal', 'post_as_new' => 'post_as_new', @@ -258,17 +283,27 @@ $self->{subs} = { 'print' => 'print', 'print_form' => 'print_form', 'print_options' => 'print_options', + 'project_selection_internal' => 'project_selection_internal', 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', 'request_for_quotation' => 'request_for_quotation', 'restock_assemblies' => 'restock_assemblies', + 'restore_form' => 'restore_form', 'save' => 'save', 'save_as_new' => 'save_as_new', + 'save_form' => 'save_form', 'search' => 'search', 'search_update_prices' => 'search_update_prices', 'section_menu' => 'section_menu', + 'select_employee' => 'select_employee', + 'select_employee_internal' => 'select_employee_internal', 'select_item' => 'select_item', + 'select_part' => 'select_part', + 'select_part_internal' => 'select_part_internal', 'send_email' => 'send_email', + 'set_duedate' => 'set_duedate', + 'set_longdescription' => 'set_longdescription', 'set_pricegroup' => 'set_pricegroup', 'ship_to' => 'ship_to', 'stock_assembly' => 'stock_assembly', @@ -277,6 +312,7 @@ $self->{subs} = { 'update_prices' => 'update_prices', 'validate_items' => 'validate_items', 'vendor_details' => 'vendor_details', + 'vendor_selection' => 'vendor_selection', 'erfassen' => 'add', 'erzeugnis_erfassen' => 'add_assembly', 'ware_erfassen' => 'add_part', diff --git a/locale/de/io b/locale/de/io index 5436ed803..a65b81c67 100644 --- a/locale/de/io +++ b/locale/de/io @@ -5,6 +5,7 @@ $self->{texts} = { 'Add Quotation' => 'Angebot erfassen', 'Add Request for Quotation' => 'Anfrage erfassen', 'Add Sales Order' => 'Auftrag erfassen', + 'Address' => 'Adresse', 'Apr' => 'Apr', 'April' => 'April', 'Attachment' => 'als Anhang', @@ -30,8 +31,9 @@ $self->{texts} = { 'Department' => 'Abteilung', 'Discount' => 'Rabatt', 'E-mail' => 'eMail', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', + 'Enter longdescription' => 'Langtext eingeben', 'Extended' => 'Gesamt', 'Fax' => 'Fax', 'Feb' => 'Feb', @@ -56,6 +58,12 @@ $self->{texts} = { 'May' => 'Mai', 'May ' => 'Mai', 'Message' => 'Nachricht', + 'Name' => 'Name', + 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', + 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', + 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', + 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'No.' => 'Position', 'Nov' => 'Nov', 'November' => 'November', @@ -73,8 +81,11 @@ $self->{texts} = { 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', 'Part' => 'Ware', 'Part Description' => 'Artikelbeschreibung', + 'Part Number' => 'Artikelnummer', + 'Part description' => 'Artikelbeschreibung', 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', 'Postscript' => 'Postscript', 'Price' => 'Preis', 'Pricegroup' => 'Preisgruppe', @@ -82,6 +93,8 @@ $self->{texts} = { 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project description' => 'Projektbeschreibung', 'Purchase Order' => 'Lieferantenauftrag', 'Qty' => 'Menge', 'Queue' => 'Warteschlange', @@ -93,6 +106,10 @@ $self->{texts} = { 'Required by' => 'Lieferdatum', 'Sales Order' => 'Kundenauftrag', 'Screen' => 'Bildschirm', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a part' => 'Artikel auswählen', + 'Select a project' => 'Projekt auswählen', + 'Select an employee' => 'Angestellten auswählen', 'Select from one of the items below' => 'Wählen Sie einen der untenstehenden Einträge', 'Select postscript or PDF!' => 'Postscript oder PDF auswählen!', 'Sep' => 'Sep', @@ -102,6 +119,7 @@ $self->{texts} = { 'Ship' => 'Lagerausgang', 'Ship to' => 'Lieferadresse', 'Shipping Address' => 'Lieferadresse', + 'Show details' => 'Details anzeigen', 'Storno Invoice' => 'Stornorechnung', 'Storno Packing List' => 'Stornolieferschein', 'Street' => 'Straße', @@ -109,6 +127,8 @@ $self->{texts} = { 'Subtotal' => 'Zwischensumme', 'To' => 'An', 'Unit' => 'Einheit', + 'Value' => 'Wert', + 'Variable' => 'Variable', 'Vendor Number' => 'Lieferantennummer', 'What type of item is this?' => 'Was ist dieser Artikel?', 'Zipcode' => 'PLZ', @@ -119,29 +139,46 @@ $self->{texts} = { }; $self->{subs} = { + 'H' => 'H', + 'calculate_qty' => 'calculate_qty', 'check_form' => 'check_form', 'customer_details' => 'customer_details', + 'delivery_customer_selection' => 'delivery_customer_selection', 'display_form' => 'display_form', 'display_row' => 'display_row', 'e_mail' => 'e_mail', + 'employee_selection_internal' => 'employee_selection_internal', + 'format_dates' => 'format_dates', 'invoicetotal' => 'invoicetotal', 'item_selected' => 'item_selected', 'new_item' => 'new_item', 'new_license' => 'new_license', 'order' => 'order', + 'part_selection_internal' => 'part_selection_internal', 'post_as_new' => 'post_as_new', 'print' => 'print', 'print_form' => 'print_form', 'print_options' => 'print_options', + 'project_selection_internal' => 'project_selection_internal', 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', 'request_for_quotation' => 'request_for_quotation', + 'restore_form' => 'restore_form', + 'save_form' => 'save_form', + 'select_employee' => 'select_employee', + 'select_employee_internal' => 'select_employee_internal', 'select_item' => 'select_item', + 'select_part' => 'select_part', + 'select_part_internal' => 'select_part_internal', 'send_email' => 'send_email', + 'set_duedate' => 'set_duedate', + 'set_longdescription' => 'set_longdescription', 'set_pricegroup' => 'set_pricegroup', 'ship_to' => 'ship_to', 'validate_items' => 'validate_items', 'vendor_details' => 'vendor_details', + 'vendor_selection' => 'vendor_selection', 'weiter' => 'continue', }; diff --git a/locale/de/ir b/locale/de/ir index 3b3bbca6f..45a65de0f 100644 --- a/locale/de/ir +++ b/locale/de/ir @@ -52,9 +52,10 @@ $self->{texts} = { 'Discount' => 'Rabatt', 'Due Date' => 'Fälligkeitsdatum', 'E-mail' => 'eMail', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', 'Edit Vendor Invoice' => 'Einkaufsrechnung bearbeiten', + 'Enter longdescription' => 'Langtext eingeben', 'Exch' => 'Wechselkurs.', 'Exchangerate' => 'Wechselkurs', 'Exchangerate for payment missing!' => 'Es fehlt der Wechselkurs für die Bezahlung!', @@ -88,6 +89,12 @@ $self->{texts} = { 'May ' => 'Mai', 'Memo' => 'Memo', 'Message' => 'Nachricht', + 'Name' => 'Name', + 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', + 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', + 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', + 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'No.' => 'Position', 'Notes' => 'Bemerkungen', 'Nov' => 'Nov', @@ -107,10 +114,13 @@ $self->{texts} = { 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', 'Part' => 'Ware', 'Part Description' => 'Artikelbeschreibung', + 'Part Number' => 'Artikelnummer', + 'Part description' => 'Artikelbeschreibung', 'Payment date missing!' => 'Tag der Zahlung fehlt!', 'Payments' => 'Zahlungsausgänge', 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', 'Post' => 'Buchen', 'Post Payment' => 'Zahlung buchen', 'Postscript' => 'Postscript', @@ -120,6 +130,8 @@ $self->{texts} = { 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project description' => 'Projektbeschreibung', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Purchase Order' => 'Lieferantenauftrag', 'Qty' => 'Menge', @@ -134,6 +146,10 @@ $self->{texts} = { 'Required by' => 'Lieferdatum', 'Sales Order' => 'Kundenauftrag', 'Screen' => 'Bildschirm', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a part' => 'Artikel auswählen', + 'Select a project' => 'Projekt auswählen', + 'Select an employee' => 'Angestellten auswählen', 'Select from one of the items below' => 'Wählen Sie einen der untenstehenden Einträge', 'Select from one of the names below' => 'Wählen Sie einen der untenstehenden Namen', 'Select from one of the projects below' => 'Wählen Sie eines der untenstehenden Projekte', @@ -145,6 +161,7 @@ $self->{texts} = { 'Ship' => 'Lagerausgang', 'Ship to' => 'Lieferadresse', 'Shipping Address' => 'Lieferadresse', + 'Show details' => 'Details anzeigen', 'Source' => 'Beleg', 'Steuersatz' => 'Steuersatz', 'Storno' => 'Storno', @@ -158,6 +175,9 @@ $self->{texts} = { 'Total' => 'Summe', 'Unit' => 'Einheit', 'Update' => 'Erneuern', + 'Use As Template' => 'Als Vorlage verwenden', + 'Value' => 'Wert', + 'Variable' => 'Variable', 'Vendor' => 'Lieferant', 'Vendor Number' => 'Lieferantennummer', 'Vendor missing!' => 'Lieferant fehlt!', @@ -175,24 +195,29 @@ $self->{texts} = { }; $self->{subs} = { + 'H' => 'H', 'acc_menu' => 'acc_menu', 'add' => 'add', 'add_transaction' => 'add_transaction', 'ap_transaction' => 'ap_transaction', 'ar_transaction' => 'ar_transaction', + 'calculate_qty' => 'calculate_qty', 'check_form' => 'check_form', 'check_name' => 'check_name', 'check_project' => 'check_project', 'continue' => 'continue', 'customer_details' => 'customer_details', 'delete' => 'delete', + 'delivery_customer_selection' => 'delivery_customer_selection', 'display' => 'display', 'display_form' => 'display_form', 'display_row' => 'display_row', 'e_mail' => 'e_mail', 'edit' => 'edit', + 'employee_selection_internal' => 'employee_selection_internal', 'form_footer' => 'form_footer', 'form_header' => 'form_header', + 'format_dates' => 'format_dates', 'gl_transaction' => 'gl_transaction', 'invoice_links' => 'invoice_links', 'invoicetotal' => 'invoicetotal', @@ -201,6 +226,7 @@ $self->{subs} = { 'new_item' => 'new_item', 'new_license' => 'new_license', 'order' => 'order', + 'part_selection_internal' => 'part_selection_internal', 'post' => 'post', 'post_as_new' => 'post_as_new', 'post_payment' => 'post_payment', @@ -209,22 +235,34 @@ $self->{subs} = { 'print_form' => 'print_form', 'print_options' => 'print_options', 'project_selected' => 'project_selected', + 'project_selection_internal' => 'project_selection_internal', 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', 'request_for_quotation' => 'request_for_quotation', + 'restore_form' => 'restore_form', 'sales_invoice' => 'sales_invoice', + 'save_form' => 'save_form', 'section_menu' => 'section_menu', + 'select_employee' => 'select_employee', + 'select_employee_internal' => 'select_employee_internal', 'select_item' => 'select_item', 'select_name' => 'select_name', + 'select_part' => 'select_part', + 'select_part_internal' => 'select_part_internal', 'select_project' => 'select_project', 'send_email' => 'send_email', + 'set_duedate' => 'set_duedate', + 'set_longdescription' => 'set_longdescription', 'set_pricegroup' => 'set_pricegroup', 'ship_to' => 'ship_to', 'storno' => 'storno', 'update' => 'update', + 'use_as_template' => 'use_as_template', 'validate_items' => 'validate_items', 'vendor_details' => 'vendor_details', 'vendor_invoice' => 'vendor_invoice', + 'vendor_selection' => 'vendor_selection', 'yes' => 'yes', 'weiter' => 'continue', 'löschen' => 'delete', @@ -232,6 +270,7 @@ $self->{subs} = { 'zahlung_buchen' => 'post_payment', 'storno' => 'storno', 'erneuern' => 'update', + 'als_vorlage_verwenden' => 'use_as_template', 'ja' => 'yes', }; diff --git a/locale/de/is b/locale/de/is index 78c9b898a..ae71987a6 100644 --- a/locale/de/is +++ b/locale/de/is @@ -64,12 +64,13 @@ $self->{texts} = { 'Due Date' => 'Fälligkeitsdatum', 'Dunning Amount' => 'gemahnter Betrag', 'E-mail' => 'eMail', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', 'Edit Credit Note' => 'Gutschrift bearbeiten', 'Edit Sales Invoice' => 'Rechnung bearbeiten', 'Edit Storno Credit Note' => 'Storno Gutschrift bearbeiten', 'Edit Storno Invoice' => 'Stornorechnung bearbeiten', + 'Enter longdescription' => 'Langtext eingeben', 'Exch' => 'Wechselkurs.', 'Exchangerate' => 'Wechselkurs', 'Exchangerate for payment missing!' => 'Es fehlt der Wechselkurs für die Bezahlung!', @@ -105,6 +106,12 @@ $self->{texts} = { 'May ' => 'Mai', 'Memo' => 'Memo', 'Message' => 'Nachricht', + 'Name' => 'Name', + 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', + 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', + 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', + 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'No.' => 'Position', 'Notes' => 'Bemerkungen', 'Nov' => 'Nov', @@ -125,11 +132,14 @@ $self->{texts} = { 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', 'Part' => 'Ware', 'Part Description' => 'Artikelbeschreibung', + 'Part Number' => 'Artikelnummer', + 'Part description' => 'Artikelbeschreibung', 'Payment Terms' => 'Zahlungskonditionen', 'Payment date missing!' => 'Tag der Zahlung fehlt!', 'Payments' => 'Zahlungsausgänge', 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', 'Post' => 'Buchen', 'Post Payment' => 'Zahlung buchen', 'Postscript' => 'Postscript', @@ -142,6 +152,8 @@ $self->{texts} = { 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project description' => 'Projektbeschreibung', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Purchase Order' => 'Lieferantenauftrag', 'Qty' => 'Menge', @@ -158,6 +170,10 @@ $self->{texts} = { 'Sales Order' => 'Kundenauftrag', 'Salesperson' => 'Verkäufer', 'Screen' => 'Bildschirm', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a part' => 'Artikel auswählen', + 'Select a project' => 'Projekt auswählen', + 'Select an employee' => 'Angestellten auswählen', 'Select from one of the items below' => 'Wählen Sie einen der untenstehenden Einträge', 'Select from one of the names below' => 'Wählen Sie einen der untenstehenden Namen', 'Select from one of the projects below' => 'Wählen Sie eines der untenstehenden Projekte', @@ -171,6 +187,7 @@ $self->{texts} = { 'Ship via' => 'Transportmittel', 'Shipping Address' => 'Lieferadresse', 'Shipping Point' => 'Versandort', + 'Show details' => 'Details anzeigen', 'Source' => 'Beleg', 'Steuersatz' => 'Steuersatz', 'Storno' => 'Storno', @@ -185,6 +202,9 @@ $self->{texts} = { 'Trade Discount' => 'Rabatt', 'Unit' => 'Einheit', 'Update' => 'Erneuern', + 'Use As Template' => 'Als Vorlage verwenden', + 'Value' => 'Wert', + 'Variable' => 'Variable', 'Vendor Number' => 'Lieferantennummer', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', 'What type of item is this?' => 'Was ist dieser Artikel?', @@ -200,11 +220,13 @@ $self->{texts} = { }; $self->{subs} = { + 'H' => 'H', 'acc_menu' => 'acc_menu', 'add' => 'add', 'add_transaction' => 'add_transaction', 'ap_transaction' => 'ap_transaction', 'ar_transaction' => 'ar_transaction', + 'calculate_qty' => 'calculate_qty', 'check_form' => 'check_form', 'check_name' => 'check_name', 'check_project' => 'check_project', @@ -212,13 +234,16 @@ $self->{subs} = { 'credit_note' => 'credit_note', 'customer_details' => 'customer_details', 'delete' => 'delete', + 'delivery_customer_selection' => 'delivery_customer_selection', 'display' => 'display', 'display_form' => 'display_form', 'display_row' => 'display_row', 'e_mail' => 'e_mail', 'edit' => 'edit', + 'employee_selection_internal' => 'employee_selection_internal', 'form_footer' => 'form_footer', 'form_header' => 'form_header', + 'format_dates' => 'format_dates', 'gl_transaction' => 'gl_transaction', 'invoice_links' => 'invoice_links', 'invoicetotal' => 'invoicetotal', @@ -227,6 +252,7 @@ $self->{subs} = { 'new_item' => 'new_item', 'new_license' => 'new_license', 'order' => 'order', + 'part_selection_internal' => 'part_selection_internal', 'post' => 'post', 'post_as_new' => 'post_as_new', 'post_payment' => 'post_payment', @@ -237,22 +263,34 @@ $self->{subs} = { 'print_form' => 'print_form', 'print_options' => 'print_options', 'project_selected' => 'project_selected', + 'project_selection_internal' => 'project_selection_internal', 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', 'request_for_quotation' => 'request_for_quotation', + 'restore_form' => 'restore_form', 'sales_invoice' => 'sales_invoice', + 'save_form' => 'save_form', 'section_menu' => 'section_menu', + 'select_employee' => 'select_employee', + 'select_employee_internal' => 'select_employee_internal', 'select_item' => 'select_item', 'select_name' => 'select_name', + 'select_part' => 'select_part', + 'select_part_internal' => 'select_part_internal', 'select_project' => 'select_project', 'send_email' => 'send_email', + 'set_duedate' => 'set_duedate', + 'set_longdescription' => 'set_longdescription', 'set_pricegroup' => 'set_pricegroup', 'ship_to' => 'ship_to', 'storno' => 'storno', 'update' => 'update', + 'use_as_template' => 'use_as_template', 'validate_items' => 'validate_items', 'vendor_details' => 'vendor_details', 'vendor_invoice' => 'vendor_invoice', + 'vendor_selection' => 'vendor_selection', 'yes' => 'yes', 'weiter' => 'continue', 'gutschrift' => 'credit_note', @@ -267,6 +305,7 @@ $self->{subs} = { 'lieferadresse' => 'ship_to', 'storno' => 'storno', 'erneuern' => 'update', + 'als_vorlage_verwenden' => 'use_as_template', 'ja' => 'yes', }; diff --git a/locale/de/locales.pl b/locale/de/locales.pl index 7a73120e8..641537044 100755 --- a/locale/de/locales.pl +++ b/locale/de/locales.pl @@ -15,6 +15,7 @@ $| = 1; $basedir = "../.."; $bindir = "$basedir/bin/mozilla"; $dbupdir = "$basedir/sql/Pg-upgrade"; +$dbupdir2 = "$basedir/sql/Pg-upgrade2"; $menufile = "menu.ini"; $submitsearch = qr/type\s*=\s*[\"\']?submit/i; @@ -45,6 +46,10 @@ opendir DIR, $dbupdir or die "$!"; @dbplfiles = grep { /\.pl$/ } readdir DIR; closedir DIR; +opendir DIR, $dbupdir2 or die "$!"; +@dbplfiles2 = grep { /\.pl$/ } readdir DIR; +closedir DIR; + # slurp the translations in if (-f 'all') { require "all"; @@ -59,6 +64,7 @@ if (-f 'all') { map({ handle_file($_, $bindir); } @progfiles); map({ handle_file($_, $dbupdir); } @dbplfiles); +map({ handle_file($_, $dbupdir2); } @dbplfiles2); sub handle_file { my ($file, $dir) = @_; diff --git a/locale/de/login b/locale/de/login index 52d2f65ae..d9b989487 100644 --- a/locale/de/login +++ b/locale/de/login @@ -3,11 +3,18 @@ $self->{texts} = { 'Database Host' => 'Datenbankcomputer', 'Dataset' => 'Datenbank', 'Dataset upgrade' => 'Datenbankaktualisierung', + 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', + 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', 'Incorrect username or password!' => 'Ungültiger Benutzername oder falsches Passwort!', 'Licensed to' => 'Lizensiert für', 'Login' => 'Anmeldung', 'Login Name' => 'Benutzername', + 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', + 'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', + 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', 'Password' => 'Passwort', + 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', + 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'User' => 'Benutzer', 'Version' => 'Version', 'You are logged out!' => 'Auf Wiedersehen!', diff --git a/locale/de/menu b/locale/de/menu index 4f164a835..31a272c1d 100644 --- a/locale/de/menu +++ b/locale/de/menu @@ -41,7 +41,6 @@ $self->{texts} = { 'Buchungsgruppen' => 'Buchungsgruppen', 'Cash' => 'Zahlungsverkehr', 'Chart of Accounts' => 'Kontenübersicht', - 'Check' => 'Scheck', 'Checks' => 'Schecks', 'Contacts' => 'Kontakte', 'Customer' => 'Kunde', @@ -53,13 +52,10 @@ $self->{texts} = { 'Edit Dunning' => 'Mahnungen konfigurieren', 'General Ledger' => 'Finanzbuchhaltung', 'Groups' => 'Warengruppen', - 'HTML Templates' => 'HTML-Vorlagen', 'Import CSV' => 'Import CSV', 'Income Statement' => 'GuV', - 'Invoice' => 'Rechnung', 'Invoices' => 'Rechnungen', 'Journal' => 'Buchungsjournal', - 'LaTeX Templates' => 'LaTeX-Vorlagen', 'Languages' => 'Sprachen', 'Lead' => 'Kundenquelle', 'Licenses' => 'Lizenzen', @@ -74,7 +70,6 @@ $self->{texts} = { 'List Printer' => 'Drucker anzeigen', 'Logout' => 'Abmeldung', 'Master Data' => 'Stammdaten', - 'Packing List' => 'Lieferschein', 'Packing Lists' => 'Lieferschein', 'Parts' => 'Waren', 'Payment' => 'Zahlungsausgang', @@ -86,31 +81,22 @@ $self->{texts} = { 'Programm' => 'Programm', 'Projects' => 'Projekte', 'Projecttransactions' => 'Projektbuchungen', - 'Purchase Order' => 'Lieferantenauftrag', 'Purchase Orders' => 'Lieferantenaufträge', - 'Quotation' => 'Angebot', 'Quotations' => 'Angebote', - 'RFQ' => 'Anfrage', 'RFQs' => 'Anfragen', 'Receipt' => 'Zahlungseingang', 'Receipts' => 'Zahlungseingänge', 'Reconciliation' => 'Kontenabgleich', 'Reports' => 'Berichte', 'Sales Invoices' => 'Kundenrechnung', - 'Sales Order' => 'Kundenauftrag', 'Sales Orders' => 'Aufträge', 'Service units' => 'Dienstleistungseinheiten', 'Services' => 'Dienstleistungen', 'Shipto' => 'Lieferanschriften', - 'Statement' => 'Sammelrechnung', 'Stylesheet' => 'Stilvorlage', 'System' => 'System', 'Trial Balance' => 'Saldenbilanz', 'Type of Business' => 'Kundentyp', - 'UStVA' => 'UStVA', - 'UStVA 2004' => 'UStVA 2004', - 'UStVA 2005' => 'UStVA 2005', - 'UStVA 2006' => 'UStVA 2006', 'UStVa' => 'UStVa', 'UStVa Einstellungen' => 'UStVa Einstellungen', 'Units' => 'Einheiten', diff --git a/locale/de/menunew b/locale/de/menunew index b31368fd9..df2c65fc5 100644 --- a/locale/de/menunew +++ b/locale/de/menunew @@ -40,7 +40,6 @@ $self->{texts} = { 'Buchungsgruppen' => 'Buchungsgruppen', 'Cash' => 'Zahlungsverkehr', 'Chart of Accounts' => 'Kontenübersicht', - 'Check' => 'Scheck', 'Checks' => 'Schecks', 'Contacts' => 'Kontakte', 'Customer' => 'Kunde', @@ -52,13 +51,10 @@ $self->{texts} = { 'Edit Dunning' => 'Mahnungen konfigurieren', 'General Ledger' => 'Finanzbuchhaltung', 'Groups' => 'Warengruppen', - 'HTML Templates' => 'HTML-Vorlagen', 'Import CSV' => 'Import CSV', 'Income Statement' => 'GuV', - 'Invoice' => 'Rechnung', 'Invoices' => 'Rechnungen', 'Journal' => 'Buchungsjournal', - 'LaTeX Templates' => 'LaTeX-Vorlagen', 'Languages' => 'Sprachen', 'Lead' => 'Kundenquelle', 'Licenses' => 'Lizenzen', @@ -73,7 +69,6 @@ $self->{texts} = { 'List Printer' => 'Drucker anzeigen', 'Logout' => 'Abmeldung', 'Master Data' => 'Stammdaten', - 'Packing List' => 'Lieferschein', 'Packing Lists' => 'Lieferschein', 'Parts' => 'Waren', 'Payment' => 'Zahlungsausgang', @@ -85,31 +80,22 @@ $self->{texts} = { 'Programm' => 'Programm', 'Projects' => 'Projekte', 'Projecttransactions' => 'Projektbuchungen', - 'Purchase Order' => 'Lieferantenauftrag', 'Purchase Orders' => 'Lieferantenaufträge', - 'Quotation' => 'Angebot', 'Quotations' => 'Angebote', - 'RFQ' => 'Anfrage', 'RFQs' => 'Anfragen', 'Receipt' => 'Zahlungseingang', 'Receipts' => 'Zahlungseingänge', 'Reconciliation' => 'Kontenabgleich', 'Reports' => 'Berichte', 'Sales Invoices' => 'Kundenrechnung', - 'Sales Order' => 'Kundenauftrag', 'Sales Orders' => 'Aufträge', 'Service units' => 'Dienstleistungseinheiten', 'Services' => 'Dienstleistungen', 'Shipto' => 'Lieferanschriften', - 'Statement' => 'Sammelrechnung', 'Stylesheet' => 'Stilvorlage', 'System' => 'System', 'Trial Balance' => 'Saldenbilanz', 'Type of Business' => 'Kundentyp', - 'UStVA' => 'UStVA', - 'UStVA 2004' => 'UStVA 2004', - 'UStVA 2005' => 'UStVA 2005', - 'UStVA 2006' => 'UStVA 2006', 'UStVa' => 'UStVa', 'UStVa Einstellungen' => 'UStVa Einstellungen', 'Units' => 'Einheiten', diff --git a/locale/de/menuv3 b/locale/de/menuv3 new file mode 100644 index 000000000..d1f3f9c17 --- /dev/null +++ b/locale/de/menuv3 @@ -0,0 +1,13 @@ +$self->{texts} = { + 'Logout' => 'Abmeldung', +}; + +$self->{subs} = { + 'acc_menu' => 'acc_menu', + 'clock_line' => 'clock_line', + 'display' => 'display', + 'my_length' => 'my_length', + 'print_menu' => 'print_menu', +}; + +1; diff --git a/locale/de/oe b/locale/de/oe index ba775b21c..ceb08f57c 100644 --- a/locale/de/oe +++ b/locale/de/oe @@ -70,7 +70,7 @@ $self->{texts} = { 'Done' => 'Fertig', 'Dunning Amount' => 'gemahnter Betrag', 'E-mail' => 'eMail', - 'E-mail address missing!' => 'eMailadresse fehlt!', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'E-mailed' => 'eMail gesendet.', 'Edit Purchase Order' => 'Lieferantenaufrag bearbeiten', 'Edit Quotation' => 'Angebot bearbeiten', @@ -81,6 +81,7 @@ $self->{texts} = { 'Edit the sales_order' => 'Bearbeiten des Auftrags', 'Edit the sales_quotation' => 'Bearbeiten des Angebots', 'Employee' => 'Bearbeiter', + 'Enter longdescription' => 'Langtext eingeben', 'Exchangerate' => 'Wechselkurs', 'Exchangerate missing!' => 'Es fehlt der Wechselkurs!', 'Extended' => 'Gesamt', @@ -114,6 +115,12 @@ $self->{texts} = { 'May' => 'Mai', 'May ' => 'Mai', 'Message' => 'Nachricht', + 'Name' => 'Name', + 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', + 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', + 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', + 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', 'No.' => 'Position', 'Notes' => 'Bemerkungen', 'Nothing entered!' => 'Es wurde nichts eingegeben.', @@ -141,9 +148,11 @@ $self->{texts} = { 'Part' => 'Ware', 'Part Description' => 'Artikelbeschreibung', 'Part Number' => 'Artikelnummer', + 'Part description' => 'Artikelbeschreibung', 'Payment Terms' => 'Zahlungskonditionen', 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', 'Postscript' => 'Postscript', 'Price' => 'Preis', 'Pricegroup' => 'Preisgruppe', @@ -152,6 +161,8 @@ $self->{texts} = { 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project description' => 'Projektbeschreibung', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Purchase Order' => 'Lieferantenauftrag', 'Purchase Orders' => 'Lieferantenaufträge', @@ -165,6 +176,7 @@ $self->{texts} = { 'Quotation Number missing!' => 'Angebotsnummer fehlt!', 'Quotation deleted!' => 'Angebot wurde gelöscht.', 'Quotations' => 'Angebote', + 'RFQ' => 'Anfrage', 'RFQ Number' => 'Anfragenummer', 'Recd' => 'erhalten', 'Receive Merchandise' => 'Waren einlagern', @@ -180,6 +192,10 @@ $self->{texts} = { 'Save and Close' => 'Speichern und schließen', 'Save as new' => 'als neu speichern', 'Screen' => 'Bildschirm', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a part' => 'Artikel auswählen', + 'Select a project' => 'Projekt auswählen', + 'Select an employee' => 'Angestellten auswählen', 'Select from one of the items below' => 'Wählen Sie einen der untenstehenden Einträge', 'Select from one of the names below' => 'Wählen Sie einen der untenstehenden Namen', 'Select from one of the projects below' => 'Wählen Sie eines der untenstehenden Projekte', @@ -196,6 +212,7 @@ $self->{texts} = { 'Shipping Date' => 'Lieferdatum', 'Shipping Date missing!' => 'Lieferdatum fehlt.', 'Shipping Point' => 'Versandort', + 'Show details' => 'Details anzeigen', 'Steuersatz' => 'Steuersatz', 'Storno Invoice' => 'Stornorechnung', 'Storno Packing List' => 'Stornolieferschein', @@ -204,7 +221,6 @@ $self->{texts} = { 'Subtotal' => 'Zwischensumme', 'Tax' => 'Steuer', 'Tax Included' => 'Steuer im Preis inbegriffen', - 'Terms: Net' => 'Zahlungsziel', 'To' => 'An', 'Total' => 'Summe', 'Trade Discount' => 'Rabatt', @@ -214,6 +230,8 @@ $self->{texts} = { 'Unit' => 'Einheit', 'Update' => 'Erneuern', 'Valid until' => 'gültig bis', + 'Value' => 'Wert', + 'Variable' => 'Variable', 'Vendor' => 'Lieferant', 'Vendor Number' => 'Lieferantennummer', 'Vendor missing!' => 'Lieferant fehlt!', @@ -227,7 +245,6 @@ $self->{texts} = { 'Yes' => 'Ja', 'Zipcode' => 'PLZ', 'button' => '?', - 'days' => 'Tage', 'ea' => 'St.', 'emailed to' => 'gemailt an', 'none (pricegroup)' => 'keine', @@ -237,12 +254,14 @@ $self->{texts} = { }; $self->{subs} = { + 'H' => 'H', 'acc_menu' => 'acc_menu', 'add' => 'add', 'add_transaction' => 'add_transaction', 'ap_transaction' => 'ap_transaction', 'ar_transaction' => 'ar_transaction', 'backorder_exchangerate' => 'backorder_exchangerate', + 'calculate_qty' => 'calculate_qty', 'check_form' => 'check_form', 'check_name' => 'check_name', 'check_project' => 'check_project', @@ -250,6 +269,7 @@ $self->{subs} = { 'create_backorder' => 'create_backorder', 'customer_details' => 'customer_details', 'delete' => 'delete', + 'delivery_customer_selection' => 'delivery_customer_selection', 'display' => 'display', 'display_form' => 'display_form', 'display_row' => 'display_row', @@ -257,8 +277,10 @@ $self->{subs} = { 'done' => 'done', 'e_mail' => 'e_mail', 'edit' => 'edit', + 'employee_selection_internal' => 'employee_selection_internal', 'form_footer' => 'form_footer', 'form_header' => 'form_header', + 'format_dates' => 'format_dates', 'gl_transaction' => 'gl_transaction', 'invoice' => 'invoice', 'invoicetotal' => 'invoicetotal', @@ -270,6 +292,7 @@ $self->{subs} = { 'order' => 'order', 'order_links' => 'order_links', 'orders' => 'orders', + 'part_selection_internal' => 'part_selection_internal', 'poso' => 'poso', 'post_as_new' => 'post_as_new', 'prepare_order' => 'prepare_order', @@ -277,24 +300,34 @@ $self->{subs} = { 'print_form' => 'print_form', 'print_options' => 'print_options', 'project_selected' => 'project_selected', + 'project_selection_internal' => 'project_selection_internal', 'purchase_order' => 'purchase_order', 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', 'request_for_quotation' => 'request_for_quotation', + 'restore_form' => 'restore_form', 'sales_invoice' => 'sales_invoice', 'sales_order' => 'sales_order', 'save' => 'save', 'save_and_close' => 'save_and_close', 'save_as_new' => 'save_as_new', 'save_exchangerate' => 'save_exchangerate', + 'save_form' => 'save_form', 'search' => 'search', 'search_transfer' => 'search_transfer', 'section_menu' => 'section_menu', + 'select_employee' => 'select_employee', + 'select_employee_internal' => 'select_employee_internal', 'select_item' => 'select_item', 'select_name' => 'select_name', + 'select_part' => 'select_part', + 'select_part_internal' => 'select_part_internal', 'select_project' => 'select_project', 'send_email' => 'send_email', + 'set_duedate' => 'set_duedate', 'set_headings' => 'set_headings', + 'set_longdescription' => 'set_longdescription', 'set_pricegroup' => 'set_pricegroup', 'ship_receive' => 'ship_receive', 'ship_to' => 'ship_to', @@ -304,6 +337,7 @@ $self->{subs} = { 'validate_items' => 'validate_items', 'vendor_details' => 'vendor_details', 'vendor_invoice' => 'vendor_invoice', + 'vendor_selection' => 'vendor_selection', 'yes' => 'yes', 'erfassen' => 'add', 'weiter' => 'continue', diff --git a/locale/de/ustva b/locale/de/ustva index f4a7f8ee3..fff25a03e 100644 --- a/locale/de/ustva +++ b/locale/de/ustva @@ -3,82 +3,78 @@ $self->{texts} = { '2. Quarter' => '2. Quartal', '3. Quarter' => '3. Quartal', '4. Quarter' => '4. Quartal', + 'Account' => 'Konto', + 'Account Nummer' => 'Kontonummer', 'Address' => 'Adresse', - 'Angaben zum Finanzamt' => 'Angaben zum Finanzamt', - 'Application Error. No Format given!' => 'Fehler in der Anwendung. Das Format fehlt.', - 'Application Error. Wrong Format: ' => 'Fehler in der Anwendung. Falsches Format: ', + 'Amended Advance Turnover Tax Return' => 'Berichtigte Anmeldung', + 'Amended Advance Turnover Tax Return (Nr. 10)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)', + 'Application Error. No Format given' => 'Fehler in der Anwendung. Das Ausgabeformat fehlt.', + 'Application Error. Wrong Format' => 'Fehler in der Anwendung. Falsches Format: ', 'Apr' => 'Apr', 'April' => 'April', + 'Assume Tax Consultant Data in Tax Computation?' => 'Beraterdaten in UStVA übernehmen?', 'Aug' => 'Aug', 'August' => 'August', - 'Ausgabeformat' => 'Ausgabeformat', - 'Ausgabeformat auswählen...' => 'Ausgabeformat auswählen...', - 'BLZ: ' => 'BLZ: ', - 'Back to user config...' => 'Benutzereinstellungen', - 'Bankleitzahl' => 'Bankleitzahl', - 'Bankleitzahl (BLZ)' => 'Bankleitzahl (BLZ)', - 'Bankverbindung' => 'Bankverbindung', - 'Bankverbindung des Finanzamts' => 'Bankverbindung des Finanzamts', - 'Bankverbindungen' => 'Bankverbindungen', - 'Bankverbindungen des Finanzamts' => 'Bankverbindungen des Finanzamts', - 'Beraterdaten in UStVA übernehmen?' => 'Beraterdaten in UStVA übernehmen?', - 'Berichtigte Anmeldung' => 'Berichtigte Anmeldung', - 'Bitte Angaben überprüfen' => 'Bitte Angaben überprüfen', - 'Bitte alle Angaben überprüfen' => 'Bitte alle Angaben überprüfen', - 'Bitte eine Steuernummer angeben' => 'Bitte eine Steuernummer angeben', + 'Bank' => 'Bank', + 'Bank Code' => 'BLZ: ', + 'Bank Code (long)' => 'Bankleitzahl (BLZ)', + 'Bank Connection' => 'Bankverbindung', + 'Bank Connection Tax Office' => 'Bankverbindung des Finanzamts', + 'Check Details' => 'Bitte Angaben überprüfen', + 'Choose Outputformat' => 'Ausgabeformat auswählen...', + 'Choose a Tax Number' => 'Bitte eine Steuernummer angeben', + 'Clearing Tax Received (No 71)' => 'Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)', + 'Company' => 'Firma', + 'Contact' => 'Kontakt', 'Continue' => 'Weiter', 'Customer not on file!' => 'Kunde ist nicht in der Datenbank!', 'Dataset upgrade' => 'Datenbankaktualisierung', - 'Dauerfristverlängerung' => 'Dauerfristverlängerung', 'Dec' => 'Dez', 'December' => 'Dezember', + 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', 'Description' => 'Beschreibung', - 'ELSTER Export nach Taxbird' => 'ELSTER-Export nach Taxbird', + 'ELSTER Export (Taxbird)' => 'ELSTER-Export nach Taxbird', + 'ELSTER Export (Winston)' => 'ELSTER Export nach Winston', 'ELSTER Export nach Winston' => 'ELSTER Export nach Winston', - 'ELSTER-Steuernummer: ' => 'ELSTER-Steuernummer: ', + 'ELSTER Tax Number' => 'ELSTER-Steuernummer: ', + 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', + 'Extension Of Time' => 'Dauerfristverlängerung', 'Fax' => 'Fax', - 'Fax. : ' => 'Fax. : ', - 'Fax.: ' => 'Fax.: ', 'Feb' => 'Feb', 'February' => 'Februar', - 'Finanzamt' => 'Finanzamt', - 'Finanzamt - Einstellungen' => 'Finanzamt - Einstellungen', - 'Firma' => 'Firma', 'Help' => 'Hilfe', - 'Help:' => 'Hilfe:', 'Hint-Missing-Preferences' => 'Bitte fehlende USTVA Einstellungen ergänzen (Menüpunkt: Programm)', - 'Hinweise' => 'Hinweise', - 'Impossible to create yearly Tax Report as PDF or Postscript
      Not yet implemented!' => 'Es ist noch nicht möglich, die Umsatzsteuervoranmeldung für das ganze Jahr als PDF oder Postscript auszugeben. Noch nicht implementiert.', - 'Impossible to create yearly Tax Report via Winston or Taxbird.
      Not yet implemented!' => 'Es ist noch nicht möglich, die Umsatzsteuervoranmeldung für das ganze Jahr für Winston oder Taxbird auszugeben. Noch nicht implementiert.', + 'Hints' => 'Hinweise', 'Internet' => 'Internet', - 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)', 'Jan' => 'Jan', 'January' => 'Januar', 'Jul' => 'Jul', 'July' => 'Juli', 'Jun' => 'Jun', 'June' => 'Juni', - 'Kein Firmenname hinterlegt!' => 'Kein Firmenname hinterlegt!', - 'Keine Firmenadresse hinterlegt!' => 'Keine Firmenadresse hinterlegt!', - 'Kontakt' => 'Kontakt', - 'Konto: ' => 'Konto: ', - 'Kontonummer' => 'Kontonummer', - 'Kreditinstitut' => 'Kreditinstitut', + 'Local Tax Office Preferences' => 'Angaben zum Finanzamt', 'Mar' => 'März', 'March' => 'März', 'May' => 'Mai', 'May ' => 'Mai', 'Method' => 'Verfahren', + 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', + 'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', 'Missing Method!' => 'Fehlender Voranmeldungszeitraum', 'Missing Preferences: Outputroutine disabled' => 'Die Ausgabefunktionen sind wegen unzureichender Voreinstellungen deaktiviert!', 'Missing Tax Authoritys Preferences' => 'Fehlende Angaben zum Finanzamt!', + 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', 'Name' => 'Name', + 'No Company Address given' => 'Keine Firmenadresse hinterlegt!', + 'No Company Name given' => 'Kein Firmenname hinterlegt!', 'Nov' => 'Nov', 'November' => 'November', 'Number' => 'Nummer', 'Oct' => 'Okt', 'October' => 'Oktober', - 'PLZ, Ort' => 'PLZ, Ort', + 'Openings' => 'Öffnungszeiten', + 'Outputformat' => 'Ausgabeformat', + 'Preview' => 'Druckvorschau', 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Select a period' => 'Bitte Zeitraum auswählen', 'Select from one of the names below' => 'Wählen Sie einen der untenstehenden Namen', @@ -86,29 +82,31 @@ $self->{texts} = { 'Sep' => 'Sep', 'September' => 'September', 'Show' => 'Zeigen', - 'Steuerberater/-in' => 'Steuerberater/-in', - 'Steuernummer' => 'Steuernummer', - 'Steuernummer: ' => 'Steuernummer: ', - 'Straße' => 'Straße', - 'Tel. : ' => 'Tel. : ', - 'Tel.: ' => 'Tel.: ', - 'Telefon' => 'Telefon', + 'Street' => 'Straße', + 'Tax Consultant' => 'Steuerberater/-in', + 'Tax Number' => 'Steuernummer', + 'Tax Office' => 'Finanzamt', + 'Tax Office Preferences' => 'Finanzamt - Einstellungen', + 'Tax Period' => 'Voranmeldungszeitraum', + 'Taxation' => 'Versteuerungs Verfahren', + 'Tel' => 'Tel', + 'Telephone' => 'Telefon', + 'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.', 'USTVA-Hint: Method' => 'Wenn Sie Ist-Versteuert sind, wählen Sie die Einnahmen-/Überschuß-Rechnung aus. Sind Sie Soll-Versteuert und bilanzverpflichtet, dann wählen Sie Bilanz aus.', 'USTVA-Hint: Tax Authoritys' => 'Bitte das Bundesland UND die Stadt bzw. den Einzugsbereich Ihres zuständigen Finanzamts auswählen.', 'UStVA' => 'UStVA', - 'UStVA als PDF-Dokument' => 'UStVa als PDF-Dokument', + 'UStVA (PDF-Dokument)' => 'UStVa als PDF-Dokument', + 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', + 'User Config' => 'Benutzereinstellungen', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', - 'Verfahren' => 'Verfahren', - 'Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)' => 'Verrechnung des Erstattungsbetrages erwünscht (Zeile 71)', - 'Voranmeldezeitraum' => 'Voranmeldezeitraum', - 'Voranmeldungszeitraum' => 'Voranmeldungszeitraum', - 'Vorschau' => 'Vorschau', + 'With Extension Of Time' => 'mit Dauerfristverlängerung', 'Wrong Period' => 'Falscher Zeitraum', 'Year' => 'Jahr', 'Yearly' => 'jährlich', + 'Yearly taxreport not yet implemented' => 'Jährlicher Steuerreport für dieses Ausgabeformat noch nicht implementiert', + 'Zip, City' => 'PLZ, Ort', 'accrual' => 'Bilanzierung (Soll-Versteuerung)', 'back' => 'zurück', - 'bis' => 'bis', 'cash' => 'E/Ü-Rechnung (Ist-Versteuerung)', 'continue' => 'weiter', 'debug' => 'Debug', @@ -117,7 +115,7 @@ $self->{texts} = { 'quarter' => 'vierteljährliche (quartalsweise) Abgabe', 'save' => 'speichern', 'saved' => 'gespeichert', - 'Öffnungszeiten' => 'Öffnungszeiten', + 'to (date)' => 'bis', }; $self->{subs} = { diff --git a/lxo-import/addressB.php b/lxo-import/addressB.php index 5e19f7b4e..dcb5adb7f 100644 --- a/lxo-import/addressB.php +++ b/lxo-import/addressB.php @@ -42,17 +42,17 @@ if ($_POST["ok"]=="Hilfe") { clearstatcache (); //print_r($_FILES); $test=$_POST["test"]; -if (!empty($_FILES["Datei"]["name"])) { +if (!empty($_FILES["Datei"]["name"])) { $file=$_POST["ziel"]; if (!move_uploaded_file($_FILES["Datei"]["tmp_name"],$file.".csv")) { $file=false; echo "Upload von ".$_FILES["Datei"]["name"]." fehlerhaft. (".$_FILES["Datei"]["error"].")
      "; - } + } } else if (is_file($_POST["ziel"].".csv")) { $file=$_POST["ziel"]; } else { $file=false; -} +} if (!$file) ende (2); @@ -74,8 +74,6 @@ $kunde_fld = array_keys($address); $f=fopen("$file.csv","r"); $zeile=fgets($f,1200); $infld=split($trenner,strtolower($zeile)); -//echo "$zeile
      "; -//print_r($infld); echo "
      "; $first=true; $ok=true; foreach ($infld as $fld) { @@ -105,11 +103,12 @@ if ($ok) while (!feof($f)){ continue; }; $data=trim($data); + $data=mb_convert_encoding($data,"ISO-8859-15","auto"); //$data=htmlentities($data); $data=addslashes($data); - if (trim($in_fld[$i])==$file."number") { // customernumber || vendornumber + if ($in_fld[$i]==$file."number") { // customernumber || vendornumber if (empty($data) or !$data) { - $data=getKdId(); + $data=getKdId(); $number=true; } else { $data=chkKdId($data); @@ -118,27 +117,21 @@ if ($ok) while (!feof($f)){ } else if ($in_fld[$i]=="taxincluded"){ $data=strtolower(substr($data,0,1)); if ($data!="f" && $data!="t") $data="f"; - } else if ($in_fld[$i]=="language") { - $data=strtolower(substr($data,0,2)); - if (!in_array($data,array("de","en","fr"))) $data=false; - } - if ($in_fld[$i]=="matchcode") { + } else if ($in_fld[$i]=="ustid"){ + $data=strtr(" ","",$data); + } /*else if ($in_fld[$i]=="matchcode") { $matchcode=$data; $i++; continue; - } - if ($data==false or empty($data) or !$data) { if (in_array($in_fld[$i],array("name"))) { $data=$matchcode; - } + } } + }*/ + $keys.=$in_fld[$i].","; if ($data==false or empty($data) or !$data) { - if (in_array($in_fld[$i],array("name"))) { - $keys="("; - break; - } $vals.="null,"; } else { if ($in_fld[$i]=="contact"){ @@ -169,10 +162,10 @@ if ($ok) while (!feof($f)){ //echo "Import $j
      \n"; flush(); } else { - $sql.=$keys."import)"; - $sql.=$vals."$nun)"; + $sql.=$keys."taxzone_id,import)"; + $sql.=$vals."0,$nun)"; $rc=$db->query($sql); - if (!$rc) echo "Fehler: ".$vals."
      "; + if (!$rc) echo "Fehler: ".$sql."
      "; } $j++; } else { diff --git a/lxo-import/import_lib.php b/lxo-import/import_lib.php index 89ca76f20..72f3ae39d 100644 --- a/lxo-import/import_lib.php +++ b/lxo-import/import_lib.php @@ -31,19 +31,21 @@ $address = array( "customernumber" => "Kundennummer", "vendornumber" => "Lieferantennummer", "taxnumber" => "Steuernummer", + "ustid" => "Umsatzsteuer-ID", "account_number" => "Kontonummer", "bank_code" => "Bankleitzahl", "bank" => "Bankname", "branche" => "Branche", - "language" => "Sprache (de,en,fr)", + //"language" => "Sprache (de,en,fr)", "sw" => "Stichwort", - "creditlimit" => "Kreditlimit (nnnnnn.nn)", + "creditlimit" => "Kreditlimit (nnnnnn.nn)"); /*, "hierarchie" => "Hierarchie", "potenzial" => "Potenzial", "ar" => "Debitorenkonto", "ap" => "Kreditorenkonto", "matchcode" => "Matchcode", - "customernumber2" => "Kundennummer 2"); + "customernumber2" => "Kundennummer 2"); + Kundenspezifisch */ $shiptos = array( "shiptoname" => "Firmenname", @@ -64,41 +66,57 @@ $parts = array( "partnumber" => "Artikelnummer", "description" => "Artikeltext", "unit" => "Einheit", - "weight" => "Gewicht (kg)", + "weight" => "Gewicht in Benutzerdefinition", "onhand" => "Lagerbestand", "notes" => "Beschreibung", "makemodel" => "Hersteller", "model" => "Modellbezeichnung", - "income_accno_id" => "Erlöskonto", - "expense_accno_id" => "Konto Umsatzkosten", "bin" => "Lagerort", "image" => "Pfad/Dateiname", "drawing" => "Pfad/Dateiname", "microfiche" => "Pfad/Dateiname", - "partsgroup_id" => "Name Warengruppe", "listprice" => "Listenpreis", "sellprice" => "Verkaufspreis", "lastcost" => "letzter EK", - "art" => "Ware/Dienstleistung (*/d)"); + "art" => "Ware/Dienstleistung (*/d), muß vor den Konten kommen", + "inventory_accno" => "Bestandskonto", + "income_accno" => "Erlöskonto", + "expense_accno" => "Konto Umsatzkosten", + "obsolete" => "Gesperrt (Y/N)", + "lastcost" => "letzer EK-Preis", + "rop" => "Mindestbestand", + "shop" => "Shopartikel (Y/N)", + "assembly" => "Stückliste (Y/N); wird noch nicht unterstützt", + "partsgroup" => "Warengruppenbezeichnung", + //"income_accno_0" => "?Nummer? für Erlöse Inland", + //"income_accno_1" => "?Nummer? für Erlöse EG", + //"income_accno_3" => "?Nummer? für Erlöse Ausland", + ); $contactscrm = array( "customernumber" => "Kundennummer", "vendornumber" => "Lieferantennummer", "cp_cv_id" => "FirmenID in der db", "firma" => "Firmenname", + "cp_abteilung" => "Abteilung", + "cp_position" => "Position/Hierarchie", "cp_greeting" => "Anrede", "cp_title" => "Titel", "cp_givenname" => "Vorname", - "cp_greeting" => "Anrede", "cp_name" => "Nachname", "cp_email" => "eMail", "cp_phone1" => "Telefon 1", "cp_phone2" => "Telefon 2", + "cp_mobile1" => "Mobiltelefon 1", + "cp_mobile2" => "Mobiltelefon 2", + "cp_homepage" => "Homepage", "cp_street" => "Strasse", + "cp_country" => "Land", "cp_zipcode" => "PLZ", "cp_city" => "Ort", + "cp_privatphone" => "Privattelefon", + "cp_privatemail" => "private eMail", "cp_notes" => "Bemerkungen", - "cp_country" => "Land", "cp_stichwort1" => "Stichwort(e)", "katalog" => "Katalog", "inhaber" => "Inhaber", @@ -118,6 +136,11 @@ $contacts = array( "cp_email" => "eMail", "cp_phone1" => "Telefon 1", "cp_phone2" => "Telefon 2", + "cp_mobile1" => "Mobiltelefon 1", + "cp_mobile2" => "Mobiltelefon 2", + "cp_privatphone" => "Privattelefon", + "cp_privatemail" => "private eMail", + "cp_homepage" => "Homepage", "katalog" => "Katalog", "inhaber" => "Inhaber", "contact_id" => "Kontakt ID" @@ -251,6 +274,12 @@ global $db; } } +function getAllBG($db) { + $sql = "select * from buchungsgruppen order by description"; + $rs=$db->getAll($sql); + return $rs; +} + class myDB extends DB { // Datenbankklasse diff --git a/lxo-import/partsB.php b/lxo-import/partsB.php new file mode 100644 index 000000000..2388fef7a --- /dev/null +++ b/lxo-import/partsB.php @@ -0,0 +1,123 @@ + + + + +Holger Lindemann +*/ + +/* get login via GET or POST */ +if ($_GET["login"]) { + $login=$_GET["login"]; +} else { + $login=$_POST["login"]; +}; + +require ("import_lib.php"); +/* get DB instance */ +$db=new myDB($login); + + +/* just display page or do real import? */ +if ($_POST["ok"]) { + + +require ("parts_import.php"); + +function ende($nr) { + echo "Abbruch: $nr
      "; + echo "Fehlende oder falsche Daten."; + exit(1); +} + +/* display help */ +if ($_POST["ok"]=="Hilfe") { + echo "Importfelder:
      "; + echo "Feldname => Bedeutung
      "; + foreach($parts as $key=>$val) { + echo "$key => $val
      "; + } + echo "Jeder Artikel muß einer Buchungsgruppe zugeordnet werden. "; + echo "Dazu muß entweder in der Maske eine Standardbuchungsgruppe gewählt werden
      "; + echo "oder es wird ein gültiges Konto in 'income_accno_id' und 'expense_accno_id' eingegeben. "; + echo "Das Programm versucht dann eine passende Buchungsgruppe zu finden."; + exit(0); +}; + +clearstatcache (); + +$test = $_POST["test"]; +$trenner = ($_POST["trenner"])?$_POST["trenner"]:","; +$file = "parts"; + +/* no data? */ +if (empty($_FILES["Datei"]["name"])) + ende (2); + +/* copy file */ +if (!move_uploaded_file($_FILES["Datei"]["tmp_name"],$file.".csv")) { + echo "Upload von Datei fehlerhaft."; + echo $_FILES["Datei"]["error"], "
      "; + ende (2); +} + +/* ??? */ +if (!file_exists("../users/$login.conf")) + ende(3); + +/* check if file is really there */ +if (!file_exists("$file.csv")) + ende(5); + +/* ??? */ +if (!$db->chkcol($file)) + ende(6); + +/* ??? */ +if (!chkUsr($login)) + ende(4); + +/* first check all elements */ +echo "Checking data:
      "; +$err = import_parts($db, $file, $trenner, $parts, TRUE, FALSE, FALSE,$_POST); +echo "$err Errors found\n"; + + +if ($err!=0) + exit(0); + +/* just print data or insert it, if test is false */ +import_parts($db, $file, $trenner, $parts, FALSE, !$test, TRUE,$_POST); + +} else { + $bugrus=getAllBG($db); +?> + +

      Artikelimport für die ERP

      +
      +
      + + +

      VariablennameBedeutung
      employee_addressAdressfeld
      employee_businessnumberFirmennummer
      employee_companyFirmenname
      employee_co_ustidUsatzsteuer-Identifikationsnummer
      employee_dunsDUNS-Nummer
      employee_email Emailemployee_signature Signatur
      employee_taxnumberSteuernummer
      employee_tel Telefonnummerordnumber Auftragsnummer, wenn die Rechnung aus einem Auftrag erstellt wurde
      payment_termsZahlungskonditionen
      quonumber Angebotsnummer
      + + + + + + + +
      Trennzeichen
      Testja
      ArtWare   + Dienstleistung + gemischt (Spalte 'art' vorhanden)
      Default Bugru
      + nie
      + für alle Artikel verwenden + für Artikel ohne passende Bugru +
      Daten
      + + diff --git a/lxo-import/parts_import.php b/lxo-import/parts_import.php new file mode 100644 index 000000000..d147a2ffa --- /dev/null +++ b/lxo-import/parts_import.php @@ -0,0 +1,300 @@ + +//Holger Lindemann + +/** + * Returns ID of a partgroup (or adds a new partgroup entry) + * \db is the database + * \value is the partgroup name + * \add if true and partgroup does not exist yet, we will add it automatically + * \returns partgroup id or "" in case of an error + */ +function getPartsgroupId($db, $value, $add) { + + $sql="select id from partsgroup where partsgroup = '$value'"; + $rs=$db->getAll($sql); + if (empty($rs[0]["id"]) && $add) { + $sql="insert into partsgroup (partsgroup) values ('$value')"; + $rc=$db->query($sql); + if (!$rc) + return ""; + return getPartsgroupId($db, $value, 0); + } + return $rs[0]["id"]; +} + +function getAccnoId($db, $accno) { + $sql = "select id from chart where accno='$accno'"; + $rs=$db->getAll($sql); + return $rs[0]["id"]; +} + +function chkPartNumber($db,$number,$check) { + if ($number<>"") { + $sql = "select * from parts where partnumber = '$number'"; + $rs=$db->getAll($sql); + } + //echo $sql; print_r($rs); + if ($rs[0]["id"]>0 or $number=="") { + if ($check) return "check"; + $rc=$db->query("BEGIN"); + $sql = "select articlenumber from defaults"; + $rs=$db->getAll($sql); + if ($rs[0]["articlenumber"]) { + preg_match("/([^0-9]+)?([0-9]+)([^0-9]+)?/", $rs[0]["articlenumber"] , $regs); + $number=$regs[1].($regs[2]+1).$regs[3]; + } + $sql = "update defaults set articlenumber = '$number'"; + $rc=$db->query($sql); + $rc=$db->query("COMMIT"); + $sql = "select * from parts where partnumber = '$number'"; + $rs=$db->getAll($sql); + if ($rs[0]["id"]>0) return ""; + } + return $number; +} + +function getBuchungsgruppe($db, $income, $expense) { + + $income_id = getAccnoId($db, $income); + $expense_id = getAccnoId($db, $expense); + //$accno0_id = getAccnoId($db, $accno0); + //$accno1_id = getAccnoId($db, $accno1); + //$accno3_id = getAccnoId($db, $accno3); + + $sql = "select id from buchungsgruppen where "; + $sql .= "income_accno_id_0 = $income_id and "; + $sql .= "expense_accno_id_0 = $expense_id "; + //$sql .= "income_accno_id_0 = '$accno0_id' "; + //$sql .= "and income_accno_id_1 = '$accno1_id' "; + //$sql .= "and income_accno_id_3 = '$accno3_id'"; + $rs=$db->getAll($sql); + return $rs[0]["id"]; +} + + +function getFromBG($db, $bg_id, $name) { + + $sql = "select $name from buchungsgruppen where id='$bg_id'"; + $rs=$db->getAll($sql); + return $rs[0][$name]; +} + +function existUnit($db, $value) { + $sql="select name from units where name = '$value'"; + $rs=$db->getAll($sql); + if (empty($rs[0]["name"])) + return FALSE; + return TRUE; +} + +function show($show, $things) { + if ($show) + echo $things; +} + +function import_parts($db, $file, $trenner, $fields, $check, $insert, $show,$maske) { + + /* field description */ + $parts_fld = array_keys($fields); + + /* open csv file */ + $f=fopen("$file.csv","r"); + + /* + * read first line with table descriptions + */ + show( $show, "\n"); + $infld=fgetcsv($f,1200,$trenner); + foreach ($infld as $fld) { + $fld = strtolower(trim(strtr($fld,array("\""=>"","'"=>"")))); + $in_fld[]=$fld; + if (in_array(trim($fld),$parts_fld)) { + show( $show, "\n"); + } + } + + $m=0; /* line */ + $errors=0; /* number of errors detected */ + $income_accno = ""; + $expense_accno = ""; + while ( ($zeile=fgetcsv($f,1200,$trenner)) != FALSE) { + $i=0; /* column */ + $m++; /* increase line */ + + $sql="insert into $file "; + $keys="("; + $vals=" values ("; + + show( $show, "\n"); + + /* for each column */ + $dienstleistung=false; + $artikel=-1; + $partNr=false; + foreach($zeile as $data) { + /* check if column will be imported */ + if (!in_array(trim($in_fld[$i]),$parts_fld)) { + $i++; + continue; + }; + $data=trim($data); + //$data=addslashes($data); + $key=$in_fld[$i]; + /* add key and data */ + if ($data==false or empty($data) or !$data) { + show( $show, "\n"); + $i++; + continue; + } + + /* special case partsgroup */ + if ($key == "partsgroup") { + + /* get ID of partsgroup or add new + * partsgroup_id */ + $data = getPartsgroupId($db, $data, $insert); + $key = "partsgroup_id"; + + /* TODO error handling */ + + } else if ($key == "lastcost" || + $key == "sellprice") { + + /* convert 0,0 numeric into 0.0 */ + $data = str_replace(",", ".", $data); + + } else if ($key == "partnumber") { + $partNr=true; + $partnumber=chkPartNumber($db,$data,$check); + if ($partnumber=="") { + show( $show, "\n"); + $i++; + continue; + } else { + //$keys.="partnumber, "; + $data=$partnumber; + //show( $show, "\n"); + } + } else if ($key == "description") { + $data=mb_convert_encoding($data,"ISO-8859-15","auto"); + $data=addslashes($data); + } else if ($key == "notes") { + $data=mb_convert_encoding($data,"ISO-8859-15","auto"); + $data=addslashes($data); + } else if ($key == "unit") { + /* convert stück and Stunde */ + if (preg_match("/^st..?ck$/i", $data)) + $data = "Stck"; + else if ($data == "Stunde") + $data = "Std"; + /* check if unit exists */ + if (!existUnit($db, $data)) { + echo "Error in line $m: "; + echo "Einheit $data existiert nicht "; + echo "Bitte legen Sie diese Einheit an
      "; + $errors++; + } + } else if ($key == "art") { + if ($maske["ware"]=="G" and strtoupper($data)=="D") { $artikel=false; } + else if ($maske["ware"]=="G") { $artikel=true; }; + $i++; + continue; + } else if ($key == "income_accno") { + $income_accno = $data; + $i++; + show( $show, "\n"); + continue; + } else if ($key == "expense_accno") { + $expense_accno = $data; + $i++; + show( $show, "\n"); + continue; + } + /* convert JA to Yes */ + if ($data == "J" ) + $data = "Y"; + + $vals.="'".$data."',"; + show( $show, "\n"); + $keys.=$key.","; + + $i++; + } + if ($artikel==-1) { + if ($maske["ware"]=="D") { $artikel=false; } + else { $artikel=true; }; + } + if ($maske["bugrufix"]==1) { + $bg = $maske["bugru"]; + } else { + if ($income_accno<>"" and $expense_accno<>"") { + /* search for buchungsgruppe */ + $bg = getBuchungsgruppe($db, $income_accno, $expense_accno); + if ($bg == "" and $maske["bugrufix"]==2 and $maske["bugru"]<>"") { + $bg = $maske["bugru"]; + } + } else if ($maske["bugru"]<>"" and $maske["bugrufix"]==2) { + $bg = $maske["bugru"]; + } else { + /* nothing found? user must create one */ + echo "Error in line $m: "; + echo "Keine Buchungsgruppe gefunden für
      "; + echo "Erlöse Inland: $income_accno
      "; + echo "Bitte legen Sie eine an oder geben Sie eine vor.
      "; + echo "
      "; + $errors++; + } + } + if ($bg > 0) { + /* found one, add income_accno_id etc from buchungsgr. + */ + $keys.="buchungsgruppen_id, "; + $vals.="'$bg', "; + /* XXX nur bei artikel!!! */ + if ($artikel) { + $keys.="inventory_accno_id, "; + $vals.=getFromBG($db, $bg, "inventory_accno_id")." ,"; + }; + $keys.="income_accno_id, "; + $vals.=getFromBG($db, $bg, "income_accno_id_0")." ,"; + $keys.="expense_accno_id,"; + $vals.=getFromBG($db, $bg, "expense_accno_id_0")." ,"; + } + if ($partNr==false) { + $partnumber=chkPartNumber($db,"",$check); + if ($partnumber=="") { + show( $show, "\n"); + $errors++; + } else { + $keys.="partnumber, "; + $vals.="'$partnumber',"; + show( $show, "\n"); + } + } + $sql.=$keys."import)"; + $sql.=$vals.time().")"; + //show( $show, "\n"); + + if ($insert) { + show( $show, "\n"); + } + + show( $show, "\n"); + } + + show( $show, "
      #$fld
      $mNULLNULL$partnumber$data$data$dataNULL$partnumber $sql "); + $db->showErr = TRUE; + $rc=$db->query($sql); + if (!$rc) { + echo "Fehler"; + $fehler++; + } + show( $show, "
      \n"); + fclose($f); + echo "$m Zeilen bearbeitet. ($fehler : Fehler) "; + return $errors; +} + +?> + diff --git a/lxo-import/shiptoB.php b/lxo-import/shiptoB.php index 946b17296..c9115145b 100644 --- a/lxo-import/shiptoB.php +++ b/lxo-import/shiptoB.php @@ -39,7 +39,7 @@ if ($_POST["ok"]) { if ($_POST["ok"]=="Hilfe") { echo "Importfelder:
      "; echo "Feldname => Bedeutung
      "; - foreach($contact as $key=>$val) { + foreach($shiptos as $key=>$val) { echo "$key => $val
      "; } exit(0); diff --git a/makesymlinks b/makesymlinks index b5c0b0461..25f95e71e 100755 --- a/makesymlinks +++ b/makesymlinks @@ -3,7 +3,7 @@ # Erstellt die benotigten Symlinks ln -vsf login.pl admin.pl -for i in ap ar bp ca cp ct cn dn gl ic ir is menu oe pe rc rp datev licenses fa ustva menunew common; do +for i in ap ar bp ca cp ct cn dn gl ic ir is menu oe pe rc rp datev licenses fa ustva menunew common menuv3; do ln -vsf am.pl $i.pl done diff --git a/menu.ini b/menu.ini index 3c563cc6d..01c131779 100644 --- a/menu.ini +++ b/menu.ini @@ -598,6 +598,9 @@ module=lxo-import/contactB.php [System--Import CSV--Shipto] module=lxo-import/shiptoB.php +[System--Import CSV--Parts] +module=lxo-import/partsB.php + #[System--SIC] #module=menu.pl #action=acc_menu @@ -612,133 +615,6 @@ module=lxo-import/shiptoB.php #module=am.pl #action=list_sic -[System--HTML Templates] -module=menu.pl -action=acc_menu -target=acc_menu -submenu=1 - -[System--HTML Templates--Income Statement] -module=am.pl -action=display_form -file=templates=income_statement.html - -[System--HTML Templates--BWA] -module=am.pl -action=display_form -file=templates=bwa.html - -[System--HTML Templates--Balance Sheet] -module=am.pl -action=display_form -file=templates=balance_sheet.html - -[System--HTML Templates--Invoice] -module=am.pl -action=display_form -file=templates=invoice.html - -[System--HTML Templates--Packing List] -module=am.pl -action=display_form -file=templates=packing_list.html - -[System--HTML Templates--Sales Order] -module=am.pl -action=display_form -file=templates=sales_order.html - -[System--HTML Templates--Purchase Order] -module=am.pl -action=display_form -file=templates=purchase_order.html - -[System--HTML Templates--Statement] -module=am.pl -action=display_form -file=templates=statement.html - -[System--HTML Templates--Quotation] -module=am.pl -action=display_form -file=templates=sales_quotation.html - -[System--HTML Templates--RFQ] -module=am.pl -action=display_form -file=templates=request_quotation.html - -[System--HTML Templates--UStVA] -module=am.pl -action=display_form -file=templates=ustva.html - -[System--LaTeX Templates] -module=menu.pl -action=acc_menu -target=acc_menu -submenu=1 - -[System--LaTeX Templates--Invoice] -module=am.pl -action=display_form -file=templates=invoice.tex - -[System--LaTeX Templates--Packing List] -module=am.pl -action=display_form -file=templates=packing_list.tex - -[System--LaTeX Templates--Sales Order] -module=am.pl -action=display_form -file=templates=sales_order.tex - -[System--LaTeX Templates--Purchase Order] -module=am.pl -action=display_form -file=templates=purchase_order.tex - -[System--LaTeX Templates--Statement] -module=am.pl -action=display_form -file=templates=statement.tex - -[System--LaTeX Templates--Check] -module=am.pl -action=display_form -file=templates=check.tex - -[System--LaTeX Templates--Receipt] -module=am.pl -action=display_form -file=templates=receipt.tex - -[System--LaTeX Templates--Quotation] -module=am.pl -action=display_form -file=templates=sales_quotation.tex - -[System--LaTeX Templates--RFQ] -module=am.pl -action=display_form -file=templates=request_quotation.tex - -[System--LaTeX Templates--UStVA 2006] -module=am.pl -action=display_form -file=templates=ustva-2006.tex - -[System--LaTeX Templates--UStVA 2005] -module=am.pl -action=display_form -file=templates=ustva-2005.tex - -[System--LaTeX Templates--UStVA 2004] -module=am.pl -action=display_form -file=templates=ustva-2004.tex - [System--Stylesheet] module=am.pl action=display_stylesheet diff --git a/scripts/dbupgrade2_tool.pl b/scripts/dbupgrade2_tool.pl new file mode 100755 index 000000000..850ef8d71 --- /dev/null +++ b/scripts/dbupgrade2_tool.pl @@ -0,0 +1,192 @@ +#!/usr/bin/perl + +BEGIN { + if (! -d "bin" || ! -d "SL") { + print("This tool must be run from the Lx-Office ERP base directory.\n"); + exit(1); + } +} + +use DBI; +use Data::Dumper; +use Getopt::Long; + +use SL::LXDebug; + +$lxdebug = LXDebug->new(); + +use SL::Form; +use SL::DBUpgrade2; + +####### +####### +####### + +sub show_help { + print("dbupgrade2_tool.pl [--list] [--tree] [--rtree] [--graphviz]\n" . + " [--nodepds] [--help]\n"); +} + +sub calc_rev_depends { + map({ $_->{"rev_depends"} = []; } values(%{$controls})); + foreach my $control (values(%{$controls})) { + map({ push(@{$controls->{$_}{"rev_depends"}}, $control->{"tag"}) } + @{$control->{"depends"}}); + } +} + +sub dump_list { + my @sorted_controls = sort_dbupdate_controls($controls); + + print("LIST VIEW\n\n"); + print("number tag depth priority\n"); + $i = 0; + foreach (@sorted_controls) { + print("$i $_->{tag} $_->{depth} $_->{priority}\n"); + $i++; + } + + print("\n"); +} + +sub dump_node { + my ($tag, $depth) = @_; + + print(" " x $depth . $tag . "\n"); + + my $c = $controls->{$tag}; + my $num = scalar(@{$c->{"depends"}}); + for (my $i = 0; $i < $num; $i++) { + dump_node($c->{"depends"}[$i], $depth + 1); + } +} + +sub dump_tree { + print("TREE VIEW\n\n"); + + calc_rev_depends(); + + my @sorted_controls = sort_dbupdate_controls($controls); + + foreach my $control (@sorted_controls) { + dump_node($control->{"tag"}, "") unless (@{$control->{"rev_depends"}}); + } + + print("\n"); +} + +sub dump_node_reverse { + my ($tag, $depth) = @_; + + print(" " x $depth . $tag . "\n"); + + my $c = $controls->{$tag}; + my $num = scalar(@{$c->{"rev_depends"}}); + for (my $i = 0; $i < $num; $i++) { + dump_node_reverse($c->{"rev_depends"}[$i], $depth + 1); + } +} + +sub dump_tree_reverse { + print("REVERSE TREE VIEW\n\n"); + + calc_rev_depends(); + + my @sorted_controls = sort_dbupdate_controls($controls); + + foreach my $control (@sorted_controls) { + last if ($control->{"depth"} > 1); + dump_node_reverse($control->{"tag"}, ""); + } + + print("\n"); +} + +sub dump_graphviz { + print("GRAPHVIZ POSTCRIPT\n\n"); + print("Output will be written to db_dependencies.ps\n"); + $dot = "|dot -Tps "; + open(OUT, "${dot}> db_dependencies.ps"); + print(OUT + "digraph db_dependencies {\n" . + "node [shape=box];\n"); + my %ranks; + foreach my $c (values(%{$controls})) { + $ranks{$c->{"depth"}} = [] unless ($ranks{$c->{"depth"}}); + push(@{$ranks{$c->{"depth"}}}, $c->{"tag"}); + } + foreach (sort(keys(%ranks))) { + print(OUT "{ rank = same; " . + join("", map({ '"' . $_ . '"; ' } @{$ranks{$_}})) . + " }\n"); + } + foreach my $c (values(%{$controls})) { + print(OUT "$c->{tag};\n"); + foreach my $d (@{$c->{"depends"}}) { + print(OUT "$c->{tag} -> $d;\n"); + } + } + print(OUT "}\n"); + close(OUT); +} + +sub dump_nodeps { + calc_rev_depends(); + + print("SCRIPTS NO OTHER SCRIPTS DEPEND ON\n\n" . + join("\n", + map({ $_->{"tag"} } + grep({ !@{$_->{"rev_depends"}} } + values(%{$controls})))) . + "\n\n"); +} + +####### +####### +####### + +eval { require "lx-erp.conf"; }; + +$form = Form->new(); +$locale = Locale->new("de", "login"); + +####### +####### +####### + +my ($opt_list, $opt_tree, $opt_rtree, $opt_nodeps, $opt_graphviz, $opt_help); + +GetOptions("list" => \$opt_list, + "tree" => \$opt_tree, + "rtree" => \$opt_rtree, + "nodeps" => \$opt_nodeps, + "graphviz" => \$opt_graphviz, + "help" => \$opt_help, + ); + +if ($opt_help) { + show_help(); + exit(0); +} + +$controls = parse_dbupdate_controls($form, "Pg"); + +if ($opt_list) { + dump_list(); +} + +if ($opt_tree) { + dump_tree(); +} + +if ($opt_rtree) { + dump_tree_reverse(); +} + +if ($opt_graphviz) { + dump_graphviz(); +} + +if ($opt_nodeps) { + dump_nodeps(); +} diff --git a/scripts/find-use.pl b/scripts/find-use.pl new file mode 100644 index 000000000..63bbc0e8e --- /dev/null +++ b/scripts/find-use.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl -w +=head1 NAME + +find-use + +=head1 EXAMPLE + + ~/ledgersmb # utils/devel/find-use + 0.000000 : HTML::Entities + 0.000000 : Locale::Maketext::Lexicon + 0.000000 : Module::Build + ... + +=head1 EXPLINATION + +This util is useful for package builders to identify all the CPAN dependencies we've made. It required Module::CoreList (which is core, but is not yet in any stable +release of perl) to determine if a module is distributed with perl or not. The output reports which version of perl the module is in. If it reports 0.000000, then the +module is not in core perl, and needs to be installed before Lx-Office will operate. + +=head1 AUTHOR + +http://www.ledgersmb.org/ - The LedgerSMB team + +=head1 LICENSE + +Distributed under the terms of the GNU General Public License v2. +=cut + + +use strict; +use warnings; + +open GREP, "grep -r '^use ' . |"; +use Module::CoreList; + +my %uselines; +while() { + next if /SL::/; + next if /LX::/; + next if /use warnings/; + next if /use strict/; + next if /use vars/; + chomp; + my ($file, $useline) = m/^([^:]+):use\s(.*?)$/; + $uselines{$useline}||=[]; + push @{$uselines{$useline}}, $file; +} + +my %modules; +foreach my $useline (keys %uselines) { + + my ($module) = grep { $_ } $useline =~ /(?:base ['"]([a-z:]+)|([a-z:]+)(?:\s|;))/i; + my $version = Module::CoreList->first_release($module); + $modules{$module} = $version||0; +} + +foreach my $mod (sort { $modules{$a} == 0 ? -1 : $modules{$b} == 0 ? 1 : 0 or $a cmp $b } keys %modules) { + printf "%2.6f : %s\n", $modules{$mod}, $mod; +} + diff --git a/sql/Germany-DATEV-SKR03EU-chart.sql b/sql/Germany-DATEV-SKR03EU-chart.sql index 42b605a47..ac30924df 100644 --- a/sql/Germany-DATEV-SKR03EU-chart.sql +++ b/sql/Germany-DATEV-SKR03EU-chart.sql @@ -109,23 +109,23 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4673', 'Reisek.Untern.m.Vorsteuerabzug (öffentl.Verkehrsm.', 'A', 'E', 'AP_amount', '4673', 8, NULL, 15, NULL, 18, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4674', 'Reisekosten Untern.Verpflegungsmehr', 'A', 'E', 'AP_amount', '4674', 0, NULL, 15, NULL, 18, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4676', 'Reisekosten Untern.Übernachtungsauf', 'A', 'E', 'AP_amount', '4676', 0, NULL, 15, NULL, 18, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4700', 'Kosten der Warenabgabe', 'A', 'E', 'AP_amount:IC_cogs', '4700', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4710', 'Verpackungsmaterial', 'A', 'E', 'AP_amount:IC_cogs', '4710', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4730', 'Ausgangsfracht', 'A', 'E', 'AP_amount:IC_cogs', '4730', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4750', 'Transportversicherung', 'A', 'E', 'AP_amount:IC_cogs:IC_expense', '4750', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4760', 'Verkaufsprovision', 'A', 'E', 'AP_amount:IC_expense', '4760', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4780', 'Fremdarbeiten', 'A', 'E', 'AP_amount:IC_expense', '4780', 16, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4700', 'Kosten der Warenabgabe', 'A', 'E', 'AP_amount:IC_cogs', '4700', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4710', 'Verpackungsmaterial', 'A', 'E', 'AP_amount:IC_cogs', '4710', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4730', 'Ausgangsfracht', 'A', 'E', 'AP_amount:IC_cogs', '4730', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4750', 'Transportversicherung', 'A', 'E', 'AP_amount:IC_cogs:IC_expense', '4750', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4760', 'Verkaufsprovision', 'A', 'E', 'AP_amount:IC_expense', '4760', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4780', 'Fremdarbeiten', 'A', 'E', 'AP_amount:IC_expense', '4780', 0, NULL, NULL, NULL, 24, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4790', 'Aufwand für Gewährleistungen', 'A', 'E', 'AP_amount:IC_expense', '4790', 0, NULL, 20, NULL, 24, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4800', 'Rep.u.Instandhaltungen v.techn.Anlagen u.Maschinen', 'A', 'E', 'AP_amount', '4800', 9, NULL, 18, NULL, 19, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4806', 'Wartungskosten für Hard-u.Software', 'A', 'E', 'AP_amount:IC_expense', '4806', 9, NULL, 18, NULL, 19, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4809', 'Sonstige Reparaturen u.Instandhalt.', 'A', 'E', 'AP_amount', '4809', 9, NULL, NULL, NULL, 19, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4810', 'Mietleasing', 'A', 'E', 'AP_amount', '4810', 0, NULL, 20, NULL, 24, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4815', 'Kaufleasing', 'A', 'E', 'AP_amount', '4815', 0, NULL, 20, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4822', 'Abschreibungen a.immat.Vermögensgeg', 'A', 'E', '', '4822', 17, NULL, NULL, NULL, 25, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4824', 'Abschreibung a.d.Geschäft-o.Firmenw', 'A', 'E', '', '4824', 17, NULL, NULL, NULL, 25, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4840', 'Außerplanmäßig Abschr.a.Sachanlagen', 'A', 'E', '', '4840', 17, NULL, NULL, NULL, 25, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4855', 'Sofortabschreibung GWG', 'A', 'E', 'AP_amount', '4855', 17, NULL, NULL, NULL, 26, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4860', 'Abschreibungen auf aktivierte GWG', 'A', 'E', '', '4860', 17, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4822', 'Abschreibungen a.immat.Vermögensgeg', 'A', 'E', '', '4822', 0, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4824', 'Abschreibung a.d.Geschäft-o.Firmenw', 'A', 'E', '', '4824', 0, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4840', 'Außerplanmäßig Abschr.a.Sachanlagen', 'A', 'E', '', '4840', 0, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4855', 'Sofortabschreibung GWG', 'A', 'E', 'AP_amount', '4855', 0, NULL, NULL, NULL, 26, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4860', 'Abschreibungen auf aktivierte GWG', 'A', 'E', '', '4860', 0, NULL, NULL, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4900', 'Sonstige betriebliche Aufwendungen', 'A', 'E', 'AP_amount', '4900', 9, NULL, 20, NULL, 24, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4905', 'Sons.Aufw.betriebl. und regelmäßig', 'A', 'E', 'AP_amount', '4905', 9, NULL, NULL, NULL, 24, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4909', 'Fremdleistungen', 'A', 'E', 'AP_amount', '4909', 0, NULL, 20, NULL, 24, FALSE); @@ -180,9 +180,9 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('8935', 'Unentgeltl.Zuwend.v.Gegens. 16% Ust', 'A', 'I', 'AR_amount', '8935', 3, 51, NULL, NULL, 3, TRUE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('8950', 'Nicht steuerbare Umsätze', 'A', 'I', '', '8950', 0, NULL, 5, NULL, 1, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('8955', 'Umsatzsteuervergütungen', 'A', 'I', '', '8955', 0, NULL, NULL, NULL, 7, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9000', 'Saldenverträge,Sachkonten', 'A', 'A', '', '9000', 0, NULL, NULL, NULL, NULL, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9008', 'Saldenverträge,Debitoren', 'A', 'A', '', '9008', 0, NULL, NULL, NULL, NULL, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9009', 'Saldenverträge,Kreditoren', 'A', 'L', '', '9009', 0, NULL, NULL, NULL, NULL, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9000', 'Saldenvorträge,Sachkonten', 'A', 'A', '', '9000', 0, NULL, NULL, NULL, NULL, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9008', 'Saldenvorträge,Debitoren', 'A', 'A', '', '9008', 0, NULL, NULL, NULL, NULL, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9009', 'Saldenvorträge,Kreditoren', 'A', 'L', '', '9009', 0, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9090', 'Summenvortragskonto', 'A', 'A', '', '9090', 0, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('8400', 'Erlöse 16% USt.', 'A', 'I', 'AR_amount:IC_sale:IC_income', '8400', 3, 51, 1, NULL, 1, TRUE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('8800', 'Erlöse aus Anlagenverkäufen', 'A', 'I', 'AR_amount', '8800', 3, 51, NULL, NULL, 1, FALSE); @@ -194,8 +194,8 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('0650', 'Vblk.geg.Kreditinst.- Restlaufzeit grösser als 5 Jahre', 'A', 'A', '', '0650', 0, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4510', 'Kfz-Steuer', 'A', 'E', 'AP_amount', '4510', 0, NULL, 19, NULL, 15, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('4520', 'Kfz-Versicherungen', 'A', 'E', 'AP_amount', '4520', 0, NULL, 14, NULL, 16, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1771', 'Umsatzsteuer 7%', 'A', 'I', 'AR_tax:IC_taxpart:IC_taxservice:CT_tax', '1771', 861, NULL, NULL, NULL, 5, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1775', 'Umsatzsteuer 16%', 'A', 'I', 'AR_tax:IC_taxpart:IC_taxservice:CT_tax', '1775', 511, NULL, NULL, NULL, 6, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1771', 'Umsatzsteuer 7%', 'A', 'I', 'AR_tax:IC_taxpart:IC_taxservice:CT_tax', '1771', 0, NULL, NULL, NULL, 5, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1775', 'Umsatzsteuer 16%', 'A', 'I', 'AR_tax:IC_taxpart:IC_taxservice:CT_tax', '1775', 0, NULL, NULL, NULL, 6, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1767', 'Im anderen EG-Staat steuerpfl. Lieferung', 'A', ' ', '', '1767', 10, NULL, 0, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('0853', 'Satzungsm.Rücklagen 0% Vorbelast.(st.Einlagekto.)', 'A', 'Q', '', '0853', 0, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1607', 'Vblk.a.LuL ohne Vorsteuer (EÜR)', 'A', 'L', 'AP', '1607', 0, NULL, NULL, NULL, NULL, FALSE); @@ -259,7 +259,7 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('8922', 'Verwend.f.Gegenst.f.Zwecke außerh.d.Untern.16%USt(Telefonnutzung)', 'A', 'I', '', '8922', 0, 0, 5, NULL, 3, TRUE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1000', 'Kasse', 'A', 'A', 'AR_paid:AP_paid', '1000', 0, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1572', 'Steuerpflicht. EG-Erwerb 7%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice', '1572', 0, 61, NULL, NULL, 27, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1571', 'Abziebare Vorsteuer 7%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice:CT_tax', '1570', 0, 66, NULL, NULL, 27, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1571', 'Abziehbare Vorsteuer 7%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice:CT_tax', '1570', 0, 66, NULL, NULL, 27, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1573', 'Steuerpflicht. EG-Erwerb 16%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice', '1573', 0, 61, NULL, NULL, 27, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1575', 'Abziehbare Vorsteuer 16%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice:CT_tax', '1570', 0, 66, NULL, NULL, 27, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1772', 'Steuerpflicht. EG-Lieferungen 7%', 'A', 'I', 'AR_tax:IC_taxpart:IC_taxservice', '1772', 0, NULL, NULL, NULL, 6, FALSE); diff --git a/sql/Germany-DATEV-SKR04EU-chart.sql b/sql/Germany-DATEV-SKR04EU-chart.sql index ea0db7ab0..fffd56afa 100644 --- a/sql/Germany-DATEV-SKR04EU-chart.sql +++ b/sql/Germany-DATEV-SKR04EU-chart.sql @@ -27,7 +27,7 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1249', 'Pauschalwertbe.z.Ford.ueb1J.', 'A', 'E', '', '1249', 0, NULL, 31, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1370', 'Durchlaufende Posten', 'A', 'A', '', '1370', 0, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1374', 'Fremdgeld', 'A', 'A', '', '1374', 0, NULL, NULL, NULL, NULL, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1401', 'Abziebare Vorsteuer 7%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice:CT_tax', '1401', 0, 66, NULL, NULL, 27, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1401', 'Abziehbare Vorsteuer 7%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice:CT_tax', '1401', 0, 66, NULL, NULL, 27, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1402', 'Abziehbare Vorsteuer aus EG-Erwerb 7%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice', '1402', 0, 61, NULL, NULL, 27, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1403', 'Abziehbare Vorsteuer aus EG-Erwerb 16%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice', '1403', 0, 61, NULL, NULL, 27, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('1405', 'Abziehbare Vorsteuer 16%', 'A', 'E', 'AP_tax:IC_taxpart:IC_taxservice:CT_tax', '1405', 0, 66, NULL, NULL, 27, FALSE); @@ -195,13 +195,13 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6120', 'Beiträge zur Berufsgenossenschaft', 'A', 'E', '', '6120', 0, NULL, 10, NULL, 10, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6130', 'Freiwillig soziale Aufwendungen lohnsteuerfrei', 'A', 'E', '', '6130', 0, NULL, 10, NULL, 10, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6147', 'Pauschale Lohnsteuer auf sonst.Bezüge(z.B.Direktversicherung', 'A', 'E', '', '6147', 0, NULL, 10, NULL, 9, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6200', 'Abschreibungen a.immat.Vermögensgeg', 'A', 'E', '', '6200', 17, NULL, NULL, NULL, 25, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6205', 'Abschreibung a.d.Geschäft-o.Firmenw', 'A', 'E', '', '6205', 17, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6200', 'Abschreibungen a.immat.Vermögensgeg', 'A', 'E', '', '6200', 0, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6205', 'Abschreibung a.d.Geschäft-o.Firmenw', 'A', 'E', '', '6205', 0, NULL, NULL, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6210', 'Außerplan.AfA a.immat.Vermögensgeg.', 'A', 'E', '', '6210', 0, NULL, 17, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6221', 'Abschreibung auf Gebäude', 'A', 'E', '', '6221', 0, NULL, 17, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6220', 'Abschreibungen auf Sachanlagen (o.Kfz u.Geb.)', 'A', 'E', '', '6220', 0, NULL, 17, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6222', 'Abschreibungen auf Kfz', 'A', 'E', '', '6222', 0, NULL, 17, NULL, 25, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6230', 'Außerplanmäßig Abschr.a.Sachanlagen', 'A', 'E', '', '6230', 17, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6230', 'Außerplanmäßig Abschr.a.Sachanlagen', 'A', 'E', '', '6230', 0, NULL, NULL, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6231', 'Absetzung f.außergew.techn.u.wirtschaftl.AfA bei Gebäuden', 'A', 'E', '', '6231', 0, NULL, 17, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6232', 'Absetzung f.außergew.techn.u.wirtschaftl.AfA des Kfz', 'A', 'E', '', '6232', 0, NULL, 17, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6233', 'Absetzung f.außergew.techn.u.wirtschaftl.AfA sonst.WG', 'A', 'E', '', '6233', 0, NULL, 17, NULL, 25, FALSE); @@ -209,8 +209,8 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6241', 'Sonderabschreibung nach §7g(1)u.(2)EStG (ohne Kfz)', 'A', 'E', '', '6241', 0, NULL, 17, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6242', 'Sonderabschreibung n.§7g(1)u.(2)EStG (für Kfz)', 'A', 'E', '', '6242', 0, NULL, 17, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6250', 'Kaufleasing', 'A', 'E', 'AP_amount', '6250', 0, NULL, 20, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6260', 'Sofortabschreibung GWG', 'A', 'E', 'AP_amount', '6260', 17, NULL, NULL, NULL, 26, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6262', 'Abschreibungen auf aktivierte GWG', 'A', 'E', '', '6262', 17, NULL, NULL, NULL, 25, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6260', 'Sofortabschreibung GWG', 'A', 'E', 'AP_amount', '6260', 0, NULL, NULL, NULL, 26, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6262', 'Abschreibungen auf aktivierte GWG', 'A', 'E', '', '6262', 0, NULL, NULL, NULL, 25, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6270', 'Abschreibungen auf Finanzanlagen', 'A', 'E', '', '6270', NULL, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6275', 'Abschr.a.Wertp.d.Umlaufvermögens', 'A', 'E', '', '6275', 0, NULL, 17, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6280', 'Forderungsverlust-übliche Höhe', 'A', 'E', '', '6280', 0, NULL, 20, NULL, NULL, FALSE); @@ -277,12 +277,12 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6680', 'Reisekosten Untern.Übernachtungsauf', 'A', 'E', 'AP_amount', '6680', 0, NULL, 15, NULL, 18, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6688', 'Fahrten zw.Wohn.und Arbeitsstätte (nicht abziehb.Teil)', 'A', 'E', '', '6688', 0, NULL, NULL, NULL, 18, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6689', 'Fahrten zw.Wohn.-und Arbeitsstätte (Haben)', 'A', 'E', '', '6689', 0, NULL, NULL, NULL, 18, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6700', 'Kosten der Warenabgabe', 'A', 'E', 'AP_amount:IC_cogs', '6700', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6710', 'Verpackungsmaterial', 'A', 'E', 'AP_amount:IC_cogs', '6710', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6740', 'Ausgangsfracht', 'A', 'E', 'AP_amount:IC_cogs', '6740', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6760', 'Transportversicherung', 'A', 'E', 'AP_amount:IC_cogs:IC_expense', '6760', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6770', 'Verkaufsprovision', 'A', 'E', 'AP_amount:IC_expense', '6770', 16, NULL, NULL, NULL, 24, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6780', 'Fremdarbeiten', 'A', 'E', 'AP_amount:IC_expense', '6780', 16, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6700', 'Kosten der Warenabgabe', 'A', 'E', 'AP_amount:IC_cogs', '6700', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6710', 'Verpackungsmaterial', 'A', 'E', 'AP_amount:IC_cogs', '6710', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6740', 'Ausgangsfracht', 'A', 'E', 'AP_amount:IC_cogs', '6740', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6760', 'Transportversicherung', 'A', 'E', 'AP_amount:IC_cogs:IC_expense', '6760', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6770', 'Verkaufsprovision', 'A', 'E', 'AP_amount:IC_expense', '6770', 0, NULL, NULL, NULL, 24, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6780', 'Fremdarbeiten', 'A', 'E', 'AP_amount:IC_expense', '6780', 0, NULL, NULL, NULL, 24, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6790', 'Aufwand für Gewährleistungen', 'A', 'E', 'AP_amount:IC_expense', '6790', 0, NULL, 20, NULL, 24, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6800', 'Porto', 'A', 'E', 'AP_amount', '6800', 0, NULL, 20, NULL, 23, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('6805', 'Telefon', 'A', 'E', 'AP_amount', '6805', 9, NULL, 20, NULL, 23, FALSE); @@ -354,9 +354,9 @@ INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, ta INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('7745', 'Entnahmen a.satzungsmäßigen Rücklagen', 'A', 'E', '', '7745', 0, NULL, NULL, NULL, NULL, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9000', 'Saldenverträge,Sachkonten', 'A', 'A', '', '9000', 0, NULL, NULL, NULL, NULL, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9008', 'Saldenverträge,Debitoren', 'A', 'A', '', '9008', 0, NULL, NULL, NULL, NULL, FALSE); -INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9009', 'Saldenverträge,Kreditoren', 'A', 'L', '', '9009', 0, NULL, NULL, NULL, NULL, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9000', 'Saldenvorträge,Sachkonten', 'A', 'A', '', '9000', 0, NULL, NULL, NULL, NULL, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9008', 'Saldenvorträge,Debitoren', 'A', 'A', '', '9008', 0, NULL, NULL, NULL, NULL, FALSE); +INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9009', 'Saldenvorträge,Kreditoren', 'A', 'L', '', '9009', 0, NULL, NULL, NULL, NULL, FALSE); INSERT INTO chart (accno, description, charttype, category, link, gifi_accno, taxkey_id, pos_ustva, pos_bwa, pos_bilanz, pos_eur, datevautomatik) VALUES ('9090', 'Summenvortragskonto', 'A', 'A', '', '9090', 0, NULL, NULL, NULL, NULL, FALSE); diff --git a/sql/Pg-upgrade/Pg-upgrade-2.2.0.25-2.2.0.26.pl b/sql/Pg-upgrade/Pg-upgrade-2.2.0.25-2.2.0.26.pl index eec34d0c5..e51b3a8a5 100644 --- a/sql/Pg-upgrade/Pg-upgrade-2.2.0.25-2.2.0.26.pl +++ b/sql/Pg-upgrade/Pg-upgrade-2.2.0.25-2.2.0.26.pl @@ -4,8 +4,6 @@ die("This script cannot be run from the command line.") unless ($main::form); -use SL::AM; - sub mydberror { my ($msg) = @_; die($dbup_locale->text("Database update error:") . @@ -20,6 +18,75 @@ sub myshowerror { return 2; } +sub get_base_unit { + my ($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 get_base_unit($units, $unit->{"base_unit"}, $factor * $unit->{"factor"}); +} + +sub retrieve_units { + my ($myconfig, $form, $type, $prefix) = @_; + + 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(); + + foreach my $unit (values(%{$units})) { + ($unit->{"${prefix}base_unit"}, $unit->{"${prefix}factor"}) = get_base_unit($units, $unit->{"name"}); + } + + return $units; +} + +sub unit_select_data { + my ($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" : "" }); + } + + return $select; +} + sub update_units_add_unit { my $form = $main::form; @@ -27,10 +94,10 @@ sub update_units_add_unit { return myshowerror($dbup_locale->text("The name is missing.")) if ($form->{"new_name"} eq ""); - my $units = AM->retrieve_units(\%dbup_myconfig, $form); + my $units = retrieve_units(\%dbup_myconfig, $form); return myshowerror($dbup_locale->text("A unit with this name does already exist.")) if ($units->{$form->{"new_name"}}); - $units = AM->retrieve_units(\%dbup_myconfig, $form, $form->{"unit_type"}); + $units = retrieve_units(\%dbup_myconfig, $form, $form->{"unit_type"}); my ($base_unit, $factor); if ($form->{"new_base_unit"}) { @@ -145,8 +212,8 @@ sub update_units_steps_1_2 { } if (scalar(keys(%unknown_dimension_units)) != 0) { - my $units = AM->retrieve_units(\%dbup_myconfig, $form, "dimension"); - my $ddbox = AM->unit_select_data($units, undef, 1); + my $units = retrieve_units(\%dbup_myconfig, $form, "dimension"); + my $ddbox = unit_select_data($units, undef, 1); my @unknown_parts; map({ push(@unknown_parts, { "name" => $_, "NEW_UNITS" => $ddbox }); } @@ -164,8 +231,8 @@ sub update_units_steps_1_2 { } if (scalar(keys(%unknown_service_units)) != 0) { - my $units = AM->retrieve_units(\%dbup_myconfig, $form, "service"); - my $ddbox = AM->unit_select_data($units, undef, 1); + my $units = retrieve_units(\%dbup_myconfig, $form, "service"); + my $ddbox = unit_select_data($units, undef, 1); my @unknown_services; map({ push(@unknown_services, { "name" => $_, "NEW_UNITS" => $ddbox }); } @@ -197,12 +264,12 @@ sub update_units_step_3 { my ($has_unassigned) = $dbh->selectrow_array($query); if ($has_unassigned) { - my $dimension_units = AM->retrieve_units(\%dbup_myconfig, $form, + my $dimension_units = retrieve_units(\%dbup_myconfig, $form, "dimension"); - my $dimension_ddbox = AM->unit_select_data($dimension_units); + my $dimension_ddbox = unit_select_data($dimension_units); - my $service_units = AM->retrieve_units(\%dbup_myconfig, $form, "service"); - my $service_ddbox = AM->unit_select_data($service_units); + my $service_units = retrieve_units(\%dbup_myconfig, $form, "service"); + my $service_ddbox = unit_select_data($service_units); print($form->parse_html_template("dbupgrade/units_set_default", { "DIMENSION_DDBOX" => $dimension_ddbox, diff --git a/sql/Pg-upgrade/Pg-upgrade-2.4.0.0-2.4.0.1.sql b/sql/Pg-upgrade/Pg-upgrade-2.4.0.0-2.4.0.1.sql deleted file mode 100644 index 36d291a16..000000000 --- a/sql/Pg-upgrade/Pg-upgrade-2.4.0.0-2.4.0.1.sql +++ /dev/null @@ -1 +0,0 @@ -update tax set id=0 WHERE taxkey=0; diff --git a/sql/Pg-upgrade/Pg-upgrade-2.4.0.1-2.4.0.2.sql b/sql/Pg-upgrade/Pg-upgrade-2.4.0.1-2.4.0.2.sql deleted file mode 100644 index 1e7a1a0be..000000000 --- a/sql/Pg-upgrade/Pg-upgrade-2.4.0.1-2.4.0.2.sql +++ /dev/null @@ -1 +0,0 @@ -UPDATE taxkeys SET tax_id = 0 WHERE taxkey_id = 0; diff --git a/sql/Pg-upgrade2/README b/sql/Pg-upgrade2/README new file mode 100644 index 000000000..3a531519f --- /dev/null +++ b/sql/Pg-upgrade2/README @@ -0,0 +1,3 @@ +Bitte lesen Sie die Datei doc/sql-upgrade-dateien.txt, bevor +Sie hier Dateien anlegen. + diff --git a/sql/Pg-upgrade2/chart_names.sql b/sql/Pg-upgrade2/chart_names.sql new file mode 100644 index 000000000..55a2e3144 --- /dev/null +++ b/sql/Pg-upgrade2/chart_names.sql @@ -0,0 +1,13 @@ +-- @tag: chart_names +-- @description: Behebt ein paar Schreibfehler in Kontennamen in den Kontenramen SKR03 und SKR04. +-- @depends: +UPDATE chart + SET description = replace(description, 'Saldenverträge', 'Saldenvorträge') + WHERE + ((SELECT coa FROM defaults) IN ('Germany-DATEV-SKR03EU', 'Germany-DATEV-SKR04EU')) AND + (description LIKE 'Saldenverträge%'); +UPDATE chart + SET description = replace(description, 'Abziebare', 'Abziehbare') + WHERE + ((SELECT coa FROM defaults) IN ('Germany-DATEV-SKR03EU', 'Germany-DATEV-SKR04EU')) AND + (description LIKE 'Abziehbare%'); diff --git a/sql/Pg-upgrade2/customer_vendor_ustid_length.sql b/sql/Pg-upgrade2/customer_vendor_ustid_length.sql new file mode 100644 index 000000000..dd68bcd20 --- /dev/null +++ b/sql/Pg-upgrade2/customer_vendor_ustid_length.sql @@ -0,0 +1,12 @@ +-- @tag: customer_vendor_ustid_length +-- @description: Setzt das Feld "ustid" in den Tabellen "customer" und "vendor" auf 14 Zeichen: zwei Zeichen Länderkürzel und bis zu zwölf Zeichen für die Nummer. +-- @depends: +ALTER TABLE customer ADD COLUMN tmp varchar(14); +UPDATE customer SET tmp = ustid; +ALTER TABLE customer DROP COLUMN ustid; +ALTER TABLE customer RENAME tmp TO ustid; + +ALTER TABLE vendor ADD COLUMN tmp varchar(14); +UPDATE vendor SET tmp = ustid; +ALTER TABLE vendor DROP COLUMN ustid; +ALTER TABLE vendor RENAME tmp TO ustid; diff --git a/sql/Pg-upgrade2/invalid_taxkeys.sql b/sql/Pg-upgrade2/invalid_taxkeys.sql new file mode 100644 index 000000000..3b11ebd39 --- /dev/null +++ b/sql/Pg-upgrade2/invalid_taxkeys.sql @@ -0,0 +1,5 @@ +-- @tag: invalid_taxkesy +-- @description: Ungültige Steuerschlüssel in den Kontenrahmendefinitionen und daraus resultierende falsche Einträge in anderen Tabellen werden korrigiert. +-- @depends: tax_primary_key_taxkeys_foreign_keys +UPDATE chart SET taxkey_id = 0 WHERE taxkey_id NOT IN (SELECT DISTINCT taxkey_id FROM taxkeys); +UPDATE taxkeys SET taxkey_id = 0, tax_id = 0 WHERE taxkey_id NOT IN (SELECT DISTINCT taxkey_id FROM taxkeys); diff --git a/sql/Pg-upgrade2/language_output_formatting.sql b/sql/Pg-upgrade2/language_output_formatting.sql new file mode 100644 index 000000000..4183c4970 --- /dev/null +++ b/sql/Pg-upgrade2/language_output_formatting.sql @@ -0,0 +1,6 @@ +-- @tag: language_output_formatting +-- @description: Speichern des Ausgabeformates für Zahlen und Datumsangaben bei jeder Sprache. +-- @depends: +ALTER TABLE language ADD COLUMN output_numberformat text; +ALTER TABLE language ADD COLUMN output_dateformat text; +ALTER TABLE language ADD COLUMN output_longdates boolean; diff --git a/sql/Pg-upgrade2/release_2_4_1.sql b/sql/Pg-upgrade2/release_2_4_1.sql new file mode 100644 index 000000000..6203ac53a --- /dev/null +++ b/sql/Pg-upgrade2/release_2_4_1.sql @@ -0,0 +1,3 @@ +-- @tag: release_2_4_1 +-- @description: Leeres Script, das von allen bis zum Release 2.4.1 hinzugefügten Upgradescripten abhängt, um ein fest definiertes Schema für 2.4.1 zu definieren. +-- @depends: chart_names rename_buchungsgruppen_accounts_16_19_percent language_output_formatting units_translations_and_singular_plural_distinction invalid_taxkesy customer_vendor_ustid_length diff --git a/sql/Pg-upgrade2/rename_buchungsgruppen_accounts_16_19_percent.sql b/sql/Pg-upgrade2/rename_buchungsgruppen_accounts_16_19_percent.sql new file mode 100644 index 000000000..f09b4c753 --- /dev/null +++ b/sql/Pg-upgrade2/rename_buchungsgruppen_accounts_16_19_percent.sql @@ -0,0 +1,13 @@ +-- @tag: rename_buchungsgruppen_accounts_16_19_percent +-- @description: Benennt einige Buchungsgruppen und Konten von "... 16%" in "... 16%/19%" um. Wird nur beim SKR03 und SKR04 gemacht. +-- @depends: +UPDATE buchungsgruppen + SET description = 'Standard 16%/19%' + WHERE + ((SELECT coa FROM defaults) IN ('Germany-DATEV-SKR03EU', 'Germany-DATEV-SKR04EU')) AND + (description = 'Standard 16%'); +UPDATE chart SET description = replace(description, '16%', '16%/19%') + WHERE + ((SELECT coa FROM defaults) IN ('Germany-DATEV-SKR03EU', 'Germany-DATEV-SKR04EU')) AND + (link NOT ILIKE '%tax%') AND + (description ~ '16%') AND (description !~ '19%'); diff --git a/sql/Pg-upgrade2/tax_id_if_taxkey_is_0.sql b/sql/Pg-upgrade2/tax_id_if_taxkey_is_0.sql new file mode 100644 index 000000000..a3eaf4d75 --- /dev/null +++ b/sql/Pg-upgrade2/tax_id_if_taxkey_is_0.sql @@ -0,0 +1,5 @@ +-- @tag: tax_id_if_taxkey_is_0 +-- @description: Aktualisierung der Spalte tax.id, wenn tax.taxkey = 0 ist. +-- @depends: +UPDATE tax SET id = 0 WHERE taxkey = 0; +UPDATE taxkeys SET tax_id = 0 WHERE taxkey_id = 0; diff --git a/sql/Pg-upgrade2/tax_primary_key_taxkeys_foreign_keys.sql b/sql/Pg-upgrade2/tax_primary_key_taxkeys_foreign_keys.sql new file mode 100644 index 000000000..8a41f7b23 --- /dev/null +++ b/sql/Pg-upgrade2/tax_primary_key_taxkeys_foreign_keys.sql @@ -0,0 +1,6 @@ +-- @tag: tax_primary_key_taxkeys_foreign_keys +-- @description: Legt in tax einen neuen Primärschlüssel und in taxkeys einen neuen Fremdschlüssel auf tax an. +-- @depends: tax_id_if_taxkey_is_0 +UPDATE taxkeys SET tax_id = 0 WHERE taxkey_id = 0; +ALTER TABLE tax ADD PRIMARY KEY (id); +ALTER TABLE taxkeys ADD FOREIGN KEY (tax_id) REFERENCES tax (id); diff --git a/sql/Pg-upgrade2/units_translations_and_singular_plural_distinction.sql b/sql/Pg-upgrade2/units_translations_and_singular_plural_distinction.sql new file mode 100644 index 000000000..c1603e625 --- /dev/null +++ b/sql/Pg-upgrade2/units_translations_and_singular_plural_distinction.sql @@ -0,0 +1,14 @@ +-- @tag: units_translations_and_singular_plural_distinction +-- @description: Für jede Einheit kann für jede Sprache eine Übersetzung sowie eine Unterscheidung zwischen Singular und Plural gespeichert werden. +-- @depends: +CREATE TABLE units_language ( + unit varchar (20) NOT NULL, + language_id integer NOT NULL, + localized varchar (20), + localized_plural varchar (20), + + FOREIGN KEY (unit) REFERENCES units (name), + FOREIGN KEY (language_id) REFERENCES language (id) +); +CREATE INDEX units_name_idx ON units (name); +CREATE INDEX units_language_unit_idx ON units_language (unit); diff --git a/templates/German-balance_sheet.html b/templates/German-balance_sheet.html index f0d6f5e18..985b6eff5 100644 --- a/templates/German-balance_sheet.html +++ b/templates/German-balance_sheet.html @@ -1,7 +1,7 @@ - + -

      +

      <%company%>
      <%address%> @@ -9,9 +9,9 @@
      <%period%>

      - +
      - + @@ -20,79 +20,79 @@ - - + + <%end asset_account%> - - - + + + - - - - + + + + - + <%foreach liability_account%> - - + + <%end liability_account%> - - - + + + - + - - + - + <%foreach equity_account%> - - + + <%end equity_account%> - - - + + + - + - - + - - - - + + + +
      AKTIVA

      AKTIVA

      <%this_period%> <%last_period%>
      <%asset_account%><%asset_this_period%><%asset_last_period%><%asset_this_period%><%asset_last_period%>




      TOTAL<%total_assets_this_period%>
      <%total_assets_last_period%>
      TOTAL<%total_assets_this_period%>
      <%total_assets_last_period%>
      PASSIVA
      PASSIVA
      <%liability_account%><%liability_this_period%><%liability_last_period%><%liability_this_period%><%liability_last_period%>




      TOTAL<%total_liabilities_this_period%>

      -
      <%total_liabilities_last_period%>

      +
      TOTAL<%total_liabilities_this_period%>

      +
      <%total_liabilities_last_period%>

      EIGENTUM

      EIGENTUM

      <%equity_account%><%equity_this_period%><%equity_last_period%><%equity_this_period%><%equity_last_period%>




      TOTAL<%total_equity_this_period%>

      -
      <%total_equity_last_period%>

      +
      TOTAL<%total_equity_this_period%>

      +
      <%total_equity_last_period%>

      TOTAL PASSIVA & EIGETNTUM<%total_this_period%>

      <%total_last_period%>

      TOTAL PASSIVA & EIGENTUM<%total_this_period%>

      <%total_last_period%>

      diff --git a/templates/German-bwa.html b/templates/German-bwa.html index 58f7aaad6..f7ae42cf2 100644 --- a/templates/German-bwa.html +++ b/templates/German-bwa.html @@ -423,7 +423,7 @@ class="right"><%kummaufbetriebrohertrag%>  - übrige Steuern + Übrige Steuern <%jetzt19%> <%jetztgl19%> <%jetztgk19%> @@ -575,7 +575,7 @@ colspan="11">  Währung: Euro - FiBu: LX Office ERP -(Version 2.1.1) - Formular: 16.04.2005 +(Version <%version%>) - Formular: 11.01.2007 diff --git a/templates/German-income_statement.html b/templates/German-income_statement.html index 52ea432ae..0ceba2405 100644 --- a/templates/German-income_statement.html +++ b/templates/German-income_statement.html @@ -84,7 +84,7 @@ Einnahmen

      - B. Betriebsaussgaben
      + B. Betriebsausgaben
      diff --git a/templates/German-taxbird.txb b/templates/German-taxbird.txb index 49dfe7176..6cbc69eb6 100644 --- a/templates/German-taxbird.txb +++ b/templates/German-taxbird.txb @@ -1,21 +1,22 @@ -;; This file was produced using taxbird. +;; This file was produced using lx-office +;; for using in taxbird. ;; You probably don't want to touch this ;; file. In case you do want it anyway, ;; be warned: BE CAREFUL!! ;; '("Umsatzsteuervoranmeldung <%year%>" ( ("vend-id" . "74931") -("land-lieferant" . "<%nation%>") +("land-lieferant" . "<%elsterland%>") ("name-lieferant" . "<%company%>") ("berufsbez" . "") ("strasse-lieferant" . "<%co_street%>") -("plz-lieferant" . "<%co_zip%>") +("plz-lieferant" . "<%co_zip%> ") ("ort-lieferant" . "<%co_city%>") -("vorwahl" . "") +("vorwahl" . "<%co_phone_prefix%>") ("anschluss" . "<%co_phone%>") -("land" . "<%elsterland%>") -("zeitraum" . "<%period%>") -("stnr" . "<%steuernummer%>") +("land" . "<%taxbird_land_nr%>") +("zeitraum" . "<%taxbird_period%>") +("stnr" . "<%taxbird_steuernummer%>") <%if 10%>("Kz10" . "<%10%>")<%end 10%> <%if 22%>("Kz22" . "<%22%>")<%end 22%> diff --git a/templates/German-ustva-2007.tex b/templates/German-ustva-2007.tex new file mode 100644 index 000000000..7032221e8 --- /dev/null +++ b/templates/German-ustva-2007.tex @@ -0,0 +1,128 @@ +% German USTVA template for taxreports +% +% Contributed by Jens Koerner, Peter Schorer, Udo Spallek +% +% +\documentclass[twoside]{scrartcl} +\usepackage{a4,german} +\usepackage[frame]{xy} +\usepackage[latin1]{inputenc} +\usepackage[german]{babel} +\usepackage{graphicx} +\usepackage{tabularx} +\usepackage{times, german} +\usepackage{german} +\setlength{\voffset}{-0.8cm} %hier wird die Höhenverschiebung getätigt +\setlength{\hoffset}{-1cm} %und hier die Verschiebung seitwärts +\setlength{\topmargin}{0cm} +\setlength{\headheight}{0cm} +\setlength{\headsep}{0cm} +\setlength{\topskip}{0pt} +\setlength{\oddsidemargin}{0cm} +\setlength{\evensidemargin}{0cm} +\setlength{\textwidth}{20.9cm} +\setlength{\textheight}{29.6cm} +\setlength{\footskip}{-0cm} +\setlength{\parindent}{0pt} + +\begin{document} + +\fontfamily{cmss}\fontshape{n}\large\selectfont +\pagestyle{myheadings} +\markboth{\protect\scalebox{1.045}[1.045]{\protect\includegraphics[viewport = 54 783 700 790]{ustva-2007-2.pdf}}} +{\protect\scalebox{1.045}[1.045]{\protect\includegraphics[viewport = 70 700 700 790]{ustva-2007-1.pdf}}} +\hspace{1mm} +\begin{tabular}[b]{p{7mm}p{5cm}p{22.5mm}p{24mm}p{7mm}p{28mm}p{3mm}} +\multicolumn{7}{c}{}\\[-2mm] + & \multicolumn{6}{l}{<%steuernummer%>}\\ +\multicolumn{7}{c}{}\\[15mm] +\multicolumn{2}{p{7.5cm}}{<%FA_Name%>} & & & & &\\[-4mm] +\multicolumn{2}{p{7.5cm}}{} & & & & &\\[3mm] +\multicolumn{2}{p{7.5cm}}{<%FA_Strasse%>} & &<%0401%>&<%0407%>&&<%0441%>\\[1.2mm] +\multicolumn{2}{p{7.5cm}}{} & &<%0402%>&<%0408%>&&<%0442%>\\[1.25mm] +\multicolumn{2}{p{7.5cm}}{<%FA_PLZ%> <%FA_Ort%>} & &<%0403%>&<%0409%>&&<%0443%>\\[3mm] +\multicolumn{2}{p{7.5cm}}{} & &<%0404%>&<%0410%>&&<%0444%>\\[1.25mm] +\multicolumn{2}{p{7.5cm}}{} & &<%0405%>&<%0411%>&&\\[1.25mm] +\multicolumn{2}{p{7.5cm}}{\small{<%company%>}} & &<%0406%>&<%0412%>&&\\[-1mm] +\multicolumn{2}{p{7.5cm}}{\small{<%co_street%>}}& & & & &\\[-1mm] +\multicolumn{2}{p{7.5cm}}{\small{<%co_city%>}}& & & &<%FA_10%> &\\[1mm] +\multicolumn{2}{p{7.5cm}}{ +<%if tel%> +\small{Tel: <%tel%>}~--~ +<%end tel%> +<%if fax%> +\small{Fax: <%fax%>} +<%end fax%> +}& & & & &\\[-1mm] +\multicolumn{2}{p{7.5cm}}{\small{<%email%>}}& & & & &\\[-1mm] +\end{tabular}\\[29.5mm] +\begin{tabular}[b]{p{99mm}p{26.5mm}p{4.55mm}p{4mm}p{35mm}} +&&&&\\[20.5mm] +\multicolumn{2}{r}{<%48%>} & & \multicolumn{2}{r}{}\\[7.5mm] +\multicolumn{2}{r}{<%51%>} & & \multicolumn{2}{r}{<%511%>}\\[1.5mm] +\multicolumn{2}{r}{<%86%>} & & \multicolumn{2}{r}{<%861%>}\\[42mm] +\multicolumn{2}{r}{<%97%>} & & \multicolumn{2}{r}{<%971%>}\\[1.5mm] +\multicolumn{2}{r}{<%93%>} & & \multicolumn{2}{r}{<%931%>}\\[8.5mm] +\multicolumn{2}{r}{<%94%>} & & \multicolumn{2}{r}{<%96%>}\\[28mm] +\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z43%>}\\ +\end{tabular} + +\newpage + +\vspace*{-9.5mm}\hspace{27mm}<%steuernummer%>\\[-2.7mm] +\begin{tabular}[b]{p{99mm}p{25.2mm}p{2.55mm}p{10mm}p{32mm}} +&&&&\\ +\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z45%>}\\[48mm] +\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z53%>}\\[8.9mm] +\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%66%>}\\[42mm] +\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z62%>}\\[28mm] +\multicolumn{2}{r}{} & & \multicolumn{2}{r}{\textbf{<%83%>}}\\[26mm] +\end{tabular}\\[35mm] +<%if FA_steuerberater%> +\vspace{11mm} +\begin{list}{}{ +\setlength{\leftmargin}{2mm} +\setlength{\itemsep}{0mm} +\setlength{\parsep}{0mm} +%\setlength{\topsep}{0mm} +%\setlength{\parskip}{0mm} +%\setlength{\partopsep}{0mm} +} +\begin{small} +\item <%FA_steuerberater_name%> +\item <%FA_steuerberater_street%> +\item <%FA_steuerberater_city%> +\item Tel:~<%FA_steuerberater_tel%> +\end{small}\\[15mm] +\item <%Datum_heute%>, +\end{list} +<%end FA_steuerberater%> +<%if not FA_steuerberater%> +\begin{list}{}{ +\setlength{\leftmargin}{2mm} +\setlength{\itemsep}{0mm} +\setlength{\parsep}{0mm} +%\setlength{\topsep}{0mm} +%\setlength{\parskip}{0mm} +%\setlength{\partopsep}{0mm} +} +\begin{small} +\item ~ +\item ~ +\item ~ +\item ~ +\end{small}\\[26mm] +\item <%Datum_heute%>, +\end{list} +<%end FA_steuerberater%> +\end{document} + + + + + + + + + + diff --git a/templates/German-ustva.html b/templates/German-ustva.html index 998f11598..42170629d 100644 --- a/templates/German-ustva.html +++ b/templates/German-ustva.html @@ -391,6 +391,6 @@ Steuerberater:
      <%FA_steuerberater_street%>
      <%FA_steuerberater_city%>
      Tel: <%FA_steuerberater_tel%>

      -<%end FA_steuerberater%>> +<%end FA_steuerberater%> diff --git a/templates/webpages/am/edit_units_de.html b/templates/webpages/am/edit_units_de.html index 0f5a2cc28..d36d3c799 100644 --- a/templates/webpages/am/edit_units_de.html +++ b/templates/webpages/am/edit_units_de.html @@ -56,6 +56,15 @@ Faktor + + + + + + Plural + + + @@ -77,6 +86,12 @@ gelöscht.

      +

      + Bei den Übersetzungen können Sie unterschiedliche + Varianten für singular und plural angeben (z.B. "day" + und "days"). +

      + @@ -84,6 +99,9 @@ + + + @@ -105,16 +123,24 @@ - - + + + + + diff --git a/templates/webpages/am/edit_units_master.html b/templates/webpages/am/edit_units_master.html index 721b86a54..f873e0fc0 100644 --- a/templates/webpages/am/edit_units_master.html +++ b/templates/webpages/am/edit_units_master.html @@ -56,6 +56,15 @@ + + + + + + + + +
       Einheit Basiseinheit Faktor
      - + + S: + + P: + +
      Factor
      Plural
      @@ -77,6 +86,12 @@ gelöscht.

      +

      + Bei den Übersetzungen können Sie unterschiedliche + Varianten für singular und plural angeben (z.B. "day" + und "days"). +

      + @@ -84,6 +99,9 @@ + + + @@ -105,16 +123,24 @@ - - + + + + + diff --git a/templates/webpages/dbupgrade/buchungsgruppen_assemblies_de.html b/templates/webpages/dbupgrade/buchungsgruppen_assemblies_de.html index daf9821ea..32e09e50e 100644 --- a/templates/webpages/dbupgrade/buchungsgruppen_assemblies_de.html +++ b/templates/webpages/dbupgrade/buchungsgruppen_assemblies_de.html @@ -55,8 +55,9 @@ diff --git a/templates/webpages/dbupgrade/buchungsgruppen_assemblies_master.html b/templates/webpages/dbupgrade/buchungsgruppen_assemblies_master.html index 7381b93fb..1876df4e6 100644 --- a/templates/webpages/dbupgrade/buchungsgruppen_assemblies_master.html +++ b/templates/webpages/dbupgrade/buchungsgruppen_assemblies_master.html @@ -55,8 +55,9 @@ diff --git a/templates/webpages/dbupgrade/footer_de.html b/templates/webpages/dbupgrade/footer_de.html index 1bfe7c25d..18ea036bf 100644 --- a/templates/webpages/dbupgrade/footer_de.html +++ b/templates/webpages/dbupgrade/footer_de.html @@ -1,6 +1,6 @@

      ...fertig

      - + diff --git a/templates/webpages/dbupgrade/footer_master.html b/templates/webpages/dbupgrade/footer_master.html index 8e06baf1a..dbe31509d 100644 --- a/templates/webpages/dbupgrade/footer_master.html +++ b/templates/webpages/dbupgrade/footer_master.html @@ -1,6 +1,6 @@

      ...done

      - + diff --git a/templates/webpages/dbupgrade/upgrade_message2_de.html b/templates/webpages/dbupgrade/upgrade_message2_de.html new file mode 100644 index 000000000..3bf47b734 --- /dev/null +++ b/templates/webpages/dbupgrade/upgrade_message2_de.html @@ -0,0 +1,4 @@ +
        +
      • Führe aus:
      • +
      + diff --git a/templates/webpages/dbupgrade/upgrade_message2_master.html b/templates/webpages/dbupgrade/upgrade_message2_master.html new file mode 100644 index 000000000..c5718e13f --- /dev/null +++ b/templates/webpages/dbupgrade/upgrade_message2_master.html @@ -0,0 +1,4 @@ +
        +
      • Applying :
      • +
      + diff --git a/users/ustva-2007-1.pdf b/users/ustva-2007-1.pdf new file mode 100644 index 000000000..7181c626d Binary files /dev/null and b/users/ustva-2007-1.pdf differ diff --git a/users/ustva-2007-2.pdf b/users/ustva-2007-2.pdf new file mode 100644 index 000000000..616daba38 Binary files /dev/null and b/users/ustva-2007-2.pdf differ
       Unit Base unit Factor
      - + + singular first char: + + plural first char: + +
      Inventar: - - -- +
      Inventory: - - -- +