Merge branch 'master' of github.com:kivitendo/kivitendo-erp
authorHolger Lindemann <hli@debian7.lx-system.de>
Fri, 24 Jan 2014 09:09:33 +0000 (10:09 +0100)
committerHolger Lindemann <hli@debian7.lx-system.de>
Fri, 24 Jan 2014 09:09:33 +0000 (10:09 +0100)
46 files changed:
SL/AM.pm
SL/ArchiveZipFixes.pm [new file with mode: 0644]
SL/DB/AuditTrail.pm [deleted file]
SL/DB/Helper/ALL.pm
SL/DB/Helper/Mappings.pm
SL/DB/MetaSetup/AuditTrail.pm [deleted file]
SL/DB/MetaSetup/Default.pm
SL/DB/MetaSetup/GLTransaction.pm
SL/Dispatcher.pm
SL/Form.pm
SL/Helper/Csv.pm
SL/InstallationCheck.pm
SL/RP.pm
bin/mozilla/ap.pl
bin/mozilla/ar.pl
bin/mozilla/io.pl
doc/changelog
doc/dokumentation.xml
doc/html/ch01.html
doc/html/ch02s02.html
doc/html/ch02s04.html
doc/html/ch02s06.html
doc/html/ch02s07.html
doc/html/ch02s09.html
doc/html/ch02s11.html
doc/html/ch03s02.html
doc/html/ch03s03.html
doc/html/ch04.html
doc/html/index.html
doc/kivitendo-Dokumentation.pdf
locale/de/all
locale/en/all
scripts/find-use.pl
sql/Pg-upgrade2/drop_audittrail.sql [new file with mode: 0644]
t/helper/csv.t
templates/print/RB/Readme.tex
templates/print/RB/firma/briefkopf.png
templates/print/RB/firma/euro_account.tex
templates/print/RB/firma/ident.tex
templates/print/RB/insettings.tex
templates/print/RB/invoice.tex
templates/webpages/ap/form_header.html
templates/webpages/client_config/_features.html
templates/webpages/client_config/_warehouse.html
templates/webpages/csv_import/form.html
templates/webpages/rp/income_statement.html

index 8b2d7b2..ed896e1 100644 (file)
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -1120,16 +1120,14 @@ sub closebooks {
 
   my ($query, @values);
 
-  if ($form->{revtrans}) {
-    $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|;
+  # is currently NEVER trueish (no more hidden revtrans in $form)
+  # if ($form->{revtrans}) {
+  #   $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|;
+  # -> therefore you can only set this to false (which is already the default)
+  # and this flag is currently only checked in gl.pl. TOOD Can probably be removed
 
-  } elsif ($form->{closedto}) {
     $query = qq|UPDATE defaults SET closedto = ?, max_future_booking_interval = ?, revtrans = '0'|;
-    @values = (conv_date($form->{closedto}), conv_date($form->{max_future_booking_interval}));
-
-  } else {
-    $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '0'|;
-  }
+    @values = (conv_date($form->{closedto}), conv_i($form->{max_future_booking_interval}));
 
   # set close in defaults
   do_query($form, $dbh, $query, @values);
diff --git a/SL/ArchiveZipFixes.pm b/SL/ArchiveZipFixes.pm
new file mode 100644 (file)
index 0000000..ee50579
--- /dev/null
@@ -0,0 +1,72 @@
+package SL::ArchiveZipFixes;
+
+use strict;
+
+use Archive::Zip;
+use Archive::Zip::Member;
+use version;
+
+# Archive::Zip contains a bug starting with 1.31_04 which prohibits
+# re-writing Zips produced by LibreOffice (.odt). See
+# https://rt.cpan.org/Public/Bug/Display.html?id=92205
+
+sub _member_writeToFileHandle {
+    my $self         = shift;
+    my $fh           = shift;
+    my $fhIsSeekable = shift;
+    my $offset       = shift;
+
+    return _error("no member name given for $self")
+      if $self->fileName() eq '';
+
+    $self->{'writeLocalHeaderRelativeOffset'} = $offset;
+    $self->{'wasWritten'}                     = 0;
+
+    # Determine if I need to write a data descriptor
+    # I need to do this if I can't refresh the header
+    # and I don't know compressed size or crc32 fields.
+    my $headerFieldsUnknown = (
+        ( $self->uncompressedSize() > 0 )
+          and ($self->compressionMethod() == Archive::Zip::COMPRESSION_STORED
+            or $self->desiredCompressionMethod() == Archive::Zip::COMPRESSION_DEFLATED )
+    );
+
+    my $shouldWriteDataDescriptor =
+      ( $headerFieldsUnknown and not $fhIsSeekable );
+
+    $self->hasDataDescriptor(1)
+      if ($shouldWriteDataDescriptor);
+
+    $self->{'writeOffset'} = 0;
+
+    my $status = $self->rewindData();
+    ( $status = $self->_writeLocalFileHeader($fh) )
+      if $status == Archive::Zip::AZ_OK;
+    ( $status = $self->_writeData($fh) )
+      if $status == Archive::Zip::AZ_OK;
+    if ( $status == Archive::Zip::AZ_OK ) {
+        $self->{'wasWritten'} = 1;
+        if ( $self->hasDataDescriptor() ) {
+            $status = $self->_writeDataDescriptor($fh);
+        }
+        elsif ($headerFieldsUnknown) {
+            $status = $self->_refreshLocalFileHeader($fh);
+        }
+    }
+
+    return $status;
+}
+
+sub fix_write_to_file_handle_1_30 {
+  return if version->new("$Archive::Zip::VERSION")->numify <= version->new("1.30")->numify;
+
+  no warnings 'redefine';
+
+  *Archive::Zip::Member::_writeToFileHandle = \&_member_writeToFileHandle;
+}
+
+sub apply_fixes {
+  fix_write_to_file_handle_1_30();
+}
+
+1;
diff --git a/SL/DB/AuditTrail.pm b/SL/DB/AuditTrail.pm
deleted file mode 100644 (file)
index 891d6f2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file has been auto-generated only because it didn't exist.
-# Feel free to modify it at will; it will not be overwritten automatically.
-
-package SL::DB::AuditTrail;
-
-use strict;
-
-use SL::DB::MetaSetup::AuditTrail;
-
-__PACKAGE__->meta->initialize;
-
-# Creates get_all, get_all_count, get_all_iterator, delete_all and update_all.
-__PACKAGE__->meta->make_manager_class;
-
-1;
index 498583f..6bdc368 100644 (file)
@@ -4,7 +4,6 @@ use strict;
 
 use SL::DB::AccTransaction;
 use SL::DB::Assembly;
-use SL::DB::AuditTrail;
 use SL::DB::AuthClient;
 use SL::DB::AuthClientUser;
 use SL::DB::AuthClientGroup;
index 633a067..022894c 100644 (file)
@@ -84,7 +84,6 @@ my @kivitendo_blacklist = (@kivitendo_blacklist_permanent, @kivitendo_blacklist_
 my %kivitendo_package_names = (
   # TABLE                           # MODEL (given in C style)
   acc_trans                      => 'acc_transaction',
-  audittrail                     => 'audit_trail',
   'auth.clients'                 => 'auth_client',
   'auth.clients_users'           => 'auth_client_user',
   'auth.clients_groups'          => 'auth_client_group',
diff --git a/SL/DB/MetaSetup/AuditTrail.pm b/SL/DB/MetaSetup/AuditTrail.pm
deleted file mode 100644 (file)
index fd8add0..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# This file has been auto-generated. Do not modify it; it will be overwritten
-# by rose_auto_create_model.pl automatically.
-package SL::DB::AuditTrail;
-
-use strict;
-
-use base qw(SL::DB::Object);
-
-__PACKAGE__->meta->table('audittrail');
-
-__PACKAGE__->meta->columns(
-  action      => { type => 'text' },
-  employee_id => { type => 'integer' },
-  formname    => { type => 'text' },
-  id          => { type => 'serial', not_null => 1 },
-  reference   => { type => 'text' },
-  tablename   => { type => 'text' },
-  trans_id    => { type => 'integer' },
-  transdate   => { type => 'timestamp', default => 'now' },
-);
-
-__PACKAGE__->meta->primary_key_columns([ 'id' ]);
-
-1;
-;
index 4855128..8c0319c 100644 (file)
@@ -18,7 +18,6 @@ __PACKAGE__->meta->columns(
   ar_show_mark_as_paid                    => { type => 'boolean', default => 'true' },
   articlenumber                           => { type => 'text' },
   assemblynumber                          => { type => 'text' },
-  audittrail                              => { type => 'boolean', default => 'false' },
   bin_id                                  => { type => 'integer' },
   bin_id_ignore_onhand                    => { type => 'integer' },
   businessnumber                          => { type => 'text' },
index 14f386a..db03441 100644 (file)
@@ -42,6 +42,11 @@ __PACKAGE__->meta->foreign_keys(
     key_columns => { employee_id => 'id' },
   },
 
+  employee_obj => {
+    class       => 'SL::DB::Employee',
+    key_columns => { employee_id => 'id' },
+  },
+
   storno_obj => {
     class       => 'SL::DB::GLTransaction',
     key_columns => { storno_id => 'id' },
index fe992ed..f9ad09a 100644 (file)
@@ -26,6 +26,7 @@ use File::Basename;
 use List::MoreUtils qw(all);
 use List::Util qw(first);
 use POSIX;
+use SL::ArchiveZipFixes;
 use SL::Auth;
 use SL::Dispatcher::AuthHandler;
 use SL::LXDebug;
@@ -51,6 +52,8 @@ sub new {
   $self->{interface} = lc($interface || 'cgi');
   $self->{auth_handler} = SL::Dispatcher::AuthHandler->new;
 
+  SL::ArchiveZipFixes->apply_fixes;
+
   return $self;
 }
 
index a11b7ad..eb3565d 100644 (file)
@@ -1955,8 +1955,8 @@ sub get_duedate {
   my $terms   = $self->{payment_id}  ? SL::DB::PaymentTerm->new(id => $self->{payment_id}) ->load
               : $self->{customer_id} ? SL::DB::Customer   ->new(id => $self->{customer_id})->load->payment
               : $self->{vendor_id}   ? SL::DB::Vendor     ->new(id => $self->{vendor_id})  ->load->payment
-              :                        croak("Missing field in \$::form: payment_id, customer_id or vendor_id");
-
+              : $self->{invdate}     ? undef # no payment terms, therefore invdate == duedate
+              :                        croak("Missing field in \$::form: payment_id, customer_id, vendor_id or invdate");
   my $duedate = $terms ? $terms->calc_date(reference_date => $reference_date)->to_kivitendo : undef;
 
   $main::lxdebug->leave_sub();
index 2730502..c4a8aef 100644 (file)
@@ -7,12 +7,13 @@ use version 0.77;
 use Carp;
 use IO::File;
 use Params::Validate qw(:all);
-use List::MoreUtils qw(all pairwise);
+use List::MoreUtils qw(all pairwise firstidx);
 use Text::CSV_XS;
 use Rose::Object::MakeMethods::Generic scalar => [ qw(
   file encoding sep_char quote_char escape_char header profile
   numberformat dateformat ignore_unknown_columns strict_profile is_multiplexed
   _row_header _io _csv _objects _parsed _data _errors all_cvar_configs case_insensitive_header
+  _multiplex_datatype_position
 ) ];
 
 use SL::Helper::Csv::Dispatcher;
@@ -59,6 +60,7 @@ sub parse {
   $self->_open_file;
   return if ! $self->_check_multiplexed;
   return if ! $self->_check_header;
+  return if ! $self->_check_multiplex_datatype_position;
   return if ! $self->dispatcher->parse_profile;
   return if ! $self->_parse_data;
 
@@ -216,6 +218,25 @@ sub _check_header {
   return $self->header($header);
 }
 
+sub _check_multiplex_datatype_position {
+  my ($self) = @_;
+
+  return 1 if !$self->is_multiplexed; # ok if if not multiplexed
+
+  my @positions = map { firstidx { 'datatype' eq lc($_) } @{ $_ } } @{ $self->header };
+  my $first_pos = $positions[0];
+  if (all { $first_pos == $_ } @positions) {
+    $self->_multiplex_datatype_position($first_pos);
+    return 1;
+  } else {
+    $self->_push_error([0,
+                        "datatype field must be at the same position for all datatypes for multiplexed data",
+                        0,
+                        0]);
+    return 0;
+  }
+}
+
 sub _parse_data {
   my ($self, %params) = @_;
   my (@data, @errors);
@@ -261,7 +282,7 @@ sub _header_by_row {
   }
 
   if ($self->is_multiplexed) {
-    return $self->_row_header->{$row->[0]}
+    return $self->_row_header->{$row->[$self->_multiplex_datatype_position]}
   } else {
     return $self->header;
   }
@@ -380,7 +401,7 @@ nothing more.
 This module can handle multiplexed data of different class types. In that case
 multiple profiles with classes and row identifiers must be given. Multiple
 headers may also be given or read from csv data. Data must contain the row
-identifier in the first column and it's field name must be 'datatype'.
+identifier in the column named 'datatype'.
 
 =back
 
@@ -446,15 +467,16 @@ in objects.
 If not given, headers are taken from the first n lines of data, where n is the
 number of different class types.
 
-In case of multiplexed data the first column must be named 'datatype'. This
-name must be given in the header.
+In case of multiplexed data there must be a column named 'datatype'. This
+column must be given in each header and must be at the same position in each
+header.
 
 Examples:
 
   classic data of one type:
   [ 'name', 'street', 'zipcode', 'city' ]
 
-  multiplexed data with two different types
+  multiplexed data with two different types:
   [ [ 'datatype', 'ordernumber', 'customer', 'transdate' ],
     [ 'datatype', 'partnumber', 'qty', 'sellprice' ] ]
 
index 947be97..5ac2bd8 100644 (file)
@@ -17,7 +17,7 @@ BEGIN {
 #   dist_name: name of the package in cpan if it differs from name (ex.: LWP != libwww-perl)
 @required_modules = (
   { name => "parent",                              url => "http://search.cpan.org/~corion/",    debian => 'libparent-perl' },
-  { name => "Archive::Zip",    version => '1.16',  url => "http://search.cpan.org/~adamk/",     debian => 'libarchive-zip-perl' },
+  { name => "Archive::Zip",    version => '1.16',  url => "http://search.cpan.org/~phred/",     debian => 'libarchive-zip-perl' },
   { name => "Clone",                               url => "http://search.cpan.org/~rdf/",       debian => 'libclone-perl' },
   { name => "Config::Std",                         url => "http://search.cpan.org/~dconway/",   debian => 'libconfig-std-perl' },
   { name => "DateTime",                            url => "http://search.cpan.org/~drolsky/",   debian => 'libdatetime-perl' },
index c4a9503..4a7b0af 100644 (file)
--- a/SL/RP.pm
+++ b/SL/RP.pm
@@ -516,7 +516,7 @@ sub get_accounts_g {
   if ($form->{method} eq 'cash') {
     $query =
       qq|
-       SELECT SUM( ac.amount * CASE WHEN COALESCE((SELECT amount FROM ar WHERE id = ac.trans_id), 0) != 0 THEN
+       SELECT SUM( ac.amount * CASE WHEN COALESCE((SELECT amount FROM ar a WHERE id = ac.trans_id $dpt_where), 0) != 0 THEN
             /* ar amount is not zero, so we can divide by amount   */
                     (SELECT SUM(acc.amount) * -1
                      FROM acc_trans acc
index 0bb1a8b..7b16657 100644 (file)
@@ -375,6 +375,10 @@ sub form_header {
   if ( $form->{'paid_'. $form->{paidaccounts}} ) {
     $form->{paidaccounts}++;
   }
+
+  # default account for current assets (i.e. 1801 - SKR04)
+  $form->{accno_arap} = IS->get_standard_accno_current_assets(\%myconfig, \%$form);
+
   for my $i (1 .. $form->{paidaccounts}) {
     $form->{totalpaid} += $form->{"paid_$i"};
 
index cec9db7..480507b 100644 (file)
@@ -409,12 +409,15 @@ sub form_header {
       gldate           => $form->{"gldate_$i"},
     };
 
+  # default account for current assets (i.e. 1801 - SKR04)
+  $form->{accno_arap} = IS->get_standard_accno_current_assets(\%myconfig, \%$form);
+
     $payment->{selectAR_paid} =
       NTI($cgi->popup_menu('-name' => "AR_paid_$i",
                            '-id' => "AR_paid_$i",
                            '-values' => \@AR_paid_values,
                            '-labels' => \%chart_labels,
-                           '-default' => $payment->{AR_paid}));
+                           '-default' => $form->{accno_arap}));
 
 
 
index c584f32..e103891 100644 (file)
@@ -1206,17 +1206,12 @@ sub print {
     }
     $form->{print_and_save} = 1;
     my $formname = $form->{formname};
-    save();
+    &save();
     $form->{formname} = $formname;
-    edit();
+    &edit();
     $::lxdebug->leave_sub();
     ::end_of_request();
   }
-  elsif (($form->{type} =~ /_order$/) || ($form->{type} =~ /_quotation$/)) {
-    $form->{print_and_save} = 1;
-    save();
-  }
-
 
   &print_form($old_form);
 
index 2d714e7..5193658 100644 (file)
@@ -3,6 +3,7 @@
 ###############################
 
 
+2014-01-xx - Release 3.1.0beta
 
 Größere neue Features:
 
@@ -49,12 +50,12 @@ Kleinere neue Features und Detailverbesserungen:
   kaufsmasken gesetzt werden.
 
 - Rechte für die Anzeige von Debitoren- und Kreditorenbuchungen in Berichten
-__Es kann sinnvoll sein, den Standardeinkäufern und Verkäufern keinen Zugriff
-__auf Debitoren- oder Kreditorenbuchungen zu geben. Debitorenbuchungen werden
-__meist nur für die Mahngebührenrechnungen verwendet, da ist das nicht so
-__interessant, aber bei Kreditorenbuchungen werden oft Sachen gebucht, die
-__nichts mit Wareneinkauf zu tun haben, und nicht jeder sehen soll. Für diesen
-__Fall kann man diese Buchungen also per neuem Recht herausfiltern.
+  Es kann sinnvoll sein, den Standardeinkäufern und Verkäufern keinen Zugriff
+  auf Debitoren- oder Kreditorenbuchungen zu geben. Debitorenbuchungen werden
+  meist nur für die Mahngebührenrechnungen verwendet, da ist das nicht so
+  interessant, aber bei Kreditorenbuchungen werden oft Sachen gebucht, die
+  nichts mit Wareneinkauf zu tun haben, und nicht jeder sehen soll. Für diesen
+  Fall kann man diese Buchungen also per neuem Recht herausfiltern.
 
 - Recht für die Anzeige von Details und Berichte von Waren, Dienstleistungen und Erzeugnissen
   Statt nur ein Recht für die Bearbeitung von Artikeln zu haben, das gleichzeitig auch das Recht
@@ -73,18 +74,18 @@ __Fall kann man diese Buchungen also per neuem Recht herausfiltern.
 
 - Stückliste für Lieferschein ausdrucken
   Stücklisten-Details (Haken bei Warenliste) für Erzeugnisse wurden seit 2009
-  (TEMPLATE_ARRAY Änderung) nicht mehr ausgedruckt,
-  da hier die Code-Anpassungen vergessen wurde.
+  (TEMPLATE_ARRAY Änderung) nicht mehr ausgedruckt,  da hier die Code-Anpassungen vergessen wurde.
+
 - Offene Forderungen / Verbindlichkeiten
   Stichtagsbezogene Auswahl korrekt mit Fälligkeit verrechnet
 
 - Lagerbestand anzeigen, zeigt auch die Filteroptionen an
 
-- #1897 implementiert. Zukunfts-Buchungen verhindern, durch einen konfigurierbaren
-  maximalen Zeitraum in dem in die Zukunft gebucht werden darf (default 360 Tage)
+- Zukunfts-Buchungen verhindern, durch einen konfigurierbaren
+  maximalen Zeitraum in dem in die Zukunft gebucht werden darf (default 360 Tage) (s.a. #1987)
 
-- #2300 Alle Feature-Konfigurationen sind jetzt in der Mandantenkonfiguration eingestellt
-- #2301 Dokumentenbelege optional in WebDAV-Ordner speichern
+- Alle Feature-Konfigurationen sind jetzt in der Mandantenkonfiguration eingestellt (s.a. #2300)
+- Dokumentenbelege optional in WebDAV-Ordner speichern (s.a. #2301)
 
 Wichtige Änderungen:
 
@@ -109,11 +110,234 @@ Wichtige Änderungen:
   zwingend vorausgesetzt.
 
 Bugfixes:
- - Punkt in Belegnummer korrekt für WebDAV File Feature escapt (Bug 2394)
- - Stornierte Rechnungen (sowohl die Stornorechnung als auch das Storno nicht
-   Buchen oder Löschen, egal was in der Mandantenkonfiguration steht)
- - Wiederkehrende Rechnung mit Steuer inklusive buchen Erlöse falsch (Bug 2314)
- - manuelle Lieferadresse im Auftrag wird nicht in wiederkehrende Rechung übernommen (Bug 2296)
+
+- Bugfix #182: Bug in bin/mozilla/gl.pl - Keine Steuerautomatik möglich!
+- Bugfix #476: Umwandlung Kundenauftrag in Lieferantenauftrag: fehlerhafte Zahlenformatierung
+- Bugfix #593: Flag für Jahresabschlussbuchungen einführen
+- Bugfix #671: OpenOffice Daemon Modus nicht funktionsfähig
+- Bugfix #708: Zahlungsverkehr - Kontenabgleich riesige Differenz
+- Bugfix #806: Kontenbezeichnungen von neuen Konten nicht bei Datev Export
+- Bugfix #1181: Gutschriftenerstellung aus Rechnung: Zahlungsausgaenge werden mit uebertragen
+- Bugfix #1225: Gutschriften - Variable fuer Rechnungsnummer
+- Bugfix #1396: Stammdaten-Lagerplatz -> Lagerplatz default
+- Bugfix #1464: Vorschlag für neues Login-Fenster
+- Bugfix #1510: Lastschriftvereinbarung f. Lieferanten bei SEPA beruecksichtigen
+- Bugfix #1615: Einkaufsrechnungen mit Fremdwährungen lassen sich nicht per "Zahlung buchen" bezahlen
+- Bugfix #1655: Neuanlegen mit östereichischen Kontorahmen, gibt Update-Fehler
+- Bugfix #1695: Adminbereich: Benutzer "als neu speichern" fügt neuen Nutzer direkt in employee der DB ein
+- Bugfix #1772: systemd script(s) are missing for task server
+- Bugfix #1784: Sammelrechnung nimmt nur 1 Auftragsnummer auf
+- Bugfix #1795: Aktualisierung des Einkaufspreises berücksichtigt Einheit und Rabatt nicht richtig
+- Bugfix #1800: Benutzer anlegen bei Neuinstallation mit bestehenden Mandanten und Verbindung zur DB testen schlägt fehl
+- Bugfix #1838: Lieferantennamen mit Bindstrich am Ende des Namens erzeugen Fehlermeldung bei Kreditorenbuchung
+- Bugfix #1859: Nicht gespeichertes Angebot/Auftrag/Rechnung... -> Drucken -> "Keine Aktion definiert"
+- Bugfix #1897: Datumsfehleingaben bei Rechnungen unterbinden
+- Bugfix #1925: Bei SEPA-Lastschrift wird datepaid in ar nicht gesetzt
+- Bugfix #1966: Konten als neu speichern, einige DB-Felder werden "immer" noch nicht übernommen
+- Bugfix #1998: CSV-Importer sollte in die History eintragen ...
+- Bugfix #2001: "Steuer im Preis inbegriffen": Wird bei manueller Eingabe nach Neuaufruf zurueckgesetzt
+- Bugfix #2010: Verkauf-Auftragsnummer mit TransNumberGenerator
+- Bugfix #2011: Zeilenumbrüche als letztes Zeichen bei part.description, part.notes beim Speichern in DB verhindern
+- Bugfix #2015: Zahlungsbedingungen lassen sich nicht mehr ändern
+- Bugfix #2040: direktes speichern beim zufuegen eines Artikels zum Erzeugnis uebernimmt die Daten nicht
+- Bugfix #2042: Unterschiedliche Anzeige Debitorenbuchung/Kreditorenbuchung
+- Bugfix #2052: Kontenübersicht falsche Zahlen bei Konto 1400
+- Bugfix #2058: Geloeschte User werden in VK-Belegen weiterhin angezeigt/zur Auswahl angeboten
+- Bugfix #2068: Lieferplan enthält bereits gelieferte Artikel
+- Bugfix #2072: Eigene Rechte fuer Lieferplan-Ansicht
+- Bugfix #2080: Verzögerte Aktualisierung von Zwischensumme bei Änderung von Preisgruppen
+- Bugfix #2081: Rechnung -> "als neu bearbeiten" sollte Eintrag "Bearbeiter" aktualisieren
+- Bugfix #2084: Klick auf eMail-Button beim Erfassen einer Rechnung bucht diese
+- Bugfix #2085: Bankkonto löschen schlägt wegen fehlender Funktion fehl
+- Bugfix #2096: Mit Chrome wird Menue innerhalb der CRM nicht richtig geparst
+- Bugfix #2098: Zahlungsverkehr - Zahlungseingang: Suchfeld Rechnungsnummer bringt alle Rechnungen des Kunden
+- Bugfix #2099: Zahlungsverkehr - Zahlungseingang: Dropdown-Feld fuer Kd ist leer
+- Bugfix #2105: Ansprechpersonensuche wird nicht ausgelöst
+- Bugfix #2109: Spalte oe_id in der Tabelle inventory irreführend
+- Bugfix #2111: OpenDocument zu PDF schlägt mit FCGI 0.74 fehl
+- Bugfix #2112: Auswahllistenbegrenzung wird erreicht
+- Bugfix #2113: Top100-Bericht kaputt
+- Bugfix #2114: Abspeichern Kreditorenbuchung
+- Bugfix #2115: Keine taxkey_id in Konten
+- Bugfix #2116: Wiedervorlage, Pulldown-Menü zeigt gelöschte Benutzer
+- Bugfix #2127: Vorlagensystem wird nicht gespeichert
+- Bugfix #2128: Schlüssel (tax_id)=(0) ist nicht in Tabelle 'tax' vorhanden. => Fehler beim Datenbankupgrade von 3.0.0. auf aktuelle git-Version
+- Bugfix #2129: release-3.0.0-7-g357d134 erzeugt in Tabelle acc_trans Einträge in die neue Spalte tax_id, die nicht in der Tabelle tax existieren.
+- Bugfix #2130: Kontorahmen SKR4 enthält doppelte Steuerschlüssel
+- Bugfix #2131: Preigruppe des Kunden wird in der Rechnung nicht eingestellt
+- Bugfix #2132: Buchen von EK-Rechnungen schlaegt fehl
+- Bugfix #2133: Berichte Konten Reihenfolge der Buchungen am selben Tag stimmt nicht
+- Bugfix #2134: Zahlungsverkehr - Zahlungseingang - Feld fuer Kunde funktioniert nicht
+- Bugfix #2136: Interne Bemerkung aus Auftrag gehen beim Workflow hinter Lieferschein verloren, nicht mehr in Rechnung drin
+- Bugfix #2138: SL::DB::Helper::TransNumberGenerator behandelt Kundentypnummernkreise nicht
+- Bugfix #2139: Rose-Beziehungstypen sind oft falsch
+- Bugfix #2141: Workflow Lieferantenauftrag -> Einkaufsrechnung - Abfrage nach Wechselkurs unangebracht
+- Bugfix #2142: Beim Erstellen eines Lieferantenauftrags wird der Rabatt doppelt verrechnet.
+- Bugfix #2145: Einträge in taxkeys sind NULL
+- Bugfix #2146: Summen und Saldenliste: Export to PDF/CSV in EÜR Modus falsch ( altes Ticket #1584 )
+- Bugfix #2150: Erstellen von EK-Auftraegen aus VK-Auftraegen: Preise falsch
+- Bugfix #2156: Steuern übersetzen
+- Bugfix #2157: Fehler beim Erstellen von Rechnungen
+- Bugfix #2158: Einkaufsrechnung erfassen: Lastschrift-Haken
+- Bugfix #2162: Update on "demo.kivitendo.org/beta/" broken
+- Bugfix #2167: Kundenmaske erscheint nicht mehr
+- Bugfix #2169: Fehlermeldung beim Buchen von SEPA-Überweisungen aufgrund neuer Spalte "tax_id" in Tabelle "acc_trans"
+- Bugfix #2170: Zwei Module im Installationscheck ergänzt
+- Bugfix #2173: Fehler beim Storno
+- Bugfix #2175: CSV-Import zeigt im Report nicht alle Zeilen
+- Bugfix #2176: CSV-Import blättert nicht richtig im Report
+- Bugfix #2177: CSV-Import von Lieferadressen fehlerhaft
+- Bugfix #2179: SEPA "Zahlung buchen" - Datumsfelder werden nicht mehr aktualisiert.
+- Bugfix #2181: Steuern festsetzen
+- Bugfix #2182: uri_decode: get parameter 0 wird nicht korrekt übergeben
+- Bugfix #2184: Lieferschein lässt sich nicht abschließen
+- Bugfix #2185: dpt_trans ist überflüssig
+- Bugfix #2186: Tabelle partstax überflüssig
+- Bugfix #2189: add_chart_link_to_acc_trans.sql macht bei Update Probleme
+- Bugfix #2190: Einlagern -> Lieferschein mit Projektnummer: project_id wird nicht in inventory geschrieben
+- Bugfix #2191: Tabelle vendortax scheint überflüssig
+- Bugfix #2195: Kontenabgleich rechnet Falsch
+- Bugfix #2197: Debitorenbuchung Datenbankfehler
+- Bugfix #2201: Kunden können nicht gelöscht werden.
+- Bugfix #2202: kein Icon bei Rechnungen der Menü-Variante "Links (HTML)"
+- Bugfix #2203: CSV-Import zeigt Fehler beim Speichern eines Objektes nicht
+- Bugfix #2204: Neuangelegte Projekte lassen sich nicht wieder aufrufen
+- Bugfix #2205: Projekte: Feste Verknuepfung mit einem Kunden nicht immer gewuenscht/Auswahllistenbegrenzung greift nicht bei Projekten
+- Bugfix #2207: Loeschen von Auftraegen schlaegt fehl
+- Bugfix #2208: Berichte ueber Rechnungen: Default-Vorbelegung Dropdownfeld macht keinen Sinn
+- Bugfix #2209: gifi_accno exisiert nicht bei SL::DB::Manager::Chart->get_all
+- Bugfix #2210: Neue Lieferanten lassen sich nicht anlegen
+- Bugfix #2211: Rechnungen implizit über Preisfaktoren änderbar
+- Bugfix #2213: Benutzer in employee auf ungültig setzen
+- Bugfix #2216: Lieferschein wird bei Minuszeichen am Ende eines Kundennamens nicht gespeichert
+- Bugfix #2217: einmal bebuchte Steuern nicht mehr an der Oberfläche ändern
+- Bugfix #2219: Benutzer- bzw Programmeinstellungen "Steuer im preis inbegriffen" ueberschreiben manuelle Aenderungen
+- Bugfix #2220: Auswahlliste springt auf ersten Eintrag zurück
+- Bugfix #2222: Abteilungen lassen sich nicht ändern
+- Bugfix #2223: Fehler beim Anlegen eines neuen Kontos
+- Bugfix #2224: Steuerzone in Verkauf/Berichte/Rechnungen ist falsch.
+- Bugfix #2226: Zahlungsziel
+- Bugfix #2227: Buchungsjournal Auswahl nach Rechnungsdatum filtert nach höchstem transdate (nicht invnumber)
+- Bugfix #2228: Zahlungsein- ausgänge buchen über Zahlungsverkehr wirft SQL Fehler
+- Bugfix #2230: Layout: Felder und Ueberschriften bei Erzeugnissen verschoben
+- Bugfix #2232: Erzeugnisse: Einheit wird bei Fertigung ignoriert
+- Bugfix #2234: Fehler beim Bearbeiten von Lieferantenaufträgen
+- Bugfix #2235: periodische Rechnungen: kein Bearbeiter und Verkäufer bei automatischem Ausdruck
+- Bugfix #2237: Benutzerdefinierte Variablen von Projekten stehen nicht zum Druck bereit
+- Bugfix #2238: Bei Erzeugnis erfassen kann man identische Erzeugnisnummern speichern
+- Bugfix #2239: Kontonamen werden nicht angezeigt.
+- Bugfix #2240: Periodische Rechnungen nur an bestimmten Tagen ausführen
+- Bugfix #2241: Bestandteil zu einem Erzeugnis hinzufügen fehlerhaft
+- Bugfix #2243: Verkaufsbericht-Design in unstable verhunzt
+- Bugfix #2244: Fehler bei automatischen Auftragsbuchungen (Widerkehrende Rechnungen)
+- Bugfix #2245: Fehler beim Anlegen von Angeboten und Aufträgen (Nummernkreis)
+- Bugfix #2246: wiederkehrende Rechnungen: automatische Druck liefert Fehler
+- Bugfix #2247: wiederkehrende Rechnungen: automatischer Druck enthält nicht alle Variablen
+- Bugfix #2248: Buchungsjournal filtert nicht nach Bearbeiter
+- Bugfix #2249: Vorsteuer-/Umsatzsteuer-Verwechslungen vorbeugen
+- Bugfix #2250: Neue Steuer anlegen nicht möglich
+- Bugfix #2252: Fehler beim DB-Update auf HEAD - steuerfilterung.pl
+- Bugfix #2258: EK-Rechnungen lassen sich nicht buchen oder stornieren /
+- Bugfix #2259: Historie in kreditorenbuchung aufrufen erzeugt Fehler im Hauptfenster
+- Bugfix #2260: Falsche oder keine Summen bei 'Stammdaten -> Berichte -> Waren'
+- Bugfix #2261: Lieferschein -> Rechnung: Gruppenrabatte werden nicht übernommen
+- Bugfix #2272: Bei Dienstleistungsposition sind Preis und Rabatt nicht änderbar
+- Bugfix #2275: Verkäuferinformationen im Druck kommen aus der Authdatenbank
+- Bugfix #2277: Sammelkonten nicht in Aufklappmenü aufnehmen
+- Bugfix #2279: Druckvorlagen werden ohne Nachfrage gelöscht (admin)
+- Bugfix #2280: Druckvorlagenverzeichnis wird nicht vollständig gelöscht (admin)
+- Bugfix #2281: Artikelmenge ist nach hinzufügen Null
+- Bugfix #2282: CSV-Import Kunden geht nicht mehr wg. currency_id NOT NULL
+- Bugfix #2285: im SMTP-Modus wird bcc herausgefiltert
+- Bugfix #2286: Belege kann man nicht mehr löschen
+- Bugfix #2287: CSV-Import Kunden und Lieferanten kann Zahlungsbedingungen nicht aktualisieren ...
+- Bugfix #2288: Zahlungskonto sortieren: Praeferenzsortierung statt alphabetischer/numerischer Sortierung
+- Bugfix #2290: Neue Rechte für Produktivität
+- Bugfix #2292: DB-Error chart_categories Finanzbuchhaltung -> Dialogbuchen
+- Bugfix #2293: Rechnung löschen currency_id nicht beachtet
+- Bugfix #2294: Farben kaputt bei Menü-Variante Oben (mit CSS) im lx-office.erp-Stil
+- Bugfix #2296: manuelle Lieferadresse im Auftrag wird nicht in wiederkehrende Rechung übernommen
+- Bugfix #2301: Dokumentenbelege optional in webdav-Ordner speichern
+- Bugfix #2307: Nachkommastellen gehen bei der Eingabe verloren
+- Bugfix #2308: CSV-Import
+- Bugfix #2310: Gelöschte Aufträge in Aufgabenliste
+- Bugfix #2311: Anlegen von Gruppen schläg fehl
+- Bugfix #2312: Löschen von Mandanten-DBs
+- Bugfix #2313: Fehlermeldung bei Updatescript custom_variable_configs_column_type_text.sql
+- Bugfix #2314: Wiederkehrende Rechnung mit Steuer inklusive buchen Erlöse falsch
+- Bugfix #2315: Konten FA Bad Homburg
+- Bugfix #2319: Konto speichern / Konto als neu speichern leicht fehleranfällig
+- Bugfix #2320: SEPA Export enthält unzureichende/fehlerhafte Daten
+- Bugfix #2321: latex fehlermeldung non-utf8, bessere Nutzerrückmeldung
+- Bugfix #2323: Druckvorlagen funktionieren nicht mehr
+- Bugfix #2324: Spontane Redefinition der Lagerplätze / Nicht reproduzierbarer Lagerschwund
+- Bugfix #2325: Doubletten bei der Anlage von Lagerplätzen
+- Bugfix #2328: CRM ignoriert Umstelung der Benutzersprache auf Englisch
+- Bugfix #2329: CRM: Menu wird von der ERP nicht korrekt ausgeliefert
+- Bugfix #2331: Fehlemeldung beim Buchen von Zahlungen in Fremdwährung
+- Bugfix #2332: Lieferplan: Suchfilter nach Sortieren nicht mehr aktiv
+- Bugfix #2333: Einkaufspreis beim Lieferantenauftrag nicht richtig angezeigt
+- Bugfix #2334: show_no_warehouses_error
+- Bugfix #2335: falsche Lagerbestandsanzeige in Verkaufsdokumenten und Stammdaten
+- Bugfix #2336: Lieferanten anlegen schlägt fehl
+- Bugfix #2337: Updatescript zeigt bei "Neue Filter für Steuerkonten" falschen Steuersatz
+- Bugfix #2339: Perl Pakete in Ubuntu 10.04.4 LTS reichen nicht mehr für Unstable, Doku nicht mehr aktuell
+- Bugfix #2340: Erstellen von neuem Benutzer als Duplikat eines bestehenden enthält unnötige Abfrage
+- Bugfix #2341: Waren erfasse > Kommastellen im Listen- u. Verkaufspreis
+- Bugfix #2344: Ist-Versteuerung - Unterschiedliche Werte bei Bildschirmausgabe und Dateiexport
+- Bugfix #2346: Fehlerhafte Auswahlliste "Steuerschlüssel" in Debitor- und Kreditorbuchungsmaske
+- Bugfix #2347: Chaos in Benutzerdefinierte Variablen
+- Bugfix #2348: Rechnung als neu verwenden liefert Fehlermeldung, ...
+- Bugfix #2349: Hänger beim schnellen Buchen mehrerer Rechnungen
+- Bugfix #2350: Die Liste der Lieferungen (Kundenstamm, Reiter Lieferungen) zeigt falsche Dokumente
+- Bugfix #2351: Druck von HTML-Seiten bringt Fehlermeldung im Browser.
+- Bugfix #2352: Belege in WebDAV-Ablage speichern ergibt Fehlermeldung beim Erstellen von GUV und BWA
+- Bugfix #2359: sub get_warehouse takes ages
+- Bugfix #2361: Kunden anlegen bei neuer Datenbank
+- Bugfix #2365: Überlagerte benutzerdefinierte Variablen werden in wiederkehrende Rechnungen nicht übernommen
+- Bugfix #2366: Löschen und Ändern von Einkaufsrechnungen nicht möglich
+- Bugfix #2367: Lieferplan: längere Antwortzeiten mit steigendem Datenbestand
+- Bugfix #2368: Race Condition: Report-Abfrage blockiert Buchung
+- Bugfix #2369: kleiner Anzeigefehler beim Einlagern bei Menü-Variante Links (HTML)
+- Bugfix #2374: Benutzerdefinierte Variablen vom Typ Ware oder Lieferant lassen sich bei Kunden nicht speichern
+- Bugfix #2376: Fehler bei Einlagern in Lager mit nur einem Lagerplatz in aktueller beta
+- Bugfix #2377: Einlagern in ungültige Lagerplätze ist möglich
+- Bugfix #2378: Einlagern mit negativen Mengen ist möglich
+- Bugfix #2379: VK-Lieferscheine: Vorbelegung laesst sich nicht zuruecknehmen wenn Artikelmenge auf 0 sinkt
+- Bugfix #2381: parse / format amount Problem bei Lagerbewegung > 1.000
+- Bugfix #2382: bei Vorlagendruck fehlt dbname in titlebar
+- Bugfix #2383: Debitorenbuchungen erscheinen doppelt in verknüpften Belegen
+- Bugfix #2384: In Lieferplan wird kein Link für Kunde mehr angezeigt
+- Bugfix #2385: Standardkonto fuer Umlaufvermoegen sollte auch fuer EK-Rechnungen/Debitorenbuchungen gelten
+- Bugfix #2386: Checkbox auf leer setzen bei Kunde bearbeiten wird nicht gespeichert
+- Bugfix #2387: Buchen von Korrekturen an Stornorechnungen
+- Bugfix #2388: Wiedervorlagen / Notizen bei Kunde editieren kaputt
+- Bugfix #2390: Übersetzungen von Zahlungsbedingungen werden nicht gelöscht
+- Bugfix #2393: Stammdaten > Kunden > Tab "Lieferungen", falsche Zuordnungen
+- Bugfix #2394: Menu render Fehler bei WebDav und Belegen mit Punkt in Belegnummer
+- Bugfix #2396: Keine Unternummerierung der Zwischensummen in Lieferscheinen
+- Bugfix #2397: Überschriebene Summen/Zeilen in PDF-Export
+- Bugfix #2398: Mahnungsnummern sind mal im Ausdruck, mal nicht
+- Bugfix #2399: Lieferungen-Tab bei Kunden erlaubt Einsicht in Rechnungen ohne Rechnungsrechte
+- Bugfix #2400: Lieferadresse wird bei der Auswahl eines neuen Lieferanten überschrieben
+- Bugfix #2401: Rabatt im Pop-Up-Fenster Kundendetails falsch, bei den Kundenstammdaten fehlt das %-Zeichen
+- Bugfix #2403: Lieferbedingungen
+- Bugfix #2404: Verlauf der Hintergrund-Jobs: Filter für einen Tag liefert keine Ergebnisse
+- Bugfix #2407: Stornieren von Rechnungen in geschloßenen Perioden erlaubt
+- Bugfix #2409: Detailsanzeige klappt bei Eingabe von neuen Artikel auf
+- Bugfix #2410: Lieferscheindruck nicht möglich - Tex-Fehler
+- Bugfix #2411: Fehler bei VK Rechnung "Als bezahlt markieren": action= nicht definiert
+- Bugfix #2413: "scripts/locales.pl" nutzt "modules/fallback" nicht
+- Bugfix #2420: Benutzerdefinierte Variablen ist falsch
+- Bugfix #2421: Benutzerdefinierte Variablen wird nicht gespeichert
+- Bugfix #2422: neue Ansprechpersonen-CVar: kein Std-Wert
+- Bugfix #2424: Input-Fokus falsch in select_part, select_name
+- Bugfix #2426: Bei Kreditorenbuchungen wird nicht mehr auf vorhandene Rechnungsnummer geprüft
+- Bugfix #2428: CSV Import Waren Menge aktualisiert nur parts.onhand
+- Bugfix #2429: Partpicker aktualisiert bei bestimmten Aktionen nicht
+- Bugfix #2430: installaton_check.pl: bitte -D pushen
+- Bugfix #2432: Neuer Mandant - Kunde oder Lieferant speichern schlägt fehl bei Nummernkreis
+- Bugfix #2433: HTML UStVA-Bericht funktioniert nicht wenn WebDAV Belege speichern aktiv ist
 
 
 2012-12-10 - Release 3.0.0
index 5bbc172..f2b4b0b 100644 (file)
         <para>im kivitendo-Forum: <ulink
         url="https://forum.kivitendo.org/">https://forum.kivitendo.org/</ulink></para>
       </listitem>
+      <listitem>
+        <para>in der doc/UPGRADE Datei im doc-Verzeichnis der Installation</para>
+      </listitem>
+      <listitem>
+        <para>Im Schulungs- und Dienstleistungsangebot der entsprechenden kivitendo-Partner: <ulink
+        url="http://www.kivitendo.de/partner.html">http://www.kivitendo.de/partner.html</ulink></para>
+      </listitem>
     </itemizedlist>
   </chapter>
 
@@ -71,7 +78,7 @@
         ohne große Probleme auf den derzeit aktuellen verbreiteten
         Distributionen läuft.</para>
 
-        <para>Mitte 2012 sind das folgende Systeme, von denen bekannt ist,
+        <para>Anfang 2014 sind das folgende Systeme, von denen bekannt ist,
         dass kivitendo auf ihnen läuft:</para>
 
         <itemizedlist>
@@ -351,15 +358,14 @@ tar xvzf kivitendo-erp-3.0.0.tgz</programlisting>
 
           <listitem><para><literal>system</literal></para></listitem>
 
-          <listitem><para><literal>features</literal> (siehe Kapitel "<xref linkend="features"/>")</para></listitem>
-
           <listitem><para><literal>paths</literal></para></listitem>
 
+          <listitem><para><literal>mail_delivery</literal> (siehe Abschnitt "<xref linkend="config.sending-email.smtp"/>)</para></listitem>
+
           <listitem><para><literal>applications</literal></para></listitem>
 
           <listitem><para><literal>environment</literal></para></listitem>
 
-          <listitem><para><literal>mail_delivery</literal> (siehe Abschnitt "<xref linkend="config.sending-email.smtp"/>)</para></listitem>
 
           <listitem><para><literal>print_templates</literal></para></listitem>
 
@@ -367,8 +373,14 @@ tar xvzf kivitendo-erp-3.0.0.tgz</programlisting>
 
           <listitem><para><literal>periodic_invoices</literal></para></listitem>
 
+          <listitem><para><literal>self_tests</literal></para></listitem>
+
           <listitem><para><literal>console</literal></para></listitem>
 
+          <listitem><para><literal>testing</literal></para></listitem>
+
+          <listitem><para><literal>testing/database</literal></para></listitem>
+
           <listitem><para><literal>debug</literal></para></listitem>
         </itemizedlist>
 
@@ -1170,8 +1182,8 @@ ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/</programlisting>
         Authentifizierungsdatenbank gespeichert. Dies ist diejenige Datenbank, deren Verbindungsparameter in der Konfigurationsdatei
         <filename>config/kivitendo.conf</filename> gespeichert werden.</para>
 
-        <para>Das zweite Set besteht aus den eigentlichen Verkehrsdaten eines Mandanten: Stammdaten (Kunden, Lieferanten, Waren), Belege
-        (Angebote, Liferscheine, Rechnungen), Einstellungen. Diese werden in einer Mandantendatenbank gespeichert. Die
+        <para>Das zweite Set besteht aus den eigentlichen Verkehrsdaten eines Mandanten, wie beispielsweise die Stammdaten (Kunden, Lieferanten, Waren) und Belege
+        (Angebote, Lieferscheine, Rechnungen). Diese werden in einer Mandantendatenbank gespeichert. Die
         Verbindungsinformationen einer solchen Mandantendatenbank werden im Administrationsbereich konfiguriert, indem man einen Mandanten
         anlegt und dort die Parameter einträgt. Dabei hat jeder Mandant eine eigene Datenbank.</para>
 
@@ -1179,16 +1191,7 @@ ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/</programlisting>
         Mandantendatenbanken in ein und derselben Datenbank zu speichern. Arbeitet man hingegen mit mehr als einem Mandanten, wird
         empfohlen, für die Authentifizierungsdatenbank eine eigene Datenbank zu verwenden, die nicht gleichzeitig für einen Mandanten
         verwendet wird.</para>
-
-        <para>kivitendo verwendet eine Datenbank zum Speichern all seiner
-        Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
-        mit kivitendo arbeiten zu können, muss eine Person einen
-        Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
-        Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
-        möglich und normal, dass mehreren Benutzern die selbe Datenbank
-        zugewiesen wird, sodass sie alle mit den selben Daten arbeiten
-        können.</para>
-      </sect2>
+     </sect2>
 
       <sect2 id="Mandanten-Benutzer-Gruppen">
         <title>Mandanten, Benutzer und Gruppen</title>
@@ -1589,6 +1592,9 @@ ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/</programlisting>
         <title>RB</title>
 
         <para>Vollständiger Dokumentensatz mit alternativem Design</para>
+        <para>Die konzeptionelle Idee wird <ulink
+          url="http://www.kivitendo-support.de/vortraege/Lx-Office%20Anwendertreffen%20LaTeX-Druckvorlagen-Teil3-finale.pdf">hier</ulink>
+          auf Folie 5 bis 10 vorgestellt, Detaileinstellungen dann im Readme.tex im Vorlagenverzeichnis.</para>
 
       </sect2>
 
@@ -2257,8 +2263,7 @@ ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/</programlisting>
         manuell über den Workflow.</para>
       </sect2>
     </sect1>
-
-    <sect1 id="dokumentenvorlagen-und-variablen">
+        <sect1 id="dokumentenvorlagen-und-variablen">
       <title>Dokumentenvorlagen und verfügbare Variablen</title>
 
       <sect2 id="dokumentenvorlagen-und-variablen.einführung">
@@ -4803,6 +4808,41 @@ Beschreibung: &lt;%description%&gt;
         gewechselt.</para>
       </sect2>
     </sect1>
+    <sect1 id="features.warehouse">
+    <title>Mandantenkonfiguration Lager</title>
+        Die Lagerverwaltung in kivitendo funktioniert standardmässig wie folgt:
+        Wird ein Lager mit einem Lagerplatz angelegt, so gibt es die Möglichkeit hier über den
+        Menüpunkt Lager entsprechende Warenbewegungen durchzuführen. Ferner kann
+        jede Position eines Lieferscheins ein-, bzw. ausgelagert werden (Einkauf-, bzw. Verkauf).
+        Es können beliebig viele Lager mit beliebig vielen Lagerplätzen abgebildet werden.
+        Die Lagerbewegungen über einen Lieferschein erfolgt durch Anklicken jeder Einzelposition und
+        das Auswählen dieser Position zu einem Lager mit Lagerplatz.
+        Dieses Verfahren lässt sich schrittweise vereinfachen, je nachdem wie die Einstellungen in
+        der Mandatenkonfiguration gesetzt werden.
+       <itemizedlist>
+          <listitem>
+            <para><option>Auslagern über Standardlagerplatz</option> Hier wird ein zusätzlicher Knopf (Auslagern über Standard-Lagerplatz)
+            in dem Lieferschein-Beleg hinzugefügt, der dann alle Lagerbewegungen über den Standardlagerplatz (konfigurierbar pro Ware) durchführt.
+            </para>
+          </listitem>
+          <listitem>
+            <para><option>Auslagern ohne Bestandsprüfung</option>Das obige Auslagern schlägt fehl, wenn die entsprechende Menge für
+            die Lagerbewegung nicht vorhanden ist, möchte man dies auch ignorieren und ggf. dann nachpflegen, so kann man eine Negativ-Warenmenge mit dieser Option
+            erlauben. Hierfür muss ein entsprechender Lagerplatz (Fehlbestand, o.ä.) konfiguriert sein.</para>
+          </listitem>
+       </itemizedlist>
+        Zusätzliche Funktionshinweise:
+         <itemizedlist>
+          <listitem><para><option>Standard-Lagerplatz</option>Ist dieser konfiguriert, wird dies auch als Standard-Voreinstellung bei der Neuerfassung von
+          Stammdaten-> Waren / Dienstleistung / Erzeugnis verwendet.
+          </para>
+          </listitem>
+          <listitem><para><option>Standard-Lagerplatz verwenden, falls keiner in Stammdaten definiert</option>Wird beim 'Auslagern über Standardlagerplatz'
+          keine Standardlagerplatz zu der Ware gefunden, so wird mit dieser Option einfach der Standardlagerplatz verwendet.
+          </para>
+          </listitem>
+       </itemizedlist>
+    </sect1>
   </chapter>
 
   <chapter>
index 5e93492..f3c9e3e 100644 (file)
@@ -1,4 +1,5 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Kapitel 1. Aktuelle Hinweise</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 1. Aktuelle Hinweise</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 1. Aktuelle Hinweise"><div class="titlepage"><div><div><h2 class="title"><a name="Aktuelle-Hinweise"></a>Kapitel 1. Aktuelle Hinweise</h2></div></div></div><p>Aktuelle Installations- und Konfigurationshinweise gibt es:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>im kivitendo-Forum: <a class="ulink" href="https://forum.kivitendo.org/" target="_top">https://forum.kivitendo.org/</a>
+            </p></li><li class="listitem"><p>in der doc/UPGRADE Datei im doc-Verzeichnis der Installation</p></li><li class="listitem"><p>Im Schulungs- und Dienstleistungsangebot der entsprechenden kivitendo-Partner: <a class="ulink" href="http://www.kivitendo.de/partner.html" target="_top">http://www.kivitendo.de/partner.html</a>
             </p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">kivitendo 3.0.0: Installation, Konfiguration, Entwicklung&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;Kapitel 2. Installation und Grundkonfiguration</td></tr></table></div></body></html>
\ No newline at end of file
index d5aff31..b980f1d 100644 (file)
@@ -5,7 +5,7 @@
         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.</p><p>Mitte 2012 sind das folgende Systeme, von denen bekannt ist,
+        Distributionen läuft.</p><p>Anfang 2014 sind das folgende Systeme, von denen bekannt ist,
         dass kivitendo auf ihnen läuft:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Debian</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>6.0 "Squeeze" (hier muss allerdings das Modul FCGI in der Version &gt;= 0.72 compiled werden, und <code class="literal">Rose::DB::Object</code> ist zu alt)</p></li><li class="listitem"><p>7.0 "Wheezy"</p></li></ul></div></li><li class="listitem"><p>Ubuntu 12.04 LTS "Precise Pangolin", 12.10 "Quantal Quetzal" und 13.04 "Precise Pangolin"</p></li><li class="listitem"><p>openSUSE 12.2 und 12.3</p></li><li class="listitem"><p>SuSE Linux Enterprice Server 11</p></li><li class="listitem"><p>Fedora 16 bis 19</p></li></ul></div></div><div class="sect2" title="2.2.2. Benötigte Perl-Pakete installieren"><div class="titlepage"><div><div><h3 class="title"><a name="Pakete"></a>2.2.2. Benötigte Perl-Pakete installieren</h3></div></div></div><p>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
         Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.4)
         benötigt.</p><p>Zusätzlich benötigt kivitendo einige Perl-Pakete, die nicht Bestandteil einer Standard-Perl-Installation sind. Um zu
@@ -70,7 +70,7 @@
         sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
         zukünftigen Version aber aus dem Paket entfernt werden. Es wird
         empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
-        installieren.</p><div class="sect3" title="2.2.2.1. Debian und Ubuntu"><div class="titlepage"><div><div><h4 class="title"><a name="d0e340"></a>2.2.2.1. Debian und Ubuntu</h4></div></div></div><p>Alle benötigten Perl-Pakete stehen für Debian und Ubuntu als Debian-Pakete zur Verfügung. Sie können mit folgendem Befehl
+        installieren.</p><div class="sect3" title="2.2.2.1. Debian und Ubuntu"><div class="titlepage"><div><div><h4 class="title"><a name="d0e349"></a>2.2.2.1. Debian und Ubuntu</h4></div></div></div><p>Alle benötigten Perl-Pakete stehen für Debian und Ubuntu als Debian-Pakete zur Verfügung. Sie können mit folgendem Befehl
           installiert werden:</p><pre class="programlisting">apt-get install apache2 libarchive-zip-perl libclone-perl \
   libconfig-std-perl libdatetime-perl libdbd-pg-perl libdbi-perl \
   libemail-address-perl  libemail-mime-perl libfcgi-perl libjson-perl \
   librose-db-perl librose-object-perl libsort-naturally-perl \
   libstring-shellquote-perl libtemplate-perl libtext-csv-xs-perl \
   libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl \
-  libfile-copy-recursive-perl postgresql</pre></div><div class="sect3" title="2.2.2.2. Fedora Core"><div class="titlepage"><div><div><h4 class="title"><a name="d0e347"></a>2.2.2.2. Fedora Core</h4></div></div></div><p>Für Fedora Core stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl installeirt werden:</p><pre class="programlisting">yum install httpd perl-Archive-Zip perl-Clone perl-DBD-Pg \
+  libfile-copy-recursive-perl postgresql</pre></div><div class="sect3" title="2.2.2.2. Fedora Core"><div class="titlepage"><div><div><h4 class="title"><a name="d0e356"></a>2.2.2.2. Fedora Core</h4></div></div></div><p>Für Fedora Core stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl installeirt werden:</p><pre class="programlisting">yum install httpd perl-Archive-Zip perl-Clone perl-DBD-Pg \
   perl-DBI perl-DateTime perl-Email-Address perl-Email-MIME perl-FCGI \
   perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils perl-Net-SMTP-SSL perl-Net-SSLGlue \
   perl-PDF-API2 perl-Params-Validate perl-Rose-DB perl-Rose-DB-Object \
   perl-Rose-Object perl-Sort-Naturally perl-String-ShellQuote \
   perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
   perl-XML-Writer perl-YAML perl-parent postgresql-server</pre><p>Zusätzlich müssen einige Pakete aus dem CPAN installiert werden. Dazu können Sie die folgenden Befehle nutzen:</p><pre class="programlisting">yum install perl-CPAN
-cpan Config::Std</pre></div><div class="sect3" title="2.2.2.3. openSUSE"><div class="titlepage"><div><div><h4 class="title"><a name="d0e358"></a>2.2.2.3. openSUSE</h4></div></div></div><p>Für openSUSE stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl
+cpan Config::Std</pre></div><div class="sect3" title="2.2.2.3. openSUSE"><div class="titlepage"><div><div><h4 class="title"><a name="d0e367"></a>2.2.2.3. openSUSE</h4></div></div></div><p>Für openSUSE stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl
           installiert werden:</p><pre class="programlisting">zypper install apache2 perl-Archive-Zip perl-Clone \
   perl-Config-Std perl-DBD-Pg perl-DBI perl-DateTime perl-Email-Address \
   perl-Email-MIME perl-FastCGI perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils \
index e9e710d..c1bdf68 100644 (file)
                   </p></li><li class="listitem"><p>
                      <code class="literal">system</code>
                   </p></li><li class="listitem"><p>
-                     <code class="literal">features</code> (siehe Kapitel "<a class="xref" href="ch03.html" title="Kapitel 3. Features und Funktionen">Features und Funktionen</a>")</p></li><li class="listitem"><p>
                      <code class="literal">paths</code>
                   </p></li><li class="listitem"><p>
+                     <code class="literal">mail_delivery</code> (siehe Abschnitt "<a class="xref" href="ch02s10.html#config.sending-email.smtp" title="2.10.2. Versand über einen SMTP-Server">E-Mail-Versand über einen SMTP-Server</a>)</p></li><li class="listitem"><p>
                      <code class="literal">applications</code>
                   </p></li><li class="listitem"><p>
                      <code class="literal">environment</code>
                   </p></li><li class="listitem"><p>
-                     <code class="literal">mail_delivery</code> (siehe Abschnitt "<a class="xref" href="ch02s10.html#config.sending-email.smtp" title="2.10.2. Versand über einen SMTP-Server">E-Mail-Versand über einen SMTP-Server</a>)</p></li><li class="listitem"><p>
                      <code class="literal">print_templates</code>
                   </p></li><li class="listitem"><p>
                      <code class="literal">task_server</code>
                   </p></li><li class="listitem"><p>
                      <code class="literal">periodic_invoices</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">self_tests</code>
                   </p></li><li class="listitem"><p>
                      <code class="literal">console</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">testing</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">testing/database</code>
                   </p></li><li class="listitem"><p>
                      <code class="literal">debug</code>
                   </p></li></ul></div><p>Die üblicherweise wichtigsten Parameter, die am Anfang
index f834447..8adafac 100644 (file)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-   <title>2.6. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.6. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.6.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e697"></a>2.6.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
+   <title>2.6. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.6. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.6.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e716"></a>2.6.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
           mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
           <a class="xref" href="ch02s06.html#Apache-Konfiguration.FCGI" title="2.6.2. Konfiguration für FastCGI/FCGI">Konfiguration für FastCGI/FCGI</a> beschrieben.</p></td></tr></table></div><p>Der Zugriff auf das Programmverzeichnis muss in der Apache
         Webserverkonfigurationsdatei <code class="literal">httpd.conf</code> eingestellt
index ceff261..577f2b5 100644 (file)
@@ -29,7 +29,7 @@
         Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
         einzubinden. Da das bei neueren Linux-Distributionen aber nicht
         zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
-        anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e895"></a>2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)</h4></div></div></div><p>Kopieren Sie die Datei
+        anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e914"></a>2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)</h4></div></div></div><p>Kopieren Sie die Datei
           <code class="filename">scripts/boot/system-v/kivitendo-server</code>
           nach <code class="filename">/etc/init.d/kivitendo-server</code>. Passen
           Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
           Boot-Prozess ein. Dies ist distributionsabhängig:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Debian-basierende Systeme:</p><pre class="programlisting">update-rc.d kivitendo-task-server defaults
 # Nur bei Debian Squeeze und neuer:
 insserv kivitendo-task-server</pre></li><li class="listitem"><p>Ältere OpenSUSE und ältere Fedora Core:</p><pre class="programlisting">chkconfig --add kivitendo-task-server</pre></li></ul></div><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
-          werden:</p><pre class="programlisting">/etc/init.d/kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e924"></a>2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
+          werden:</p><pre class="programlisting">/etc/init.d/kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e943"></a>2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
           <code class="filename">scripts/boot/upstart/kivitendo-task-server.conf</code>
           nach <code class="filename">/etc/init/kivitendo-task-server.conf</code>.
           Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
           <code class="literal">exec ....</code>).</p><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
-          werden:</p><pre class="programlisting">service kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e942"></a>2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)</h4></div></div></div><p>Verlinken Sie die Datei <code class="filename">scripts/boot/systemd/kivitendo-task-server.service</code> nach
+          werden:</p><pre class="programlisting">service kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e961"></a>2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)</h4></div></div></div><p>Verlinken Sie die Datei <code class="filename">scripts/boot/systemd/kivitendo-task-server.service</code> nach
           <code class="filename">/etc/systemd/system/</code>. Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
           <code class="literal">ExecStart=....</code> und <code class="literal">ExecStop=...</code>). Binden Sie das Script in den Boot-Prozess ein.
           </p><p>Alle hierzu benötigten Befehle sehen so aus:</p><pre class="programlisting">cd /var/www/kivitendo-erp/scripts/boot/systemd
index 495958b..0abdcee 100644 (file)
@@ -7,20 +7,13 @@
       <code class="filename">config/kivitendo.conf</code> eingetragen haben.</p><div class="sect2" title="2.9.1. Zusammenhänge"><div class="titlepage"><div><div><h3 class="title"><a name="Zusammenh%C3%A4nge"></a>2.9.1. Zusammenhänge</h3></div></div></div><p>kivitendo verwaltet zwei Sets von Daten, die je nach Einrichtung in einer oder zwei Datenbanken gespeichert werden.</p><p>Das erste Set besteht aus Anmeldeinformationen: welche Benutzer und Mandanten gibt es, welche Gruppen, welche BenutzerIn hat
         Zugriff auf welche Mandanten, und welche Gruppe verfügt über welche Rechte. Diese Informationen werden in der
         Authentifizierungsdatenbank gespeichert. Dies ist diejenige Datenbank, deren Verbindungsparameter in der Konfigurationsdatei
-        <code class="filename">config/kivitendo.conf</code> gespeichert werden.</p><p>Das zweite Set besteht aus den eigentlichen Verkehrsdaten eines Mandanten: Stammdaten (Kunden, Lieferanten, Waren), Belege
-        (Angebote, Liferscheine, Rechnungen), Einstellungen. Diese werden in einer Mandantendatenbank gespeichert. Die
+        <code class="filename">config/kivitendo.conf</code> gespeichert werden.</p><p>Das zweite Set besteht aus den eigentlichen Verkehrsdaten eines Mandanten, wie beispielsweise die Stammdaten (Kunden, Lieferanten, Waren) und Belege
+        (Angebote, Lieferscheine, Rechnungen). Diese werden in einer Mandantendatenbank gespeichert. Die
         Verbindungsinformationen einer solchen Mandantendatenbank werden im Administrationsbereich konfiguriert, indem man einen Mandanten
         anlegt und dort die Parameter einträgt. Dabei hat jeder Mandant eine eigene Datenbank.</p><p>Aufgrund des Datenbankdesigns ist es für einfache Fälle möglich, die Authentifizierungsdatenbank und eine der
         Mandantendatenbanken in ein und derselben Datenbank zu speichern. Arbeitet man hingegen mit mehr als einem Mandanten, wird
         empfohlen, für die Authentifizierungsdatenbank eine eigene Datenbank zu verwenden, die nicht gleichzeitig für einen Mandanten
-        verwendet wird.</p><p>kivitendo verwendet eine Datenbank zum Speichern all seiner
-        Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
-        mit kivitendo arbeiten zu können, muss eine Person einen
-        Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
-        Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
-        möglich und normal, dass mehreren Benutzern die selbe Datenbank
-        zugewiesen wird, sodass sie alle mit den selben Daten arbeiten
-        können.</p></div><div class="sect2" title="2.9.2. Mandanten, Benutzer und Gruppen"><div class="titlepage"><div><div><h3 class="title"><a name="Mandanten-Benutzer-Gruppen"></a>2.9.2. Mandanten, Benutzer und Gruppen</h3></div></div></div><p>kivitendos Administration kennt Mandanten, Benutzer und Gruppen, die sich frei zueinander zuordnen lassen.</p><p>kivitendo kann mehrere Mandaten aus einer Installation heraus verwalten. Welcher Mandant benutzt wird, kann direkt beim Login
+        verwendet wird.</p></div><div class="sect2" title="2.9.2. Mandanten, Benutzer und Gruppen"><div class="titlepage"><div><div><h3 class="title"><a name="Mandanten-Benutzer-Gruppen"></a>2.9.2. Mandanten, Benutzer und Gruppen</h3></div></div></div><p>kivitendos Administration kennt Mandanten, Benutzer und Gruppen, die sich frei zueinander zuordnen lassen.</p><p>kivitendo kann mehrere Mandaten aus einer Installation heraus verwalten. Welcher Mandant benutzt wird, kann direkt beim Login
         ausgewählt werden. Für jeden Mandanten wird ein eindeutiger Name vergeben, der beim Login angezeigt wird. Weiterhin benötigt der
         Mandant Datenbankverbindungsparameter für seine Mandantendatenbank. Diese sollte über die <a class="link" href="ch02s09.html#Datenbanken-anlegen" title="2.9.3. Datenbanken anlegen">Datenbankverwaltung</a> geschehen.</p><p>Ein Benutzer ist eine Person, die Zugriff auf kivitendo erhalten soll. Sie erhält einen Loginnamen sowie ein
         Passwort. Weiterhin legt der Administrator fest, an welchen Mandanten sich ein Benutzer anmelden kann, was beim Login verifiziert
index 123ed68..2ab4e2c 100644 (file)
@@ -5,13 +5,20 @@
       die Pakete mit:</p><p>
             </p><pre class="programlisting">aptitude install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
   texlive-latex-extra texlive-lang-german texlive-generic-extra</pre><p>
-         </p><p>TODO: RPM-Pakete.</p><p>kivitendo bringt drei alternative Vorlagensätze mit:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Standard</p></li><li class="listitem"><p>f-tex</p></li><li class="listitem"><p>RB</p></li></ul></div><div class="sect2" title="2.11.1. Vorlagenverzeichnis anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagenverzeichnis-anlegen"></a>2.11.1. Vorlagenverzeichnis anlegen</h3></div></div></div><p>Im Administrationsbereich lässt sich bei einem Benutzer/Mandanten einer dieser Vorlagensätze als Basis für die zu
-        druckenden Dokumente auswählen. Rufen Sie dazu die <span class="guimenu">Benutzerverwaltung</span> auf.</p><p>Wählen Sie dort einen Benutzer aus oder legen Sie einen neuen an. In der Benutzerbearbeiten-Maske müssen Sie zwei Dinge
-        angeben:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
-                     <code class="option">Name</code>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
-          Bedingungen für Verzeichnisnamen frei gewählt werden.</p></li><li class="listitem"><p>
+         </p><p>TODO: RPM-Pakete.</p><p>kivitendo bringt drei alternative Vorlagensätze mit:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Standard</p></li><li class="listitem"><p>f-tex</p></li><li class="listitem"><p>RB</p></li></ul></div><div class="sect2" title="2.11.1. Vorlagenverzeichnis anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagenverzeichnis-anlegen"></a>2.11.1. Vorlagenverzeichnis anlegen</h3></div></div></div><p>Es lässt sich ein initialer Vorlagensatz erstellen. Die LaTeX-System-Abhängigkeiten hierfür kann man prüfen mit:</p><pre class="programlisting">./scripts/installation_check.pl -lv</pre><p>Der Angemmeldete Benutzer muss in einer Gruppe sein, die über das
+              Recht "Konfiguration -&gt; Mandantenverwaltung" verfügt. Siehe auch <a class="xref" href="ch02s09.html#Gruppen-anlegen" title="2.9.4. Gruppen anlegen">Abschnitt&nbsp;2.9.4, „Gruppen anlegen“</a>.
+        </p><p>Im Userbereich lässt sich unter:
+        "<span class="guimenu">System</span> -&gt;
+        <span class="guisubmenu">Mandantenverwaltung</span> -&gt; <span class="guimenuitem">Verschiedenes</span>" die Option
+        "Neue Druckvorlagen aus Vorlagensatz erstellen" auswählen.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
                      <code class="option">Vorlagen auswählen</code>: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll
-          (<code class="filename">Standard</code>, <code class="filename">f-tex</code> oder <code class="filename">RB</code>.)</p></li></ol></div><p>Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</p><p>Die Abhängigkeiten kann man prüfen mit:</p><pre class="programlisting">/scripts/installation_check.pl -l</pre></div><div class="sect2" title="2.11.2. Standard"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagen-Standard"></a>2.11.2. Standard</h3></div></div></div><p>Der Standard-Vorlagensatz von Kivitendo. Wie unter <a class="ulink" href="http://demo.kivitendo.org" target="_top">http://demo.kivitendo.org</a> zu
+          (<code class="filename">Standard</code>, <code class="filename">f-tex</code> oder <code class="filename">RB</code>.)</p></li><li class="listitem"><p>
+                     <code class="option">Neuer Name</code>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
+          Bedingungen für Verzeichnisnamen frei gewählt werden.</p></li></ol></div><p>Nach dem Speichern wird das Vorlagenverzeichnis angelegt und ist für den aktuellen Mandanten ausgewählt.
+           Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Mandanten verwendet werden.
+           Eventuell muessen Anpassungen (Logo, Erscheinungsbild, etc) noch vorgenommen werden. Den Ordner findet man im Dateisistem unter
+           <code class="filename">./templates/[Neuer Name]</code>
+            </p></div><div class="sect2" title="2.11.2. Standard"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagen-Standard"></a>2.11.2. Standard</h3></div></div></div><p>Der Standard-Vorlagensatz von Kivitendo. Wie unter <a class="ulink" href="http://demo.kivitendo.org" target="_top">http://demo.kivitendo.org</a> zu
         sehen.</p></div><div class="sect2" title="2.11.3. f-tex"><div class="titlepage"><div><div><h3 class="title"><a name="f-tex"></a>2.11.3. f-tex</h3></div></div></div><p>Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur Verfügung stellt.</p><div class="sect3" title="2.11.3.1. Feature-Übersicht"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-Feature-%C3%9Cbersicht"></a>2.11.3.1. Feature-Übersicht</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage für alle briefartigen Dokumente verwendet. Also
             Angebot, Rechnung, Performarechnung, Lieferschein, aber eben nicht für Paketaufkleber etc..</p></li><li class="listitem"><p>Leichte Anpassung an das Firmen-Layout durch verwendung eines Hintergrund-PDF. Dieses kann leicht mit dem
             eigenen Lieblingsprogramm erstellt werden (Openoffice, Inkscape, Gimp, Adobe*)</p></li><li class="listitem"><p>Hintergrund-PDF umschaltbar auf "nur erste Seite" (Standard) oder "alle Seiten" (Option
@@ -71,7 +78,8 @@
           <code class="varname">shipto*</code>-Variable leer ist, wird die entsprechende Adressvariable eingesetzt.  Wenn also die Lieferadresse in
           Straße, Hausnummer und Ort abweicht, müssen auch nur diese Felder in der Lieferadresse ausgefüllt werden. Für den Firmenname wird
           der Wert der Hauptadresse angezeigt.
-          </p></div></div><div class="sect2" title="2.11.4. RB"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagen-RB"></a>2.11.4. RB</h3></div></div></div><p>Vollständiger Dokumentensatz mit alternativem Design</p></div><div class="sect2" title="2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="allgemeine-hinweise-zu-latex"></a>2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen</h3></div></div></div><p>In den allermeisten Installationen sollte drucken jetzt schon
+          </p></div></div><div class="sect2" title="2.11.4. RB"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagen-RB"></a>2.11.4. RB</h3></div></div></div><p>Vollständiger Dokumentensatz mit alternativem Design</p><p>Die konzeptionelle Idee wird <a class="ulink" href="http://www.kivitendo-support.de/vortraege/Lx-Office%20Anwendertreffen%20LaTeX-Druckvorlagen-Teil3-finale.pdf" target="_top">hier</a>
+          auf Folie 5 bis 10 vorgestellt, Detaileinstellungen dann im Readme.tex im Vorlagenverzeichnis.</p></div><div class="sect2" title="2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="allgemeine-hinweise-zu-latex"></a>2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen</h3></div></div></div><p>In den allermeisten Installationen sollte drucken jetzt schon
         funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
         Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
         die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum
index e8667b4..0155489 100644 (file)
                         <code class="varname">invdate</code>
                      </span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term">
                         <code class="varname">invnumber</code>
-                     </span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.2.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.2.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.2.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4685"></a>3.2.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
+                     </span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.2.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.2.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.2.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4718"></a>3.2.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
           Rechnung. Allerdings heißen die Variablen, die mit
           <code class="varname">inv</code> beginnen, jetzt anders. Bei den Angeboten
           fangen sie mit <code class="varname">quo</code> für "quotation" an:
index 5813bde..25899f3 100644 (file)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-   <title>3.3. Excel-Vorlagen</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch03.html" title="Kapitel 3. Features und Funktionen"><link rel="prev" href="ch03s02.html" title="3.2. Dokumentenvorlagen und verfügbare Variablen"><link rel="next" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.3. Excel-Vorlagen</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 3. Features und Funktionen</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="3.3. Excel-Vorlagen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="excel-templates"></a>3.3. Excel-Vorlagen</h2></div></div></div><div class="sect2" title="3.3.1. Zusammenfassung"><div class="titlepage"><div><div><h3 class="title"><a name="excel-templates.summary"></a>3.3.1. Zusammenfassung</h3></div></div></div><p>Dieses Dokument beschreibt den Mechanismus, mit dem
+   <title>3.3. Excel-Vorlagen</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch03.html" title="Kapitel 3. Features und Funktionen"><link rel="prev" href="ch03s02.html" title="3.2. Dokumentenvorlagen und verfügbare Variablen"><link rel="next" href="ch03s04.html" title="3.4. Mandantenkonfiguration Lager"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.3. Excel-Vorlagen</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 3. Features und Funktionen</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="3.3. Excel-Vorlagen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="excel-templates"></a>3.3. Excel-Vorlagen</h2></div></div></div><div class="sect2" title="3.3.1. Zusammenfassung"><div class="titlepage"><div><div><h3 class="title"><a name="excel-templates.summary"></a>3.3.1. Zusammenfassung</h3></div></div></div><p>Dieses Dokument beschreibt den Mechanismus, mit dem
         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
         einhergehen.</p></div><div class="sect2" title="3.3.2. Bedienung"><div class="titlepage"><div><div><h3 class="title"><a name="excel-templates.usage"></a>3.3.2. Bedienung</h3></div></div></div><p>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
         werden. Die Konfigurationsoption heißt <code class="varname">excel_templates =
@@ -33,4 +33,4 @@
         <code class="constant">&lt;% %&gt;</code> kommt in den Headerinformationen
         evtl. vor. Deshalb wurde auf den sichereren Delimiter
         <code class="constant">&lt;&lt;</code> und <code class="constant">&gt;&gt;</code>
-        gewechselt.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s02.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.2. Dokumentenvorlagen und verfügbare Variablen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;Kapitel 4. Entwicklerdokumentation</td></tr></table></div></body></html>
\ No newline at end of file
+        gewechselt.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s02.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.2. Dokumentenvorlagen und verfügbare Variablen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;3.4. Mandantenkonfiguration Lager</td></tr></table></div></body></html>
\ No newline at end of file
index 8c7b140..7584f82 100644 (file)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-   <title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s03.html" title="3.3. Excel-Vorlagen"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e5292"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5298"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
+   <title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s04.html" title="3.4. Mandantenkonfiguration Lager"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s04.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e5356"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5362"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
         globs global und die meisten speziellen Variablen sind...
         speziell.</p><p>Daraus ergeben sich folgende Formen:</p><div class="variablelist"><dl><dt><span class="term">
@@ -25,7 +25,7 @@
               <code class="varname">$PACKAGE::form</code>.</p></dd><dt><span class="term">
                      <code class="literal">local $form</code>
                   </span></dt><dd><p>Alle Änderungen an <code class="varname">$form</code> werden am Ende
-              des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5399"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
+              des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5463"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
                <span class="productname">SQL-Ledger</span>™ hat fast alles im globalen
         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
         Unter <span class="productname">FCGI</span>™ müssen diese Sachen aber wieder
@@ -39,7 +39,7 @@
         dies hat, seit der Einführung, u.a. schon so manche langwierige
         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
         angegeben werden, werden die nicht geprüft, und somit kann sich
-        schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5432"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
+        schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5496"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
         umhergereicht werden.</p><p>Diese Variablen sind im Moment die folgenden neun:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
@@ -62,7 +62,7 @@
                      <code class="varname">$::request</code>
                   </p></li></ul></div><p>Damit diese nicht erneut als Müllhalde missbraucht werden, im
         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
-        Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5496"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
+        Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5560"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
               "<code class="classname">Form</code>"</p></li><li class="listitem"><p>Wird nach jedem Request gelöscht</p></li><li class="listitem"><p>Muss auch in Tests und Konsolenscripts vorhanden
               sein.</p></li><li class="listitem"><p>Enthält am Anfang eines Requests die Requestparameter vom
               User</p></li><li class="listitem"><p>Kann zwar intern über Requestgrenzen ein Datenbankhandle
   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
   # ...
-}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5580"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
+}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5644"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
               zugegriffen wird</p></li><li class="listitem"><p>Wird bei jedem Request neu erstellt.</p></li><li class="listitem"><p>Enthält die Userdaten des aktuellen Logins</p></li><li class="listitem"><p>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
               extern serialisiert werden, weil da auch der Datenbankzugriff
               für diesen user drinsteht.</p></li><li class="listitem"><p>Enthält unter anderem Listenbegrenzung vclimit,
           überwiegend die Daten, die sich unter <span class="guimenu">Programm</span>
           -&gt; <span class="guimenuitem">Einstellungen</span> befinden, bzw. die
           Informationen über den Benutzer die über die
-          Administrator-Schnittstelle eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5619"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
+          Administrator-Schnittstelle eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5683"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
               sein.</p></li><li class="listitem"><p>Cached intern über Requestgrenzen hinweg benutzte
               Locales</p></li></ul></div><p>Lokalisierung für den aktuellen User. Alle Übersetzungen,
-          Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5637"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
+          Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5701"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
               Funktionen</p></li></ul></div><p>
                   <code class="varname">$::lxdebug</code> stellt Debuggingfunktionen
           bereit, wie "<code class="function">enter_sub</code>" und
           "<code class="function">message</code>" und "<code class="function">dump</code>" mit
           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
           packen kann.</p><p>Beispielsweise so:</p><pre class="programlisting">$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
-$main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5674"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
+$main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5738"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
                   <code class="varname">$::auth</code> stellt Funktionen bereit um die
           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
           vom aktuellen User abhängen wird das Objekt aus
           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
           Request kurz resettet.</p><p>Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über
           <code class="literal">$::auth-&gt;client</code> abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle
-          <code class="literal">auth.clients</code>.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5703"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
+          <code class="literal">auth.clients</code>.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5767"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
               "<code class="classname">SL::LxOfficeConf</code>"</p></li><li class="listitem"><p>Global gecached</p></li><li class="listitem"><p>Repräsentation der
               <code class="filename">config/kivitendo.conf[.default]</code>-Dateien</p></li></ul></div><p>Globale Konfiguration. Configdateien werden zum Start gelesen
           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
@@ -152,16 +152,16 @@ $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{
 file = /tmp/kivitendo-debug.log</pre><p>ist der Key <code class="varname">file</code> im Programm als
           <code class="varname">$::lx_office_conf-&gt;{debug}{file}</code>
           erreichbar.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Zugriff auf die Konfiguration erfolgt im Moment über
-            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5739"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
+            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5803"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
               "<code class="classname">SL::InstanceConfiguration</code>"</p></li><li class="listitem"><p>wird pro Request neu erstellt</p></li></ul></div><p>Funktioniert wie <code class="varname">$::lx_office_conf</code>,
           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
           ist hier eine Mandantendatenbank. Beispielsweise überprüft
           </p><pre class="programlisting">$::instance_conf-&gt;get_inventory_system eq 'perpetual'</pre><p>
-          ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5760"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
+          ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5824"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
               "<code class="varname">SL::Dispatcher</code>"</p></li><li class="listitem"><p>wird pro Serverprozess erstellt.</p></li><li class="listitem"><p>enthält Informationen über die technische Verbindung zum
               Server</p></li></ul></div><p>Der dritte Punkt ist auch der einzige Grund warum das Objekt
           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
-          Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5778"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
+          Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5842"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
                   <code class="varname">$::request</code> ist ein generischer Platz um
           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
           at a distance benutzt werden, sondern um lokales memoizing zu
@@ -174,20 +174,20 @@ file = /tmp/kivitendo-debug.log</pre><p>ist der Key <code class="varname">file</
               <code class="varname">$::request</code>
                      </p></li><li class="listitem"><p>Muss ich von anderen Teilen des Programms lesend drauf
               zugreifen? Dann <code class="varname">$::request</code>, aber Zugriff über
-              Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5820"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
-        entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5825"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
+              Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5884"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
+        entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5889"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
               Klassenfunktionen funktionieren</p></li><li class="listitem"><p>Aufruf als Klasse erzeugt Dummyobjekt was im
               Klassennamespace gehalten wird und über Requestgrenzen
               leaked</p></li><li class="listitem"><p>liegt jetzt unter
               <code class="varname">$::request-&gt;{cgi}</code>
-                     </p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5841"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
+                     </p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5905"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
               ein paar hundert mal pro Request eine Liste der Einheiten
               brauchen, und de als Parameter durch einen Riesenstack von
               Funktionen geschleift werden müssten.</p></li><li class="listitem"><p>Liegt jetzt unter
               <code class="varname">$::request-&gt;{cache}{all_units}</code>
                      </p></li><li class="listitem"><p>Wird nur in
               <code class="function">AM-&gt;retrieve_all_units()</code> gesetzt oder
-              gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5860"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
+              gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5924"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
               abzufangen.</p></li><li class="listitem"><p>Wurde entfernt, weil callsub nur einen Bruchteil der
               möglichen Rekursioenen darstellt, und da nie welche
-              auftreten.</p></li><li class="listitem"><p>komplette recursion protection wurde entfernt.</p></li></ul></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.3. Excel-Vorlagen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html>
\ No newline at end of file
+              auftreten.</p></li><li class="listitem"><p>komplette recursion protection wurde entfernt.</p></li></ul></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s04.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.4. Mandantenkonfiguration Lager&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html>
\ No newline at end of file
index c97f3d3..8308bbd 100644 (file)
@@ -1,9 +1,9 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-   <title>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Installation-%C3%9Cbersicht">2.1. Übersicht</a></span></dt><dt><span class="sect1"><a href="ch02s02.html">2.2. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s02.html#Betriebssystem">2.2.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02s02.html#Pakete">2.2.2. Benötigte Perl-Pakete installieren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s03.html">2.3. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s04.html">2.4. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#config.config-file.introduction">2.4.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.sections-parameters">2.4.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.prior-versions">2.4.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#%C3%84nderungen-an-Konfigurationsdateien">2.5.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.5.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Datenbankbenutzer-anlegen">2.5.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#d0e697">2.6.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Apache-Konfiguration.FCGI">2.6.2. Konfiguration für FastCGI/FCGI</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Konfiguration-des-Task-Servers">2.7.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Einbinden-in-den-Boot-Prozess">2.7.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle">2.7.3. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle2">2.7.4. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Grundlagen-zur-Benutzerauthentifizierung">2.8.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Administratorpasswort">2.8.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Authentifizierungsdatenbank">2.8.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Passwort%C3%BCberpr%C3%BCfung">2.8.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Name-des-Session-Cookies">2.8.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Anlegen-der-Authentifizierungsdatenbank">2.8.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. Mandanten-, Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#Zusammenh%C3%A4nge">2.9.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-Benutzer-Gruppen">2.9.2. Mandanten, Benutzer und Gruppen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Datenbanken-anlegen">2.9.3. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Gruppen-anlegen">2.9.4. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Benutzer-anlegen">2.9.5. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-anlegen">2.9.6. Mandanten anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.sendmail">2.10.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.smtp">2.10.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s11.html#Vorlagenverzeichnis-anlegen">2.11.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-Standard">2.11.2. Standard</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#f-tex">2.11.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-RB">2.11.4. RB</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#allgemeine-hinweise-zu-latex">2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s12.html">2.12. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s13.html">2.13. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
+   <title>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo 3.0.0: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Installation-%C3%9Cbersicht">2.1. Übersicht</a></span></dt><dt><span class="sect1"><a href="ch02s02.html">2.2. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s02.html#Betriebssystem">2.2.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02s02.html#Pakete">2.2.2. Benötigte Perl-Pakete installieren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s03.html">2.3. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s04.html">2.4. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#config.config-file.introduction">2.4.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.sections-parameters">2.4.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.prior-versions">2.4.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#%C3%84nderungen-an-Konfigurationsdateien">2.5.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.5.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Datenbankbenutzer-anlegen">2.5.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#d0e716">2.6.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Apache-Konfiguration.FCGI">2.6.2. Konfiguration für FastCGI/FCGI</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Konfiguration-des-Task-Servers">2.7.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Einbinden-in-den-Boot-Prozess">2.7.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle">2.7.3. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle2">2.7.4. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Grundlagen-zur-Benutzerauthentifizierung">2.8.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Administratorpasswort">2.8.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Authentifizierungsdatenbank">2.8.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Passwort%C3%BCberpr%C3%BCfung">2.8.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Name-des-Session-Cookies">2.8.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Anlegen-der-Authentifizierungsdatenbank">2.8.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. Mandanten-, Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#Zusammenh%C3%A4nge">2.9.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-Benutzer-Gruppen">2.9.2. Mandanten, Benutzer und Gruppen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Datenbanken-anlegen">2.9.3. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Gruppen-anlegen">2.9.4. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Benutzer-anlegen">2.9.5. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-anlegen">2.9.6. Mandanten anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.sendmail">2.10.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#config.sending-email.smtp">2.10.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s11.html#Vorlagenverzeichnis-anlegen">2.11.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-Standard">2.11.2. Standard</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#f-tex">2.11.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#Vorlagen-RB">2.11.4. RB</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#allgemeine-hinweise-zu-latex">2.11.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s12.html">2.12. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s13.html">2.13. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
       EUR</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s13.html#config.eur.introduction">2.13.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.parameters">2.13.2. Konfigurationsparameter</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.setting-parameters">2.13.3. Festlegen der Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.inventory-system-perpetual">2.13.4. Bemerkungen zu Bestandsmethode</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.eur.knonw-issues">2.13.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s14.html">2.14. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s14.html#config.skr04-update-3804.introduction">2.14.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s14.html#config.skr04-update-3804.create-chart">2.14.2. Konto 3804 manuell anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s15.html">2.15. Einstellungen pro Mandant</a></span></dt><dt><span class="sect1"><a href="ch02s16.html">2.16. kivitendo ERP verwenden</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. Features und Funktionen</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch03.html#features.periodic-invoices">3.1. Wiederkehrende Rechnungen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.introduction">3.1.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.configuration">3.1.2. Konfiguration</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.variables">3.1.3. Spezielle Variablen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.reports">3.1.4. Auflisten</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.task-server">3.1.5. Erzeugung der eigentlichen Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.create-for-current-month">3.1.6. Erste Rechnung für aktuellen Monat erstellen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s02.html">3.2. Dokumentenvorlagen und verfügbare Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.einf%C3%BChrung">3.2.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.variablen-ausgeben">3.2.2. Variablen ausgeben</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">3.2.3. Verwendung in Druckbefehlen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.tag-style">3.2.4. Anfang und Ende der Tags verändern</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.zuordnung-dateinamen">3.2.5. Zuordnung von den Dateinamen zu den Funktionen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dateinamen-erweitert">3.2.6. Sprache, Drucker und E-Mail</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.allgemeine-variablen">3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden
         sind</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.invoice">3.2.8. Variablen in Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dunning">3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.andere-vorlagen">3.2.10. Variablen in anderen Vorlagen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.bloecke">3.2.11. Blöcke, bedingte Anweisungen und Schleifen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.markup">3.2.12. Markup-Code zur Textformatierung innerhalb von
-        Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#excel-templates.summary">3.3.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.usage">3.3.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.syntax">3.3.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.limitations">3.3.4. Einschränkungen</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e5298">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5399">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5432">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5820">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format-perl-files">4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.4. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.character-set">4.4.2. Character set</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.3. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3. 
+        Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#excel-templates.summary">3.3.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.usage">3.3.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.syntax">3.3.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.limitations">3.3.4. Einschränkungen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s04.html">3.4. Mandantenkonfiguration Lager</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e5362">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5463">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5496">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5884">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format-perl-files">4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.4. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.character-set">4.4.2. Character set</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.3. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3. 
           Existierende Tests ausführen
         </a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.meaning_of_scripts">4.5.4. 
           Bedeutung der verschiedenen Test-Scripte
index 6b36490..ee9597b 100644 (file)
Binary files a/doc/kivitendo-Dokumentation.pdf and b/doc/kivitendo-Dokumentation.pdf differ
index 14151a6..7ead6bf 100755 (executable)
@@ -256,8 +256,8 @@ $self->{texts} = {
   'Authentification database creation' => 'Anlegen der Datenbank zur Benutzerauthentifizierung',
   'Authentification tables creation' => 'Anlegen der Tabellen zur Benutzerauthentifizierung',
   'Auto Send?'                  => 'Auto. Versand?',
-  'Automatic deletion of leading, trailing and excessive (repetitive) spaces in customer or vendor names' => 'Automatisches Löschen von voran-, mehrfach wiederholenten oder nachgestellten Leerzeichen im Kunden- oder Lieferantennamen (Bspw.: " Schmidt &nbsp;&nbsp;&nbsp;& Söhne GmbH" -> "Schmidt & Söhne GmbH"',
-  'Automatic deletion of leading, trailing and excessive (repetitive) spaces in part description and part notes. Affects also the CSV-Import.' => '',
+  'Automatic deletion of leading, trailing and excessive (repetitive) spaces in customer or vendor names' => 'Automatisches Löschen von voran-/nachgestellten und aufeinanderfolgenden Leerzeichen im Kunden- oder Lieferantennamen',
+  'Automatic deletion of leading, trailing and excessive (repetitive) spaces in part description and part notes. Affects the CSV import as well.' => 'Automatisches Löschen von voran-/nachgestellten und aufeinanderfolgenden Leerzeichen in Artikelbeschreibungen und -bemerkungen. Betrifft auch den CSV-Import.',
   'Automatically created invoice for fee and interest for dunning %s' => 'Automatisch erzeugte Rechnung für Gebühren und Zinsen zu Mahnung %s',
   'Available'                   => 'Verfügbar',
   'Available qty'               => 'Lagerbestand',
@@ -666,7 +666,7 @@ $self->{texts} = {
   'Default Transfer'            => 'Ein- / Auslagern über Standardlagerplätze',
   'Default Transfer Out always succeed. The current part onhand is ignored and the inventory can have negative stocks (not recommended).' => 'Auslagern über Standardlagerplatz funktioniert immer (verfügbare Menge wird nicht geprüft). Die Lagerbewegung wird auf den unten konfigurierten Lagerplatz gebucht (nicht empfohlen).',
   'Default Transfer Out with negative inventory' => 'Standard-Auslagern ohne Prüfung auf Bestand',
-  'Default Transfer with Master Bin' => 'Standardlagerplatz für Lagerbewegungen verwenden, falls keiner für die Ware explizit definiert wurde',
+  'Default Transfer with Master Bin' => 'Standardlagerplatz für Lagerbewegungen verwenden, falls keiner in Stammdaten definiert',
   'Default Warehouse'           => 'Standard-Lager',
   'Default Warehouse with ignoring on hand' => 'Standardlager für Auslagern ohne Prüfung auf Bestand',
   'Default buchungsgruppe'      => 'Standardbuchungsgruppe',
@@ -1920,7 +1920,7 @@ $self->{texts} = {
   'Show Filter'                 => 'Filter zeigen',
   'Show Salesman'               => 'Verkäufer anzeigen',
   'Show TODO list'              => 'Aufgabenliste anzeigen',
-  'Show Transfer via default'   => 'Ein- / Auslagern über Standardlagerplatz anzeigen',
+  'Show Transfer via default'   => 'Ein- / Auslagern über Standardlagerplatz anzeigen (zusätzlicher Knopf in Beleg Lieferschein)',
   'Show administration link'    => 'Link zur Administration anzeigen',
   'Show all parts'              => 'Alle Artikel anzeigen',
   'Show by default'             => 'Standardm&auml;&szlig;ig anzeigen',
@@ -2116,7 +2116,7 @@ $self->{texts} = {
   'The client has been created.' => 'Der Mandant wurde angelegt.',
   'The client has been deleted.' => 'Der Mandant wurde gelöscht.',
   'The client has been saved.'  => 'Der Mandant wurde gespeichert.',
-  'The column "datatype" must be present and must be the first column. The values must be the row names (see settings) for order and item data respectively.' => 'Die Spalte "datatype" muss vorhanden sein und sie muss die erste Spalte sein. Die Werte in dieser Spalte müssen die Namen der Auftrag-/Positions-Zeilen (siehe Einstellungen) sein.',
+  'The column "datatype" must be present and must be at the same position / column in each data set. The values must be the row names (see settings) for order and item data respectively.' => 'Die Spalte "datatype" muss vorhanden sein und sie muss in jedem Datensatz an der gleichen Stelle / Spalte sein. Die Werte in dieser Spalte müssen die Namen der Auftrag-/Positions-Zeilen (siehe Einstellungen) sein.',
   'The column "make_X" can contain either a vendor\'s database ID, a vendor number or a vendor\'s name.' => 'Die Spalte "make_X" can entweder die Datenbank-ID des Lieferanten, eine Lieferantennummer oder einen Lieferantennamen enthalten.',
   'The column triplets can occur multiple times with different numbers "X" each time (e.g. "make_1", "model_1", "lastcost_1", "make_2", "model_2", "lastcost_2", "make_3", "model_3", "lastcost_3" etc).' => 'Die Spalten-Dreiergruppen können mehrfach auftreten, sofern sie unterschiedliche Nummern "X" verwenden (z.B. "make_1", "model_1", "lastcost_1", "make_2", "model_2", "lastcost_2", "make_3", "model_3", "lastcost_3" etc).',
   'The columns &quot;Dunning Duedate&quot;, &quot;Total Fees&quot; and &quot;Interest&quot; show data for the previous dunning created for this invoice.' => 'Die Spalten &quot;Zahlbar bis&quot;, &quot;Kumulierte Geb&uuml;hren&quot; und &quot;Zinsen&quot; zeigen Daten der letzten f&uuml;r diese Rechnung erzeugten Mahnung.',
index b5faaca..6f86703 100644 (file)
@@ -2079,7 +2079,7 @@ $self->{texts} = {
   'The client has been created.' => '',
   'The client has been deleted.' => '',
   'The client has been saved.'  => '',
-  'The column "datatype" must be present and must be the first column. The values must be the row names (see settings) for order and item data respectively.' => '',
+  'The column "datatype" must be present and must be at the same position / column in each data set. The values must be the row names (see settings) for order and item data respectively.' => '',
   'The column "make_X" can contain either a vendor\'s database ID, a vendor number or a vendor\'s name.' => '',
   'The column triplets can occur multiple times with different numbers "X" each time (e.g. "make_1", "model_1", "lastcost_1", "make_2", "model_2", "lastcost_2", "make_3", "model_3", "lastcost_3" etc).' => '',
   'The columns &quot;Dunning Duedate&quot;, &quot;Total Fees&quot; and &quot;Interest&quot; show data for the previous dunning created for this invoice.' => '',
index 959ecbe..3df14f4 100755 (executable)
@@ -21,6 +21,8 @@ my (%uselines, %modules, %supplied, %requires);
    'Rose::DB::Object::ConventionManager' => 1,
    'Rose::DB::Object::Manager'           => 1,
    'Rose::DB::Object::Metadata'          => 1,
+   'Rose::DB::Object::Helpers'           => 1,
+   'Rose::DB::Object::Util'              => 1,
   },
   'Rose::Object' => {
     'Rose::Object::MakeMethods::Generic' => 1,
@@ -32,6 +34,7 @@ my (%uselines, %modules, %supplied, %requires);
     'Template::Plugin'                   => 1,
     'Template::Plugin::Filter'           => 1,
     'Template::Plugin::HTML'             => 1,
+    'Template::Stash'                    => 1,
   },
   'Devel::REPL' => {
     'namespace::clean'                   => 1,
@@ -43,6 +46,9 @@ my (%uselines, %modules, %supplied, %requires);
     'TAP::Parser'                        => 1,
     'TAP::Parser::Aggregator'            => 1,
   },
+  'Archive::Zip' => {
+    'Archive::Zip::Member'               => 1,
+  }
 );
 
 GetOptions(
diff --git a/sql/Pg-upgrade2/drop_audittrail.sql b/sql/Pg-upgrade2/drop_audittrail.sql
new file mode 100644 (file)
index 0000000..b998dc6
--- /dev/null
@@ -0,0 +1,6 @@
+-- @tag: drop_audittrail
+-- @description: Tabelle audittrail wird nicht mehr benutzt
+-- @depends: release_3_0_0
+-- @ignore: 0
+ALTER TABLE defaults DROP COLUMN audittrail;
+DROP TABLE audittrail;
index 809dfb1..3a8556c 100644 (file)
@@ -1,4 +1,4 @@
-use Test::More tests => 71;
+use Test::More tests => 75;
 
 use lib 't';
 use utf8;
@@ -551,6 +551,55 @@ ok !$csv->_check_multiplexed, 'multiplex check detects empty header';
 
 #####
 
+$csv = SL::Helper::Csv->new(
+  file   => \<<EOL,
+description;longdescription;datatype
+name;customernumber;datatype
+Kaffee;"lecker Kaffee";P
+Meier;1;C
+Bier;"kühles Bier";P
+Mueller;2;C
+EOL
+# " # make emacs happy
+  profile => [
+              {class  => 'SL::DB::Part',     row_ident => 'P'},
+              {class  => 'SL::DB::Customer', row_ident => 'C'},
+             ],
+  ignore_unknown_columns => 1,
+);
+$csv->parse;
+is $csv->_multiplex_datatype_position, 2, 'multiplex check detects datatype field position right';
+
+is_deeply $csv->get_data, [ { datatype => 'P', description => 'Kaffee', longdescription => 'lecker Kaffee' },
+                            { datatype => 'C', name => 'Meier', customernumber => 1},
+                            { datatype => 'P', description => 'Bier', longdescription => 'kühles Bier' },
+                            { datatype => 'C', name => 'Mueller', customernumber => 2}
+                          ],
+                          'multiplex: datatype not at first position works';
+
+#####
+
+$csv = SL::Helper::Csv->new(
+  file   => \<<EOL,
+datatype;description;longdescription
+name;datatype;customernumber
+P;Kaffee;"lecker Kaffee"
+Meier;C;1
+P;Bier;"kühles Bier"
+Mueller;C;2
+EOL
+# " # make emacs happy
+  profile => [
+              {class  => 'SL::DB::Part',     row_ident => 'P'},
+              {class  => 'SL::DB::Customer', row_ident => 'C'},
+             ],
+  ignore_unknown_columns => 1,
+);
+ok !$csv->parse, 'multiplex check detects incosistent datatype field position';
+is_deeply( ($csv->errors)[0], [ 0, 'datatype field must be at the same position for all datatypes for multiplexed data', 0, 0 ], 'multiplex data with inconsistent datatype field posiotion throws error');
+
+#####
+
 $csv = SL::Helper::Csv->new(
   file   => \"Datatype;Description\nDatatype;Name\nP;Kaffee\nC;Meier",        # " # make emacs happy
   case_insensitive_header => 1,
index 817eaee..ee95775 100644 (file)
@@ -1,10 +1,10 @@
 %
 % Bemerkungen zum Vorlagensatz RB von
-% Richardson & Büren GbR, Bonn
+% Richardson & Büren GmbH
 %
 % Hier wurden einige Ideen aufgegriffen, die in folgendem Vortrag
 % erwähnt wurden:
-% http://www.lx-office.org/uploads/media/Lx-Office_Anwendertreffen_LaTeX-Druckvorlagen-31.01.2011_01.pdf
+% http://www.kivitendo-support.de/vortraege/Lx-Office%20Anwendertreffen%20LaTeX-Druckvorlagen-Teil3-finale.pdf
 %
 % Am Ende dieser Datei befindet sich ein Abschnitt "Quickstart", der die
 % Vorbereitungsschritte beschreibt, die bei diesem Druckvorlagensatz nötig
index 9988995..a98907c 100644 (file)
Binary files a/templates/print/RB/firma/briefkopf.png and b/templates/print/RB/firma/briefkopf.png differ
index fff1ac5..fd3e6d1 100644 (file)
@@ -1,6 +1,6 @@
 \newcommand{\currency}{\euro}
-\newcommand{\kontonummer}{4004 283 800}
+\newcommand{\kontonummer}{4071953800}
 \newcommand{\bank}{GLS Bank eG}
 \newcommand{\bankleitzahl}{430 609 67}
-\newcommand{\bic}{DE87430609674004283800}
-\newcommand{\iban}{GENODEM1GLS}
+\newcommand{\iban}{DE50430609674071953800}
+\newcommand{\bic}{GENODEM1GLS}
index 3c82c64..0ee9060 100644 (file)
@@ -1,9 +1,9 @@
-\newcommand{\telefon} {++49 228 360 14 351}
+\newcommand{\telefon} {++49 228 92 98 2012}
 \newcommand{\fax} {}
-\newcommand{\firma} {Richardson \& Büren GbR}
-\newcommand{\strasse} {Siemensstr. 8}
-\newcommand{\ort} {53121 Bonn}
-\newcommand{\ustid} {DE238288407}
+\newcommand{\firma} {Richardson \& Büren GmbH}
+\newcommand{\strasse} {Römerstr. 45 - 47}
+\newcommand{\ort} {53111 Bonn}
+\newcommand{\ustid} {DE292363254}
 \newcommand{\finanzamt} {Finanzamt Bonn-Innenstadt}
-\newcommand{\email} {information@lx-office-hosting.de}
-\newcommand{\homepage} {http://www.lx-office-hosting.de}
+\newcommand{\email} {information@kivitendo-premium.de}
+\newcommand{\homepage} {http://www.kivitendo-premium.de}
index cccffb9..4eaad87 100644 (file)
@@ -48,7 +48,7 @@
         a4paper,      % DINA4
         %% left=19mm,    % Linker Rand
         %% width=142mm,  % Textbreite
-        top=49mm,     % Abstand Textanfang von oben
+        top=46mm,     % Abstand Textanfang von oben
         head=5mm,     % Höhe des Kopfes
         headsep=12mm, % Abstand Kopf zu Textanfang
         bottom=25mm,  % Abstand von unten
@@ -94,7 +94,7 @@
         \strasse               & \homepage           & \textBank        & \bank \\
         \ort                   & \textUstid\ \ustid  & \textIban        & \iban \\
         \textTelefon~\telefon  & \finanzamt          & \textBic         & \bic \\
-        \ifthenelse{\equal{\fax}{}}{}{\textFax~\fax} &&& \\
+        \ifthenelse{\equal{\fax}{}}{}{\textFax~\fax} & &\textBankleitzahl      & \bankleitzahl \\
      \end{tabular}
   }
 }
index 9959c45..78d63b4 100644 (file)
 
   <%name%>
 
+  <%department_1%>
+
+  <%department_2%>
+
+  <%cp_givenname%> <%cp_name%>
+
   <%street%>
 
   ~
 \ifthenelse{\equal{<%cp_name%>}{}}{\anrede}{
   \ifthenelse{\equal{<%cp_gender%>}{f}}
     {\anredefrau}{\anredeherr} <%cp_title%> <%cp_name%>,}\\
+%\rechnungsformel\\
+
+<%if notes%>
+        <%notes%>
+<%end if%>
 
-\rechnungsformel\\
 
 \vspace{0.5cm}
 
 
 \vspace{0.2cm}
 
-<%if notes%>
-        \vspace{5mm}
-        <%notes%>
-        \vspace{5mm}
-<%end if%>
-
 \ifthenelse{\equal{<%deliverydate%>}{}}{\leistungsdatumGleichRechnungsdatum}{\lieferungErfolgtAm ~<%deliverydate%>.} \\
 
 <%if payment_terms%>
index 0bd5466..81861fc 100644 (file)
                 [% L.date_tag(temp, $temp) %]
               [% ELSE %]
                 [% $temp | html %]
-                <input type="hidden" name="[% temp %]" value="[% $temp | html %]">|;
+                <input type="hidden" name="[% temp %]" value="[% $temp | html %]">
               [% END %]
             </td>
 
             [% temp = "AP_paid_"_ i %]
             <td align="center">
               [% IF( changeable ) %]
-                [% L.select_tag(temp, ALL_CHARTS_AP_paid, value_title_sub = \AP_paid_value_title_sub, default = $temp) %]
+                [% L.select_tag(temp, ALL_CHARTS_AP_paid, value_title_sub = \AP_paid_value_title_sub, default = ($temp || accno_arap))  %]
               [% ELSE %]
                 [% $temp | html %]
                 <input type="hidden" name="[% temp %]" value="[% $temp | html %]">
index 28a00ec..c0ba2f0 100644 (file)
@@ -47,7 +47,7 @@
  <tr>
    <td align="right">[% LxERP.t8('Normalize part description and part notes') %]</td>
    <td>   [% L.yes_no_tag('defaults.normalize_part_descriptions', SELF.defaults.normalize_part_descriptions) %]</td>
-   <td>[% LxERP.t8('Automatic deletion of leading, trailing and excessive (repetitive) spaces in part description and part notes. Affects also the CSV-Import.') %]</td>
+   <td>[% LxERP.t8('Automatic deletion of leading, trailing and excessive (repetitive) spaces in part description and part notes. Affects the CSV import as well.') %]</td>
   </tr>
 </tr>
  </table>
index 87ff835..938b232 100644 (file)
@@ -9,7 +9,22 @@
    <td>
     [% LxERP.t8('Show Transfer via default') %]<br>
    </td>
+  </tr>
+   <td align="right" nowrap="true">[% LxERP.t8('Default Warehouse') %]</td>
+   <td>
+    [% L.select_tag('defaults.warehouse_id', SELF.all_warehouses, id='warehouse_id', with_empty=1, default=SELF.defaults.warehouse_id, title_key='description',
+                    onchange="warehouse_selected(this.selectedIndex == 0 ? -1 : warehouses[this.selectedIndex - 1].id, -1)") %]
+   </td>
+   <td>
+    [% LxERP.t8('This is the default bin for parts') %]<br>
+    [% LxERP.t8('If configured this bin will be preselected for all new parts. Also this bin will be used as the master default bin, if default transfer out with master bin is activated.') %]<br>
+   </td>
+  </tr>
+  <tr>
+   <td align="right" nowrap="true">[% LxERP.t8('Default Bin') %]</td>
+   <td>[% L.select_tag('defaults.bin_id', [], id='bin_id', with_empty=1) %]</td>
   </tr>
+  <tr>
   <tr>
    <td align="right">[% LxERP.t8('Default Transfer with Master Bin') %]</td>
    <td>
@@ -19,6 +34,7 @@
     [% LxERP.t8('Use master default bin for Default Transfer, if no default bin for the part is configured') %]<br>
    </td>
   </tr>
+  <tr><td colspan="3"><hr /></td></tr>
   <tr>
    <td align="right">[% LxERP.t8('Default Transfer Out with negative inventory') %]</td>
    <td>
    </td>
   </tr>
 
-  <tr> </tr>
-  <tr>
-   <td align="right" nowrap="true">[% LxERP.t8('Default Warehouse') %]</td>
-   <td>
-    [% L.select_tag('defaults.warehouse_id', SELF.all_warehouses, id='warehouse_id', with_empty=1, default=SELF.defaults.warehouse_id, title_key='description',
-                    onchange="warehouse_selected(this.selectedIndex == 0 ? -1 : warehouses[this.selectedIndex - 1].id, -1)") %]
-   </td>
-   <td>
-    [% LxERP.t8('This is the default bin for parts') %]<br>
-    [% LxERP.t8('If configured this bin will be preselected for all new parts. Also this bin will be used as the master default bin, if default transfer out with master bin is activated.') %]<br>
-   </td>
-  </tr>
-  <tr>
-   <td align="right" nowrap="true">[% LxERP.t8('Default Bin') %]</td>
-   <td>[% L.select_tag('defaults.bin_id', [], id='bin_id', with_empty=1) %]</td>
-  </tr>
-  <tr>
+ <tr>
    <td align="right" nowrap="true">[% LxERP.t8('Default Warehouse with ignoring on hand') %]</td>
    <td>
     [% L.select_tag('defaults.warehouse_id_ignore_onhand', SELF.all_warehouses, id='warehouse_id_ignore_onhand', with_empty=1, default=SELF.defaults.warehouse_id_ignore_onhand, title_key='description',
@@ -60,6 +60,8 @@
    <td align="right" nowrap="true">[% LxERP.t8('Default Bin with ignoring onhand') %]</td>
    <td>[% L.select_tag('defaults.bin_id_ignore_onhand', [], id='bin_id_ignore_onhand', with_empty=1) %]</td>
   </tr>
+  <tr><td colspan="3"><hr /></td></tr>
+  <tr>
   <tr>
    <td align="right">[% LxERP.t8('Show Bestbefore') %]</td>
    <td>
index 4a9672b..0f8ac95 100644 (file)
 [%- ELSIF SELF.type == 'orders' %]
    <p>
     [1]:
-    [% LxERP.t8('The column "datatype" must be present and must be the first column. The values must be the row names (see settings) for order and item data respectively.') %]
+    [% LxERP.t8('The column "datatype" must be present and must be at the same position / column in each data set. The values must be the row names (see settings) for order and item data respectively.') %]
    </p>
    <p>
     [2]:
index af0f19b..c587223 100644 (file)
 </tr>
 <tr>
   <td>
-    L&ouml;hne und Geh&auml;ter
+    L&ouml;hne und Geh&auml;lter
   </td>
   <td>
     [% eur9 %]