<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<book id="kivitendo-documentation" lang="de">
- <title>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</title>
+ <title>kivitendo 3.1.0: Installation, Konfiguration, Entwicklung</title>
<chapter id="Aktuelle-Hinweise">
<title>Aktuelle Hinweise</title>
<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>
</orderedlist>
<para>
- Alle weiteren Unterkapitel in diesem Kapitel sind ebenfalls wichtig und dienen sollten vor einer ernsthaften Inbetriebnahme gelesen
+ Alle weiteren Unterkapitel in diesem Kapitel sind ebenfalls wichtig und sollten vor einer ernsthaften Inbetriebnahme gelesen
werden.
</para>
</sect1>
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>
<para>Debian</para>
<itemizedlist>
<listitem>
- <para>6.0 "Squeeze" (hier muss allerdings das Modul FCGI in der Version >= 0.72 compiled werden)</para>
+ <para>6.0 "Squeeze" (hier muss allerdings das Modul FCGI in der Version >= 0.72 compiled werden, und <literal>Rose::DB::Object</literal> ist zu alt)</para>
</listitem>
<listitem>
<para>7.0 "Wheezy"</para>
</listitem>
<listitem>
- <para>Ubuntu 10.04 LTS "Lucid Lynx", 12.04 LTS "Precise Pangolin" und 12.10 "Oneiric Ocelot"`</para>
+ <para>Ubuntu 12.04 LTS "Precise Pangolin", 12.10 "Quantal Quetzal", 13.04 "Precise Pangolin" und 14.04 "Trusty Tahr" LTS Alpha</para>
</listitem>
<listitem>
- <para>openSUSE 12.1 und 12.2</para>
+ <para>openSUSE 12.2, 12.3 und 13.1</para>
</listitem>
<listitem>
</listitem>
<listitem>
- <para>Fedora 16 und 17</para>
+ <para>Fedora 16 bis 19</para>
</listitem>
</itemizedlist>
</sect2>
<title>Benötigte Perl-Pakete installieren</title>
<para>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
- Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.2)
+ Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.4)
benötigt.</para>
<para>Zusätzlich benötigt kivitendo einige Perl-Pakete, die nicht Bestandteil einer Standard-Perl-Installation sind. Um zu
<listitem><para><literal>FCGI</literal> (nicht Versionen 0.68 bis 0.71 inklusive; siehe <xref linkend="Apache-Konfiguration.FCGI.WebserverUndPlugin"/>)</para></listitem>
+ <listitem><para><literal>File::Copy::Recursive</literal></para></listitem>
+
<listitem><para><literal>JSON</literal></para></listitem>
<listitem><para><literal>List::MoreUtils</literal></para></listitem>
<listitem><para><literal>Rose::DB</literal></para></listitem>
- <listitem><para><literal>Rose::DB::Object</literal></para></listitem>
+ <listitem><para><literal>Rose::DB::Object</literal> Version 0.788 oder neuer</para></listitem>
<listitem><para><literal>Template</literal></para></listitem>
<listitem><para><literal>YAML</literal></para></listitem>
</itemizedlist>
+ <para>Seit v3.0.0 sind die folgenden Pakete hinzugekommen: <literal>File::Copy::Recursive</literal>.</para>
+
<para>Seit v2.7.0 sind die folgenden Pakete hinzugekommen: <literal>Email::MIME</literal>, <literal>Net::SMTP::SSL</literal>,
<literal>Net::SSLGlue</literal>.</para>
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 \
- postgresql</programlisting>
+ libfile-copy-recursive-perl postgresql</programlisting>
</sect3>
<sect3>
<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-JSON perl-List-MoreUtils perl-Net-SMTP-SSL perl-Net-SSLGlue \
+ 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 \
<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-JSON perl-List-MoreUtils \
+ perl-Email-MIME perl-FastCGI perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils \
perl-Net-SMTP-SSL perl-Net-SSLGlue perl-PDF-API2 perl-Params-Validate \
perl-Sort-Naturally perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
perl-URI perl-XML-Writer perl-YAML postgresql-server</programlisting>
<sect1 id="Manuelle-Installation-des-Programmpaketes"
xreflabel="Manuelle Installation des Programmpaketes">
<title>Manuelle Installation des Programmpaketes</title>
-
- <para>Die kivitendo ERP Installationsdatei (<filename>kivitendo-erp-3.0.0.tgz</filename>) wird im Dokumentenverzeichnis des Webservers
+ <para>Der aktuelle Stable-Release, bzw. beta Release wird bei github gehostet und kann
+ <ulink url="https://github.com/kivitendo/kivitendo-erp/releases">hier</ulink> heruntergeladen werden.</para>
+ <para>Die kivitendo ERP Installationsdatei (<filename>kivitendo-erp-3.1.0.tgz</filename>) wird im Dokumentenverzeichnis des Webservers
(z.B. <filename>/var/www/html/</filename>, <filename>/srv/www/htdocs</filename> oder <filename>/var/www/</filename>) entpackt:</para>
<programlisting>cd /var/www
-tar xvzf kivitendo-erp-3.0.0.tgz</programlisting>
+tar xvzf kivitendo-erp-3.1.0.tgz</programlisting>
<para>Wechseln Sie in das entpackte Verzeichnis:</para>
Webserverkonfiguration benutzen, um auf das tatsächliche
Installationsverzeichnis zu verweisen.</para>
+ <para>Bei einer Neuinstallation der Version 3.1.0 muß das WebDAV Verzeichnis derzeit manuell angelegt werden:</para>
+
+ <programlisting>mkdir webdav</programlisting>
+
<para>Die Verzeichnisse <filename>users</filename>, <filename>spool</filename> und <filename>webdav</filename> müssen für den Benutzer
beschreibbar sein, unter dem der Webserver läuft. Die restlichen Dateien müssen für diesen Benutzer lesbar sein. Die Benutzer- und
Gruppennamen sind bei verschiedenen Distributionen unterschiedlich (z.B. bei Debian/Ubuntu <constant>www-data</constant>, bei Fedora
<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>
<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>
port = 5432
db = kivitendo_auth
user = postgres
-password =
-
-[system]
-dbcharset = UTF-8</programlisting>
+password =</programlisting>
<para>Nutzt man wiederkehrende Rechnungen, kann man unter
<varname>[periodic_invoices]</varname> den Login eines Benutzers
angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail
mit Informationen über die erstellten Rechnungen bekommt.</para>
- <para>Nutzt man den <link
- linkend="config.task-server">Taskserver</link> für <link
- linkend="features.periodic-invoices">wiederkehrende Rechnungen</link>,
- muss unter <varname>[task_server]</varname> ein Login eines Benutzers
- angegeben werden, mit dem sich der Taskserver an kivitendo bei der
- Datenbank anmeldet, die dem Benutzer zugewiesen ist.</para>
+ <para>kivitendo bringt eine eigene Komponente zur zeitgesteuerten Ausführung bestimmter Aufgaben mit, den <link
+ linkend="config.task-server">Taskserver</link>. Er wird u.a. für Features wie die <link
+ linkend="features.periodic-invoices">wiederkehrenden Rechnungen</link> benötigt, erledigt aber auch andere erforderliche Aufgaben
+ und muss daher in Betrieb genommen werden. Der Taskserver benötigt zwei Konfigurationseinstellungen, die unter
+ <varname>[task_server]</varname> anzugeben sind: ein Mandant (entweder der Mandantenname oder eine Datenbank-ID, Variable
+ <varname>client</varname>), aus dem die Datenbankkonfiguration entnommen wird, sowie ein Login (Variable <varname>login</varname>)
+ eines Benutzers, der für gewisse Dinge wie die Rechnungserstellung als Verkäufer eingetragen wird.</para>
<para>Für Entwickler finden sich unter <varname>[debug]</varname>
wichtige Funktionen, um die Fehlersuche zu erleichtern.</para>
<para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para>
<sect2 id="Zeichensätze-die-Verwendung-von-UTF-8">
- <title>Zeichensätze/die Verwendung von UTF-8</title>
+ <title>Zeichensätze/die Verwendung von Unicode/UTF-8</title>
- <para>Bei aktuellen Serverinstallationen braucht man hier meist nicht
- eingreifen</para>
+ <para>kivitendo setzt zwingend voraus, dass die Datenbank Unicode/UTF-8 als Encoding einsetzt. Bei aktuellen Serverinstallationen
+ braucht man hier meist nicht einzugreifen.</para>
- <para>Dieses kann überprüft werden: ist das Encoding der Datenbank
- “template1” “UTF8”, so braucht man nichts weiteres diesbezüglich
- unternehmen. Zum Testen:
+ <para>Das Encoding des Datenbankservers kann überprüft werden. Ist das Encoding der Datenbank "template1" "Unicode" bzw. "UTF-8", so
+ braucht man nichts weiteres diesbezüglich unternehmen. Zum Testen:</para>
<programlisting>su postgres
echo '\l' | psql
exit </programlisting>
- Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
- UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
- Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl
+ <para>Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
+ Unicode-Encoding anzulegen und diesen zu verwenden. Unter Debian und
+ Ubuntu kann dies z.B. für PostgreSQL 9.3 mit dem folgenden Befehl
getan werden:</para>
- <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername</programlisting>
+ <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 9.3 clustername</programlisting>
<para>Die Datenbankversionsnummer muss an die tatsächlich verwendete
Versionsnummer angepasst werden.</para>
<para>Unter anderen Distributionen gibt es ähnliche Methoden.</para>
- <para>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
- ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
- kivitendo mit ISO-8859-15 als Encoding betrieben werden.</para>
-
<para>Das Encoding einer Datenbank kann in <command>psql</command> mit
<literal>\l</literal> geprüft werden.</para>
</sect2>
<para>In der Datei <filename>pg_hba.conf</filename>, die im gleichen
Verzeichnis wie die <filename>postgresql.conf</filename> zu finden
sein sollte, müssen die Berichtigungen für den Zugriff geändert
- werden. Hier gibt es mehrere Möglichkeiten. sinnvoll ist es nur die
+ werden. Hier gibt es mehrere Möglichkeiten. Sinnvoll ist es nur die
nögiten Verbindungen immer zuzulassen, für eine lokal laufenden
Datenbank zum Beispiel:</para>
wird:</para>
<programlisting>AddHandler cgi-script .pl
-Alias /kivitendo-erp/ /var/www/kiviteno-erp/
+Alias /kivitendo-erp/ /var/www/kivitendo-erp/
<Directory /var/www/kivitendo-erp>
Options ExecCGI Includes FollowSymlinks
</listitem>
<listitem>
- <para>Apache 2.2.11 (Ubuntu) und mod_fastcgi.</para>
+ <para>Apache 2.2.11 / 2.2.22 (Ubuntu) und mod_fastcgi.</para>
</listitem>
</itemizedlist>
Deny from All
</DirectoryMatch></programlisting>
- <para>Seit mod_fcgid-Version 2.6.3 gelten sehr kleine Grenzen für
+ <para>Seit mod_fcgid-Version 2.3.6 gelten sehr kleine Grenzen für
die maximale Größe eines Requests. Diese sollte wie folgt
hochgesetzt werden:</para>
<sect1 id="config.task-server">
<title>Der Task-Server</title>
- <para>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
- regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
- festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
- wird bisher nur für die Erzeugung der wiederkehrenden Rechnungen
- benutzt, wird aber in Zukunft deutlich mehr Aufgaben übertragen
- bekommen.</para>
+ <para>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und
+ diese zu festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess wird u.a. für die Erzeugung der wiederkehrenden
+ Rechnungen und weitere essenzielle Aufgaben benutzt.</para>
<sect2 id="Konfiguration-des-Task-Servers">
<title>Verfügbare und notwendige Konfigurationsoptionen</title>
Optionen sind:</para>
<variablelist>
+ <varlistentry>
+ <term><varname>client</varname></term>
+
+ <listitem>
+ <para>Name oder Datenbank-ID eines vorhandenen kivitendo-Mandanten, der benutzt wird, um die zu verwendende
+ Datenbankverbindung auszulesen. Der Mandant muss in der Administration angelegt werden. Diese Option muss angegeben
+ werden.</para>
+
+ <para>Diese Option kam mit Release v3.x.0 hinzu und muss daher in Konfigurationen, die von älteren Versionen aktualisiert
+ wurden, ergänzt werden.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>login</varname></term>
<listitem>
- <para>gültiger kivitendo-Benutzername, der benutzt wird, um die
- zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss
- in der Administration angelegt werden. Diese Option muss
- angegeben werden.</para>
+ <para>gültiger kivitendo-Benutzername, der z.B. als Verkäufer beim Erzeugen wiederkehrender Rechnungen benötigt wird. Der
+ Benutzer muss in der Administration angelegt werden. Diese Option muss angegeben werden.</para>
</listitem>
</varlistentry>
<sect2 id="Prozesskontrolle2">
<title>Task-Server mit mehreren Mandanten</title>
- <para>Beim Task-Server wird der Login-Name des Benutzers, unter dem der
- Task-Server laufen soll, in die Konfigurationsdatei geschrieben. Hat
- man mehrere Mandanten muß man auch mehrere Konfigurationsdateien
- anlegen.</para>
+ <para>Beim Task-Server werden der zu verwendende Mandant und Login-Name des Benutzers, unter dem der Task-Server laufen soll, in die
+ Konfigurationsdatei geschrieben. Hat man mehrere Mandanten, muss man auch mehrere Konfigurationsdateien anlegen.</para>
- <para>Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf,
- wo in der Kategorie [task_server] der gewünschte "login" steht.</para>
+ <para>Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf, wo in der Kategorie <varname>[task_server]</varname> die
+ gewünschten Werte für <varname>client</varname> und <varname>login</varname> eingetragen werden.</para>
<para>Der alternative Task-Server wird dann mit folgendem Befehl
gestartet:</para>
der folgenden URL erreichbar sein sollte:</para>
<para><ulink
- url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
+ url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
</sect2>
</sect1>
<sect1 id="Benutzer--und-Gruppenverwaltung">
- <title>Benutzer- und Gruppenverwaltung</title>
+ <title>Mandanten-, Benutzer- und Gruppenverwaltung</title>
- <para>Nach der Installation müssen Benutzer, Gruppen und Datenbanken
- angelegt werden. Dieses geschieht im Administrationsmenü, das Sie unter
- folgender URL finden:</para>
+ <para>Nach der Installation müssen Mandanten, Benutzer, Gruppen und Datenbanken angelegt werden. Dieses geschieht im
+ Administrationsmenü, das Sie unter folgender URL finden:</para>
<para><ulink
- url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
+ url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
<para>Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
<filename>config/kivitendo.conf</filename> eingetragen haben.</para>
<sect2 id="Zusammenhänge">
<title>Zusammenhänge</title>
- <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>
-
- <para>Die Basisdaten der Benutzer, die in der Administration
- eingegeben werden können, werden in einer zweiten Datenbank
- gespeichert, der bereits erwähnten Authentifizierungsdatenbank. Diese
- ist also den Produktivdaten enthaltenden Datenbanken vorgeschaltet.
- Pro kivitendo-Installation gibt es nur eine
- Authentifizierungsdatenbank, aber beliebig viele Datenbanken mit
- Firmendaten.</para>
-
- <para>kivitendo kann seinen Benutzern Zugriff auf bestimmte
- Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
- gestattet, so werden der entsprechenden Menüpunkte auch nicht
- angezeigt. Diese Rechte werden ebenfalls in der
- Authentifizierungsdatenbank gespeichert.</para>
-
- <para>Um Rechte verteilen zu können, verwendet kivitendo ein
- Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
- erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
- mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
- Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
- Benutzer Mitglied ist.</para>
-
- <para>Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und
- Benutzer angelegt werden sollten, lautet:</para>
+ <para>kivitendo verwaltet zwei Sets von Daten, die je nach Einrichtung in einer oder zwei Datenbanken gespeichert werden.</para>
+
+ <para>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
+ <filename>config/kivitendo.conf</filename> gespeichert werden.</para>
+
+ <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>
+
+ <para>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.</para>
+ </sect2>
+
+ <sect2 id="Mandanten-Benutzer-Gruppen">
+ <title>Mandanten, Benutzer und Gruppen</title>
+
+ <para>kivitendos Administration kennt Mandanten, Benutzer und Gruppen, die sich frei zueinander zuordnen lassen.</para>
+
+ <para>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 <link
+ linkend="Datenbanken-anlegen">Datenbankverwaltung</link> geschehen.</para>
+
+ <para>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
+ wird.</para>
+
+ <para>Gruppen dienen dazu, Benutzern innerhalb eines Mandanten Zugriff auf bestimmte Funktionen zu geben. Einer Gruppe werden dafür
+ vom Administrator gewisse Rechte zugeordnet. Weiterhin legt der Administrator fest, für welche Mandanten eine Gruppe gilt, und
+ welche Benutzer Mitglieder in dieser Gruppe sind. Meldet sich ein Benutzer dann an einem Mandanten an, so erhält er alle Rechte von
+ allen denjenigen Gruppen, die zum Einen dem Mandanten zugeordnet sind und in denen der Benutzer zum Anderen Mitglied ist, </para>
+
+ <para>Die Reihenfolge, in der Datenbanken, Mandanten, Gruppen und Benutzer angelegt werden, kann im Prinzip beliebig gewählt
+ werden. Die folgende Reihenfolge beinhaltet die wenigsten Arbeitsschritte:</para>
<orderedlist numeration="arabic">
<listitem>
</listitem>
<listitem>
- <para>Benutzer anlegen</para>
+ <para>Benutzer anlegen und Gruppen als Mitglied zuordnen</para>
</listitem>
<listitem>
- <para>Benutzer den Gruppen zuordnen</para>
+ <para>Mandanten anlegen und Gruppen sowie Benutzer zuweisen</para>
</listitem>
</orderedlist>
</sect2>
<para>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
Beispielen ist dies ‘<literal>kivitendo</literal>’).</para>
-
- <para>Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen
- wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei <filename>config/kivitendo.conf</filename> die Variable
- <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf den Wert ‘<literal>ISO-8859-15</literal>’ setzen.</para>
-
- <para>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
- verwenden müssen, da diese Einstellungen momentan global in kivitendo
- vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
- Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
- angelegt worden sein.</para>
</sect2>
<sect2 id="Gruppen-anlegen">
Anlegen können Sie die verschiedenen Bereiche wählen, auf die
Mitglieder dieser Gruppe Zugriff haben sollen.</para>
- <para>Benutzergruppen sind unabhängig von Datenbanken, da sie in der
- Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
- Datenbanken, die in dieser Installation verwaltet werden.</para>
+ <para>Benutzergruppen werden zwar in der Authentifizierungsdatenbank gespeichert, gelten aber nicht automatisch für alle
+ Mandanten. Der Administrator legt vielmehr fest, für welche Mandanten eine Gruppe gültig ist. Dies kann entweder beim Bearbeiten der
+ Gruppe geschehen ("diese Gruppe ist gültig für Mandanten X, Y und Z"), oder aber wenn man einen Mandanten bearbeitet ("für diesen
+ Mandanten sind die Gruppen A, B und C gültig").</para>
+
+ <para>Wurden bereits Benutzer angelegt, so können hier die Mitglieder dieser Gruppe festgelegt werden ("in dieser Gruppe sind die
+ Benutzer X, Y und Z Mitglieder"). Dies kann auch nachträglich beim Bearbeiten eines Benutzers geschehen ("dieser Benutzer ist
+ Mitglied in den Gruppen A, B und C").</para>
</sect2>
<sect2 id="Benutzer-anlegen">
<title>Benutzer anlegen</title>
- <para>Beim Anlegen von Benutzern werden für viele Parameter
- Standardeinstellungen vorgenommen, die den Gepflogenheiten des
- deutschen Raumes entsprechen.</para>
+ <para>Beim Anlegen von Benutzern werden für viele Parameter Standardeinstellungen vorgenommen, die den Gepflogenheiten des deutschen
+ Raumes entsprechen.</para>
- <para>Zwingend anzugeben sind der Loginname sowie die komplette
- Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
- Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
- gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
- aktiv, so ist das Passwort-Feld deaktiviert.</para>
+ <para>Zwingend anzugeben ist der Loginname. Wenn die Passwortauthentifizierung über die Datenbank eingestellt ist, so kann hier auch
+ das Benutzerpasswort gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung aktiv, so ist das Passwort-Feld
+ deaktiviert.</para>
- <para>In der Datenbankkonfiguration müssen die Zugriffsdaten einer der
- eben angelegten Datenbanken eingetragen werden.</para>
+ <para>Hat man bereits Mandanten und Gruppen angelegt, so kann hier auch konfiguriert werden, auf welche Mandanten der Benutzer
+ Zugriff hat bzw. in welchen Gruppen er Mitglied ist. Beide Zuweisungen können sowohl beim Benutzer vorgenommen werden ("dieser
+ Benutzer hat Zugriff auf Mandanten X, Y, Z" bzw. "dieser Benutzer ist Mitglied in Gruppen X, Y und Z") als auch beim Mandanten ("auf
+ diesen Mandanten haben Benutzer A, B und C Zugriff") bzw. bei der Gruppe ("in dieser Gruppe sind Benutzer A, B und C
+ Mitglieder").</para>
</sect2>
- <sect2 id="Gruppenmitgliedschaften-verwalten">
- <title>Gruppenmitgliedschaften verwalten</title>
-
- <para>Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den
- Gruppen zugewiesen werden. Dazu gibt es zwei Möglichkeiten:</para>
-
- <orderedlist numeration="arabic">
- <listitem>
- <para>In der Gruppenverwaltung wählt man eine Gruppe aus. Im
- folgenden Dialog kann man dann einzeln die Benutzer der Gruppe
- hinzufügen.</para>
- </listitem>
+ <sect2 id="Mandanten-anlegen">
+ <title>Mandanten anlegen</title>
- <listitem>
- <para>In der Gruppenverwaltung wählt man das Tool zur Verwaltung
- der Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die
- alle im System angelegten Gruppen und Benutzer enthält. Durch
- Setzen der Häkchen wird der Benutzer in der ausgewählten Zeile der
- Gruppe in der ausgewählten Spalte hinzugefügt.</para>
- </listitem>
- </orderedlist>
- </sect2>
+ <para>Ein Mandant besteht aus Administrationssicht primär aus einem eindeutigen Namen. Weiterhin wird hier hinterlegt, welche
+ Datenbank als Mandantendatenbank benutzt wird. Hier müssen die Zugriffsdaten einer der eben angelegten Datenbanken eingetragen
+ werden.</para>
- <sect2 id="Migration-alter-Installationen">
- <title>Migration alter Installationen</title>
-
- <para>Wenn kivitendo 2.6.3 über eine ältere Version installiert wird,
- in der die Benutzerdaten noch im Dateisystem im Verzeichnis
- <literal>users</literal> verwaltet wurden, so bietet kivitendo die
- Möglichkeit, diese Benutzerdaten automatisch in die
- Authentifizierungsdatenbank zu übernehmen. Dies geschieht, wenn man
- sich nach dem Update der Installation das erste Mal im
- Administrationsbereich anmeldet. Findet kivitendo die Datei
- <literal>users/members</literal>, so wird der Migrationsprozess
- gestartet.</para>
-
- <para>Der Migrationsprozess ist nahezu vollautomatisch. Alle
- Benutzerdaten können übernommen werden. Nach den Benutzerdaten bietet
- kivitendo noch die Möglichkeit an, dass automatisch eine
- Benutzergruppe angelegt wird. Dieser Gruppe wird Zugriff auf alle
- Funktionen von kivitendo gewährt. Alle migrierten Benutzern werden
- Mitglied in dieser Gruppe. Damit wird das Verhalten von kivitendo bis
- Version 2.4.3 inklusive wiederhergestellt, und die Benutzer können
- sich sofort wieder anmelden und mit dem System arbeiten.</para>
+ <para>Hat man bereits Benutzer und Gruppen angelegt, so kann hier auch konfiguriert werden, welche Benutzer Zugriff auf den
+ Mandanten haben bzw. welche Gruppen für den Mandanten gültig sind. Beide Zuweisungen können sowohl beim Mandanten vorgenommen werden
+ ("auf diesen Mandanten haben Benutzer X, Y und Z Zugriff" bzw. "für diesen Mandanten sind die Gruppen X, Y und Z gültig") als auch
+ beim Benutzer ("dieser Benutzer hat Zugriff auf Mandanten A, B und C") bzw. bei der Gruppe ("diese Gruppe ist für Mandanten A, B und
+ C gültig").</para>
</sect2>
</sect1>
+ <sect1 id="Drucker--Systemverwaltung">
+ <title>Drucker- und Systemverwaltung</title>
+ <para>Im Administrationsmenü gibt es ferner noch die beiden Menüpunkte Druckeradministration und System.</para>
+ <sect2 id="Druckeradministration">
+ <title>Druckeradministration</title>
+ <para>Unter dem Menüpunkt Druckeradministration lassen sich beliebig viele "Druckbefehle" im System verwalten. Diese Befehle werden mandantenweise
+ zugeordnet. Unter Druckerbeschreibung wird der Namen des Druckbefehls festgelegt, der dann in der Druckerauswahl des Belegs angezeigt wird.</para>
+ <para>Unter Druckbefehl definiert man den eigentlichen Druckbefehl, der direkt auf dem Webserver ausgeführt wird, bspw. 'lpr -P meinDrucker' oder ein
+ kompletter Pfad zu einem Skript (/usr/local/src/kivitendo/scripts/pdf_druck_in_verzeichnis.sh).
+ Wird ferner noch ein optionales Vorlagenkürzel verwendet, wird dieses Kürzel bei der Auswahl der Druckvorlagendatei mit einem Unterstrich ergänzt, ist
+ bspw. das Kürzel 'epson_drucker' definiert, so wird beim Ausdruck eines Angebots folgende Vorlage geparst: sales_quotation_epson_drucker.tex.</para>
+ </sect2>
+ <sect2 id="System">
+ <title>System sperren / entsperren</title>
+
+ <para>Unter dem Menüpunkt System gibt es den Eintrag 'Installation sperren/entsperren'. Setz man diese Sperre so ist der Zugang zu der gesamten kivitendo Installation gesperrt.</para>
+ <para>Falls die Sperre gesetzt ist, erscheint anstelle der Anmeldemaske die Information: 'kivitendo ist momentan zwecks Wartungsarbeiten nicht zugänglich.'.
+ </para>
+ <para>Wichtig zu erwähnen ist hierbei noch, dass sich kivitendo automatisch 'sperrt', falls es bei einem Versionsupdate zu einem Datenbankfehler kam. Somit kann hier nicht aus Versehen
+ mit einem inkonsistenten Datenbestand weitergearbeitet werden.</para>
+ </sect2>
+ </sect1>
<sect1 id="config.sending-email" xreflabel="E-Mail-Versand aus kivitendo heraus">
<title>E-Mail-Versand aus kivitendo heraus</title>
<sect2 id="Vorlagenverzeichnis-anlegen" xreflabel="Vorlagenverzeichnis anlegen">
<title>Vorlagenverzeichnis anlegen</title>
- <para>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 <guimenu>Benutzerverwaltung</guimenu> auf.</para>
+ <para>Es lässt sich ein initialer Vorlagensatz erstellen. Die LaTeX-System-Abhängigkeiten hierfür kann man prüfen mit:</para>
+
+ <programlisting>./scripts/installation_check.pl -lv</programlisting>
- <para>Wählen Sie dort einen Benutzer aus oder legen Sie einen neuen an. In der Benutzerbearbeiten-Maske müssen Sie zwei Dinge
- angeben:</para>
+ <para>Der Angemmeldete Benutzer muss in einer Gruppe sein, die über das
+ Recht "Konfiguration -> Mandantenverwaltung" verfügt. Siehe auch <xref linkend="Gruppen-anlegen"/>.
+ </para>
+ <para>Im Userbereich lässt sich unter:
+ "<guimenu>System</guimenu> ->
+ <guisubmenu>Mandantenverwaltung</guisubmenu> -> <guimenuitem>Verschiedenes</guimenuitem>" die Option
+ "Neue Druckvorlagen aus Vorlagensatz erstellen" auswählen.</para>
<orderedlist>
- <listitem><para><option>Name</option>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
- Bedingungen für Verzeichnisnamen frei gewählt werden.</para></listitem>
<listitem><para><option>Vorlagen auswählen</option>: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll
(<filename>Standard</filename>, <filename>f-tex</filename> oder <filename>RB</filename>.)</para></listitem>
+ <listitem><para><option>Neuer Name</option>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
+ Bedingungen für Verzeichnisnamen frei gewählt werden.</para></listitem>
</orderedlist>
- <para>Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</para>
+ <para>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
+ <filename>./templates/[Neuer Name]</filename></para>
- <para>Die Abhängigkeiten kann man prüfen mit:</para>
-
- <programlisting>/scripts/installation_check.pl -l</programlisting>
</sect2>
<sect2 id="Vorlagen-Standard">
</sect2>
<sect2 id="Vorlagen-RB">
- <title>RB</title>
+ <title>Der Druckvorlagensatz RB</title>
- <para>Vollständiger Dokumentensatz mit alternativem Design</para>
+ <para>Hierbei handelt es sich um einen vollständigen Dokumentensatz mit alternativem Design.</para>
+ <para>Die konzeptionelle Idee der Vorlagen 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. Informationen zur Anpassung an die eigenen Firmendaten finden sich in der Datei Readme.tex im Vorlagenverzeichnis.</para>
</sect2>
<para>Wenn sich das Problem nicht auf Grund der ausgabe im Webbrowser verifizieren lässt:</para>
<itemizedlist>
<listitem>
- <para> editiere [kivitendo-home]/config/kivitendo.conf und ändere "keep_tmp_files" auf 1</para>
+ <para> editiere [kivitendo-home]/config/kivitendo.conf und ändere "keep_temp_files" auf 1</para>
<para><programlisting>keep_temp_files = 1;</programlisting></para>
</listitem>
<listitem>
<literal>print_templates</literal> auf ‘<literal>1</literal>’ stehen.
Dieses ist die Standardeinstellung.</para>
- <para>Weiterhin muss in der Datei
- <filename>config/kivitendo.conf</filename> die Variable
- <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf
- die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
- Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
- "UTF-8".</para>
-
<para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
</screenshot>
</sect2>
</sect1>
-
+ <sect1 id="bilanz">
+ <title>Verhalten des Bilanzberichts</title>
+ <para>
+ Bis Version 3.0 wurde "closedto" ("Bücher schließen zum") als Grundlage für das
+ Startdatum benutzt. Schließt man die Bücher allerdings monatsweise führt dies
+ zu falschen Werten.</para>
+ <para>In der Mandantenkonfiguration kann man dieses Verhalten genau einstellen indem man:</para>
+ <itemizedlist>
+ <listitem>
+ <para>weiterhin closed_to benutzt (Default, es ändert sich nichts zu vorher)</para>
+ </listitem>
+ <listitem>
+ <para>immer den Jahresanfang nimmt (1.1. relativ zum Stichtag)</para>
+ </listitem>
+ <listitem>
+ <para>immer die letzte Eröffnungsbuchung als Startdatum nimmt</para>
+ <para>- mit Jahresanfang als Alternative wenn es keine EB-Buchungen gibt</para>
+ <para>- oder mit "alle Buchungen" als Alternative"</para>
+ </listitem>
+ <listitem>
+ <para>mit Jahresanfang als Alternative wenn es keine EB-Buchungen gibt </para>
+ </listitem>
+ <listitem>
+ <para>immer alle Buchungen seit Beginn der Datenbank nimmt</para>
+ </listitem>
+ </itemizedlist>
+ Folgende Hinweise zu den Optionen:
+ Das "Bücher schließen Datum" ist sinnvoll, wenn man nur komplette Jahre
+ schließt. Bei Wirtschaftsjahr = Kalendarjahr entspricht dies aber auch
+ Jahresanfang.
+ "Alle Buchungen" kann z.B. sinnvoll sein wenn man ohne Jahresabschluß
+ durchbucht.
+ Eröffnungsbuchung mit "alle Buchungen" als Fallback ist z.B. sinnvoll, wenn man
+ am sich Anfang des zweiten Buchungsjahres befindet, und noch keinen
+ Jahreswechsel und auch noch keine EB-Buchungen hat.
+ Bei den Optionen mit EB-Buchungen wird vorausgesetzt, daß diese immer am 1. Tag
+ des Wirtschaftsjahres gebucht werden.
+ Zur Sicherheit wird das Startdatum im Bilanzbericht jetzt zusätzlich zum
+ Stichtag mit angezeigt. Das hilft auch bei der Kontrolle für den
+ Abgleich mit der GuV.
+ </sect1>
<sect1 id="config.client">
<title>Einstellungen pro Mandant</title>
<para>Die Administrationsseite erreichen Sie unter:</para>
<para><ulink
- url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
+ url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
</sect1>
</chapter>
<varname>[periodic_invoices]</varname>.</para>
</sect2>
+ <sect2 id="features.periodic-invoices.variables">
+ <title>Spezielle Variablen</title>
+
+ <para>
+ Um die erzeugten Rechnungen individualisieren zu können, werden beim Umwandeln des Auftrags in eine Rechnung einige speziell
+ formatierte Variablen durch für die jeweils aktuelle Abrechnungsperiode gültigen Werte ersetzt. Damit ist es möglich, z.B. den
+ Abrechnungszeitraum explizit auszuweisen. Eine Variable hat dabei die Syntax <literal><%variablenname%></literal>.
+ </para>
+
+ <para>
+ Sofern es sich um eine Datumsvariable handelt, kann das Ausgabeformat weiter bestimmt werden, indem an den Variablennamen
+ Formatoptionen angehängt werden. Die Syntax sieht dabei wie folgt aus: <literal><%variablenname
+ FORMAT=Formatinformation%></literal>. Die zur verfügung stehenden Formatinformationen werden unten genauer beschrieben.
+ </para>
+
+ <para>
+ Diese Variablen werden in den folgenden Elementen des Auftrags ersetzt:
+ </para>
+
+ <itemizedlist>
+ <listitem><para>Bemerkungen</para></listitem>
+ <listitem><para>Interne Bemerkungen</para></listitem>
+ <listitem><para>Vorgangsbezeichnung</para></listitem>
+ <listitem><para>In den Beschreibungs- und Langtextfeldern aller Positionen</para></listitem>
+ </itemizedlist>
+
+ <para>Die zur Verfügung stehenden Variablen sind die Folgenden:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><varname><%current_quarter%></varname>, <varname><%previous_quarter%></varname>, <varname><%next_quarter%></varname></term>
+
+ <listitem>
+ <para>
+ Aktuelles, vorheriges und nächstes Quartal als Zahl zwischen <literal>1</literal> und <literal>4</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname><%current_month%></varname>, <varname><%previous_month%></varname>, <varname><%next_month%></varname></term>
+
+ <listitem>
+ <para>
+ Aktueller, vorheriger und nächster Monat als Zahl zwischen <literal>1</literal> und <literal>12</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname><%current_month_long%></varname>, <varname><%previous_month_long%></varname>, <varname><%next_month_long%></varname></term>
+
+ <listitem>
+ <para>
+ Aktueller, vorheriger und nächster Monat als Name (<literal>Januar</literal>, <literal>Februar</literal> etc.).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname><%current_year%></varname>, <varname><%previous_year%></varname>, <varname><%next_year%></varname></term>
+
+ <listitem>
+ <para>
+ Aktuelles, vorheriges und nächstes Jahr als vierstellige Jahreszahl (<literal>2013</literal> etc.).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname><%period_start_date%></varname>, <varname><%period_end_date%></varname></term>
+
+ <listitem>
+ <para>
+ Formatiertes Datum des ersten und letzten Tages im Abrechnungszeitraum (z.B. bei quartalsweiser Abrechnung und im ersten
+ Quartal von 2013 wären dies der <literal>01.01.2013</literal> und <literal>31.03.2013</literal>).
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ Die invidiuellen Formatinformationen bestehen aus Paaren von Prozentzeichen und einem Buchstaben, welche beide zusammen durch den
+ dazugehörigen Wert ersetzt werden. So wird z.B. <literal>%Y</literal> durch das viertstellige Jahr ersetzt. Alle möglichen
+ Platzhalter sind:
+ </para>
+
+
+ <variablelist>
+ <varlistentry>
+ <term><varname>%a</varname></term>
+
+ <listitem>
+ <para>Der abgekürzte Wochentagsname.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%A</varname></term>
+
+ <listitem>
+ <para>Der ausgeschriebene Wochentagsname.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%b</varname></term>
+
+ <listitem>
+ <para>Der abgekürzte Monatsname.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%B</varname></term>
+
+ <listitem>
+ <para>Der ausgeschriebene Monatsname.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%C</varname></term>
+
+ <listitem>
+ <para>Das Jahrhundert (Jahr/100) als eine zweistellige Zahl.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%d</varname></term>
+
+ <listitem>
+ <para>Der Monatstag als Zahl zwischen 01 und 31.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%D</varname></term>
+
+ <listitem>
+ <para>Entspricht %m/%d/%y (amerikanisches Datumsformat).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%e</varname></term>
+
+ <listitem>
+ <para>Wie %d (Monatstag als Zahl zwischen 1 und 31), allerdings werden führende Nullen durch Leerzeichen ersetzt.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%F</varname></term>
+
+ <listitem>
+ <para>Entspricht %Y-%m-%d (das ISO-8601-Datumsformat).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%j</varname></term>
+
+ <listitem>
+ <para>Der Tag im Jahr als Zahl zwischen 001 und 366 inklusive.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%m</varname></term>
+
+ <listitem>
+ <para>Der Monat als Zahl zwischen 01 und 12 inklusive.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%u</varname></term>
+
+ <listitem>
+ <para>Der Wochentag als Zahl zwischen 1 und 7 inklusive, wobei die 1 dem Montag entspricht.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%U</varname></term>
+
+ <listitem>
+ <para>Die Wochennummer als Zahl zwischen 00 und 53 inklusive, wobei der erste Sonntag im Jahr das Startdatum von Woche 01 ist.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%V</varname></term>
+
+ <listitem>
+ <para>Die ISO-8601:1988-Wochennummer als Zahl zwischen 01 und 53 inklusive, wobei Woche 01 die erste Woche, von der mindestens vier Tage im Jahr liegen; Montag ist erster Tag der Woche.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%w</varname></term>
+
+ <listitem>
+ <para>Der Wochentag als Zahl zwischen 0 und 6 inklusive, wobei die 0 dem Sonntag entspricht.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%W</varname></term>
+
+ <listitem>
+ <para>Die Wochennummer als Zahl zwischen 00 und 53 inklusive, wobei der erste Montag im Jahr das Startdatum von Woche 01 ist.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%y</varname></term>
+
+ <listitem>
+ <para>Das Jahr als zweistellige Zahl zwischen 00 und 99 inklusive.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%Y</varname></term>
+
+ <listitem>
+ <para>Das Jahr als vierstellige Zahl.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>%%</varname></term>
+
+ <listitem>
+ <para>Das Prozentzeichen selber.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ Anwendungsbeispiel für die Ausgabe, von welchem Monat und Jahr bis zu welchem Monat und Jahr die aktuelle Abrechnungsperiode
+ dauert: <literal>Abrechnungszeitrum: <%period_start_date FORMAT=%m/%Y%> bis <%period_end_date FORMAT=%m/%Y%></literal>
+ </para>
+ </sect2>
+
<sect2 id="features.periodic-invoices.reports">
<title>Auflisten</title>
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">
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>c_vendor_id</varname></term>
+
+ <listitem>
+ <para>Lieferantennummer beim Kunden (nur Kunden)</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>v_customer_id</varname></term>
+
+ <listitem>
+ <para>Kundennummer beim Lieferanten (nur Lieferanten)</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>cp_email</varname></term>
</sect3>
<sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
- <title>Informationen über den Bearbeiter</title>
+ <title>Informationen über den Verkäufer</title>
<variablelist>
<varlistentry>
</varlistentry>
</variablelist>
</sect3>
+
+ <sect3 id="dokumentenvorlagen-und-variablen.allgemein-lieferbedingungen">
+ <title>Variablen für Lieferbedingungen</title>
+
+ <variablelist>
+ <varlistentry>
+ <term><varname>delivery_term</varname></term>
+ <listitem><para>Datenbank-Objekt der Lieferbedingung</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>delivery_term.description</varname></term>
+ <listitem><para>Beschreibung der Lieferbedingung</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>delivery_term.long_description</varname></term>
+ <listitem><para>Langtext bzw. übersetzter Langtext der Lieferbedingung</para></listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
</sect2>
<sect2 id="dokumentenvorlagen-und-variablen.invoice">
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>donumber_do</varname></term>
+
+ <listitem>
+ <para>Lieferscheinnummer desjenigen Lieferscheins, aus dem die Position stammt, sofern die Rechnung aus einem oder
+ mehreren Lieferscheinen erstellt wurde</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>p_discount</varname></term>
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>
überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
-> <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
Informationen über den Benutzer die über die
- Administrator-Schnittstelle (admin.pl) eingegeben wurden.</para>
+ Administrator-Schnittstelle eingegeben wurden.</para>
</sect3>
<sect3>
vom aktuellen User abhängen wird das Objekt aus
Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
Request kurz resettet.</para>
+
+ <para>Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über
+ <literal>$::auth->client</literal> abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle
+ <literal>auth.clients</literal>.</para>
</sect3>
<sect3>
verfügbar:</para>
<programlisting>[debug]
-file = /tmp/kivitendo-debug.log</programlisting>
+file_name = /tmp/kivitendo-debug.log</programlisting>
<para>ist der Key <varname>file</varname> im Programm als
<varname>$::lx_office_conf->{debug}{file}</varname>
<para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
den kritischen Pfaden, unter 0,15 sonst.</para>
</sect2>
-
- <sect2 id="devel.fcgi.known-issues">
- <title>Bekannte Probleme</title>
-
- <sect3 id="devel.fcgi.known-issues.encoding">
- <title>Encoding Awareness</title>
-
- <para>UTF-8 kodierte Installationen sind sehr anfällig gegen
- fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
- falsch kodierte Zeichen eher unwissend, und geben sie einfach
- weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
- das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
- beseitigen.</para>
- </sect3>
- </sect2>
</sect1>
<sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
xreflabel="Einführung in die Datenbank-Upgradedateien">
<title>Einführung</title>
- <para>Der alte Mechanismus für SQL-Upgradescripte, der auf einer
- Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
- diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
- Entwicklung im stable- und unstable-Baum betrifft.</para>
-
- <para>Dieser Mechanismus wurde für kivitendo 2.4.1 deutlich erweitert.
- Es werden weiterhin alle Scripte aus sql/Pg-upgrade ausgeführt.
- Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. In
- diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren,
- die neben den eigentlich auszuführenden SQL- oder Perl-Befehlen einige
- Kontrollinformationen enthält.</para>
-
- <para>Neu sind die Kontrollinformationen, die Abhängigkeiten und
- Prioritäten definieren können werden, sodass Datenbankscripte zwar in
- einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER
- TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
- angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man
- keine Versionsnummern mehr braucht.</para>
-
- <para>kivitendo merkt sich dabei, welches der Upgradescripte in
- sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
- erneut aus. Dazu dient die Tabelle "schema_info", die bei der
- Anmeldung automatisch angelegt wird.</para>
+ <para>Datenbankupgrades werden über einzelne Upgrade-Scripte gesteuert, die sich im Verzeichnis <filename>sql/Pg-upgrade2</filename>
+ befinden. In diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren, die neben den eigentlich auszuführenden SQL- oder
+ Perl-Befehlen einige Kontrollinformationen enthält.</para>
+
+ <para>Kontrollinformationen definieren Abhängigkeiten und Prioritäten, sodass Datenbankscripte zwar in einer sicheren Reihenfolge
+ ausgeführt werden (z.B. darf ein <literal>ALTER TABLE</literal> erst ausgeführt werden, wenn die Tabelle mit <literal>CREATE
+ TABLE</literal> angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man keine Versionsnummern braucht.</para>
+
+ <para>kivitendo merkt sich dabei, welches der Upgradescripte in <filename>sql/Pg-upgrade2</filename> bereits durchgeführt wurde und
+ führt diese nicht erneut aus. Dazu dient die Tabelle "<literal>schema_info</literal>", die bei der Anmeldung automatisch angelegt
+ wird.</para>
</sect2>
<sect2 id="db-upgrade-files.format"
<term><varname>charset</varname></term>
<listitem>
- <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script
- geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
- Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei
- Abwesenheit des Tags der Zeichensatz
- "<literal>ISO-8859-15</literal>" angenommen.</para>
+ <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
+ Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei Abwesenheit des Tags für SQL-Upgradedateien der Zeichensatz
+ "<literal>ISO-8859-15</literal>" angenommen. Perl-Upgradescripte hingegen müssen immer in UTF-8 encodiert sein und sollten
+ demnach auch ein "<literal>use utf8;</literal>" enthalten.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
+ <sect2 id="db-upgrade-files.format-perl-files" xreflabel="Format von Perl-Upgradedateien">
+ <title>Format von in Perl geschriebenen Datenbankupgradescripten</title>
+
+ <para>In Perl geschriebene Datenbankscripte werden nicht einfach so ausgeführt sondern müssen sich an gewisse Konventionen
+ halten. Dafür bekommen sie aber auch einige Komfortfunktionen bereitgestellt.</para>
+
+ <para>Ein Upgradescript stellt dabei eine vollständige Objektklasse dar, die vom Elternobjekt
+ "<literal>SL::DBUpgrade2::Base</literal>" erben und eine Funktion namens "<literal>run</literal>" zur Verfügung stellen muss. Das
+ Script wird ausgeführt, indem eine Instanz dieser Klasse erzeugt und darauf die erwähnte "<literal>run</literal>" aufgerufen
+ wird.</para>
+
+ <para>Zu beachten ist, dass sich der Paketname der Datei aus dem Wert für "<literal>@tag</literal>" ableitet. Dabei werden alle
+ Zeichen, die in Paketnamen ungültig wären (gerade Bindestriche), durch Unterstriche ersetzt. Insgesamt sieht der Paketname wie folgt
+ aus: "<literal>SL::DBUpgrade2::tag</literal>".</para>
+
+ <para>Welche Komfortfunktionen zur Verfügung stehen, erfahren Sie in der Perl-Dokumentation zum oben genannten Modul; aufzurufen mit
+ "<command>perldoc SL/DBUpgrade2/Base.pm</command>".</para>
+
+ <para>Ein Mindestgerüst eines gültigen Perl-Upgradescriptes sieht wie folgt aus:</para>
+
+ <programlisting># @tag: beispiel-upgrade-file42
+# @description: Ein schönes Beispielscript
+# @depends: release_3_1_0
+package SL::DBUpgrade2::beispiel_upgrade_file42;
+
+use strict;
+use utf8;
+
+use parent qw(SL::DBUpgrade2::Base);
+
+sub run {
+ my ($self) = @_;
+
+ # hier Aktionen ausführen
+
+ return 1;
+}
+
+1;
+</programlisting>
+ </sect2>
+
<sect2 id="db-upgrade-files.dbupgrade-tool"
xreflabel="Hilfsscript dbupgrade2_tool.pl">
<title>Hilfsscript dbupgrade2_tool.pl</title>
point.</para>
</sect2>
+ <sect2 id="translations-languages.character-set"
+ xreflabel="Character set">
+ <title>Character set</title>
+
+ <para>All files included in a language pack must use UTF-8 as their encoding.</para>
+ </sect2>
+
<sect2 id="translations-languages.file-structure"
xreflabel="File structure">
<title>File structure</title>
</listitem>
</varlistentry>
- <varlistentry>
- <term>charset</term>
-
- <listitem>
- <para>This file should be present.</para>
-
- <para>The <filename>charset</filename> file describes which
- charset a language package is written in and applies to all
- other language files in the package. It is possible to write
- some language packages without an explicit charset, but it is
- still strongly recommended. You'll never know in what
- environment your language package will be used, and neither
- UTF-8 nor Latin1 are guaranteed.</para>
-
- <para>The whole content of this file is a string that can be
- recognized as a valid charset encoding. Example:</para>
-
- <programlisting>UTF-8</programlisting>
- </listitem>
- </varlistentry>
-
<varlistentry>
<term>all</term>
<itemizedlist>
<listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
- <listitem><para>Ein Script (bzw. ein Test) in <filename>f/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
+ <listitem><para>Ein Script (bzw. ein Test) in <filename>t/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
<listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
- <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>f/</filename>, deren
+ <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>t/</filename>, deren
Dateiname auf <literal>.t</literal> endet.</para></listitem>
</itemizedlist>
</sect2>
<itemizedlist>
<listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
<literal>perl-Test-Deep</literal>; openSUSE: <literal>perl-Test-Deep</literal>)</para></listitem>
+ <listitem><para><literal>Test::Exception</literal> (Debian-Paketname: <literal>libtest-exception-perl</literal>; Fedora Core:
+ <literal>perl-Test-Exception</literal>; openSUSE: <literal>perl-Test-Exception</literal>)</para></listitem>
+ <listitem><para><literal>Test::Output</literal> (Debian-Paketname: <literal>libtest-output-perl</literal>; Fedora Core:
+ <literal>perl-Test-Output</literal>; openSUSE: <literal>perl-Test-Output</literal>)</para></listitem>
<listitem><para><literal>Test::Harness</literal> 3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der
Perl-Distribution und kann für frühere Versionen aus dem <ulink url="http://www.cpan.org">CPAN</ulink> bezogen
werden.</para></listitem>
+ <listitem><para><literal>LWP::Simple</literal> aus dem Paket <literal>libwww-perl</literal> (Debian-Panetname:
+ <literal>libwww-perl</literal>; Fedora Core: <literal>perl-libwww-perl</literal>; openSUSE:
+ <literal>perl-libwww-perl</literal>)</para></listitem>
+ <listitem><para><literal>URI::Find</literal> (Debian-Panetname: <literal>liburi-find-perl</literal>; Fedora Core:
+ <literal>perl-URI-Find</literal>; openSUSE: <literal>perl-URI-Find</literal>)</para></listitem>
</itemizedlist>
+
+ <para>Weitere Voraussetzung ist, dass die Testsuite ihre eigene Datenbank anlegen kann, um Produktivdaten nicht zu gefährden. Dazu
+ müssen in der Konfigurationsdatei im Abschnit <literal>testing/database</literal> Datenbankverbindungsparameter angegeben
+ werden. Der hier angegebene Benutzer muss weiterhin das Recht haben, Datenbanken anzulegen und zu löschen.</para>
</sect2>
<sect2 id="devel.testsuite.execution">
</title>
<para>Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt
- gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.sh</filename>.</para>
+ gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.pl</filename>.</para>
- <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.sh</filename> ohne weitere Parameter aus
+ <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.pl</filename> ohne weitere Parameter aus
dem kivitendo-Basisverzeichnis heraus ausführen.</para>
- <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.sh</filename>. Beispielsweise:</para>
+ <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.pl</filename>. Beispielsweise:</para>
- <programlisting>t/test.sh t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
+ <programlisting>t/test.pl t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
</sect2>
Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
</title>
- <para> Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:</para>
+ <para> Ideen, die abgesehen von Funktionen noch nicht umgesetzt wurden:</para>
<itemizedlist>
<listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
<listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
<filename>bad_function_params.t</filename>).</para></listitem>
- <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen
+ <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sein, mit dem sich die Scripte darin befassen
(beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
<listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist