Dabei waren DateTime::Set und Set::Infinite als Anhängigkeiten von
DateTime::Event::Cron reingekommen, das gibt es aber zusammen mit
Set::Crontab immernoch nicht in apt, also ist das weiter im fallback.
List::MoreUtils und List::UtilsBy sind meine ich für Debian 5
reingekommen, die Pakete sind aber seit Ewigkeiten in apt verfügbar.
parent ist seit 5.10.1 ein coremodul.
Die anderen wurden anscheinend einfach so reingeworfen, und hätten da
nie drin sein sollen.
Moritz Bunkus [Mon, 29 Jan 2018 16:02:32 +0000 (17:02 +0100)]
jsTree: keine globalen Key-Handler installieren
Sollen wohl für Keyboard-Navigation im Baum sorgen — obwohl es dafür
extra ein jsTree-Plugin gibt. Leider kollidiert der Handler für Space
mit der Art, wie das inline_resize-Plugin des ckEditors seine Handler
registriert. Effekt war, dass die Leertaste dann nicht mehr beim
ckEditor ankam.
printer_id / copies werden so auch in den print_options benannt. Wenn dieses
Template als Vorlage für ein Popup-Dialog verwendet wird, kann es sonst zu
gleichen DOM-Ids kommen.
Bernd Bleßmann [Mon, 11 Dec 2017 15:05:11 +0000 (16:05 +0100)]
Auftrags-Controller: Fehler bei Anzeige von EK und Marge in 2. Zeile behoben
Wenn das Order-Objekt noch nicht gespeichert ist, kann darauf nicht über
$item->order zugegriffen werden. Darum muss an die 2. Zeile eine weitere
Variable durchgereicht werden, um zu bestimmen, ob wir im Verkauf sind und
EK und Margen angezeigt werden sollen.
Sven Schöling [Wed, 24 Jan 2018 15:16:31 +0000 (16:16 +0100)]
Controller::LoginScreen: AuthHandler::handle ohne Argumente aufrufen
Abgesehen davon, dass die Parameter nicht mehr benutzt werden, behebt
das einen ganz ekeligen Bug: "panic: attempt to copy freed scalar"
Das Problem ist, dass der AuthHandler selber das Einloggen übernimmt und
dafür %::myconfig neu beschreibt. Wenn währenddessen aber ein Alias von
einem %::myconfig Value auf dem Stack liegt, wird der sofort freigegeben
weil der Stack nicht refcounted ist.
Normalerweise fällt das nicht weiter auf, und die Daten werden im
final pass aufgeräumt. Aber mit backtrace_on_error wird bei einem Fehler
sofort ein Carp::confess aufgerufen, und das nimmt für den Stacktrace
den Stack auseinander und stolpert dabei über den bereits freigegeben Wert.
Sven Schöling [Thu, 18 Jan 2018 14:03:37 +0000 (15:03 +0100)]
PriceSource: Objekte cachen.
Im Moment werden die einzelnen Worker im normalen Workflow mehrfach
angelegt, einmal für die verfügbaren, und dann noch einmal für den
besten und zum wiederherstellen der existierenden.
Für größere Belege wird das merklich, und bei komplexen
Implementationen, die auf die Datenbank zugreifen müssen, sogar mehrere
Sekunden.
Diese Patch ist der erste in einer Reihe, die es erlauben optional
Preisquellen
1. nicht unnötig zu erstellen
2. in sich cachen zu lassen
3. vorberechnen zu lassen und damit horizontal zu cachen
3. die Berechnungen in einen Ajax Call zu verzögern
Wurde eine Sammelanweisung gefunden, ist die Suche für die betroffenen Banktransaktion beendet.
Fälschlicherweise wurde nur die innere Schleife beendet, es muss aber die äußere Schleife beendet werden.
Jan Büren [Tue, 9 Jan 2018 08:44:06 +0000 (09:44 +0100)]
DATEV: Buchungen festschreiben als Benutzer-Option
Hintergrund: Aktuell setzt kivitendo keinen Wert, was bei der
DATEV zu einer Warnung und anschließender Festschreibung im Stapel führt.
Die Option ist jetzt an der Oberfläche konfigurierbar und erhält gültige Werte
Sven Schöling [Wed, 27 Dec 2017 10:10:41 +0000 (11:10 +0100)]
Presenter::Tag: singleton tags
Vorher wurden alle tags als singleton (also ohne schließenden Tag)
gerendert, wenn sie keinen content hatten. Das geht aber kaputt bei
textarea, weil ein einfaches <textarea> den kompletten folgenden HTML
Code als Content interpretiert.
Ab jetzt werden nur die Tags ohne Content als singleton gerendert, bei
denen das im Standard erlaubt ist.
Jan Büren [Tue, 2 Jan 2018 11:01:53 +0000 (12:01 +0100)]
Objektmethode date für GLTransaction
In gl gibt es nur gldate. Entsprechend wie bei invnumber
die auf reference in gl verweist date auf gldate gesetzt.
Verbessert das Verhalten wenn es bei Details auflisten in Projekten
verknüpfte Dialogbuchungen gibt.
Moritz Bunkus [Wed, 20 Dec 2017 10:13:20 +0000 (11:13 +0100)]
Versionsnummer nach Login wieder anzeigen
Templates, die von alten Controllern über
`$::form->parse_html_template` ausgegeben haben, verfügen nicht über
ein `FORM`-Objekt (siehe `Form::prepare_html_template`). Also die
Version außerhalb des Templates via `$::form->read_version` auslesen
und ans Template übergeben.
Sven Schöling [Tue, 19 Dec 2017 14:23:35 +0000 (15:23 +0100)]
Presenter: Sub-Presenter auf Funktional geändert
1. alle Sub-Presenter aus dem SL::Presenter Namespace geschmissen
2. Keine ungefragten @EXPORTs mehr, nur noch @EXPORT_OK
3. Alle Methoden sind auf Funktionen umgeschrieben (kein $self mehr)
4. Die benötigten Methoden von Sub-Presentern müssen jetzt direkt importiert
werden (betrifft vor allem SL::Presenter::EscapedText und SL::Presenter::Tag)
5. Da die Funktionen in Tag/Text/EscapedText recht häufig gebraucht werden,
exportieren die ihre Funktionen stattdessen nach SL::Presenter::Simple, und
die Proxies in SL::Template::Plugin::L und SL::Template::Plugin::P
dispatchen auf diesen Namespace statt auf SL::Presenter.
6. Die Sub-Namespaces sind in SL::Presenter::ALL registriert, und dort liegt
auch der Proxymechanismus um vom Objekt aus zu der Funktion zu dispatchen.
Das ist nur in SL::Template::Plugin::P registriert, nicht mehr in L.
7. Für Funktionen deren exportierter name mit Namespace präfixt war, gibt es
einen Alias angelegt der nicht exportiert wird.
Moritz Bunkus [Mon, 18 Dec 2017 12:07:28 +0000 (13:07 +0100)]
CSV-Import: Fix für reflexive Spaltennamen im Mapping
Wenn eine CSV-Datei für den Bank-Import z.B. die Spalten `currency`,
`amount`, `local_bank_number` enthalten, so schlug der Import aus
gleich zwei Gründen fehl, wenn in der CSV-Spaten-Zuordnung die Namen
alle auf sich selber abgebildet wurden, also `current` → `currency`,
`amount` → `amount` und `local_bank_number` → `local_bank_number`.
Es stellte sich heraus, dass beim Speichern der CSV-Spalten in der
Datenbank hier kivitendo gedacht hat, dass diese drei genannten
Spalten auch als Methoden auf den DB-Objekt aufrufbar wären.
Sind sie aber nicht.
Schuld war der Mechanismus, der anhand der vorhandenen
Spaltennamen-Zuordnungen (`$mapping`) und dem vorhandenen
Spaltenprofil (`$profile`) entschieden hat, welche Namen als Methoden
anzuerkennen.
Im konkreten Fall ist es so, dass es sowohl ein solches Mapping als
auch ein solches Profil gibt. In dem Fall darf aber ein Name, der zwar
als Mapping existiert, dessen gemappter Name aber im Profil nicht
existiert, auch nicht als Methodenname aufgefasst und in die `$specs`
aufgenommen werden. Statt dessen muss er als »unbekannte Spalte«
behandelt werden.