Moritz Bunkus [Fri, 3 Jul 2015 08:23:14 +0000 (10:23 +0200)]
GetModels: Disablen von Plugins auch für undef
Die Dokumentation sagt Folgendes zum Deaktivieren von Plugins:
> Configuration for plugins. If the option for any plugin is omitted,
> it defaults to enabled and is configured by default. Giving a
> falsish value as first argument will disable the plugin.
Das bisherige Verhalten war aber, dass bei Übergabe von
undef (z.B. »paginated => undef«) die Standardeinstellungen gegriffen
haben.
Aufträge sollten nicht an die Lieferadresse, sondern an die Stammdaten-Adresse
gehen. Zudem sind seit commit b6213d3539ccd179cd1f21b9afc54b8de8970774
"Einkauf/Verkauf: Lieferadressenfelder nie aus Stammdaten vorbelegen" die sipto-
Felder leer, wenn keine Lieferadresse angegeben ist.
jQuery kann aus HTML-Strings DOM-Objekte bauen:
$("<p>stuff</p>"). Beginnt der HTML-String mit Leerzeichen, so croakt
jQuery daran. Daher bei den betroffenen Funktionen, die immer auf einem
so gebauten DOM-Objekt hantieren, das Ziel-Argument um führende
Leerzeichen bereinigen.
G. Richardson [Wed, 17 Jun 2015 11:13:09 +0000 (13:13 +0200)]
Banktransactions Import - bessere Fehlermeldung wenn BLZ nicht stimmt
Beim Import wird sowohl Kontonummer oder IBAN als auch die BLZ geprüft.
Für den Fall, daß ein Konto anhand der importierten Kontonummer gefunden
wurde, die importierte BLZ aber nicht mit der dazu gespeicherten BLZ
übereinstimmt, gibt es nun eine aussagekräftigere Fehlermeldung.
Wahrscheinlich ist in diesem Fall die BLZ in den Bankkonteneinstellungen
falsch und muß dort aktualisiert werden.
Zumindest für den Fall, daß die IBAN übergeben wird, könnte man auf die
BLZ Prüfung wahrscheinlich auch verzichten.
G. Richardson [Fri, 12 Jun 2015 12:49:42 +0000 (14:49 +0200)]
Rechte für Bankbewegungen in Bankerweiterung setzen
Als sinnvollen Default erhalten beim Upgrade Gruppen, die schon das
Recht für "Zahlungseingang, Zahlungsausgang, Kontenabgleich" (cash)
besitzen, auch alle Rechte für die Bankerweiterung, also die Arbeit mit
den importierten Bankbewegungen.
Moritz Bunkus [Wed, 3 Jun 2015 12:35:23 +0000 (14:35 +0200)]
SL::DB::Helper::TransNumberGenerator: Belegnummern einmal direkt auslesen
Es werden alle vorhandenen Belegnummern benötigt. Diese wurden bisher so
ausgelesen, dass die Belege vom Rose-Manager via ->get_all komplett
geladen wurden und dann jeweils die Belegnummernspalte davon genommen
wurde. Das ist sehr langsam, vor allem da es potenziell sogar gleich ein
zweites Mal gemacht wurde.
Die Umstellung hier nutzt dafür ein direktes SQL-Query und umgeht Rose
dafür. Außerdem werden die nur einmal ausgelesen.
Moritz Bunkus [Wed, 3 Jun 2015 10:46:00 +0000 (12:46 +0200)]
SL::DB::Helper::TransNumberGenerator: Tabellen und Zeilen locken
Die Tabelle, aus der die Liste der bereits benutzten Belegnummern
ausgelesen wird, muss exklusiv gelockt werden, um zu verhindern, dass
danach zwischen dem Auslesen und der Vergabe der neuen Belegnummer eine
andere DB-Verbindung dasselbe macht und dieselbe Nummer verwendet.
Dieses Locking muss daher vor dem Auslesen der Daten geschehen.
Weiterhin müssen die Zeilen in den Nummernkreistabellen (defaults
bzw. business) gelockt werden. Hier reicht aber das Locking der
entsprechenden Zeile.
Beide Locks müssen analog zu SL::TransNumber gehandhabt werden, um einen
potenziellen Deadlock zu vermeiden, sprich zuerst die Belegtabelle,
danach die Zeile in der Nummernkreistabelle.
Moritz Bunkus [Wed, 3 Jun 2015 09:33:47 +0000 (11:33 +0200)]
SL::TransNumber: Belegtabelle vor Auslesen locken
Die Tabelle, aus der die Liste der bereits benutzten Belegnummern
ausgelesen wird, muss exklusiv gelockt werden, um zu verhindern, dass
danach zwischen dem Auslesen und der Vergabe der neuen Belegnummer eine
andere DB-Verbindung dasselbe macht und dieselbe Nummer verwendet.
Dieses Locking muss daher vor dem Auslesen der Daten geschehen.
Moritz Bunkus [Wed, 3 Jun 2015 09:15:56 +0000 (11:15 +0200)]
Task-Server: vor Schlafen aufräumen
Dabei werden unter Anderem potenziell noch laufende Transaktionen
beendet und zumindest das Standard-DBH (nicht das von Rose)
geschlossen. Dadurch sollten alle Locks, die durch die Jobs
evtl. entstanden sind, wieder aufgelöst worden sein.
Bernd Bleßmann [Mon, 1 Jun 2015 18:53:10 +0000 (20:53 +0200)]
HTML::Util: "nbsp" als HTML-Entity durch " " (space) ersetzen.
"nbsp" wird hier zu space, obwohl U+00A0 (non-breaking space) richtig wäre.
non-breaking space kann allerdings zu schwer zu findenden Fehlern zum Beispiel
beim CSV-Export führen, wenn ein Benutzer dieses nicht sichtbare Zeichen dann
per cut-and-paste irgendwo einfügt.
Sven Schöling [Mon, 1 Jun 2015 14:07:32 +0000 (16:07 +0200)]
ClientJS: Values nicht trimmen
Wenn numerische Werte (also IVs und NVs) per Regex getrimmt werden,
wird dabei das POK Flag gesetzt, das anzeigt, dass der Scalar auch ein
valider String ist.
JSON kann dann nicht mehr unterscheiden welcher Typ der Scalar ist, und
nimmt String. Das führt aber dazu, dass _alle_ Zahlen als Strings
encodiert werden.
Auch das wäre prinzipiell kein Problem, ausser dass Javascript keine
separaten Operatoren für Strings und Zahlen hat.
json.val1 + json.val2
wird also immer als concat aufgefasst und nicht als Addition, und
json.val ? true : false
ist immer true, weil "0" und "1" beide true in Javascript sind.
Bernd Bleßmann [Wed, 27 May 2015 12:56:03 +0000 (14:56 +0200)]
Ausdruck Erzeugnisse mit Stückliste und Lieferantenartikelnummer repariert.
Betraf wohl auch andere Felder zu Artikeln, die vor der Aufbereitung des
TEMPLATE_ARRAYS aus der DB gelesen wurden. Diese werden jetzt richtig in
TEMPLATE_ARRAYS einsortiert.
Um auch die Einträge für Erzeugnis-Teile und Warengruppen (beim Gruppieren
der Waren) in den Druckvorlagen unterscheiden zu können, gibt es ein Feld
'entry_type', dass die Werte 'normal', 'partsgroup', 'assembly-item' und
'assembly-item-partsgroup' annehmen kann.
Bernd Bleßmann [Sun, 24 May 2015 10:04:10 +0000 (12:04 +0200)]
Listenpreis in Belegen u. Ausdruck richtig formatieren und nicht mehr parsen.
listprice wird in den Belegen nur angezeigt. Man kann ihn nicht eingeben und
auch nicht speichern. Deshalb wird er jetzt nur zur Ausgabe formatiert
(io.pl:display_row, OE.pm:order_details, IS.pm:invoice_details), aber nicht
formatiert gespeichert.
io.pl:display_row schreibt ihn auch unformatiert als hidden in die Form.
Das war wohl so gedacht, aber nicht konsequent eingehalten und auch von mir an
einigen Stellen "verschlimmbessert" worden.
Evtl. sollte der listprice gar nicht als hidden mitgeschliffen werden, sondern
immer aus der DB gelesen werden.
G. Richardson [Wed, 6 May 2015 15:59:15 +0000 (17:59 +0200)]
Keine Weiche für mt940 in SL/Controller/CsvImport.pm mehr
Stattdessen ein eigener Controller BankImport, der die Daten über einen
neuen Helper in SL/Helper/MT940.pm (wo aqbanking-cli aufgerufen wird)
nach CSV konvertiert.
mt940 ist nun kein eigener Importtyp vom CSV-Import mehr. Stattdessen
wird nach der mt940 Upload-Maske ein CSV-Import-Profil geladen und
direkt ein Redirect auf den CSV-Import vom Typ Bankbewegungen
ausgeführt. Durch setzen des Parameters "force_profile" und ein Redirect
auf CsvImport/test statt CsvImport/new wird der Import auch direkt im
"Test und Vorschau"-Modus ausgeführt und der Benutzer sieht direkt das
Ergebnis. Ab hier verhält sich der Import also genau so, als ob der
User direkt eine CSV-Datei hochgeladen hätte.
Ein Nachteil der Umstellung ist, daß die CSV Profildefaults nun nicht
mehr auf den Typ "mt940" reagieren können und auf ein existierendes
CSV-Profil zurückgreifen müssen. Beim ersten MT940 Import wird bei
fehlen dieses Profils eine Meldung an den User gegeben.
Man könnte ein Referenzprofil per Update einspielen, allerdings sind die
Profile an Logins gebunden, und man bräuchte dafür ein globales Profil
und müßte hierfür generell die Profile erweitern.
Sven Schöling [Wed, 6 May 2015 13:32:28 +0000 (15:32 +0200)]
POSIX: Autoexport aller Funktionen vermeiden.
use POSIX; exportiert den kompletten Funktionsumfang in das package. Das
alleine ist schon nicht schön, allerdings ändert sich die Liste der
exportierten Funktionen je nach POSIX Version.
POSIX 1.47 bringt nun mathematische Funktionen, unter anderem round und
ähnlich oft benutzte Schlüsselwörter. Zu unsicher das alles zu testen.
Einfach nur das exportieren, was man haben will.