Aus irgend einem Grund registriert Rose keine neue Relationship, wenn es
bereits eine (mit leicht anderem Namen) als Foreign Key für dieselbe
Spalte gibt.
Moritz Bunkus [Mon, 11 Jan 2016 15:32:34 +0000 (16:32 +0100)]
Revert "JavaScript-Plugin: auch als Filter einsetzen können"
Dies revertet Commit 20d730acdbb52b5b75af783aa010609e25b73024. Grund
ist, dass aus bisher nicht zu analysierenden Gründen in manchen
Situationen der Template-Toolkit-Compiler oder eine andere Komponente
Quark erzeugt und daher das Plugin nicht findet.
Wenn es geht, dann sieht das compilierte Template an der Stelle wie
folgt aus:
------ snip ------
$output .= do {
my $output = '';
my $_tt_filter = $context->filter('js')
|| $context->throw($context->error);
------ snip ------
Wenn es aber nicht geht, dann wie folgt:
------ snip ------
$output .= do {
my $output = '';
my $_tt_filter = $context->filter($stash->get('js'))
|| $context->throw($context->error);
------ snip ------
Im nicht funktionierenden Fall wird das Plugin selber im Stash gesucht,
wo es aber nicht vorhanden ist.
Warum das passiert ist noch rätselhaft und wird mangels Zeit erst einmal
nicht weiter untersucht.
Moritz Bunkus [Mon, 11 Jan 2016 12:34:30 +0000 (13:34 +0100)]
Passwörter: Unterstützung für crypt, MD5 und SHA-1 entfernt
Diese Algorithmen gelten allesamt als unsicher.
Falls die Datenbank jemals in falsche Hände geraten sollte, so würden
zumindest die mit crypt und MD5 gehashten Passwörter schnell zu knacken
sein. Die mit SHA-1 gehashten dürften etwas länger dauern, aber auch sie
sind gefährdet. Daher werden sie in der Datenbank schlicht
entfernt. Admins müssen für solche Accounts neue Passwörter vergeben.
Dies sollte nur Accounts betreffen, deren Passwort sich seit der
Einführung von SHA256S als Mechanismus in kivitendo 2.7.0 Mitte 2011
nicht mehr geändert hat.
Moritz Bunkus [Mon, 11 Jan 2016 10:55:53 +0000 (11:55 +0100)]
Passwörter: Hash-Verfahren PBKDF2 unterstützen und als Standard nutzen
Der aktuelle Stand der Technik sind die SHA-*-Varianten schon lange
nicht mehr. In der Zwischenzeit wurden der PBKDF2-Mechanismus
entwickelt, um schnelles Berechnen zu erschweren. Noch neuer und in
ASICs noch schwerer umsetzbar sind BCrypt und SCrypt, für die es aber
noch keine weit verbreiteten Perl-Module gibt.
Bernd Bleßmann [Thu, 7 Jan 2016 09:50:30 +0000 (10:50 +0100)]
Drucker im Adminbereich ändern - Bug behoben
Im Drucker-Fall enthält $::form die Drucker-id in $::form->{id} und die
client-ID in $::form->{client}->{id}, beim init_client Code für den Fall
muß also erst auf id in $::form->{client}->{id} geprüft werden,
ansonsten wird der Client mit der id des Druckers gesucht und nicht
gefunden.
Moritz Bunkus [Mon, 4 Jan 2016 14:02:55 +0000 (15:02 +0100)]
Task-Server: Alarm-Signal während Ausführung ignorieren, beim Schlafen aufwachen
Über die Oberfläche kann man den Task-Server aufwecken. Doof nur, wenn
der momentan gerade einen Job ausführt, dann wird der Task-Server
nämlich gekillt.
Generell soll SIGALRM so behandelt werden, dass der Server aufgeweckt
ist, wenn er gerade schläft, und ansonsten soll das Signal komplett
ignoriert werden.
Daher wird es jetzt am Anfang jedes Durchlaufs auf IGNORE gesetzt. Auch
im Signal-Handler für das Aufwecken muss das Signal als erstes wieder
ignoriert werden, weil es ansonsten eine Zeitspanne gibt, in der der
Signal-Handler mehrfach aufgerufen werden kann, und dann stirbt der
Task-Server. Forçierbar z.B. mit:
for i in {1..100}; do
kill -ALRM <PID-des-Task-Servers>
done
G. Richardson [Wed, 23 Dec 2015 11:13:00 +0000 (12:13 +0100)]
Beim Editieren von Customer/Vendor Name in title
Den displayable Name immer im Title-Bereich anzeigen, damit man direkt
sieht, um welchen Kunden / Lieferanten es geht, auch wenn man einen der
Tabs auf hat.
G. Richardson [Mon, 21 Dec 2015 15:38:07 +0000 (16:38 +0100)]
Lagerberichte auf shippingdate statt itime umgestellt
Die beiden Lagerberichte Lagerbestand und Lagerbuchungen prüfen auf
itime statt auf shippingdate. Normalerweise sind diese beiden Daten
identisch (bis auf den Zeitanteil von itime), da man bei den meisten
Lagerbewegungen kein vom aktuellen Tag abweichendes Lagerdatum angeben
kann. Beim CSV-Import von Lagerbuchungen, z.B. für die Inventur, kann
man aber sehr wohl ein abweichendes Lagerdatum angeben, dies wurde bei
den beiden Berichten aber bisher nicht berücksichtigt. Daher wurde dies
jetzt umgestellt.
Moritz Bunkus [Thu, 17 Dec 2015 10:56:09 +0000 (11:56 +0100)]
FCGI: Prozess nach Request beenden, falls belegter Speicher größer als konfigurierbares Limit
Perl gibt Speicher nicht wieder ans Betriebssystem zurück. Um zu
erreichen, dass nach einigen sehr speicherintensiven Aktionen der Server
nicht zu swappen anfangen muss, kann der Administrator nun in der
Konfigurationsdatei Limits für den Speicherverbrauch definieren.
Werden diese Limits erreicht, so beendet sich der aktuelle
Prozess. Diese Prüfung wird erst nach vollständiger Abarbeitung eines
Requests durchgeführt. Der FCGI-Manager startet dann bei der nächsten
Anfrage automatisch einen neuen Prozess.
G. Richardson [Tue, 15 Dec 2015 11:35:34 +0000 (12:35 +0100)]
Bei Kunden/Lieferanten Recht customer_vendor_all_edit prüfen 2
Nachschlag zu 826f6eb2b3e , das Wichtigste wurde vergessen.
Beim Öffnen / Verändern / Speichern von Kunden prüfen, ob Verkäufer mit
Bearbeiter übereinstimmt, wenn Benutzer nicht das Recht
customer_vendor_all_edit hat.
Bernd Bleßmann [Mon, 14 Dec 2015 11:27:46 +0000 (12:27 +0100)]
Csv-Import: Report nicht laden, wenn keine Report-Id vorhanden ist.
Eine nicht vorhandene Report-Id führte vorher zu einem Syntax-Fehler im
Template, was wiederum dazu führte, dass der Spinner nicht aufhörte zu spinnen.
G. Richardson [Fri, 11 Dec 2015 13:48:48 +0000 (14:48 +0100)]
Rechnungstab mit Buchungen ausblenden je nach Recht
nur Leute mit FiBu-Rechten (general_ledger) sollen auch den Buchungstab
aufmachen können. Bisher tauchte der Tab immer auf aber war leer, wenn
man das Recht nicht hatte.
G. Richardson [Fri, 11 Dec 2015 13:21:13 +0000 (14:21 +0100)]
Bei Kunden/Lieferanten Recht customer_vendor_all_edit prüfen
Wenn man das Recht hat, nur eigene Kunden/Lieferanten (wo man selber der
Verkäufer ist) zu bearbeiten:
Bisher war es noch möglich Kunden und Lieferanten zu öffnen und zu
bearbeiten, wenn man die Datenbank-ID kannte. Jetzt wird nach dem Laden
noch geprüft, ob Benutzer und Verkäufer übereinstimmen.
Es gibt auch eine Fehlermeldung beim Speichern, wenn man nicht selber
als der Verkäufer eingetragen wird, standardmäßig ist das Verkäuferfeld
derzeit nämlich leer. Ansonsten wäre der Kunde nach dem Speichern sofort
nicht mehr erreichbar.
Wenn man nicht das Recht hat, alle Kunden / Lieferanten anzuzeigen / zu
bearbeiten, dann sollen die auch nicht vom Picker auswählbar / anzeigbar
sein. Im neuen Ordercontroller mit Picker kann man dann auch nur die
eigenen Kunden auswählen.
Bei Verkauf->Berichte->Kunden ist dieser Filter auch aktiv, aber nicht bei
den alten Belegmasken mit Kundendropdown / Suchfeld.
Wenn der Bearbeiter nur die eigenen Belege sehen soll, bzw. die Belege,
wo er als Verkäufer eingetragen ist, also das Recht "sales_all_edit"
nicht hat, dann sollen auch die angezeigten Aufträge im
FinancialControllingReport gefiltert werden.
Sven Schöling [Thu, 10 Dec 2015 12:21:24 +0000 (13:21 +0100)]
invoice_io.pl entfernt
sql_ledger hat versucht ein zentrales display_form zu halten. Das hat
aber in lx nur Probleme gemacht und weil Aufträge mehr und mehr
brauchten ist die invoice_io.pl als alternative reingekommen.
Mittlerweile bestand die aber nur noch aus Weichen für verschiedene
Belege, und war ausserdem by design unsafe (no strict refs).
Gleichzeitig fliegt auch das unsägliche if ($form->{display_form}) {
call_sub($form->{display_form}) } feature raus, was niemals jemand
benutzt hat.
Jan Büren [Thu, 3 Dec 2015 20:01:10 +0000 (21:01 +0100)]
convert_to_delivery_order um record_links auf item-Ebene erweitert
Bisher wurden nur die Belege verknüpft und nicht die einzelnen
Items. Analoge Implementierung wie bei convert_to_invoice.
Sinnvoll wäre ein Auslagern, dieser "zu ähnlichen" Verfahren in beiden
Fällen
Jan Büren [Wed, 2 Dec 2015 09:35:29 +0000 (10:35 +0100)]
io/select_item um optional part.notes erweitert
Standard: Konfigurierbar in Mandatenkonfiguration. Entsprechend Flag
für parse_template usw.
Einziger nicht optionaler Punkt: p.notes wird zusätzlich als Column in
retrieve_items geholt, kann ggf. auch noch optional geholt werden
Jan Büren [Wed, 2 Dec 2015 09:12:06 +0000 (10:12 +0100)]
retrieve_items in IR.pm bzgl. notes überarbeitet
notes wurde mit verschiedenen Aliasen (longdescription, partnotes)
geholt. In IS.pm sind diese Einträge nicht vorhanden. Die IR->retrieve_item
wird auf den ersten Blick auch nur für die $form->{item_list} verwendet,
die selbst in der ir.pl keine Verwendung für die beiden alten Aliase hat.
Jan Büren [Wed, 2 Dec 2015 08:54:04 +0000 (09:54 +0100)]
Abteilungsname für DATEV-Checks bei Einkaufsrechnungen setzen
If we filter DATEV transaction via department we need also a name for export.
At least if we have DATEV checks activated and force a valid department in
DATEV filter (currently customer extension)
Jan Büren [Wed, 2 Dec 2015 07:35:28 +0000 (08:35 +0100)]
Überflüssige Variable entfernt
$form->{webdav} wird seit dem Tabbing-Zeitalter nicht mehr als
Kennzeichen für webdav benötigt. Alle anderen Überprüfungen auf
webdav finden in den Templates schon lange sinnvollerweise
mit INSTANCE_CONF.get_webdav statt.
Bernd Bleßmann [Mon, 30 Nov 2015 16:27:22 +0000 (17:27 +0100)]
Einlagern: Bei einem Fehler die eingebenen Werte in der Maske wieder herstellen
Zwei Dinge:
Zum einen einen $::form->error abfangen und Fehler auch mit flash ausgeben,
wenn das Speichern der Lagerbewegung fehl schlägt (passiert z.B. wenn man ein
falsches Datumsformat beim Mindesthaltbarkeitsdatum eingibt).
Zum anderen bei einem Fehler dem redirect die ursprünglich eingegebenen Werte
wieder mitgeben, damit man den Fehler korrigieren und dann einlagern kann.