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
<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>
+ 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>
+ </sect2>
+
<sect2 id="features.periodic-invoices.reports">
<title>Auflisten</title>
</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>
<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_0_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>
<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>