Sven Schöling [Mon, 22 Feb 2016 15:08:16 +0000 (16:08 +0100)]
Klasse für das Kivitendo Logo
Weil immer wieder Leute meinen Sie müssen das Programm mit Ihrem
Firmenlogo versehen (was nur natürlich ist, schließlich macht man das
auch mit Windows, Word, Excel, Outlook, Firefox und all den anderen
Programmen die man täglich so benutzt, damit man genau ein Icon 26x auf
dem Desktop liegen hat) hat das Logo jetzt eine Klasse damit man es in
einem Custom CSS ändern kann. Beispiel:
img.kivitendo-logo {
display: inline-block;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: url(../../image/<new_logo.png>) no-repeat;
height: 183px; /* Höhe des neuen Logos */
width: 356px; /* Breite des neuen Logos */
padding-left: 356px; /* Breite des neuen Logos */
}
Moritz Bunkus [Mon, 22 Feb 2016 10:56:14 +0000 (11:56 +0100)]
Freies Fälligkeitsdatum: richtige Variable an Berechnungsroutine weiterreichen
Die Berechnungsroutine nutzt ein gesetztes Fälligkeitsdatum, wenn eine
freie Festlegung des Datums gewünscht ist. Leider heißt das Feld in der
Form »duedate« und nicht »due_due«. Der Effekt war, dass die
Berechnungsroutine dachte, es wäre kein Fälligkeitsdatum
gesetzt. Dadurch wurde in der Maske bei einem freien Fälligkeitsdatum
immer das Rechnungsdatum verwendet.
Moritz Bunkus [Mon, 22 Feb 2016 10:45:18 +0000 (11:45 +0100)]
Sornorechnungen löschen können
Stornorechnungen (Rechnungsnummern »Storno zu 12345«), nicht aber
stornierte Rechnung (Rechnungsnummer »12345«), sollten vom Frontend her
löschbar sein, sofern die Mandantenkonfiguration dies
zulässt. Andernfalls hätte man keine Chance, eine fälschlicherweise
stornierte Rechnung wieder zu ent-stornieren.
Der Backendcode kann Stornorechnungen bereits seit langem richtig
löschen. Dadurch wird die stornierte Rechnung auch automatisch wieder
geöffnet.
Bernd Bleßmann [Fri, 19 Feb 2016 11:38:56 +0000 (12:38 +0100)]
Angebote/Aufträge: Beim "als neu Speichern" Wechselkurs richtig übernehmen.
Vorher ging die Formatierung kaputt, wenn zum aktuellen Datum (das des neuen
Belegs) noch kein Wechselkurs hinterlegt war.
Generell ist hier die Handhabung schlecht, denn man kann beim
"als neu Speichern" keinen neuen Wechselkurs eingeben, falls für den aktuellen
Tag noch keiner hinterlegt ist, sondern es wird der des alten Belegs
gespeichert.
Gleiches gilt beim Speichern des Belegs mit neuem Datum.
Bei PROCESS bleiben Macro variable "typ", "title" und "message" für den Rest
des Templates gesetzt, bzw überschreiben gesetzte Template Variable,
aufgefallen z.B in ic/form_header.html :
Dort gibt es die HIDDEN Variable "title",
die dann vom Macro beim letzen Durchlauf auf Ok bzw (Übersetzung von Ok) gesetzt wird
Es gibt noch ein paar mehr template files (7), in denen PROCESS verwendet wird,
ob es dort Auswirkungen hat ist noch zu prüfen
Jan Büren [Fri, 12 Feb 2016 12:40:09 +0000 (13:40 +0100)]
SuSa Abteilungsauswahl liefert SQL-Fehler
Im Nachgang zu b8fee3fc (dpt_trans aus RP.pm entfernen) - Vergessene
dpt_where weiter entfernt, sodass die SuSa nach Abteilungsauswahl
wieder geht.
Getestet mit Soll- und Ist-Haken bei SuSa
Moritz Bunkus [Tue, 9 Feb 2016 10:29:16 +0000 (11:29 +0100)]
HTML-zu-LaTeX: diverse Sonderfälle bzgl. Zeilenumbrüchen behandeln
Zeilenumbrüche an verschiedenen Stellen sorgten dafür, dass LaTeX die
Fehlmerldung »There's no line to end here« ausspuckte. Die folgenden
Sonderfälle werden nun abgefangen und in \vspace*-Anweisungen
umgewandelt:
✓ Zeilenumbrüche direkt am Anfang des Texts
✓ Zeilenumbrüche direkt am Anfang eines Absatzes
✓ Zeilenumbrüche nach Umgebungen wie Strich- und Aufzählugnslisten
Zusätzlich werden Zeilenumbrüche am Ende des Texts schlicht entfernt.
Jan Büren [Wed, 3 Feb 2016 11:00:57 +0000 (12:00 +0100)]
special chars: zero-width-space (U+200b) escapen
Ferner Variablen-Ersetzung für registered TM und Copyright-Zeichen verbessert.
Falls man ein Leerzeichen nach dieser Variable hat, wurde diese nicht gedruckt
Jan Büren [Tue, 26 Jan 2016 07:34:29 +0000 (08:34 +0100)]
Beschreibung für Korrekturen im Hauptbuch erweitert
Falls der Selftest fehlende Steuerbuchungen findet, können diese
mit Korrekturen im Hauptbuch bereinigt werden. Der Vollständigkeit halber
hier eine weitere Beschreibung für diese Massnahmen (fehlerhafter Import von
Buchungen) angegeben.
Jan Büren [Tue, 26 Jan 2016 07:24:36 +0000 (08:24 +0100)]
Weitere Selftests
- Kreditoren Haupt und Nebenbuch Netto-Prüfung (ap.netamount == acc_trans.amount)
- Für alle Taxkeys <> 0 muss auch eine Steuerbuchung in acc_trans vorhanden sein
Jan Büren [Fri, 22 Jan 2016 10:11:42 +0000 (11:11 +0100)]
SelfTest -> Transaction. Test verbessert (ar.amount invoice.amount)
Summe laut Verkaufsbericht gleich Summe der Rechnungen (ar).
Der Test schlägt fehl, wenn es Debitorenbuchungen gibt, da hier keine
invoice Einträge gemacht werden. Entsprechend die Abfrage verbessert.
Die Einstellungen in der Benutzerkonfiguration, ob die Details per
default angezeigt werden sollen, wurde nur beim initialen Aufbau der
Einkaufs- und Verkaufsbelegmasken berücksichtigt. Da der Wert aber nicht
in der dafür vorgesehenen Hidden mitgeschliffen wurde, war die
Einstellung ab dem zweiten Maskenaufbau dahin.
Grund ist, dass die Hidden in form_header() ausgegeben wird, bevor in
display_row() die dazugehörige Einstellung aus der Benutzerkonfiguration
geladen wird.
Gegenmittel: In den Einstiegspunkten zum Hinzufügen und Bearbeiten von
Belegen (add() respektive edit()) bereits die Einstellung aus der
Benutzerkonfiguration laden und so der Hidden zur Verfügung stellen.
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.