Moritz Bunkus [Mon, 23 Apr 2018 07:57:58 +0000 (09:57 +0200)]
CVars: in Artikelstammdaten sind alle CVars gültig
Der Code zum Rendern der CVars zeigt nur »Element deaktiviert«, wenn
die CVar als ungültig geflaggt ist. Das kann auch in den Stammdaten
passieren, nämlich dann, wenn man eine CVar in der Konfiguration als
»Deaktiviert als Voreinstellung« ausgewählt hat.
Der Effekt ist, dass man die CVar in den Stammdaten nicht mehr
bearbeiten kann.
Jan Büren [Fri, 13 Apr 2018 12:13:32 +0000 (14:13 +0200)]
doc: Liste der Debian-Pakete ergänzt
Somit gibt es wieder zwei einfach zu pastende Installationslisten.
Einmal Datenbank, Webserver und Perl und des weiteren die Druckvorlagenpakete.
Die Pakete poppler-utils, aqbanking-cli und postgresql-contrib sind somit hinzugefügt.
Jan Büren [Fri, 13 Apr 2018 12:10:53 +0000 (14:10 +0200)]
Auch Verwendungszweck beim Import per CSV zusammenfügen
Beim MT940 Import wird purposeX und remote_name_X in einer
Zeichenkette zusammengefügt. Beim CSV-Import ist dies nicht
möglich, da an der Oberfläche das entsprechende Drop-Down-Element
diese Zuordnung (Spalte -> Import-Objekt) nicht zulässt.
Jan Büren [Mon, 26 Mar 2018 11:02:56 +0000 (13:02 +0200)]
Verknüpfte Belege um die Verknüpfung 'E-Mail Journal' erweitert.
Falls das E-Mail-Journal aktiviert ist wird zusätzlich zu der
archivierten E-Mail auch die Verknüpfung vom Beleg zu der E-Mail mitgespeichert
und ist im Beleg zusätzlich direkt anwählbar.
Etwas mehr Details im POD vom Mailer.pm, die Implementierung orientiert
sich überwiegend an der Erweiterung der Verknüpfung von Letter.pm, bzw. dem ShopConnector.
Jan Büren [Thu, 1 Mar 2018 11:09:00 +0000 (12:09 +0100)]
SelfTests/Transactions.pm erweitert
Da beim Löschen von Zahlungen mittlerweile auch kaskadieren die
reconciliation_links gelöscht werden, können verwaiste abgeglichen
Bankbewegungen entstehen.
Entsprechend Testfall ergänzt.
Sven Schöling [Thu, 15 Feb 2018 10:26:15 +0000 (11:26 +0100)]
Controller::Base::url_for: nur noch fragment erlauben
Mit mosu darüber gesprochen, und folgende Argumente kamen:
* Es ist unschön dass quasi magische Elemente wie controller, action und
jetzt hash und fragment in einer flachen Argumentliste übergeben
werden. Das ist aber historisch gewachsen und wird jetzt nicht
geändert. Ziel sollte es aber sein, dass potentielle Kollisionen
selten passieren.
* fragemnt ist die offizielle Bezeichnung für den #... Anteil einer URI.
Blöderweise nennt Javascript das document.location.hash, und so ist
das im Gedächtnis geblieben. Da aber hash eh schon in Perl und
Programmieren extrem überladen ist mit Bedeutungen ist fragment hier
der etwas weniger miese Begriff.
Sven Schöling [Tue, 13 Feb 2018 13:11:17 +0000 (14:11 +0100)]
Part/Customer/Vendor: Bei click auf ein autocomplete item sofort committen
Betrifft nur die beiden schon auf commit umgestellten Picker. Historisch
benutzen die Picker ein zweistufiges Modell: Nach Texteingabe wird bei
der ersten aktion (sei es tab oder enter) erstmal vervollständigt, aber
nicht committed. Erst wenn dadurch die Maske in einen definierten
zustand gerät wird beim zweiten tab committed.
Es gibt aber diverse Szenarien wo die Absicht des Benutzers eindeutig
ist. Dabei kann dann der zweite Schritt übersprungen werden. Bisher war
das vor allem Texteingabe die eindeutig gematcht hat und dann mit Enter
abgeschlossen wurde. Der Klick auf ein Element im Drop-Down ist aber
definitiv auch ein solcher Fall.
Moritz Bunkus [Wed, 7 Feb 2018 09:48:29 +0000 (10:48 +0100)]
Zahlungsbedingungen bei Kundenwechsel aus Stammdaten holen
`IS::get_customer` kann die Entscheidung, ob die Zahlungsbedingungen
überschrieben werden sollen oder nicht, gar nicht treffen, weil es
nicht genug Informationen hat. Nur der Aufrufer hat die, und daher
muss `IS::get_customer` den Wert immer aus den Kundestammndaten
übernehmen.
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.