Moritz Bunkus [Wed, 13 Sep 2017 14:08:33 +0000 (16:08 +0200)]
Historien-Popup: nur definierte Parameter an URL übergeben
Nicht definierte Werte werden von `encodeURIComponent` stringifiziert,
sodass z.B. `what_done=undefined&…` in der URL steht, wonach
Perl-seitig dann gefiltert wird und keine Ergebnisse mehr liefert.
Eine Filter-Option schließt sich für ar/gl aus und die
Annahme, dass es auch Vorlagen zum Kreditor gibt, wenn wir eine
IBAN-Übereinstimmung haben ist auch zu kurz gegriffen,
geprüft wird jetzt IBAN + Vorlage
Moritz Bunkus [Thu, 7 Sep 2017 09:43:52 +0000 (11:43 +0200)]
Artikelstammdaten: kein Redirect auf »neuen Artikel anlegen«
Kommt man aus der Artikelsuche oder legt man einen neuen Artikel an,
so wird beim Speichern nun kein Redirect mehr auf die Suchliste
bzw. die Maske zum Neuanlegen eines Artikels gemacht, sondern auf die
Bearbeiten-Maske des Artikels, der gerade bearbeitet bzw. angelegt
wurde. Man bleibt also sozusagen im Artikel, den man gerade in der
Hand hatte.
Existierende Callbacks werden weiterhin honoriert, sprich kommt man
aus anderen Masken, so kommt man beim Speichern auch in die andere
Maske zurück.
Moritz Bunkus [Thu, 7 Sep 2017 09:24:00 +0000 (11:24 +0200)]
Admin: anständige Fehlermeldung in Druckerverwaltung, wenn kein Mandant
Es gibt eine Prüfung, ob es Mandanten gibt, und falls nicht, so wird
eine entsprechende Fehlermeldung ausgegeben. Die kann aber nicht
erreicht werden, wenn vorher versucht wird, mit `$self->client->id`
auf ein nicht definiertes Objekt zuzugreifen.
Moritz Bunkus [Wed, 6 Sep 2017 13:49:52 +0000 (15:49 +0200)]
Bankimport: CSV- und MT940-Menüpunkte in Untermenü in »Zahlungsverkehr«
Menüpunkte zu ähnlicher Funktionalität sollten auch räumlich nahe
beieinander sein. In diesem Fall gewinnt das Thema »Kontoauszüge«
gegenüber dem Thema »CSV-Import«, da der Arbeitsfluss, der gerade
erledigt werden soll, komplett im Menü »Zahlungsverkehr« zu finden
ist, und nicht im Menü »System«.
Sven Schöling [Tue, 5 Sep 2017 08:30:21 +0000 (10:30 +0200)]
CKEditor: Fixes für texteditor in popup_dialog
- data field kanonisch auf data('ckeditorInstance') geändert
- jQuery style $.ckeditor hooks auf editor.on('loaded') geändert, der
Adapter unterstützt kein inline
- mehrfachinitialisierung unterbunden
- selectall und focus Funktionalität in zwei Funktionen getrennt
- focus auf die API Methode .focus() umgestellt
FileManagement: Konsistenzprüfung zwischen Backend und Datenbank, hier Backend Filesystem
Das script 'scripts/sync_files_from_backend.pl' prüft, ob die Dateien im Backend noch vorhanden sind.
Dabei wird nach der aktuellsten Version gesucht, ist diese vorhanden ist ok,
ist diese nicht vorhanden werden die Versionen davor gesucht und ggf. die Version in der DB heruntergesetzt.
Ist keine Dateimehr vorhanden wird der Datenbankrecord gelöscht.
Sven Schöling [Thu, 31 Aug 2017 14:39:43 +0000 (16:39 +0200)]
CKEditor: Styleanpassungen für kivi Integration
- <textarea> Rahmen, hover, active Effekte auch für den Inline Editor
- padding in der Toolbar reduziert, so dass das bei normalem Spacing
so groß ist wie das Element dadrüber. Ähnlich dem inline button
Styling.
Sven Schöling [Thu, 31 Aug 2017 14:30:57 +0000 (16:30 +0200)]
CKEditor: config Hack bei inline initialisierung
Aus irgendeinem Grund ignoriert der Inline Modus sämtliche
Dimensionsangaben in der Konfiguration, und zwar dokumentiert. Das sorgt
aber im textarea Modus dafür, dass das erzeugte Editor <div> völlig
falsch dimensioniert ist, und nachträglich angepasst werden muss. Die
CKEDITOR.editor.prototype.resize funktioniert dafür auch nicht.
Nachträglich machen sorgt für optische Unruhe.
Dieser Hack fügt im minified Code in der Datei core/creators/inline.js
im Konstruktor die folgenden Anweisungen ein:
if (config.width)
element.setStyle('width', CKEDITOR.tools.cssLength(config.width));
if (config.height)
element.setStyle('height', CKEDITOR.tools.cssLength(config.height));
Moritz Bunkus [Thu, 31 Aug 2017 11:46:34 +0000 (13:46 +0200)]
AreaInputTag: kleines Icon neben Input zum Umschalten auf Textarea
In Masken, in denen es keinen »Erneuern«-Button gab (neuer
Artikelcontroller), hatten die Benutzer*innen somit auch keine
Möglichkeit, aus dem normalen Input eine Textarea zu machen. Dies hier
ist nun eine manuelle Möglichkeit dafür.
Moritz Bunkus [Thu, 31 Aug 2017 11:05:59 +0000 (13:05 +0200)]
ActionBar: `accesskey` mit Aufruftyp `call` gefixt
Wenn eine Action mit Aufruftyp `call` eine JavaScript-Funktion aufruft
und mit `accesskey = 'enter'` auf Return reagieren soll, so hat der
bisherige Setup-Code den Keyboard-Handler an das komplette
Document-Objekt gebunden. Das funktioniert aber zumindest in Chrome
nicht: der Handler wird nie aufgerufen.
Also an Body binden, und nicht an Document, was zumindest in Chrome
und Firefox gut funktioniert.
Moritz Bunkus [Mon, 28 Aug 2017 11:36:48 +0000 (13:36 +0200)]
Quicksuche: bei Stammdatensuche keine ungültigen anbieten
Betrifft:
• Artikelstammdaten in allen Varianten (Waren, Dienstleistungen,
Erzeugnisse, Sortimente)
• Kunden & Lieferanten
• Ansprechpersonen (hier werden nur diejenigen angeboten, die zu
gültigen Kunden/Lieferanten gehören)
* die %common_params aus SL/Dev/File sind nur für den speziellen Test
filesystem.t, daher in den Test verlagert.
* ebenfalls die get_all, get_all_count entfernt, SL/Dev/ soll nicht nur die
Anzahl der zu tippenden Zeichen in Tests verringern, sondern allgemeine
Funktionen für verschiedene Tests bereitstellen oder sinnvolle Defaults
vorbelegen
Sven Schöling [Tue, 22 Aug 2017 14:23:37 +0000 (16:23 +0200)]
SL::Dev: EXPORT rewrite und create/new split
- SL::Dev module exportieren nicht mehr ungefragt
- SL::Dev::ALL exportiert jetzt den übergebenen tag aus allen Modulen
- Funktionen nicht nicht speichern (Part/CustomerVendor) heißen jetzt
"new_X" anstatt "create_X"
Bernd Bleßmann [Sun, 20 Aug 2017 11:19:54 +0000 (13:19 +0200)]
IS::get_customer: ersten Kunden zurückliefern, wenn keine Id vorgegeben ist.
Durch Umstellung auf den Customer/Vendor-Picker der Belegmasken konnte der
Picker unter bestimmten Umständen initial leer sein. Dadurch wurden dann bei
einem Wechsel von leer auf einen Kunden nicht alle Form-Variablen richtig
gefüllt (z.B. taxzone_id) und z.B. ein Lieferschein konnte nicht gespeichert
werden.
Das jetzige Verhalten gleicht dann dem von IR::get_vendor.
Jan Büren [Thu, 17 Aug 2017 08:38:16 +0000 (10:38 +0200)]
Fixt: Auslagern über Standardlagerplatz ohne Auslagern von Dienstleistungen
Die Prüfung, ob es sich um eine Dienstleistung handelt, wird
über part_type gemacht.
Andernfalls wird die auszulagernde Menge in diesem Fall bei
allen Positionen auf 0 gesetzt.
Zusätzlich die Prüfung auf gesetzte Menge über das Fragezeichen-Feld
entfernt (ist mit ActionBar reingekommen).
Jan Büren [Sat, 12 Aug 2017 14:54:31 +0000 (16:54 +0200)]
Kontoauszug verbuchen -> Buchung erstellen -> Dialogbuchung nur abs()
Ob die Zahlung positiv oder negativ ist, bestimmt die Soll und Haben
in der Maske Dialogbuchung und liegt somit in der Hand des Anwenders,
in welche Vorlage er buchen will.
a) Filter erweitert, um nach Vorlagenname zu suchen
b) Filter korrekt in <form> gepackt, um submit und reset form
wie gewohnt zu unterstützen
c) Buchungsmöglichkeit um gl_transactions (Dialogbuchungsvorlagen)
erweitert, dass heißt in der Auswahlliste der Vorlagen werden
jetzt Dialogbuchungsvorlagen angezeigt, falls ein Buchungskonto
mit dem aktuellem Bankkonto übereinstimmt:
(bank_accounts.chart_id == record_template_items.chart_id)
d) Filter erweitert, um nach Referenz (nur in gl_transactions)
zu suchen
e) gl.pl erweitert, sodass die Metadaten der Vorlage geladen werden
und mit den sinnvollen Vorgaben aus bank_transactions gefüllt werden
Bernd Bleßmann [Fri, 11 Aug 2017 12:14:02 +0000 (14:14 +0200)]
CsvImport: worker kann Csv-Helper auch mit scalar-ref als Datei aufrufen.
Der Csv-Helper kann für die Datendatei auch eine Referenz auf Daten erhalten.
Die Basis-Klasse der Worker des CsvImports unterstützt das jetzt auch. Damit
kann dann z.B. in den Tests $worker->run auch verwendet werden, wenn der Worker
in file eben eine Referenz auf die Csv-Daten enthält.
G. Richardson [Tue, 21 Mar 2017 16:16:59 +0000 (17:16 +0100)]
DATEV-Export nach Erfassungsdatum filtern
Hat man einen DATEV-Export schon für einen bestimmten Zeitraum
exportiert, und muß nachträglich noch ein paar Buchungen in dem Zeitraum
tätigen, kann man diese nachträglichen Buchungen nun gesondert
exportieren, indem man ein Datum nach dem letzten Exportdatum
angibt.
BankTransaction: Überarbeitung von "Kontoauszug verbuchen" , SEPA-Export wieder integriert
Die Punktebewertung findet wieder ausschließlich in "get_agreement_with_bank_transactions" statt,
auch die SEPA-Sammelüberweisung. Diese bekommt dor extra Punkte, da ggf. für bestimmte Rechnungen negative Punkte entstehen.
Auch gibt es dort keine Remote Banknummer etc.
Die Testdatei t/bank/bank_transactions.t wurde um zwei Tests erweitert,
1. ein Test der das Verbuchen ohne SEPA-Export macht,
2. ein Test mit SEPA-Export
Die war noch aus der Zeit vor GetModels, und war nötig damit Paginating
die gleichen Filter hatte wie das Hauptquery. Mittlerweile ist das aber
nicht mehr nötig, weil die GetModels-Architektur die einzelnen Plugins
eh chained.
Beschleunigt einige Queries, wo der Queryplaner in Bedingungen in Joins
die Duplizierung nicht automatisch entfernen kann, und dann in nested
loops nachprüfen muss.
Bernd Bleßmann [Tue, 1 Aug 2017 12:36:04 +0000 (14:36 +0200)]
S:C:H:ReportGenerator: Ergebnis von layout->get als Liste verwenden
Sonst ist der Export (PDF/CSV) von Controllern, die diesen Helper verwenden,
kaputt. Fehlermeldung war:
Can't locate object method "add" via package "1" (perhaps you forgot to load "1"?)
at SL/Controller/Helper/ReportGenerator.pm line 25.