kivitendo-erp.git
4 years agoBankTransaction: Sortierungscode vereinfacht
Moritz Bunkus [Tue, 3 Sep 2019 11:35:27 +0000 (13:35 +0200)]
BankTransaction: Sortierungscode vereinfacht

4 years agoBelege: E-Mail-Dialog: Sprache für Anhang-Übersetzung setzen
Bernd Bleßmann [Mon, 2 Sep 2019 15:59:49 +0000 (17:59 +0200)]
Belege: E-Mail-Dialog: Sprache für Anhang-Übersetzung setzen

4 years agoRose: MetaSetups bzgl. Fließkommazahlen erneuert
Moritz Bunkus [Mon, 2 Sep 2019 10:24:42 +0000 (12:24 +0200)]
Rose: MetaSetups bzgl. Fließkommazahlen erneuert

4 years agobank_transaction_acc_trans: überflüssige Spalte »id« entfernt
Moritz Bunkus [Mon, 2 Sep 2019 10:11:04 +0000 (12:11 +0200)]
bank_transaction_acc_trans: überflüssige Spalte »id« entfernt

Primärschlüssel sind zwei andere Spalten, und die Präsenz dieser
Nicht-Primärschlüssel-Spalte zusammen mit Typ »serial« macht Probleme,
weil Rose kein Default für solche Spalten kennt.

4 years agoKundenartikelnummern in Vorlagen verwenden können
Bernd Bleßmann [Fri, 30 Aug 2019 14:28:18 +0000 (16:28 +0200)]
Kundenartikelnummern in Vorlagen verwenden können

Einsortierung in das template array wie Lieferantenartikelnummern als
customer_make und customer_model.

Standard-Druckvorlagen Angebot/Auftrag/Lieferschein/Rechnung für Verkauf
exemplarisch angepasst.

4 years agoWH: Warnungen wegen nicht initialisierten Werten vermeiden
Moritz Bunkus [Fri, 30 Aug 2019 13:01:26 +0000 (15:01 +0200)]
WH: Warnungen wegen nicht initialisierten Werten vermeiden

Durch Tests getriggert, konkret: durch t/wh/transfer.t

4 years agoSL::DB::Unit: Warnungen wegen nicht initialisierten Werten vermeiden
Moritz Bunkus [Fri, 30 Aug 2019 13:01:10 +0000 (15:01 +0200)]
SL::DB::Unit: Warnungen wegen nicht initialisierten Werten vermeiden

Durch Tests getriggert, konkret: durch t/wh/transfer.t

4 years agoAttrSorted-Helfer: Warnungen wegen nicht initialisierten Werten vermeiden
Moritz Bunkus [Fri, 30 Aug 2019 13:00:03 +0000 (15:00 +0200)]
AttrSorted-Helfer: Warnungen wegen nicht initialisierten Werten vermeiden

Durch Tests getriggert, konkret: durch t/controllers/csvimport/parts.t

4 years agoSL::Auth: Warnungen wegen nicht initialisierten Werten vermeiden
Moritz Bunkus [Fri, 30 Aug 2019 12:56:50 +0000 (14:56 +0200)]
SL::Auth: Warnungen wegen nicht initialisierten Werten vermeiden

Durch Tests getriggert, konkret: durch t/controllers/base/render.t

4 years agoDB-Upgrades für Hintergrundjobs von Perl auf SQL umgestellt
Moritz Bunkus [Fri, 30 Aug 2019 12:53:43 +0000 (14:53 +0200)]
DB-Upgrades für Hintergrundjobs von Perl auf SQL umgestellt

Rose-Models dürfen in DB-Upgrade-Scripten nicht verwendet werden, weil
die Perl-Strukturdaten (MetaSetup) in dem Moment schon auf dem neuen
Stand, die Datenbankstrukturen aber auf dem alten Stand sind. Daher
schlagen bei Unterschieden (z.B. eine Spalte soll später noch angelegt
werden, sie existiert aber im neuen MetaSetup schon) halt sämliche
Operationen fehl.

4 years agoLagerstandsbericht: Listenpreis als Basis f. Bestandswert auswählbar
Bernd Bleßmann [Fri, 30 Aug 2019 09:01:13 +0000 (11:01 +0200)]
Lagerstandsbericht: Listenpreis als Basis f. Bestandswert auswählbar

4 years agoLagerstandsbericht: Listenpreis anzeigbar machen
Bernd Bleßmann [Fri, 30 Aug 2019 08:34:08 +0000 (10:34 +0200)]
Lagerstandsbericht: Listenpreis anzeigbar machen

4 years agoKosmetik: doppeltes Leerzeichen weg
Bernd Bleßmann [Fri, 30 Aug 2019 08:19:56 +0000 (10:19 +0200)]
Kosmetik: doppeltes Leerzeichen weg

4 years agoSelfTest: Geschwindigkeitssteigerung durch »NOT EXISTS« anstelle von »NOT IN«
Moritz Bunkus [Mon, 26 Aug 2019 09:36:36 +0000 (11:36 +0200)]
SelfTest: Geschwindigkeitssteigerung durch »NOT EXISTS« anstelle von »NOT IN«

Nicht ganz frische PostgreSQL-Versionen (mindestens bis 9.6 inklusive)
optimieren »NOT IN«-mit-Subquery nicht automatisch und müssen daher
für jede Zeile des äußeren Selects einen linearen Scan auf die
Subquery-Tabelle machen.

Deutlich effektiver ist das in diesem Fall äquivalente »NOT
EXISTS«-mit-Subquery.

Beispiel: Namen aller Kunden, für die noch keine Rechnung geschrieben
wurde. Falsch mit »NOT IN«:

SELECT name
FROM customer
WHERE id NOT IN (
  SELECT customer_id
  FROM ar
);

Besser und semantisch äquivalent:

SELECT name
FROM customer
WHERE NOT EXISTS (
  SELECT customer_id
  FROM ar
  WHERE customer_id = customer.id
);

Geschwindigkeitssteigerung ist auch ein Euphemismus. Vor der Änderung
war der Selftest bei der LINET-Produktivdatenbank nicht in der Lage,
seine Tests innerhalb von drei Tagen auszuführen. Nach der Änderung
dauert der Selftest weniger als eine Minute.

Neure PostgreSQL-Versionen (z.B. v11) erkennen dieses Pattern
automatisch.

4 years agoRose-Models anhand des tatsächlichen Schemas aktualisiert
Moritz Bunkus [Fri, 23 Aug 2019 09:27:09 +0000 (11:27 +0200)]
Rose-Models anhand des tatsächlichen Schemas aktualisiert

4 years agoDoku: Update nach Auth-Erweiterung auf multiple Module
Moritz Bunkus [Mon, 29 Apr 2019 14:06:58 +0000 (16:06 +0200)]
Doku: Update nach Auth-Erweiterung auf multiple Module

4 years agoAuth: Unterstützung für multiple Authentifizierungsbackends
Moritz Bunkus [Mon, 29 Apr 2019 13:54:30 +0000 (15:54 +0200)]
Auth: Unterstützung für multiple Authentifizierungsbackends

Über den Parameter "module" kann man nun multiple Backends angeben,
die nacheinander versucht werden, bis ein Erfolg gemeldet wird oder
die Liste durchlaufen wurde.

Zusätzlich kann man LDAP-Module mehrfach angeben. Damit
unterschiedliche Konfigurationen für jede Modulinstanz benutzt werden
können, wurde die Syntax erweitert: für "LDAP:Config-Abschnitts-Name"
wird "[authentication/Config-Abschnitts-Name]" benutzt. Zwecks
Rückwärtskompatibilität sucht "LDAP" ohne Angabe eines Namens nach dem
bisher auch verwendeten Abschnitt "[authentication/ldap]".

Nützlich ist das Ganze z.B., um einen LDAP-Fallback-Server angeben zu
können, der benutzt wird, wenn der Hauptserver nicht erreichbar sein
sollte.

4 years agoAuth: mini_error gefixt
Moritz Bunkus [Mon, 29 Apr 2019 13:32:22 +0000 (15:32 +0200)]
Auth: mini_error gefixt

$::auth->mini_error wird potenziell zu einem Zeitpunkt aufgerufen, an
dem es die Instanzen von $::form und $::request noch nicht gibt. Da
hier wirklich nur die Bare-Bones-Ausgabe der Fehlermeldung benötigt
wird, machen wir für den Fall manuell ein CGI-Objekt auf.

4 years agoLDAP-Auth: Konfiguration über Konstruktur übergeben
Moritz Bunkus [Mon, 29 Apr 2019 13:11:43 +0000 (15:11 +0200)]
LDAP-Auth: Konfiguration über Konstruktur übergeben

Ist eine Vorarbeit dafür, das LDAP-Modul mit unterschiedlichen
Konfigurationen benutzen zu können.

4 years agoLDAP-Auth: enter_sub/leave_sub entfernt
Moritz Bunkus [Mon, 29 Apr 2019 13:02:23 +0000 (15:02 +0200)]
LDAP-Auth: enter_sub/leave_sub entfernt

4 years agoTask-Server auf unterschiedlichen Maschinen laufen lassen können
Moritz Bunkus [Fri, 23 Aug 2019 09:17:39 +0000 (11:17 +0200)]
Task-Server auf unterschiedlichen Maschinen laufen lassen können

Jede Task-Server-Instanz und jeder Hintergrundjob haben nun ein neues
Attribute »node_id«. Darüber kann gesteuert werden, dass bestimmte
Jobs nur von einer bestimmten Instanz ausgeführt werden.

Die »node_id« eines neu angelegten Jobs ist standardmäßig leer. Das
bedeutet, dass ein Job von einer beliebigen Task-Server-Instanz
ausgeführt werden kann.

Die »node_id« eines Task-Servers ist standardmäßig der Hostname (siehe
ausgabe von »perl -MSys::Hostname -le 'print hostname()'«), kann aber
in der Konfigurationsdatei überschrieben werden (»[task_server]« →
»node_id«).

Zusätzlich gibt es den Konfigurationsparameter »[task_server]« →
»only_run_tasks_for_this_node«. Ist dieser Parameter gesetzt, so führt
der Task-Server nur diejenigen Jobs aus, deren »node_id«-Feld mit der
»node_id« der Task-Server-Instanz übereinstimmt. Andernfalls werden
auch diejenigen Jobs ausgeführt, deren »node_id«-Feld leer ist.

Achtung: es findet momentan keinerlei Locking statt. Das bedeutet,
dass es für jede Datenbank nur eine Task-Server-Instanz geben darf,
bei der »only_run_tasks_for_this_node« nicht gesetzt ist. Für
Load-Balancing eignet sich das also bisher noch nicht.

4 years agoTypos in de locale
G. Richardson [Fri, 16 Aug 2019 11:46:20 +0000 (13:46 +0200)]
Typos in de locale

4 years agoWorkflow Lieferantenauftrag->Kreditorenbuchung: mini Performance-Optimierung
Bernd Bleßmann [Thu, 15 Aug 2019 10:39:05 +0000 (12:39 +0200)]
Workflow Lieferantenauftrag->Kreditorenbuchung: mini Performance-Optimierung

Später benötigte Relationen direkt mit laden.
Dank an Geoffrey.

4 years agoWorkflow Lieferantenauftrag->Kreditorenbuchung: Zahlungsbedingungen aus Auftrag
Bernd Bleßmann [Thu, 15 Aug 2019 10:35:02 +0000 (12:35 +0200)]
Workflow Lieferantenauftrag->Kreditorenbuchung: Zahlungsbedingungen aus Auftrag

Um das Fälligkeitsdatum zu ermitteln, die Zahlungsbedingungen aus dem Auftrag
nehmen, nicht die aus den Lieferantenstammdaten.

4 years agoNeuer Workflow Lieferantenauftrag->Kreditorenbuchung
Bernd Bleßmann [Fri, 2 Aug 2019 16:00:21 +0000 (18:00 +0200)]
Neuer Workflow Lieferantenauftrag->Kreditorenbuchung

Für jedes Aufwandskonto der Positionen im Lieferantenauftrag wird eine
Zeile in der Kreditorenbuchung erstellt. Gebucht wird standardmäßig
auf des entsprechende Aufwandskonto. In der Mandantenkonfiguration
kann unter Standardkonten ein Konto ausgewählt werden, auf das dann
alle Zeilen gebucht werden.
Die Steuern werden übernommen, sofern diese für das ausgewählte
Aufwandskonto gültig sind. Ansonsten wird die Default-Steuer für das
Aufwandskonto gesetzt.
Der Quellauftrag wird geschlossen, wenn der Betrag aller
Kreditorenbuchungen, die aus Workflows aus dem Quellauftrag entstanden
sind, gleich dem Betrag des Quellauftrags ist.

4 years agoAuftrags-Controller: mime-type füer odt
Bernd Bleßmann [Sat, 10 Aug 2019 15:53:46 +0000 (17:53 +0200)]
Auftrags-Controller: mime-type füer odt

4 years agoSpalte taxnumber aus Tabelle tax entfernt 2
G. Richardson [Sun, 11 Aug 2019 12:08:08 +0000 (14:08 +0200)]
Spalte taxnumber aus Tabelle tax entfernt 2

sql Upgrade Datei vergessen

4 years agochangelog "Herkunft der personenbezogenen Daten" erweitert (ältere Version)
G. Richardson [Sun, 11 Aug 2019 10:58:30 +0000 (12:58 +0200)]
changelog "Herkunft der personenbezogenen Daten" erweitert (ältere Version)

4 years agoTypo in changelog
G. Richardson [Sat, 10 Aug 2019 15:18:30 +0000 (17:18 +0200)]
Typo in changelog

4 years agoPayment Helper - POD repariert
G. Richardson [Sat, 10 Aug 2019 15:17:10 +0000 (17:17 +0200)]
Payment Helper - POD repariert

4 years agoMahnungen erzeugen - nach Abteilung filtern und anzeigen
G. Richardson [Sat, 10 Aug 2019 15:05:57 +0000 (17:05 +0200)]
Mahnungen erzeugen - nach Abteilung filtern und anzeigen

4 years agoIndex auf inventory parts_id
G. Richardson [Mon, 25 Feb 2019 15:34:19 +0000 (16:34 +0100)]
Index auf inventory parts_id

um schneller die Bestände eines Artikels in diversen Lagern zu berechnen

4 years agoNeuer index auf inventory über itime und parts_id
G. Richardson [Mon, 25 Feb 2019 15:03:29 +0000 (16:03 +0100)]
Neuer index auf inventory über itime und parts_id

Um Abfragen wie
* letzte 10 Lagerbuchungen
* letzte 10 Lagerbuchungen von Artikel XYZ
zu beschleunigen

4 years agoPart Controller - neuer Tab mit Lagerinformationen
G. Richardson [Sat, 10 Aug 2019 15:00:10 +0000 (17:00 +0200)]
Part Controller - neuer Tab mit Lagerinformationen

* Übersicht über alle Lagerbestände, wo der Artikel überall gelagert ist
(Derzeit gibt es im Template Variabeln um Zwischensummen und
Nachkommastellen zu kontrollieren)

* Mini-Journal mit den letzten 10 Lagertransaktionen des Artikels

Diese Daten werden nur bei Bedarf geladen, also wenn der Benutzer auf
den neuen Tab "Lagerbewegungen/-bestände" klickt.

Außerdem gibt es Links zu diversen Lageraktionen (Einlagern, Umlagern,
Entnahme), wo der Artikel dann schon vorausgewählt ist.

4 years agoSL::DB::Part - get_simple_stock_sql: Mengen pro Bin
G. Richardson [Fri, 25 Nov 2016 12:40:54 +0000 (13:40 +0100)]
SL::DB::Part - get_simple_stock_sql: Mengen pro Bin

und Summen über Lager und Gesamtmenge.

4 years agoOrder Controller POD - Typos
G. Richardson [Mon, 25 Feb 2019 11:23:46 +0000 (12:23 +0100)]
Order Controller POD - Typos

4 years agoDev Part - Codeeinrückungen
G. Richardson [Mon, 25 Feb 2019 11:25:56 +0000 (12:25 +0100)]
Dev Part - Codeeinrückungen

4 years agoBericht Lagerbestand - Artikelnummer vorbelegbar machen
G. Richardson [Mon, 25 Feb 2019 14:36:53 +0000 (15:36 +0100)]
Bericht Lagerbestand - Artikelnummer vorbelegbar machen

wenn man einen Parameter partname im Link übergibt
  wh.pl?action=report&partnumber=foobar123

4 years agoBericht Lagerbuchungen - Artikelnummer vorbelegbar machen
G. Richardson [Mon, 25 Feb 2019 13:56:06 +0000 (14:56 +0100)]
Bericht Lagerbuchungen - Artikelnummer vorbelegbar machen

wenn man einen Parameter partname im Link übergibt
 &partname=foobar

4 years agoUmlagern und Entnahme mit Artikel vorbelegen
G. Richardson [Mon, 25 Feb 2019 13:51:41 +0000 (14:51 +0100)]
Umlagern und Entnahme mit Artikel vorbelegen

Wenn man in der URL ein &parts_id=12345 im Link mitliefert.
In beiden Berichten gibt es einen Partpicker.

4 years agoInventory stock_in - select_default_bin Modus
G. Richardson [Mon, 25 Feb 2019 15:58:55 +0000 (16:58 +0100)]
Inventory stock_in - select_default_bin Modus

wird in der Form / URL ein select_default_bin=1 übergeben, wird der
Standardlagerplatz des Artikels vorausgewählt (sofern vorhanden).

Ansonsten passiert das Aktualisieren von Lager/Lagerplatz nur, wenn sich
der Artikel nach Laden der Seite ändert.

4 years agoInstanceConfiguration.pm - Typos und Style
G. Richardson [Mon, 25 Feb 2019 11:27:55 +0000 (12:27 +0100)]
InstanceConfiguration.pm - Typos und Style

4 years agoAggregatfunktion comma entfernt und Templates angepasst
G. Richardson [Wed, 20 Feb 2019 11:30:16 +0000 (12:30 +0100)]
Aggregatfunktion comma entfernt und Templates angepasst

"comma" war eine alte benutzerdefinierte Aggregatfunktion, die benutzt
wurde, um mehrere aggregierte Werte aus einem GROUP BY in einen
kommaseparierten String umzuwandeln.

Mittlerweile würde man das einfach mit array_agg und array_to_string machen:
 array_to_string(array_agg(startdate), ', ') as startdate

Im Template wurden die ',' dann durch '<br>' ersetzt. Stattdessen werden
die Werte im Query nun als array_agg ausgegeben, und im Template wird
eine Schleife über das Arrayref gebildet.

4 years agoSL::Dev::Payment - check if bank account exists
G. Richardson [Tue, 19 Feb 2019 13:28:54 +0000 (14:28 +0100)]
SL::Dev::Payment - check if bank account exists

4 years agoPriceRule Manager - selectall_ids -> selectcol_array_query
G. Richardson [Tue, 19 Feb 2019 12:09:21 +0000 (13:09 +0100)]
PriceRule Manager - selectall_ids -> selectcol_array_query

4 years agoHelper UserPreferences - selectall_ids -> selectcol_array_query
G. Richardson [Tue, 19 Feb 2019 12:08:53 +0000 (13:08 +0100)]
Helper UserPreferences - selectall_ids -> selectcol_array_query

4 years agoSL::DBUtils - selectall_array_query -> selectcol_array_query
G. Richardson [Tue, 19 Feb 2019 11:55:49 +0000 (12:55 +0100)]
SL::DBUtils - selectall_array_query -> selectcol_array_query

selectall_array_query durch selectcol_array_query ersetzt.

Intern wird nun die DBI-Funktion selectcol_arrayref verwendet, anstatt
dies manuell per Schleife zu machen. Der Name selectall_array_query war
irreführend und der neue Name entspricht nun dem, was man erwartet.

4 years agoSL::DBUtils - POD zu AutoCommit aktualisiert + Typos
G. Richardson [Tue, 19 Feb 2019 12:00:46 +0000 (13:00 +0100)]
SL::DBUtils - POD zu AutoCommit aktualisiert + Typos

4 years agoInventory Controller - Datenbankoptimierungen für mini_journal
G. Richardson [Thu, 14 Feb 2019 11:01:10 +0000 (12:01 +0100)]
Inventory Controller - Datenbankoptimierungen für mini_journal

Aus Datenbanksicht war das Inventory mini-journal eine Katastrophe.

Die trans_id Abfrage führte zu einem ersten Seq Scan auf der Tabelle inventory.
  my $query = 'SELECT trans_id FROM inventory GROUP BY trans_id ORDER BY max(itime) DESC LIMIT 10';

Die Rose Manager Abfrage führte dann zu einem zweiten Seq Scan auf der Tabelle inventory:
 $objs = SL::DB::Manager::Inventory->get_all(query => [ trans_id => \@ids ]) if @ids;

Das sind zwei Seq Scans auf eine Tabelle die in kivitendo recht groß werden
kann. Außerdem könnte in der Zwischenzeit ein neuer inventory-Eintrag
dazugekommen sein, der damit ignoriert würde.

Im Template wurde dann auf die Rose-Objekte von part, transfer_type, bin und
warehouse zugegriffen, und da diese noch nicht geladen wurden sorgt das im
Extremfall für 40 weitere Datenbankzugriffe.

Das ist alles schön kompakter perl Code, aber wie könnte man das aus
Datenbanksicht optimieren, also die Anzahl der Zugriffe verringern und nach
Möglichkeit Indexe benutzen?

Die Templatezugriffe können einfach durch ein with_objects verhindert werden:
    with_objects => [ 'parts', 'trans_type', 'bin', 'bin.warehouse' ],

Statt einer separaten Abfrage für die trans_ids könnte man diese als eine
Unterabfrage in get_all einführen:
  query        => [ trans_id => [ \"$query" ] ]

Die get-all-Abfrage kann man aber noch weiter verbessern, indem man nach id
statt trans_id filtert, da es für id im Gegensatz zu trans_id schon einen Index
gibt. Das Ziel für die Unterabfrage sollte also sein, eine Liste von ids zu
bekommen, damit der Index benutzt wird und man sich den Seq Scan spart.

Das mini-Journal zeigt die letzten 10 Lagerbewegungen, die entweder
Einlagerungen, Auslagerungen oder Umlagerungen sein können. Im Fall von
Umlagerungen wären das 2 inventory-Einträge, ansonsten 1. Da wir nicht wissen,
wieviele Umlagerungen dabei sind, holen wir die letzten 20 Einträge, filtern
diese nach den letzten 10 trans_ids, und extrahieren daraus die inventory ids
(zwischen 10 und 20 ids). Die ursprüngliche Abfrage mit dem GROUP BY konnte
keinen index nutzen, da das ORDER BY auf max(itime) statt itime war. Durch das
"limit 20" werden zwar potentiell ein paar Zeilen zu viel geholt, dafür kann
man aber nun einen Index auf inventory(itime) setzen, der von der Abfrage auch
verwendet werden kann, und damit spart man sich auch den letzten Seq Scan auf
inventory.

create index if not exists inventory_itime_idx on inventory (itime);

4 years agoSpalte taxnumber aus Tabelle tax entfernt
G. Richardson [Tue, 22 Jan 2019 13:56:24 +0000 (14:56 +0100)]
Spalte taxnumber aus Tabelle tax entfernt

tax.taxnumber war ein redundanter Eintrag, und entsprach dem Wert von
chart.accno aus tax.chart_id.

Z.B. in SKR04 hatte Steuerschlüssel 3 (Umsatzsteuer 19%) die taxnumber
1776 und die chart_id 775 (chart mit id 775 ist das Konto 1776).

Ein Problem dabei ist, daß wenn man in den Konteneinstellungen die
Kontonummer von 1776 ändert, dies nicht automatisch in tax.taxnumber mit
aktualisiert wurde.

Im Code wurde taxnumber v.A. verwendet, um bei Belegen die Steuern zu
gruppieren, mit der taxnumber als Schlüssel.

taxnumber wurde nun also entfernt, und obwohl zum Gruppieren der Steuern
immer noch diese Kontonummer verwendet wird, wird diese Kontonummer
nicht mehr zum Suchen des entsprechenden Taxeintrags verwendet, sondern
die Suche passiert indirekt über die chart_id.

Das ganze System basiert derzeit darauf, daß es für jeden tax-Eintrag ein
eindeutiges Automatikkonto gibt, in der Praxis muß dies aber nicht der
Fall sein!

4 years agoRefactoring sql-Abfrage für Steuertabelle
G. Richardson [Tue, 22 Jan 2019 14:05:14 +0000 (15:05 +0100)]
Refactoring sql-Abfrage für Steuertabelle

statt 2 subselects pro Automatik- und Skontokonto, jeweils ein Join, um
die Kontonummer und Kontenbeschreibung direkt auszulesen.

4 years agochangelog zu PartPicker sucht nach Kunden- und Lieferanten-Artikel-Nr.
Bernd Bleßmann [Wed, 7 Aug 2019 13:53:48 +0000 (15:53 +0200)]
changelog zu PartPicker sucht nach Kunden- und Lieferanten-Artikel-Nr.

4 years agoAuftrags-Controller: Kunden- bzw. Lieferanten-Art-Nr. in Pos-Zeile anzeigen.
Bernd Bleßmann [Mon, 5 Aug 2019 11:00:28 +0000 (13:00 +0200)]
Auftrags-Controller: Kunden- bzw. Lieferanten-Art-Nr. in Pos-Zeile anzeigen.

… sofern in den Benutzereinstellungen auch die Suche danach ausgewählt ist.

4 years agoAuftrags-Controller: PartPicker filtert nach Kunden- und Lieferanten-Art.-Nr., …
Bernd Bleßmann [Fri, 19 Jul 2019 13:48:09 +0000 (15:48 +0200)]
Auftrags-Controller: PartPicker filtert nach Kunden- und Lieferanten-Art.-Nr., …

… sofern das in den Benutzereinstellungen ausgewählt ist.

4 years agoUserPreferences-Helper f. Part-Picker-Such-Einstellungen in Belegen
Bernd Bleßmann [Fri, 19 Jul 2019 13:45:46 +0000 (15:45 +0200)]
UserPreferences-Helper f. Part-Picker-Such-Einstellungen in Belegen

Hier kann der Benutzer einstellen, ob in Verkauf auch nach Kunden-Artikle-Nr.
und im Einkauf nach Lieferanten-Artikel-Nr. gesucht werden soll.

4 years agoPartPicker nach Kunden- und Lieferanten-Artikel-Nr. suchen und filtern können
Bernd Bleßmann [Fri, 19 Jul 2019 12:20:38 +0000 (14:20 +0200)]
PartPicker nach Kunden- und Lieferanten-Artikel-Nr. suchen und filtern können

4 years agoPart: Filter-Specs für Kunden- und Lieferanten-Artikel.-Nr.
Bernd Bleßmann [Mon, 8 Jul 2019 13:04:22 +0000 (15:04 +0200)]
Part: Filter-Specs für Kunden- und Lieferanten-Artikel.-Nr.

4 years agoPartPicker: Mehrfachauswahl: Ursprüngliche Filter für Dialog merken.
Bernd Bleßmann [Fri, 19 Jul 2019 12:07:34 +0000 (14:07 +0200)]
PartPicker: Mehrfachauswahl: Ursprüngliche Filter für Dialog merken.

Damit klappt das auch hier mit der Suche nach gültigen/ungültigen/allen
Artikeln.

4 years agoRelease 3.5.4 release-3.5.4
Bernd Bleßmann [Wed, 7 Aug 2019 10:13:47 +0000 (12:13 +0200)]
Release 3.5.4

4 years agoChangelog auf Release 3.5.4; Bugfixes ergänzt
Bernd Bleßmann [Wed, 7 Aug 2019 10:07:53 +0000 (12:07 +0200)]
Changelog auf Release 3.5.4; Bugfixes ergänzt

4 years agolocales-Lauf english
Bernd Bleßmann [Wed, 7 Aug 2019 09:59:18 +0000 (11:59 +0200)]
locales-Lauf english

4 years agoVergessene hidden Abteilung für Ein/Verkauf->Berichte->Lieferscheine
Bernd Bleßmann [Tue, 6 Aug 2019 10:41:27 +0000 (12:41 +0200)]
Vergessene hidden Abteilung für Ein/Verkauf->Berichte->Lieferscheine

4 years agoPTC: zur Margenberechnung die Nettozeilensumme nehmen.
Bernd Bleßmann [Mon, 29 Jul 2019 14:23:47 +0000 (16:23 +0200)]
PTC: zur Margenberechnung die Nettozeilensumme nehmen.

So ist der Verhalten in den anderen (alten) Masken. Sonst ergeben sich
unterschiedliche Werte in den verschiedenen Masken, wenn
"Steuer im Preis inbegriffen" gewählt ist.

4 years agoTask-Server: Exceptions als Warnung loggen, nicht als Debugmeldung
Moritz Bunkus [Mon, 29 Jul 2019 13:34:59 +0000 (15:34 +0200)]
Task-Server: Exceptions als Warnung loggen, nicht als Debugmeldung

4 years agoDB-Upgrade-Skripte: Falsche Abhängigkeit 3.5.2 -> 3.5.4 korrigiert
Jan Büren [Mon, 29 Jul 2019 13:18:32 +0000 (15:18 +0200)]
DB-Upgrade-Skripte: Falsche Abhängigkeit 3.5.2 -> 3.5.4 korrigiert

3.5.3 -> 3.5.4

4 years agoRelease 3.5.4-beta1
Jan Büren [Sat, 27 Jul 2019 05:46:33 +0000 (07:46 +0200)]
Release 3.5.4-beta1

4 years agoChangelog auf Release 3.5.4-beta gesetzt
Jan Büren [Sat, 27 Jul 2019 05:46:09 +0000 (07:46 +0200)]
Changelog auf Release 3.5.4-beta gesetzt

4 years agoDokumentation: Release auf 3.5.4 gesetzt
Jan Büren [Sat, 27 Jul 2019 05:42:59 +0000 (07:42 +0200)]
Dokumentation: Release auf 3.5.4 gesetzt

4 years agoDatenbank-Upgrade-Skripte für die 3.5.4
Jan Büren [Sat, 27 Jul 2019 05:40:56 +0000 (07:40 +0200)]
Datenbank-Upgrade-Skripte für die 3.5.4

4 years agogenerische LS-E-Mail auch in Stammdaten editieren ...
Jan Büren [Wed, 13 Feb 2019 09:54:45 +0000 (10:54 +0100)]
generische LS-E-Mail auch in Stammdaten editieren ...

4 years agoController - alten unbenutzten Code entfernt
G. Richardson [Tue, 4 Jun 2019 11:34:02 +0000 (13:34 +0200)]
Controller - alten unbenutzten Code entfernt

4 years agoSL::Dev::Inventory - Typo und Formatierung
G. Richardson [Wed, 20 Feb 2019 12:20:08 +0000 (13:20 +0100)]
SL::Dev::Inventory - Typo und Formatierung

descriptin -> description

lange Zeilen in mehrere Zeilen umformatiert

4 years agoTypo in POD
G. Richardson [Mon, 11 Mar 2019 13:16:58 +0000 (14:16 +0100)]
Typo in POD

4 years agoTypo in POD
G. Richardson [Mon, 11 Mar 2019 13:16:05 +0000 (14:16 +0100)]
Typo in POD

4 years agoDBConnect POD Typo
G. Richardson [Mon, 25 Feb 2019 11:06:20 +0000 (12:06 +0100)]
DBConnect POD Typo

4 years agoungenutzte Spalte "ranking" aus Tabelle "payment_terms" entfernt
G. Richardson [Wed, 6 Feb 2019 13:55:54 +0000 (14:55 +0100)]
ungenutzte Spalte "ranking" aus Tabelle "payment_terms" entfernt

Überbleibsel aus uraltem Zahlungsbedingungsfeature

4 years agoaction Name in POD aktualisiert
G. Richardson [Fri, 1 Feb 2019 09:36:22 +0000 (10:36 +0100)]
action Name in POD aktualisiert

4 years agoSL::DB _register_db Passwort aus $type herausfiltern
G. Richardson [Tue, 19 Feb 2019 12:17:47 +0000 (13:17 +0100)]
SL::DB _register_db Passwort aus $type herausfiltern

Es wurde nach dem falschen String gefiltert.

4 years agoEB/SB Buchungen minimale Kindersicherung für Datumswerte
Jan Büren [Wed, 24 Jul 2019 07:45:35 +0000 (09:45 +0200)]
EB/SB Buchungen minimale Kindersicherung für Datumswerte

Die Funktion lässt den Nutzer zuviele Freiheiten ;-(
Ausreichend wäre es nur ein Datum (vgl. sql-ledger yearend) eingeben
zu lassen und das Folgedatum ist dann automatisch der nächste Tag.

4 years agoKontoauszug verbuchen rückgängig: Mitarbeiter in history protokollieren
Jan Büren [Tue, 23 Jul 2019 07:15:28 +0000 (09:15 +0200)]
Kontoauszug verbuchen rückgängig: Mitarbeiter in history protokollieren

4 years agoKontoauszug rückgängig machen: Nur bei aktuellem Beleg arap.paid neu setzen
Jan Büren [Tue, 23 Jul 2019 07:04:41 +0000 (09:04 +0200)]
Kontoauszug rückgängig machen: Nur bei aktuellem Beleg arap.paid neu setzen

4 years agoHintergrundjobs: einmalige Jobausführung: Daten übergeben können
Moritz Bunkus [Mon, 22 Jul 2019 09:36:59 +0000 (11:36 +0200)]
Hintergrundjobs: einmalige Jobausführung: Daten übergeben können

Entweder, man übergibt `data` als Parameter in
URI-Hash-Form (z.B. '&data.var=value'), als normaler YAML-encodierter
String, so wie er auch in der Datenbank
steht (z.B. '&data=---%0Avar%3Dvalue'), oder man übergibt
JSON-encodierte Daten in
`json_data` (z.B. '&json_data=%7B%22var%22%3A%22value%22%7D`).

4 years agoMahnungs-Tabelle: Fremdschlüsselverknüpfung auf Rechnungstabelle Part 2
Moritz Bunkus [Fri, 19 Jul 2019 13:50:04 +0000 (15:50 +0200)]
Mahnungs-Tabelle: Fremdschlüsselverknüpfung auf Rechnungstabelle Part 2

4 years agoMahnungs-Tabelle: Fremdschlüsselverknüpfung auf Rechnungstabelle
Moritz Bunkus [Fri, 19 Jul 2019 13:16:25 +0000 (15:16 +0200)]
Mahnungs-Tabelle: Fremdschlüsselverknüpfung auf Rechnungstabelle

4 years agoDateTime: Funktionen zum Parsen von YYYY:MM:DD und YYYY:MM:DDTHH:MM:SS
Moritz Bunkus [Fri, 19 Jul 2019 08:08:38 +0000 (10:08 +0200)]
DateTime: Funktionen zum Parsen von YYYY:MM:DD und YYYY:MM:DDTHH:MM:SS

4 years agoHintergrundjobs: Controller-Action zur einmaligen Ausführung eines Jobs
Moritz Bunkus [Thu, 18 Jul 2019 11:46:36 +0000 (13:46 +0200)]
Hintergrundjobs: Controller-Action zur einmaligen Ausführung eines Jobs

Gedacht für Aufruf von extern, gibt JSON zurück. Beispiel:

curl --silent  --user "<username>:<password>" \
  'https://<hostname>/kivitendo/controller.pl?action=BackgroundJob/execute_class&class=CleanAuthSessions'

4 years agoCVars: bei Gültigkeitswechsel aktuellen Wert nicht speichern
Moritz Bunkus [Thu, 18 Jul 2019 08:31:12 +0000 (10:31 +0200)]
CVars: bei Gültigkeitswechsel aktuellen Wert nicht speichern

Wenn man in den Artikelstammdaten eine CVar von ungültig auf gültig
umschaltet, so ist in dem Moment die CVar-Input im Formular nicht
enthalten, sondern nur die Gültigkeits-Checkbox. Wenn dann im Backend
der aktuelle Wert der CVar in die DB gespeichert wird, weil die CVar
ja ab dem Moment gültig ist, so ist der Wert dementsprechend leer
bzw. 0 für numerische Typen.

Der Effekt ist, dass beim nächsten Laden der CVar ein Wert in der DB
steht (leer/0), und dass dieser Wert vorausgewählt ist und nicht der
Standardwert aus der Konfiguration.

Daher sorgt diese Änderung dafür, dass in so einem Fall der aktuelle
CVar-Wert schlicht gar nicht in die DB geschrieben wird. Genauer:

Wenn das Speichern der Gültigkeit gewünscht wird, so wird der Wert nur
dann geschrieben, wenn die CVar sowohl vor dem Speichern als auch nach
dem Speichern gültig ist, sie also weder gerade aktiviert noch gerade
deaktiviert wird. Andernfalls wird die CVar in der DB nicht vorhanden
sein.

4 years agoEinkauf/Verkauf: Bemerkungsfelder gleich groß anzeigen
Moritz Bunkus [Wed, 17 Jul 2019 10:17:16 +0000 (12:17 +0200)]
Einkauf/Verkauf: Bemerkungsfelder gleich groß anzeigen

4 years agoEinkaufsrechnungen: Projektauswahl gefixt
Moritz Bunkus [Wed, 17 Jul 2019 13:59:34 +0000 (15:59 +0200)]
Einkaufsrechnungen: Projektauswahl gefixt

4 years agoEinkauf/Verkauf: keine Validierung bei Update-Button
Moritz Bunkus [Wed, 17 Jul 2019 13:48:13 +0000 (15:48 +0200)]
Einkauf/Verkauf: keine Validierung bei Update-Button

Andernfalls wird z.B. erzwungen, dass die Vorgangsbezeichnung
eingegeben ist, bevor der Update-Button betätigt wird. Das betrifft
auch den Kundenwechsel, der ein automatisches Update triggert, was
wiederum die Validierung triggert.

Wichtig bzgl. Validierung ist letztlich nur, dass die Werte zum
Zeitpunkt des Speicherns gültig sind, egal ob explizites
(»Speicher«, »Als neu speicher«) oder implizites Speichern (»Drucken«,
»E-Mail« etc.).

4 years agoLaTeX: openin_any weniger restriktiv
Moritz Bunkus [Tue, 16 Jul 2019 12:26:29 +0000 (14:26 +0200)]
LaTeX: openin_any weniger restriktiv

Die Einstellung openin_any aus texmf.cnf (oder der Umgebungsvariable
gleichen Namens) kontrolliert, aus welchen Pfaden (PDF)LaTeX
Quelldateien liest: a = any liest aus beliebigen Verzeichnissen, r =
restricted nicht aus Dot-Verzeichnissen und p = paranoid nur aus
dem Ausgabeverzeichnis und seinen Unterverzeichnissen.

Bei kivitendo ist das Ausgabeverzeichnis …/users, die Vorlagen liegen
in …/templates/…, sind also keine Unterverzeichnisse. Aktuelle
LaTeX-Versionen (zumindest ab TeXLive 2019.5…) wenden das nun strikt
an, was dazu führt, dass z.B. das Einbinden von Bildern nicht möglich
ist, wenn die Bilder in …/templates/… anstelle von …/users liegen —
sogar obwohl …/templates/… in $TEXINPUTS enthalten ist.

An dieser Stelle ist zu viel Sicherheit falsch bzw. für unser
aktuelles Layout falsch.

Eine andere mögliche Variante wäre, die LaTeX-Abhandlung direkt in
…/templates anstelle von …/users uz machen. Das erfordert aber
potenziell Eingriff durch den SysAdmin, um Verzeichnisrechte anders zu
setzen. Daher wird das erst mal nicht gemacht.

4 years agoPart-Controller: Kosmetik
Bernd Bleßmann [Thu, 11 Jul 2019 11:30:48 +0000 (13:30 +0200)]
Part-Controller: Kosmetik

4 years agoPart-Controller: Gültigkeit von CVars richtig speichern
Bernd Bleßmann [Thu, 11 Jul 2019 11:30:17 +0000 (13:30 +0200)]
Part-Controller: Gültigkeit von CVars richtig speichern

Das behebt den Bug, dass sich CVars in den Warenstammdaten nicht mehr
ungültig/gültig gesetzt werden konnten.

4 years agoRevert "CVars: in Artikelstammdaten sind alle CVars gültig"
Bernd Bleßmann [Thu, 11 Jul 2019 11:29:36 +0000 (13:29 +0200)]
Revert "CVars: in Artikelstammdaten sind alle CVars gültig"

This reverts commit ab45df2fa087f4b754ef02f238557ab0e28a676b.

CVars in den Warenstammdaten sind nicht immer gültig. Das Problem hier war,
dass das Speichern des Gültig-Flags durch einen anderen Bug nicht funktionierte,
und so Variablen, die als Voreinstellung deaktiviert waren, nicht mehr geändert
werden konnten (auch nicht auf aktiviert/gültig gesetzt werden).
Der Fix für diesen anderen Bug kommt gleich.

4 years agoUpgrade-Datei: Hinweis auf: Task-Server berücksichtigt Memory-Limit
Bernd Bleßmann [Wed, 10 Jul 2019 11:02:22 +0000 (13:02 +0200)]
Upgrade-Datei: Hinweis auf: Task-Server berücksichtigt Memory-Limit

4 years agoChangelog: Task-Server berücksichtig Memory-Limit
Bernd Bleßmann [Wed, 10 Jul 2019 10:56:19 +0000 (12:56 +0200)]
Changelog: Task-Server berücksichtig Memory-Limit

4 years agoDokumentation: Task-Server: Hinweise auf Memory-Limit und Restart (systemd)
Bernd Bleßmann [Wed, 10 Jul 2019 10:41:04 +0000 (12:41 +0200)]
Dokumentation: Task-Server: Hinweise auf Memory-Limit und Restart (systemd)

Ausserdem alle "Taskserver" durch "Task-Server" ersetzt.

4 years agoTask-Server: Debug-Meldung, falls Beendigung wg. Memory-Limit.
Bernd Bleßmann [Wed, 10 Jul 2019 10:40:49 +0000 (12:40 +0200)]
Task-Server: Debug-Meldung, falls Beendigung wg. Memory-Limit.

4 years agomemory_usage_is_too_high von Dispatcher nach System::Process verschoben
Sven Schöling [Mon, 4 Mar 2019 15:59:55 +0000 (16:59 +0100)]
memory_usage_is_too_high von Dispatcher nach System::Process verschoben

(cherry picked from commit c0e3364a21b2da1c61564ddb8d9afa5ab6489f9c)

4 years agotask_server.pl: Speicherlimit beachten
Sven Schöling [Mon, 4 Mar 2019 15:43:35 +0000 (16:43 +0100)]
task_server.pl: Speicherlimit beachten

(cherry picked from commit 7fcf2ca9960d160419aa89824cb4fb3a25188ad9)