Merge branch 'rb-wiederkehrende-rechnungen' into 263
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 19 Jan 2011 10:08:32 +0000 (11:08 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 19 Jan 2011 10:08:32 +0000 (11:08 +0100)
13 files changed:
SL/CVar.pm
SL/IC.pm
SL/IS.pm
bin/mozilla/ar.pl
bin/mozilla/invoice_io.pl
bin/mozilla/io.pl
bin/mozilla/is.pl
bin/mozilla/oe.pl
config/lx-erp.conf
config/lx-erp.conf.default
doc/UPGRADE
doc/changelog
sql/Pg-upgrade2/invalid_entries_in_custom_variables_validity.sql [new file with mode: 0644]

index 0de9a4b..779bfc3 100644 (file)
@@ -338,10 +338,13 @@ sub save_custom_variables {
 
     do_statement($form, $sth, $query, @values);
 
-    my $valid_index = "$params{name_prefix}cvar_$config->{name}$params{name_postfix}_valid";
-    $self->save_custom_variables_validity(trans_id => $params{trans_id}, config_id => $config->{id},
-      validity => ($params{variables}{$valid_index} || $params{always_valid} ? 1 : 0)
-    );
+    if ($params{save_validity}) {
+      my $valid_index = "$params{name_prefix}cvar_$config->{name}$params{name_postfix}_valid";
+      $self->save_custom_variables_validity(trans_id  => $params{trans_id},
+                                            config_id => $config->{id},
+                                            validity  => ($params{variables}{$valid_index} || $params{always_valid} ? 1 : 0)
+                                           );
+    }
   }
 
   $sth->finish();
index ac3d6f2..b6007d9 100644 (file)
--- a/SL/IC.pm
+++ b/SL/IC.pm
@@ -583,10 +583,11 @@ sub save {
     }
   }
 
-  CVar->save_custom_variables('dbh'       => $dbh,
-                              'module'    => 'IC',
-                              'trans_id'  => $form->{id},
-                              'variables' => $form);
+  CVar->save_custom_variables(dbh           => $dbh,
+                              module        => 'IC',
+                              trans_id      => $form->{id},
+                              variables     => $form,
+                              save_validity => 1);
 
   # commit
   my $rc = $dbh->commit;
index 3556d4b..7087c5a 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -1991,6 +1991,10 @@ sub get_pricegroups_for_parts {
     my ($price, $selectedpricegroup_id) = split(/--/, $form->{"sellprice_pg_$i"});
 
     my $pricegroup_old = $form->{"pricegroup_old_$i"};
+
+    # sellprice has format 13,0000 or 0,00000, can't check for 0 numerically
+    my $sellprice = $form->{"sellprice_$i"};
+    my $pricegroup_id = $form->{"pricegroup_id_$i"};
     $form->{"new_pricegroup_$i"} = $selectedpricegroup_id;
     $form->{"old_pricegroup_$i"} = $pricegroup_old;
 
@@ -2069,10 +2073,27 @@ sub get_pricegroups_for_parts {
       $pkr->{price} = $form->format_amount($myconfig, $pkr->{price}, 5);
 
       if ($selectedpricegroup_id eq undef) {
-        if ($pkr->{pricegroup_id} eq $form->{customer_klass}) {
-
+        # new entries in article list, either old invoice was loaded (edit) or a new article was added
+        # Case A: open old invoice, no pricegroup selected
+        # Case B: add new article to invoice, no pricegroup selected
+
+        # to distinguish case A and B the variable pricegroup_id_$i is used
+        # for new articles this variable isn't defined, for loaded articles it is
+        # sellprice can't be used, as it already has 0,00 set
+        
+        if ($pkr->{pricegroup_id} eq $form->{"pricegroup_id_$i"} and defined $form->{"pricegroup_id_$i"}) {
+          # Case A
           $pkr->{selected}  = ' selected';
 
+        } elsif ($pkr->{pricegroup_id} eq $form->{customer_klass} 
+                 and not defined $form->{"pricegroup_id_$i"} 
+                 and $pkr->{price} != 0    # only use customer pricegroup price if it has a value, else use default_sellprice
+                                           # for the case where pricegroup prices haven't been set
+                ) {
+          # Case B: use default pricegroup of customer
+
+          $pkr->{selected}  = ' selected'; # unless $form->{selected};
+
           # no customer pricesgroup set
           if ($pkr->{price} == $pkr->{default_sellprice}) {
 
@@ -2081,29 +2102,34 @@ sub get_pricegroups_for_parts {
           } else {
 
 # this sub should not set anything and only return. --sschoeling, 20090506
-#            $form->{"sellprice_$i"} = $pkr->{price};
+# is this correct? put in again... -- grichardson 20110119
+            $form->{"sellprice_$i"} = $pkr->{price};
           }
 
-        } elsif ($pkr->{price} == $pkr->{default_sellprice}) {
+        } elsif ($pkr->{price} == $pkr->{default_sellprice} and $pkr->{default_sellprice} != 0) {
           $pkr->{price}    = $form->{"sellprice_$i"};
           $pkr->{selected} = ' selected';
         }
-      } else {
+      }
+
+      # existing article: pricegroup or price changed
+      if ($selectedpricegroup_id or $selectedpricegroup_id == 0) {
         if ($selectedpricegroup_id ne $pricegroup_old) {
+          # pricegroup has changed
           if ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
             $pkr->{selected}  = ' selected';
           }
-        } elsif (    (   $form->parse_amount($myconfig, $price_new)
-                      != $form->parse_amount($myconfig, $form->{"sellprice_$i"}))
-                 and ($price_new ne 0)) {
+        } elsif (($price_new != $form->{"sellprice_$i"}) and ($price_new ne 0) and defined $price_new) {
+          # sellprice has changed
+          # when loading existing invoices $price_new is NULL
           if ($pkr->{pricegroup_id} == 0) {
             $pkr->{price}     = $form->{"sellprice_$i"};
             $pkr->{selected}  = ' selected';
           }
         } elsif ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
+          # neither sellprice nor pricegroup changed
           $pkr->{selected}  = ' selected';
-          if (    ($pkr->{pricegroup_id} == 0)
-              and ($pkr->{price} == $form->{"sellprice_$i"})) {
+          if (    ($pkr->{pricegroup_id} == 0) and ($pkr->{price} == $form->{"sellprice_$i"})) {
             # $pkr->{price}                         = $form->{"sellprice_$i"};
           } else {
             $pkr->{price} = $form->{"sellprice_$i"};
index 585301c..3d4fe26 100644 (file)
@@ -271,17 +271,9 @@ sub form_header {
   $form->{exchangerate} = $form->{forex} if $form->{forex};
 
   # format amounts
-  $form->{exchangerate} =
-    $form->format_amount(\%myconfig, $form->{exchangerate});
-
-  if ($form->{exchangerate} == 0) {
-    $form->{exchangerate} = "";
-  }
-
-  $form->{creditlimit} =
-    $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0");
-  $form->{creditremaining} =
-    $form->format_amount(\%myconfig, $form->{creditremaining}, 0, "0");
+  $form->{exchangerate}    = $form->{exchangerate} ? $form->format_amount(\%myconfig, $form->{exchangerate}) : '';
+  $form->{creditlimit}     = $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0");
+  $form->{creditremaining} = $form->format_amount(\%myconfig, $form->{creditremaining}, 0, "0");
 
   $exchangerate = qq|
 <input type=hidden name=forex value=$form->{forex}>
index 8c803fb..9527686 100644 (file)
@@ -126,7 +126,8 @@ sub set_pricegroup {
         if ($item->{selected} && ($pricegroup_id != 0)) {
           $form->{"pricegroup_old_$j"} = $pricegroup_id;
           $form->{"price_new_$j"}      = $price;
-          $form->{"sellprice_$j"}      = $price;
+          # edit: don't change the sellprice here
+          # $form->{"sellprice_$j"}      = $price;   # this must only be updated for existing articles, not new ones
         }
         if ($pricegroup_id == 0) {
           $form->{"price_new_$j"} = $form->{"sellprice_$j"};
index 9260981..3ec65da 100644 (file)
@@ -288,9 +288,11 @@ sub display_row {
       # for last row and report
       # set pricegroup drop down list from report menu
       if ($form->{"sellprice_$i"} != 0) {
+        # remember the pricegroup_id in pricegroup_old
+        # but don't overwrite it
         $form->{"pricegroup_old_$i"} = $form->{"pricegroup_id_$i"};
         my $default_option           = $form->{"sellprice_$i"}.'--'.$form->{"pricegroup_id_$i"};
-        $column_data{sellprice_pg}   = NTI($cgi->popup_menu("sellpricepg_$i", [ $default_option ], $default_option, { $default_option => $form->{"pricegroup_$i"} || '' }));
+        $column_data{sellprice_pg}   = NTI($cgi->popup_menu("sellprice_pg_$i", [ $default_option ], $default_option, { $default_option => $form->{"pricegroup_$i"} || '' }));
       } else {
         $column_data{sellprice_pg} = qq|&nbsp;|;
       }
index aeba187..740002b 100644 (file)
@@ -266,7 +266,13 @@ sub prepare_invoice {
 
     # get pricegroups for parts
     IS->get_pricegroups_for_parts(\%myconfig, \%$form);
-    set_pricegroup($_) for 1 .. $form->{rowcount};
+
+    # Problem: set_pricegroup resets the sellprice of old invoices to the price
+    # currently defined in the pricegroup, which is a problem if the price has
+    # changed, as the old invoice gets the new price
+    # set_pricegroup must never be called, when an old invoice is initially loaded
+
+    # set_pricegroup($_) for 1 .. $form->{rowcount};
   }
   $main::lxdebug->leave_sub();
 }
@@ -780,6 +786,11 @@ sub use_as_template {
   $form->{paidaccounts} = 1;
   $form->{rowcount}--;
   $form->{invdate} = $form->current_date(\%myconfig);
+
+  # remember pricegroups for "use as template"
+  IS->get_pricegroups_for_parts(\%myconfig, \%$form);
+  set_pricegroup($_) for 1 .. $form->{rowcount};
+
   &display_form;
 
   $main::lxdebug->leave_sub();
index 2f63157..d70ee6f 100644 (file)
@@ -1435,6 +1435,10 @@ sub invoice {
 
   }
 
+  #  show pricegroup in newly loaded invoice when creating invoice from quotation/order
+  IS->get_pricegroups_for_parts(\%myconfig, \%$form);
+  set_pricegroup($_) for 1 .. $form->{rowcount};
+
   &display_form;
 
   $main::lxdebug->leave_sub();
index b647a5f..16e50bc 100644 (file)
@@ -1,11 +1,12 @@
 use Cwd;
 
-use vars qw(
-$dbcharset $eur $ghostscript_bin $html2ps_bin $language $latex_bin
-$latex_templates $lizenzen $memberfile $opendocument_templates
-$openofficeorg_daemon $openofficeorg_daemon_port $openofficeorg_writer_bin
-$pg_dump_exe $pg_restore_exe $sendmail $show_best_before $sid $spool $templates
-$use_rdbo $userspath $vertreter $webdav $xvfb_bin
+our qw(
+  $dbcharset $eur $ghostscript_bin $html2ps_bin $language $latex_bin
+  $latex_templates $lizenzen $memberfile $opendocument_templates
+  $openofficeorg_daemon $openofficeorg_daemon_port $openofficeorg_writer_bin
+  $parts_image_css $parts_listing_images $parts_show_image $pg_dump_exe
+  $pg_restore_exe $sendmail $show_best_before $sid $spool $templates
+  $use_rdbo $userspath $vertreter $webdav $xvfb_bin
 );
 
 # path to user configuration files
@@ -53,6 +54,13 @@ $excel_templates = 0; # Minimalunterstützung für Excel-Druckvorlagen
 # Zeige Felder für Mindesthaltbarkeitsdatum
 $show_best_before = 0;
 
+## Artikelbilder anzeigen
+# Artikelbild in der Detailansicht anzeigen
+$parts_show_image = 1; # [0|1]
+$parts_image_css = 'border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px;'; # [belibige valide css definiton]
+# Artikelbilder per default in den Suchergebnissen anzeigen
+$parts_listing_images = 0; # [0|1]
+
 ## Support fuer OpenDocument-Vorlagen
 # Diese Option legt fest, ob OpenDocument-Vorlagen generell verfuegbar sind.
 $opendocument_templates = 1;
index 41d833f..16e50bc 100644 (file)
@@ -1,15 +1,14 @@
 use Cwd;
 
-use vars qw(
+our qw(
   $dbcharset $eur $ghostscript_bin $html2ps_bin $language $latex_bin
   $latex_templates $lizenzen $memberfile $opendocument_templates
   $openofficeorg_daemon $openofficeorg_daemon_port $openofficeorg_writer_bin
   $parts_image_css $parts_listing_images $parts_show_image $pg_dump_exe
-  $pg_restore_exe $sendmail $show_best_before $sid $spool $templates $userspath
-  $vertreter $webdav $xvfb_bin
+  $pg_restore_exe $sendmail $show_best_before $sid $spool $templates
+  $use_rdbo $userspath $vertreter $webdav $xvfb_bin
 );
 
-
 # path to user configuration files
 $userspath = "users";
 
@@ -22,13 +21,15 @@ $templates = "templates";
 # member file
 $memberfile = "users/members";
 
-# Wenn nicht Bilanzierung dann auf 1 setzen
+# Wenn Einnahmen-Überschussrechnung, dann auf 1 setzen
+# Wenn Bilanzierung (z.B. GmbH), dann auf 0 setzen
 $eur = 1;
 
 # location of sendmail
 $sendmail = '| /usr/sbin/sendmail -t<%if myconfig_email%> -f <%myconfig_email%><%end%>';
 
 # set language for login and admin
+# currently "de" (German), "de_DE" (new German) and "en" (English, not perfect) are available
 $language = "de";
 
 # Oracle
@@ -48,6 +49,7 @@ $ENV{PERL5LIB} .= ":/sw/lib/perl5";
 $webdav = 0;
 $lizenzen = 1;
 $vertreter = 0;
+$excel_templates = 0; # Minimalunterstützung für Excel-Druckvorlagen
 
 # Zeige Felder für Mindesthaltbarkeitsdatum
 $show_best_before = 0;
@@ -104,6 +106,13 @@ $latex_bin = 'pdflatex';
 $pg_dump_exe    = "pg_dump";
 $pg_restore_exe = "pg_restore";
 
+# Rose::DB::Object Environment laden.
+# Die RDBO Klassen bieten für Addon Schreiber sehr einfache Interfaces zu den
+# bestehenden Klassen, haben aber den Nachteil, dass der Start des Programms
+# etwa 2s mehr dauert. Damit fällt die Möglichkeit Lx-Office über CGI zu
+# betreiben weg.
+$use_rdbo = 1;
+
 # Globale Debug-Ausgaben (de-)aktivieren? Moegliche Werte sind
 # LXDebug::NONE   - keine Debugausgaben
 # LXDebug::INFO
@@ -120,7 +129,7 @@ $pg_restore_exe = "pg_restore";
 #
 # Beipiel:
 #   $LXDebug::global_level = LXDebug::TRACE | LXDebug::QUERY;
-$LXDebug::global_level = LXDebug::NONE;
+$LXDebug::global_level = LXDebug->NONE;
 
 # Überwachung der Inhalte von $form aktiviert oder nicht? Wenn ja,
 # dann können einzelne Variablen mit
index 6f9a9ec..03bb3b6 100644 (file)
@@ -27,6 +27,16 @@ Zumindest folgende Module sind neu benötigt:
   Distribution sollte für die automatische Installation der anderen
   zwei Pakete sorgen)
 
+ Neue Gruppenrechte
+ ------------------
+
+Es wurde ein neues Recht "Druck" eingeführt. Dieses bestimmt, ob die
+Benutzerin das Menü "Druck" zu Gesicht bekommt oder nicht, unabhängig
+davon, wie die Rechte für die einzelnen Unterpunkte gesetzt sind.
+
+Für bereits bestehende Gruppen muss es sofern gewünscht vom
+Administrator manuell gewährt werden.
+
 
 Upgrade auf v2.6.1
 ==================
index a9ffd7d..643eac4 100644 (file)
@@ -2,9 +2,7 @@
 # Veränderungen von Lx-Office ERP #
 ###################################
 
-
-
-
+2011-02-?? - Release 2.6.2
 
   Größere neue Features:
 
     Das Program läuft jetzt optional unter FastCGI, und damit etwa um
     Faktor 10 schneller. Siehe Dokumentation in doc INSTALL.fcgi.
 
+  - Neues Gruppenrecht "Druck"
+
+    Es wurde ein neues Recht "Druck" eingeführt. Dieses bestimmt, ob
+    die Benutzerin das Menü "Druck" zu Gesicht bekommt oder nicht,
+    unabhängig davon, wie die Rechte für die einzelnen Unterpunkte
+    gesetzt sind.
+
+    Für bereits bestehende Gruppen muss es sofern gewünscht vom
+    Administrator manuell gewährt werden.
+
   Kleinere neue Features und Detailverbesserungen:
 
   - Druckvorlage optional auf Excel erweitert, um Variablen die sich nicht in foreach-Schleifen
 
   Liste gefixter Bugs aus dem Bugtracker:
 
-
-   - Bug 1388 -  Berichte sind defekt, wenn abweichendes Datumsformat (ISO) eingestellt ist
-   - Bug 1395 -  Einlagern ueber Lieferschein: Einheiten entsprechen nicht den Standardeinheiten der Artikel
-   - Bug 1398 -  Im Lagerjournal werden Projektnummern nicht erfasst 
-   - Bug 1409 -  Bei "Erzeugnis fertigen" wird nur der Bestand der letzten Komponente geprüft
-   - Bug 1412 -  Wenn die Ware ausgewählt werden muss wird der Rabatt verworfen
-   - Bug 1421 -  Stornorechnungen loeschen bereitet Probleme
-   - Bug 1484 -  Das Ankreuzfeld 'alle' hat keine Funktion wenn man einen Auswahlliste (multibox) an Lieferanten hat
-                 Es wird trotzdem nach der Auswahlliste gefiltert und die Option 'alle' wird
-                 ignoriert auch wenn man auf Erneuern klickt.
-                 Das Eingabefeld 'Betrag' im oberen Teil der Maske hat in Lx-Office
-                 keinen Sinn mehr, da nur noch über die Auswahl der offenen
-                 Kreditorenposten ein Zahlungsausgang veranlasst wird.
-                 Neu-Aufbau Lx-Office Bildschirm
-                 Nach einer erfolgreichen Buchung erscheint die Meldung: 'Zahlung gebucht.' und
-                 die Startseite wird angezeigt. Wünschenwert wäre es, wenn man in
-                 Zahlungsverkehr bleiben würde, optimalerweise mit vorbelegten Feldern.
-   - Bug 1502 -  2. Zahlung buchen, auch wenn die erste Zahlung in einen abgeschlossenen Zeitraum liegt
-
+  - Bugfix 1131: Einkaufslieferscheine: Mengen muessen beim Auslagern manuell in die maske eingetragen werden
+  - Bugfix 1154: Debitoren und Kreditoren werden nicht korrekt gebucht
+  - Bugfix 1185: Preis überschreiben bei Preisgruppe
+  - Bugfix 1220: Zahlungsverkehr - Zahlungseingang: Aufteilung des Rechnungsbetrages
+  - Bugfix 1277: Fehler in der BWA Zuordnung in den SKR03 und dem daraus generierten skr04
+  - Bugfix 1298: SKR04 überarbeitet
+  - Bugfix 1302: Inkonsistenz in Buchungsdaten: In Verkaufsrechnungen wird die Zahlung nicht angezeit, Gegenbuchung fehlt
+  - Bugfix 1367: Feature-Vorschlag: SEPA auch für Lastschriften von Debitoren unterstützen
+  - Bugfix 1370: Umlautfehler beim Erfassen einer Einkaufsrechnung
+  - Bugfix 1375: Übersetzungsdateien im Verzeichnis ""locale/de/"" immer noch in ISO-8859-15 kodiert statt UTF-8
+  - Bugfix 1376: Benutzerdefinierte Variablen sollten auch im mahnsystem zur Verfuegung stehen
+  - Bugfix 1378: leere Buchungen (text, beschreibung und referenz) bei Splittbuchungen
+  - Bugfix 1381: missing files in package
+  - Bugfix 1383: Dienstleistungen in Stammdaten und Lager
+  - Bugfix 1384: Zinsen bei Mahnung falsch berechnet
+  - Bugfix 1387: Englische Eingabemaske bei Aufruf von Deb./Kred.-buchung aus Buchungsjournal
+  - Bugfix 1388: Berichte sind defekt, wenn abweichendes Datumsformat (ISO) eingestellt ist
+  - Bugfix 1389: Bilanz repariert
+  - Bugfix 1393: CSV-Export sollte ohne Tausender-Trenner erfolgen
+  - Bugfix 1395: Einlagern ueber Lieferschein: Einheiten entsprechen nicht den Standardeinheiten der Artikl
+  - Bugfix 1398: Im Lagerjournal werden Projektnummern nicht erfasst
+  - Bugfix 1399: Lieferdaten zu einzelnen Positionen ""verrutschen"" beim Loeschen hoeherer Positionszeilen
+  - Bugfix 1400: Lieferscheine: Usability bei Auslagerung - Positionsindikator
+  - Bugfix 1406: Kunde erfassen
+  - Bugfix 1410: Beschriftung bei Eingabe der Einkaufsrechnung falsch
+  - Bugfix 1412: Wenn die Ware ausgewählt werden muss wird der Rabatt verworfen
+  - Bugfix 1414: Einfügen der \usepackage{textcomp}-Zeile in TeX-Templates ungünstig
+  - Bugfix 1422: Loeschen von Stornos bereitet eine Reihe von Problemen: (3)Gutschriften aus Rechnungen, die einstmals storniert wurden
+  - Bugfix 1429: Debitorenbuchungen 1: Wechsel des Debitoren loescht Bemerkungsfeld nicht
+  - Bugfix 1432: Mahnläufe: Nach manuellem Zurücksetzen der Mahnstufen gibt es ein Chaos bei der weiteren Erzeugung
+  - Bugfix 1439: Sortierkriterium ""Strasse"" in Listenansicht der Lieferanten geht nicht
+  - Bugfix 1440: Eingrenzen der angelegten Waren nach Lieferant liefert immer kein Ergebnis
+  - Bugfix 1445: Kleines Chaos bei Vorlagenbezeichnungen zu Lieferscheinen: picklist, packing_list, sales_delivery_order
+  - Bugfix 1449: Konto 3170 langfristige Verbindlichkeiten SKR04 Aktiva
+  - Bugfix 1451: Menüsetup Alt (seitlich) wird nicht lokalisiert
+  - Bugfix 1452: Fehler bei Lokalisierung der Überschriften und weiterer Beschriftungen
+  - Bugfix 1454: mehrere Rechnungen mit gleicher Rechnungsnummer möglich
+  - Bugfix 1455: Feld wird nach Einlagerung nicht zurückgesetzt.
+  - Bugfix 1456: Lieferanschrift wird im Workflow nicht zuverlässig vom Auftrag in den Lieferschein übernommen
+  - Bugfix 1459: Gruppen bearbteien unter FCGI
+  - Bugfix 1467: System entsperren nicht möglich
+  - Bugfix 1468: Title Javascript setzt den Titel auch, wenn die Informationen nicht verfügbar sind.
+  - Bugfix 1469: Umlaute gehen auf der Startseite kaputt bei update von 2.6.1 auf unstable (August 2010)
+  - Bugfix 1470: Falsche Übersetzung für ""Expenses EU without UStId""
+  - Bugfix 1471: System -> Historien Suchmaschinen gibt folgenden Fehler:
+  - Bugfix 1472: Bei fehlender config/authentication.pl -> Webserver Error 500
+  - Bugfix 1475: Workflow Angebot -> Rechnung wird Angebotsnummer nicht übernommen
+  - Bugfix 1477: Sicherheitsloch bei 2.6er Versionen
+  - Bugfix 1479: Debian Paket bauen schlägt fehl
+  - Bugfix 1480: Filter für Abteilungen ohne Ergebnis
+  - Bugfix 1483: Formelberechnung und Zahlenformat
+  - Bugfix 1484: Zahlungsausgang diverses
+  - Bugfix 1485: Rechnung->neuer Artikel->Speichern->Fehler ""Can't use string ... as a HASH ref ... bin/mozilla/io.pl line 2075""
+  - Bugfix 1487: Wechselkurs wird falsch ausgelesen
+  - Bugfix 1488: Ust-Voranmeldung - Elster-Export nach Taxbird
+  - Bugfix 1491: Nitpicking: Beim ersten Login in eine DB werden im Text HTML Formatierungen ausgegeben, nicht interpretiert
+  - Bugfix 1492: ""Korrekturen im Hauptbuch"" wirft Fehler
+  - Bugfix 1494: undokumentiert -- dependency parent.pm / Dokumentvariable ustid
+  - Bugfix 1495: Ansicht von Artikelbilderen (Suchergebnis/Artikelmaske)
+  - Bugfix 1496: Grad-Symbol (°) verursacht Latex-Fehler
+  - Bugfix 1498: (versehentlicher?) commit der menu.ini mit crm Spalte
+  - Bugfix 1499: Einstellungen ""Nicht rabattierfähig"" ist nicht für Dienstleistungen verfügbar (z.B. Versandkosten)
+  - Bugfix 1502: Bücherkontrolle prüft auch ALTE Zahlungseingänge
+  - Bugfix 1504: UStVa Modul SQL Fehler: ""text >= integer"" nicht erlaubt
+  - Bugfix 1506: Email-Formular: Mailadresse der Firma anstelle des Ansprechpartners
+  - Bugfix 1517: Kreditorrechnung: Wechselkurs bei gleichem Re.-Datum nicht vorhanden
+  - Bugfix 1520: Division-by-Zero-Fehler bei einigen Rechnungsbuchungen
+  - Bugfix 1521: Fix von Bug 1521 bringt neuen Fehler bei Login und Verkaufsmasken
+  - Bugfix 1523: Rabatt geht verloren, wenn Rechnung aus Lieferscheinliste generiert wird
+  - Bugfix 1524: Kundenrabatt geht verloren (wie 1284, aber auch Einkauf)
+  - Bugfix 1528: Vorlagen
+  - Bugfix 1529: falsche Tabellendefinition in Default-request_quotation.tex
+  - Bugfix 1530: Debitorenbuchung: Abfragefehler bei Kontonummer mit ""."" (Punkt) oder Text
+  - Bugfix 1533: Zahlungen in Rechnungsmaske einbuchen scheitert an locale
+  - Bugfix 1535: CSV-Exporte sind nicht mehr UTF8
+  - Bugfix 1536: 'Alte' dbupgrade Skripte die SL::DBUtils verwenden sind defekt
+  - Bugfix 1537: Debitoren: Feld curr in Tabelle ar wird nicht gefüllt
+  - Bugfix 1541: Preisgruppeneintrag in Einkaufsrechungen ??
+  - Bugfix 1547: Kreditorenbuchung in Fremdwährung: Steuerfehler
+  - Bugfix 1550: Sortieren einer Kundenauflistung ""vergisst"" gewählte Filterkriterien
+  - Bugfix 1552: Diverse Probleme mit der Sortierfunktion bei Stammdaten
+  - Bugfix 1553: Diese Kundennummer wird bereits verwendet. - Obwohl keine eingetragen ist
+  - Bugfix 1554: Kein Wechselkurs bei Debitotenbuchung in Fremdwährung unter 1 bei gleichem Datum
+  - Bugfix 1555: Sonderzeichen nicht korrekt escaped (Stückliste beim Erstellen eines Erzeugnisses)
+  - Bugfix 1561: benutzerdefinierte Variable wird unabsichtlich deaktiviert
+  - Bugfix 1562: Fehlender Hinweis im changelog zu gaenderten Rechten Beim Druck
 
 2010-03-24 - Release 2.6.1
 
diff --git a/sql/Pg-upgrade2/invalid_entries_in_custom_variables_validity.sql b/sql/Pg-upgrade2/invalid_entries_in_custom_variables_validity.sql
new file mode 100644 (file)
index 0000000..62dd944
--- /dev/null
@@ -0,0 +1,9 @@
+-- @tag: invalid_entries_in_custom_variables_validity
+-- @description: Ungültige Einträge in custom_variables_validity bereinigen
+-- @depends: release_2_6_1
+-- @charset: utf-8
+DELETE FROM custom_variables_validity
+WHERE trans_id NOT IN (
+  SELECT id
+  FROM parts
+);