From 7a7f33b5c1b3531ab761adba1cf19d4ad68cffcd Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Fri, 11 Jan 2008 15:53:02 +0000 Subject: [PATCH] =?utf8?q?Zwei=20neue=20Features:=201.=20Beliebige=20Notiz?= =?utf8?q?en=20f=C3=BCr=20Kunden=20und=20Lieferanten=20k=C3=B6nnen=20angel?= =?utf8?q?egt=20werden.=20Solche=20Notizen=20k=C3=B6nnen=20auf=20Wiedervor?= =?utf8?q?lage=20gelegt=20werden,=20was=20durch=202.=20implementiert=20ist?= =?utf8?q?.=202.=20Einkaufs-=20und=20Verkaufsbelege=20k=C3=B6nnen=20auf=20?= =?utf8?q?Wiedervorlage=20gelegt=20werden.=20Wiedervorlagen=20k=C3=B6nnen?= =?utf8?q?=20f=C3=BCr=20beliebige=20Nutzer=20erstellt=20werden=20(Aufgabe?= =?utf8?q?=20an=20andere=20Nutzer=20deligieren).=20Anstehende=20Wiedervorl?= =?utf8?q?agen=20und=20abgelaufene=20Angebote=20werden=20auf=20der=20Start?= =?utf8?q?seite=20in=20einer=20Aufgabenliste=20angezeigt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- SL/CT.pm | 134 +++++ SL/FU.pm | 432 ++++++++++++++++ SL/Form.pm | 18 + SL/Notes.pm | 86 ++++ SL/OE.pm | 35 ++ bin/mozilla/ap.pl | 26 + bin/mozilla/ar.pl | 30 +- bin/mozilla/ct.pl | 7 +- bin/mozilla/fu.pl | 403 +++++++++++++++ bin/mozilla/gl.pl | 26 + bin/mozilla/ir.pl | 26 +- bin/mozilla/is.pl | 42 +- bin/mozilla/login.pl | 4 + bin/mozilla/oe.pl | 36 +- bin/mozilla/todo.pl | 82 ++++ fu.pl | 1 + image/Productivity.png | Bin 0 -> 952 bytes js/follow_up.js | 29 ++ locale/de/all | 47 ++ locale/de/ap | 12 + locale/de/ar | 12 + locale/de/ct | 10 + locale/de/dn | 11 + locale/de/fu | 172 +++++++ locale/de/gl | 13 + locale/de/ic | 11 + locale/de/io | 11 + locale/de/ir | 12 + locale/de/is | 12 + locale/de/login | 316 ++++++++++++ locale/de/menu | 5 + locale/de/menunew | 5 + locale/de/oe | 9 + locale/de/todo | 461 ++++++++++++++++++ menu.ini | 25 + sql/Pg-upgrade2/follow_ups.sql | 75 +++ templates/webpages/ct/form_header_de.html | 85 ++++ templates/webpages/ct/form_header_master.html | 85 ++++ templates/webpages/fu/add_edit_de.html | 108 ++++ templates/webpages/fu/add_edit_master.html | 108 ++++ templates/webpages/fu/close_window_de.html | 1 + .../webpages/fu/close_window_master.html | 1 + .../webpages/fu/edit_access_rights_de.html | 47 ++ .../fu/edit_access_rights_master.html | 47 ++ templates/webpages/fu/report_bottom_de.html | 13 + .../webpages/fu/report_bottom_master.html | 13 + .../webpages/fu/report_for_todo_list_de.html | 41 ++ .../fu/report_for_todo_list_master.html | 41 ++ templates/webpages/fu/report_top_de.html | 10 + templates/webpages/fu/report_top_master.html | 10 + templates/webpages/fu/search_de.html | 122 +++++ templates/webpages/fu/search_master.html | 122 +++++ templates/webpages/login/company_logo_de.html | 2 + .../webpages/login/company_logo_master.html | 2 + templates/webpages/oe/orders_footer_de.html | 6 + .../webpages/oe/orders_footer_master.html | 6 + templates/webpages/oe/orders_header_de.html | 6 + .../webpages/oe/orders_header_master.html | 6 + .../webpages/oe/report_for_todo_list_de.html | 29 ++ .../oe/report_for_todo_list_master.html | 29 ++ .../webpages/todo/show_todo_list_de.html | 17 + .../webpages/todo/show_todo_list_master.html | 17 + todo.pl | 1 + 63 files changed, 3598 insertions(+), 13 deletions(-) create mode 100644 SL/FU.pm create mode 100644 SL/Notes.pm create mode 100644 bin/mozilla/fu.pl create mode 100644 bin/mozilla/todo.pl create mode 120000 fu.pl create mode 100644 image/Productivity.png create mode 100644 js/follow_up.js create mode 100644 locale/de/fu create mode 100644 locale/de/todo create mode 100644 sql/Pg-upgrade2/follow_ups.sql create mode 100644 templates/webpages/fu/add_edit_de.html create mode 100644 templates/webpages/fu/add_edit_master.html create mode 100644 templates/webpages/fu/close_window_de.html create mode 100644 templates/webpages/fu/close_window_master.html create mode 100644 templates/webpages/fu/edit_access_rights_de.html create mode 100644 templates/webpages/fu/edit_access_rights_master.html create mode 100644 templates/webpages/fu/report_bottom_de.html create mode 100644 templates/webpages/fu/report_bottom_master.html create mode 100644 templates/webpages/fu/report_for_todo_list_de.html create mode 100644 templates/webpages/fu/report_for_todo_list_master.html create mode 100644 templates/webpages/fu/report_top_de.html create mode 100644 templates/webpages/fu/report_top_master.html create mode 100644 templates/webpages/fu/search_de.html create mode 100644 templates/webpages/fu/search_master.html create mode 100644 templates/webpages/oe/report_for_todo_list_de.html create mode 100644 templates/webpages/oe/report_for_todo_list_master.html create mode 100644 templates/webpages/todo/show_todo_list_de.html create mode 100644 templates/webpages/todo/show_todo_list_master.html create mode 120000 todo.pl diff --git a/SL/CT.pm b/SL/CT.pm index e0e4084d5..7ccccadcc 100644 --- a/SL/CT.pm +++ b/SL/CT.pm @@ -39,8 +39,11 @@ package CT; use Data::Dumper; +use SL::Common; use SL::CVar; use SL::DBUtils; +use SL::FU; +use SL::Notes; sub get_tuple { $main::lxdebug->enter_sub(); @@ -73,6 +76,52 @@ sub get_tuple { selectrow_query($form, $dbh, $query, $form->{salesman_id}); } + my ($employee_id) = selectrow_query($form, $dbh, qq|SELECT id FROM employee WHERE login = ?|, $form->{login}); + $query = + qq|SELECT n.*, n.itime::DATE AS created_on, + e.name AS created_by_name, e.login AS created_by_login + FROM notes n + LEFT JOIN employee e ON (n.created_by = e.id) + WHERE (n.trans_id = ?) AND (n.trans_module = 'ct')|; + $form->{NOTES} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id})); + + $query = + qq|SELECT fu.follow_up_date, fu.done AS follow_up_done, e.name AS created_for_name, e.name AS created_for_login + FROM follow_ups fu + LEFT JOIN employee e ON (fu.created_for_user = e.id) + WHERE (fu.note_id = ?) + AND NOT COALESCE(fu.done, FALSE) + AND ( (fu.created_by = ?) + OR (fu.created_by IN (SELECT DISTINCT what FROM follow_up_access WHERE who = ?)))|; + $sth = prepare_query($form, $dbh, $query); + + foreach my $note (@{ $form->{NOTES} }) { + do_statement($form, $sth, $query, conv_i($note->{id}), conv_i($note->{created_by}), conv_i($employee_id)); + $ref = $sth->fetchrow_hashref(); + + map { $note->{$_} = $ref->{$_} } keys %{ $ref } if ($ref); + } + + $sth->finish(); + + if ($form->{edit_note_id}) { + $query = + qq|SELECT n.id AS NOTE_id, n.subject AS NOTE_subject, n.body AS NOTE_body, + fu.id AS FU_id, fu.follow_up_date AS FU_date, fu.done AS FU_done, fu.created_for_user AS FU_created_for_user + FROM notes n + LEFT JOIN follow_ups fu ON ((n.id = fu.note_id) AND NOT COALESCE(fu.done, FALSE)) + WHERE n.id = ?|; + $ref = selectfirst_hashref_query($form, $dbh, $query, conv_i($form->{edit_note_id})); + + if ($ref) { + foreach my $key (keys %{ $ref }) { + my $new_key = $key; + $new_key =~ s/^([^_]+)/\U\1\E/; + $form->{$new_key} = $ref->{$key}; + } + } + } + # check if it is orphaned my $arap = ( $form->{db} eq 'customer' ) ? "ar" : "ap"; $query = @@ -384,6 +433,9 @@ sub save_customer { # add shipto $form->add_shipto( $dbh, $form->{id}, "CT" ); + $self->_save_note('dbh' => $dbh); + $self->_delete_selected_notes('dbh' => $dbh); + CVar->save_custom_variables('dbh' => $dbh, 'module' => 'CT', 'trans_id' => $form->{id}, @@ -586,6 +638,9 @@ sub save_vendor { # add shipto $form->add_shipto( $dbh, $form->{id}, "CT" ); + $self->_save_note('dbh' => $dbh); + $self->_delete_selected_notes('dbh' => $dbh); + CVar->save_custom_variables('dbh' => $dbh, 'module' => 'CT', 'trans_id' => $form->{id}, @@ -845,4 +900,83 @@ sub get_delivery { $main::lxdebug->leave_sub(); } +sub _save_note { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $form = $main::form; + + Common::check_params(\%params, 'dbh'); + + if (!$form->{NOTE_subject}) { + $main::lxdebug->leave_sub(); + return; + } + + my $dbh = $params{dbh}; + + my %follow_up; + my %note = ( + 'id' => $form->{NOTE_id}, + 'subject' => $form->{NOTE_subject}, + 'body' => $form->{NOTE_body}, + 'trans_id' => $form->{id}, + 'trans_module' => 'ct', + ); + + $note{id} = Notes->save(%note); + + if ($form->{FU_date}) { + %follow_up = ( + 'id' => $form->{FU_id}, + 'note_id' => $note{id}, + 'follow_up_date' => $form->{FU_date}, + 'created_for_user' => $form->{FU_created_for_user}, + 'done' => $form->{FU_done} ? 1 : 0, + 'subject' => $form->{NOTE_subject}, + 'body' => $form->{NOTE_body}, + 'LINKS' => [ + { + 'trans_id' => $form->{id}, + 'trans_type' => $form->{db} eq 'customer' ? 'customer' : 'vendor', + 'trans_info' => $form->{name}, + }, + ], + ); + + $follow_up{id} = FU->save(%follow_up); + + } elsif ($form->{FU_id}) { + do_query($form, $dbh, qq|DELETE FROM follow_up_links WHERE follow_up_id = ?|, conv_i($form->{FU_id})); + do_query($form, $dbh, qq|DELETE FROM follow_ups WHERE id = ?|, conv_i($form->{FU_id})); + } + + delete @{$form}{grep { /^NOTE_|^FU_/ } keys %{ $form }}; + + $main::lxdebug->leave_sub(); +} + +sub _delete_selected_notes { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, 'dbh'); + + my $form = $main::form; + my $dbh = $params{dbh}; + + foreach my $i (1 .. $form->{NOTES_rowcount}) { + next unless ($form->{"NOTE_delete_$i"} && $form->{"NOTE_id_$i"}); + + Notes->delete('dbh' => $params{dbh}, + 'id' => $form->{"NOTE_id_$i"}); + } + + $main::lxdebug->leave_sub(); +} + 1; diff --git a/SL/FU.pm b/SL/FU.pm new file mode 100644 index 000000000..bd761913c --- /dev/null +++ b/SL/FU.pm @@ -0,0 +1,432 @@ +# Follow-Ups + +package FU; + +use List::Util qw(first); + +use SL::Common; +use SL::DBUtils; +use SL::Notes; + +sub save { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); + my ($query, @values); + + if (!$params{id}) { + ($params{id}) = selectrow_query($form, $dbh, qq|SELECT nextval('follow_up_id')|); + + $query = qq|INSERT INTO follow_ups (created_by, done, note_id, follow_up_date, created_for_user, id) + VALUES ((SELECT id FROM employee WHERE login = ?), ?, ?, ?, ?, ?)|; + + push @values, $form->{login}; + + } else { + $query = qq|UPDATE follow_ups SET done = ?, note_id = ?, follow_up_date = ?, created_for_user = ? WHERE id = ?|; + } + + $params{note_id} = Notes->save('id' => $params{note_id}, + 'trans_id' => $params{id}, + 'trans_module' => 'fu', + 'subject' => $params{subject}, + 'body' => $params{body}); + + $params{done} = 1 if (!defined $params{done}); + + do_query($form, $dbh, $query, @values, $params{done} ? 't' : 'f', conv_i($params{note_id}), $params{follow_up_date}, conv_i($params{created_for_user}), conv_i($params{id})); + + do_query($form, $dbh, qq|DELETE FROM follow_up_links WHERE follow_up_id = ?|, conv_i($params{id})); + + my $query = qq|INSERT INTO follow_up_links (follow_up_id, trans_id, trans_type, trans_info) VALUES (?, ?, ?, ?)|; + my $sth = prepare_query($form, $dbh, $query); + + foreach my $link (@{ $params{LINKS} }) { + do_statement($form, $sth, $query, conv_i($params{id}), conv_i($link->{trans_id}), $link->{trans_type}, $link->{trans_info}); + } + + $sth->finish(); + + $dbh->commit() unless ($params{dbh}); + + $main::lxdebug->leave_sub(); +} + +sub finish { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, 'id'); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + + do_query($form, $dbh, qq|UPDATE follow_ups SET done = TRUE WHERE id = ?|, conv_i($params{id})); + + $dbh->commit(); + + $main::lxdebug->leave_sub(); +} + +sub delete { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, 'id'); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + + my $id = conv_i($params{id}); + + do_query($form, $dbh, qq|DELETE FROM follow_up_links WHERE follow_up_id = ?|, $id); + do_query($form, $dbh, qq|DELETE FROM follow_ups WHERE id = ?|, $id); + do_query($form, $dbh, qq|DELETE FROM notes WHERE (trans_id = ?) AND (trans_module = 'fu')|, $id); + + $dbh->commit(); + + $main::lxdebug->leave_sub(); +} + +sub retrieve { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, 'id'); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + my ($query, @values); + + my ($employee_id) = selectrow_query($form, $dbh, qq|SELECT id FROM employee WHERE login = ?|, $form->{login}); + $query = qq|SELECT fu.*, n.subject, n.body, n.created_by + FROM follow_ups fu + LEFT JOIN notes n ON (fu.note_id = n.id) + WHERE (fu.id = ?) + AND ( (fu.created_by = ?) OR (fu.created_for_user = ?) + OR (fu.created_by IN (SELECT DISTINCT what FROM follow_up_access WHERE who = ?)))|; + my $ref = selectfirst_hashref_query($form, $dbh, $query, conv_i($params{id}), $employee_id, $employee_id, $employee_id); + + if (!$ref) { + $main::lxdebug->leave_sub(); + return undef; + } + + $ref->{LINKS} = $self->retrieve_links(%{ $ref }); + + $main::lxdebug->leave_sub(); + + return $ref; +} + +sub retrieve_links { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, qw(id)); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + + my $query = qq|SELECT ful.trans_id, ful.trans_type, ful.trans_info, fu.note_id + FROM follow_up_links ful + LEFT JOIN follow_ups fu ON (ful.follow_up_id = fu.id) + WHERE ful.follow_up_id = ? + ORDER BY ful.itime|; + + my $links = selectall_hashref_query($form, $dbh, $query, conv_i($params{id})); + + foreach my $link_ref (@{ $links }) { + my $link_details = FU->link_details(%{ $link_ref }); + map { $link_ref->{$_} = $link_details->{$_} } keys %{ $link_details} if ($link_details); + } + + $main::lxdebug->leave_sub(); + + return $links; +} + +sub follow_ups { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + my ($query, $where, $where_user); + + my ($employee_id) = selectrow_query($form, $dbh, qq|SELECT id FROM employee WHERE login = ?|, $form->{login}); + my @values = ($employee_id, $employee_id); + + if ($params{trans_id}) { + $where .= qq| AND EXISTS (SELECT * FROM follow_up_links ful + WHERE (ful.follow_up_id = fu.id) AND (ful.trans_id = ?))|; + push @values, conv_i($params{trans_id}); + } + + if ($params{due_only}) { + $where .= qq| AND (fu.follow_up_date <= current_date)|; + } + + if ($params{done} ne $params{not_done}) { + my $not = $params{not_done} ? 'NOT' : ''; + $where .= qq| AND $not COALESCE(fu.done, FALSE)|; + } + + if ($params{not_id}) { + $where .= qq| AND (fu.id <> ?)|; + push @values, conv_i($params{not_id}); + } + + foreach my $item (qw(subject body)) { + next unless ($params{$item}); + $where .= qq| AND (n.${item} ILIKE ?)|; + push @values, '%' . $params{$item} . '%'; + } + + if ($params{reference}) { + $where .= qq| AND EXISTS (SELECT ful.follow_up_id + FROM follow_up_links ful + WHERE (ful.follow_up_id = fu.id) + AND (ful.trans_info ILIKE ?) + LIMIT 1)|; + push @values, '%' . $params{reference} . '%'; + } + + if ($params{follow_up_date_from}) { + $where .= qq| AND (fu.follow_up_date >= ?)|; + push @values, conv_date($params{follow_up_date_from}); + } + if ($params{follow_up_date_to}) { + $where .= qq| AND (fu.follow_up_date <= ?)|; + push @values, conv_date($params{follow_up_date_to}); + } + + if ($params{itime_from}) { + $where .= qq| AND (date_trunc('DAY', fu.itime) >= ?)|; + push @values, conv_date($params{itime_from}); + } + if ($params{itime_to}) { + $where .= qq| AND (date_trunc('DAY', fu.itime) <= ?)|; + push @values, conv_date($params{itime_to}); + } + + if ($params{all_users}) { + $where_user = qq|OR (fu.created_by IN (SELECT DISTINCT what FROM follow_up_access WHERE who = ?))|; + push @values, $employee_id; + } + + $query = qq|SELECT fu.*, n.subject, n.body, n.created_by, + fu.follow_up_date <= current_date AS due, + fu.itime::DATE AS created_on, + COALESCE(eby.name, eby.login) AS created_by_name, + COALESCE(efor.name, efor.login) AS created_for_user_name + FROM follow_ups fu + LEFT JOIN notes n ON (fu.note_id = n.id) + LEFT JOIN employee eby ON (n.created_by = eby.id) + LEFT JOIN employee efor ON (fu.created_for_user = efor.id) + WHERE ((fu.created_by = ?) OR (fu.created_for_user = ?) + $where_user) + $where + ORDER BY fu.follow_up_date DESC, fu.id ASC|; + + my $follow_ups = selectall_hashref_query($form, $dbh, $query, @values); + + if (!scalar @{ $follow_ups }) { + $main::lxdebug->leave_sub(); + return $follow_ups; + } + + foreach my $fu (@{ $follow_ups }) { + $fu->{LINKS} = $self->retrieve_links(%{ $fu }); + } + + $main::lxdebug->leave_sub(); + + return $follow_ups; +} + +sub link_details { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, qw(trans_id trans_type)); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + my $locale = $main::locale; + + my $q_id = $form->quote($params{trans_id}); + my $link; + + if ($params{trans_type} eq 'customer') { + $link = { + 'url' => 'ct.pl?action=edit&db=customer&id=' . $form->quote($params{trans_id}) . '&edit_note_id=' . $form->quote($params{note_id}), + 'title' => $locale->text('Customer') . " '$params{trans_info}'", + }; + + } elsif ($params{trans_type} eq 'vendor') { + $link = { + 'url' => 'ct.pl?action=edit&type=sales_quotation&id=' . $params{trans_id} . '&edit_note_id=' . $form->quote($params{note_id}), + 'title' => $locale->text('Vendor') . " '$params{trans_info}'", + }; + + } elsif ($params{trans_type} eq 'sales_quotation') { + $link = { + 'url' => 'oe.pl?action=edit&type=sales_quotation&id=' . $params{trans_id}, + 'title' => $locale->text('Sales quotation') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'sales_order') { + $link = { + 'url' => 'oe.pl?action=edit&type=sales_order&id=' . $params{trans_id}, + 'title' => $locale->text('Sales Order') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'sales_invoice') { + $link = { + 'url' => 'is.pl?action=edit&type=invoice&id=' . $params{trans_id}, + 'title' => $locale->text('Sales Invoice') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'credit_note') { + $link = { + 'url' => 'is.pl?action=edit&type=credit_note&id=' . $params{trans_id}, + 'title' => $locale->text('Credit Note') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'dunning') { + $link = { + 'url' => 'dn.pl?action=print_dunning&format=pdf&media=screen&dunning_id=' . $params{trans_id}, + 'title' => $locale->text('Dunning') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'request_quotation') { + $link = { + 'url' => 'oe.pl?action=edit&type=request_quotation&id=' . $params{trans_id}, + 'title' => $locale->text('Request quotation') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'purchase_order') { + $link = { + 'url' => 'oe.pl?action=edit&type=purchase_order&id=' . $params{trans_id}, + 'title' => $locale->text('Purchase Order') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'vendor_invoice') { + $link = { + 'url' => 'ir.pl?action=edit&type=invoice&id=' . $params{trans_id}, + 'title' => $locale->text('Vendor Invoice') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'ar_transaction') { + $link = { + 'url' => 'ar.pl?action=editid=' . $params{trans_id}, + 'title' => $locale->text('AR Transaction') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'ap_transaction') { + $link = { + 'url' => 'ap.pl?action=editid=' . $params{trans_id}, + 'title' => $locale->text('AP Transaction') . " $params{trans_info}", + }; + + } elsif ($params{trans_type} eq 'gl_transaction') { + $link = { + 'url' => 'gl.pl?action=edit&id=' . $params{trans_id}, + 'title' => $locale->text('GL Transaction') . " $params{trans_info}", + }; + + } + + $main::lxdebug->leave_sub(); + + return $link || { }; +} + +sub save_access_rights { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, 'access'); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + + my ($id) = selectrow_query($form, $dbh, qq|SELECT id FROM employee WHERE login = ?|, $form->{login}); + + my $query = qq|INSERT INTO follow_up_access (who, what) VALUES (?, ?)|; + my $sth = prepare_query($form, $dbh, $query); + + do_query($form, $dbh, qq|DELETE FROM follow_up_access WHERE what = ?|, $id); + + while (my ($who, $access_allowed) = each %{ $params{access} }) { + next unless ($access_allowed); + + do_statement($form, $sth, $query, conv_i($who), $id); + } + + $sth->finish(); + + $dbh->commit(); + + $main::lxdebug->leave_sub(); +} + +sub retrieve_access_rights { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + + my $sth = prepare_execute_query($form, $dbh, qq|SELECT who FROM follow_up_access WHERE what = (SELECT id FROM employee WHERE login = ?)|, $form->{login}); + my $access = {}; + + while (my $ref = $sth->fetchrow_hashref()) { + $access->{$ref->{who}} = 1; + } + + $sth->finish(); + + $main::lxdebug->leave_sub(); + + return $access; +} + +1; diff --git a/SL/Form.pm b/SL/Form.pm index 98fd7b2b8..4c630f119 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -2213,6 +2213,20 @@ sub _get_simple { $main::lxdebug->leave_sub(); } +sub _get_groups { + $main::lxdebug->enter_sub(); + + my ($self, $dbh, $key) = @_; + + $key ||= "all_groups"; + + my $groups = $main::auth->read_groups(); + + $self->{$key} = selectall_hashref_query($self, $dbh, $query); + + $main::lxdebug->leave_sub(); +} + sub get_lists { $main::lxdebug->enter_sub(); @@ -2311,6 +2325,10 @@ sub get_lists { $self->_get_warehouses($dbh, $params{warehouses}); } + if ($params{groups}) { + $self->_get_groups($dbh, $params{groups}); + } + $main::lxdebug->leave_sub(); } diff --git a/SL/Notes.pm b/SL/Notes.pm new file mode 100644 index 000000000..c61dd3d1e --- /dev/null +++ b/SL/Notes.pm @@ -0,0 +1,86 @@ +# Notes + +package Notes; + +use SL::Common; +use SL::DBUtils; + +sub save { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); + my ($query, @values); + + if (!$params{id}) { + ($params{id}) = selectrow_query($form, $dbh, qq|SELECT nextval('note_id')|); + $query = qq|INSERT INTO notes (created_by, trans_id, trans_module, subject, body, id) + VALUES ((SELECT id FROM employee WHERE login = ?), ?, ?, ?, ?, ?)|; + push @values, $form->{login}, conv_i($params{trans_id}), $params{trans_module}; + + } else { + $query = qq|UPDATE notes SET subject = ?, body = ? WHERE id = ?|; + } + + push @values, $params{subject}, $params{body}, conv_i($params{id}); + + do_query($form, $dbh, $query, @values); + + $dbh->commit() unless ($params{dbh}); + + $main::lxdebug->leave_sub(); + + return $params{id}; +} + +sub retrieve { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, qw(id)); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $form->get_standard_dbh($myconfig); + + my $ref = selectfirst_hashref_query($form, $dbh, qq|SELECT * FROM notes WHERE id = ?|, conv_i($param{id})); + + $main::lxdebug->leave_sub(); + + return $ref; +} + +sub delete { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, qw(id)); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); + my $id = conv_i($params{id}); + + do_query($form, $dbh, qq|DELETE FROM follow_up_links WHERE follow_up_id IN (SELECT DISTINCT id FROM follow_ups WHERE note_id = ?)|, $id); + do_query($form, $dbh, qq|DELETE FROM follow_ups WHERE note_id = ?|, $id); + do_query($form, $dbh, qq|DELETE FROM notes WHERE id = ?|, $id); + + $dbh->commit() unless ($params{dbh}); + + $main::lxdebug->leave_sub(); + + return $ref; +} + +1; diff --git a/SL/OE.pm b/SL/OE.pm index 2e7a6bebb..2574afae1 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -184,6 +184,41 @@ sub transactions { $main::lxdebug->leave_sub(); } +sub transactions_for_todo_list { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); + + my $query = qq|SELECT id FROM employee WHERE login = ?|; + my ($e_id) = selectrow_query($form, $dbh, $query, $form->{login}); + + $query = + qq|SELECT oe.id, oe.transdate, oe.reqdate, oe.quonumber, oe.transaction_description, oe.amount, + c.name AS customer, + e.name AS employee + FROM oe + LEFT JOIN customer c ON (oe.customer_id = c.id) + LEFT JOIN employee e ON (oe.employee_id = e.id) + WHERE (COALESCE(quotation, FALSE) = TRUE) + AND (COALESCE(closed, FALSE) = FALSE) + AND ((oe.employee_id = ?) OR (oe.salesman_id = ?)) + AND NOT (oe.reqdate ISNULL) + AND (oe.reqdate < current_date) + ORDER BY transdate|; + + my $quotations = selectall_hashref_query($form, $dbh, $query, $e_id, $e_id); + + $main::lxdebug->leave_sub(); + + return $quotations; +} + sub save { $main::lxdebug->enter_sub(); diff --git a/bin/mozilla/ap.pl b/bin/mozilla/ap.pl index 7b06ed74a..0c1239f41 100644 --- a/bin/mozilla/ap.pl +++ b/bin/mozilla/ap.pl @@ -32,8 +32,10 @@ #====================================================================== use POSIX qw(strftime); +use List::Util qw(sum); use SL::AP; +use SL::FU; use SL::IR; use SL::IS; use SL::PE; @@ -387,8 +389,14 @@ selectvendor } | $button2 = qq| $readonly|; } + + my $follow_up_vc = $form->{vendor}; + $follow_up_vc =~ s/--.*?//; + my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)"; + $form->{javascript} .= qq||; $form->{javascript} .= qq||; + $form->{javascript} .= qq||; $form->header; $onload = qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|; @@ -404,6 +412,11 @@ selectvendor } | {locked}> + + + + + | . ($form->{saved_message} ? qq|

$form->{saved_message}

| : "") . qq| @@ -753,8 +766,20 @@ sub form_footer { $auth->assert('general_ledger'); + my $follow_ups_block; + if ($form->{id}) { + my $follow_ups = FU->follow_ups('trans_id' => $form->{id}); + + if (@{ $follow_ups} ) { + my $num_due = sum map { $_->{due} * 1 } @{ $follow_ups }; + $follow_ups_block = qq|

| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|

|; + } + } + print qq| +$follow_ups_block + | @@ -792,6 +817,7 @@ sub form_footer { print qq| + |; } elsif (($transdate > $closedto) && !$form->{id}) { print qq| diff --git a/bin/mozilla/ar.pl b/bin/mozilla/ar.pl index ae15aed9a..88a9b97bf 100644 --- a/bin/mozilla/ar.pl +++ b/bin/mozilla/ar.pl @@ -32,8 +32,10 @@ #====================================================================== use POSIX qw(strftime); +use List::Util qw(sum); use SL::AR; +use SL::FU; use SL::IS; use SL::PE; use SL::ReportGenerator; @@ -431,9 +433,14 @@ sub form_header { qq||; } + my $follow_up_vc = $form->{customer}; + $follow_up_vc =~ s/--.*?//; + my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)"; + $form->{javascript} .= qq|| . - qq||; + qq|| . + qq||; $form->header; $onload = qq|focus()|; @@ -449,6 +456,10 @@ sub form_header { {closedto}> {locked}> + + + + | . ($form->{saved_message} ? qq|

$form->{saved_message}

| : "") . qq| @@ -800,8 +811,20 @@ sub form_footer { my ($transdate, $closedto); + my $follow_ups_block; + if ($form->{id}) { + my $follow_ups = FU->follow_ups('trans_id' => $form->{id}); + + if (@{ $follow_ups} ) { + my $num_due = sum map { $_->{due} * 1 } @{ $follow_ups }; + $follow_ups_block = qq|

| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|

|; + } + } + print qq| +$follow_ups_block + @@ -842,7 +865,10 @@ sub form_footer { |; } print qq| - |; + + |; } else { if ($transdate > $closedto) { diff --git a/bin/mozilla/ct.pl b/bin/mozilla/ct.pl index d4c5230d3..d4d2f9fb7 100644 --- a/bin/mozilla/ct.pl +++ b/bin/mozilla/ct.pl @@ -267,10 +267,11 @@ sub form_header { $auth->assert('customer_vendor_edit'); - $form->get_lists("employees" => "ALL_SALESMEN", + $form->get_lists("employees" => "ALL_EMPLOYEES", "taxzones" => "ALL_TAXZONES"); $form->get_pricegroup(\%myconfig, { all => 1 }); + $form->{ALL_SALESMEN} = $form->{ALL_EMPLOYEES}; $form->{taxincluded} = ($form->{taxincluded}) ? "checked" : ""; $form->{is_admin} = $myconfig{role} eq 'admin'; $form->{is_customer} = $form->{db} eq 'customer'; @@ -295,12 +296,12 @@ sub form_header { map { $form->{"MB_$_"} = [ map +{ id => $_, description => $_ }, @{ $form->{$_} } ] } qw(TITLES GREETINGS COMPANY_GREETINGS DEPARTMENT); ## /LINET + $form->{NOTES} ||= [ ]; + $form->{CUSTOM_VARIABLES} = CVar->get_custom_variables('module' => 'CT', 'trans_id' => $form->{id}); CVar->render_inputs('variables' => $form->{CUSTOM_VARIABLES}) if (scalar @{ $form->{CUSTOM_VARIABLES} }); - $main::lxdebug->dump(0, "cvar", $form->{CUSTOM_VARIABLES}); - $form->header; print $form->parse_html_template('ct/form_header'); diff --git a/bin/mozilla/fu.pl b/bin/mozilla/fu.pl new file mode 100644 index 000000000..7c78dd7ed --- /dev/null +++ b/bin/mozilla/fu.pl @@ -0,0 +1,403 @@ +use POSIX qw(strftime); + +use SL::FU; +use SL::ReportGenerator; + +require "bin/mozilla/reportgenerator.pl"; + +sub _collect_links { + $lxdebug->enter_sub(); + + my $dest = shift; + + $dest->{LINKS} = []; + + foreach my $i (1 .. $form->{trans_rowcount}) { + next if (!$form->{"trans_id_$i"} || !$form->{"trans_type_$i"}); + + push @{ $dest->{LINKS} }, { map { +"trans_$_" => $form->{"trans_${_}_$i"} } qw(id type info) }; + } + + $lxdebug->leave_sub(); +} + +sub add { + $lxdebug->enter_sub(); + + _collect_links($form); + + $form->get_employee($form->get_standard_dbh(\%myconfig)); + $form->{created_for_user} = $form->{employee_id}; + + my $link_details; + + if (0 < scalar @{ $form->{LINKS} }) { + $link_details = FU->link_details(%{ $form->{LINKS}->[0] }); + } + + if ($link_details && $link_details->{title}) { + $form->{title} = $locale->text('Add Follow-Up for #1', $link_details->{title}); + } else { + $form->{title} = $locale->text('Add Follow-Up'); + } + + display_form(); + + $lxdebug->leave_sub(); +} + +sub edit { + $lxdebug->enter_sub(); + + my $ref = FU->retrieve('id' => $form->{id}); + + if (!$ref) { + $form->error($locale->text("Invalid follow-up ID.")); + } + + map { $form->{$_} = $ref->{$_} } keys %{ $ref }; + + if (@{ $form->{LINKS} } && $form->{LINKS}->[0]->{title}) { + $form->{title} = $locale->text('Edit Follow-Up for #1', $form->{LINKS}->[0]->{title}); + } else { + $form->{title} = $locale->text('Edit Follow-Up'); + } + + display_form(); + + $lxdebug->leave_sub(); +} + +sub display_form { + $lxdebug->enter_sub(); + + $form->get_lists("employees" => "EMPLOYEES"); + + my %params; + $params{not_id} = $form->{id} if ($form->{id}); + $params{trans_id} = $form->{LINKS}->[0]->{trans_id} if (@{ $form->{LINKS} }); + $form->{FOLLOW_UPS} = FU->follow_ups(%params); + + $form->{jsscript} = 1; + + $form->header(); + print $form->parse_html_template('fu/add_edit'); + + $lxdebug->leave_sub(); +} + +sub save_follow_up { + $lxdebug->enter_sub(); + + $form->isblank('created_for_user', $locale->text('You must chose a user.')); + $form->isblank('follow_up_date', $locale->text('The follow-up date is missing.')); + $form->isblank('subject', $locale->text('The subject is missing.')); + + my %params = (map({ $_ => $form->{$_} } qw(id subject body created_for_user follow_up_date)), 'done' => 0); + + _collect_links(\%params); + + FU->save(%params); + + if ($form->{POPUP_MODE}) { + $form->header(); + print $form->parse_html_template('fu/close_window'); + exit 0; + } + + $form->{SAVED_MESSAGE} = $locale->text('Follow-Up saved.'); + + if ($form->{callback}) { + $form->redirect(); + } + + delete @{$form}{qw(id subject body created_for_user follow_up_date)}; + + map { $form->{$_} = 1 } qw(due_only all_users not_done); + + report(); + + $lxdebug->leave_sub(); +} + +sub finish { + $lxdebug->enter_sub(); + + if ($form->{id}) { + my $ref = FU->retrieve('id' => $form->{id}); + + if (!$ref) { + $form->error($locale->text("Invalid follow-up ID.")); + } + + FU->finish('id' => $form->{id}); + + } else { + foreach my $i (1..$form->{rowcount}) { + next unless ($form->{"selected_$i"} && $form->{"follow_up_id_$i"}); + + FU->finish('id' => $form->{"follow_up_id_$i"}); + } + } + + if ($form->{POPUP_MODE}) { + $form->header(); + print $form->parse_html_template('fu/close_window'); + exit 0; + } + + $form->redirect() if ($form->{callback}); + + report(); + + $lxdebug->leave_sub(); +} + +sub delete { + $lxdebug->enter_sub(); + + if ($form->{id}) { + my $ref = FU->retrieve('id' => $form->{id}); + + if (!$ref) { + $form->error($locale->text("Invalid follow-up ID.")); + } + + FU->delete('id' => $form->{id}); + + } else { + foreach my $i (1..$form->{rowcount}) { + next unless ($form->{"selected_$i"} && $form->{"follow_up_id_$i"}); + + FU->delete('id' => $form->{"follow_up_id_$i"}); + } + } + + if ($form->{POPUP_MODE}) { + $form->header(); + print $form->parse_html_template('fu/close_window'); + exit 0; + } + + $form->redirect() if ($form->{callback}); + + report(); + + $lxdebug->leave_sub(); +} + +sub search { + $lxdebug->enter_sub(); + + $form->get_lists("employees" => "EMPLOYEES"); + + $form->{jsscript} = 1; + $form->{title} = $locale->text('Follow-Ups'); + + $form->header(); + print $form->parse_html_template('fu/search'); + + $lxdebug->leave_sub(); +} + +sub report { + $lxdebug->enter_sub(); + + my @report_params = qw(created_for subject body reference follow_up_date_from follow_up_date_to itime_from itime_to due_only all_users done not_done); + + my $follow_ups = FU->follow_ups(map { $_ => $form->{$_} } @report_params); + $form->{rowcount} = scalar @{ $follow_ups }; + + $form->{title} = $locale->text('Follow-Ups'); + + my %column_defs = ( + 'selected' => { 'text' => '', }, + 'follow_up_date' => { 'text' => $locale->text('Follow-Up Date'), }, + 'created_on' => { 'text' => $locale->text('Created on'), }, + 'title' => { 'text' => $locale->text('Reference'), }, + 'subject' => { 'text' => $locale->text('Subject'), }, + 'created_by_name' => { 'text' => $locale->text('Created by'), }, + 'created_for_user_name' => { 'text' => $locale->text('Follow-up for'), }, + 'done' => { 'text' => $locale->text('Done'), 'visible' => $form->{done} && $form->{not_done} ? 1 : 0 }, + ); + + my @columns = qw(selected follow_up_date created_on subject title created_by_name created_for_user_name done); + + my @options; + + if ($form->{created_for}) { + $form->get_lists("employees" => "EMPLOYEES"); + + foreach my $employee (@{ $form->{EMPLOYEES} }) { + if ($employee->{id} == $form->{created_for}) { + push @options, $locale->text('Created for') . " : " . ($employee->{name} ? "$employee->{name} ($employee->{login})" : $employee->{login}); + last; + } + } + } + + push @options, $locale->text('Subject') . " : $form->{subject}" if ($form->{subject}); + push @options, $locale->text('Body') . " : $form->{body}" if ($form->{body}); + push @options, $locale->text('Reference') . " : $form->{reference}" if ($form->{reference}); + push @options, $locale->text('Done') if ($form->{done}); + push @options, $locale->text('Not done yet') if ($form->{not_done}); + push @options, $locale->text('Only due follow-ups') if ($form->{due_only}); + push @options, $locale->text("Other users' follow-ups") if ($form->{all_users}); + + my @hidden_report_params = map { +{ 'key' => $_, 'value' => $form->{$_} } } @report_params; + + my $report = SL::ReportGenerator->new(\%myconfig, $form, 'std_column_visibility' => 1); + + $report->set_columns(%column_defs); + $report->set_column_order(@columns); + + $report->set_export_options('report', @report_params); + + $report->set_sort_indicator('follow_up_date', 1); + + $report->set_options('raw_top_info_text' => $form->parse_html_template('fu/report_top', { 'OPTIONS' => \@options }), + 'raw_bottom_info_text' => $form->parse_html_template('fu/report_bottom', { 'HIDDEN' => \@hidden_report_params }), + 'output_format' => 'HTML', + 'title' => $form->{title}, + 'attachment_basename' => $locale->text('follow_up_list') . strftime('_%Y%m%d', localtime time), + ); + $report->set_options_from_form(); + + my $idx = 0; + my $callback = build_std_url('action=report', grep { $form->{$_} } @report_params); + my $edit_url = build_std_url('action=edit', 'callback=' . E($callback)); + + foreach my $fu (@{ $follow_ups }) { + $idx++; + + $fu->{done} = $fu->{done} ? $locale->text('Yes') : $locale->text('No'); + + my $row = { map { $_ => { 'data' => $fu->{$_} } } keys %{ $fu } }; + + $row->{selected} = { + 'raw_data' => $cgi->hidden('-name' => "follow_up_id_${idx}", '-value' => $fu->{id}) + . $cgi->checkbox('-name' => "selected_${idx}", '-value' => 1, '-label' => ''), + 'valign' => 'center', + 'align' => 'center', + }; + + if (@{ $fu->{LINKS} }) { + my $link = $fu->{LINKS}->[0]; + + $row->{title}->{data} = $link->{title}; + $row->{title}->{link} = $link->{url}; + } + + $row->{subject}->{link} = $edit_url . '&id=' . Q($fu->{id}); + + $report->add_data($row); + } + + $report->generate_with_headers(); + + $lxdebug->leave_sub(); +} + +sub report_for_todo_list { + $lxdebug->enter_sub(); + + my @report_params = qw(created_for subject body reference follow_up_date_from follow_up_date_to itime_from itime_to due_only all_users done not_done); + + my %params = ( + 'due_only' => 1, + 'not_done' => 1, + 'created_for_login' => $form->{login}, + ); + + my $follow_ups = FU->follow_ups(%params); + my $content; + + if (@{ $follow_ups }) { + my $callback = build_std_url('action'); + my $edit_url = build_std_url('script=fu.pl', 'action=edit', 'callback=' . E($callback)) . '&id='; + + foreach my $fu (@{ $follow_ups }) { + if (@{ $fu->{LINKS} }) { + my $link = $fu->{LINKS}->[0]; + + $fu->{reference} = $link->{title}; + $fu->{reference_link} = $link->{url}; + } + } + + $content = $form->parse_html_template('fu/report_for_todo_list', { 'FOLLOW_UPS' => $follow_ups, + 'callback' => $callback, + 'edit_url' => $edit_url, }); + } + + $lxdebug->leave_sub(); + + return $content; +} + +sub edit_access_rights { + $lxdebug->enter_sub(); + + my $access = FU->retrieve_access_rights(); + + $form->get_lists("employees" => "EMPLOYEES"); + + map { $_->{access} = $access->{$_->{id}} } @{ $form->{EMPLOYEES} }; + + $form->{title} = $locale->text('Edit Access Rights for Follow-Ups'); + + $form->header(); + print $form->parse_html_template('fu/edit_access_rights'); + + $lxdebug->leave_sub(); +} + +sub save_access_rights { + $lxdebug->enter_sub(); + + my %access; + + foreach my $i (1 .. $form->{rowcount}) { + my $id = $form->{"employee_id_$i"}; + + $access{$id} = 1 if ($id && $form->{"access_$id"}); + } + + FU->save_access_rights('access' => \%access); + + $form->{SAVED_MESSAGE} = $locale->text('The access rights have been saved.'); + edit_access_rights(); + + $lxdebug->leave_sub(); +} + +sub update { + call_sub($form->{nextsub}); +} + +sub continue { + call_sub($form->{nextsub}); +} + +sub save { + if ($form->{save_nextsub}) { + call_sub($form->{save_nextsub}); + } else { + save_follow_up(); + } +} + +sub dispatcher { + foreach my $action (qw(finish save delete)) { + if ($form->{"action_${action}"}) { + call_sub($action); + return; + } + } + + call_sub($form->{default_action}) if ($form->{default_action}); + + $form->error($locale->text('No action defined.')); +} + +1; diff --git a/bin/mozilla/gl.pl b/bin/mozilla/gl.pl index 6c4b41356..0a2ab4c7a 100644 --- a/bin/mozilla/gl.pl +++ b/bin/mozilla/gl.pl @@ -32,7 +32,9 @@ #====================================================================== use POSIX qw(strftime); +use List::Util qw(sum); +use SL::FU; use SL::GL; use SL::IS; use SL::PE; @@ -1068,6 +1070,9 @@ sub form_header { print qq| + + + |; @@ -1076,6 +1081,10 @@ sub form_header { print qq| + + + +
@@ -1205,6 +1214,16 @@ sub form_footer { $auth->assert('general_ledger'); + my $follow_ups_block; + if ($form->{id}) { + my $follow_ups = FU->follow_ups('trans_id' => $form->{id}); + + if (@{ $follow_ups} ) { + my $num_due = sum map { $_->{due} * 1 } @{ $follow_ups }; + $follow_ups_block = qq|

| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|

|; + } + } + ($dec) = ($form->{totaldebit} =~ /\.(\d+)/); $dec = length $dec; $decimalplaces = ($dec > 2) ? $dec : 2; @@ -1228,6 +1247,8 @@ sub form_footer { +$follow_ups_block +
|; @@ -1247,6 +1268,11 @@ sub form_footer { |; } + print qq| + |; + } else { if ($transdate > $closedto) { print qq| diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index 5b4719486..239a85942 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -31,10 +31,11 @@ # #====================================================================== +use SL::FU; use SL::IR; use SL::IS; use SL::PE; -use List::Util qw(max); +use List::Util qw(max sum); require "bin/mozilla/io.pl"; require "bin/mozilla/invoice_io.pl"; @@ -400,9 +401,14 @@ sub form_header { "invdate", "BL", "trigger1", "duedate", "BL", "trigger2"); + my $follow_up_vc = $form->{vendor}; + $follow_up_vc =~ s/--.*?//; + my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)"; + $form->{javascript} .= qq||; $form->{javascript} .= qq||; $form->{javascript} .= qq||; + $form->{javascript} .= qq||; $jsscript .= $form->write_trigger(\%myconfig, 2, "orddate", "BL", "trigger_orddate", "quodate", "BL", "trigger_quodate"); @@ -608,6 +614,20 @@ sub form_footer { $form->{invtotal} = $form->format_amount(\%myconfig, $form->{invtotal}, 2, 0); + my $follow_ups_block; + if ($form->{id}) { + my $follow_ups = FU->follow_ups('trans_id' => $form->{id}); + + if (@{ $follow_ups} ) { + my $num_due = sum map { $_->{due} * 1 } @{ $follow_ups }; + $follow_ups_block = qq| + + + +|; + } + } + print qq| + $follow_ups_block
| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|
@@ -623,6 +643,7 @@ sub form_footer { $notes $intnotes
@@ -811,6 +832,9 @@ sub form_footer { } print qq| + |; } diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 975cb9479..b632b389f 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -31,10 +31,11 @@ # #====================================================================== +use SL::FU; use SL::IS; use SL::PE; use Data::Dumper; -use List::Util qw(max); +use List::Util qw(max sum); require "bin/mozilla/io.pl"; require "bin/mozilla/invoice_io.pl"; @@ -574,6 +575,11 @@ sub form_header { } $credittext = $locale->text('Credit Limit exceeded!!!'); + + my $follow_up_vc = $form->{customer}; + $follow_up_vc =~ s/--.*?//; + my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)"; + $onload = ($form->{resubmit} && ($form->{format} eq "html")) ? qq|window.open('about:blank','Beleg'); document.invoice.target = 'Beleg';document.invoice.submit()| : ($form->{resubmit}) ? qq|document.invoice.submit()| : ($creditwarning) ? qq|alert('$credittext')| @@ -599,6 +605,7 @@ sub form_header { + | ; @@ -614,6 +621,11 @@ sub form_header { print qq| + + + + +
$form->{title}
@@ -860,6 +872,20 @@ sub form_footer { $form->{invtotal} = $form->format_amount(\%myconfig, $form->{invtotal}, 2, 0); + my $follow_ups_block; + if ($form->{id}) { + my $follow_ups = FU->follow_ups('trans_id' => $form->{id}); + + if (@{ $follow_ups} ) { + my $num_due = sum map { $_->{due} * 1 } @{ $follow_ups }; + $follow_ups_block = qq| + + | . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq| + +|; + } + } + print qq| @@ -878,6 +904,7 @@ sub form_footer { + $follow_ups_block @@ -1095,18 +1122,18 @@ if ($form->{type} eq "credit_note") { print qq| |; - if ($form->{id} && !($form->{type} eq "credit_note")) { - print qq| + if ($form->{id} && !($form->{type} eq "credit_note")) { + print qq| |; - } + } if ($form->{radier}) { print qq| |; - } + } if ($invdate > $closedto) { @@ -1116,6 +1143,11 @@ if ($form->{type} eq "credit_note") { |; } + print qq| + |; + } else { if ($invdate > $closedto) { print qq|{todo_list} = create_todo_list(); + $form->{stylesheet} = $myconfig{stylesheet}; $form->{title} = $locale->text('About'); @@ -188,3 +191,4 @@ sub show_error { exit; } + diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index cb875d1c2..2c613a896 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -33,12 +33,13 @@ use POSIX qw(strftime); +use SL::FU; use SL::OE; use SL::IR; use SL::IS; use SL::PE; use SL::ReportGenerator; -use List::Util qw(max reduce); +use List::Util qw(max reduce sum); require "bin/mozilla/io.pl"; require "bin/mozilla/arap.pl"; @@ -431,6 +432,19 @@ sub form_header { $credittext = $locale->text('Credit Limit exceeded!!!'); + my $follow_up_vc = $form->{ $form->{vc} eq 'customer' ? 'customer' : 'vendor' }; + $follow_up_vc =~ s/--.*?//; + $TMPL_VAR{follow_up_trans_info} = ($form->{type} =~ /_quotation$/ ? $form->{quonumber} : $form->{ordnumber}) . " ($follow_up_vc)"; + + if ($form->{id}) { + my $follow_ups = FU->follow_ups('trans_id' => $form->{id}); + + if (scalar @{ $follow_ups }) { + $TMPL_VAR{num_follow_ups} = scalar @{ $follow_ups }; + $TMPL_VAR{num_due_follow_ups} = sum map { $_->{due} * 1 } @{ $follow_ups }; + } + } + $onload = ($form->{resubmit} && ($form->{format} eq "html")) ? "window.open('about:blank','Beleg'); document.oe.target = 'Beleg';document.oe.submit()" : ($form->{resubmit}) ? "document.oe.submit()" : ($creditwarning) ? "alert('$credittext')" @@ -439,7 +453,7 @@ sub form_header { $onload .= qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|; $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|; $TMPL_VAR{onload} = $onload; - + $form->{javascript} .= qq||; $form->{javascript} .= qq||; $form->{javascript} .= qq||; @@ -2017,3 +2031,21 @@ sub display_form { $lxdebug->leave_sub(); } +sub report_for_todo_list { + $lxdebug->enter_sub(); + + my $quotations = OE->transactions_for_todo_list(); + my $content; + + if (@{ $quotations }) { + my $edit_url = build_std_url('script=oe.pl', 'action=edit', 'type=sales_quotation', 'vc=customer'); + + $content = $form->parse_html_template('oe/report_for_todo_list', { 'QUOTATIONS' => $quotations, + 'edit_url' => $edit_url }); + } + + $lxdebug->leave_sub(); + + return $content; +} + diff --git a/bin/mozilla/todo.pl b/bin/mozilla/todo.pl new file mode 100644 index 000000000..0f8cf3d7e --- /dev/null +++ b/bin/mozilla/todo.pl @@ -0,0 +1,82 @@ +#===================================================================== +# LX-Office ERP +# Copyright (C) 2004 +# Based on SQL-Ledger Version 2.1.9 +# Web http://www.lx-office.org +# +###################################################################### +# SQL-Ledger Accounting +# Copyright (c) 1998-2002 +# +# Author: Dieter Simader +# Email: dsimader@sql-ledger.org +# Web: http://www.sql-ledger.org +# +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +####################################################################### + +sub create_todo_list { + $lxdebug->enter_sub(); + + my (@todo_items, $todo_list); + + push @todo_items, todo_list_follow_ups(); + push @todo_items, todo_list_overdue_sales_quotations(); + + @todo_items = grep { $_ } @todo_items; + $todo_list = join("", @todo_items); + + $lxdebug->leave_sub(); + + return $todo_list; +} + +sub show_todo_list { + $lxdebug->enter_sub(); + + $form->{todo_list} = create_todo_list(); + $form->{title} = $locale->text('TODO list'); + + $form->header(); + print $form->parse_html_template('todo/show_todo_list'); + + $lxdebug->leave_sub(); +} + +sub todo_list_follow_ups { + $lxdebug->enter_sub(); + + require "bin/mozilla/fu.pl"; + + my $content = report_for_todo_list(); + + $lxdebug->leave_sub(); + + return $content; +} + +sub todo_list_overdue_sales_quotations { + $lxdebug->enter_sub(); + + require "bin/mozilla/oe.pl"; + + my $content = report_for_todo_list(); + + $lxdebug->leave_sub(); + + return $content; +} + +1; diff --git a/fu.pl b/fu.pl new file mode 120000 index 000000000..385000d1b --- /dev/null +++ b/fu.pl @@ -0,0 +1 @@ +am.pl \ No newline at end of file diff --git a/image/Productivity.png b/image/Productivity.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1d076c91e6592a929a4f3683ba15930f0bacf5 GIT binary patch literal 952 zcmV;p14sOcP)IIDOV~=D_&&~qt% zINQr3$t3o=S}uI`%flYuz3(e4Q~fv3GhaZIPKFwyu{~Ssur*j}c2yNrHCP&6+?V21 z&q+4#*vW*YX}q(MXiI%eyJ~@pg#xZh#G6+UFg;ZDEOcgWuPQjSFU2=KCpp;pF>2#| zoGFyaOeBJ6G-JfSk+;bc2Z;#?NpyTih_-9I_yFcWi1Bdz3 zGFUI*w_UQCF;>^tpdB~9r~~b|7y=X5rvNK`x&sk(h1p>(19X`pixOcA1Dr z@RiF1O#?(&f&({SE|%H0s~yv8P_l%8S2+0gQAYaDa%|udk+t*gkDiMG zZT7CV)-`NstRZZ|r|D6C9sHdwTbghM&i7sBEAr9tA35K5xir^#`j*Fau6^v! azt%s1z@qg;^qM6A0000{texts} = { 'Add Department' => 'Abteilung erfassen', 'Add Dunning' => 'Mahnung erzeugen', 'Add Exchangerate' => 'Wechselkurs erfassen', + 'Add Follow-Up' => 'Wiedervorlage erstellen', + 'Add Follow-Up for #1' => 'Wiedervorlage für #1 erstellen', 'Add General Ledger Transaction' => 'Dialogbuchen', 'Add Group' => 'Warengruppe erfassen', 'Add Language' => 'Sprache hinzufügen', @@ -129,6 +131,7 @@ $self->{texts} = { 'Add a new group' => 'Neue Gruppe erfassen', 'Add and edit %s' => '%s hinzufügen und bearbeiten', 'Add custom variable' => 'Benutzerdefinierte Variable erfassen', + 'Add note' => 'Notiz erfassen', 'Add to group' => 'Zu Gruppe hinzufügen', 'Add unit' => 'Einheit hinzufügen', 'Address' => 'Adresse', @@ -141,6 +144,8 @@ $self->{texts} = { 'All changes in that file have been reverted.' => 'Alle Änderungen in dieser Datei wurden rückgängig gemacht.', 'All database upgrades have been applied.' => 'Alle Datenbankupdates wurden eingespielt.', 'All reports' => 'Alle Berichte (Kontenübersicht, Saldenbilanz, GuV, BWA, Bilanz, Projektbuchungen)', + 'Allow access' => 'Zugriff erlauben', + 'Allow the following users access to my follow-ups:' => 'Erlaube den folgenden Benutzern Zugriff auf meine Wiedervorlagen:', 'Alternatively you can skip this step and create groups yourself.' => 'Alternativ können Sie diesen Schritt überspringen und selber Gruppen anlegen.', '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)', @@ -209,6 +214,7 @@ aktualisieren wollen?', 'Birthday' => 'Geburtstag', 'Bis' => 'bis', 'Bis Konto: ' => 'bis Konto: ', + 'Body' => 'Text', 'Body:' => 'Text:', 'Books are open' => 'Die Bücher sind geöffnet.', 'Boolean variables: If the default value is non-empty then the checkbox will be checked by default and unchecked otherwise.' => 'Ja/Nein-Variablen: Wenn der Standardwert nicht leer ist, so wird die Checkbox standardmäßig angehakt.', @@ -226,6 +232,7 @@ aktualisieren wollen?', 'CANCELED' => 'Storniert', 'CSV export -- options' => 'CSV-Export -- Optionen', 'Calculate' => 'Berechnen', + 'Cancel' => 'Abbrechen', 'Cancel Accounts Payables Transaction' => 'Kreditorenbuchung stornieren', 'Cancel Accounts Receivables Transaction' => 'Debitorenbuchung stornieren', 'Cannot create Lock!' => 'System kann nicht gesperrt werden!', @@ -324,6 +331,9 @@ aktualisieren wollen?', 'Create invoice?' => 'Rechnung erstellen?', 'Create new' => 'Neu erfassen', 'Create tables' => 'Tabellen anlegen', + 'Created by' => 'Erstellt von', + 'Created for' => 'Erstellt für', + 'Created on' => 'Erstellt am', 'Credit' => 'Haben', 'Credit Account' => 'Habenkonto', 'Credit Limit' => 'Kreditlimit', @@ -438,6 +448,7 @@ aktualisieren wollen?', 'Due Date' => 'Fälligkeitsdatum', 'Due Date missing!' => 'Fälligkeitsdatum fehlt!', 'Duedate +Days' => 'Fällikeitsdatum +Tage', + 'Dunning' => 'Mahnung', 'Dunning Amount' => 'gemahnter Betrag', 'Dunning Date' => 'Mahndatum', 'Dunning Date from' => 'Mahnungen von', @@ -469,6 +480,8 @@ aktualisieren wollen?', 'EUR' => 'E/Ü-Rechnung', 'Edit' => 'Bearbeiten', 'Edit ' => 'Bearbeiten', + 'Edit Access Rights' => 'Zugriffsrechte bearbeiten', + 'Edit Access Rights for Follow-Ups' => 'Zugriffsrechte für Wiedervorlagen bearbeiten', 'Edit Account' => 'Kontodaten bearbeiten', 'Edit Accounting Group' => 'Buchungsgruppe bearbeiten', 'Edit Accounts Payables Transaction' => 'Kreditorenbuchung bearbeiten', @@ -481,6 +494,8 @@ aktualisieren wollen?', 'Edit Department' => 'Abteilung bearbeiten', 'Edit Dunning' => 'Mahnungen konfigurieren', 'Edit Dunning Process Config' => 'Mahnwesenkonfiguration bearbeiten', + 'Edit Follow-Up' => 'Wiedervorlage bearbeiten', + 'Edit Follow-Up for #1' => 'Wiedervorlage für #1 bearbeiten', 'Edit General Ledger Transaction' => 'Buchung im Hauptbuch bearbeiten', 'Edit Group' => 'Warengruppe editieren', 'Edit Language' => 'Sprache bearbeiten', @@ -509,6 +524,7 @@ aktualisieren wollen?', 'Edit group ' => 'Gruppe bearbeiten', 'Edit group membership' => 'Gruppenmitgliedschaften bearbeiten', 'Edit groups' => 'Gruppen bearbeiten', + 'Edit note' => 'Notiz bearbeiten', 'Edit rights' => 'Rechte bearbeiten', 'Edit templates' => 'Vorlage bearbeiten', 'Edit the membership of all users in all groups:' => 'Bearbeiten der Mitgliedschaft aller Benutzer in allen Gruppen:', @@ -538,6 +554,7 @@ aktualisieren wollen?', 'Exchangerate missing!' => 'Es fehlt der Wechselkurs!', 'Existing Buchungsgruppen' => 'Existierende Buchungsgruppen', 'Existing Datasets' => 'existierende Datenbanken', + 'Existing pending follow-ups for this item' => 'Noch nicht erledigte Wiedervorlagen für dieses Dokument', 'Expense' => 'Aufwandskonto', 'Expense Account' => 'Aufwandskonto', 'Expense accno' => 'Aufwandskonto', @@ -562,7 +579,17 @@ aktualisieren wollen?', 'Fee' => 'Gebühr', 'File' => 'Datei', 'Files created by Lx-Office\'s "Backup Dataset" function are such files.' => 'Dateien, die von Lx-Office\' Funktion "Datenbank sichern" erstellt wurden, erfüllen diese Kriterien.', + 'Finish' => 'Abschließen', 'Folgekonto' => 'Folgekonto', + 'Follow-Up' => 'Wiedervorlage', + 'Follow-Up Date' => 'Wiedervorlagedatum', + 'Follow-Up On' => 'Wiedervorlage am', + 'Follow-Up done' => 'Wiedervorlage erledigt', + 'Follow-Up for' => 'Wiedervorlage für', + 'Follow-Up for user' => 'Wiedervorlage für Benutzer', + 'Follow-Up saved.' => 'Wiedervorlage gespeichert.', + 'Follow-Ups' => 'Wiedervorlagen', + 'Follow-up for' => 'Wiedervorlage für', 'Font size' => 'Schriftgröße', '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', @@ -644,6 +671,7 @@ aktualisieren wollen?', 'Introduction of Buchungsgruppen' => 'Einführung von Buchungsgruppen', 'Introduction of units' => 'Einführung von Einheiten', 'Inv. Duedate' => 'Rg. Fälligkeit', + 'Invalid follow-up ID.' => 'Ungültige Wiedervorlage-ID.', 'Invdate' => 'Rechnungsdatum', 'Invdate from' => 'Rechnungen von', 'Inventory' => 'Inventar', @@ -840,6 +868,7 @@ aktualisieren wollen?', 'None' => 'Kein', 'Not Discountable' => 'Nicht rabattierfähig', 'Not delivered' => 'Nicht geliefert', + 'Not done yet' => 'Noch nicht fertig', 'Not obsolete' => 'Gültig', 'Note' => 'Hinweis', 'Notes' => 'Bemerkungen', @@ -864,6 +893,7 @@ aktualisieren wollen?', 'On Hand' => 'Auf Lager', 'On Order' => 'Ist bestellt', 'One or more Perl modules missing' => 'Ein oder mehr Perl-Module fehlen', + 'Only due follow-ups' => 'Nur fällige Wiedervorlagen', 'Open' => 'Offen', 'OpenDocument/OASIS' => 'OpenDocument/OASIS', 'Openings' => 'Öffnungszeiten', @@ -878,6 +908,7 @@ aktualisieren wollen?', 'Ordered' => 'Vom Kunde bestellt', 'Orientation' => 'Seitenformat', 'Orphaned' => 'Nie benutzt', + 'Other users\' follow-ups' => 'Wiedervorlagen anderer Benutzer', 'Other values are ignored.' => 'Andere Eingaben werden ignoriert.', 'Others' => 'Andere', 'Otherwise all users will only have access to their own settings.' => 'Andernfalls haben alle Benutzer nur Zugriff auf ihre Benutzereinstellungen.', @@ -885,6 +916,7 @@ aktualisieren wollen?', 'Out of balance!' => 'Summen stimmen nicht berein!', 'Output Number Format' => 'Zahlenformat (Ausgabe)', 'Outputformat' => 'Ausgabeformat', + 'Overdue sales quotations' => 'Überfällige Angebote', 'Own Product' => 'eigenes Produkt', 'PAYMENT POSTED' => 'Rechung gebucht', 'PDF' => 'PDF', @@ -983,6 +1015,7 @@ aktualisieren wollen?', 'Prior to Lx-Office v2.4.0 the user had to chose the accounts for each part and service.' => 'Vor Lx-Office 2.4.0 musste der Benutzer die Konten bei jeder Ware und jeder Dienstleistung einzeln auswählen.', 'Private E-mail' => 'Private eMail', 'Private Phone' => 'Privates Tel.', + 'Productivity' => 'Produktivität', 'Profit Center' => 'Erfolgsbereich', 'Proforma Invoice' => 'Proformarechnung', 'Programm' => 'Programm', @@ -1045,6 +1078,7 @@ aktualisieren wollen?', 'Reqdate' => 'Lieferdatum', 'Request for Quotation' => 'Anfrage', 'Request for Quotations' => 'Anfragen', + 'Request quotation' => 'Preisanfrage', 'Required by' => 'Lieferdatum', 'Restore Dataset' => 'Datenbank wiederherstellen', 'Revenue' => 'Erlöskonto', @@ -1061,6 +1095,7 @@ aktualisieren wollen?', 'Sales Order' => 'Kundenauftrag', 'Sales Orders' => 'Aufträge', 'Sales invoice number' => 'Ausgangsrechnungsnummer', + 'Sales quotation' => 'Angebot', 'Salesman' => 'Verkäufer/in', 'Salesperson' => 'Verkäufer', 'Same as the quote character' => 'Wie Anführungszeichen', @@ -1124,6 +1159,7 @@ aktualisieren wollen?', 'Shopartikel' => 'Shopartikel', 'Short' => 'Knapp', 'Show' => 'Zeigen', + 'Show TODO list' => 'Aufgabenliste anzeigen', 'Show by default' => 'Standardmäßig anzeigen', 'Show details' => 'Details anzeigen', 'Show old dunnings' => 'Alte Mahnungen anzeigen', @@ -1157,6 +1193,7 @@ aktualisieren wollen?', 'Subtotal' => 'Zwischensumme', 'Superuser name' => 'Datenbankadministrator', 'System' => 'System', + 'TODO list' => 'Aufgabenliste', 'TOP100' => 'Top 100', 'Tax' => 'Steuer', 'Tax Consultant' => 'Steuerberater/-in', @@ -1203,6 +1240,7 @@ aktualisieren wollen?', 'Text, text field and number variables: The default value will be used as-is.' => 'Textzeilen, Textfelder und Zahlenvariablen: Der Standardwert wird so wie er ist übernommen.', '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 LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'The access rights have been saved.' => 'Die Zugriffsrechte wurden gespeichert.', 'The authentication configuration file "config/authentication.pl" does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.' => 'Die Konfigurationsdatei für die Authentifizierung "config/authentication.pl" wurde nicht gefunden. Diese Lx-Office-Installation wurde vermutlich noch nicht vollständig aktualisiert oder eingerichtet. Bitte wenden Sie sich an Ihren Administrator.', 'The authentication database is not reachable at the moment. Either it hasn\'t been set up yet or the database server might be down. Please contact your administrator.' => 'Die Authentifizierungsdatenbank kann momentan nicht erreicht werden. Entweder wurde sie noch nicht eingerichtet, oder der Datenbankserver antwortet nicht. Bitte wenden Sie sich an Ihren Administrator.', 'The available options depend on the varibale type:' => 'Die verfügbaren Optionen hängen vom Variablentypen ab:', @@ -1238,6 +1276,7 @@ aktualisieren wollen?', 'The email address is missing.' => 'Die Emailadresse fehlt.', 'The factor is missing in row %d.' => 'Der Faktor fehlt in Zeile %d.', 'The factor is missing.' => 'Der Faktor fehlt.', + 'The follow-up date is missing.' => 'Das Wiedervorlagedatum fehlt.', 'The following Buchungsgruppen have already been created:' => 'Die folgenden Buchungsgruppen wurden bereits angelegt:', 'The following Datasets need to be updated' => 'Folgende Datenbanken müssen aktualisiert werden', 'The following drafts have been saved and can be loaded.' => 'Die folgenden Entwürfe wurden gespeichert und können geladen werden.', @@ -1267,6 +1306,7 @@ aktualisieren wollen?', 'The restoration process has started. Here\'s the output of the "pg_restore" command:' => 'Der Wiederherstellungsprozess wurde gestartet. Hier ist die Ausgabe des "pg_restore"-Programmes:', 'The restoration process is complete. Please review "pg_restore"\'s output to find out if the restoration was successful.' => 'Die Wiederherstellung ist abgeschlossen. Bitte sehen Sie sich die Ausgabe von "pg_restore" an, um festzustellen, ob die Wiederherstellung erfolgreich war.', 'The second way is to use Perl\'s CPAN module and let it download and install the module for you.' => 'Die zweite Variante besteht darin, Perls CPAN-Modul zu benutzen und es das Modul für Sie installieren zu lassen.', + 'The subject is missing.' => 'Der Betreff fehlt.', 'The tables for user management and authentication do not exist. They will be created in the next step in the following database:' => 'Die Tabellen zum Speichern der Benutzerdaten und zur Benutzerauthentifizierung wurden nicht gefunden. Sie werden in der folgenden Datenbank angelegt:', 'The tabulator character' => 'Das Tabulator-Symbol', 'The third way is to download the module from the above mentioned URL and to install the module manually following the installations instructions contained in the source archive.' => 'Die dritte Variante besteht darin, das Paket von der oben genannten URL herunterzuladen und es manuell zu installieren. Beachten Sie dabei die im Paket enthaltenen Installationsanweisungen.', @@ -1279,7 +1319,9 @@ aktualisieren wollen?', 'The user is a member in the following group(s):' => 'Der Benutzer ist Mitglied in den folgenden Gruppen:', 'The user migration process is complete.' => 'Der Prozess der Benutzerdatenmigration ist abgeschlossen.', 'The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present' => 'Der Variablenname darf nur aus Zeichen (keine Umlaute), Ziffern und Unterstrichen bestehen. Er muss mit einem Buchstaben beginnen. Beispiel: weihnachtsgruss_verschicken', + 'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', 'There are four tax zones.' => 'Es gibt vier Steuerzonen.', + 'There are no items on your TODO list at the moment.' => 'Ihre Aufgabenliste enthält momentan keine Einträge.', 'There are still entries in the database for which no unit has been assigned.' => 'Es gibt noch Einträge in der Datenbank, für die keine Einheit zugeordnet ist.', 'There are usually three ways to install Perl modules.' => 'Es gibt normalerweise drei Arten, ein Perlmodul zu installieren.', 'There is nothing to do in this step.' => 'In diesem Schritt gibt es nichts mehr zu tun.', @@ -1335,6 +1377,7 @@ aktualisieren wollen?', 'UStVa' => 'UStVa', 'UStVa Einstellungen' => 'UStVa Einstellungen', 'Unbalanced Ledger' => 'Bilanzfehler', + 'Unfinished follow-ups' => 'Nicht erledigte Wiedervorlagen', 'Unit' => 'Einheit', 'Unit of measure' => 'Maßeinheit', 'Units' => 'Einheiten', @@ -1417,9 +1460,11 @@ aktualisieren wollen?', 'You have to chose which unit to save for each of them.' => 'Sie müssen für jeden Artikel die neue Einheit auswählen.', 'You have to create at least one group, grant it access to Lx-Office\'s functions and assign users to it.' => 'Sie müssen mindestens eine Benutzergruppe anlegen, ihr Zugriff auf die verschiedenen Funktionsbereiche von Lx-Office gewähren und Benutzer dieser Gruppe zuordnen.', '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 chose a user.' => 'Sie müssen einen Benutzer auswählen.', 'You will now be forwarded to the administration panel.' => 'Sie werden nun zum Administrationsbereich weitergeleitet.', 'You\'re not editing a file.' => 'Sie bearbeiten momentan keine Datei.', 'You\'ve already chosen the following limitations:' => 'Sie haben bereits die folgenden Einschränkungen vorgenommen:', + 'Your TODO list' => 'Ihre Aufgabenliste', 'Zeitpunkt' => 'Zeitpunkt', 'Zeitraum' => 'Zeitraum', 'Zero amount posting!' => 'Buchung ohne Wert', @@ -1462,6 +1507,8 @@ aktualisieren wollen?', 'eMail?' => 'eMail?', 'ea' => 'St.', 'emailed to' => 'gemailt an', + 'follow_up_list' => 'wiedervorlageliste', + 'for' => 'für', 'for Period' => 'für den Zeitraum', 'from (time)' => 'von', 'general_ledger_list' => 'buchungsjournal', diff --git a/locale/de/ap b/locale/de/ap index c6877f3ef..00fc68c85 100644 --- a/locale/de/ap +++ b/locale/de/ap @@ -1,9 +1,11 @@ $self->{texts} = { 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AP Transaction (abbreviation)' => 'K', 'AP Transactions' => 'Kreditorenbuchungen', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Account' => 'Konto', 'Add Accounts Payables Transaction' => 'Kreditorenbuchung erfassen', 'Address' => 'Adresse', @@ -55,6 +57,7 @@ $self->{texts} = { 'Credit Limit' => 'Kreditlimit', 'Credit Note' => 'Gutschrift', 'Currency' => 'Währung', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer details' => 'Kundendetails', 'Customer not on file or locked!' => 'Dieser Kunde existiert nicht oder ist gesperrt.', @@ -76,6 +79,7 @@ $self->{texts} = { 'Draft saved.' => 'Entwurf gespeichert.', 'Due Date' => 'Fälligkeitsdatum', 'Due Date missing!' => 'Fälligkeitsdatum fehlt!', + 'Dunning' => 'Mahnung', 'ELSE' => 'Zusatz', 'Edit Accounts Payables Transaction' => 'Kreditorenbuchung bearbeiten', 'Employee' => 'Bearbeiter', @@ -89,7 +93,9 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'File' => 'Datei', + 'Follow-Up' => 'Wiedervorlage', 'From' => 'Von', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'History' => 'Historie', 'ID' => 'Buchungsnummer', @@ -166,9 +172,13 @@ $self->{texts} = { 'Remaining' => 'Rest', 'Remove draft when posting' => 'Entwurf beim Buchen löschen', 'Reports' => 'Berichte', + 'Request quotation' => 'Preisanfrage', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Salesperson' => 'Verkäufer', 'Save draft' => 'Entwurf speichern', 'Select a Customer' => 'Endkunde auswählen', @@ -197,6 +207,7 @@ $self->{texts} = { 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', 'The list has been printed.' => 'Die Liste wurde ausgedruckt.', + 'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', 'To (email)' => 'An', 'Total' => 'Summe', 'Transaction %d cancelled.' => 'Buchung %d erfolgreich storniert.', @@ -214,6 +225,7 @@ $self->{texts} = { 'Value' => 'Wert', 'Variable' => 'Variable', 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor details' => 'Lieferantendetails', 'Vendor missing!' => 'Lieferant fehlt!', 'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', diff --git a/locale/de/ar b/locale/de/ar index c4b7b963c..a933ee2e4 100644 --- a/locale/de/ar +++ b/locale/de/ar @@ -1,7 +1,9 @@ $self->{texts} = { 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'AR Transaction (abbreviation)' => 'D', 'AR Transactions' => 'Debitorenbuchungen', 'Account' => 'Konto', @@ -80,6 +82,7 @@ $self->{texts} = { 'Draft saved.' => 'Entwurf gespeichert.', 'Due Date' => 'Fälligkeitsdatum', 'Due Date missing!' => 'Fälligkeitsdatum fehlt!', + 'Dunning' => 'Mahnung', 'ELSE' => 'Zusatz', 'Edit Accounts Receivables Transaction' => 'Debitorenbuchung bearbeiten', 'Enter longdescription' => 'Langtext eingeben', @@ -94,7 +97,9 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'File' => 'Datei', + 'Follow-Up' => 'Wiedervorlage', 'From' => 'Von', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'History' => 'Historie', 'ID' => 'Buchungsnummer', @@ -172,9 +177,13 @@ $self->{texts} = { 'Remaining' => 'Rest', 'Remove draft when posting' => 'Entwurf beim Buchen löschen', 'Reports' => 'Berichte', + 'Request quotation' => 'Preisanfrage', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Salesperson' => 'Verkäufer', 'Save draft' => 'Entwurf speichern', 'Select a Customer' => 'Endkunde auswählen', @@ -206,6 +215,7 @@ $self->{texts} = { 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', 'The list has been printed.' => 'Die Liste wurde ausgedruckt.', + 'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', 'To (email)' => 'An', 'Total' => 'Summe', 'Transaction %d cancelled.' => 'Buchung %d erfolgreich storniert.', @@ -222,6 +232,8 @@ $self->{texts} = { 'Use As Template' => 'Als Vorlage verwenden', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor details' => 'Lieferantendetails', 'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', diff --git a/locale/de/ct b/locale/de/ct index bc7e0a12b..fc9b464ce 100644 --- a/locale/de/ct +++ b/locale/de/ct @@ -1,7 +1,9 @@ $self->{texts} = { 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Add Customer' => 'Kunde erfassen', 'Add Vendor' => 'Lieferant erfassen', 'Address' => 'Adresse', @@ -37,6 +39,7 @@ $self->{texts} = { 'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', 'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', 'Credit Note' => 'Gutschrift', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer deleted!' => 'Kunde gelöscht!', 'Customer details' => 'Kundendetails', @@ -49,6 +52,7 @@ $self->{texts} = { 'Date' => 'Datum', 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', 'Directory' => 'Verzeichnis', + 'Dunning' => 'Mahnung', 'E-mail' => 'eMail', 'ELSE' => 'Zusatz', 'Edit Customer' => 'Kunde editieren', @@ -57,6 +61,7 @@ $self->{texts} = { 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', 'Fax' => 'Fax', 'File' => 'Datei', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'History' => 'Historie', 'ID' => 'Buchungsnummer', @@ -101,11 +106,14 @@ $self->{texts} = { 'Receipt, payment, reconciliation' => 'Zahlungseingang, Zahlungsausgang, Kontenabgleich', 'Reports' => 'Berichte', 'Request for Quotation' => 'Anfrage', + 'Request quotation' => 'Preisanfrage', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', 'SIC' => 'SIC', + 'Sales Invoice' => 'Rechnung', 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Select a Customer' => 'Endkunde auswählen', 'Select a customer' => 'Einen Kunden auswählen', 'Select a vendor' => 'Einen Lieferanten auswählen', @@ -132,6 +140,8 @@ $self->{texts} = { 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor Number' => 'Lieferantennummer', 'Vendor deleted!' => 'Lieferant gelöscht!', 'Vendor details' => 'Lieferantendetails', diff --git a/locale/de/dn b/locale/de/dn index 2db8e023f..52b9c5429 100644 --- a/locale/de/dn +++ b/locale/de/dn @@ -3,7 +3,9 @@ $self->{texts} = { '*/' => '*/', 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Add Purchase Order' => 'Lieferantenauftrag erfassen', 'Add Quotation' => 'Angebot erfassen', 'Add Request for Quotation' => 'Anfrage erfassen', @@ -53,6 +55,7 @@ $self->{texts} = { 'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', 'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', 'Credit Note' => 'Gutschrift', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer details' => 'Kundendetails', 'Customername' => 'Kundenname', @@ -68,6 +71,7 @@ $self->{texts} = { 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', 'Directory' => 'Verzeichnis', 'Discount' => 'Rabatt', + 'Dunning' => 'Mahnung', 'Dunning Date' => 'Mahndatum', 'Dunning Description missing in row ' => 'Mahnstufenbeschreibung fehlt in Zeile ', 'Dunning Duedate' => 'Zahlbar bis', @@ -90,6 +94,7 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'File' => 'Datei', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Group' => 'Warengruppe', 'History' => 'Historie', @@ -179,10 +184,14 @@ $self->{texts} = { 'Reports' => 'Berichte', 'Reqdate' => 'Lieferdatum', 'Request for Quotation' => 'Anfrage', + 'Request quotation' => 'Preisanfrage', 'Required by' => 'Lieferdatum', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Screen' => 'Bildschirm', 'Search Dunning' => 'Mahnung suchen', 'Select a Customer' => 'Endkunde auswählen', @@ -223,6 +232,8 @@ $self->{texts} = { 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor Number' => 'Lieferantennummer', 'Vendor details' => 'Lieferantendetails', 'Yes' => 'Ja', diff --git a/locale/de/fu b/locale/de/fu new file mode 100644 index 000000000..fecb45ff7 --- /dev/null +++ b/locale/de/fu @@ -0,0 +1,172 @@ +$self->{texts} = { + 'ADDED' => 'Hinzugefügt', + 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', + 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', + 'Add Follow-Up' => 'Wiedervorlage erstellen', + 'Add Follow-Up for #1' => 'Wiedervorlage für #1 erstellen', + 'Advance turnover tax return' => 'Umsatzsteuervoranmeldung', + 'All reports' => 'Alle Berichte (Kontenübersicht, Saldenbilanz, GuV, BWA, Bilanz, Projektbuchungen)', + 'Bcc' => 'Bcc', + 'Bin List' => 'Lagerliste', + 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Die Anmeldung am LDAP-Server als "#1" schlug fehl. Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'Body' => 'Text', + 'CANCELED' => 'Storniert', + 'CSV export -- options' => 'CSV-Export -- Optionen', + 'Cc' => 'Cc', + 'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Verändern der Lx-Office-Installationseinstellungen (Menüpunkte unterhalb von \'System\')', + 'Confirmation' => 'Auftragsbestätigung', + 'Could not spawn html2ps or GhostScript.' => 'html2ps oder GhostScript konnte nicht gestartet werden.', + 'Could not spawn the printer command.' => 'Die Druckanwendung konnte nicht gestartet werden.', + 'Could not write the html2ps config file.' => 'Die temporäre html2ps-Konfigurationsdatei konnte nicht geschrieben werden.', + 'Could not write the temporary HTML file.' => 'Eine temporäre HTML-Datei konnte nicht geschrieben werden.', + 'Create and edit RFQs' => 'Lieferantenanfragen erfassen und bearbeiten', + 'Create and edit customers and vendors' => 'Kunden und Lieferanten erfassen und bearbeiten', + 'Create and edit dunnings' => 'Mahnungen erfassen und bearbeiten', + 'Create and edit invoices and credit notes' => 'Rechnungen und Gutschriften erfassen und bearbeiten', + 'Create and edit parts, services, assemblies' => 'Artikel, Dienstleistungen, Erzeugnisse erfassen und bearbeiten', + 'Create and edit projects' => 'Projekte erfassen und bearbeiten', + 'Create and edit purchase delivery orders' => 'Lieferscheine von Lieferanten erfassen und bearbeiten', + 'Create and edit purchase orders' => 'Lieferantenaufträge erfassen und bearbeiten', + 'Create and edit sales delivery orders' => 'Lieferscheine für Kunden erfassen und bearbeiten', + 'Create and edit sales orders' => 'Auftragsbestätigungen erfassen und bearbeiten', + 'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', + 'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', + 'Created by' => 'Erstellt von', + 'Created for' => 'Erstellt für', + 'Created on' => 'Erstellt am', + 'Credit Note' => 'Gutschrift', + 'Customer' => 'Kunde', + 'DATEV Export' => 'DATEV-Export', + 'DELETED' => 'Gelöscht', + 'DUNNING STARTED' => 'Mahnprozess gestartet', + 'Dataset upgrade' => 'Datenbankaktualisierung', + 'Date' => 'Datum', + 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', + 'Directory' => 'Verzeichnis', + 'Done' => 'Fertig', + 'Dunning' => 'Mahnung', + 'ELSE' => 'Zusatz', + 'Edit Access Rights for Follow-Ups' => 'Zugriffsrechte für Wiedervorlagen bearbeiten', + 'Edit Follow-Up' => 'Wiedervorlage bearbeiten', + 'Edit Follow-Up for #1' => 'Wiedervorlage für #1 bearbeiten', + 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', + 'File' => 'Datei', + 'Follow-Up Date' => 'Wiedervorlagedatum', + 'Follow-Up saved.' => 'Wiedervorlage gespeichert.', + 'Follow-Ups' => 'Wiedervorlagen', + 'Follow-up for' => 'Wiedervorlage für', + 'GL Transaction' => 'Dialogbuchung', + 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', + 'Invalid follow-up ID.' => 'Ungültige Wiedervorlage-ID.', + 'Invoice' => 'Rechnung', + 'MAILED' => 'Gesendet', + 'Manage license keys' => 'Lizenzschlüssel verwalten', + 'Master Data' => 'Stammdaten', + 'May set the BCC field when sending emails' => 'Beim Verschicken von Emails das Feld \'BCC\' setzen', + 'Message' => 'Nachricht', + 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', + 'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', + 'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', + 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', + 'No' => 'Nein', + 'No action defined.' => 'Keine Aktion definiert.', + 'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.', + 'Not done yet' => 'Noch nicht fertig', + 'Only due follow-ups' => 'Nur fällige Wiedervorlagen', + 'Other users\' follow-ups' => 'Wiedervorlagen anderer Benutzer', + 'Others' => 'Andere', + 'PAYMENT POSTED' => 'Rechung gebucht', + 'PDF export -- options' => 'PDF-Export -- Optionen', + 'POSTED' => 'Gebucht', + 'POSTED AS NEW' => 'Als neu gebucht', + 'PRINTED' => 'Gedruckt', + 'Packing List' => 'Lieferschein', + 'Pick List' => 'Sammelliste', + 'Proforma Invoice' => 'Proformarechnung', + 'Purchase Order' => 'Lieferantenauftrag', + 'Quotation' => 'Angebot', + 'RFQ' => 'Anfrage', + 'Receipt, payment, reconciliation' => 'Zahlungseingang, Zahlungsausgang, Kontenabgleich', + 'Reference' => 'Referenz', + 'Reports' => 'Berichte', + 'Request quotation' => 'Preisanfrage', + 'SAVED' => 'Gespeichert', + 'SAVED FOR DUNNING' => 'Gespeichert', + 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', + 'Storno Invoice' => 'Stornorechnung', + 'Storno Packing List' => 'Stornolieferschein', + 'Subject' => 'Betreff', + '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 LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'The access rights have been saved.' => 'Die Zugriffsrechte wurden gespeichert.', + 'The config file "config/authentication.pl" contained invalid Perl code:' => 'Die Konfigurationsdatei "config/authentication.pl" enthielt ungütigen Perl-Code:', + 'The config file "config/authentication.pl" was not found.' => 'Die Konfigurationsdatei "config/authentication.pl" wurde nicht gefunden.', + 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'Die Verbindung zum LDAP-Server kann nicht verschlüsselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:', + 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', + 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', + 'The follow-up date is missing.' => 'Das Wiedervorlagedatum fehlt.', + 'The list has been printed.' => 'Die Liste wurde ausgedruckt.', + 'The subject is missing.' => 'Der Betreff fehlt.', + 'To (email)' => 'An', + 'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen', + 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', + 'Yes' => 'Ja', + 'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', + 'You must chose a user.' => 'Sie müssen einen Benutzer auswählen.', + '[email]' => '[email]', + 'bin_list' => 'Lagerliste', + 'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Das Schlüsselwort "DB_config" fehlt.', + 'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Der Schlüssel "LDAP_config" fehlt.', + 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Fehlende Parameter in "DB_config". Benötigte Parameter sind "host", "db" und "user".', + 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Fehlende Parameter in "LDAP_config". Benötigt werden "host", "attribute" und "base_dn".', + 'follow_up_list' => 'wiedervorlageliste', + 'invoice' => 'Rechnung', + 'packing_list' => 'Versandliste', + 'pick_list' => 'Entnahmeliste', + 'proforma' => 'Proforma', + 'purchase_order' => 'Auftrag', + 'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.', + 'report_generator_nextsub is not defined.' => 'report_generator_nextsub ist nicht definiert.', + 'request_quotation' => 'Angebotsanforderung', + 'sales_order' => 'Kundenauftrag', + 'sales_quotation' => 'Verkaufsangebot', +}; + +$self->{subs} = { + '_collect_links' => '_collect_links', + 'add' => 'add', + 'continue' => 'continue', + 'delete' => 'delete', + 'dispatcher' => 'dispatcher', + 'display_form' => 'display_form', + 'edit' => 'edit', + 'edit_access_rights' => 'edit_access_rights', + 'finish' => 'finish', + 'report' => 'report', + 'report_for_todo_list' => 'report_for_todo_list', + 'report_generator_back' => 'report_generator_back', + 'report_generator_dispatcher' => 'report_generator_dispatcher', + 'report_generator_do' => 'report_generator_do', + 'report_generator_export_as_csv' => 'report_generator_export_as_csv', + 'report_generator_export_as_pdf' => 'report_generator_export_as_pdf', + 'save' => 'save', + 'save_access_rights' => 'save_access_rights', + 'save_follow_up' => 'save_follow_up', + 'search' => 'search', + 'update' => 'update', + 'abbrechen' => 'cancel', + 'weiter' => 'continue', + 'löschen' => 'delete', + 'abschließen' => 'finish', + 'speichern' => 'save', +}; + +1; diff --git a/locale/de/gl b/locale/de/gl index 5ecf7a9f1..d31f7fe65 100644 --- a/locale/de/gl +++ b/locale/de/gl @@ -1,7 +1,9 @@ $self->{texts} = { 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Account' => 'Konto', 'Add General Ledger Transaction' => 'Dialogbuchen', 'Address' => 'Adresse', @@ -59,6 +61,7 @@ $self->{texts} = { 'Credit Note' => 'Gutschrift', 'Credit Tax' => 'Umsatzsteuer', 'Credit Tax Account' => 'Umsatzsteuerkonto', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer details' => 'Kundendetails', 'DATEV Export' => 'DATEV-Export', @@ -79,6 +82,7 @@ $self->{texts} = { 'Description' => 'Beschreibung', 'Description missing!' => 'Beschreibung fehlt.', 'Directory' => 'Verzeichnis', + 'Dunning' => 'Mahnung', 'ELSE' => 'Zusatz', 'Edit General Ledger Transaction' => 'Buchung im Hauptbuch bearbeiten', 'Empty transaction!' => 'Buchung ist leer!', @@ -90,7 +94,9 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'File' => 'Datei', + 'Follow-Up' => 'Wiedervorlage', 'From' => 'Von', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'History' => 'Historie', 'ID' => 'Buchungsnummer', @@ -159,10 +165,14 @@ $self->{texts} = { 'Reference' => 'Referenz', 'Reference missing!' => 'Referenz fehlt!', 'Reports' => 'Berichte', + 'Request quotation' => 'Preisanfrage', 'Revenue' => 'Erlöskonto', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Select a Customer' => 'Endkunde auswählen', 'Select a customer' => 'Einen Kunden auswählen', 'Select a vendor' => 'Einen Lieferanten auswählen', @@ -186,6 +196,7 @@ $self->{texts} = { 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', 'The list has been printed.' => 'Die Liste wurde ausgedruckt.', + 'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', 'To (email)' => 'An', 'To (time)' => 'Bis', 'Transaction %d cancelled.' => 'Buchung %d erfolgreich storniert.', @@ -200,6 +211,8 @@ $self->{texts} = { 'Update' => 'Erneuern', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor details' => 'Lieferantendetails', 'Yes' => 'Ja', 'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', diff --git a/locale/de/ic b/locale/de/ic index 15515f2d7..02970729f 100644 --- a/locale/de/ic +++ b/locale/de/ic @@ -4,7 +4,9 @@ $self->{texts} = { '*/' => '*/', 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Accounting Menu' => 'Kontoverwaltung', 'Active' => 'Aktiv', 'Add ' => 'Hinzufügen', @@ -62,6 +64,7 @@ $self->{texts} = { 'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', 'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', 'Credit Note' => 'Gutschrift', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer details' => 'Kundendetails', 'DATEV Export' => 'DATEV-Export', @@ -79,6 +82,7 @@ $self->{texts} = { 'Directory' => 'Verzeichnis', 'Discount' => 'Rabatt', 'Drawing' => 'Zeichnung', + 'Dunning' => 'Mahnung', 'E-mail' => 'eMail', 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'EAN' => 'EAN', @@ -97,6 +101,7 @@ $self->{texts} = { 'February' => 'Februar', 'File' => 'Datei', 'From' => 'Von', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Group' => 'Warengruppe', 'History' => 'Historie', @@ -211,10 +216,14 @@ $self->{texts} = { 'Reports' => 'Berichte', 'Reqdate' => 'Lieferdatum', 'Request for Quotation' => 'Anfrage', + 'Request quotation' => 'Preisanfrage', 'Required by' => 'Lieferdatum', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Save' => 'Speichern', 'Save as new' => 'als neu speichern', 'Screen' => 'Bildschirm', @@ -267,6 +276,8 @@ $self->{texts} = { 'Updated' => 'Erneuert am', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor Number' => 'Lieferantennummer', 'Vendor details' => 'Lieferantendetails', 'Weight' => 'Gewicht', diff --git a/locale/de/io b/locale/de/io index 15a587970..3eccdec5d 100644 --- a/locale/de/io +++ b/locale/de/io @@ -3,7 +3,9 @@ $self->{texts} = { '*/' => '*/', 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Add Purchase Order' => 'Lieferantenauftrag erfassen', 'Add Quotation' => 'Angebot erfassen', 'Add Request for Quotation' => 'Anfrage erfassen', @@ -44,6 +46,7 @@ $self->{texts} = { 'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', 'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', 'Credit Note' => 'Gutschrift', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer details' => 'Kundendetails', 'DATEV Export' => 'DATEV-Export', @@ -58,6 +61,7 @@ $self->{texts} = { 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', 'Directory' => 'Verzeichnis', 'Discount' => 'Rabatt', + 'Dunning' => 'Mahnung', 'E-mail' => 'eMail', 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'EK' => 'EK', @@ -70,6 +74,7 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'File' => 'Datei', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Group' => 'Warengruppe', 'History' => 'Historie', @@ -151,10 +156,14 @@ $self->{texts} = { 'Reports' => 'Berichte', 'Reqdate' => 'Lieferdatum', 'Request for Quotation' => 'Anfrage', + 'Request quotation' => 'Preisanfrage', 'Required by' => 'Lieferdatum', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Screen' => 'Bildschirm', 'Select a Customer' => 'Endkunde auswählen', 'Select a customer' => 'Einen Kunden auswählen', @@ -189,6 +198,8 @@ $self->{texts} = { 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor Number' => 'Lieferantennummer', 'Vendor details' => 'Lieferantendetails', 'Yes' => 'Ja', diff --git a/locale/de/ir b/locale/de/ir index c16bf5d97..061754cc2 100644 --- a/locale/de/ir +++ b/locale/de/ir @@ -3,7 +3,9 @@ $self->{texts} = { '*/' => '*/', 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Account' => 'Konto', 'Add Purchase Order' => 'Lieferantenauftrag erfassen', 'Add Quotation' => 'Angebot erfassen', @@ -58,6 +60,7 @@ $self->{texts} = { 'Credit Limit' => 'Kreditlimit', 'Credit Note' => 'Gutschrift', 'Currency' => 'Währung', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer details' => 'Kundendetails', 'Customer not on file or locked!' => 'Dieser Kunde existiert nicht oder ist gesperrt.', @@ -79,6 +82,7 @@ $self->{texts} = { 'Discount' => 'Rabatt', 'Draft saved.' => 'Entwurf gespeichert.', 'Due Date' => 'Fälligkeitsdatum', + 'Dunning' => 'Mahnung', 'E-mail' => 'eMail', 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'EK' => 'EK', @@ -98,6 +102,8 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'File' => 'Datei', + 'Follow-Up' => 'Wiedervorlage', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Group' => 'Warengruppe', 'History' => 'Historie', @@ -200,10 +206,14 @@ $self->{texts} = { 'Reports' => 'Berichte', 'Reqdate' => 'Lieferdatum', 'Request for Quotation' => 'Anfrage', + 'Request quotation' => 'Preisanfrage', 'Required by' => 'Lieferdatum', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Save draft' => 'Entwurf speichern', 'Screen' => 'Bildschirm', 'Select a Customer' => 'Endkunde auswählen', @@ -239,6 +249,7 @@ $self->{texts} = { 'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:', 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', + 'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', 'To (email)' => 'An', 'Total' => 'Summe', 'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen', @@ -250,6 +261,7 @@ $self->{texts} = { 'Value' => 'Wert', 'Variable' => 'Variable', 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor Number' => 'Lieferantennummer', 'Vendor details' => 'Lieferantendetails', 'Vendor missing!' => 'Lieferant fehlt!', diff --git a/locale/de/is b/locale/de/is index 2a286c8b6..a64e8d7c2 100644 --- a/locale/de/is +++ b/locale/de/is @@ -3,7 +3,9 @@ $self->{texts} = { '*/' => '*/', 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Account' => 'Konto', 'Add Credit Note' => 'Gutschrift erfassen', 'Add Purchase Order' => 'Lieferantenauftrag erfassen', @@ -90,6 +92,7 @@ $self->{texts} = { 'Discount' => 'Rabatt', 'Draft saved.' => 'Entwurf gespeichert.', 'Due Date' => 'Fälligkeitsdatum', + 'Dunning' => 'Mahnung', 'Dunning Amount' => 'gemahnter Betrag', 'E-mail' => 'eMail', 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', @@ -114,6 +117,8 @@ $self->{texts} = { 'Feb' => 'Feb', 'February' => 'Februar', 'File' => 'Datei', + 'Follow-Up' => 'Wiedervorlage', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Group' => 'Warengruppe', 'History' => 'Historie', @@ -223,10 +228,14 @@ $self->{texts} = { 'Reports' => 'Berichte', 'Reqdate' => 'Lieferdatum', 'Request for Quotation' => 'Anfrage', + 'Request quotation' => 'Preisanfrage', 'Required by' => 'Lieferdatum', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales quotation' => 'Angebot', 'Salesman' => 'Verkäufer/in', 'Save draft' => 'Entwurf speichern', 'Screen' => 'Bildschirm', @@ -265,6 +274,7 @@ $self->{texts} = { 'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:', 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', + 'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', 'To (email)' => 'An', 'Total' => 'Summe', 'Trade Discount' => 'Rabatt', @@ -277,6 +287,8 @@ $self->{texts} = { 'Use As Template' => 'Als Vorlage verwenden', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor Number' => 'Lieferantennummer', 'Vendor details' => 'Lieferantendetails', 'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', diff --git a/locale/de/login b/locale/de/login index 3d5c47903..98fdbc38a 100644 --- a/locale/de/login +++ b/locale/de/login @@ -1,20 +1,62 @@ $self->{texts} = { + ' Date missing!' => ' Datum fehlt!', + ' missing!' => ' fehlt!', + '*/' => '*/', 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'About' => 'über', + 'Add Exchangerate' => 'Wechselkurs erfassen', + 'Add Follow-Up' => 'Wiedervorlage erstellen', + 'Add Follow-Up for #1' => 'Wiedervorlage für #1 erstellen', + 'Add Purchase Order' => 'Lieferantenauftrag erfassen', + 'Add Quotation' => 'Angebot erfassen', + 'Add Request for Quotation' => 'Anfrage erfassen', + 'Add Sales Invoice' => 'Rechnung erfassen', + 'Add Sales Order' => 'Auftrag erfassen', + 'Add Vendor Invoice' => 'Einkaufsrechnung erfassen', 'Address' => 'Adresse', 'Advance turnover tax return' => 'Umsatzsteuervoranmeldung', 'All reports' => 'Alle Berichte (Kontenübersicht, Saldenbilanz, GuV, BWA, Bilanz, Projektbuchungen)', + 'Amount' => 'Betrag', + 'Apr' => 'Apr', + 'April' => 'April', + 'Are you sure you want to delete Order Number' => 'Soll der Auftrag mit folgender Nummer wirklich gelöscht werden:', + 'Are you sure you want to delete Quotation Number' => 'Sind Sie sicher, dass Angebotnummer gelöscht werden soll?', + 'Attachment' => 'als Anhang', 'Attempt to call an undefined sub named \'%s\'' => 'Es wurde versucht, eine nicht definierte Unterfunktion namens \'%s\' aufzurufen.', + 'Aug' => 'Aug', + 'August' => 'August', 'Bcc' => 'Bcc', + 'Billing Address' => 'Rechnungsadresse', + 'Bin' => 'Lagerplatz', 'Bin List' => 'Lagerliste', 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Die Anmeldung am LDAP-Server als "#1" schlug fehl. Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'Bis' => 'bis', + 'Body' => 'Text', 'CANCELED' => 'Storniert', + 'CSV export -- options' => 'CSV-Export -- Optionen', + 'Cannot delete order!' => 'Auftrag kann nicht gelöscht werden!', + 'Cannot delete quotation!' => 'Angebot kann nicht gelöscht werden!', + 'Cannot save order!' => 'Auftrag kann nicht gespeichert werden!', + 'Cannot save quotation!' => 'Angebot kann nicht gespeichert werden!', 'Cc' => 'Cc', 'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Verändern der Lx-Office-Installationseinstellungen (Menüpunkte unterhalb von \'System\')', + 'City' => 'Stadt', + 'Closed' => 'Geschlossen', + 'Collective Orders only work for orders from one customer!' => 'Sammelaufträge funktionieren nur für Aufträge von einem Kunden!', + 'Company Name' => 'Firmenname', + 'Confirm!' => 'Bestätigen Sie!', 'Confirmation' => 'Auftragsbestätigung', 'Contact' => 'Kontakt', + 'Continue' => 'Weiter', + 'Could not spawn html2ps or GhostScript.' => 'html2ps oder GhostScript konnte nicht gestartet werden.', + 'Could not spawn the printer command.' => 'Die Druckanwendung konnte nicht gestartet werden.', + 'Could not write the html2ps config file.' => 'Die temporäre html2ps-Konfigurationsdatei konnte nicht geschrieben werden.', + 'Could not write the temporary HTML file.' => 'Eine temporäre HTML-Datei konnte nicht geschrieben werden.', + 'Country' => 'Land', 'Create and edit RFQs' => 'Lieferantenanfragen erfassen und bearbeiten', 'Create and edit customers and vendors' => 'Kunden und Lieferanten erfassen und bearbeiten', 'Create and edit dunnings' => 'Mahnungen erfassen und bearbeiten', @@ -27,30 +69,100 @@ $self->{texts} = { 'Create and edit sales orders' => 'Auftragsbestätigungen erfassen und bearbeiten', 'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', 'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', + 'Created by' => 'Erstellt von', + 'Created for' => 'Erstellt für', + 'Created on' => 'Erstellt am', + 'Credit Limit exceeded!!!' => 'Kreditlimit überschritten!', 'Credit Note' => 'Gutschrift', + 'Curr' => 'Währung', + 'Currency' => 'Währung', + 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer details' => 'Kundendetails', + 'Customer missing!' => 'Kundenname fehlt!', + 'Customer not on file or locked!' => 'Dieser Kunde existiert nicht oder ist gesperrt.', + 'Customer not on file!' => 'Kunde ist nicht in der Datenbank!', + 'Customer type' => 'Kundentyp', 'DATEV Export' => 'DATEV-Export', 'DELETED' => 'Gelöscht', 'DUNNING STARTED' => 'Mahnprozess gestartet', 'Dataset upgrade' => 'Datenbankaktualisierung', 'Date' => 'Datum', + 'Dec' => 'Dez', + 'December' => 'Dezember', + 'Delivered' => 'Geliefert', + 'Delivery Date' => 'Lieferdatum', + 'Department' => 'Abteilung', 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', + 'Description' => 'Beschreibung', 'Directory' => 'Verzeichnis', + 'Discount' => 'Rabatt', + 'Done' => 'Fertig', + 'Dunning' => 'Mahnung', + 'E-mail' => 'eMail', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', + 'EK' => 'EK', 'ELSE' => 'Zusatz', + 'Edit Access Rights for Follow-Ups' => 'Zugriffsrechte für Wiedervorlagen bearbeiten', + 'Edit Follow-Up' => 'Wiedervorlage bearbeiten', + 'Edit Follow-Up for #1' => 'Wiedervorlage für #1 bearbeiten', + 'Edit Purchase Order' => 'Lieferantenaufrag bearbeiten', + 'Edit Quotation' => 'Angebot bearbeiten', + 'Edit Request for Quotation' => 'Anfrage bearbeiten', + 'Edit Sales Order' => 'Auftrag bearbeiten', + 'Edit the purchase_order' => 'Bearbeiten des Lieferantenauftrags', + 'Edit the request_quotation' => 'Bearbeiten der Preisanfrage', + 'Edit the sales_order' => 'Bearbeiten des Auftrags', + 'Edit the sales_quotation' => 'Bearbeiten des Angebots', + 'Employee' => 'Bearbeiter', 'Enter longdescription' => 'Langtext eingeben', 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', + 'Ertrag' => 'Ertrag', + 'Ertrag prozentual' => 'Ertrag prozentual', + 'Exchangerate' => 'Wechselkurs', + 'Exchangerate missing!' => 'Es fehlt der Wechselkurs!', + 'Extended' => 'Gesamt', + 'Falsches Datumsformat!' => 'Falsches Datumsformat!', + 'Fax' => 'Fax', + 'Feb' => 'Feb', + 'February' => 'Februar', 'File' => 'Datei', + 'Follow-Up Date' => 'Wiedervorlagedatum', + 'Follow-Up saved.' => 'Wiedervorlage gespeichert.', + 'Follow-Ups' => 'Wiedervorlagen', + 'Follow-up for' => 'Wiedervorlage für', + 'From' => 'Von', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', + 'Group' => 'Warengruppe', 'History' => 'Historie', + 'ID' => 'Buchungsnummer', + 'In-line' => 'im Text', + 'Include in Report' => 'In Bericht aufnehmen', 'Incorrect Password!' => 'Ungültiges Passwort!', 'Incorrect username or password!' => 'Ungültiger Benutzername oder falsches Passwort!', + 'Invalid follow-up ID.' => 'Ungültige Wiedervorlage-ID.', 'Invoice' => 'Rechnung', + 'Invoice Date missing!' => 'Rechnungsdatum fehlt!', + 'Invoice Number missing!' => 'Rechnungsnummer fehlt!', + 'Jan' => 'Jan', + 'January' => 'Januar', + 'Jul' => 'Jul', + 'July' => 'Juli', + 'Jun' => 'Jun', + 'June' => 'Juni', + 'L' => 'L', + 'LP' => 'LP', + 'License' => 'Lizenz', 'MAILED' => 'Gesendet', 'Manage license keys' => 'Lizenzschlüssel verwalten', + 'Mar' => 'März', + 'March' => 'März', 'Mark as paid?' => 'Als bezahlt markieren?', 'Marked as paid' => 'Als bezahlt markiert', 'Master Data' => 'Stammdaten', + 'May' => 'Mai', + 'May ' => 'Mai', 'May set the BCC field when sending emails' => 'Beim Verschicken von Emails das Feld \'BCC\' setzen', 'Message' => 'Nachricht', 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', @@ -58,72 +170,179 @@ $self->{texts} = { 'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', 'Name' => 'Name', + 'No' => 'Nein', 'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', '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 action defined.' => 'Keine Aktion definiert.', 'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgewählt.', 'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.', 'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgewählt.', + 'No.' => 'Position', + 'Not delivered' => 'Nicht geliefert', + 'Not done yet' => 'Noch nicht fertig', + 'Notes' => 'Bemerkungen', + 'Nov' => 'Nov', + 'November' => 'November', + 'Number' => 'Nummer', + 'Number missing in Row' => 'Nummer fehlt in Zeile', + 'Oct' => 'Okt', + 'October' => 'Oktober', + 'Only due follow-ups' => 'Nur fällige Wiedervorlagen', + 'Open' => 'Offen', + 'OpenDocument/OASIS' => 'OpenDocument/OASIS', + 'Order' => 'Auftrag', + 'Order Date missing!' => 'Auftragsdatum fehlt!', + 'Order Number' => 'Auftragsnummer', + 'Order Number missing!' => 'Auftragsnummer fehlt!', + 'Order deleted!' => 'Auftrag gelöscht!', + 'Other users\' follow-ups' => 'Wiedervorlagen anderer Benutzer', 'Others' => 'Andere', 'PAYMENT POSTED' => 'Rechung gebucht', + 'PDF' => 'PDF', + 'PDF (OpenDocument/OASIS)' => 'PDF (OpenDocument/OASIS)', + 'PDF export -- options' => 'PDF-Export -- Optionen', 'POSTED' => 'Gebucht', 'POSTED AS NEW' => 'Als neu gebucht', 'PRINTED' => 'Gedruckt', 'Packing List' => 'Lieferschein', + 'Packing List Date missing!' => 'Datum für Verpackungsliste fehlt!', + 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', + 'Part Description' => 'Artikelbeschreibung', + 'Phone' => 'Telefon', 'Pick List' => 'Sammelliste', 'Please enter values' => 'Bitte Werte eingeben', + 'Postscript' => 'Postscript', + 'Price' => 'Preis', + 'Price Factor' => 'Preisfaktor', + 'Pricegroup' => 'Preisgruppe', + 'Printer' => 'Drucker', 'Proforma Invoice' => 'Proformarechnung', + 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', 'Purchase Order' => 'Lieferantenauftrag', + 'Purchase Orders' => 'Lieferantenaufträge', + 'Qty' => 'Menge', + 'Queue' => 'Warteschlange', 'Quotation' => 'Angebot', + 'Quotation Date missing!' => 'Angebotsdatum fehlt!', + 'Quotation Number' => 'Angebotsnummer', + 'Quotation Number missing!' => 'Angebotsnummer fehlt!', + 'Quotation deleted!' => 'Angebot wurde gelöscht.', + 'Quotations' => 'Angebote', 'RFQ' => 'Anfrage', + 'RFQ Number' => 'Anfragenummer', 'Receipt, payment, reconciliation' => 'Zahlungseingang, Zahlungsausgang, Kontenabgleich', + 'Reference' => 'Referenz', 'Reports' => 'Berichte', + 'Reqdate' => 'Lieferdatum', + 'Request for Quotation' => 'Anfrage', + 'Request for Quotations' => 'Anfragen', + 'Request quotation' => 'Preisanfrage', + 'Required by' => 'Lieferdatum', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales Orders' => 'Aufträge', + 'Sales quotation' => 'Angebot', + 'Salesman' => 'Verkäufer/in', + 'Screen' => 'Bildschirm', 'Select a Customer' => 'Endkunde auswählen', 'Select a customer' => 'Einen Kunden auswählen', 'Select a vendor' => 'Einen Lieferanten 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', + 'Select postscript or PDF!' => 'Postscript oder PDF auswählen!', + 'Sep' => 'Sep', + 'September' => 'September', + 'Serial No.' => 'Seriennummer', + 'Ship' => 'Lagerausgang', + 'Ship rcvd' => 'Lagereingang', + 'Ship to' => 'Lieferadresse', + 'Ship via' => 'Transportmittel', + 'Shipping Address' => 'Lieferadresse', 'Storno Invoice' => 'Stornorechnung', 'Storno Packing List' => 'Stornolieferschein', + 'Street' => 'Straße', 'Subject' => 'Betreff', + 'Subtotal' => 'Zwischensumme', + 'TODO list' => 'Aufgabenliste', + 'Tax' => 'Steuer', '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 LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'The access rights have been saved.' => 'Die Zugriffsrechte wurden gespeichert.', 'The config file "config/authentication.pl" contained invalid Perl code:' => 'Die Konfigurationsdatei "config/authentication.pl" enthielt ungütigen Perl-Code:', 'The config file "config/authentication.pl" was not found.' => 'Die Konfigurationsdatei "config/authentication.pl" wurde nicht gefunden.', 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'Die Verbindung zum LDAP-Server kann nicht verschlüsselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte überprüfen Sie die Angaben in config/authentication.pl.', 'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:', 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', + 'The follow-up date is missing.' => 'Das Wiedervorlagedatum fehlt.', + 'The list has been printed.' => 'Die Liste wurde ausgedruckt.', + 'The subject is missing.' => 'Der Betreff fehlt.', 'To (email)' => 'An', + 'Total' => 'Summe', + 'Transaction description' => 'Vorgangsbezeichnung', 'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen', 'Trying to call a sub without a name' => 'Es wurde versucht, eine Unterfunktion ohne Namen aufzurufen.', 'Unit' => 'Einheit', 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', 'Value' => 'Wert', 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', + 'Vendor Number' => 'Lieferantennummer', 'Vendor details' => 'Lieferantendetails', + 'Vendor missing!' => 'Lieferant fehlt!', + 'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', + 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', + 'Vendor type' => 'Lieferantentyp', 'Version' => 'Version', + 'Workflow purchase_order' => 'Workflow Lieferantenauftrag', + 'Workflow request_quotation' => 'Workflow Preisanfrage', + 'Workflow sales_order' => 'Workflow Auftrag', + 'Workflow sales_quotation' => 'Workflow Angebot', + 'Yes' => 'Ja', 'You are logged out!' => 'Auf Wiedersehen!', 'You did not enter a name!' => 'Sie haben keinen Namen eingegeben!', 'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', + 'You must chose a user.' => 'Sie müssen einen Benutzer auswählen.', + 'Zipcode' => 'PLZ', '[email]' => '[email]', 'bin_list' => 'Lagerliste', + 'button' => '?', 'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Das Schlüsselwort "DB_config" fehlt.', 'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Der Schlüssel "LDAP_config" fehlt.', 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Fehlende Parameter in "DB_config". Benötigte Parameter sind "host", "db" und "user".', 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Fehlende Parameter in "LDAP_config". Benötigt werden "host", "attribute" und "base_dn".', 'customer' => 'Kunde', + 'emailed to' => 'gemailt an', + 'follow_up_list' => 'wiedervorlageliste', 'invoice' => 'Rechnung', 'no' => 'nein', + 'none (pricegroup)' => 'keine', 'packing_list' => 'Versandliste', 'pick_list' => 'Entnahmeliste', 'proforma' => 'Proforma', 'purchase_order' => 'Auftrag', + 'purchase_order_list' => 'lieferantenauftragsliste', + 'quotation_list' => 'angebotsliste', + 'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.', + 'report_generator_nextsub is not defined.' => 'report_generator_nextsub ist nicht definiert.', 'request_quotation' => 'Angebotsanforderung', + 'rfq_list' => 'anfragenliste', 'sales_order' => 'Kundenauftrag', + 'sales_order_list' => 'auftragsliste', 'sales_quotation' => 'Verkaufsangebot', + 'saved!' => 'gespeichert', + 'sent' => 'gesendet', + 'sent to printer' => 'an Drucker geschickt', 'vendor' => 'Lieferant', + 'wrongformat' => 'Falsches Format', 'yes' => 'ja', }; @@ -132,26 +351,123 @@ $self->{subs} = { 'H' => 'H', 'NTI' => 'NTI', 'Q' => 'Q', + '_collect_links' => '_collect_links', + 'add' => 'add', + 'backorder_exchangerate' => 'backorder_exchangerate', 'build_std_url' => 'build_std_url', 'calculate_qty' => 'calculate_qty', 'call_sub' => 'call_sub', + 'check_delivered_flag' => 'check_delivered_flag', + 'check_for_direct_delivery' => 'check_for_direct_delivery', + 'check_for_direct_delivery_no' => 'check_for_direct_delivery_no', + 'check_for_direct_delivery_yes' => 'check_for_direct_delivery_yes', + 'check_form' => 'check_form', + 'check_name' => 'check_name', + 'check_oe_access' => 'check_oe_access', + 'check_project' => 'check_project', 'company_logo' => 'company_logo', + 'continue' => 'continue', 'cov_selection_internal' => 'cov_selection_internal', + 'create_backorder' => 'create_backorder', + 'create_subtotal_row' => 'create_subtotal_row', + 'create_todo_list' => 'create_todo_list', + 'customer_details' => 'customer_details', + 'delete' => 'delete', + 'delete_order_quotation' => 'delete_order_quotation', 'delivery_customer_selection' => 'delivery_customer_selection', + 'dispatcher' => 'dispatcher', + 'display_form' => 'display_form', + 'display_row' => 'display_row', + 'e_mail' => 'e_mail', + 'edit' => 'edit', + 'edit_access_rights' => 'edit_access_rights', + 'edit_e_mail' => 'edit_e_mail', + 'finish' => 'finish', + 'form_footer' => 'form_footer', + 'form_header' => 'form_header', 'format_dates' => 'format_dates', + 'invoice' => 'invoice', + 'invoicetotal' => 'invoicetotal', + 'item_selected' => 'item_selected', 'login' => 'login', 'login_screen' => 'login_screen', 'logout' => 'logout', 'mark_as_paid_common' => 'mark_as_paid_common', + 'name_selected' => 'name_selected', + 'new_item' => 'new_item', + 'new_license' => 'new_license', + 'no' => 'no', + 'order' => 'order', + 'order_links' => 'order_links', + 'orders' => 'orders', + 'poso' => 'poso', + 'post_as_new' => 'post_as_new', + 'prepare_order' => 'prepare_order', + 'print' => 'print', + 'print_form' => 'print_form', + 'print_options' => 'print_options', + 'project_selected' => 'project_selected', + 'purchase_order' => 'purchase_order', + 'quotation' => 'quotation', 'reformat_numbers' => 'reformat_numbers', + 'relink_accounts' => 'relink_accounts', + 'report' => 'report', + 'report_for_todo_list' => 'report_for_todo_list', + 'report_generator_back' => 'report_generator_back', + 'report_generator_dispatcher' => 'report_generator_dispatcher', + 'report_generator_do' => 'report_generator_do', + 'report_generator_export_as_csv' => 'report_generator_export_as_csv', + 'report_generator_export_as_pdf' => 'report_generator_export_as_pdf', + 'request_for_quotation' => 'request_for_quotation', 'retrieve_partunits' => 'retrieve_partunits', + 'sales_order' => 'sales_order', + 'save' => 'save', + 'save_access_rights' => 'save_access_rights', + 'save_and_close' => 'save_and_close', + 'save_as_new' => 'save_as_new', + 'save_exchangerate' => 'save_exchangerate', + 'save_follow_up' => 'save_follow_up', + 'search' => 'search', + 'select_item' => 'select_item', + 'select_name' => 'select_name', + '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_to' => 'ship_to', 'show_error' => 'show_error', 'show_history' => 'show_history', + 'show_todo_list' => 'show_todo_list', 'show_vc_details' => 'show_vc_details', + 'todo_list_follow_ups' => 'todo_list_follow_ups', + 'todo_list_overdue_sales_quotations' => 'todo_list_overdue_sales_quotations', + 'update' => 'update', + 'validate_items' => 'validate_items', + 'vendor_details' => 'vendor_details', 'vendor_selection' => 'vendor_selection', + 'yes' => 'yes', + 'abbrechen' => 'cancel', 'weiter' => 'continue', + 'löschen' => 'delete', + 'email' => 'e_mail', + 'abschließen' => 'finish', + 'rechnung' => 'invoice', 'anmeldung' => 'login', + 'nein' => 'no', + 'auftrag' => 'order', + 'drucken' => 'print', + 'lieferantenauftrag' => 'purchase_order', + 'angebot' => 'quotation', + 'anfrage' => 'request_for_quotation', + 'kundenauftrag' => 'sales_order', + 'speichern' => 'save', + 'speichern_und_schließen' => 'save_and_close', + 'als_neu_speichern' => 'save_as_new', + 'lieferadresse' => 'ship_to', + 'erneuern' => 'update', + 'ja' => 'yes', }; 1; diff --git a/locale/de/menu b/locale/de/menu index fd59978b1..7e8e80139 100644 --- a/locale/de/menu +++ b/locale/de/menu @@ -15,6 +15,7 @@ $self->{texts} = { 'Add Customer' => 'Kunde erfassen', 'Add Department' => 'Abteilung erfassen', 'Add Dunning' => 'Mahnung erzeugen', + 'Add Follow-Up' => 'Wiedervorlage erstellen', 'Add Group' => 'Warengruppe erfassen', 'Add Language' => 'Sprache hinzufügen', 'Add Lead' => 'Kundenquelle erfassen', @@ -75,9 +76,11 @@ $self->{texts} = { 'Dimension units' => 'Maßeinheiten', 'Directory' => 'Verzeichnis', 'Dunnings' => 'Mahnungen', + 'Edit Access Rights' => 'Zugriffsrechte bearbeiten', 'Edit Dunning' => 'Mahnungen konfigurieren', 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', 'File' => 'Datei', + 'Follow-Ups' => 'Wiedervorlagen', 'General Ledger' => 'Finanzbuchhaltung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Groups' => 'Warengruppen', @@ -124,6 +127,7 @@ $self->{texts} = { 'Price Factors' => 'Preisfaktoren', 'Pricegroups' => 'Preisgruppen', 'Printer' => 'Drucker', + 'Productivity' => 'Produktivität', 'Programm' => 'Programm', 'Projects' => 'Projekte', 'Projecttransactions' => 'Projektbuchungen', @@ -141,6 +145,7 @@ $self->{texts} = { 'Service units' => 'Dienstleistungseinheiten', 'Services' => 'Dienstleistungen', 'Shipto' => 'Lieferanschriften', + 'Show TODO list' => 'Aufgabenliste anzeigen', 'Stylesheet' => 'Stilvorlage', 'Subject' => 'Betreff', 'System' => 'System', diff --git a/locale/de/menunew b/locale/de/menunew index 09c356648..2835cb883 100644 --- a/locale/de/menunew +++ b/locale/de/menunew @@ -14,6 +14,7 @@ $self->{texts} = { 'Add Customer' => 'Kunde erfassen', 'Add Department' => 'Abteilung erfassen', 'Add Dunning' => 'Mahnung erzeugen', + 'Add Follow-Up' => 'Wiedervorlage erstellen', 'Add Group' => 'Warengruppe erfassen', 'Add Language' => 'Sprache hinzufügen', 'Add Lead' => 'Kundenquelle erfassen', @@ -74,9 +75,11 @@ $self->{texts} = { 'Dimension units' => 'Maßeinheiten', 'Directory' => 'Verzeichnis', 'Dunnings' => 'Mahnungen', + 'Edit Access Rights' => 'Zugriffsrechte bearbeiten', 'Edit Dunning' => 'Mahnungen konfigurieren', 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', 'File' => 'Datei', + 'Follow-Ups' => 'Wiedervorlagen', 'General Ledger' => 'Finanzbuchhaltung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Groups' => 'Warengruppen', @@ -123,6 +126,7 @@ $self->{texts} = { 'Price Factors' => 'Preisfaktoren', 'Pricegroups' => 'Preisgruppen', 'Printer' => 'Drucker', + 'Productivity' => 'Produktivität', 'Programm' => 'Programm', 'Projects' => 'Projekte', 'Projecttransactions' => 'Projektbuchungen', @@ -140,6 +144,7 @@ $self->{texts} = { 'Service units' => 'Dienstleistungseinheiten', 'Services' => 'Dienstleistungen', 'Shipto' => 'Lieferanschriften', + 'Show TODO list' => 'Aufgabenliste anzeigen', 'Stylesheet' => 'Stilvorlage', 'Subject' => 'Betreff', 'System' => 'System', diff --git a/locale/de/oe b/locale/de/oe index d89a99440..970bc251b 100644 --- a/locale/de/oe +++ b/locale/de/oe @@ -4,7 +4,9 @@ $self->{texts} = { '*/' => '*/', 'ADDED' => 'Hinzugefügt', 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', 'Add Exchangerate' => 'Wechselkurs erfassen', 'Add Purchase Order' => 'Lieferantenauftrag erfassen', 'Add Quotation' => 'Angebot erfassen', @@ -88,6 +90,7 @@ $self->{texts} = { 'Description' => 'Beschreibung', 'Directory' => 'Verzeichnis', 'Discount' => 'Rabatt', + 'Dunning' => 'Mahnung', 'E-mail' => 'eMail', 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', 'EK' => 'EK', @@ -114,6 +117,7 @@ $self->{texts} = { 'February' => 'Februar', 'File' => 'Datei', 'From' => 'Von', + 'GL Transaction' => 'Dialogbuchung', 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', 'Group' => 'Warengruppe', 'History' => 'Historie', @@ -212,12 +216,15 @@ $self->{texts} = { 'Reqdate' => 'Lieferdatum', 'Request for Quotation' => 'Anfrage', 'Request for Quotations' => 'Anfragen', + 'Request quotation' => 'Preisanfrage', 'Required by' => 'Lieferdatum', 'SAVED' => 'Gespeichert', 'SAVED FOR DUNNING' => 'Gespeichert', 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', 'Sales Order' => 'Kundenauftrag', 'Sales Orders' => 'Aufträge', + 'Sales quotation' => 'Angebot', 'Salesman' => 'Verkäufer/in', 'Screen' => 'Bildschirm', 'Select a Customer' => 'Endkunde auswählen', @@ -260,6 +267,7 @@ $self->{texts} = { 'Value' => 'Wert', 'Variable' => 'Variable', 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', 'Vendor Number' => 'Lieferantennummer', 'Vendor details' => 'Lieferantendetails', 'Vendor missing!' => 'Lieferant fehlt!', @@ -362,6 +370,7 @@ $self->{subs} = { 'quotation' => 'quotation', 'reformat_numbers' => 'reformat_numbers', 'relink_accounts' => 'relink_accounts', + 'report_for_todo_list' => 'report_for_todo_list', 'report_generator_back' => 'report_generator_back', 'report_generator_dispatcher' => 'report_generator_dispatcher', 'report_generator_do' => 'report_generator_do', diff --git a/locale/de/todo b/locale/de/todo new file mode 100644 index 000000000..7cbfb05b2 --- /dev/null +++ b/locale/de/todo @@ -0,0 +1,461 @@ +$self->{texts} = { + ' Date missing!' => ' Datum fehlt!', + ' missing!' => ' fehlt!', + '*/' => '*/', + 'ADDED' => 'Hinzugefügt', + 'AP' => 'Einkauf', + 'AP Transaction' => 'Kreditorenbuchung', + 'AR' => 'Verkauf', + 'AR Transaction' => 'Debitorenbuchung', + 'Add Exchangerate' => 'Wechselkurs erfassen', + 'Add Follow-Up' => 'Wiedervorlage erstellen', + 'Add Follow-Up for #1' => 'Wiedervorlage für #1 erstellen', + 'Add Purchase Order' => 'Lieferantenauftrag erfassen', + 'Add Quotation' => 'Angebot erfassen', + 'Add Request for Quotation' => 'Anfrage erfassen', + 'Add Sales Invoice' => 'Rechnung erfassen', + 'Add Sales Order' => 'Auftrag erfassen', + 'Add Vendor Invoice' => 'Einkaufsrechnung erfassen', + 'Address' => 'Adresse', + 'Advance turnover tax return' => 'Umsatzsteuervoranmeldung', + 'All reports' => 'Alle Berichte (Kontenübersicht, Saldenbilanz, GuV, BWA, Bilanz, Projektbuchungen)', + 'Amount' => 'Betrag', + 'Apr' => 'Apr', + 'April' => 'April', + 'Are you sure you want to delete Order Number' => 'Soll der Auftrag mit folgender Nummer wirklich gelöscht werden:', + 'Are you sure you want to delete Quotation Number' => 'Sind Sie sicher, dass Angebotnummer gelöscht werden soll?', + 'Attachment' => 'als Anhang', + 'Attempt to call an undefined sub named \'%s\'' => 'Es wurde versucht, eine nicht definierte Unterfunktion namens \'%s\' aufzurufen.', + 'Aug' => 'Aug', + 'August' => 'August', + 'Bcc' => 'Bcc', + 'Billing Address' => 'Rechnungsadresse', + 'Bin' => 'Lagerplatz', + 'Bin List' => 'Lagerliste', + 'Binding to the LDAP server as "#1" failed. Please check config/authentication.pl.' => 'Die Anmeldung am LDAP-Server als "#1" schlug fehl. Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'Bis' => 'bis', + 'Body' => 'Text', + 'CANCELED' => 'Storniert', + 'CSV export -- options' => 'CSV-Export -- Optionen', + 'Cannot delete order!' => 'Auftrag kann nicht gelöscht werden!', + 'Cannot delete quotation!' => 'Angebot kann nicht gelöscht werden!', + 'Cannot save order!' => 'Auftrag kann nicht gespeichert werden!', + 'Cannot save quotation!' => 'Angebot kann nicht gespeichert werden!', + 'Cc' => 'Cc', + 'Change Lx-Office installation settings (all menu entries beneath \'System\')' => 'Verändern der Lx-Office-Installationseinstellungen (Menüpunkte unterhalb von \'System\')', + 'City' => 'Stadt', + 'Closed' => 'Geschlossen', + 'Collective Orders only work for orders from one customer!' => 'Sammelaufträge funktionieren nur für Aufträge von einem Kunden!', + 'Company Name' => 'Firmenname', + 'Confirm!' => 'Bestätigen Sie!', + 'Confirmation' => 'Auftragsbestätigung', + 'Contact' => 'Kontakt', + 'Continue' => 'Weiter', + 'Could not spawn html2ps or GhostScript.' => 'html2ps oder GhostScript konnte nicht gestartet werden.', + 'Could not spawn the printer command.' => 'Die Druckanwendung konnte nicht gestartet werden.', + 'Could not write the html2ps config file.' => 'Die temporäre html2ps-Konfigurationsdatei konnte nicht geschrieben werden.', + 'Could not write the temporary HTML file.' => 'Eine temporäre HTML-Datei konnte nicht geschrieben werden.', + 'Country' => 'Land', + 'Create and edit RFQs' => 'Lieferantenanfragen erfassen und bearbeiten', + 'Create and edit customers and vendors' => 'Kunden und Lieferanten erfassen und bearbeiten', + 'Create and edit dunnings' => 'Mahnungen erfassen und bearbeiten', + 'Create and edit invoices and credit notes' => 'Rechnungen und Gutschriften erfassen und bearbeiten', + 'Create and edit parts, services, assemblies' => 'Artikel, Dienstleistungen, Erzeugnisse erfassen und bearbeiten', + 'Create and edit projects' => 'Projekte erfassen und bearbeiten', + 'Create and edit purchase delivery orders' => 'Lieferscheine von Lieferanten erfassen und bearbeiten', + 'Create and edit purchase orders' => 'Lieferantenaufträge erfassen und bearbeiten', + 'Create and edit sales delivery orders' => 'Lieferscheine für Kunden erfassen und bearbeiten', + 'Create and edit sales orders' => 'Auftragsbestätigungen erfassen und bearbeiten', + 'Create and edit sales quotations' => 'Angebote erfassen und bearbeiten', + 'Create and edit vendor invoices' => 'Eingangsrechnungen erfassen und bearbeiten', + 'Created by' => 'Erstellt von', + 'Created for' => 'Erstellt für', + 'Created on' => 'Erstellt am', + 'Credit Limit exceeded!!!' => 'Kreditlimit überschritten!', + 'Credit Note' => 'Gutschrift', + 'Curr' => 'Währung', + 'Currency' => 'Währung', + 'Customer' => 'Kunde', + 'Customer Number' => 'Kundennummer', + 'Customer details' => 'Kundendetails', + 'Customer missing!' => 'Kundenname fehlt!', + 'Customer not on file or locked!' => 'Dieser Kunde existiert nicht oder ist gesperrt.', + 'Customer not on file!' => 'Kunde ist nicht in der Datenbank!', + 'Customer type' => 'Kundentyp', + 'DATEV Export' => 'DATEV-Export', + 'DELETED' => 'Gelöscht', + 'DUNNING STARTED' => 'Mahnprozess gestartet', + 'Dataset upgrade' => 'Datenbankaktualisierung', + 'Date' => 'Datum', + 'Dec' => 'Dez', + 'December' => 'Dezember', + 'Delivered' => 'Geliefert', + 'Delivery Date' => 'Lieferdatum', + 'Department' => 'Abteilung', + 'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:', + 'Description' => 'Beschreibung', + 'Directory' => 'Verzeichnis', + 'Discount' => 'Rabatt', + 'Done' => 'Fertig', + 'Dunning' => 'Mahnung', + 'E-mail' => 'eMail', + 'E-mail address missing!' => 'E-Mail-Adresse fehlt!', + 'EK' => 'EK', + 'ELSE' => 'Zusatz', + 'Edit Access Rights for Follow-Ups' => 'Zugriffsrechte für Wiedervorlagen bearbeiten', + 'Edit Follow-Up' => 'Wiedervorlage bearbeiten', + 'Edit Follow-Up for #1' => 'Wiedervorlage für #1 bearbeiten', + 'Edit Purchase Order' => 'Lieferantenaufrag bearbeiten', + 'Edit Quotation' => 'Angebot bearbeiten', + 'Edit Request for Quotation' => 'Anfrage bearbeiten', + 'Edit Sales Order' => 'Auftrag bearbeiten', + 'Edit the purchase_order' => 'Bearbeiten des Lieferantenauftrags', + 'Edit the request_quotation' => 'Bearbeiten der Preisanfrage', + 'Edit the sales_order' => 'Bearbeiten des Auftrags', + 'Edit the sales_quotation' => 'Bearbeiten des Angebots', + 'Employee' => 'Bearbeiter', + 'Enter longdescription' => 'Langtext eingeben', + 'Error in database control file \'%s\': %s' => 'Fehler in Datenbankupgradekontrolldatei \'%s\': %s', + 'Ertrag' => 'Ertrag', + 'Ertrag prozentual' => 'Ertrag prozentual', + 'Exchangerate' => 'Wechselkurs', + 'Exchangerate missing!' => 'Es fehlt der Wechselkurs!', + 'Extended' => 'Gesamt', + 'Falsches Datumsformat!' => 'Falsches Datumsformat!', + 'Fax' => 'Fax', + 'Feb' => 'Feb', + 'February' => 'Februar', + 'File' => 'Datei', + 'Follow-Up Date' => 'Wiedervorlagedatum', + 'Follow-Up saved.' => 'Wiedervorlage gespeichert.', + 'Follow-Ups' => 'Wiedervorlagen', + 'Follow-up for' => 'Wiedervorlage für', + 'From' => 'Von', + 'GL Transaction' => 'Dialogbuchung', + 'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr', + 'Group' => 'Warengruppe', + 'History' => 'Historie', + 'ID' => 'Buchungsnummer', + 'In-line' => 'im Text', + 'Include in Report' => 'In Bericht aufnehmen', + 'Invalid follow-up ID.' => 'Ungültige Wiedervorlage-ID.', + 'Invoice' => 'Rechnung', + 'Invoice Date missing!' => 'Rechnungsdatum fehlt!', + 'Invoice Number missing!' => 'Rechnungsnummer fehlt!', + 'Jan' => 'Jan', + 'January' => 'Januar', + 'Jul' => 'Jul', + 'July' => 'Juli', + 'Jun' => 'Jun', + 'June' => 'Juni', + 'L' => 'L', + 'LP' => 'LP', + 'License' => 'Lizenz', + 'MAILED' => 'Gesendet', + 'Manage license keys' => 'Lizenzschlüssel verwalten', + 'Mar' => 'März', + 'March' => 'März', + 'Mark as paid?' => 'Als bezahlt markieren?', + 'Marked as paid' => 'Als bezahlt markiert', + 'Master Data' => 'Stammdaten', + 'May' => 'Mai', + 'May ' => 'Mai', + 'May set the BCC field when sending emails' => 'Beim Verschicken von Emails das Feld \'BCC\' setzen', + 'Message' => 'Nachricht', + 'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.', + 'Missing \'tag\' field.' => 'Fehlendes Feld \'tag\'.', + 'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.', + 'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.', + 'Name' => 'Name', + 'No' => 'Nein', + 'No %s was found matching the search parameters.' => 'Es wurde kein %s gefunden, auf den die Suchparameter zutreffen.', + '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 action defined.' => 'Keine Aktion definiert.', + 'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgewählt.', + 'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.', + 'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgewählt.', + 'No.' => 'Position', + 'Not delivered' => 'Nicht geliefert', + 'Not done yet' => 'Noch nicht fertig', + 'Notes' => 'Bemerkungen', + 'Nov' => 'Nov', + 'November' => 'November', + 'Number' => 'Nummer', + 'Number missing in Row' => 'Nummer fehlt in Zeile', + 'Oct' => 'Okt', + 'October' => 'Oktober', + 'Only due follow-ups' => 'Nur fällige Wiedervorlagen', + 'Open' => 'Offen', + 'OpenDocument/OASIS' => 'OpenDocument/OASIS', + 'Order' => 'Auftrag', + 'Order Date missing!' => 'Auftragsdatum fehlt!', + 'Order Number' => 'Auftragsnummer', + 'Order Number missing!' => 'Auftragsnummer fehlt!', + 'Order deleted!' => 'Auftrag gelöscht!', + 'Other users\' follow-ups' => 'Wiedervorlagen anderer Benutzer', + 'Others' => 'Andere', + 'PAYMENT POSTED' => 'Rechung gebucht', + 'PDF' => 'PDF', + 'PDF (OpenDocument/OASIS)' => 'PDF (OpenDocument/OASIS)', + 'PDF export -- options' => 'PDF-Export -- Optionen', + 'POSTED' => 'Gebucht', + 'POSTED AS NEW' => 'Als neu gebucht', + 'PRINTED' => 'Gedruckt', + 'Packing List' => 'Lieferschein', + 'Packing List Date missing!' => 'Datum für Verpackungsliste fehlt!', + 'Packing List Number missing!' => 'Verpackungslistennummer fehlt!', + 'Part Description' => 'Artikelbeschreibung', + 'Phone' => 'Telefon', + 'Pick List' => 'Sammelliste', + 'Please enter values' => 'Bitte Werte eingeben', + 'Postscript' => 'Postscript', + 'Price' => 'Preis', + 'Price Factor' => 'Preisfaktor', + 'Pricegroup' => 'Preisgruppe', + 'Printer' => 'Drucker', + 'Proforma Invoice' => 'Proformarechnung', + 'Project' => 'Projekt', + 'Project Number' => 'Projektnummer', + 'Project not on file!' => 'Dieses Projekt ist nicht in der Datenbank!', + 'Purchase Order' => 'Lieferantenauftrag', + 'Purchase Orders' => 'Lieferantenaufträge', + 'Qty' => 'Menge', + 'Queue' => 'Warteschlange', + 'Quotation' => 'Angebot', + 'Quotation Date missing!' => 'Angebotsdatum fehlt!', + 'Quotation Number' => 'Angebotsnummer', + 'Quotation Number missing!' => 'Angebotsnummer fehlt!', + 'Quotation deleted!' => 'Angebot wurde gelöscht.', + 'Quotations' => 'Angebote', + 'RFQ' => 'Anfrage', + 'RFQ Number' => 'Anfragenummer', + 'Receipt, payment, reconciliation' => 'Zahlungseingang, Zahlungsausgang, Kontenabgleich', + 'Reference' => 'Referenz', + 'Reports' => 'Berichte', + 'Reqdate' => 'Lieferdatum', + 'Request for Quotation' => 'Anfrage', + 'Request for Quotations' => 'Anfragen', + 'Request quotation' => 'Preisanfrage', + 'Required by' => 'Lieferdatum', + 'SAVED' => 'Gespeichert', + 'SAVED FOR DUNNING' => 'Gespeichert', + 'SCREENED' => 'Angezeigt', + 'Sales Invoice' => 'Rechnung', + 'Sales Order' => 'Kundenauftrag', + 'Sales Orders' => 'Aufträge', + 'Sales quotation' => 'Angebot', + 'Salesman' => 'Verkäufer/in', + 'Screen' => 'Bildschirm', + 'Select a Customer' => 'Endkunde auswählen', + 'Select a customer' => 'Einen Kunden auswählen', + 'Select a vendor' => 'Einen Lieferanten 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', + 'Select postscript or PDF!' => 'Postscript oder PDF auswählen!', + 'Sep' => 'Sep', + 'September' => 'September', + 'Serial No.' => 'Seriennummer', + 'Ship' => 'Lagerausgang', + 'Ship rcvd' => 'Lagereingang', + 'Ship to' => 'Lieferadresse', + 'Ship via' => 'Transportmittel', + 'Shipping Address' => 'Lieferadresse', + 'Storno Invoice' => 'Stornorechnung', + 'Storno Packing List' => 'Stornolieferschein', + 'Street' => 'Straße', + 'Subject' => 'Betreff', + 'Subtotal' => 'Zwischensumme', + 'TODO list' => 'Aufgabenliste', + 'Tax' => 'Steuer', + '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 LDAP server "#1:#2" is unreachable. Please check config/authentication.pl.' => 'Der LDAP-Server "#1:#2" ist nicht erreichbar. Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'The access rights have been saved.' => 'Die Zugriffsrechte wurden gespeichert.', + 'The config file "config/authentication.pl" contained invalid Perl code:' => 'Die Konfigurationsdatei "config/authentication.pl" enthielt ungütigen Perl-Code:', + 'The config file "config/authentication.pl" was not found.' => 'Die Konfigurationsdatei "config/authentication.pl" wurde nicht gefunden.', + 'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/authentication.pl.' => 'Die Verbindung zum LDAP-Server kann nicht verschlüsselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte überprüfen Sie die Angaben in config/authentication.pl.', + 'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:', + 'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:', + 'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:', + 'The follow-up date is missing.' => 'Das Wiedervorlagedatum fehlt.', + 'The list has been printed.' => 'Die Liste wurde ausgedruckt.', + 'The subject is missing.' => 'Der Betreff fehlt.', + 'To (email)' => 'An', + 'Total' => 'Summe', + 'Transaction description' => 'Vorgangsbezeichnung', + 'Transactions, AR transactions, AP transactions' => 'Dialogbuchen, Debitorenrechnungen, Kreditorenrechnungen', + 'Trying to call a sub without a name' => 'Es wurde versucht, eine Unterfunktion ohne Namen aufzurufen.', + 'Unit' => 'Einheit', + 'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.', + 'Value' => 'Wert', + 'Variable' => 'Variable', + 'Vendor' => 'Lieferant', + 'Vendor Invoice' => 'Einkaufsrechnung', + 'Vendor Number' => 'Lieferantennummer', + 'Vendor details' => 'Lieferantendetails', + 'Vendor missing!' => 'Lieferant fehlt!', + 'Vendor not on file or locked!' => 'Dieser Lieferant existiert nicht oder ist gesperrt.', + 'Vendor not on file!' => 'Lieferant ist nicht in der Datenbank!', + 'Vendor type' => 'Lieferantentyp', + 'Workflow purchase_order' => 'Workflow Lieferantenauftrag', + 'Workflow request_quotation' => 'Workflow Preisanfrage', + 'Workflow sales_order' => 'Workflow Auftrag', + 'Workflow sales_quotation' => 'Workflow Angebot', + 'Yes' => 'Ja', + 'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', + 'You must chose a user.' => 'Sie müssen einen Benutzer auswählen.', + 'Zipcode' => 'PLZ', + '[email]' => '[email]', + 'bin_list' => 'Lagerliste', + 'button' => '?', + 'config/authentication.pl: Key "DB_config" is missing.' => 'config/authentication.pl: Das Schlüsselwort "DB_config" fehlt.', + 'config/authentication.pl: Key "LDAP_config" is missing.' => 'config/authentication.pl: Der Schlüssel "LDAP_config" fehlt.', + 'config/authentication.pl: Missing parameters in "DB_config". Required parameters are "host", "db" and "user".' => 'config/authentication.pl: Fehlende Parameter in "DB_config". Benötigte Parameter sind "host", "db" und "user".', + 'config/authentication.pl: Missing parameters in "LDAP_config". Required parameters are "host", "attribute" and "base_dn".' => 'config/authentication.pl: Fehlende Parameter in "LDAP_config". Benötigt werden "host", "attribute" und "base_dn".', + 'customer' => 'Kunde', + 'emailed to' => 'gemailt an', + 'follow_up_list' => 'wiedervorlageliste', + 'invoice' => 'Rechnung', + 'no' => 'nein', + 'none (pricegroup)' => 'keine', + 'packing_list' => 'Versandliste', + 'pick_list' => 'Entnahmeliste', + 'proforma' => 'Proforma', + 'purchase_order' => 'Auftrag', + 'purchase_order_list' => 'lieferantenauftragsliste', + 'quotation_list' => 'angebotsliste', + 'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.', + 'report_generator_nextsub is not defined.' => 'report_generator_nextsub ist nicht definiert.', + 'request_quotation' => 'Angebotsanforderung', + 'rfq_list' => 'anfragenliste', + 'sales_order' => 'Kundenauftrag', + 'sales_order_list' => 'auftragsliste', + 'sales_quotation' => 'Verkaufsangebot', + 'saved!' => 'gespeichert', + 'sent' => 'gesendet', + 'sent to printer' => 'an Drucker geschickt', + 'vendor' => 'Lieferant', + 'wrongformat' => 'Falsches Format', + 'yes' => 'ja', +}; + +$self->{subs} = { + 'E' => 'E', + 'H' => 'H', + 'NTI' => 'NTI', + 'Q' => 'Q', + '_collect_links' => '_collect_links', + 'add' => 'add', + 'backorder_exchangerate' => 'backorder_exchangerate', + 'build_std_url' => 'build_std_url', + 'calculate_qty' => 'calculate_qty', + 'call_sub' => 'call_sub', + 'check_delivered_flag' => 'check_delivered_flag', + 'check_for_direct_delivery' => 'check_for_direct_delivery', + 'check_for_direct_delivery_no' => 'check_for_direct_delivery_no', + 'check_for_direct_delivery_yes' => 'check_for_direct_delivery_yes', + 'check_form' => 'check_form', + 'check_name' => 'check_name', + 'check_oe_access' => 'check_oe_access', + 'check_project' => 'check_project', + 'continue' => 'continue', + 'cov_selection_internal' => 'cov_selection_internal', + 'create_backorder' => 'create_backorder', + 'create_subtotal_row' => 'create_subtotal_row', + 'create_todo_list' => 'create_todo_list', + 'customer_details' => 'customer_details', + 'delete' => 'delete', + 'delete_order_quotation' => 'delete_order_quotation', + 'delivery_customer_selection' => 'delivery_customer_selection', + 'dispatcher' => 'dispatcher', + 'display_form' => 'display_form', + 'display_row' => 'display_row', + 'e_mail' => 'e_mail', + 'edit' => 'edit', + 'edit_access_rights' => 'edit_access_rights', + 'edit_e_mail' => 'edit_e_mail', + 'finish' => 'finish', + 'form_footer' => 'form_footer', + 'form_header' => 'form_header', + 'format_dates' => 'format_dates', + 'invoice' => 'invoice', + 'invoicetotal' => 'invoicetotal', + 'item_selected' => 'item_selected', + 'mark_as_paid_common' => 'mark_as_paid_common', + 'name_selected' => 'name_selected', + 'new_item' => 'new_item', + 'new_license' => 'new_license', + 'no' => 'no', + 'order' => 'order', + 'order_links' => 'order_links', + 'orders' => 'orders', + 'poso' => 'poso', + 'post_as_new' => 'post_as_new', + 'prepare_order' => 'prepare_order', + 'print' => 'print', + 'print_form' => 'print_form', + 'print_options' => 'print_options', + 'project_selected' => 'project_selected', + 'purchase_order' => 'purchase_order', + 'quotation' => 'quotation', + 'reformat_numbers' => 'reformat_numbers', + 'relink_accounts' => 'relink_accounts', + 'report' => 'report', + 'report_for_todo_list' => 'report_for_todo_list', + 'report_generator_back' => 'report_generator_back', + 'report_generator_dispatcher' => 'report_generator_dispatcher', + 'report_generator_do' => 'report_generator_do', + 'report_generator_export_as_csv' => 'report_generator_export_as_csv', + 'report_generator_export_as_pdf' => 'report_generator_export_as_pdf', + 'request_for_quotation' => 'request_for_quotation', + 'retrieve_partunits' => 'retrieve_partunits', + 'sales_order' => 'sales_order', + 'save' => 'save', + 'save_access_rights' => 'save_access_rights', + 'save_and_close' => 'save_and_close', + 'save_as_new' => 'save_as_new', + 'save_exchangerate' => 'save_exchangerate', + 'save_follow_up' => 'save_follow_up', + 'search' => 'search', + 'select_item' => 'select_item', + 'select_name' => 'select_name', + '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_to' => 'ship_to', + 'show_history' => 'show_history', + 'show_todo_list' => 'show_todo_list', + 'show_vc_details' => 'show_vc_details', + 'todo_list_follow_ups' => 'todo_list_follow_ups', + 'todo_list_overdue_sales_quotations' => 'todo_list_overdue_sales_quotations', + 'update' => 'update', + 'validate_items' => 'validate_items', + 'vendor_details' => 'vendor_details', + 'vendor_selection' => 'vendor_selection', + 'yes' => 'yes', + 'abbrechen' => 'cancel', + 'weiter' => 'continue', + 'löschen' => 'delete', + 'email' => 'e_mail', + 'abschließen' => 'finish', + 'rechnung' => 'invoice', + 'nein' => 'no', + 'auftrag' => 'order', + 'drucken' => 'print', + 'lieferantenauftrag' => 'purchase_order', + 'angebot' => 'quotation', + 'anfrage' => 'request_for_quotation', + 'kundenauftrag' => 'sales_order', + 'speichern' => 'save', + 'speichern_und_schließen' => 'save_and_close', + 'als_neu_speichern' => 'save_as_new', + 'lieferadresse' => 'ship_to', + 'erneuern' => 'update', + 'ja' => 'yes', +}; + +1; diff --git a/menu.ini b/menu.ini index 8f0d8d43c..9da4aabfd 100644 --- a/menu.ini +++ b/menu.ini @@ -392,6 +392,31 @@ vc=customer type=receipt +[Productivity] + +[Productivity--Show TODO list] +module=todo.pl +action=show_todo_list + +[Productivity--Add Follow-Up] +module=fu.pl +action=add + +[Productivity--Edit Access Rights] +module=fu.pl +action=edit_access_rights + +[Productivity--Reports] +module=menu.pl +action=acc_menu +target=acc_menu +submenu=1 + +[Productivity--Reports--Follow-Ups] +module=fu.pl +action=search + + [System] ACCESS=config diff --git a/sql/Pg-upgrade2/follow_ups.sql b/sql/Pg-upgrade2/follow_ups.sql new file mode 100644 index 000000000..c64bffc6a --- /dev/null +++ b/sql/Pg-upgrade2/follow_ups.sql @@ -0,0 +1,75 @@ +-- @tag: follow_ups +-- @description: Tabellenstruktur für Wiedervorlagen und allgemeine Notizen +-- @depends: release_2_4_3 +CREATE SEQUENCE note_id; +CREATE TABLE notes ( + id integer NOT NULL DEFAULT nextval('note_id'), + subject text, + body text, + created_by integer NOT NULL, + + trans_id integer, + trans_module varchar(10), + + itime timestamp DEFAULT now(), + mtime timestamp, + + PRIMARY KEY (id), + FOREIGN KEY (created_by) REFERENCES employee (id) +); + +CREATE TRIGGER mtime_notes + BEFORE UPDATE ON notes + FOR EACH ROW + EXECUTE PROCEDURE set_mtime(); + +CREATE SEQUENCE follow_up_id; +CREATE TABLE follow_ups ( + id integer NOT NULL DEFAULT nextval('follow_up_id'), + follow_up_date date NOT NULL, + created_for_user integer NOT NULL, + done boolean DEFAULT FALSE, + note_id integer NOT NULL, + created_by integer NOT NULL, + + itime timestamp DEFAULT now(), + mtime timestamp, + + PRIMARY KEY (id), + FOREIGN KEY (created_for_user) REFERENCES employee (id), + FOREIGN KEY (created_by) REFERENCES employee (id), + FOREIGN KEY (note_id) REFERENCES notes (id) +); + +CREATE TRIGGER mtime_follow_ups + BEFORE UPDATE ON follow_ups + FOR EACH ROW + EXECUTE PROCEDURE set_mtime(); + +CREATE SEQUENCE follow_up_link_id; +CREATE TABLE follow_up_links ( + id integer NOT NULL DEFAULT nextval('follow_up_link_id'), + follow_up_id integer NOT NULL, + trans_id integer NOT NULL, + trans_type text NOT NULL, + trans_info text, + + itime timestamp DEFAULT now(), + mtime timestamp, + + PRIMARY KEY (id), + FOREIGN KEY (follow_up_id) REFERENCES follow_ups (id) +); + +CREATE TRIGGER mtime_follow_up_links + BEFORE UPDATE ON follow_up_links + FOR EACH ROW + EXECUTE PROCEDURE set_mtime(); + +CREATE TABLE follow_up_access ( + who integer NOT NULL, + what integer NOT NULL, + + FOREIGN KEY (who) REFERENCES employee (id), + FOREIGN KEY (what) REFERENCES employee (id) +); diff --git a/templates/webpages/ct/form_header_de.html b/templates/webpages/ct/form_header_de.html index eb73366f3..bfdd6fced 100644 --- a/templates/webpages/ct/form_header_de.html +++ b/templates/webpages/ct/form_header_de.html @@ -15,6 +15,7 @@
  • Lieferadresse
  • Ansprechpartner
  • Lieferungen
  • +
  • Bemerkungen
  • [%- IF CUSTOM_VARIABLES.size %]
  • Benutzerdefinierte Variablen
  • [%- END %] @@ -437,6 +438,90 @@
    +
    + + [%- IF NOTES && NOTES.size %] +

    + + + + + + + + + + + + [%- FOREACH row = NOTES %] + + + + + + + + + + + [%- END %] + +
    LöschenBetreffErstellt amErstellt vonWiedervorlagedatumWiedervorlage fürWiedervorlage erledigt
    [% UNLESS NOTE_id && (NOTE_id == row.id) %][% END %][% HTML.escape(row.subject) %][% HTML.escape(row.created_on) %][% IF row.created_by_name %][% HTML.escape(row.created_by_name) %][% ELSE %][% HTML.escape(row.created_by_login) %][% END %][% HTML.escape(row.follow_up_date) %][% IF row.created_for_name %][% HTML.escape(row.created_for_name) %][% ELSE %][% HTML.escape(row.created_for_login) %][% END %][% IF row.follow_up_date %][% IF row.follow_up_done %]Ja[% ELSE %]Nein[% END %][% END %]
    +

    + [%- END %] + +
    [% IF NOTE_id %]Notiz bearbeiten[% ELSE %]Notiz erfassen[% END %]
    + + + + +

    + + + + + + + + + + + + + + + + + + + + +
    Betreff
    Text
    Wiedervorlage am + + + für + +
    + + +
    +

    + +
    +
    + + + [%- IF CUSTOM_VARIABLES.size %]
    diff --git a/templates/webpages/ct/form_header_master.html b/templates/webpages/ct/form_header_master.html index b8b3b1fc0..2cb672692 100644 --- a/templates/webpages/ct/form_header_master.html +++ b/templates/webpages/ct/form_header_master.html @@ -15,6 +15,7 @@
  • Shipping Address
  • Ansprechpartner
  • Lieferungen
  • +
  • Notes
  • [%- IF CUSTOM_VARIABLES.size %]
  • Custom Variables
  • [%- END %] @@ -437,6 +438,90 @@
    +
    + + [%- IF NOTES && NOTES.size %] +

    + + + + + + + + + + + + [%- FOREACH row = NOTES %] + + + + + + + + + + + [%- END %] + +
    DeleteSubjectCreated onCreated byFollow-Up DateFollow-Up forFollow-Up done
    [% UNLESS NOTE_id && (NOTE_id == row.id) %][% END %][% HTML.escape(row.subject) %][% HTML.escape(row.created_on) %][% IF row.created_by_name %][% HTML.escape(row.created_by_name) %][% ELSE %][% HTML.escape(row.created_by_login) %][% END %][% HTML.escape(row.follow_up_date) %][% IF row.created_for_name %][% HTML.escape(row.created_for_name) %][% ELSE %][% HTML.escape(row.created_for_login) %][% END %][% IF row.follow_up_date %][% IF row.follow_up_done %]Yes[% ELSE %]No[% END %][% END %]
    +

    + [%- END %] + +
    [% IF NOTE_id %]Edit note[% ELSE %]Add note[% END %]
    + + + + +

    + + + + + + + + + + + + + + + + + + + + +
    Subject
    Body
    Follow-Up On + + + for + +
    + + +
    +

    + +
    +
    + + + [%- IF CUSTOM_VARIABLES.size %]
    diff --git a/templates/webpages/fu/add_edit_de.html b/templates/webpages/fu/add_edit_de.html new file mode 100644 index 000000000..63a8eadca --- /dev/null +++ b/templates/webpages/fu/add_edit_de.html @@ -0,0 +1,108 @@ +[% USE HTML %] + + + + + + [%- IF SAVED_MESSAGE %] +

    [% SAVED_MESSAGE %]

    + [%- END %] + +
    [% title %]
    + + + + + +

    + + + + + + + + + + + + + + + + + + + +
    Wiedervorlage für Benutzer + +
    Wiedervorlagedatum + + +
    Betreff
    Text
    +

    + +

    + + + [%- IF id %] + + + [%- END %] + [%- IF POPUP_MODE %] + + [%- END %] +

    + + [%- IF POPUP_MODE %] + [%- IF FOLLOW_UPS.size %] +
    + +
    Noch nicht erledigte Wiedervorlagen für dieses Dokument
    + +

    + + + + + + + + + [%- FOREACH row = FOLLOW_UPS %] + + + + + + + [%- END %] +
    WiedervorlagedatumBetreffErstellt vonWiedervorlage für
    [% HTML.escape(row.follow_up_date) %][% HTML.escape(row.subject) %][% HTML.escape(row.created_by_name) %][% HTML.escape(row.created_for_user_name) %]
    +

    + [%- END %] + [%- END %] + + [%- FOREACH row = LINKS %] + + + + [%- END %] + + + + + + diff --git a/templates/webpages/fu/add_edit_master.html b/templates/webpages/fu/add_edit_master.html new file mode 100644 index 000000000..644bc3fb4 --- /dev/null +++ b/templates/webpages/fu/add_edit_master.html @@ -0,0 +1,108 @@ +[% USE HTML %] + + + +
    + + [%- IF SAVED_MESSAGE %] +

    [% SAVED_MESSAGE %]

    + [%- END %] + +
    [% title %]
    + + + + + +

    + + + + + + + + + + + + + + + + + + + +
    Follow-Up for user + +
    Follow-Up Date + + +
    Subject
    Body
    +

    + +

    + + + [%- IF id %] + + + [%- END %] + [%- IF POPUP_MODE %] + + [%- END %] +

    + + [%- IF POPUP_MODE %] + [%- IF FOLLOW_UPS.size %] +
    + +
    Existing pending follow-ups for this item
    + +

    + + + + + + + + + [%- FOREACH row = FOLLOW_UPS %] + + + + + + + [%- END %] +
    Follow-Up DateSubjectCreated byFollow-up for
    [% HTML.escape(row.follow_up_date) %][% HTML.escape(row.subject) %][% HTML.escape(row.created_by_name) %][% HTML.escape(row.created_for_user_name) %]
    +

    + [%- END %] + [%- END %] + + [%- FOREACH row = LINKS %] + + + + [%- END %] + + +
    + + + diff --git a/templates/webpages/fu/close_window_de.html b/templates/webpages/fu/close_window_de.html new file mode 100644 index 000000000..d1668652f --- /dev/null +++ b/templates/webpages/fu/close_window_de.html @@ -0,0 +1 @@ + diff --git a/templates/webpages/fu/close_window_master.html b/templates/webpages/fu/close_window_master.html new file mode 100644 index 000000000..d1668652f --- /dev/null +++ b/templates/webpages/fu/close_window_master.html @@ -0,0 +1 @@ + diff --git a/templates/webpages/fu/edit_access_rights_de.html b/templates/webpages/fu/edit_access_rights_de.html new file mode 100644 index 000000000..3f1c28efb --- /dev/null +++ b/templates/webpages/fu/edit_access_rights_de.html @@ -0,0 +1,47 @@ +[% USE HTML %] + + + [%- IF SAVED_MESSAGE %] +

    [% SAVED_MESSAGE %]

    + [%- END %] + +
    [% title %]
    + +

    Erlaube den folgenden Benutzern Zugriff auf meine Wiedervorlagen:

    + +
    +

    + + + + + + + [%- FOREACH row = EMPLOYEES %] + [%- UNLESS row.login == login %] + + + + + + + [%- END %] + [%- END %] +
    BenutzerZugriff erlauben
    [% IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %] + + + + +
    +

    + + + + +

    + +

    + +
    + + diff --git a/templates/webpages/fu/edit_access_rights_master.html b/templates/webpages/fu/edit_access_rights_master.html new file mode 100644 index 000000000..4f11a1796 --- /dev/null +++ b/templates/webpages/fu/edit_access_rights_master.html @@ -0,0 +1,47 @@ +[% USE HTML %] + + + [%- IF SAVED_MESSAGE %] +

    [% SAVED_MESSAGE %]

    + [%- END %] + +
    [% title %]
    + +

    Allow the following users access to my follow-ups:

    + +
    +

    + + + + + + + [%- FOREACH row = EMPLOYEES %] + [%- UNLESS row.login == login %] + + + + + + + [%- END %] + [%- END %] +
    UserAllow access
    [% IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %] + + + + +
    +

    + + + + +

    + +

    + +
    + + diff --git a/templates/webpages/fu/report_bottom_de.html b/templates/webpages/fu/report_bottom_de.html new file mode 100644 index 000000000..3cae2a8af --- /dev/null +++ b/templates/webpages/fu/report_bottom_de.html @@ -0,0 +1,13 @@ +[% USE HTML%] + + [%- FOREACH item = HIDDEN %] + + [%- END %] + +

    + Wiedervorlagen
    + + + +

    + diff --git a/templates/webpages/fu/report_bottom_master.html b/templates/webpages/fu/report_bottom_master.html new file mode 100644 index 000000000..5f2b8444d --- /dev/null +++ b/templates/webpages/fu/report_bottom_master.html @@ -0,0 +1,13 @@ +[% USE HTML%] + + [%- FOREACH item = HIDDEN %] + + [%- END %] + +

    + Follow-Ups
    + + + +

    + diff --git a/templates/webpages/fu/report_for_todo_list_de.html b/templates/webpages/fu/report_for_todo_list_de.html new file mode 100644 index 000000000..1fe653160 --- /dev/null +++ b/templates/webpages/fu/report_for_todo_list_de.html @@ -0,0 +1,41 @@ +[% USE HTML %] + +
    Nicht erledigte Wiedervorlagen
    + +
    + + + +

    + + + + + + + + + + + [%- FOREACH row = FOLLOW_UPS %] + + + + + + + + + [%- END %] +
     WiedervorlagedatumErstellt amBetreffReferenzErstellt von
    + + + [% HTML.escape(row.follow_up_date) %][% HTML.escape(row.created_on) %][% HTML.escape(row.subject) %][% IF row.reference_link %][% END %][% HTML.escape(row.reference) %][% IF row.reference_link %][% END %][% HTML.escape(row.created_by_name) %]
    +

    + +

    + + + +

    +
    diff --git a/templates/webpages/fu/report_for_todo_list_master.html b/templates/webpages/fu/report_for_todo_list_master.html new file mode 100644 index 000000000..585556b80 --- /dev/null +++ b/templates/webpages/fu/report_for_todo_list_master.html @@ -0,0 +1,41 @@ +[% USE HTML %] + +
    Unfinished follow-ups
    + +
    + + + +

    + + + + + + + + + + + [%- FOREACH row = FOLLOW_UPS %] + + + + + + + + + [%- END %] +
     Follow-Up DateCreated onSubjectReferenceCreated by
    + + + [% HTML.escape(row.follow_up_date) %][% HTML.escape(row.created_on) %][% HTML.escape(row.subject) %][% IF row.reference_link %][% END %][% HTML.escape(row.reference) %][% IF row.reference_link %][% END %][% HTML.escape(row.created_by_name) %]
    +

    + +

    + + + +

    +
    diff --git a/templates/webpages/fu/report_top_de.html b/templates/webpages/fu/report_top_de.html new file mode 100644 index 000000000..f6847d978 --- /dev/null +++ b/templates/webpages/fu/report_top_de.html @@ -0,0 +1,10 @@ +[%- IF OPTIONS.size %] +

    + [%- FOREACH option = OPTIONS %] + [%- option %][% UNLESS loop.last %]
    [% END %] + [%- END %] +

    +[%- END %] + +
    + diff --git a/templates/webpages/fu/report_top_master.html b/templates/webpages/fu/report_top_master.html new file mode 100644 index 000000000..f6847d978 --- /dev/null +++ b/templates/webpages/fu/report_top_master.html @@ -0,0 +1,10 @@ +[%- IF OPTIONS.size %] +

    + [%- FOREACH option = OPTIONS %] + [%- option %][% UNLESS loop.last %]
    [% END %] + [%- END %] +

    +[%- END %] + + + diff --git a/templates/webpages/fu/search_de.html b/templates/webpages/fu/search_de.html new file mode 100644 index 000000000..cff47abc9 --- /dev/null +++ b/templates/webpages/fu/search_de.html @@ -0,0 +1,122 @@ +[% USE HTML %] + + + + +
    [% title %]
    + + + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Erstellt für + +
    Betreff
    Text
    Referenz
    Wiedervorlagedatum + Von + + + Bis + + +
    Erstellt am + Von + + + Bis + + +
    In Bericht aufnehmen + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    +

    + +

    + +

    +
    + + + diff --git a/templates/webpages/fu/search_master.html b/templates/webpages/fu/search_master.html new file mode 100644 index 000000000..94309f16f --- /dev/null +++ b/templates/webpages/fu/search_master.html @@ -0,0 +1,122 @@ +[% USE HTML %] + + + + +
    [% title %]
    + +
    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Created for + +
    Subject
    Body
    Reference
    Follow-Up Date + From + + + To (time) + + +
    Created on + From + + + To (time) + + +
    Include in Report + + + + + + + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    +

    + +

    + +

    +
    + + + diff --git a/templates/webpages/login/company_logo_de.html b/templates/webpages/login/company_logo_de.html index 945539352..9a40af05d 100644 --- a/templates/webpages/login/company_logo_de.html +++ b/templates/webpages/login/company_logo_de.html @@ -44,5 +44,7 @@ + [%- todo_list %] + diff --git a/templates/webpages/login/company_logo_master.html b/templates/webpages/login/company_logo_master.html index 3c81998e2..67b15f965 100644 --- a/templates/webpages/login/company_logo_master.html +++ b/templates/webpages/login/company_logo_master.html @@ -44,5 +44,7 @@ + [%- todo_list %] + diff --git a/templates/webpages/oe/orders_footer_de.html b/templates/webpages/oe/orders_footer_de.html index dd0abf8f6..71eebb11c 100644 --- a/templates/webpages/oe/orders_footer_de.html +++ b/templates/webpages/oe/orders_footer_de.html @@ -26,6 +26,11 @@ show_empty = 1 -%] + [%- IF id && num_follow_ups %] + + [% LxERP.format_string('Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', num_follow_ups, num_due_follow_ups) %] + + [%- END %] [%- IF is_sales %] @@ -108,6 +113,7 @@ [%- IF id %] +
    [% label_workflow %]
    diff --git a/templates/webpages/oe/orders_footer_master.html b/templates/webpages/oe/orders_footer_master.html index b96ed4fd4..92ac4b5f9 100644 --- a/templates/webpages/oe/orders_footer_master.html +++ b/templates/webpages/oe/orders_footer_master.html @@ -26,6 +26,11 @@ show_empty = 1 -%] + [%- IF id && num_follow_ups %] + + [% LxERP.format_string('There are #1 unfinished follow-ups of which #2 are due.', num_follow_ups, num_due_follow_ups) %] + + [%- END %] [%- IF is_sales %] @@ -108,6 +113,7 @@ [%- IF id %] +
    [% label_workflow %]
    diff --git a/templates/webpages/oe/orders_header_de.html b/templates/webpages/oe/orders_header_de.html index 32609a112..da7f79ed0 100644 --- a/templates/webpages/oe/orders_header_de.html +++ b/templates/webpages/oe/orders_header_de.html @@ -9,11 +9,17 @@ + [%- FOREACH row = HIDDENS %] [%- END %] + + + + + diff --git a/templates/webpages/oe/orders_header_master.html b/templates/webpages/oe/orders_header_master.html index 22a78fcf2..c9a5bdc96 100644 --- a/templates/webpages/oe/orders_header_master.html +++ b/templates/webpages/oe/orders_header_master.html @@ -9,11 +9,17 @@ + [%- FOREACH row = HIDDENS %] [%- END %] + + + + +
    [% HTML.escape(title) %]
    diff --git a/templates/webpages/oe/report_for_todo_list_de.html b/templates/webpages/oe/report_for_todo_list_de.html new file mode 100644 index 000000000..21840f7f1 --- /dev/null +++ b/templates/webpages/oe/report_for_todo_list_de.html @@ -0,0 +1,29 @@ +[% USE HTML %][% USE LxERP %] + +
    Überfällige Angebote
    + +

    +

    [% HTML.escape(title) %]
    + + + + + + + + + + + [%- FOREACH row = QUOTATIONS %] + + + + + + + + + + [%- END %] +
    Datumgültig bisAuftragKundeVorgangsbezeichnungBetragBearbeiter
    [% HTML.escape(row.transdate) %][% HTML.escape(row.reqdate) %][% HTML.escape(row.quonumber) %][% HTML.escape(row.customer) %][% HTML.escape(row.transaction_description) %][% HTML.escape(LxERP.format_amount(row.amount, 2)) %][% HTML.escape(row.employee) %]
    +

    diff --git a/templates/webpages/oe/report_for_todo_list_master.html b/templates/webpages/oe/report_for_todo_list_master.html new file mode 100644 index 000000000..67d6075dd --- /dev/null +++ b/templates/webpages/oe/report_for_todo_list_master.html @@ -0,0 +1,29 @@ +[% USE HTML %][% USE LxERP %] + +
    Overdue sales quotations
    + +

    + + + + + + + + + + + + [%- FOREACH row = QUOTATIONS %] + + + + + + + + + + [%- END %] +
    DateValid untilOrderCustomerTransaction descriptionAmountEmployee
    [% HTML.escape(row.transdate) %][% HTML.escape(row.reqdate) %][% HTML.escape(row.quonumber) %][% HTML.escape(row.customer) %][% HTML.escape(row.transaction_description) %][% HTML.escape(LxERP.format_amount(row.amount, 2)) %][% HTML.escape(row.employee) %]
    +

    diff --git a/templates/webpages/todo/show_todo_list_de.html b/templates/webpages/todo/show_todo_list_de.html new file mode 100644 index 000000000..8768e9129 --- /dev/null +++ b/templates/webpages/todo/show_todo_list_de.html @@ -0,0 +1,17 @@ +[% USE HTML %] + +
    Ihre Aufgabenliste
    + + [%- IF !todo_list %] +

    + Ihre Aufgabenliste enthält momentan keine Einträge. +

    + + [%- ELSE %] + + [%- todo_list %] + + [%- END %] + + + diff --git a/templates/webpages/todo/show_todo_list_master.html b/templates/webpages/todo/show_todo_list_master.html new file mode 100644 index 000000000..ebf036357 --- /dev/null +++ b/templates/webpages/todo/show_todo_list_master.html @@ -0,0 +1,17 @@ +[% USE HTML %] + +
    Your TODO list
    + + [%- IF !todo_list %] +

    + There are no items on your TODO list at the moment. +

    + + [%- ELSE %] + + [%- todo_list %] + + [%- END %] + + + diff --git a/todo.pl b/todo.pl new file mode 120000 index 000000000..385000d1b --- /dev/null +++ b/todo.pl @@ -0,0 +1 @@ +am.pl \ No newline at end of file -- 2.20.1