From: Moritz Bunkus Date: Tue, 1 Feb 2011 13:41:27 +0000 (+0100) Subject: Merge branch 'master' into after-262 X-Git-Tag: release-2.6.3~61^2~9^2~3^2~3 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/e055700faea1906bea6c03184ba4516b57cac887?ds=inline;hp=-c Merge branch 'master' into after-262 Conflicts: DEBIAN/DEBIAN/postinst DEBIAN/mk_erp_deb.sh config/lx-erp.conf config/lx-erp.conf.default doc/INSTALL.txt locale/de_DE/all --- e055700faea1906bea6c03184ba4516b57cac887 diff --combined DEBIAN/DEBIAN/postinst index 9d175361c,0e0da1365..02f5ac927 --- a/DEBIAN/DEBIAN/postinst +++ b/DEBIAN/DEBIAN/postinst @@@ -81,17 -81,12 +81,12 @@@ set_lx_office_erp_web_admin_password() 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 - } @@@ -99,12 -94,10 +94,10 @@@ set_lx_office_erp_authentication_db_pas 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 } @@@ -112,23 -105,21 +105,21 @@@ 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() { @@@ -144,36 -135,42 +135,36 @@@ } 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 @@@ -181,10 -178,10 +172,10 @@@ 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 } @@@ -215,7 -212,7 +206,7 @@@ case "$1" i install|configure) echo " ! "`date`" $1 !" >> /tmp/lxo-erp.log - + mk_new_menu mk_new_config config_postgresql_factory_script diff --combined DEBIAN/mk_erp_deb.sh index a7dcc9f9b,4fb7c008e..786534218 --- a/DEBIAN/mk_erp_deb.sh +++ b/DEBIAN/mk_erp_deb.sh @@@ -4,10 -4,10 +4,10 @@@ 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 ################################################ @@@ -17,70 -17,13 +17,13 @@@ 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 @@@ -96,7 -39,8 +39,7 @@@ cp -a $SRC/t usr/lib/lx-office-er 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 diff --combined SL/DB/Object.pm index 9ac7644f9,1d1703846..71e0a3939 --- a/SL/DB/Object.pm +++ b/SL/DB/Object.pm @@@ -2,7 -2,6 +2,6 @@@ package SL::DB::Object use strict; - use Readonly; use Rose::DB::Object; use List::MoreUtils qw(any); @@@ -41,7 -40,7 +40,7 @@@ sub _get_manager_class 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; @@@ -79,12 -78,6 +78,12 @@@ sub update_attributes return $self; } +sub call_sub { + my $self = shift; + my $sub = shift; + return $self->$sub(@_); +} + 1; __END__ @@@ -138,14 -131,6 +137,14 @@@ Returns the manager package for the obj on. Can be used from methods in this package for getting the actual object's manager. +=item C + +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 diff --combined SL/Dispatcher.pm index d31fa9b56,2f239524f..f22cf0e9f --- a/SL/Dispatcher.pm +++ b/SL/Dispatcher.pm @@@ -5,21 -5,17 +5,20 @@@ use strict 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; @@@ -53,10 -49,10 +52,10 @@@ sub show_error 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; @@@ -67,8 -63,14 +66,8 @@@ } 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; @@@ -79,6 -81,11 +78,6 @@@ # 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; @@@ -154,7 -161,7 +153,7 @@@ sub handle_request $self->unrequire_bin_mozilla; $::cgi = CGI->new(''); - $::locale = Locale->new($::language); + $::locale = Locale->new($::lx_office_conf{system}->{language}); $::form = Form->new; %::called_subs = (); @@@ -180,7 -187,7 +179,7 @@@ 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}"; @@@ -228,7 -235,7 +227,7 @@@ $::locale = undef; $::form = undef; $::myconfig = (); - Form::disconnect_standard_dbh(); + Form::disconnect_standard_dbh unless $self->_interface_is_fcgi; $::lxdebug->end_request; $::lxdebug->leave_sub; @@@ -236,7 -243,7 +235,7 @@@ 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/#; @@@ -246,11 -253,6 +245,11 @@@ } } +sub _interface_is_fcgi { + my $self = shift; + return $self->{interface} =~ m/^(?:fastcgi|fcgid|fcgi)$/; +} + sub _route_request { my $script_name = shift; @@@ -312,27 -314,6 +311,27 @@@ sub get_standard_filehandles 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; diff --combined SL/Form.pm index d1fdc8308,81d6dc41b..0637e6ebb --- a/SL/Form.pm +++ b/SL/Form.pm @@@ -43,28 -43,21 +43,28 @@@ use CGI 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; @@@ -262,7 -255,7 +262,7 @@@ sub new $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; @@@ -448,23 -441,13 +448,23 @@@ sub hide_form $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/
/g; $self->show_generic_error($msg); @@@ -636,7 -619,7 +636,7 @@@ sub header # 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}++; @@@ -720,7 -703,7 +720,7 @@@ sub ajax_response_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); @@@ -761,7 -744,7 +761,7 @@@ sub _prepare_html_template my $language; if (!%::myconfig || !$::myconfig{"countrycode"}) { - $language = $main::language; + $language = $::lx_office_conf{system}->{language}; } else { $language = $main::myconfig{"countrycode"}; } @@@ -802,16 -785,16 +802,16 @@@ 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; @@@ -861,7 -844,7 +861,7 @@@ sub init_template '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; } @@@ -876,12 -859,6 +876,12 @@@ sub show_generic_error 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, @@@ -1191,13 -1168,11 +1191,13 @@@ sub round_amount 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}"; @@@ -1252,7 -1227,6 +1252,7 @@@ } map { $self->{"${_}"} = $myconfig->{$_}; } qw(co_ustid); + map { $self->{"myconfig_${_}"} = $myconfig->{$_} } grep { $_ ne 'dbpasswd' } keys %{ $myconfig }; $self->{copies} = 1 if (($self->{copies} *= 1) <= 0); @@@ -1294,16 -1268,6 +1294,16 @@@ $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') { @@@ -1312,7 -1276,7 +1312,7 @@@ 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."; @@@ -1359,6 -1323,7 +1359,7 @@@ 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'; @@@ -1507,7 -1472,7 +1508,7 @@@ sub cleanup 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; @@@ -1615,7 -1580,7 +1616,7 @@@ sub get_standard_dbh undef $standard_dbh; } - $standard_dbh ||= $self->dbconnect_noauto($myconfig); + $standard_dbh ||= SL::DB::create->dbh; $main::lxdebug->leave_sub(2); @@@ -3531,163 -3496,6 +3532,163 @@@ sub restore_vars $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__ diff --combined SL/IS.pm index 530334a05,918ca1909..d91a36b8b --- a/SL/IS.pm +++ b/SL/IS.pm @@@ -963,7 -963,10 +963,7 @@@ sub post_invoice $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; @@@ -1045,7 -1048,7 +1045,7 @@@ # 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, @@@ -1078,7 -1081,10 +1078,7 @@@ 'table' => 'ar',); my $rc = 1; - if (!$provided_dbh) { - $dbh->commit(); - $dbh->disconnect(); - } + $dbh->commit if !$provided_dbh; $main::lxdebug->leave_sub(); @@@ -1277,7 -1283,7 +1277,7 @@@ sub cogs # 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; @@@ -1362,7 -1368,7 +1362,7 @@@ sub reverse_invoice 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); @@@ -1373,7 -1379,7 +1373,7 @@@ # 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: @@@ -1398,7 -1404,6 +1398,7 @@@ $dbh->disconnect; if ($rc) { + my $spool = $::lx_office_conf{paths}->{spool}; map { unlink "$spool/$_" if -f "$spool/$_"; } @spoolfiles; } @@@ -1584,7 -1589,7 +1584,7 @@@ sub retrieve_invoice } $sth->finish; - Common::webdav_folder($form) if ($main::webdav); + Common::webdav_folder($form); } my $rc = $dbh->commit; @@@ -2081,13 -2086,13 +2081,13 @@@ sub get_pricegroups_for_parts # 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 ) { @@@ -2120,7 -2125,9 +2120,9 @@@ 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) { diff --combined SL/Template/LaTeX.pm index 04c5f4b61,8736cc2b1..b70e1522f --- a/SL/Template/LaTeX.pm +++ b/SL/Template/LaTeX.pm @@@ -134,7 -134,7 +134,7 @@@ sub find_end 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)) { @@@ -447,7 -447,7 +447,7 @@@ sub convert_to_pdf } sub _get_latex_path { - return $main::latex_bin || 'pdflatex'; + return $::lx_office_conf{applications}->{latex} || 'pdflatex'; } sub get_mime_type() { diff --combined bin/mozilla/do.pl index 27b3fa17f,b9f7fc16f..d6e594f5b --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@@ -165,7 -165,7 +165,7 @@@ sub order_links $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}; @@@ -751,6 -751,15 +751,15 @@@ sub invoice 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); @@@ -1352,7 -1361,7 +1361,7 @@@ sub transfer_out 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}, diff --combined bin/mozilla/wh.pl index e33c2c204,e9829f1bc..f49710785 --- a/bin/mozilla/wh.pl +++ b/bin/mozilla/wh.pl @@@ -176,7 -176,9 +176,9 @@@ sub transfer_or_removal_prepare_content "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); @@@ -436,7 -438,7 +438,7 @@@ sub create_assembly $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} = ''; } diff --combined doc/INSTALL.texi index b67727618,028802259..6fa2e2bed --- a/doc/INSTALL.texi +++ b/doc/INSTALL.texi @@@ -1,7 -1,7 +1,7 @@@ \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 @@@ -24,7 -24,7 +24,7 @@@ @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 @@@ -56,12 -56,79 +56,79 @@@ im Lx-Office-Forum: @uref{http://www.lx @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 @@@ -80,8 -147,6 +147,6 @@@ List::MoreUtil @item PDF::API2 @item - Readonly (benötigt) und Readonly::XS (optional) - @item Rose::Object @item Rose::DB @@@ -104,6 -169,10 +169,10 @@@ YAM 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 @@@ -117,15 -186,17 +186,17 @@@ Die zu installierenden Pakete können i 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: @@@ -134,16 -205,16 +205,16 @@@ @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 @@@ -219,16 -290,12 +290,12 @@@ Das Encoding einer Datenbank kann in @c 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 @@@ -252,21 -319,23 +319,23 @@@ host all lxoffice 127.0 @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 --------------------------------------------------------------- @@@ -290,6 -359,10 +359,10 @@@ bzw. den hier gewählten Benutzernamen @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 @@@ -547,10 -620,9 +620,10 @@@ ist dies @samp{lxoffice}) 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 @@@ -607,7 -679,7 +680,7 @@@ ausgewählten Spalte hinzugefügt @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 @@@ -635,14 -707,13 +708,14 @@@ OpenDocument-Format, wie es OpenOffice. 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 @@@ -651,11 -722,11 +724,11 @@@ neben OpenOffice.org ab Version 2 auch (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 @@@ -685,11 -756,10 +758,10 @@@ folgender Befehl auszuführen @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 --------------------------------------------------------------- diff --combined doc/INSTALL.txt index 45ae1f954,584ec10ae..200c35979 --- a/doc/INSTALL.txt +++ b/doc/INSTALL.txt @@@ -4,7 -4,9 +4,9 @@@ Table of Content 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 @@@ -48,12 -50,73 +50,73 @@@ Aktuelle Installations- und Konfigurati 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 @@@ -72,8 -135,6 +135,6 @@@ * PDF::API2 - * Readonly (benötigt) und Readonly::XS (optional) - * Rose::Object * Rose::DB @@@ -95,6 -156,10 +156,10 @@@ 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 @@@ -110,40 -175,46 +175,46 @@@ Distributionen unterschiedlich heißen 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 @@@ -211,16 -282,11 +282,11 @@@ mit ISO-8859-15 als Encoding betrieben 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 @@@ -246,6 -312,13 +312,13 @@@ servergespeicherte Prozeduren eingerich 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 @@@ -253,8 -326,7 +326,7 @@@ 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 ============================= @@@ -273,7 -345,11 +345,11 @@@ hier gewählten Benutzernamen 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: @@@ -496,9 -572,9 +572,9 @@@ ist dies `lxoffice') 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 @@@ -552,7 -628,7 +628,7 @@@ zugewiesen werden. Dazu gibt es zwei Mà 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 @@@ -577,13 -653,13 +653,13 @@@ OpenDocument-Format, wie es OpenOffice. 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 @@@ -592,11 -668,10 +668,11 @@@ neben OpenOffice.org ab Version 2 auch (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 @@@ -626,8 -701,8 +702,8 @@@ z.B. einfach nur `.openoffice', so wär `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 @@@ -642,3 -717,8 +718,8 @@@ URL erreichbar `http://localhost/lx-office-erp/admin.pl' + +  + Local Variables: + coding: utf-8 + End: diff --combined doc/INSTALL/Datenbanken-anlegen.html index 5ceaccc5c,54c682c8f..6b943419c --- a/doc/INSTALL/Datenbanken-anlegen.html +++ b/doc/INSTALL/Datenbanken-anlegen.html @@@ -1,9 -1,9 +1,9 @@@ Datenbanken anlegen - Lx-Office Installationsanleitung - + - + @@@ -24,11 -24,11 +24,11 @@@
-

- Next: , - Previous: Zusammenhänge, - Up: Benutzer- und Gruppenverwaltung + + nächstes: , + voriges: Zusammenhänge, + aufwärts: Benutzer- und Gruppenverwaltung


@@@ -41,10 -41,9 +41,10 @@@ ist dies ‘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 diff --combined doc/INSTALL/OpenDocument_002dVorlagen.html index 9840516c1,378e1a7a3..654f3314f --- a/doc/INSTALL/OpenDocument_002dVorlagen.html +++ b/doc/INSTALL/OpenDocument_002dVorlagen.html @@@ -1,9 -1,9 +1,9 @@@ OpenDocument-Vorlagen - Lx-Office Installationsanleitung - + - + @@@ -23,12 -23,12 +23,12 @@@

+

-

- Next: , - Previous: Benutzer- und Gruppenverwaltung, - Up: Top + nächstes: , + voriges: Benutzer- und Gruppenverwaltung, + aufwärts: Top


@@@ -39,14 -39,13 +39,14 @@@ OpenDocument-Format, wie es OpenOffice. 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 -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 @@@ -55,11 -54,11 +55,11 @@@ neben OpenOffice.org ab Version 2 auch (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 den vollständigen Pfad zur -OpenOffice.org Writer-Anwendung enthalten. $xvfb_bin muss den -Pfad zum “X virtual frame buffer” enthalten. +

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 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 @@@ -89,11 -88,10 +89,10 @@@ folgender Befehl auszuführen

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 werden, wenn die Konvertierung nach PDF - fehlschlägt. +

Dieses Verzeichnis, wie auch das komplette users-Verzeichnis, muss vom + Webserver beschreibbar sein. Dieses wurde bereits erledigt + (siehe Manuelle Installation des Programmpaketes), kann aber erneut überprüft + werden, wenn die Konvertierung nach PDF fehlschlägt. diff --combined locale/de/all index 1904fa978,86ebdb24a..36f20e078 --- a/locale/de/all +++ b/locale/de/all @@@ -38,12 -38,9 +38,12 @@@ $self->{texts} = '4. Quarter' => '4. Quartal', 'What do you want to look for?' => 'Wonach 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:', @@@ -183,9 -180,6 +183,9 @@@ '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', @@@ -238,6 -232,7 +238,7 @@@ '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', @@@ -388,7 -383,6 +389,7 @@@ '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', @@@ -493,7 -487,7 +494,7 @@@ '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:', @@@ -682,7 -676,6 +683,7 @@@ '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', @@@ -695,7 -688,6 +696,7 @@@ '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:', @@@ -742,7 -734,6 +743,7 @@@ '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', @@@ -821,6 -812,7 +822,6 @@@ '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', @@@ -967,7 -959,6 +968,6 @@@ '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', @@@ -1112,7 -1103,7 +1112,7 @@@ '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.', @@@ -1207,13 -1198,8 +1207,13 @@@ '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', @@@ -1279,7 -1265,6 +1279,7 @@@ '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', @@@ -1515,7 -1500,6 +1515,7 @@@ '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', @@@ -1523,7 -1507,6 +1523,7 @@@ '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', @@@ -1649,7 -1632,6 +1649,7 @@@ '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.', @@@ -1670,7 -1652,7 +1670,7 @@@ '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.', @@@ -1684,9 -1666,6 +1684,9 @@@ '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.', @@@ -1703,11 -1682,9 +1703,11 @@@ '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', @@@ -1968,7 -1945,6 +1968,7 @@@ '[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', @@@ -2023,7 -1999,6 +2023,7 @@@ 'general_ledger_list' => 'buchungsjournal', 'history' => 'Historie', 'history search engine' => 'Historien Suchmaschine', + 'inactive' => 'inaktiv', 'invoice' => 'Rechnung', 'invoice_list' => 'debitorenbuchungsliste', 'lead deleted!' => 'Kundenquelle gelöscht', @@@ -2037,13 -2012,11 +2037,13 @@@ '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', @@@ -2068,7 -2041,6 +2068,7 @@@ '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.', @@@ -2098,7 -2070,6 +2098,7 @@@ 'tax_taxdescription' => 'Steuername', 'tax_taxkey' => 'Steuerschlüssel', 'taxnumber' => 'Automatikkonto', + 'terminated' => 'gekündigt', 'to (date)' => 'bis', 'to (time)' => 'bis', 'transfer' => 'Umlagerung', @@@ -2115,7 -2086,6 +2115,7 @@@ 'warehouse_journal_list' => 'lagerbuchungsliste', 'warehouse_report_list' => 'lagerbestandsliste', 'wrongformat' => 'Falsches Format', + 'yearly' => 'jährlich', 'yes' => 'ja', }; diff --combined locale/de_DE/all index 8a0ee8e6e,7c0ce497e..c6a530e70 --- a/locale/de_DE/all +++ b/locale/de_DE/all @@@ -38,12 -38,9 +38,12 @@@ $self->{texts} = '4. Quarter' => '4. Quartal', 'What do you want to look for?' => 'Wonach 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:', @@@ -183,9 -180,6 +183,9 @@@ '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', @@@ -388,7 -382,6 +388,7 @@@ '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', @@@ -493,7 -486,7 +493,7 @@@ '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:', @@@ -682,7 -675,6 +682,7 @@@ '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', @@@ -695,7 -687,6 +695,7 @@@ '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:', @@@ -742,7 -733,6 +742,7 @@@ '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', @@@ -821,6 -811,7 +821,6 @@@ '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', @@@ -967,7 -958,6 +967,6 @@@ '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', @@@ -1112,7 -1102,7 +1111,7 @@@ '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.', @@@ -1207,13 -1197,8 +1206,13 @@@ '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', @@@ -1279,7 -1264,6 +1278,7 @@@ 'Pricegroups' => 'Preisgruppen', 'Print' => 'Drucken', 'Print and Post' => 'Drucken und Buchen', + 'Print automatically' => '', 'Print dunnings' => 'Mahnungen drucken', 'Print list' => 'Liste ausdrucken', 'Print options' => 'Drucken', @@@ -1515,7 -1499,6 +1514,7 @@@ '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', @@@ -1523,7 -1506,6 +1522,7 @@@ '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', @@@ -1649,7 -1631,6 +1648,7 @@@ '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.', @@@ -1670,7 -1651,7 +1669,7 @@@ '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.', @@@ -1684,9 -1665,6 +1683,9 @@@ '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.', @@@ -1705,9 -1683,7 +1704,9 @@@ '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', @@@ -1894,7 -1870,7 +1893,7 @@@ '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', @@@ -1968,7 -1944,6 +1967,7 @@@ '[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', @@@ -2023,7 -1998,6 +2022,7 @@@ 'general_ledger_list' => 'buchungsjournal', 'history' => 'Historie', 'history search engine' => 'Historien Suchmaschine', + 'inactive' => '', 'invoice' => 'Rechnung', 'invoice_list' => 'debitorenbuchungsliste', 'lead deleted!' => 'Kundenquelle gelöscht', @@@ -2037,13 -2011,11 +2036,13 @@@ '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', @@@ -2068,7 -2040,6 +2067,7 @@@ '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.', @@@ -2098,7 -2069,6 +2097,7 @@@ 'tax_taxdescription' => 'Steuername', 'tax_taxkey' => 'Steuerschlüssel', 'taxnumber' => 'Automatikkonto', + 'terminated' => '', 'to (date)' => 'bis', 'to (time)' => 'bis', 'transfer' => 'Umlagerung', @@@ -2115,7 -2085,6 +2114,7 @@@ 'warehouse_journal_list' => 'lagerbuchungsliste', 'warehouse_report_list' => 'lagerbestandsliste', 'wrongformat' => 'Falsches Format', + 'yearly' => '', 'yes' => 'ja', };