1. Beliebige Notizen für Kunden und Lieferanten können angelegt werden. Solche Notizen können auf Wiedervorlage gelegt werden, was durch 2. implementiert ist.
2. Einkaufs- und Verkaufsbelege können auf Wiedervorlage gelegt werden. Wiedervorlagen können für beliebige Nutzer erstellt werden (Aufgabe an andere Nutzer deligieren). Anstehende Wiedervorlagen und abgelaufene Angebote werden auf der Startseite in einer Aufgabenliste angezeigt.
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();
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 =
# 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},
# 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},
$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;
--- /dev/null
+# 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;
$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();
$self->_get_warehouses($dbh, $params{warehouses});
}
+ if ($params{groups}) {
+ $self->_get_groups($dbh, $params{groups});
+ }
+
$main::lxdebug->leave_sub();
}
--- /dev/null
+# 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;
$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();
#======================================================================
use POSIX qw(strftime);
+use List::Util qw(sum);
use SL::AP;
+use SL::FU;
use SL::IR;
use SL::IS;
use SL::PE;
$button2 =
qq|<td><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}" onBlur=\"check_right_date_format(this)\"> $readonly</td>|;
}
+
+ my $follow_up_vc = $form->{vendor};
+ $follow_up_vc =~ s/--.*?//;
+ my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)";
+
$form->{javascript} .= qq|<script type="text/javascript" src="js/common.js"></script>|;
$form->{javascript} .= qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
+ $form->{javascript} .= qq|<script type="text/javascript" src="js/follow_up.js"></script>|;
$form->header;
$onload = qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|;
<input type=hidden name=locked value=$form->{locked}>
<input type=hidden name=title value="$title">
+<input type="hidden" name="follow_up_trans_id_1" value="| . H($form->{id}) . qq|">
+<input type="hidden" name="follow_up_trans_type_1" value="ap_transaction">
+<input type="hidden" name="follow_up_trans_info_1" value="| . H($follow_up_trans_info) . qq|">
+<input type="hidden" name="follow_up_rowcount" value="1">
+
| . ($form->{saved_message} ? qq|<p>$form->{saved_message}</p>| : "") . qq|
<table width=100%>
$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|<p>| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|</p>|;
+ }
+ }
+
print qq|
+$follow_ups_block
+
<input name=callback type=hidden value="$form->{callback}">
<input name="gldate" type="hidden" value="| . Q($form->{gldate}) . qq|">
|
print qq| <input class=submit type=submit name=action value="| . $locale->text('Post Payment') . qq|">
<input class=submit type=submit name=action value="| . $locale->text('Use As Template') . qq|">
+ <input type="button" class="submit" onclick="follow_up_window()" value="| . $locale->text('Follow-Up') . qq|">
|;
} elsif (($transdate > $closedto) && !$form->{id}) {
print qq|
#======================================================================
use POSIX qw(strftime);
+use List::Util qw(sum);
use SL::AR;
+use SL::FU;
use SL::IS;
use SL::PE;
use SL::ReportGenerator;
qq|<td><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}" onBlur=\"check_right_date_format(this)\"></td>|;
}
+ my $follow_up_vc = $form->{customer};
+ $follow_up_vc =~ s/--.*?//;
+ my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)";
+
$form->{javascript} .=
qq|<script type="text/javascript" src="js/common.js"></script>| .
- qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
+ qq|<script type="text/javascript" src="js/show_vc_details.js"></script>| .
+ qq|<script type="text/javascript" src="js/follow_up.js"></script>|;
$form->header;
$onload = qq|focus()|;
<input type=hidden name=closedto value=$form->{closedto}>
<input type=hidden name=locked value=$form->{locked}>
<input type=hidden name=title value="$title">
+<input type="hidden" name="follow_up_trans_id_1" value="| . H($form->{id}) . qq|">
+<input type="hidden" name="follow_up_trans_type_1" value="ar_transaction">
+<input type="hidden" name="follow_up_trans_info_1" value="| . H($follow_up_trans_info) . qq|">
+<input type="hidden" name="follow_up_rowcount" value="1">
| . ($form->{saved_message} ? qq|<p>$form->{saved_message}</p>| : "") . qq|
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|<p>| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|</p>|;
+ }
+ }
+
print qq|
+$follow_ups_block
+
<input name=gldate type=hidden value="| . Q($form->{gldate}) . qq|">
<input name=callback type=hidden value="$form->{callback}">
<input class=submit type=submit name=action value="| . $locale->text('Use As Template') . qq|"> |;
}
print qq|
- <input class=submit type=submit name=action value="| . $locale->text('Post Payment') . qq|"> |;
+ <input class=submit type=submit name=action value="| . $locale->text('Post Payment') . qq|">
+ <input type="button" class="submit" onclick="follow_up_window()" value="|
+ . $locale->text('Follow-Up')
+ . qq|"> |;
} else {
if ($transdate > $closedto) {
$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';
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');
--- /dev/null
+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;
#======================================================================
use POSIX qw(strftime);
+use List::Util qw(sum);
+use SL::FU;
use SL::GL;
use SL::IS;
use SL::PE;
print qq|
<body onLoad="fokus()">
+<script type="text/javascript" src="js/common.js"></script>
+<script type="text/javascript" src="js/follow_up.js"></script>
+
<form method=post name="gl" action=gl.pl>
|;
print qq|
<input type=hidden name=title value="$title">
+<input type="hidden" name="follow_up_trans_id_1" value="| . H($form->{id}) . qq|">
+<input type="hidden" name="follow_up_trans_type_1" value="gl_transaction">
+<input type="hidden" name="follow_up_trans_info_1" value="| . H($form->{id}) . qq|">
+<input type="hidden" name="follow_up_rowcount" value="1">
<table width=100%>
<tr>
$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|<p>| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|</p>|;
+ }
+ }
+
($dec) = ($form->{totaldebit} =~ /\.(\d+)/);
$dec = length $dec;
$decimalplaces = ($dec > 2) ? $dec : 2;
<input name=callback type=hidden value="$form->{callback}">
+$follow_ups_block
+
<br>
|;
<input class=submit type=submit name=action value="| . $locale->text('Delete') . qq|">|;
}
+ print qq|
+ <input type="button" class="submit" onclick="follow_up_window()" value="|
+ . $locale->text('Follow-Up')
+ . qq|"> |;
+
} else {
if ($transdate > $closedto) {
print qq|
#
#======================================================================
+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";
"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|<script type="text/javascript" src="js/show_form_details.js"></script>|;
$form->{javascript} .= qq|<script type="text/javascript" src="js/common.js"></script>|;
$form->{javascript} .= qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
+ $form->{javascript} .= qq|<script type="text/javascript" src="js/follow_up.js"></script>|;
$jsscript .= $form->write_trigger(\%myconfig, 2, "orddate", "BL", "trigger_orddate", "quodate", "BL", "trigger_quodate");
$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|
+ <tr>
+ <td colspan="2">| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|</td>
+ </tr>
+|;
+ }
+ }
+
print qq|
<tr>
<td colspan=$colspan>
<td>$notes</td>
<td>$intnotes</td>
</tr>
+ $follow_ups_block
</table>
</td>
<td colspan=2 align=right width=100%>
}
print qq|<input class=submit type=submit name=action value="|
. $locale->text('Use As Template') . qq|">
+ <input type="button" class="submit" onclick="follow_up_window()" value="|
+ . $locale->text('Follow-Up')
+ . qq|">
|;
}
#
#======================================================================
+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";
}
$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')|
<script type="text/javascript" src="js/delivery_customer_selection.js"></script>
<script type="text/javascript" src="js/vendor_selection.js"></script>
<script type="text/javascript" src="js/calculate_qty.js"></script>
+<script type="text/javascript" src="js/follow_up.js"></script>
<form method="post" name="invoice" action="$form->{script}">
| ;
print qq|
+<input type="hidden" name="follow_up_trans_id_1" value="| . H($form->{id}) . qq|">
+<input type="hidden" name="follow_up_trans_type_1" value="sales_invoice">
+<input type="hidden" name="follow_up_trans_info_1" value="| . H($follow_up_trans_info) . qq|">
+<input type="hidden" name="follow_up_rowcount" value="1">
+
<input type="hidden" name="lizenzen" value="$lizenzen">
<div class="listtop" width="100%">$form->{title}</div>
$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|
+ <tr>
+ <td colspan="2">| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|</td>
+ </tr>
+|;
+ }
+ }
+
print qq|
<tr>
<td>
<td><select name="payment_id" onChange="if (this.value) set_duedate(['payment_id__' + this.value],['duedate'])">$payment
</select></td>
</tr>
+ $follow_ups_block
</table>
</td>
<td>
print qq|<input class="submit" type="submit" name="action" value="|
. $locale->text('Use As Template') . qq|">
|;
- if ($form->{id} && !($form->{type} eq "credit_note")) {
- print qq|
+ if ($form->{id} && !($form->{type} eq "credit_note")) {
+ print qq|
<input class="submit" type="submit" name="action" value="|
. $locale->text('Credit Note') . qq|">
|;
- }
+ }
if ($form->{radier}) {
print qq|
<input class="submit" type="submit" name="action" value="|
. $locale->text('Delete') . qq|">
|;
- }
+ }
if ($invdate > $closedto) {
|;
}
+ print qq|
+ <input type="button" class="submit" onclick="follow_up_window()" value="|
+ . $locale->text('Follow-Up')
+ . qq|">|;
+
} else {
if ($invdate > $closedto) {
print qq|<input class="submit" type="submit" name="action" id="update_button" value="|
use SL::Form;
require "bin/mozilla/common.pl";
+require "bin/mozilla/todo.pl";
# This is required because the am.pl in the root directory
# is not scanned by locales.pl:
$locale = new Locale $myconfig{countrycode}, "login" if ($language ne $myconfig{countrycode});
+ $form->{todo_list} = create_todo_list();
+
$form->{stylesheet} = $myconfig{stylesheet};
$form->{title} = $locale->text('About');
exit;
}
+
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";
$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')"
$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|<script type="text/javascript" src="js/show_form_details.js"></script>|;
$form->{javascript} .= qq|<script type="text/javascript" src="js/show_history.js"></script>|;
$form->{javascript} .= qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
$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;
+}
+
--- /dev/null
+#=====================================================================
+# 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;
--- /dev/null
+am.pl
\ No newline at end of file
--- /dev/null
+function follow_up_window() {
+ var width = 900;
+ var height = 700;
+ var parm = centerParms(width, height) + ",width=" + width + ",height=" + height + ",status=yes,scrollbars=yes";
+
+ url = "fu.pl?" +
+ "action=add" + "&" +
+ "POPUP_MODE=1";
+
+ var trans_rowcount = document.getElementsByName("follow_up_rowcount");
+
+ if (typeof trans_rowcount != "undefined") {
+ for (i = 1; i <= trans_rowcount[0].value; i++) {
+ var trans_id = document.getElementsByName("follow_up_trans_id_" + i);
+ var trans_type = document.getElementsByName("follow_up_trans_type_" + i);
+ var trans_info = document.getElementsByName("follow_up_trans_info_" + i);
+
+ url += "&" +
+ "trans_id_" + i + "=" + escape_more(typeof trans_id != "undefined" ? trans_id[0].value : "") + "&" +
+ "trans_type_" + i + "=" + escape_more(typeof trans_type != "undefined" ? trans_type[0].value : "") + "&" +
+ "trans_info_" + i + "=" + escape_more(typeof trans_info != "undefined" ? trans_info[0].value : "");
+ }
+
+ url += "&trans_rowcount=" + escape_more(trans_rowcount[0].value);
+ }
+
+ //alert(url);
+ window.open(url, "_new_generic", parm);
+}
'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',
'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',
'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)',
'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.',
'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!',
'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',
'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',
'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',
'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',
'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:',
'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',
'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',
'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',
'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',
'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',
'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.',
'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',
'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',
'Reqdate' => 'Lieferdatum',
'Request for Quotation' => 'Anfrage',
'Request for Quotations' => 'Anfragen',
+ 'Request quotation' => 'Preisanfrage',
'Required by' => 'Lieferdatum',
'Restore Dataset' => 'Datenbank wiederherstellen',
'Revenue' => 'Erlöskonto',
'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',
'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',
'Subtotal' => 'Zwischensumme',
'Superuser name' => 'Datenbankadministrator',
'System' => 'System',
+ 'TODO list' => 'Aufgabenliste',
'TOP100' => 'Top 100',
'Tax' => 'Steuer',
'Tax Consultant' => 'Steuerberater/-in',
'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:',
'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.',
'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.',
'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.',
'UStVa' => 'UStVa',
'UStVa Einstellungen' => 'UStVa Einstellungen',
'Unbalanced Ledger' => 'Bilanzfehler',
+ 'Unfinished follow-ups' => 'Nicht erledigte Wiedervorlagen',
'Unit' => 'Einheit',
'Unit of measure' => 'Maßeinheit',
'Units' => 'Einheiten',
'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',
'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',
$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',
'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.',
'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',
'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',
'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',
'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.',
'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.',
$self->{texts} = {
'ADDED' => 'Hinzugefügt',
'AP' => 'Einkauf',
+ 'AP Transaction' => 'Kreditorenbuchung',
'AR' => 'Verkauf',
+ 'AR Transaction' => 'Debitorenbuchung',
'AR Transaction (abbreviation)' => 'D',
'AR Transactions' => 'Debitorenbuchungen',
'Account' => 'Konto',
'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',
'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',
'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',
'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.',
'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!',
$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',
'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',
'Date' => 'Datum',
'Dependency loop detected:' => 'Schleife in den Abhängigkeiten entdeckt:',
'Directory' => 'Verzeichnis',
+ 'Dunning' => 'Mahnung',
'E-mail' => 'eMail',
'ELSE' => 'Zusatz',
'Edit Customer' => 'Kunde editieren',
'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',
'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',
'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',
'*/' => '*/',
'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',
'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',
'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',
'Feb' => 'Feb',
'February' => 'Februar',
'File' => 'Datei',
+ 'GL Transaction' => 'Dialogbuchung',
'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr',
'Group' => 'Warengruppe',
'History' => 'Historie',
'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',
'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.',
'Value' => 'Wert',
'Variable' => 'Variable',
+ 'Vendor' => 'Lieferant',
+ 'Vendor Invoice' => 'Einkaufsrechnung',
'Vendor Number' => 'Lieferantennummer',
'Vendor details' => 'Lieferantendetails',
'Yes' => 'Ja',
--- /dev/null
+$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;
$self->{texts} = {
'ADDED' => 'Hinzugefügt',
'AP' => 'Einkauf',
+ 'AP Transaction' => 'Kreditorenbuchung',
'AR' => 'Verkauf',
+ 'AR Transaction' => 'Debitorenbuchung',
'Account' => 'Konto',
'Add General Ledger Transaction' => 'Dialogbuchen',
'Address' => 'Adresse',
'Credit Note' => 'Gutschrift',
'Credit Tax' => 'Umsatzsteuer',
'Credit Tax Account' => 'Umsatzsteuerkonto',
+ 'Customer' => 'Kunde',
'Customer Number' => 'Kundennummer',
'Customer details' => 'Kundendetails',
'DATEV Export' => 'DATEV-Export',
'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!',
'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',
'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',
'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.',
'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.',
'*/' => '*/',
'ADDED' => 'Hinzugefügt',
'AP' => 'Einkauf',
+ 'AP Transaction' => 'Kreditorenbuchung',
'AR' => 'Verkauf',
+ 'AR Transaction' => 'Debitorenbuchung',
'Accounting Menu' => 'Kontoverwaltung',
'Active' => 'Aktiv',
'Add ' => 'Hinzufügen',
'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',
'Directory' => 'Verzeichnis',
'Discount' => 'Rabatt',
'Drawing' => 'Zeichnung',
+ 'Dunning' => 'Mahnung',
'E-mail' => 'eMail',
'E-mail address missing!' => 'E-Mail-Adresse fehlt!',
'EAN' => 'EAN',
'February' => 'Februar',
'File' => 'Datei',
'From' => 'Von',
+ 'GL Transaction' => 'Dialogbuchung',
'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr',
'Group' => 'Warengruppe',
'History' => 'Historie',
'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',
'Updated' => 'Erneuert am',
'Value' => 'Wert',
'Variable' => 'Variable',
+ 'Vendor' => 'Lieferant',
+ 'Vendor Invoice' => 'Einkaufsrechnung',
'Vendor Number' => 'Lieferantennummer',
'Vendor details' => 'Lieferantendetails',
'Weight' => 'Gewicht',
'*/' => '*/',
'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',
'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',
'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',
'Feb' => 'Feb',
'February' => 'Februar',
'File' => 'Datei',
+ 'GL Transaction' => 'Dialogbuchung',
'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr',
'Group' => 'Warengruppe',
'History' => 'Historie',
'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',
'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.',
'Value' => 'Wert',
'Variable' => 'Variable',
+ 'Vendor' => 'Lieferant',
+ 'Vendor Invoice' => 'Einkaufsrechnung',
'Vendor Number' => 'Lieferantennummer',
'Vendor details' => 'Lieferantendetails',
'Yes' => 'Ja',
'*/' => '*/',
'ADDED' => 'Hinzugefügt',
'AP' => 'Einkauf',
+ 'AP Transaction' => 'Kreditorenbuchung',
'AR' => 'Verkauf',
+ 'AR Transaction' => 'Debitorenbuchung',
'Account' => 'Konto',
'Add Purchase Order' => 'Lieferantenauftrag erfassen',
'Add Quotation' => 'Angebot erfassen',
'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.',
'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',
'Feb' => 'Feb',
'February' => 'Februar',
'File' => 'Datei',
+ 'Follow-Up' => 'Wiedervorlage',
+ 'GL Transaction' => 'Dialogbuchung',
'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr',
'Group' => 'Warengruppe',
'History' => 'Historie',
'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',
'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',
'Value' => 'Wert',
'Variable' => 'Variable',
'Vendor' => 'Lieferant',
+ 'Vendor Invoice' => 'Einkaufsrechnung',
'Vendor Number' => 'Lieferantennummer',
'Vendor details' => 'Lieferantendetails',
'Vendor missing!' => 'Lieferant fehlt!',
'*/' => '*/',
'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',
'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!',
'Feb' => 'Feb',
'February' => 'Februar',
'File' => 'Datei',
+ 'Follow-Up' => 'Wiedervorlage',
+ 'GL Transaction' => 'Dialogbuchung',
'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr',
'Group' => 'Warengruppe',
'History' => 'Historie',
'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',
'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',
'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.',
$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',
'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\'.',
'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',
};
'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;
'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',
'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',
'Price Factors' => 'Preisfaktoren',
'Pricegroups' => 'Preisgruppen',
'Printer' => 'Drucker',
+ 'Productivity' => 'Produktivität',
'Programm' => 'Programm',
'Projects' => 'Projekte',
'Projecttransactions' => 'Projektbuchungen',
'Service units' => 'Dienstleistungseinheiten',
'Services' => 'Dienstleistungen',
'Shipto' => 'Lieferanschriften',
+ 'Show TODO list' => 'Aufgabenliste anzeigen',
'Stylesheet' => 'Stilvorlage',
'Subject' => 'Betreff',
'System' => 'System',
'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',
'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',
'Price Factors' => 'Preisfaktoren',
'Pricegroups' => 'Preisgruppen',
'Printer' => 'Drucker',
+ 'Productivity' => 'Produktivität',
'Programm' => 'Programm',
'Projects' => 'Projekte',
'Projecttransactions' => 'Projektbuchungen',
'Service units' => 'Dienstleistungseinheiten',
'Services' => 'Dienstleistungen',
'Shipto' => 'Lieferanschriften',
+ 'Show TODO list' => 'Aufgabenliste anzeigen',
'Stylesheet' => 'Stilvorlage',
'Subject' => 'Betreff',
'System' => 'System',
'*/' => '*/',
'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',
'Description' => 'Beschreibung',
'Directory' => 'Verzeichnis',
'Discount' => 'Rabatt',
+ 'Dunning' => 'Mahnung',
'E-mail' => 'eMail',
'E-mail address missing!' => 'E-Mail-Adresse fehlt!',
'EK' => 'EK',
'February' => 'Februar',
'File' => 'Datei',
'From' => 'Von',
+ 'GL Transaction' => 'Dialogbuchung',
'General ledger and cash' => 'Finanzbuchhaltung und Zahlungsverkehr',
'Group' => 'Warengruppe',
'History' => 'Historie',
'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',
'Value' => 'Wert',
'Variable' => 'Variable',
'Vendor' => 'Lieferant',
+ 'Vendor Invoice' => 'Einkaufsrechnung',
'Vendor Number' => 'Lieferantennummer',
'Vendor details' => 'Lieferantendetails',
'Vendor missing!' => 'Lieferant fehlt!',
'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',
--- /dev/null
+$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;
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
--- /dev/null
+-- @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)
+);
<li><a href="#" rel="shipto">Lieferadresse</a></li>
<li><a href="#" rel="contacts">Ansprechpartner</a></li>
<li><a href="#" rel="deliveries">Lieferungen</a></li>
+<li><a href="#" rel="vcnotes">Bemerkungen</a></li>
[%- IF CUSTOM_VARIABLES.size %]
<li><a href="#" rel="custom_variables">Benutzerdefinierte Variablen</a></li>
[%- END %]
</table>
<br style="clear: left" /></div>
+<div id="vcnotes" class="tabcontent">
+
+ [%- IF NOTES && NOTES.size %]
+ <p>
+ <table>
+ <tr>
+ <th class="listheading">Löschen</th>
+ <th class="listheading">Betreff</th>
+ <th class="listheading">Erstellt am</th>
+ <th class="listheading">Erstellt von</th>
+ <th class="listheading">Wiedervorlagedatum</th>
+ <th class="listheading">Wiedervorlage für</th>
+ <th class="listheading">Wiedervorlage erledigt</th>
+ </tr>
+
+ [%- FOREACH row = NOTES %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <input type="hidden" name="NOTE_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+ <td>[% UNLESS NOTE_id && (NOTE_id == row.id) %]<input type="checkbox" name="NOTE_delete_[% loop.count %]" value="1">[% END %]</td>
+ <td><a href="ct.pl?action=edit&db=[% HTML.escape(db) %]&id=[% HTML.escape(id) %]&edit_note_id=[% HTML.escape(row.id) %]">[% HTML.escape(row.subject) %]</a></td>
+ <td>[% HTML.escape(row.created_on) %]</td>
+ <td>[% IF row.created_by_name %][% HTML.escape(row.created_by_name) %][% ELSE %][% HTML.escape(row.created_by_login) %][% END %]</td>
+ <td>[% HTML.escape(row.follow_up_date) %]</td>
+ <td>[% IF row.created_for_name %][% HTML.escape(row.created_for_name) %][% ELSE %][% HTML.escape(row.created_for_login) %][% END %]</td>
+ <td>[% IF row.follow_up_date %][% IF row.follow_up_done %]Ja[% ELSE %]Nein[% END %][% END %]</td>
+ </tr>
+ [%- END %]
+ <input type="hidden" name="NOTES_rowcount" value="[% NOTES.size %]">
+ </table>
+ </p>
+ [%- END %]
+
+ <div class="listtop">[% IF NOTE_id %]Notiz bearbeiten[% ELSE %]Notiz erfassen[% END %]</div>
+
+ <input type="hidden" name="NOTE_id" value="[% HTML.escape(NOTE_id) %]">
+ <input type="hidden" name="FU_id" value="[% HTML.escape(FU_id) %]">
+
+ <p>
+ <table>
+ <tr>
+ <td valign="right">Betreff</td>
+ <td><input name="NOTE_subject" value="[% HTML.escape(NOTE_subject) %]" size="50"></td>
+ </tr>
+
+ <tr>
+ <td valign="right" align="top">Text</td>
+ <td align="top"><textarea cols="50" rows="10" name="NOTE_body">[% HTML.escape(NOTE_body) %]</textarea></td>
+ </tr>
+
+ <tr>
+ <td valign="right">Wiedervorlage am</td>
+ <td>
+ <input name="FU_date" id="FU_date" value="[% HTML.escape(FU_date) %]" size="12">
+ <input type="button" name="FU_date_button" id="FU_date_trigger" value="?">
+ für
+ <select name="FU_created_for_user">
+ [%- FOREACH row = ALL_EMPLOYEES %]
+ <option value="[% HTML.escape(row.id) %]"[% IF (NOTE_id && (row.id == FU_created_for_user)) || (row.login == login) %] selected[% END %]>
+ [%- IF row.name %][%- HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td></td>
+ <td>
+ <input type="checkbox" name="FU_done" id="FU_done" value="1"[% IF FU_done %] checked[% END %]>
+ <label for="FU_done">Wiedervorlage erledigt</label>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+ <br style="clear: left" />
+</div>
+
+<script type="text/javascript">
+ <!--
+ Calendar.setup({ inputField : "FU_date", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "FU_date_trigger" });
+ -->
+</script>
+
[%- IF CUSTOM_VARIABLES.size %]
<div id="custom_variables" class="tabcontent">
<li><a href="#" rel="shipto"><translate>Shipping Address</translate></a></li>
<li><a href="#" rel="contacts">Ansprechpartner</a></li>
<li><a href="#" rel="deliveries"><translate>Lieferungen</translate></a></li>
+<li><a href="#" rel="vcnotes"><translate>Notes</translate></a></li>
[%- IF CUSTOM_VARIABLES.size %]
<li><a href="#" rel="custom_variables"><translate>Custom Variables</translate></a></li>
[%- END %]
</table>
<br style="clear: left" /></div>
+<div id="vcnotes" class="tabcontent">
+
+ [%- IF NOTES && NOTES.size %]
+ <p>
+ <table>
+ <tr>
+ <th class="listheading"><translate>Delete</translate></th>
+ <th class="listheading"><translate>Subject</translate></th>
+ <th class="listheading"><translate>Created on</translate></th>
+ <th class="listheading"><translate>Created by</translate></th>
+ <th class="listheading"><translate>Follow-Up Date</translate></th>
+ <th class="listheading"><translate>Follow-Up for</translate></th>
+ <th class="listheading"><translate>Follow-Up done</translate></th>
+ </tr>
+
+ [%- FOREACH row = NOTES %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <input type="hidden" name="NOTE_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+ <td>[% UNLESS NOTE_id && (NOTE_id == row.id) %]<input type="checkbox" name="NOTE_delete_[% loop.count %]" value="1">[% END %]</td>
+ <td><a href="ct.pl?action=edit&db=[% HTML.escape(db) %]&id=[% HTML.escape(id) %]&edit_note_id=[% HTML.escape(row.id) %]">[% HTML.escape(row.subject) %]</a></td>
+ <td>[% HTML.escape(row.created_on) %]</td>
+ <td>[% IF row.created_by_name %][% HTML.escape(row.created_by_name) %][% ELSE %][% HTML.escape(row.created_by_login) %][% END %]</td>
+ <td>[% HTML.escape(row.follow_up_date) %]</td>
+ <td>[% IF row.created_for_name %][% HTML.escape(row.created_for_name) %][% ELSE %][% HTML.escape(row.created_for_login) %][% END %]</td>
+ <td>[% IF row.follow_up_date %][% IF row.follow_up_done %]<translate>Yes</translate>[% ELSE %]<translate>No</translate>[% END %][% END %]</td>
+ </tr>
+ [%- END %]
+ <input type="hidden" name="NOTES_rowcount" value="[% NOTES.size %]">
+ </table>
+ </p>
+ [%- END %]
+
+ <div class="listtop">[% IF NOTE_id %]<translate>Edit note</translate>[% ELSE %]<translate>Add note</translate>[% END %]</div>
+
+ <input type="hidden" name="NOTE_id" value="[% HTML.escape(NOTE_id) %]">
+ <input type="hidden" name="FU_id" value="[% HTML.escape(FU_id) %]">
+
+ <p>
+ <table>
+ <tr>
+ <td valign="right"><translate>Subject</translate></td>
+ <td><input name="NOTE_subject" value="[% HTML.escape(NOTE_subject) %]" size="50"></td>
+ </tr>
+
+ <tr>
+ <td valign="right" align="top"><translate>Body</translate></td>
+ <td align="top"><textarea cols="50" rows="10" name="NOTE_body">[% HTML.escape(NOTE_body) %]</textarea></td>
+ </tr>
+
+ <tr>
+ <td valign="right"><translate>Follow-Up On</translate></td>
+ <td>
+ <input name="FU_date" id="FU_date" value="[% HTML.escape(FU_date) %]" size="12">
+ <input type="button" name="FU_date_button" id="FU_date_trigger" value="?">
+ <translate>for</translate>
+ <select name="FU_created_for_user">
+ [%- FOREACH row = ALL_EMPLOYEES %]
+ <option value="[% HTML.escape(row.id) %]"[% IF (NOTE_id && (row.id == FU_created_for_user)) || (row.login == login) %] selected[% END %]>
+ [%- IF row.name %][%- HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td></td>
+ <td>
+ <input type="checkbox" name="FU_done" id="FU_done" value="1"[% IF FU_done %] checked[% END %]>
+ <label for="FU_done"><translate>Follow-Up done</translate></label>
+ </td>
+ </tr>
+ </table>
+ </p>
+
+ <br style="clear: left" />
+</div>
+
+<script type="text/javascript">
+ <!--
+ Calendar.setup({ inputField : "FU_date", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "FU_date_trigger" });
+ -->
+</script>
+
[%- IF CUSTOM_VARIABLES.size %]
<div id="custom_variables" class="tabcontent">
--- /dev/null
+[% USE HTML %]<body onload="on_load();">
+
+ <script type="text/javascript">
+ <!--
+ function on_load() {
+ Calendar.setup({ inputField : "follow_up_date", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_trigger" });
+ document.Form.subject.focus();
+ }
+ -->
+ </script>
+
+ <form action="fu.pl" method="post" name="Form">
+
+ [%- IF SAVED_MESSAGE %]
+ <p>[% SAVED_MESSAGE %]</p>
+ [%- END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="POPUP_MODE" value="[% HTML.escape(POPUP_MODE) %]">
+
+ <p>
+ <table>
+ <tr>
+ <td valign="top">Wiedervorlage für Benutzer</td>
+ <td valign="top">
+ <select name="created_for_user">
+ [%- FOREACH row = EMPLOYEES %]
+ <option value="[% HTML.escape(row.id) %]"[% IF created_for_user == row.id %] selected[% END %]>
+ [%- IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td valign="right">Wiedervorlagedatum</td>
+ <td>
+ <input name="follow_up_date" id="follow_up_date" value="[% HTML.escape(follow_up_date) %]" size="12">
+ <input type="button" name="follow_up_date_button" id="follow_up_date_trigger" value="?">
+ </tr>
+
+ <tr>
+ <td valign="right">Betreff</td>
+ <td><input name="subject" value="[% HTML.escape(subject) %]" size="50"></td>
+ </tr>
+
+ <tr>
+ <td valign="right" align="top">Text</td>
+ <td align="top"><textarea cols="50" rows="10" name="body">[% HTML.escape(body) %]</textarea></td>
+ </tr>
+ </table>
+ </p>
+
+ <p>
+ <input type="hidden" name="action" value="dispatcher">
+ <input type="submit" class="submit" name="action_save" value="Speichern">
+ [%- IF id %]
+ <input type="submit" class="submit" name="action_finish" value="Abschließen">
+ <input type="submit" class="submit" name="action_delete" value="Löschen">
+ [%- END %]
+ [%- IF POPUP_MODE %]
+ <input type="submit" class="submit" onclick="window.close()" value="Abbrechen">
+ [%- END %]
+ </p>
+
+ [%- IF POPUP_MODE %]
+ [%- IF FOLLOW_UPS.size %]
+ <hr height="3" noshade>
+
+ <div class="listtop">Noch nicht erledigte Wiedervorlagen für dieses Dokument</div>
+
+ <p>
+ <table>
+ <tr>
+ <th class="listheading">Wiedervorlagedatum</th>
+ <th class="listheading">Betreff</th>
+ <th class="listheading">Erstellt von</th>
+ <th class="listheading">Wiedervorlage für</th>
+ </tr>
+
+ [%- FOREACH row = FOLLOW_UPS %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <td valign="top">[% HTML.escape(row.follow_up_date) %]</td>
+ <td valign="top"><a href="fu.pl?action=edit&id=[% HTML.escape(row.id) %][% IF POPUP_MODE %]&POPUP_MODE=1[% END %]">[% HTML.escape(row.subject) %]</a></td>
+ <td valign="top">[% HTML.escape(row.created_by_name) %]</td>
+ <td valign="top">[% HTML.escape(row.created_for_user_name) %]</td>
+ </tr>
+ [%- END %]
+ </table>
+ </p>
+ [%- END %]
+ [%- END %]
+
+ [%- FOREACH row = LINKS %]
+ <input type="hidden" name="trans_id_[% loop.count %]" value="[% HTML.escape(row.trans_id) %]">
+ <input type="hidden" name="trans_type_[% loop.count %]" value="[% HTML.escape(row.trans_type) %]">
+ <input type="hidden" name="trans_info_[% loop.count %]" value="[% HTML.escape(row.trans_info) %]">
+ [%- END %]
+
+ <input type="hidden" name="trans_rowcount" value="[% LINKS.size %]">
+ </form>
+
+</body>
+</html>
--- /dev/null
+[% USE HTML %]<body onload="on_load();">
+
+ <script type="text/javascript">
+ <!--
+ function on_load() {
+ Calendar.setup({ inputField : "follow_up_date", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_trigger" });
+ document.Form.subject.focus();
+ }
+ -->
+ </script>
+
+ <form action="fu.pl" method="post" name="Form">
+
+ [%- IF SAVED_MESSAGE %]
+ <p>[% SAVED_MESSAGE %]</p>
+ [%- END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <input type="hidden" name="id" value="[% HTML.escape(id) %]">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="POPUP_MODE" value="[% HTML.escape(POPUP_MODE) %]">
+
+ <p>
+ <table>
+ <tr>
+ <td valign="top"><translate>Follow-Up for user</translate></td>
+ <td valign="top">
+ <select name="created_for_user">
+ [%- FOREACH row = EMPLOYEES %]
+ <option value="[% HTML.escape(row.id) %]"[% IF created_for_user == row.id %] selected[% END %]>
+ [%- IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td valign="right"><translate>Follow-Up Date</translate></td>
+ <td>
+ <input name="follow_up_date" id="follow_up_date" value="[% HTML.escape(follow_up_date) %]" size="12">
+ <input type="button" name="follow_up_date_button" id="follow_up_date_trigger" value="?">
+ </tr>
+
+ <tr>
+ <td valign="right"><translate>Subject</translate></td>
+ <td><input name="subject" value="[% HTML.escape(subject) %]" size="50"></td>
+ </tr>
+
+ <tr>
+ <td valign="right" align="top"><translate>Body</translate></td>
+ <td align="top"><textarea cols="50" rows="10" name="body">[% HTML.escape(body) %]</textarea></td>
+ </tr>
+ </table>
+ </p>
+
+ <p>
+ <input type="hidden" name="action" value="dispatcher">
+ <input type="submit" class="submit" name="action_save" value="<translate>Save</translate>">
+ [%- IF id %]
+ <input type="submit" class="submit" name="action_finish" value="<translate>Finish</translate>">
+ <input type="submit" class="submit" name="action_delete" value="<translate>Delete</translate>">
+ [%- END %]
+ [%- IF POPUP_MODE %]
+ <input type="submit" class="submit" onclick="window.close()" value="<translate>Cancel</translate>">
+ [%- END %]
+ </p>
+
+ [%- IF POPUP_MODE %]
+ [%- IF FOLLOW_UPS.size %]
+ <hr height="3" noshade>
+
+ <div class="listtop"><translate>Existing pending follow-ups for this item</translate></div>
+
+ <p>
+ <table>
+ <tr>
+ <th class="listheading"><translate>Follow-Up Date</translate></th>
+ <th class="listheading"><translate>Subject</translate></th>
+ <th class="listheading"><translate>Created by</translate></th>
+ <th class="listheading"><translate>Follow-up for</translate></th>
+ </tr>
+
+ [%- FOREACH row = FOLLOW_UPS %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <td valign="top">[% HTML.escape(row.follow_up_date) %]</td>
+ <td valign="top"><a href="fu.pl?action=edit&id=[% HTML.escape(row.id) %][% IF POPUP_MODE %]&POPUP_MODE=1[% END %]">[% HTML.escape(row.subject) %]</a></td>
+ <td valign="top">[% HTML.escape(row.created_by_name) %]</td>
+ <td valign="top">[% HTML.escape(row.created_for_user_name) %]</td>
+ </tr>
+ [%- END %]
+ </table>
+ </p>
+ [%- END %]
+ [%- END %]
+
+ [%- FOREACH row = LINKS %]
+ <input type="hidden" name="trans_id_[% loop.count %]" value="[% HTML.escape(row.trans_id) %]">
+ <input type="hidden" name="trans_type_[% loop.count %]" value="[% HTML.escape(row.trans_type) %]">
+ <input type="hidden" name="trans_info_[% loop.count %]" value="[% HTML.escape(row.trans_info) %]">
+ [%- END %]
+
+ <input type="hidden" name="trans_rowcount" value="[% LINKS.size %]">
+ </form>
+
+</body>
+</html>
--- /dev/null
+<body onload="window.close()"></body></html>
--- /dev/null
+<body onload="window.close()"></body></html>
--- /dev/null
+[% USE HTML %]
+<body>
+
+ [%- IF SAVED_MESSAGE %]
+ <p>[% SAVED_MESSAGE %]</p>
+ [%- END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <p>Erlaube den folgenden Benutzern Zugriff auf meine Wiedervorlagen:</p>
+
+ <form action="fu.pl" method="post" name="Form">
+ <p>
+ <table>
+ <tr>
+ <td class="listheading">Benutzer</td>
+ <td class="listheading">Zugriff erlauben</td>
+ </tr>
+
+ [%- FOREACH row = EMPLOYEES %]
+ [%- UNLESS row.login == login %]
+ <input type="hidden" name="employee_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+
+ <tr class="listrow[% loop.count % 2 %]">
+ <td>[% IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]</td>
+ <td>
+ <input type="radio" id="access_[% HTML.escape(row.id) %]_yes" name="access_[% HTML.escape(row.id) %]" value="1"[% IF row.access %] checked[% END %]>
+ <label for="access_[% HTML.escape(row.id) %]_yes">Ja</label>
+ <input type="radio" id="access_[% HTML.escape(row.id) %]_no" name="access_[% HTML.escape(row.id) %]" value=""[% UNLESS row.access %] checked[% END %]>
+ <label for="access_[% HTML.escape(row.id) %]_no">Nein</label>
+ </td>
+ </tr>
+ [%- END %]
+ [%- END %]
+ </table>
+ </p>
+
+ <input type="hidden" name="rowcount" value="[% EMPLOYEES.size %]">
+ <input type="hidden" name="save_nextsub" value="save_access_rights">
+
+ <p>
+ <input type="submit" class="submit" name="action" value="Speichern">
+ </p>
+
+ </form>
+</body>
+</html>
--- /dev/null
+[% USE HTML %]
+<body>
+
+ [%- IF SAVED_MESSAGE %]
+ <p>[% SAVED_MESSAGE %]</p>
+ [%- END %]
+
+ <div class="listtop">[% title %]</div>
+
+ <p><translate>Allow the following users access to my follow-ups:</translate></p>
+
+ <form action="fu.pl" method="post" name="Form">
+ <p>
+ <table>
+ <tr>
+ <td class="listheading"><translate>User</translate></td>
+ <td class="listheading"><translate>Allow access</translate></td>
+ </tr>
+
+ [%- FOREACH row = EMPLOYEES %]
+ [%- UNLESS row.login == login %]
+ <input type="hidden" name="employee_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+
+ <tr class="listrow[% loop.count % 2 %]">
+ <td>[% IF row.name %][% HTML.escape(row.name) %] ([% HTML.escape(row.login) %])[% ELSE %][% HTML.escape(row.login) %][% END %]</td>
+ <td>
+ <input type="radio" id="access_[% HTML.escape(row.id) %]_yes" name="access_[% HTML.escape(row.id) %]" value="1"[% IF row.access %] checked[% END %]>
+ <label for="access_[% HTML.escape(row.id) %]_yes"><translate>Yes</translate></label>
+ <input type="radio" id="access_[% HTML.escape(row.id) %]_no" name="access_[% HTML.escape(row.id) %]" value=""[% UNLESS row.access %] checked[% END %]>
+ <label for="access_[% HTML.escape(row.id) %]_no"><translate>No</translate></label>
+ </td>
+ </tr>
+ [%- END %]
+ [%- END %]
+ </table>
+ </p>
+
+ <input type="hidden" name="rowcount" value="[% EMPLOYEES.size %]">
+ <input type="hidden" name="save_nextsub" value="save_access_rights">
+
+ <p>
+ <input type="submit" class="submit" name="action" value="<translate>Save</translate>">
+ </p>
+
+ </form>
+</body>
+</html>
--- /dev/null
+[% USE HTML%]
+ <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+ [%- FOREACH item = HIDDEN %]
+ <input type="hidden" name="[% HTML.escape(item.key) %]" value="[% HTML.escape(item.value) %]">
+ [%- END %]
+
+ <p>
+ Wiedervorlagen<br>
+ <input type="hidden" name="action" value="dispatcher">
+ <input type="submit" name="action_finish" value="Abschließen">
+ <input type="submit" name="action_delete" value="Löschen">
+ </p>
+</form>
--- /dev/null
+[% USE HTML%]
+ <input type="hidden" name="rowcount" value="[% HTML.escape(rowcount) %]">
+ [%- FOREACH item = HIDDEN %]
+ <input type="hidden" name="[% HTML.escape(item.key) %]" value="[% HTML.escape(item.value) %]">
+ [%- END %]
+
+ <p>
+ <translate>Follow-Ups</translate><br>
+ <input type="hidden" name="action" value="dispatcher">
+ <input type="submit" name="action_finish" value="<translate>Finish</translate>">
+ <input type="submit" name="action_delete" value="<translate>Delete</translate>">
+ </p>
+</form>
--- /dev/null
+[% USE HTML %]
+
+<div class="listtop">Nicht erledigte Wiedervorlagen</div>
+
+<form action="fu.pl" method="post" name="TODOFollowUpsForm">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="rowcount" value="[% FOLLOW_UPS.size %]">
+
+ <p>
+ <table width="100%">
+ <tr>
+ <td class="listheading"> </td>
+ <td class="listheading">Wiedervorlagedatum</td>
+ <td class="listheading">Erstellt am</td>
+ <td class="listheading">Betreff</td>
+ <td class="listheading">Referenz</td>
+ <td class="listheading">Erstellt von</td>
+ </tr>
+
+ [%- FOREACH row = FOLLOW_UPS %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <td>
+ <input type="hidden" name="follow_up_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+ <input type="checkbox" name="selected_[% loop.count %]" value="1">
+ </td>
+ <td>[% HTML.escape(row.follow_up_date) %]</td>
+ <td>[% HTML.escape(row.created_on) %]</td>
+ <td><a href="[% edit_url %][% HTML.escape(row.id) %]">[% HTML.escape(row.subject) %]</a></td>
+ <td>[% IF row.reference_link %]<a href="[% row.reference_link %]">[% END %][% HTML.escape(row.reference) %][% IF row.reference_link %]</a>[% END %]</td>
+ <td>[% HTML.escape(row.created_by_name) %]</td>
+ </tr>
+ [%- END %]
+ </table>
+ </p>
+
+ <p>
+ <input type="hidden" name="action" value="dispatcher">
+ <input type="submit" class="submit" name="action_finish" value="Abschließen">
+ <input type="submit" class="submit" name="action_delete" value="Löschen">
+ </p>
+</form>
--- /dev/null
+[% USE HTML %]
+
+<div class="listtop"><translate>Unfinished follow-ups</translate></div>
+
+<form action="fu.pl" method="post" name="TODOFollowUpsForm">
+ <input type="hidden" name="callback" value="[% HTML.escape(callback) %]">
+ <input type="hidden" name="rowcount" value="[% FOLLOW_UPS.size %]">
+
+ <p>
+ <table width="100%">
+ <tr>
+ <td class="listheading"> </td>
+ <td class="listheading"><translate>Follow-Up Date</translate></td>
+ <td class="listheading"><translate>Created on</translate></td>
+ <td class="listheading"><translate>Subject</translate></td>
+ <td class="listheading"><translate>Reference</translate></td>
+ <td class="listheading"><translate>Created by</translate></td>
+ </tr>
+
+ [%- FOREACH row = FOLLOW_UPS %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <td>
+ <input type="hidden" name="follow_up_id_[% loop.count %]" value="[% HTML.escape(row.id) %]">
+ <input type="checkbox" name="selected_[% loop.count %]" value="1">
+ </td>
+ <td>[% HTML.escape(row.follow_up_date) %]</td>
+ <td>[% HTML.escape(row.created_on) %]</td>
+ <td><a href="[% edit_url %][% HTML.escape(row.id) %]">[% HTML.escape(row.subject) %]</a></td>
+ <td>[% IF row.reference_link %]<a href="[% row.reference_link %]">[% END %][% HTML.escape(row.reference) %][% IF row.reference_link %]</a>[% END %]</td>
+ <td>[% HTML.escape(row.created_by_name) %]</td>
+ </tr>
+ [%- END %]
+ </table>
+ </p>
+
+ <p>
+ <input type="hidden" name="action" value="dispatcher">
+ <input type="submit" class="submit" name="action_finish" value="<translate>Finish</translate>">
+ <input type="submit" class="submit" name="action_delete" value="<translate>Delete</translate>">
+ </p>
+</form>
--- /dev/null
+[%- IF OPTIONS.size %]
+<p>
+ [%- FOREACH option = OPTIONS %]
+ [%- option %][% UNLESS loop.last %]<br>[% END %]
+ [%- END %]
+</p>
+[%- END %]
+
+<form action="fu.pl" method="post" name="Form">
+
--- /dev/null
+[%- IF OPTIONS.size %]
+<p>
+ [%- FOREACH option = OPTIONS %]
+ [%- option %][% UNLESS loop.last %]<br>[% END %]
+ [%- END %]
+</p>
+[%- END %]
+
+<form action="fu.pl" method="post" name="Form">
+
--- /dev/null
+[% USE HTML %]
+<body onload="on_load()">
+
+ <script type="text/javascript">
+ <!--
+ function on_load() {
+ Calendar.setup({ inputField : "follow_up_date_from", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_from_trigger" });
+ Calendar.setup({ inputField : "follow_up_date_to", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_to_trigger" });
+ Calendar.setup({ inputField : "itime_from", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "itime_from_trigger" });
+ Calendar.setup({ inputField : "itime_to", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "itime_to_trigger" });
+ document.Form.subject.focus();
+ }
+ -->
+ </script>
+
+ <div class="listtop">[% title %]</div>
+
+ <form action="fu.pl" method="post" name="Form">
+ <input type="hidden" name="nextsub" value="report">
+
+ <p>
+ <table>
+ <tr>
+ <td align="right">Erstellt für</td>
+ <td>
+ <select name="created_for">
+ <option></option>
+ [%- FOREACH row = EMPLOYEES %]
+ <option value="[% HTML.escape(row.id) %]">
+ [%- IF row.name %]
+ [%- HTML.escape(row.name) %] ([% HTML.escape(row.login) %])
+ [%- ELSE %]
+ [%- HTML.escape(row.login) %]
+ [%- END %]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right">Betreff</td>
+ <td><input name="subject" size="20"></td>
+ </tr>
+
+ <tr>
+ <td align="right">Text</td>
+ <td><input name="body" size="20"></td>
+ </tr>
+
+ <tr>
+ <td align="right">Referenz</td>
+ <td><input name="reference" size="20"></td>
+ </tr>
+
+ <tr>
+ <td align="right">Wiedervorlagedatum</td>
+ <td>
+ Von
+ <input name="follow_up_date_from" id="follow_up_date_from" size="12">
+ <input type="button" name="follow_up_date_from_button" id="follow_up_date_from_trigger" value="?">
+ Bis
+ <input name="follow_up_date_to" id="follow_up_date_to" size="12">
+ <input type="button" name="follow_up_date_to_button" id="follow_up_date_to_trigger" value="?">
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right">Erstellt am</td>
+ <td>
+ Von
+ <input name="itime_from" id="itime_from" size="12">
+ <input type="button" name="itime_from_button" id="itime_from_trigger" value="?">
+ Bis
+ <input name="itime_to" id="itime_to" size="12">
+ <input type="button" name="itime_to_button" id="itime_to_trigger" value="?">
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right">In Bericht aufnehmen</td>
+ <td>
+
+ <table>
+ <tr>
+ <td>
+ <input type="checkbox" name="due_only" id="due_only" value="1" checked>
+ <label for="due_only">Nur fällige Wiedervorlagen</label>
+ </td>
+
+ <td>
+ <input type="checkbox" name="all_users" id="all_users" value="1" checked>
+ <label for="all_users">Wiedervorlagen anderer Benutzer</label>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <input type="checkbox" name="not_done" id="not_done" value="1" checked>
+ <label for="not_done">Noch nicht fertig</label>
+ </td>
+
+ <td>
+ <input type="checkbox" name="done" id="done" value="1">
+ <label for="done">Fertig</label>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+
+ </table>
+ </p>
+
+ <p>
+ <input type="submit" name="action" value="Weiter">
+ </p>
+ </form>
+
+</body>
+</html>
--- /dev/null
+[% USE HTML %]
+<body onload="on_load()">
+
+ <script type="text/javascript">
+ <!--
+ function on_load() {
+ Calendar.setup({ inputField : "follow_up_date_from", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_from_trigger" });
+ Calendar.setup({ inputField : "follow_up_date_to", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "follow_up_date_to_trigger" });
+ Calendar.setup({ inputField : "itime_from", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "itime_from_trigger" });
+ Calendar.setup({ inputField : "itime_to", ifFormat :"[% myconfig_jsc_dateformat %]", align : "BR", button : "itime_to_trigger" });
+ document.Form.subject.focus();
+ }
+ -->
+ </script>
+
+ <div class="listtop">[% title %]</div>
+
+ <form action="fu.pl" method="post" name="Form">
+ <input type="hidden" name="nextsub" value="report">
+
+ <p>
+ <table>
+ <tr>
+ <td align="right"><translate>Created for</translate></td>
+ <td>
+ <select name="created_for">
+ <option></option>
+ [%- FOREACH row = EMPLOYEES %]
+ <option value="[% HTML.escape(row.id) %]">
+ [%- IF row.name %]
+ [%- HTML.escape(row.name) %] ([% HTML.escape(row.login) %])
+ [%- ELSE %]
+ [%- HTML.escape(row.login) %]
+ [%- END %]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right"><translate>Subject</translate></td>
+ <td><input name="subject" size="20"></td>
+ </tr>
+
+ <tr>
+ <td align="right"><translate>Body</translate></td>
+ <td><input name="body" size="20"></td>
+ </tr>
+
+ <tr>
+ <td align="right"><translate>Reference</translate></td>
+ <td><input name="reference" size="20"></td>
+ </tr>
+
+ <tr>
+ <td align="right"><translate>Follow-Up Date</translate></td>
+ <td>
+ <translate>From</translate>
+ <input name="follow_up_date_from" id="follow_up_date_from" size="12">
+ <input type="button" name="follow_up_date_from_button" id="follow_up_date_from_trigger" value="?">
+ <translate>To (time)</translate>
+ <input name="follow_up_date_to" id="follow_up_date_to" size="12">
+ <input type="button" name="follow_up_date_to_button" id="follow_up_date_to_trigger" value="?">
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right"><translate>Created on</translate></td>
+ <td>
+ <translate>From</translate>
+ <input name="itime_from" id="itime_from" size="12">
+ <input type="button" name="itime_from_button" id="itime_from_trigger" value="?">
+ <translate>To (time)</translate>
+ <input name="itime_to" id="itime_to" size="12">
+ <input type="button" name="itime_to_button" id="itime_to_trigger" value="?">
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right"><translate>Include in Report</translate></td>
+ <td>
+
+ <table>
+ <tr>
+ <td>
+ <input type="checkbox" name="due_only" id="due_only" value="1" checked>
+ <label for="due_only"><translate>Only due follow-ups</translate></label>
+ </td>
+
+ <td>
+ <input type="checkbox" name="all_users" id="all_users" value="1" checked>
+ <label for="all_users"><translate>Other users' follow-ups</translate></label>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <input type="checkbox" name="not_done" id="not_done" value="1" checked>
+ <label for="not_done"><translate>Not done yet</translate></label>
+ </td>
+
+ <td>
+ <input type="checkbox" name="done" id="done" value="1">
+ <label for="done"><translate>Done</translate></label>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+
+ </table>
+ </p>
+
+ <p>
+ <input type="submit" name="action" value="<translate>Continue</translate>">
+ </p>
+ </form>
+
+</body>
+</html>
</center>
+ [%- todo_list %]
+
</body>
</html>
</center>
+ [%- todo_list %]
+
</body>
</html>
show_empty = 1 -%]
</td>
</tr>
+ [%- IF id && num_follow_ups %]
+ <tr>
+ <td colspan="2">[% LxERP.format_string('Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', num_follow_ups, num_due_follow_ups) %]</td>
+ </tr>
+ [%- END %]
</table>
</td>
[%- IF is_sales %]
<input class=submit type=submit name=action value="Speichern und schließen">
[%- IF id %]
+ <input type="button" class="submit" onclick="follow_up_window()" value="Wiedervorlage">
<input type="button" class="submit" onclick="set_history_window([% HTML.escape(id) %])" name="history" id="history" value="Historie">
<br>[% label_workflow %]<br>
show_empty = 1 -%]
</td>
</tr>
+ [%- IF id && num_follow_ups %]
+ <tr>
+ <td colspan="2">[% LxERP.format_string('<translate>There are #1 unfinished follow-ups of which #2 are due.</translate>', num_follow_ups, num_due_follow_ups) %]</td>
+ </tr>
+ [%- END %]
</table>
</td>
[%- IF is_sales %]
<input class=submit type=submit name=action value="<translate>Save and Close</translate>">
[%- IF id %]
+ <input type="button" class="submit" onclick="follow_up_window()" value="<translate>Follow-Up</translate>">
<input type="button" class="submit" onclick="set_history_window([% HTML.escape(id) %])" name="history" id="history" value="<translate>history</translate>">
<br>[% label_workflow %]<br>
<script type="text/javascript" src="js/vendor_selection.js"></script>
<script type="text/javascript" src="js/calculate_qty.js"></script>
<script type="text/javascript" src="js/customer_or_vendor_selection.js"></script>
+ <script type="text/javascript" src="js/follow_up.js"></script>
[%- FOREACH row = HIDDENS %]
<input type="hidden" name="[% HTML.escape(row.name) %]" value="[% HTML.escape(row.value) %]" >
[%- END %]
+ <input type="hidden" name="follow_up_trans_id_1" value="[% HTML.escape(id) %]">
+ <input type="hidden" name="follow_up_trans_type_1" value="[% HTML.escape(type) %]">
+ <input type="hidden" name="follow_up_trans_info_1" value="[% HTML.escape(follow_up_trans_info) %]">
+ <input type="hidden" name="follow_up_rowcount" value="1">
+
<table width=100%>
<tr class=listtop>
<th class=listtop>[% HTML.escape(title) %]</th>
<script type="text/javascript" src="js/vendor_selection.js"></script>
<script type="text/javascript" src="js/calculate_qty.js"></script>
<script type="text/javascript" src="js/customer_or_vendor_selection.js"></script>
+ <script type="text/javascript" src="js/follow_up.js"></script>
[%- FOREACH row = HIDDENS %]
<input type="hidden" name="[% HTML.escape(row.name) %]" value="[% HTML.escape(row.value) %]" >
[%- END %]
+ <input type="hidden" name="follow_up_trans_id_1" value="[% HTML.escape(id) %]">
+ <input type="hidden" name="follow_up_trans_type_1" value="[% HTML.escape(type) %]">
+ <input type="hidden" name="follow_up_trans_info_1" value="[% HTML.escape(follow_up_trans_info) %]">
+ <input type="hidden" name="follow_up_rowcount" value="1">
+
<table width=100%>
<tr class=listtop>
<th class=listtop>[% HTML.escape(title) %]</th>
--- /dev/null
+[% USE HTML %][% USE LxERP %]
+
+<div class="listtop">Überfällige Angebote</div>
+
+<p>
+ <table width="100%">
+ <tr>
+ <td class="listheading">Datum</td>
+ <td class="listheading">gültig bis</td>
+ <td class="listheading">Auftrag</td>
+ <td class="listheading">Kunde</td>
+ <td class="listheading">Vorgangsbezeichnung</td>
+ <td class="listheading">Betrag</td>
+ <td class="listheading">Bearbeiter</td>
+ </tr>
+
+ [%- FOREACH row = QUOTATIONS %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <td>[% HTML.escape(row.transdate) %]</td>
+ <td>[% HTML.escape(row.reqdate) %]</td>
+ <td><a href="[% edit_url %]&id=[% HTML.url(row.id) %]">[% HTML.escape(row.quonumber) %]</a></td>
+ <td>[% HTML.escape(row.customer) %]</td>
+ <td>[% HTML.escape(row.transaction_description) %]</td>
+ <td>[% HTML.escape(LxERP.format_amount(row.amount, 2)) %]</td>
+ <td>[% HTML.escape(row.employee) %]</td>
+ </tr>
+ [%- END %]
+ </table>
+</p>
--- /dev/null
+[% USE HTML %][% USE LxERP %]
+
+<div class="listtop"><translate>Overdue sales quotations</translate></div>
+
+<p>
+ <table width="100%">
+ <tr>
+ <td class="listheading"><translate>Date</translate></td>
+ <td class="listheading"><translate>Valid until</translate></td>
+ <td class="listheading"><translate>Order</translate></td>
+ <td class="listheading"><translate>Customer</translate></td>
+ <td class="listheading"><translate>Transaction description</translate></td>
+ <td class="listheading"><translate>Amount</translate></td>
+ <td class="listheading"><translate>Employee</translate></td>
+ </tr>
+
+ [%- FOREACH row = QUOTATIONS %]
+ <tr class="listrow[% loop.count % 2 %]">
+ <td>[% HTML.escape(row.transdate) %]</td>
+ <td>[% HTML.escape(row.reqdate) %]</td>
+ <td><a href="[% edit_url %]&id=[% HTML.url(row.id) %]">[% HTML.escape(row.quonumber) %]</a></td>
+ <td>[% HTML.escape(row.customer) %]</td>
+ <td>[% HTML.escape(row.transaction_description) %]</td>
+ <td>[% HTML.escape(LxERP.format_amount(row.amount, 2)) %]</td>
+ <td>[% HTML.escape(row.employee) %]</td>
+ </tr>
+ [%- END %]
+ </table>
+</p>
--- /dev/null
+[% USE HTML %]<body>
+
+ <div class="listtop" style="margin-bottom: 10px">Ihre Aufgabenliste</div>
+
+ [%- IF !todo_list %]
+ <p>
+ Ihre Aufgabenliste enthält momentan keine Einträge.
+ </p>
+
+ [%- ELSE %]
+
+ [%- todo_list %]
+
+ [%- END %]
+
+</body>
+</html>
--- /dev/null
+[% USE HTML %]<body>
+
+ <div class="listtop" style="margin-bottom: 10px"><translate>Your TODO list</translate></div>
+
+ [%- IF !todo_list %]
+ <p>
+ <translate>There are no items on your TODO list at the moment.</translate>
+ </p>
+
+ [%- ELSE %]
+
+ [%- todo_list %]
+
+ [%- END %]
+
+</body>
+</html>
--- /dev/null
+am.pl
\ No newline at end of file