db_get lx-office-erp/admin-password
ADMINPASSWORD="$RET"
- #cat /usr/lib/lx-office-erp/config/authentication.pl.default | \
cat /etc/lx-office-erp/authentication.pl.default | \
sed --expression "s/\$self->{admin_password} = 'admin';/\$self->{admin_password} = '$ADMINPASSWORD';/g" \
> /tmp/1.txt
- #mv /tmp/1.txt /usr/lib/lx-office-erp/config/authentication.pl
mv /tmp/1.txt /etc/lx-office-erp/authentication.pl
- #chmod 0600 /usr/lib/lx-office-erp/config/authentication.pl
- #chown www-data:www-data /usr/lib/lx-office-erp/config/authentication.pl
-
}
db_get lx-office-erp/lx-office-erp-user-postgresql-password
PASSWORD="$RET"
- #cat /usr/lib/lx-office-erp/config/authentication.pl | \
cat /etc/lx-office-erp/authentication.pl | \
sed --expression "s/'password' => '',/'password' => '$PASSWORD',/g" \
> /tmp/1.txt
- #mv /tmp/1.txt /usr/lib/lx-office-erp/config/authentication.pl
mv /tmp/1.txt /etc/lx-office-erp/authentication.pl
}
set_lx_office_erp_authentication_db_user() {
USER="lxoffice"
- #cat /usr/lib/lx-office-erp/config/authentication.pl | \
cat /etc/lx-office-erp/authentication.pl | \
sed --expression "s/'user' => 'postgres',/'user' => '$USER',/g" \
> /tmp/1.txt
- #mv /tmp/1.txt /usr/lib/lx-office-erp/config/authentication.pl
mv /tmp/1.txt /etc/lx-office-erp/authentication.pl
}
set_user_rights() {
chown -R www-data:www-data /usr/lib/lx-office-erp/users
chown -R www-data:www-data /usr/lib/lx-office-erp/templates
- chown www-data:www-data /etc/lx-office-erp/lx_office.conf
- chown www-data:www-data /usr/lib/lx-office-erp/menu.ini
- chown www-data:www-data /etc/lx-office-erp/authentication.pl
- chmod 0600 /etc/lx-office-erp/lx_office.conf
- chmod 0600 /etc/lx-office-erp/authentication.pl
- chown www-data:www-data /etc/lx-office-erp/lx-erp.conf
++ chown www-data:www-data /etc/lx-office-erp/lx_office.conf
+ chown www-data:www-data /usr/lib/lx-office-erp/menu.ini
+ chown www-data:www-data /etc/lx-office-erp/authentication.pl
- chmod 0600 /etc/lx-office-erp/lx-erp.conf
++ chmod 0600 /etc/lx-office-erp/lx_office.conf
+ chmod 0600 /etc/lx-office-erp/authentication.pl
}
disable_ipv6_on_lo_interface() {
}
mk_new_menu() {
- if [ -e /usr/lib/lx-office-crm ] ; then
+ if [ -e /usr/lib/lx-office-crm ] ; then
#crm vorhanden, dann die menu.ini mit der höchsten VersNr nehmen
- for i in `ls -1 /usr/lib/lx-office-crm/update/menu*ini` ; do
+ for i in `ls -1 /usr/lib/lx-office-crm/update/menu*ini` ; do
cat $i > /usr/lib/lx-office-erp/menu.ini
done;
cat /usr/lib/lx-office-erp/menu.default >> /usr/lib/lx-office-erp/menu.ini
else
cp /usr/lib/lx-office-erp/menu.default /usr/lib/lx-office-erp/menu.ini
fi
-}
+}
mk_new_config() {
- if ! [ -f /etc/lx-office-erp/lx-erp.conf ] ; then
- cp /etc/lx-office-erp/lx-erp.conf.default /etc/lx-office-erp/lx-erp.conf
- fi
- if ! [ -f /etc/lx-office-erp/console.conf ] ; then
- cp /etc/lx-office-erp/console.conf.default /etc/lx-office-erp/console.conf
+ if ! [ -f /etc/lx-office-erp/lx_office.conf ] ; then
+ cp /etc/lx-office-erp/lx_office.conf.default /etc/lx-office-erp/lx_office.conf
fi
-}
+}
mk_links() {
if ! [ -f /usr/lib/lx-office-erp/config/authentication.pl ] ; then
ln -s /etc/lx-office-erp/authentication.pl /usr/lib/lx-office-erp/config/authentication.pl
fi;
- if ! [ -f /usr/lib/lx-office-erp/config/lx-erp.conf ] ; then
- ln -s /etc/lx-office-erp/lx-erp.conf /usr/lib/lx-office-erp/config/lx-erp.conf
+ if ! [ -f /usr/lib/lx-office-erp/config/lx_office.conf ] ; then
+ ln -s /etc/lx-office-erp/lx_office.conf /usr/lib/lx-office-erp/config/lx_office.conf
fi;
- if ! [ -f /usr/lib/lx-office-erp/config/console.conf ] ; then
- ln -s /etc/lx-office-erp/console.conf /usr/lib/lx-office-erp/config/console.conf
- fi;
- if [ -e /etc/apache2 ] ; then
+ if [ -e /etc/apache2 ] ; then
if ! [ -f /etc/apache2/conf.d/lx-office-erp.apache2.conf ] ; then
ln -s /etc/lx-office-erp/lx-office-erp.apache2.conf /etc/apache2/conf.d/lx-office-erp.apache2.conf
fi;
fi;
- if [ -e /etc/cherokee/sites-available ] ; then
+ if [ -e /etc/cherokee/sites-available ] ; then
if ! [ -f /etc/cherokee/sites-available/lx-office-erp.cherokee ] ; then
cat /etc/lx-office-erp/lx-office-erp.cherokee.handler >> /etc/cherokee/sites-available/default
ln -s /etc/lx-office-erp/lx-office-erp.cherokee /etc/cherokee/sites-available/lx-office-erp.cherokee
fi;
}
reload_web_server() {
- if [ -f /etc/init.d/apache* ] ; then
+ if [ -f /etc/init.d/apache* ] ; then
/etc/init.d/apache* reload
fi
- if [ -f /etc/init.d/cherokee ] ; then
+ if [ -f /etc/init.d/cherokee ] ; then
/etc/init.d/cherokee reload
fi
}
install|configure)
echo " ! "`date`" $1 !" >> /tmp/lxo-erp.log
-
+
mk_new_menu
mk_new_config
config_postgresql_factory_script
NR="0"
#hier wurde das Git-Paket entpakt:
- SRC=/tmp/deb_test/unstable
+ SRC=/tmp/lx-office-erp
#hier wird das Debian-Paket gebaut:
- DST=/tmp/deb_test/package
+ DST=/tmp/package
################################################
VER=`cat VERSION`
DEST=$DST/lx-office-erp_$VER-$NR-all
- FILES='
- usr/lib/lx-office-erp/
- usr/share/lx-office-erp/
- usr/share/doc/lx-office-erp/
- var/lib/lx-office-erp/spool/
- var/lib/lx-office-erp/users/
- var/lib/lx-office-erp/css/
- var/lib/lx-office-erp/xslt/
- var/lib/lx-office-erp/templates/
- var/lib/lx-office-erp/webdav/lieferantenbestellungen/
- var/lib/lx-office-erp/webdav/anfragen/
- var/lib/lx-office-erp/webdav/gutschriften/
- var/lib/lx-office-erp/webdav/einkaufsrechnungen/
- var/lib/lx-office-erp/webdav/rechnungen/
- var/lib/lx-office-erp/webdav/bestellungen/
- var/lib/lx-office-erp/webdav/angebote/
- usr/lib/lx-office-erp/
- usr/share/lx-office-erp/
- usr/share/doc/lx-office-erp/
- usr/share/man/man1/:lx-office-erp.1.gz
- etc/lx-office-erp/:lx-office-erp.cherokee.handler
- etc/lx-office-erp/:lx-office-erp.apache2.conf
- etc/lx-office-erp/:lx-office-erp.cherokee
- usr/bin/:lx-office-erp
- '
-
- for filespec in $FILES; do
- set - `echo $filespec | sed -e 's/:/ /g'`
- dir=$1
- file=$2
- mkdir -p $SRC/DEBIAN/$dir
- if [ -f $SRC/DEBIAN/files/$file ]; then
- cp $SRC/DEBIAN/files/$file $SRC/DEBIAN/$dir/$file
- else
- echo '1' > $SRC/DEBIAN/$dir/.dummy
- fi
- done
-
- SYMLINKS='
- css:/var/lib/lx-office-erp/css
- doc:/usr/share/doc/lx-office-erp/
- image:/usr/share/lx-office-erp
- spool:/var/lib/lx-office-erp/spool
- templates:/var/lib/lx-office-erp/templates
- users:/var/lib/lx-office-erp/users/
- webdav:/var/lib/lx-office-erp/webdav
- xslt:/var/lib/lx-office-erp/xslt
- '
-
- for symspec in $SYMLINKS; do
- set - `echo $symspec | sed -e 's/:/ /g'`
- src=$1
- tar=$2
-
- ln -s $tar $SRC/DEBIAN/usr/lib/lx-office-erp/$src
- done
- #fertig
mkdir -p $DEST
cd $DEST
#Struktur anlegen:
- cp -a $SRC/DEBIAN/* .
- rm ./mk*.sh
+ cp -a $SRC/DEBIAN/DEBIAN .
+ tar xzf $SRC/DEBIAN/struktur.tgz
#Dateien kopieren:
#aber keine fertigen Konfigurationen, nur *.default
cp -a $SRC/*.pl usr/lib/lx-office-erp
cp $SRC/VERSION usr/lib/lx-office-erp
cp $SRC/index.html usr/lib/lx-office-erp
-cp $SRC/config/lx-erp.conf etc/lx-office-erp/lx-erp.conf.default
-cp $SRC/config/console.conf.default etc/lx-office-erp/
+cp $SRC/config/lx_office.conf.default etc/lx-office-erp/lx_office.conf.default
cp $SRC/config/authentication.pl.default etc/lx-office-erp/
cp $SRC/menu.ini usr/lib/lx-office-erp/menu.default
cp -a $SRC/css var/lib/lx-office-erp
use strict;
- use Readonly;
use Rose::DB::Object;
use List::MoreUtils qw(any);
return $class->meta->convention_manager->auto_manager_class_name($class);
}
- Readonly my %text_column_types => (text => 1, char => 1, varchar => 1);
+ my %text_column_types = (text => 1, char => 1, varchar => 1);
sub assign_attributes {
my $self = shift;
return $self;
}
+sub call_sub {
+ my $self = shift;
+ my $sub = shift;
+ return $self->$sub(@_);
+}
+
1;
__END__
on. Can be used from methods in this package for getting the actual
object's manager.
+=item C<call_sub $name, @args>
+
+Calls the sub C<$name> on C<$self> with the arguments C<@args> and
+returns its result. This is meant for situations in which the sub's
+name is a composite, e.g.
+
+ my $chart_id = $buchungsgruppe->call_sub(($is_sales ? "income" : "expense") . "_accno_id_${taxzone_id}");
+
=back
=head1 AUTHOR
BEGIN {
unshift @INC, "modules/override"; # Use our own versions of various modules (e.g. YAML).
push @INC, "modules/fallback"; # Only use our own versions of modules if there's no system version.
- push @INC, "SL"; # FCGI won't find modules that are not properly named. Help it by inclduging SL
}
use CGI qw( -no_xhtml);
+use Config::Std;
use DateTime;
+use Encode;
use English qw(-no_match_vars);
use SL::Auth;
use SL::LXDebug;
+use SL::LxOfficeConf;
use SL::Locale;
use SL::Common;
+ use SL::Form;
use SL::Helper::DateTime;
- use Form;
use List::Util qw(first);
use File::Basename;
my $template = shift;
my $error_type = shift || '';
- $::locale = Locale->new($::language);
+ $::locale = Locale->new($::lx_office_conf{system}->{language});
$::form->{error} = $::locale->text('The session is invalid or has expired.') if ($error_type eq 'session');
$::form->{error} = $::locale->text('Incorrect password!.') if ($error_type eq 'password');
- $::myconfig{countrycode} = $::language;
+ $::myconfig{countrycode} = $::lx_office_conf{system}->{language};
$::form->{stylesheet} = 'css/lx-office-erp.css';
$::form->header;
}
sub pre_startup_setup {
- eval {
- package main;
- require "config/lx-erp.conf";
- };
- eval {
- package main;
- require "config/lx-erp-local.conf";
- } if -f "config/lx-erp-local.conf";
+ SL::LxOfficeConf->read;
+ _init_environment();
eval {
package main;
# canonial globals. if it's not here, chances are it will get refactored someday.
{
no warnings 'once';
- $::userspath = "users";
- $::templates = "templates";
- $::memberfile = "users/members";
- $::menufile = "menu.ini";
- $::sendmail = "| /usr/sbin/sendmail -t";
$::lxdebug = LXDebug->new;
$::auth = SL::Auth->new;
$::form = undef;
$self->unrequire_bin_mozilla;
$::cgi = CGI->new('');
- $::locale = Locale->new($::language);
+ $::locale = Locale->new($::lx_office_conf{system}->{language});
$::form = Form->new;
%::called_subs = ();
my $session_result = $::auth->restore_session;
$::auth->create_or_refresh_session;
- $::form->error($::locale->text('System currently down for maintenance!')) if -e "$::userspath/nologin" && $script ne 'admin';
+ $::form->error($::locale->text('System currently down for maintenance!')) if -e ($::lx_office_conf{paths}->{userspath} . "/nologin") && $script ne 'admin';
if ($script eq 'login' or $script eq 'admin' or $script eq 'kopf') {
$::form->{titlebar} = "Lx-Office " . $::locale->text('Version') . " $::form->{version}";
$::locale = undef;
$::form = undef;
$::myconfig = ();
- Form::disconnect_standard_dbh();
+ Form::disconnect_standard_dbh unless $self->_interface_is_fcgi;
$::lxdebug->end_request;
$::lxdebug->leave_sub;
sub unrequire_bin_mozilla {
my $self = shift;
- return unless $self->{interface} =~ m/^(?:fastcgi|fcgid|fcgi)$/;
+ return unless $self->_interface_is_fcgi;
for (keys %INC) {
next unless m#^bin/mozilla/#;
}
}
+sub _interface_is_fcgi {
+ my $self = shift;
+ return $self->{interface} =~ m/^(?:fastcgi|fcgid|fcgi)$/;
+}
+
sub _route_request {
my $script_name = shift;
return $self->{interface} =~ m/f(?:ast)cgi/i ? $self->{request}->GetHandles() : (\*STDIN, \*STDOUT, \*STDERR);
}
+sub _init_environment {
+ my %key_map = ( lib => { name => 'PERL5LIB', append_path => 1 },
+ path => { name => 'PATH', append_path => 1 },
+ );
+ my $cfg = $::lx_office_conf{environment} || {};
+
+ while (my ($key, $value) = each %{ $cfg }) {
+ next unless $value;
+
+ my $info = $key_map{$key} || {};
+ $key = $info->{name} || $key;
+
+ if ($info->{append_path}) {
+ $value = ':' . $value unless $value =~ m/^:/ || !$ENV{$key};
+ $value = $ENV{$key} . $value;
+ }
+
+ $ENV{$key} = $value;
+ }
+}
+
package main;
use strict;
use CGI::Ajax;
use Cwd;
use Encode;
+use File::Copy;
use IO::File;
use SL::Auth;
use SL::Auth::DB;
use SL::Auth::LDAP;
use SL::AM;
use SL::Common;
+use SL::CVar;
+use SL::DB;
use SL::DBUtils;
+use SL::DO;
+use SL::IC;
+use SL::IS;
use SL::Mailer;
use SL::Menu;
+use SL::OE;
use SL::Template;
use SL::User;
use Template;
use URI;
use List::Util qw(first max min sum);
-use List::MoreUtils qw(any apply);
+use List::MoreUtils qw(all any apply);
use strict;
$self->_request_to_hash($content);
}
- my $db_charset = $main::dbcharset;
+ my $db_charset = $::lx_office_conf{system}->{dbcharset};
$db_charset ||= Common::DEFAULT_CHARSET;
my $encoding = $self->{INPUT_ENCODING} || $db_charset;
$main::lxdebug->leave_sub();
}
+sub throw_on_error {
+ my ($self, $code) = @_;
+ local $self->{__ERROR_HANDLER} = sub { die({ error => $_[0] }) };
+ $code->();
+}
+
sub error {
$main::lxdebug->enter_sub();
$main::lxdebug->show_backtrace();
my ($self, $msg) = @_;
- if ($ENV{HTTP_USER_AGENT}) {
+
+ if ($self->{__ERROR_HANDLER}) {
+ $self->{__ERROR_HANDLER}->($msg);
+
+ } elsif ($ENV{HTTP_USER_AGENT}) {
$msg =~ s/\n/<br>/g;
$self->show_generic_error($msg);
# extra code is currently only used by menuv3 and menuv4 to set their css.
# it is strongly deprecated, and will be changed in a future version.
my ($self, $extra_code) = @_;
- my $db_charset = $::dbcharset || Common::DEFAULT_CHARSET;
+ my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
my @header;
$::lxdebug->leave_sub and return if !$ENV{HTTP_USER_AGENT} || $self->{header}++;
my ($self) = @_;
- my $db_charset = $main::dbcharset ? $main::dbcharset : Common::DEFAULT_CHARSET;
+ my $db_charset = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
my $cgi = $main::cgi || CGI->new('');
my $output = $cgi->header('-charset' => $db_charset);
my $language;
if (!%::myconfig || !$::myconfig{"countrycode"}) {
- $language = $main::language;
+ $language = $::lx_office_conf{system}->{language};
} else {
$language = $main::myconfig{"countrycode"};
}
map { $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys %::myconfig;
}
- $additional_params->{"conf_dbcharset"} = $::dbcharset;
- $additional_params->{"conf_webdav"} = $::webdav;
- $additional_params->{"conf_lizenzen"} = $::lizenzen;
- $additional_params->{"conf_latex_templates"} = $::latex;
- $additional_params->{"conf_opendocument_templates"} = $::opendocument_templates;
- $additional_params->{"conf_vertreter"} = $::vertreter;
- $additional_params->{"conf_show_best_before"} = $::show_best_before;
- $additional_params->{"conf_parts_image_css"} = $::parts_image_css;
- $additional_params->{"conf_parts_listing_images"} = $::parts_listing_images;
- $additional_params->{"conf_parts_show_image"} = $::parts_show_image;
+ $additional_params->{"conf_dbcharset"} = $::lx_office_conf{system}->{dbcharset};
+ $additional_params->{"conf_webdav"} = $::lx_office_conf{system}->{webdav};
+ $additional_params->{"conf_lizenzen"} = $::lx_office_conf{system}->{lizenzen};
+ $additional_params->{"conf_latex_templates"} = $::lx_office_conf{print_templates}->{latex};
+ $additional_params->{"conf_opendocument_templates"} = $::lx_office_conf{print_templates}->{opendocument};
+ $additional_params->{"conf_vertreter"} = $::lx_office_conf{system}->{vertreter};
+ $additional_params->{"conf_show_best_before"} = $::lx_office_conf{system}->{show_best_before};
+ $additional_params->{"conf_parts_image_css"} = $::lx_office_conf{features}->{parts_image_css};
+ $additional_params->{"conf_parts_listing_images"} = $::lx_office_conf{features}->{parts_listing_images};
+ $additional_params->{"conf_parts_show_image"} = $::lx_office_conf{features}->{parts_show_image};
if (%main::debug_options) {
map { $additional_params->{'DEBUG_' . uc($_)} = $main::debug_options{$_} } keys %main::debug_options;
'PLUGIN_BASE' => 'SL::Template::Plugin',
'INCLUDE_PATH' => '.:templates/webpages',
'COMPILE_EXT' => '.tcc',
- 'COMPILE_DIR' => $::userspath . '/templates-cache',
+ 'COMPILE_DIR' => $::lx_office_conf{paths}->{userspath} . '/templates-cache',
})) || die;
}
my ($self, $error, %params) = @_;
+ if ($self->{__ERROR_HANDLER}) {
+ $self->{__ERROR_HANDLER}->($error);
+ $main::lxdebug->leave_sub();
+ return;
+ }
+
my $add_params = {
'title_error' => $params{title},
'label_error' => $error,
sub parse_template {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $userspath) = @_;
+ my ($self, $myconfig) = @_;
my $out;
local (*IN, *OUT);
+ my $userspath = $::lx_office_conf{paths}->{userspath};
+
$self->{"cwd"} = getcwd();
$self->{"tmpdir"} = $self->{cwd} . "/${userspath}";
}
map { $self->{"${_}"} = $myconfig->{$_}; } qw(co_ustid);
+ map { $self->{"myconfig_${_}"} = $myconfig->{$_} } grep { $_ ne 'dbpasswd' } keys %{ $myconfig };
$self->{copies} = 1 if (($self->{copies} *= 1) <= 0);
$self->error("$self->{IN} : " . $template->get_error());
}
+ if ($self->{media} eq 'file') {
+ copy(join('/', $self->{cwd}, $userspath, $self->{tmpfile}), $out =~ m|^/| ? $out : join('/', $self->{cwd}, $out)) if $template->uses_temp_file;
+ $self->cleanup;
+ chdir("$self->{cwd}");
+
+ $::lxdebug->leave_sub();
+
+ return;
+ }
+
if ($template->uses_temp_file() || $self->{media} eq 'email') {
if ($self->{media} eq 'email') {
map { $mail->{$_} = $self->{$_} }
qw(cc bcc subject message version format);
- $mail->{charset} = $main::dbcharset ? $main::dbcharset : Common::DEFAULT_CHARSET;
+ $mail->{charset} = $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET;
$mail->{to} = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email};
$mail->{from} = qq|"$myconfig->{name}" <$myconfig->{email}>|;
$mail->{fileid} = "$fileid.";
my $numbytes = (-s $self->{tmpfile});
open(IN, $self->{tmpfile})
or $self->error($self->cleanup . "$self->{tmpfile} : $!");
+ binmode IN;
$self->{copies} = 1 unless $self->{media} eq 'printer';
close(FH);
}
- if ($self->{tmpfile} && ! $::keep_temp_files) {
+ if ($self->{tmpfile} && !($::lx_office_conf{debug} && $::lx_office_conf{debug}->{keep_temp_files})) {
$self->{tmpfile} =~ s|.*/||g;
# strip extension
$self->{tmpfile} =~ s/\.\w+$//g;
undef $standard_dbh;
}
- $standard_dbh ||= $self->dbconnect_noauto($myconfig);
+ $standard_dbh ||= SL::DB::create->dbh;
$main::lxdebug->leave_sub(2);
$main::lxdebug->leave_sub();
}
+sub prepare_for_printing {
+ my ($self) = @_;
+
+ $self->{templates} ||= $::myconfig{templates};
+ $self->{formname} ||= $self->{type};
+ $self->{media} ||= 'email';
+
+ die "'media' other than 'email', 'file', 'printer' is not supported yet" unless $self->{media} =~ m/^(?:email|file|printer)$/;
+
+ # set shipto from billto unless set
+ my $has_shipto = any { $self->{"shipto$_"} } qw(name street zipcode city country contact);
+ if (!$has_shipto && ($self->{type} =~ m/^(?:purchase_order|request_quotation)$/)) {
+ $self->{shiptoname} = $::myconfig{company};
+ $self->{shiptostreet} = $::myconfig{address};
+ }
+
+ my $language = $self->{language} ? '_' . $self->{language} : '';
+
+ my ($language_tc, $output_numberformat, $output_dateformat, $output_longdates);
+ if ($self->{language_id}) {
+ ($language_tc, $output_numberformat, $output_dateformat, $output_longdates) = AM->get_language_details(\%::myconfig, $self, $self->{language_id});
+ } else {
+ $output_dateformat = $::myconfig{dateformat};
+ $output_numberformat = $::myconfig{numberformat};
+ $output_longdates = 1;
+ }
+
+ # Retrieve accounts for tax calculation.
+ IC->retrieve_accounts(\%::myconfig, $self, map { $_ => $self->{"id_$_"} } 1 .. $self->{rowcount});
+
+ if ($self->{type} =~ /_delivery_order$/) {
+ DO->order_details();
+ } elsif ($self->{type} =~ /sales_order|sales_quotation|request_quotation|purchase_order/) {
+ OE->order_details(\%::myconfig, $self);
+ } else {
+ IS->invoice_details(\%::myconfig, $self, $::locale);
+ }
+
+ # Chose extension & set source file name
+ my $extension = 'html';
+ if ($self->{format} eq 'postscript') {
+ $self->{postscript} = 1;
+ $extension = 'tex';
+ } elsif ($self->{"format"} =~ /pdf/) {
+ $self->{pdf} = 1;
+ $extension = $self->{'format'} =~ m/opendocument/i ? 'odt' : 'tex';
+ } elsif ($self->{"format"} =~ /opendocument/) {
+ $self->{opendocument} = 1;
+ $extension = 'odt';
+ } elsif ($self->{"format"} =~ /excel/) {
+ $self->{excel} = 1;
+ $extension = 'xls';
+ }
+
+ my $printer_code = '_' . $self->{printer_code} if $self->{printer_code};
+ my $email_extension = '_email' if -f "$self->{templates}/$self->{formname}_email${language}${printer_code}.${extension}";
+ $self->{IN} = "$self->{formname}${email_extension}${language}${printer_code}.${extension}";
+
+ # Format dates.
+ $self->format_dates($output_dateformat, $output_longdates,
+ qw(invdate orddate quodate pldate duedate reqdate transdate shippingdate deliverydate validitydate paymentdate datepaid
+ transdate_oe deliverydate_oe employee_startdate employee_enddate),
+ grep({ /^(?:datepaid|transdate_oe|reqdate|deliverydate|deliverydate_oe|transdate)_\d+$/ } keys(%{$self})));
+
+ $self->reformat_numbers($output_numberformat, 2,
+ qw(invtotal ordtotal quototal subtotal linetotal listprice sellprice netprice discount tax taxbase total paid),
+ grep({ /^(?:linetotal|listprice|sellprice|netprice|taxbase|discount|paid|subtotal|total|tax)_\d+$/ } keys(%{$self})));
+
+ $self->reformat_numbers($output_numberformat, undef, qw(qty price_factor), grep({ /^qty_\d+$/} keys(%{$self})));
+
+ my ($cvar_date_fields, $cvar_number_fields) = CVar->get_field_format_list('module' => 'CT', 'prefix' => 'vc_');
+
+ if (scalar @{ $cvar_date_fields }) {
+ $self->format_dates($output_dateformat, $output_longdates, @{ $cvar_date_fields });
+ }
+
+ while (my ($precision, $field_list) = each %{ $cvar_number_fields }) {
+ $self->reformat_numbers($output_numberformat, $precision, @{ $field_list });
+ }
+
+ return $self;
+}
+
+sub format_dates {
+ my ($self, $dateformat, $longformat, @indices) = @_;
+
+ $dateformat ||= $::myconfig{dateformat};
+
+ foreach my $idx (@indices) {
+ if ($self->{TEMPLATE_ARRAYS} && (ref($self->{TEMPLATE_ARRAYS}->{$idx}) eq "ARRAY")) {
+ for (my $i = 0; $i < scalar(@{ $self->{TEMPLATE_ARRAYS}->{$idx} }); $i++) {
+ $self->{TEMPLATE_ARRAYS}->{$idx}->[$i] = $::locale->reformat_date(\%::myconfig, $self->{TEMPLATE_ARRAYS}->{$idx}->[$i], $dateformat, $longformat);
+ }
+ }
+
+ next unless defined $self->{$idx};
+
+ if (!ref($self->{$idx})) {
+ $self->{$idx} = $::locale->reformat_date(\%::myconfig, $self->{$idx}, $dateformat, $longformat);
+
+ } elsif (ref($self->{$idx}) eq "ARRAY") {
+ for (my $i = 0; $i < scalar(@{ $self->{$idx} }); $i++) {
+ $self->{$idx}->[$i] = $::locale->reformat_date(\%::myconfig, $self->{$idx}->[$i], $dateformat, $longformat);
+ }
+ }
+ }
+}
+
+sub reformat_numbers {
+ my ($self, $numberformat, $places, @indices) = @_;
+
+ return if !$numberformat || ($numberformat eq $::myconfig{numberformat});
+
+ foreach my $idx (@indices) {
+ if ($self->{TEMPLATE_ARRAYS} && (ref($self->{TEMPLATE_ARRAYS}->{$idx}) eq "ARRAY")) {
+ for (my $i = 0; $i < scalar(@{ $self->{TEMPLATE_ARRAYS}->{$idx} }); $i++) {
+ $self->{TEMPLATE_ARRAYS}->{$idx}->[$i] = $self->parse_amount(\%::myconfig, $self->{TEMPLATE_ARRAYS}->{$idx}->[$i]);
+ }
+ }
+
+ next unless defined $self->{$idx};
+
+ if (!ref($self->{$idx})) {
+ $self->{$idx} = $self->parse_amount(\%::myconfig, $self->{$idx});
+
+ } elsif (ref($self->{$idx}) eq "ARRAY") {
+ for (my $i = 0; $i < scalar(@{ $self->{$idx} }); $i++) {
+ $self->{$idx}->[$i] = $self->parse_amount(\%::myconfig, $self->{$idx}->[$i]);
+ }
+ }
+ }
+
+ my $saved_numberformat = $::myconfig{numberformat};
+ $::myconfig{numberformat} = $numberformat;
+
+ foreach my $idx (@indices) {
+ if ($self->{TEMPLATE_ARRAYS} && (ref($self->{TEMPLATE_ARRAYS}->{$idx}) eq "ARRAY")) {
+ for (my $i = 0; $i < scalar(@{ $self->{TEMPLATE_ARRAYS}->{$idx} }); $i++) {
+ $self->{TEMPLATE_ARRAYS}->{$idx}->[$i] = $self->format_amount(\%::myconfig, $self->{TEMPLATE_ARRAYS}->{$idx}->[$i], $places);
+ }
+ }
+
+ next unless defined $self->{$idx};
+
+ if (!ref($self->{$idx})) {
+ $self->{$idx} = $self->format_amount(\%::myconfig, $self->{$idx}, $places);
+
+ } elsif (ref($self->{$idx}) eq "ARRAY") {
+ for (my $i = 0; $i < scalar(@{ $self->{$idx} }); $i++) {
+ $self->{$idx}->[$i] = $self->format_amount(\%::myconfig, $self->{$idx}->[$i], $places);
+ }
+ }
+ }
+
+ $::myconfig{numberformat} = $saved_numberformat;
+}
+
1;
__END__
$query = qq|UPDATE ar SET paid = ? WHERE id = ?|;
do_query($form, $dbh, $query, $form->{paid}, conv_i($form->{id}));
- if (!$provided_dbh) {
- $dbh->commit();
- $dbh->disconnect();
- }
+ $dbh->commit if !$provided_dbh;
$main::lxdebug->leave_sub();
return;
# save printed, emailed and queued
$form->save_status($dbh);
- Common::webdav_folder($form) if ($main::webdav);
+ Common::webdav_folder($form);
# Link this record to the records it was created from.
RecordLinks->create_links('dbh' => $dbh,
'table' => 'ar',);
my $rc = 1;
- if (!$provided_dbh) {
- $dbh->commit();
- $dbh->disconnect();
- }
+ $dbh->commit if !$provided_dbh;
$main::lxdebug->leave_sub();
# sellprice is the cost of the item
my $linetotal = $form->round_amount(($ref->{sellprice} * $qty) / ( ($ref->{price_factor} || 1) * ( $basefactor || 1 )), 2);
- if (!$main::eur) {
+ if (!$::lx_office_conf{system}->{eur}) {
$ref->{expense_accno} = ($form->{"expense_accno_$row"}) ? $form->{"expense_accno_$row"} : $ref->{expense_accno};
# add to expense
$form->{amount_cogs}{ $form->{id} }{ $ref->{expense_accno} } += -$linetotal;
sub delete_invoice {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $form, $spool) = @_;
+ my ($self, $myconfig, $form) = @_;
# connect to database
my $dbh = $form->dbconnect_noauto($myconfig);
# Falls wir ein Storno haben, müssen zwei Felder in der stornierten Rechnung wieder
# zurückgesetzt werden. Vgl:
- # id | storno | storno_id | paid | amount
+ # id | storno | storno_id | paid | amount
#----+--------+-----------+---------+-----------
# 18 | f | | 0.00000 | 119.00000
# ZU:
$dbh->disconnect;
if ($rc) {
+ my $spool = $::lx_office_conf{paths}->{spool};
map { unlink "$spool/$_" if -f "$spool/$_"; } @spoolfiles;
}
}
$sth->finish;
- Common::webdav_folder($form) if ($main::webdav);
+ Common::webdav_folder($form);
}
my $rc = $dbh->commit;
# to distinguish case A and B the variable pricegroup_id_$i is used
# for new articles this variable isn't defined, for loaded articles it is
# sellprice can't be used, as it already has 0,00 set
-
+
if ($pkr->{pricegroup_id} eq $form->{"pricegroup_id_$i"} and defined $form->{"pricegroup_id_$i"}) {
# Case A
$pkr->{selected} = ' selected';
- } elsif ($pkr->{pricegroup_id} eq $form->{customer_klass}
- and not defined $form->{"pricegroup_id_$i"}
+ } elsif ($pkr->{pricegroup_id} eq $form->{customer_klass}
+ and not defined $form->{"pricegroup_id_$i"}
and $pkr->{price} != 0 # only use customer pricegroup price if it has a value, else use default_sellprice
# for the case where pricegroup prices haven't been set
) {
if ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
$pkr->{selected} = ' selected';
}
- } elsif (($price_new != $form->{"sellprice_$i"}) and ($price_new ne 0) and defined $price_new) {
+ } elsif ( ($form->parse_amount($myconfig, $price_new)
+ != $form->parse_amount($myconfig, $form->{"sellprice_$i"}))
+ and ($price_new ne 0) and defined $price_new) {
# sellprice has changed
# when loading existing invoices $price_new is NULL
if ($pkr->{pricegroup_id} == 0) {
my $keyword_pos = $pos - 1 + $tag_start_len;
- if ((substr($text, $keyword_pos, 2) eq 'if') || (substr($text, $keyword_pos, 3) eq 'foreach')) {
+ if ((substr($text, $keyword_pos, 2) eq 'if') || (substr($text, $keyword_pos, 7) eq 'foreach')) {
$depth++;
} elsif ((substr($text, $keyword_pos, 4) eq 'else') && (1 == $depth)) {
}
sub _get_latex_path {
- return $main::latex_bin || 'pdflatex';
+ return $::lx_office_conf{applications}->{latex} || 'pdflatex';
}
sub get_mime_type() {
$form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
# retrieve order/quotation
- $form->{webdav} = $main::webdav;
+ $form->{webdav} = $::lx_office_conf{system}->{webdav};
$form->{jsscript} = 1;
my $editing = $form->{id};
my $currency = $form->{currency};
invoice_links();
+ if ($form->{ordnumber}) {
+ require SL::DB::Order;
+ if (my $order = SL::DB::Manager::Order->find_by(ordnumber => $form->{ordnumber})) {
+ $order->load;
+ $form->{orddate} = $order->transdate_as_date;
+ $form->{$_} = $order->$_ for qw(payment_id salesman_id taxzone_id quonumber);
+ }
+ }
+
$form->{currency} = $currency;
$form->{exchangerate} = "";
$form->{forex} = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{invdate}, $buysell);
my $pinfo = $part_info_map{$request->{parts_id}};
my $binfo = $bin_info_map{$request->{bin_id}};
- if ($main::show_best_before) {
+ if ($::lx_office_conf{system}->{show_best_before}) {
push @{ $form->{ERRORS} }, $locale->text("There is not enough available of '#1' at warehouse '#2', bin '#3', #4, #5, for the transfer of #6.",
$pinfo->{description},
$binfo->{warehouse_description},
"ean" => $form->{ean},
"description" => $form->{description});
- $form->show_generic_error($locale->text("The selected warehouse is empty.")) if (0 == scalar(@contents));
+ if (0 == scalar(@contents)) {
+ $form->show_generic_error($locale->text("The selected warehouse is empty, or no stocked items where found that match the filter settings."));
+ }
my $all_units = AM->retrieve_units(\%myconfig, $form);
$form->error($locale->text('The warehouse or the bin is missing.'));
}
- if (!$main::show_best_before) {
+ if (!$::lx_office_conf{system}->{show_best_before}) {
$form->{bestbefore} = '';
}
\input texinfo @c -*-texinfo-*-
@c %**start of header
- @documentencoding UTF-8
@setfilename INSTALL.info
+ @documentencoding UTF-8
@settitle Lx-Office Installationsanleitung
@c %**end of header
@menu
* Aktuelle Hinweise:: Andere Informationsquellen als diese Anleitung
* Benötigte Software und Pakete:: Vorraussetzungen zum Betrieb von Lx-Office
- * Installation des Programmpaketes:: Installationsort, Berechtigungen
+ * Manuelle Installation des Programmpaketes:: Installationsort, Berechtigungen
* Anpassung der PostgreSQL-Konfiguration:: Verschiedene Aspekte der Datenbankkonfiguration
* Apache-Konfiguration:: Einrichtung eines Aliases und Optionen für das Ausführen von CGI-Scripten
* Benutzerauthentifizierung und Administratorpasswort:: Einrichtung der Authentifizierungsdatenbank und der Passwortüberprüfung
@node Benötigte Software und Pakete
@chapter Benötigte Software und Pakete
- Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist Apache) und ein Datenbankserver (PostgreSQL) benötigt.
+ @menu
+ * Betriebssystem:: Unterstützte Betriebsysteme und Hinweise für ältere Systeme
+ * Pakete:: Benötigte Software und Perlpakete sowie deren Quellen
+ @end menu
+
+ @node Betriebssystem
+ @section Betriebssystem
- Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die nicht Bestandteil einer Standard-Perl-Installation sind:
+ Lx-Office ist für Linux konzipiert, und sollte auf jedem unixoiden
+ Betriebssystem zum Laufen zu kriegen sein. Getestet ist diese Version im
+ speziellen auf Debian und Ubuntu, grundsätzlich wurde bei der Auswahl der
+ Pakete aber darauf Rücksicht genommen, dass es ohne große Probleme auf den
+ derzeit aktuellen verbreiteten Distributionen läuft.
+
+ Anfang 2011 sind das folgende Systeme:
@itemize
@item
+ Ubuntu 8.04 LTS Hardy Heron
+ @item
+ Ubuntu 9.10 Karmic Koala
+ @item
+ Ubuntu 10.04 Lucid Lynx
+ @item
+ Ubuntu 10.10 Maverick Meerkat
+ @item
+ Debian 5.0 Lenny
+ @item
+ Debian 6.0 Squeeze
+ @item
+ openSUSE 11.2
+ @item
+ openSUSE 11.3
+ @item
+ SuSE Linux Enterprice Server 11
+ @item
+ Fedora 13
+ @item
+ Fedora 14
+ @end itemize
+
+ Für die debianoiden Betriebssysteme existiert ein .deb, das deutlich einfacher
+ zu installieren ist.
+
+ Ubuntu 8.04 LTS hat zusätzlich die Schwierigkeit, dass die Module im Archiv
+ recht alt sind, und das viele der benötigten Module nicht einfach zu
+ installieren sind. Dafür sollte es kurz nach dem Release ein eigenes .deb
+ geben.
+
+ Alternativ dazu kann die normale Installation durchgeführt werden
+ (@pxref{Manuelle Installation des Programmpaketes}), wenn vorher ein
+ Kompatibilitätspaket installiert wird, das die fehlenden Pakete bereitstellt.
+ Das Paket ist auf @uref{https://sourceforge.net/projects/lx-office/files/Lx-Office%20ERP/2.6.2/, Sourceforge} unter dem Namen @code{lx-erp-perl-libs-compat-v2.tar.gz} hinterlegt.
+
+ Zur Installation das Paket in das entpackte Lx-Office Verzeichnis entpacken:
+
+ @code{tar xzf lx-erp-perl-libs-compat-v2.tar.gz /path/to/lx-office/}
+
+ Danach sollte der Installationscheck (@pxref{Pakete}) die enthaltenen Pakete erkennen.
+
+ @node Pakete
+ @section Pakete
+
+ Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist Apache)
+ und ein Datenbankserver (PostgreSQL, mindestens v8.2) benötigt.
+
+ Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die nicht Bestandteil
+ einer Standard-Perl-Installation sind:
+
+ @itemize
+ @item
+ parent
+ @item
Archive::Zip
@item
Class::Accessor
@item
PDF::API2
@item
- Readonly (benötigt) und Readonly::XS (optional)
- @item
Rose::Object
@item
Rose::DB
Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete hinzugekommen, @code{URI}
und @code{XML::Writer} sind notwendig. Ohne startet Lx-Office nicht.
+ Gegenüber Version 2.6.1 sind @code{parent}, @code{DateTime},
+ @code{Rose::Object}, @code{Rose::DB} und @code{Rose::DB::Object} neu
+ hinzugekommen. @code{IO::Wrap} wurde entfernt.
+
@code{Email::Address} und @code{List::MoreUtils} sind schon länger feste
Abhängigkeiten, wurden aber bisher mit Lx-Office mitgeliefert. Beide sind auch
in 2.6.1 weiterhin mit ausgeliefert, wurden in einer zukünftigen Version aber
Für Debian oder Ubuntu benötigen Sie diese Pakete:
- @code{apache2 postgresql libarchive-zip-perl libclass-accessor-perl libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl libemail-address-perl libio-stringy-perl liblist-moreutils-perl libpdf-api2-perl libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl}
+ @code{apache2 postgresql libparent-perl libarchive-zip-perl libclass-accessor-perl libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl libemail-address-perl liblist-moreutils-perl libpdf-api2-perl librose-object-perl librose-db-perl librose-db-object-perl libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl}
Für Fedora Core benötigen Sie diese Pakete:
- @code{httpd postgresql-server perl-Class-Accessor perl-DateTime perl-DBI perl-DBD-Pg perl-Email-Address perl-IO-stringy perl-List-MoreUtils perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML}
+ @code{httpd postgresql-server perl-parent perl-Class-Accessor perl-DateTime perl-DBI perl-DBD-Pg perl-Email-Address perl-List-MoreUtils perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML}
Für OpenSuSE benötigen Sie diese Pakete:
- @code{apache2 postgresql-server perl-Archive-Zip perl-Class-Accessor perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-IO-stringy perl-List-MoreUtils perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML}
+ @code{apache2 postgresql-server perl-Archive-Zip perl-Class-Accessor perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-List-MoreUtils perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML}
+
+ Bei openSuSE 11 ist @code{parent} bereits enthalten, und braucht nicht nachinstalliert werden. Die @code{Rose::*} Pakete sind derzeit nicht für SuSE gepackt, und müssen anderweitig nachinstalliert werden.
Lx-Office enthält ein Script, mit dem überprüft werden kann, ob alle
benötigten Perl-Module installiert sind. Der Aufruf lautet wie folgt:
@c ---------------------------------------------------------------
- @node Installation des Programmpaketes
- @chapter Installation des Programmpaketes
+ @node Manuelle Installation des Programmpaketes
+ @chapter Manuelle Installation des Programmpaketes
- Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.1.tgz) wird im
+ Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.2.tgz) wird im
Dokumentenverzeichnis des Webservers (z.B. @code{/var/www/html/},
@code{/srv/www/htdocs} oder @code{/var/www/}) entpackt:
@code{cd /var/www
@*
- tar xvzf lxoffice-erp-2.6.1.tgz}
+ tar xvzf lxoffice-erp-2.6.2.tgz}
Verändern Sie evtl. noch den Namen des Verzeichnisses mit
In der Datei @code{postgresql.conf}, die je nach Distribution in
verschiedenen Verzeichnissen liegen kann
(z.B. @code{/var/lib/pgsql/data/} oder @code{/etc/postgresql/}, muss
- sichergestellt werden, dass TCP/IP-Verbindungen aktiviert sind. Für
- PostgreSQL vor Version v8.0 lautete dieser Parameter
-
- @code{TCPIP_SOCKET = 1}
-
- Ab v8.0 wird das Verhalten hingegen über den neuen Parameter
- @code{listen_address} gesteuert. Laufen PostgreSQL und Lx-Office auf
- demselben Rechner, so kann dort der Wert @code{localhost} verwendet
- werden. Andernfalls müssen Datenbankverbindungen auch von anderen
- Rechnern aus zugelassen werden, was mit dem Wert \@code{*} geschieht.
+ sichergestellt werden, dass TCP/IP-Verbindungen aktiviert sind. Das
+ Verhalten wird über den Parameter @code{listen_address}
+ gesteuert. Laufen PostgreSQL und Lx-Office auf demselben Rechner, so
+ kann dort der Wert @code{localhost} verwendet werden. Andernfalls
+ müssen Datenbankverbindungen auch von anderen Rechnern aus zugelassen
+ werden, was mit dem Wert \@code{*} geschieht.
In der Datei @code{pg_hba.conf}, die im gleichen Verzeichnis wie die
@code{postgresql.conf} zu finden sein sollte, müssen die
@node Erweiterung für servergespeicherte Prozeduren
@section Erweiterung für servergespeicherte Prozeduren
- In der Datenbank @code{template1} muss die Unterstützung für
- servergespeicherte Prozeduren eingerichet werden. Melden Sie sich
- dafür als Benutzer ``postgres'' an der Datenbank an, und führen Sie
- die folgenden Kommandos aus:
+ In der Datenbank @code{template1} muss die Unterstützung für servergespeicherte
+ Prozeduren eingerichet werden. Melden Sie sich dafür als Benutzer ``postgres''
+ an der Datenbank an, und führen Sie die folgenden Kommandos aus:
+
+ @code{create language 'plpgsql';}
+
+ Achtung: In älteren Postgresversionen (vor 8.0) muss der Handler für die
+ Sprache manuell anlelegt werden, diese Versionen werden aber nicht mehr
+ offiziell von Lx-Office unterstützt. Dafür dann die folgenden Kommandos:
@code{create function plpgsql_call_handler () returns opaque as '/usr/lib/pgsql/plpgsql.so' language 'c';
@*
- create language 'plpgsql' handler plpgsql_call_handler
- lancompiler 'pl/pgsql';}
-
- Bitte beachten Sie, dass der Pfad zur Datei @code{plpgsql.so} von
- Distribution zu Distribution verschiedlich sein kann. Bei
- Debian/Ubuntu befindet sie sich unter
- @code{/usr/lib/postgresql/lib/plpgsql.so}, bei Ubuntu 9.10 unter @code{/usr/lib/postgresql/8.4/lib/plpgsql.so}.
+ create language 'plpgsql' handler plpgsql_call_handler lancompiler 'pl/pgsql';}
+ Bitte beachten Sie, dass der Pfad zur Datei @code{plpgsql.so} von Distribution
+ zu Distribution verschiedlich sein kann. Bei Debian/Ubuntu befindet sie sich
+ unter @code{/usr/lib/postgresql/lib/plpgsql.so}.
@c ---------------------------------------------------------------
@node Apache-Konfiguration
@chapter Apache-Konfiguration
+ Hinweis: Für einen deutlichen Performanceschub sorgt die Ausführung
+ mittels FCGI. Die Einrichtung wird ausführlich in der Datei
+ @code{INSTALL.fcgi} beschrieben.
+
Der Zugriff auf das Programmverzeichnis muss in der Apache
Webserverkonfigurationsdatei @code{httpd.conf} eingestellt
werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
Wenn Sie für die Lx-Office-Installation nicht den europäischen
Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
müssen Sie vor dem Anlegen der Datenbank in der Datei
-@code{config/lx-erp.conf} die Variable @code{$dbcharset} auf den Wert
-@samp{UTF-8} setzen. Zusätzlich muss beim Anlegen der Datenbank
-@samp{UTF-8 Unicode} als Schriftsatz ausgewählt werden.
+@code{config/lx_office.conf} die Variable @code{dbcharset} im
+Abschnitt @code{system} auf den Wert @samp{UTF-8} setzen. Zusätzlich
+muss beim Anlegen der Datenbank @samp{UTF-8 Unicode} als Schriftsatz
+ausgewählt werden.
Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
verwenden müssen, da diese Einstellungen momentan global in Lx-Office
@node Migration alter Installationen
@section Migration alter Installationen
- Wenn Lx-Office 2.6.1 über eine ältere Version installiert wird, in der
+ Wenn Lx-Office 2.6.2 über eine ältere Version installiert wird, in der
die Benutzerdaten noch im Dateisystem im Verzeichnis @code{users}
verwaltet wurden, so bietet Lx-Office die Möglichkeit, diese
Benutzerdaten automatisch in die Authentifizierungsdatenbank zu
erzeugt. Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als
auch aus diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
OpenDocument-Vorlagen zu aktivieren muss in der Datei
-@code{config/lx-erp.conf} die Variable @code{$opendocument_templates}
-auf @samp{1} stehen. Dieses ist die Standardeinstellung.
+@code{config/lx_office.conf} die Variable @code{opendocument} im
+Abschnitt @code{print_templates} auf @samp{1} stehen. Dieses ist die
+Standardeinstellung.
-Weiterhin muss in der Datei @code{config/lx-erp.conf} die Variable
-@code{$dbcharset} auf die Zeichenkodierung gesetzt werden, die auch
-bei der Speicherung der Daten in der Datenbank verwendet wird. Diese
-ist in den meisten Fällen "UTF-8".
+Weiterhin muss in der Datei @code{config/lx_office.conf} die Variable
+@code{dbcharset} im Abschnitt @code{system} auf die Zeichenkodierung
+gesetzt werden, die auch bei der Speicherung der Daten in der
+Datenbank verwendet wird. Diese ist in den meisten Fällen "UTF-8".
Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
(xvfb) installiert werden. Bei Debian ist er im Paket ``xvfb''
enthalten. Andere Distributionen enthalten ihn in anderen Paketen.
-Nach der Installation müssen in der Datei @code{config/lx-erp.conf}
-zwei weitere Variablen angepasst werden:
-@code{$openofficeorg_writer_bin} muss den vollständigen Pfad zur
-OpenOffice.org Writer-Anwendung enthalten. @code{$xvfb_bin} muss den
-Pfad zum ``X virtual frame buffer'' enthalten.
+Nach der Installation müssen in der Datei @code{config/lx_config.conf}
+zwei weitere Variablen angepasst werden: @code{openofficeorg_writer}
+muss den vollständigen Pfad zur OpenOffice.org Writer-Anwendung
+enthalten. @code{xvfb} muss den Pfad zum ``X virtual frame buffer''
+enthalten. Beide stehen im Abschnitt @code{applications}.
Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn
@code{mv users/.openoffice.org2 users/.openoffice}
- Dieses Verzeichnis, wie auch das komplette @code{users}-Verzeichnis,
- muss vom Webserver beschreibbar sein. Dieses wurde in Schritt
- @code{Installation des Programmpakets} oben bereits erledigt, kann
- aber erneut überprüft werden, wenn die Konvertierung nach PDF
- fehlschlägt.
+ Dieses Verzeichnis, wie auch das komplette @code{users}-Verzeichnis, muss vom
+ Webserver beschreibbar sein. Dieses wurde bereits erledigt
+ (@pxref{Manuelle Installation des Programmpaketes}), kann aber erneut überprüft
+ werden, wenn die Konvertierung nach PDF fehlschlägt.
@c ---------------------------------------------------------------
Inhalt der Anleitung
1 Aktuelle Hinweise
2 Benötigte Software und Pakete
- 3 Installation des Programmpaketes
+ 2.1 Betriebssystem
+ 2.2 Pakete
+ 3 Manuelle Installation des Programmpaketes
4 Anpassung der PostgreSQL-Konfiguration
4.1 Zeichensätze/die Verwendung von UTF-8
4.2 Änderungen an Konfigurationsdateien
2 Benötigte Software und Pakete
********************************
+ 2.1 Betriebssystem
+ ==================
+
+ Lx-Office ist für Linux konzipiert, und sollte auf jedem unixoiden
+ Betriebssystem zum Laufen zu kriegen sein. Getestet ist diese Version im
+ speziellen auf Debian und Ubuntu, grundsätzlich wurde bei der Auswahl
+ der Pakete aber darauf Rücksicht genommen, dass es ohne große Probleme
+ auf den derzeit aktuellen verbreiteten Distributionen läuft.
+
+ Anfang 2011 sind das folgende Systeme:
+
+ * Ubuntu 8.04 LTS Hardy Heron
+
+ * Ubuntu 9.10 Karmic Koala
+
+ * Ubuntu 10.04 Lucid Lynx
+
+ * Ubuntu 10.10 Maverick Meerkat
+
+ * Debian 5.0 Lenny
+
+ * Debian 6.0 Squeeze
+
+ * openSUSE 11.2
+
+ * openSUSE 11.3
+
+ * SuSE Linux Enterprice Server 11
+
+ * Fedora 13
+
+ * Fedora 14
+
+ Für die debianoiden Betriebssysteme existiert ein .deb, das deutlich
+ einfacher zu installieren ist.
+
+ Ubuntu 8.04 LTS hat zusätzlich die Schwierigkeit, dass die Module im
+ Archiv recht alt sind, und das viele der benötigten Module nicht
+ einfach zu installieren sind. Dafür sollte es kurz nach dem Release ein
+ eigenes .deb geben.
+
+ Alternativ dazu kann die normale Installation durchgeführt werden
+ (*note Manuelle Installation des Programmpaketes::), wenn vorher ein
+ Kompatibilitätspaket installiert wird, das die fehlenden Pakete
+ bereitstellt. Das Paket ist auf Sourceforge
+ (https://sourceforge.net/projects/lx-office/files/Lx-Office%20ERP/2.6.2/)
+ unter dem Namen `lx-erp-perl-libs-compat-v2.tar.gz' hinterlegt.
+
+ Zur Installation das Paket in das entpackte Lx-Office Verzeichnis
+ entpacken:
+
+ `tar xzf lx-erp-perl-libs-compat-v2.tar.gz /path/to/lx-office/'
+
+ Danach sollte der Installationscheck (*note Pakete::) die
+ enthaltenen Pakete erkennen.
+
+ 2.2 Pakete
+ ==========
+
Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist Apache)
- und ein Datenbankserver (PostgreSQL) benötigt.
+ und ein Datenbankserver (PostgreSQL, mindestens v8.2) benötigt.
Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die nicht
Bestandteil einer Standard-Perl-Installation sind:
+ * parent
+
* Archive::Zip
* Class::Accessor
* PDF::API2
- * Readonly (benötigt) und Readonly::XS (optional)
-
* Rose::Object
* Rose::DB
Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete hinzugekommen,
`URI' und `XML::Writer' sind notwendig. Ohne startet Lx-Office nicht.
+ Gegenüber Version 2.6.1 sind `parent', `DateTime', `Rose::Object',
+ `Rose::DB' und `Rose::DB::Object' neu hinzugekommen. `IO::Wrap' wurde
+ entfernt.
+
`Email::Address' und `List::MoreUtils' sind schon länger feste
Abhängigkeiten, wurden aber bisher mit Lx-Office mitgeliefert. Beide
sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
Für Debian oder Ubuntu benötigen Sie diese Pakete:
- `apache2 postgresql libarchive-zip-perl libclass-accessor-perl
- libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl
- libemail-address-perl libio-stringy-perl liblist-moreutils-perl
- libpdf-api2-perl libtemplate-perl libtext-csv-xs-perl
+ `apache2 postgresql libparent-perl libarchive-zip-perl
+ libclass-accessor-perl libdatetime-perl libdbi-perl libdbd-pg-perl
+ libpg-perl libemail-address-perl liblist-moreutils-perl
+ libpdf-api2-perl librose-object-perl librose-db-perl
+ librose-db-object-perl libtemplate-perl libtext-csv-xs-perl
libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl'
Für Fedora Core benötigen Sie diese Pakete:
- `httpd postgresql-server perl-Class-Accessor perl-DateTime perl-DBI
- perl-DBD-Pg perl-Email-Address perl-IO-stringy perl-List-MoreUtils
- perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv
- perl-URI perl-XML-Writer perl-YAML'
+ `httpd postgresql-server perl-parent perl-Class-Accessor
+ perl-DateTime perl-DBI perl-DBD-Pg perl-Email-Address
+ perl-List-MoreUtils perl-PDF-API2 perl-Rose-Object perl-Rose-DB
+ perl-Rose-DB-Object perl-Template-Toolkit perl-Text-CSV_XS
+ perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML'
Für OpenSuSE benötigen Sie diese Pakete:
`apache2 postgresql-server perl-Archive-Zip perl-Class-Accessor
- perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-IO-stringy
- perl-List-MoreUtils perl-PDF-API2 perl-Template-Toolkit
- perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML'
+ perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-List-MoreUtils
+ perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv
+ perl-URI perl-XML-Writer perl-YAML'
+
+ Bei openSuSE 11 ist `parent' bereits enthalten, und braucht nicht
+ nachinstalliert werden. Die `Rose::*' Pakete sind derzeit nicht für
+ SuSE gepackt, und müssen anderweitig nachinstalliert werden.
Lx-Office enthält ein Script, mit dem überprüft werden kann, ob alle
benötigten Perl-Module installiert sind. Der Aufruf lautet wie folgt:
`./scripts/installation_check.pl'
- 3 Installation des Programmpaketes
- **********************************
+ 3 Manuelle Installation des Programmpaketes
+ *******************************************
- Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.1.tgz) wird im
+ Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.2.tgz) wird im
Dokumentenverzeichnis des Webservers (z.B. `/var/www/html/',
`/srv/www/htdocs' oder `/var/www/') entpackt:
`cd /var/www
- tar xvzf lxoffice-erp-2.6.1.tgz'
+ tar xvzf lxoffice-erp-2.6.2.tgz'
Verändern Sie evtl. noch den Namen des Verzeichnisses mit
In der Datei `postgresql.conf', die je nach Distribution in
verschiedenen Verzeichnissen liegen kann (z.B. `/var/lib/pgsql/data/'
oder `/etc/postgresql/', muss sichergestellt werden, dass
- TCP/IP-Verbindungen aktiviert sind. Für PostgreSQL vor Version v8.0
- lautete dieser Parameter
-
- `TCPIP_SOCKET = 1'
-
- Ab v8.0 wird das Verhalten hingegen über den neuen Parameter
- `listen_address' gesteuert. Laufen PostgreSQL und Lx-Office auf
- demselben Rechner, so kann dort der Wert `localhost' verwendet werden.
- Andernfalls müssen Datenbankverbindungen auch von anderen Rechnern aus
- zugelassen werden, was mit dem Wert \`*' geschieht.
+ TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
+ Parameter `listen_address' gesteuert. Laufen PostgreSQL und Lx-Office
+ auf demselben Rechner, so kann dort der Wert `localhost' verwendet
+ werden. Andernfalls müssen Datenbankverbindungen auch von anderen
+ Rechnern aus zugelassen werden, was mit dem Wert \`*' geschieht.
In der Datei `pg_hba.conf', die im gleichen Verzeichnis wie die
`postgresql.conf' zu finden sein sollte, müssen die Berichtigungen für
als Benutzer "postgres" an der Datenbank an, und führen Sie die
folgenden Kommandos aus:
+ `create language 'plpgsql';'
+
+ Achtung: In älteren Postgresversionen (vor 8.0) muss der Handler für
+ die Sprache manuell anlelegt werden, diese Versionen werden aber nicht
+ mehr offiziell von Lx-Office unterstützt. Dafür dann die folgenden
+ Kommandos:
+
`create function plpgsql_call_handler () returns opaque as
'/usr/lib/pgsql/plpgsql.so' language 'c';
create language 'plpgsql' handler plpgsql_call_handler lancompiler
Bitte beachten Sie, dass der Pfad zur Datei `plpgsql.so' von
Distribution zu Distribution verschiedlich sein kann. Bei Debian/Ubuntu
- befindet sie sich unter `/usr/lib/postgresql/lib/plpgsql.so', bei
- Ubuntu 9.10 unter `/usr/lib/postgresql/8.4/lib/plpgsql.so'.
+ befindet sie sich unter `/usr/lib/postgresql/lib/plpgsql.so'.
4.4 Datenbankbenutzer anlegen
=============================
5 Apache-Konfiguration
**********************
- Der Zugriff auf das Programmverzeichnis muss in der Apache
+ Hinweis: Für einen deutlichen Performanceschub sorgt die Ausführung
+ mittels FCGI. Die Einrichtung wird ausführlich in der Datei
+ `INSTALL.fcgi' beschrieben.
+
+ Der Zugriff auf das Programmverzeichnis muss in der Apache
Webserverkonfigurationsdatei `httpd.conf' eingestellt werden. Fügen Sie
den folgenden Abschnitt dieser Datei oder einer anderen Datei hinzu,
die beim Starten des Webservers eingelesen wird:
Wenn Sie für die Lx-Office-Installation nicht den europäischen
Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
müssen Sie vor dem Anlegen der Datenbank in der Datei
-`config/lx-erp.conf' die Variable `$dbcharset' auf den Wert `UTF-8'
-setzen. Zusätzlich muss beim Anlegen der Datenbank `UTF-8 Unicode' als
-Schriftsatz ausgewählt werden.
+`config/lx_office.conf' die Variable `dbcharset' im Abschnitt `system'
+auf den Wert `UTF-8' setzen. Zusätzlich muss beim Anlegen der Datenbank
+`UTF-8 Unicode' als Schriftsatz ausgewählt werden.
Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
verwenden müssen, da diese Einstellungen momentan global in Lx-Office
7.6 Migration alter Installationen
==================================
- Wenn Lx-Office 2.6.1 über eine ältere Version installiert wird, in der
+ Wenn Lx-Office 2.6.2 über eine ältere Version installiert wird, in der
die Benutzerdaten noch im Dateisystem im Verzeichnis `users' verwaltet
wurden, so bietet Lx-Office die Möglichkeit, diese Benutzerdaten
automatisch in die Authentifizierungsdatenbank zu übernehmen. Dies
Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als auch aus
diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
OpenDocument-Vorlagen zu aktivieren muss in der Datei
-`config/lx-erp.conf' die Variable `$opendocument_templates' auf `1'
-stehen. Dieses ist die Standardeinstellung.
+`config/lx_office.conf' die Variable `opendocument' im Abschnitt
+`print_templates' auf `1' stehen. Dieses ist die Standardeinstellung.
- Weiterhin muss in der Datei `config/lx-erp.conf' die Variable
-`$dbcharset' auf die Zeichenkodierung gesetzt werden, die auch bei der
-Speicherung der Daten in der Datenbank verwendet wird. Diese ist in den
-meisten Fällen "UTF-8".
+ Weiterhin muss in der Datei `config/lx_office.conf' die Variable
+`dbcharset' im Abschnitt `system' auf die Zeichenkodierung gesetzt
+werden, die auch bei der Speicherung der Daten in der Datenbank
+verwendet wird. Diese ist in den meisten Fällen "UTF-8".
Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
(xvfb) installiert werden. Bei Debian ist er im Paket "xvfb"
enthalten. Andere Distributionen enthalten ihn in anderen Paketen.
- Nach der Installation müssen in der Datei `config/lx-erp.conf' zwei
-weitere Variablen angepasst werden: `$openofficeorg_writer_bin' muss
+ Nach der Installation müssen in der Datei `config/lx_config.conf'
+zwei weitere Variablen angepasst werden: `openofficeorg_writer' muss
den vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten.
-`$xvfb_bin' muss den Pfad zum "X virtual frame buffer" enthalten.
+`xvfb' muss den Pfad zum "X virtual frame buffer" enthalten. Beide
+stehen im Abschnitt `applications'.
Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn die
`mv users/.openoffice.org2 users/.openoffice'
Dieses Verzeichnis, wie auch das komplette `users'-Verzeichnis, muss
- vom Webserver beschreibbar sein. Dieses wurde in Schritt `Installation
- des Programmpakets' oben bereits erledigt, kann aber erneut überprüft
+ vom Webserver beschreibbar sein. Dieses wurde bereits erledigt (*note
+ Manuelle Installation des Programmpaketes::), kann aber erneut überprüft
werden, wenn die Konvertierung nach PDF fehlschlägt.
9 Lx-Office ERP verwenden
`http://localhost/lx-office-erp/admin.pl'
+
+ \1f
+ Local Variables:
+ coding: utf-8
+ End:
<html lang="en">
<head>
<title>Datenbanken anlegen - Lx-Office Installationsanleitung</title>
- <meta http-equiv="Content-Type" content="text/html">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Lx-Office Installationsanleitung">
- <meta name="generator" content="makeinfo 4.13">
+ <meta name="generator" content="makeinfo 4.11">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Benutzer_002d-und-Gruppenverwaltung.html#Benutzer_002d-und-Gruppenverwaltung" title="Benutzer- und Gruppenverwaltung">
<link rel="prev" href="Zusammenh_00c3_00a4nge.html#Zusammenh_00c3_00a4nge" title="Zusammenhänge">
</head>
<body>
<div class="node">
- <a name="Datenbanken-anlegen"></a>
<p>
- Next: <a rel="next" accesskey="n" href="Gruppen-anlegen.html#Gruppen-anlegen">Gruppen anlegen</a>,
- Previous: <a rel="previous" accesskey="p" href="Zusammenh_00c3_00a4nge.html#Zusammenh_00c3_00a4nge">Zusammenhänge</a>,
- Up: <a rel="up" accesskey="u" href="Benutzer_002d-und-Gruppenverwaltung.html#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
+ <a name="Datenbanken-anlegen"></a>
+ nächstes: <a rel="next" accesskey="n" href="Gruppen-anlegen.html#Gruppen-anlegen">Gruppen anlegen</a>,
+ voriges: <a rel="previous" accesskey="p" href="Zusammenh_00c3_00a4nge.html#Zusammenh_00c3_00a4nge">Zusammenhänge</a>,
+ aufwärts: <a rel="up" accesskey="u" href="Benutzer_002d-und-Gruppenverwaltung.html#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
<hr>
</div>
<p>Wenn Sie für die Lx-Office-Installation nicht den europäischen
Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
müssen Sie vor dem Anlegen der Datenbank in der Datei
-<code>config/lx-erp.conf</code> die Variable <code>$dbcharset</code> auf den Wert
-‘<samp><span class="samp">UTF-8</span></samp>’ setzen. Zusätzlich muss beim Anlegen der Datenbank
-‘<samp><span class="samp">UTF-8 Unicode</span></samp>’ als Schriftsatz ausgewählt werden.
+<code>config/lx_office.conf</code> die Variable <code>dbcharset</code> im
+Abschnitt <code>system</code> auf den Wert ‘<samp><span class="samp">UTF-8</span></samp>’ setzen. Zusätzlich
+muss beim Anlegen der Datenbank ‘<samp><span class="samp">UTF-8 Unicode</span></samp>’ als Schriftsatz
+ausgewählt werden.
<p>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
verwenden müssen, da diese Einstellungen momentan global in Lx-Office
<html lang="en">
<head>
<title>OpenDocument-Vorlagen - Lx-Office Installationsanleitung</title>
- <meta http-equiv="Content-Type" content="text/html">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Lx-Office Installationsanleitung">
- <meta name="generator" content="makeinfo 4.13">
+ <meta name="generator" content="makeinfo 4.11">
<link title="Top" rel="start" href="index.html#Top">
<link rel="prev" href="Benutzer_002d-und-Gruppenverwaltung.html#Benutzer_002d-und-Gruppenverwaltung" title="Benutzer- und Gruppenverwaltung">
<link rel="next" href="Lx_002dOffice-ERP-verwenden.html#Lx_002dOffice-ERP-verwenden" title="Lx-Office ERP verwenden">
</head>
<body>
<div class="node">
+ <p>
<a name="OpenDocument-Vorlagen"></a>
<a name="OpenDocument_002dVorlagen"></a>
- <p>
- Next: <a rel="next" accesskey="n" href="Lx_002dOffice-ERP-verwenden.html#Lx_002dOffice-ERP-verwenden">Lx-Office ERP verwenden</a>,
- Previous: <a rel="previous" accesskey="p" href="Benutzer_002d-und-Gruppenverwaltung.html#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>,
- Up: <a rel="up" accesskey="u" href="index.html#Top">Top</a>
+ nächstes: <a rel="next" accesskey="n" href="Lx_002dOffice-ERP-verwenden.html#Lx_002dOffice-ERP-verwenden">Lx-Office ERP verwenden</a>,
+ voriges: <a rel="previous" accesskey="p" href="Benutzer_002d-und-Gruppenverwaltung.html#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>,
+ aufwärts: <a rel="up" accesskey="u" href="index.html#Top">Top</a>
<hr>
</div>
erzeugt. Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als
auch aus diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
OpenDocument-Vorlagen zu aktivieren muss in der Datei
-<code>config/lx-erp.conf</code> die Variable <code>$opendocument_templates</code>
-auf ‘<samp><span class="samp">1</span></samp>’ stehen. Dieses ist die Standardeinstellung.
+<code>config/lx_office.conf</code> die Variable <code>opendocument</code> im
+Abschnitt <code>print_templates</code> auf ‘<samp><span class="samp">1</span></samp>’ stehen. Dieses ist die
+Standardeinstellung.
- <p>Weiterhin muss in der Datei <code>config/lx-erp.conf</code> die Variable
-<code>$dbcharset</code> auf die Zeichenkodierung gesetzt werden, die auch
-bei der Speicherung der Daten in der Datenbank verwendet wird. Diese
-ist in den meisten Fällen "UTF-8".
+ <p>Weiterhin muss in der Datei <code>config/lx_office.conf</code> die Variable
+<code>dbcharset</code> im Abschnitt <code>system</code> auf die Zeichenkodierung
+gesetzt werden, die auch bei der Speicherung der Daten in der
+Datenbank verwendet wird. Diese ist in den meisten Fällen "UTF-8".
<p>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
(xvfb) installiert werden. Bei Debian ist er im Paket “xvfb”
enthalten. Andere Distributionen enthalten ihn in anderen Paketen.
- <p>Nach der Installation müssen in der Datei <code>config/lx-erp.conf</code>
-zwei weitere Variablen angepasst werden:
-<code>$openofficeorg_writer_bin</code> muss den vollständigen Pfad zur
-OpenOffice.org Writer-Anwendung enthalten. <code>$xvfb_bin</code> muss den
-Pfad zum “X virtual frame buffer” enthalten.
+ <p>Nach der Installation müssen in der Datei <code>config/lx_config.conf</code>
+zwei weitere Variablen angepasst werden: <code>openofficeorg_writer</code>
+muss den vollständigen Pfad zur OpenOffice.org Writer-Anwendung
+enthalten. <code>xvfb</code> muss den Pfad zum “X virtual frame buffer”
+enthalten. Beide stehen im Abschnitt <code>applications</code>.
<p>Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn
<p><code>mv users/.openoffice.org2 users/.openoffice</code>
- <p>Dieses Verzeichnis, wie auch das komplette <code>users</code>-Verzeichnis,
- muss vom Webserver beschreibbar sein. Dieses wurde in Schritt
- <code>Installation des Programmpakets</code> oben bereits erledigt, kann
- aber erneut überprüft werden, wenn die Konvertierung nach PDF
- fehlschlägt.
+ <p>Dieses Verzeichnis, wie auch das komplette <code>users</code>-Verzeichnis, muss vom
+ Webserver beschreibbar sein. Dieses wurde bereits erledigt
+ (siehe <a href="Manuelle-Installation-des-Programmpaketes.html#Manuelle-Installation-des-Programmpaketes">Manuelle Installation des Programmpaketes</a>), kann aber erneut überprüft
+ werden, wenn die Konvertierung nach PDF fehlschlägt.
<!-- -->
</body></html>
'4. Quarter' => '4. Quartal',
'<b>What</b> do you want to look for?' => '<b>Wonach</b> wollen Sie suchen?',
'A Buchungsgruppe consists of a descriptive name and the account numbers for the income and expense accounts for those four tax zones as well as the inventory account number.' => 'Eine Buchungsgruppe besteht aus einem deskriptiven Namen, den Erlös- und Aufwandskonten für diese vier Steuerzonen sowie aus einem Inventarkonto.',
+ 'A digit is required.' => 'Eine Ziffer ist vorgeschrieben.',
'A group named "Full Access" has been created.' => 'Eine Gruppe namens "Vollzugriff" wurde angelegt.',
'A group with that name does already exist.' => 'Eine Gruppe mit diesem Namen gibt es bereits.',
'A lot of the usability of Lx-Office has been enhanced with javascript. Although it is currently possible to use every aspect of Lx-Office without javascript, we strongly recommend it. In a future version this may change and javascript may be necessary to access advanced features.' => 'Die Bedienung von Lx-Office wurde an vielen Stellen mit Javascript verbessert. Obwohl es derzeit möglich ist, jeden Aspekt von Lx-Office auch ohne Javascript zu benutzen, empfehlen wir es. In einer zukünftigen Version wird Javascript eventuell notwendig sein um weitergehende Features zu benutzen.',
+ 'A lower-case character is required.' => 'Ein Kleinbuchstabe ist vorgeschrieben.',
+ 'A special character is required (valid characters: #1).' => 'Ein Sonderzeichen ist vorgeschrieben (gültige Zeichen: #1).',
'A temporary directory could not be created:' => 'Ein temporäres Verzeichnis konnte nicht erstellt werden:',
'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'Eine temporäre Datei konnte nicht angelegt werden. Bitte stellen Sie sicher, dass das Verzeichnis "#1" vom Webserver beschrieben werden darf.',
'A temporary file could not be created:' => 'Eine temporäre Datei konnte nicht erstellt werden:',
'Amount' => 'Betrag',
'Amount Due' => 'Betrag fällig',
'Amount has to be greater then zero! Wrong row number: ' => 'Leere Eingabe oder Werte kleiner, gleich null eingegeben. Fehler in Reihe Nummer: ',
+ 'An invalid character was used (invalid characters: #1).' => 'Ein ungültiges Zeichen wurde benutzt (ungültige Zeichen: #1).',
+ 'An invalid character was used (valid characters: #1).' => 'Ein ungültiges Zeichen wurde benutzt (gültige Zeichen: #1).',
+ 'An upper-case character is required.' => 'Ein Großbuchstabe ist vorgeschrieben.',
'Annotations' => 'Anmerkungen',
'Another user with the login #1 does already exist.' => 'Es existiert bereits ein anderer Benutzer mit diesem Login.',
'Ap aging on %s' => 'Offene Verbindlichkeiten zum %s',
'BOM' => 'Stückliste',
'BWA' => 'BWA',
'Back' => 'Zurück',
+ 'Back to the login page' => 'Zurück zur Loginseite',
'Backup Dataset' => 'Datenbank sichern',
'Backup file' => 'Sicherungsdatei',
'Backup of dataset' => 'Sicherung der Datenbank',
'Company Name' => 'Firmenname',
'Compare to' => 'Gegenüberstellen zu',
'Configuration of individual TODO items' => 'Konfiguration für die einzelnen Aufgabenlistenpunkte',
+ 'Configure' => 'Konfigurieren',
'Confirm' => 'Bestätigen',
'Confirm!' => 'Bestätigen Sie!',
'Confirmation' => 'Auftragsbestätigung',
'Database Host' => 'Datenbankcomputer',
'Database User' => 'Datenbankbenutzer',
'Database User missing!' => 'Datenbankbenutzer fehlt!',
- 'Database backups and restorations are disabled in lx-erp.conf.' => 'Datenbanksicherungen und -wiederherstellungen sind in der lx-erp.conf deaktiviert.',
+ 'Database backups and restorations are disabled in the configuration.' => 'Datenbanksicherungen und -wiederherstellungen sind in der Konfiguration deaktiviert.',
'Database name' => 'Datenbankname',
'Database template' => 'Datenbankvorlage',
'Database update error:' => 'Fehler beim Datenbankupgrade:',
'Edit rights' => 'Rechte bearbeiten',
'Edit templates' => 'Vorlagen bearbeiten',
'Edit the Delivery Order' => 'Lieferschein bearbeiten',
+ 'Edit the configuration for periodic invoices' => 'Konfiguration für wiederkehrende Rechnungen bearbeiten',
'Edit the membership of all users in all groups:' => 'Bearbeiten der Mitgliedschaft aller Benutzer in allen Gruppen:',
'Edit the purchase_order' => 'Bearbeiten des Lieferantenauftrags',
'Edit the request_quotation' => 'Bearbeiten der Preisanfrage',
'Element disabled' => 'Element deaktiviert',
'Employee' => 'Bearbeiter',
'Empty transaction!' => 'Buchung ist leer!',
+ 'End date' => 'Enddatum',
'Enter a description for this new draft.' => 'Geben Sie eine Beschreibung für diesen Entwurf ein.',
'Enter longdescription' => 'Langtext eingeben',
'Enter the requested execution date or leave empty for the quickest possible execution:' => 'Geben Sie das jeweils gewünschte Ausführungsdatum an, oder lassen Sie das Feld leer für die schnellstmögliche Ausführung:',
'Export date' => 'Exportdatum',
'Export date from' => 'Exportdatum von',
'Export date to' => 'Exportdatum bis',
+ 'Extend automatically by n months' => 'Automatische Verlängerung um x Monate',
'Extended' => 'Gesamt',
'Extension Of Time' => 'Dauerfristverlängerung',
'Factor' => 'Faktor',
'Help Template Variables' => 'Hilfe zu Dokumenten-Variablen',
'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
'Hide by default' => 'Standardmäßig verstecken',
- 'History' => 'Historie',
'History Search' => 'Historien Suche',
'History Search Engine' => 'Historien Suchmaschine',
'Homepage' => 'Homepage',
'List Price' => 'Listenpreis',
'List Price Factors' => 'Preisfaktoren anzeigen',
'List Pricegroups' => 'Preisgruppen anzeigen',
- 'List Tax' => 'Bearbeiten',
'List Transactions' => 'Buchungsliste',
'List Warehouses' => 'Lager anzeigen',
'List bank accounts' => 'Bankkonten anzeigen',
'Not done yet' => 'Noch nicht fertig',
'Not obsolete' => 'Gültig',
'Note' => 'Hinweis',
- 'Note: Taxkeys must have a "valid from" date, and will not behave correctly without.' => 'Hinweis: Steuerschlüssel sind fehlerhaft ohne gültiges "von Datum"',
+ 'Note: Taxkeys must have a "valid from" date, and will not behave correctly without.' => 'Hinweis: Steuerschlüssel sind fehlerhaft ohne "Gültig ab" Datum',
'Notes' => 'Bemerkungen',
'Notes (will appear on hard copy)' => 'Bemerkungen',
'Nothing has been selected for removal.' => 'Es wurde nichts für eine Entnahme ausgewählt.',
'Payment posted!' => 'Zahlung gebucht!',
'Payment terms deleted!' => 'Zahlungskonditionen gelöscht!',
'Payments' => 'Zahlungsausgänge',
+ 'Per. Inv.' => 'Wied. Rech.',
'Period' => 'Zeitraum',
'Period:' => 'Zeitraum:',
+ 'Periodic Invoices' => 'Wiederkehrende Rechnungen',
+ 'Periodic invoices active' => 'Wiederkehrende Rechnungen aktiv',
+ 'Periodic invoices inactive' => 'Wiederkehrende Rechnungen inaktiv',
+ 'Periodicity' => 'Periodizität',
'Personal settings' => 'Persönliche Einstellungen',
'Pg Database Administration' => 'Datenbankadministration',
'Phone' => 'Telefon',
'Pricegroups' => 'Preisgruppen',
'Print' => 'Drucken',
'Print and Post' => 'Drucken und Buchen',
+ 'Print automatically' => 'Automatisch ausdrucken',
'Print dunnings' => 'Mahnungen drucken',
'Print list' => 'Liste ausdrucken',
'Print options' => 'Druckoptionen',
'Spoolfile' => 'Druckdatei',
'Start Dunning Process' => 'Mahnprozess starten',
'Start analysis' => 'Analyse beginnen',
+ 'Start date' => 'Startdatum',
'Start the correction assistant' => 'Korrekturassistenten starten',
'Startdate_coa' => 'Gültig ab',
'Starting Balance' => 'Eröffnungsbilanzwerte',
'Statement Balance' => 'Sammelrechnungsbilanz',
'Statement sent to' => 'Sammelrechnung verschickt an',
'Statements sent to printer!' => 'Sammelrechnungen an Drucker geschickt!',
+ 'Status' => 'Status',
'Step 1 of 3: Parts' => 'Schritt 1 von 3: Waren',
'Step 2' => 'Schritt 2',
'Step 2 of 3: Services' => 'Schritt 2 von 3: Dienstleistungen',
'The dunning process started' => 'Der Mahnprozess ist gestartet.',
'The dunnings have been printed.' => 'Die Mahnung(en) wurden gedruckt.',
'The email address is missing.' => 'Die Emailadresse fehlt.',
+ 'The end date is the last day for which invoices will possibly be created.' => 'Das Enddatum ist das letztmögliche Datum, an dem eine Rechnung erzeugt wird.',
'The factor is missing in row %d.' => 'Der Faktor fehlt in Zeile %d.',
'The factor is missing.' => 'Der Faktor fehlt.',
'The first reason is that Lx-Office contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' => 'Zum Einen gab es einen Bug in Lx-Office, der dazu führte, dass bei Buchungen mit verschiedenen Steuerschlüssel auf ein Konto teilweise falsche Steuerschlüssel gespeichert wurden.',
'The group has been saved.' => 'Die Gruppe wurde gespeichert.',
'The group memberships have been saved.' => 'Die Gruppenmitgliedschaften wurden gespeichert.',
'The group name is missing.' => 'Der Gruppenname fehlt.',
- 'The licensing module has been deactivated in lx-erp.conf.' => 'Das Lizenzverwaltungsmodul wurde in lx-erp.conf deaktiviert.',
+ 'The licensing module has been deactivated in the configuration.' => 'Das Lizenzverwaltungsmodul wurde in der Konfiguration deaktiviert.',
'The list has been printed.' => 'Die Liste wurde ausgedruckt.',
'The login is missing.' => 'Das Login fehlt.',
'The name in row %d has already been used before.' => 'Der Name in Zeile %d wurde vorher bereits benutzt.',
'The parts have been removed.' => 'Die Waren wurden aus dem Lager entnommen.',
'The parts have been stocked.' => 'Die Artikel wurden eingelagert.',
'The parts have been transferred.' => 'Die Waren wurden umgelagert.',
+ 'The password is too long (maximum length: #1).' => 'Das Passwort ist zu lang (maximale Länge: #1).',
+ 'The password is too short (minimum length: #1).' => 'Das Password ist zu kurz (minimale Länge: #1).',
+ 'The password is weak (e.g. it can be found in a dictionary).' => 'Das Passwort ist schwach (z.B. wenn es in einem Wörterbuch steht).',
'The payments have been posted.' => 'Die Zahlungen wurden gebucht.',
'The pg_dump process could not be started.' => 'Der pg_dump-Prozess konnte nicht gestartet werden.',
'The pg_restore process could not be started.' => 'Der pg_restore-Prozess konnte nicht gestartet werden.',
'The selected bin does not exist.' => 'Der ausgewählte Lagerplatz existiert nicht.',
'The selected exports have been closed.' => 'Die ausgewählten Exporte wurden abgeschlossen.',
'The selected warehouse does not exist.' => 'Das ausgewählte Lager existiert nicht.',
- 'The selected warehouse is empty.' => 'Das ausgewählte Lager ist leer.',
+ 'The selected warehouse is empty, or no stocked items where found that match the filter settings.' => 'Das ausgewählte Lager ist leer, oder in ihm wurden keine zu den Sucheinstellungen passenden eingelagerten Artikel gefunden.',
'The session is invalid or has expired.' => 'Sie sind von Lx-Office abgemeldet.',
+ 'The settings were saved, but the password was not changed.' => 'Die Einstellungen wurden gespeichert, aber das Passwort wurde nicht geändert.',
'The source warehouse does not contain any bins.' => 'Das Quelllager enthält keine Lagerplätze.',
+ 'The start date is missing.' => 'Das Startdatum fehlt.',
'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',
'[email]' => '[email]',
'account_description' => 'Beschreibung',
'accrual' => 'Bilanzierung (Soll-Versteuerung)',
+ 'active' => 'aktiv',
'all entries' => 'alle Einträge',
'ap_aging_list' => 'liste_offene_verbindlichkeiten',
'ar_aging_list' => 'liste_offene_forderungen',
'general_ledger_list' => 'buchungsjournal',
'history' => 'Historie',
'history search engine' => 'Historien Suchmaschine',
+ 'inactive' => 'inaktiv',
'invoice' => 'Rechnung',
'invoice_list' => 'debitorenbuchungsliste',
'lead deleted!' => 'Kundenquelle gelöscht',
'mark as paid' => 'als bezahlt markieren',
'missing' => 'Fehlbestand',
'month' => 'Monatliche Abgabe',
+ 'monthly' => 'monatlich',
'new Window' => 'neues Fenster',
'no' => 'nein',
'no bestbefore' => 'keine Mindesthaltbarkeit',
'no chargenumber' => 'keine Chargennummer',
'none (pricegroup)' => 'keine',
+ 'not configured' => 'nicht konfiguriert',
'not executed' => 'nicht ausgeführt',
'not transferred in yet' => 'noch nicht eingelagert',
'not transferred out yet' => 'noch nicht ausgelagert',
'purchase_order' => 'Auftrag',
'purchase_order_list' => 'lieferantenauftragsliste',
'quarter' => 'Vierteljährliche (quartalsweise) Abgabe',
+ 'quarterly' => 'quartalsweise',
'quotation_list' => 'angebotsliste',
'release_material' => 'Materialausgabebe',
'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.',
'tax_taxdescription' => 'Steuername',
'tax_taxkey' => 'Steuerschlüssel',
'taxnumber' => 'Automatikkonto',
+ 'terminated' => 'gekündigt',
'to (date)' => 'bis',
'to (time)' => 'bis',
'transfer' => 'Umlagerung',
'warehouse_journal_list' => 'lagerbuchungsliste',
'warehouse_report_list' => 'lagerbestandsliste',
'wrongformat' => 'Falsches Format',
+ 'yearly' => 'jährlich',
'yes' => 'ja',
};
'4. Quarter' => '4. Quartal',
'<b>What</b> do you want to look for?' => '<b>Wonach</b> wollen Sie suchen?',
'A Buchungsgruppe consists of a descriptive name and the account numbers for the income and expense accounts for those four tax zones as well as the inventory account number.' => 'Eine Buchungsgruppe besteht aus einem deskriptiven Namen, den Erlös- und Aufwandskonten für diese vier Steuerzonen sowie aus einem Inventarkonto.',
+ 'A digit is required.' => '',
'A group named "Full Access" has been created.' => 'Eine Gruppe namens "Vollzugriff" wurde angelegt.',
'A group with that name does already exist.' => 'Eine Gruppe mit diesem Namen gibt es bereits.',
'A lot of the usability of Lx-Office has been enhanced with javascript. Although it is currently possible to use every aspect of Lx-Office without javascript, we strongly recommend it. In a future version this may change and javascript may be necessary to access advanced features.' => 'Die Bedienung von Lx-Office wurde an vielen Stellen mit Javascript verbessert. Obwohl es derzeit möglich ist, jeden Aspekt von Lx-Office auch ohne Javascript zu benutzen, empfehlen wir es. In einer zukünftigen Version wird Javascript eventuell notwendig sein um weitergehende Features zu benutzen.',
+ 'A lower-case character is required.' => '',
+ 'A special character is required (valid characters: #1).' => '',
'A temporary directory could not be created:' => 'Ein temporäres Verzeichnis konnte nicht erstellt werden:',
'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'Eine temporäre Datei konnte nicht angelegt werden. Bitte stellen Sie sicher, dass das Verzeichnis "#1" vom Webserver beschrieben werden darf.',
'A temporary file could not be created:' => 'Eine temporäre Datei konnte nicht erstellt werden:',
'Amount' => 'Betrag',
'Amount Due' => 'Betrag fällig',
'Amount has to be greater then zero! Wrong row number: ' => '"Betrag" muss größer Null sein. Fehlerhafte Zeile: ',
+ 'An invalid character was used (invalid characters: #1).' => '',
+ 'An invalid character was used (valid characters: #1).' => '',
+ 'An upper-case character is required.' => '',
'Annotations' => 'Hilfe',
'Another user with the login #1 does already exist.' => 'Es existiert bereits ein anderer Benutzer mit diesem Login.',
'Ap aging on %s' => 'Offene Verbindlichkeiten zum %s',
'Company Name' => 'Firmenname',
'Compare to' => 'Gegenüberstellen zu',
'Configuration of individual TODO items' => 'Konfiguration für die einzelnen Aufgabenlistenpunkte',
+ 'Configure' => '',
'Confirm' => 'Bestätigen',
'Confirm!' => 'Bestätigen Sie!',
'Confirmation' => 'Auftragsbestätigung',
'Database Host' => 'Datenbankcomputer',
'Database User' => 'Datenbankbenutzer',
'Database User missing!' => 'Datenbankbenutzer fehlt!',
- 'Database backups and restorations are disabled in lx-erp.conf.' => 'Datenbanksicherungen und -wiederherstellungen sind in der lx-erp.conf deaktiviert.',
+ 'Database backups and restorations are disabled in the configuration.' => 'Datenbanksicherungen und -wiederherstellungen sind in der Konfiguration deaktiviert.',
'Database name' => 'Datenbankname',
'Database template' => 'Datenbankvorlage',
'Database update error:' => 'Fehler beim Datenbankupgrade:',
'Edit rights' => 'Rechte bearbeiten',
'Edit templates' => 'Vorlagen bearbeiten',
'Edit the Delivery Order' => 'Lieferschein bearbeiten',
+ 'Edit the configuration for periodic invoices' => '',
'Edit the membership of all users in all groups:' => 'Bearbeiten der Mitgliedschaft aller Benutzer in allen Gruppen:',
'Edit the purchase_order' => 'Bearbeiten des Lieferantenauftrags',
'Edit the request_quotation' => 'Bearbeiten der Preisanfrage',
'Element disabled' => 'Element deaktiviert',
'Employee' => 'Bearbeiter',
'Empty transaction!' => 'Buchung ist leer!',
+ 'End date' => '',
'Enter a description for this new draft.' => 'Geben Sie eine Beschreibung für diesen Entwurf ein.',
'Enter longdescription' => 'Langtext eingeben',
'Enter the requested execution date or leave empty for the quickest possible execution:' => 'Geben Sie das jeweils gewünschte Ausführungsdatum an, oder lassen Sie das Feld leer für die schnellstmögliche Ausführung:',
'Export date' => 'Exportdatum',
'Export date from' => 'Exportdatum von',
'Export date to' => 'Exportdatum bis',
+ 'Extend automatically by n months' => '',
'Extended' => 'Gesamt',
'Extension Of Time' => 'Dauerfristverlängerung',
'Factor' => 'Faktor',
'Help Template Variables' => 'Hilfe zu Dokumenten-Variablen',
'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
'Hide by default' => 'Standardmäßig verstecken',
- 'History' => 'Historie',
'History Search' => 'Historien Suche',
'History Search Engine' => 'Historien Suchmaschine',
'Homepage' => 'Homepage',
'List Price' => 'Listenpreis',
'List Price Factors' => 'Preisfaktoren anzeigen',
'List Pricegroups' => 'Preisgruppen anzeigen',
- 'List Tax' => 'Bearbeiten',
'List Transactions' => 'Buchungsliste',
'List Warehouses' => 'Lager anzeigen',
'List bank accounts' => 'Bankkonten anzeigen',
'Not done yet' => 'Noch nicht fertig',
'Not obsolete' => 'Gültig',
'Note' => 'Hinweis',
- 'Note: Taxkeys must have a "valid from" date, and will not behave correctly without.' => 'Hinweis: Steuerschlüssel sind fehlerhaft ohne gültiges "von Datum"',
+ 'Note: Taxkeys must have a "valid from" date, and will not behave correctly without.' => 'Hinweis: Steuerschlüssel sind fehlerhaft ohne "Gültig ab" Datum',
'Notes' => 'Notizen',
'Notes (will appear on hard copy)' => 'Hinweise (erscheinen auf Ausdruck)',
'Nothing has been selected for removal.' => 'Es wurde nichts für eine Entnahme ausgewählt.',
'Payment posted!' => 'Zahlung gebucht!',
'Payment terms deleted!' => 'Zahlungskonditionen gelöscht!',
'Payments' => 'Zahlungsausgänge',
+ 'Per. Inv.' => '',
'Period' => 'Zeitraum',
'Period:' => 'Zeitraum:',
+ 'Periodic Invoices' => '',
+ 'Periodic invoices active' => '',
+ 'Periodic invoices inactive' => '',
+ 'Periodicity' => '',
'Personal settings' => 'Meine Daten',
'Pg Database Administration' => 'Datenbankadministration',
'Phone' => 'Telefon',
'Pricegroups' => 'Preisgruppen',
'Print' => 'Drucken',
'Print and Post' => 'Drucken und Buchen',
+ 'Print automatically' => '',
'Print dunnings' => 'Mahnungen drucken',
'Print list' => 'Liste ausdrucken',
'Print options' => 'Drucken',
'Spoolfile' => 'Druckdatei',
'Start Dunning Process' => 'Neue Mahnung',
'Start analysis' => 'Analyse beginnen',
+ 'Start date' => '',
'Start the correction assistant' => 'Korrekturassistenten starten',
'Startdate_coa' => 'Gültig ab',
'Starting Balance' => 'Eröffnungsbilanzwerte',
'Statement Balance' => 'Sammelrechnungsbilanz',
'Statement sent to' => 'Sammelrechnung verschickt an',
'Statements sent to printer!' => 'Sammelrechnungen an Drucker geschickt!',
+ 'Status' => '',
'Step 1 of 3: Parts' => 'Schritt 1 von 3: Waren',
'Step 2' => 'Schritt 2',
'Step 2 of 3: Services' => 'Schritt 2 von 3: Dienstleistungen',
'The dunning process started' => 'Der Mahnprozess ist gestartet.',
'The dunnings have been printed.' => 'Die Mahnung(en) wurden gedruckt.',
'The email address is missing.' => 'Die Emailadresse fehlt.',
+ 'The end date is the last day for which invoices will possibly be created.' => '',
'The factor is missing in row %d.' => 'Der Faktor fehlt in Zeile %d.',
'The factor is missing.' => 'Der Faktor fehlt.',
'The first reason is that Lx-Office contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' => 'Zum Einen gab es einen Bug in Lx-Office, der dazu führte, dass bei Buchungen mit verschiedenen Steuerschlüssel auf ein Konto teilweise falsche Steuerschlüssel gespeichert wurden.',
'The group has been saved.' => 'Die Gruppe wurde gespeichert.',
'The group memberships have been saved.' => 'Die Gruppenmitgliedschaften wurden gespeichert.',
'The group name is missing.' => 'Der Gruppenname fehlt.',
- 'The licensing module has been deactivated in lx-erp.conf.' => 'Das Lizenzverwaltungsmodul wurde in lx-erp.conf deaktiviert.',
+ 'The licensing module has been deactivated in the configuration.' => 'Das Lizenzverwaltungsmodul wurde in der Konfiguration deaktiviert.',
'The list has been printed.' => 'Die Liste wurde ausgedruckt.',
'The login is missing.' => 'Das Login fehlt.',
'The name in row %d has already been used before.' => 'Der Name in Zeile %d wurde vorher bereits benutzt.',
'The parts have been removed.' => 'Die Waren wurden aus dem Lager entnommen.',
'The parts have been stocked.' => 'Die Artikel wurden eingelagert.',
'The parts have been transferred.' => 'Die Waren wurden umgelagert.',
+ 'The password is too long (maximum length: #1).' => '',
+ 'The password is too short (minimum length: #1).' => '',
+ 'The password is weak (e.g. it can be found in a dictionary).' => '',
'The payments have been posted.' => 'Die Zahlungen wurden gebucht.',
'The pg_dump process could not be started.' => 'Der pg_dump-Prozess konnte nicht gestartet werden.',
'The pg_restore process could not be started.' => 'Der pg_restore-Prozess konnte nicht gestartet werden.',
'The selected warehouse does not exist.' => 'Das ausgewählte Lager existiert nicht.',
'The selected warehouse is empty.' => 'Das ausgewählte Lager ist leer.',
'The session is invalid or has expired.' => 'Sie sind von Lx-Office abgemeldet.',
+ 'The settings were saved, but the password was not changed.' => '',
'The source warehouse does not contain any bins.' => 'Das Quelllager enthält keine Lagerplätze.',
+ 'The start date is missing.' => '',
'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',
'Warehouse management' => 'Lagerverwaltung/Bestandsveränderung',
'Warehouse saved.' => 'Lager gespeichert.',
'Warehouses' => 'Lager',
- 'Warning' => '',
+ 'Warning' => 'Warnung',
'Warnings during template upgrade' => 'Warnungen bei Aktualisierung der Dokumentenvorlagen',
'WebDAV link' => 'WebDAV-Link',
'Weight' => 'Gewicht',
'[email]' => '[email]',
'account_description' => 'Beschreibung',
'accrual' => 'Bilanzierung (Soll-Versteuerung)',
+ 'active' => '',
'all entries' => 'alle Einträge',
'ap_aging_list' => 'liste_offene_verbindlichkeiten',
'ar_aging_list' => 'liste_offene_forderungen',
'general_ledger_list' => 'buchungsjournal',
'history' => 'Historie',
'history search engine' => 'Historien Suchmaschine',
+ 'inactive' => '',
'invoice' => 'Rechnung',
'invoice_list' => 'debitorenbuchungsliste',
'lead deleted!' => 'Kundenquelle gelöscht',
'mark as paid' => 'als bezahlt markieren',
'missing' => 'Fehlbestand',
'month' => 'Monatliche Abgabe',
+ 'monthly' => '',
'new Window' => 'neues Fenster',
'no' => 'nein',
'no bestbefore' => 'keine Mindesthaltbarkeit',
'no chargenumber' => 'keine Chargennummer',
'none (pricegroup)' => 'keine',
+ 'not configured' => '',
'not executed' => 'nicht ausgeführt',
'not transferred in yet' => 'noch nicht eingelagert',
'not transferred out yet' => 'noch nicht ausgelagert',
'purchase_order' => 'Auftrag',
'purchase_order_list' => 'lieferantenauftragsliste',
'quarter' => 'Vierteljährliche (quartalsweise) Abgabe',
+ 'quarterly' => '',
'quotation_list' => 'angebotsliste',
'release_material' => 'Materialausgabebe',
'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.',
'tax_taxdescription' => 'Steuername',
'tax_taxkey' => 'Steuerschlüssel',
'taxnumber' => 'Automatikkonto',
+ 'terminated' => '',
'to (date)' => 'bis',
'to (time)' => 'bis',
'transfer' => 'Umlagerung',
'warehouse_journal_list' => 'lagerbuchungsliste',
'warehouse_report_list' => 'lagerbestandsliste',
'wrongformat' => 'Falsches Format',
+ 'yearly' => '',
'yes' => 'ja',
};