Jan Büren [Sun, 3 Mar 2019 15:47:33 +0000 (16:47 +0100)]
SelfTest Transaction zum commit von gerade: weniger false positives
Bei Buchungen, bei denen nicht ein RecordLink existiert (GL),
gelöscht, ist es nicht mehr möglich sauber auf verwaiste Einträge zu
testen. Entsprechend min(itime) from bank_transaction_acc_trans als
Schwellenwert für Startpunkt der Prüfung von bank_transactions.transdate
genommen
Jan Büren [Sun, 3 Mar 2019 15:16:36 +0000 (16:16 +0100)]
BankTransaction: want a whole lotta test
neuer Test full_workflow in bank_transactions
1.
Verbucht drei Verkaufsrechnungen nacheinander, davon
eine mit Zahlungsbedingung Skonto nach ZB. Zusätzlich
zu den Nebenbücher werden acc_trans Einträge kontrolliert,
sowie der gesetzte RecordLink.
2.
Da die Bankbewegung komplett aufgeht, wird diese abgeglichen
und die Zustände danach kontrolliert.
3.
Leider war die Verbuchung komplett Murks, weswegen die
Ursprungszustand vor 1. wiederhergestellt (neues Funktion
Kontoauszug-Verbuchung rückgängig machen)
Bonus-Level:
Damit andere Anwendungen / Schnittstellen, DB-Admins nicht
auf die Idee kommen an der Hilfstabelle bank_transaction_acc_trans
zu schrauben, entsprechend einen weiteren SelfTest geschrieben
Jan Büren [Sat, 2 Mar 2019 09:23:16 +0000 (10:23 +0100)]
BankTransaction Die richtigen (erwarteten) Parameter von amount an pay_invoice
Stellt den vorherigen Zustand im Controller wieder her, der über
Fallunterschiede vom Invoice-Typ Vorzeichen verschoben hat.
Tests laufen damit erstmal durch. Ferner kann und muss es mehr
als 2 acc_trans_ids als Rückgabe von pay_invoice geben
Jan Büren [Sat, 2 Mar 2019 07:40:50 +0000 (08:40 +0100)]
Manuelle Zahlungen verbieten, falls mit Kontoauszug verknüpft.
Falls die Änderbarkeit von Zahlungen nicht auf niemals steht,
entsprechend Überbuchen / manuelles Ändern verbieten.
Der Fehlertext weißt zusätzlich auf die Funktion im Bankbewegungs-Bericht hin
Jan Büren [Fri, 1 Mar 2019 13:55:06 +0000 (14:55 +0100)]
Dialogbuchungen aus Bankbewegungen teilweise Verbuchungen erlauben
Da vorher nur komplette Bankbewegungen verbucht werden konnten,
war es nicht sinnvoll Teilbeträge im Dialog zu buchen.
Das Verfahren ist jetzt geändert und übergeben wird der aktuelle
Rest-Betrag der Bankbewegung
Jan Büren [Fri, 22 Feb 2019 09:35:32 +0000 (10:35 +0100)]
Neue Helper-Tabelle SL/DB/BankTransactionAccTrans.pm
Hintergrund: Verbuchte Bankbewegungen sind nur über
einen löschbaren RecordLink aktuell zuordenbar.
Das macht ein verlässliche Aussage über die Verbuchungen
der Bankbewegung schwierig. Besser wäre es eine
Tabelle reconciliation_links direkt bei der Verbuchung zu füllen
und die gesetzten Constraints so zu lassen (ER-Fehler mit
aussagekräftigerer Fehlerwarnung an den Nutzer) ....
Da die Bankverbuchungen seit 66d468b09 (2016) in einer
Transaktion laufen, wird über record_link und itime eine
Rekonstruktion der Zusammenhänge für die alten Einträge versucht herzustellen.
Wichtig: Dieser Commit ist Vorbedingung für das Neuverbuchen
von importierten Bankbewegungen. Zusätzlich beißt sich das mit
der Anforderung das Zahlungen manuell vom Anwender geändert werden
können (s.a. hierzu c923fff436).
Jan Büren [Wed, 20 Feb 2019 10:29:30 +0000 (11:29 +0100)]
SL::DB::BankTransactions(linked_invoices): Returns an array of record objects
Anstatt nur die Namen der Belege werden jetzt die Beleg-Objekte
zurückgegeben. Einziger Aufruf der Methode beim ReportGenerator in
Controller::BankTransactions. Die Stelle entsprechend angepasst
Man kann nun Mitarbeiter*innen zu Projekten zuordnen, indem man sie in
den Projektstammdaten hinzufügt.
Ist eine Mitarbeiter*in zu einem Projekt zugeordnet, so darf sie alle
Rechnungen ansehen, die über die Projektnummer der Rechnung (nicht der
Positionen) dem Projekt zugeordnet sind, auch dann, wenn sie nicht das
allgemeine Recht zum Erstellen und Ansehen von Rechnungen hat.
Verändern oder Ausdrucken der Rechnungen ist nicht gestattet.
Die Verwaltung dieser Projektberechtigungen ist über ein neues
Gruppenrecht eingeschränkt.
Betrifft Verkaufsrechnungen, Verkaufsgutschriften und Debitorenbuchungen.
Ansonsten werden die cvars nicht übernommen.
Außerdem ist es konsistenter, da bei allen anderen
Workflow-Aktionen auch immer gespeichert wird (Rechnung oder LS).
Jan Büren [Wed, 13 Feb 2019 09:41:45 +0000 (10:41 +0100)]
generische E-Mail-Adresse für Lieferscheine
Ähnlich wie bei Verkaufsrechnungen gibt es generische
Empfänger für Lieferscheine beim E-Mail-Versand.
Die jetzige Konfiguration (nicht änderbar) entspricht
dem Wert Stammdaten und Ansprechpartner in CC.
Ist eine Stammdaten-Mail und ein Ansprechpartner definiert,
bzw. ausgewählt wird der Ansprechpartner in CC gesetzt und
die vorbelegte Anrede ist 'generisch'
Jan Büren [Mon, 4 Feb 2019 13:04:29 +0000 (14:04 +0100)]
Rechnungsversand E-Mail-Body
Falls die generische E-Mail-Adresse verwendet wird, sollte auch
die generische Anrede hinterlegt sein, selbst wenn ein Ansprechpartner
noch in CC gesetzt wird.
Jan Büren [Wed, 23 Jan 2019 10:35:49 +0000 (11:35 +0100)]
Ansprechpartner um boolean Hauptansprechpartner erweitert
Entsprechend mit einigen Attributen für den Export von Kundenstammdaten
hinzugefügt.
Hintergrund: Ansprechpartner-Export gibt nur die Liste aller Ansprechpartner.
Das Feld Kontakt (in der Tabelle Kunde) war wahrscheinlich der Vorgänger
für die Ansprechpartner-Logik. Das ist etwas wenig, wenn man noch
E-Mail, Telefon usw. personenbezogen unterbringen will. Deshalb die
Ergänzung für diesen Bericht.
Jan Büren [Fri, 18 Jan 2019 10:31:35 +0000 (11:31 +0100)]
Ergänzung zu a3b8cfa7b7546 (Mahnungen konfigurierbar machen)
- bessere Fehlerbehandlung -> send_mail läuft schon in einer Transaktion
Von daher mit die hart aussteigen
- Die Signatur des E-Mail-Versenders sollte dann auch zur E-Mail-Adresse
passen, entsprechend backup vars erstellt vor dem Aufruf von Form::create_signature
Jan Büren [Wed, 19 Dec 2018 09:43:02 +0000 (10:43 +0100)]
Zahlungserinnerung an Rechnungsadresse schicken - Weiche für Absender
Mail-Absender aus defaults.dunning_creator ableiten.
Falls die Rechnungsadresse E-Mail gesetzt ist, diese als Empfänger nehmen ansonsten die
globale E-Mail des Kunden (abwärtskompatibel).
Erweiterung um Fehlerbehandlung mit Hinweis an der Oberfläche, falls keine Sender oder
Empfänger-Adresse gefunden wird
Jan Büren [Mon, 14 Jan 2019 13:37:36 +0000 (14:37 +0100)]
fixt: #345 Mahnungsersteller im Ausdruck konfigurierbar machen
Im Menüpunkt Mahnungen konfigurieren, kann man nun wählen, ob
der aktuelle Mitarbeiter für die Mahnung/Zahlungserinnerung gesetzt ist
oder der ursprüngliche Mitarbeiter/Ersteller der Rechnung
Jan Büren [Fri, 14 Sep 2018 09:48:16 +0000 (11:48 +0200)]
Rechnungsversand per E-Mail
Falls bei dem Kunden eine E-Mail-Adresse für den
Rechnungsversand hinterlegt ist, so hat diese Priorität
vor der allgemeinem Rechnungsadresse.
Als visuelle Hilfe, wird aus dem Titel 'Empfänger' der
Titel 'Rechnung an:'.
Logik normale Rechnung:
1.) Die Adresse des Ansprechpartners hat Priorität vor allen anderen Adressen (bleibt)
2.) Falls kein Ansprechpartner -> Prüfen auf Rechnungsadresse (neu)
3.) Falls immer noch keine E-Mail -> Prüfen auf generische Mail des Kunden (bleibt)
Logik wiederkehrende Rechnung:
Falls eine Rechnungsadresse gesetzt ist, wird diese schreibgeschützt angezeigt.
Weitere Adressen können wie bisher auch über die Auswahl des Ansprechpartners oder
per freier Eingabe zusätzlich definiert werden
Jan Büren [Fri, 14 Sep 2018 08:43:02 +0000 (10:43 +0200)]
Stammdaten -> Kunden um Textfelder Rechnungsmail und Herkunft personenbezogener Daten erweitert
i)
Die Rechnungsmail ist die generische E-Mail des Kunden, welche die
Rechnung in der Regel bearbeitet (buchhaltung@, einkauf@).
ii)
Aufgrund der DSGVO ist es im Zweifel sinnvoll den Erstkontakt
des Kunden zu dokumentieren (Messe xyz, Telefon-Aktion beta, ...)
Die beiden Felder sind als Suchfeld anhakbar.
Sven Schöling [Fri, 26 Oct 2018 10:52:36 +0000 (12:52 +0200)]
PTC: Fehlerhafte ungerundete Berechnung von grossamount
Bei Rechnungen mit sehr vielen sehr kleinen Positionen wurde die
Rundungsfehlerakkumulation _nur_ in den finalen netamounts
berücksichtigt, nicht aber in den daraus berechneten grossamounts was zu
Cent-Abweichungen geführt hat.
Bernd Bleßmann [Wed, 12 Dec 2018 15:53:28 +0000 (16:53 +0100)]
PTC: nicht einfach die Rundungsgenauigkeiten erhöhen …
… das verschiebt das Problem auf jeden Fall nur.
Siehe auch Ticket #82.
Diser commit macht den Teil
"Ferner Rundungsgenauigkeiten für wiederkehrende Rechnungen erhöht." aus
commit 075f64d61e999506517a304022525d83c29e6e3e rückgängig.
Andreas Rudin [Sun, 9 Dec 2018 18:20:18 +0000 (19:20 +0100)]
Fixt #350 Fehler p.income_accno_id does not exist
Die mehrmals in RP.pm vorkommenden Zeilen
'JOIN chart c on (p.income_accno_id = c.id)'
und
'JOIN chart c on (p.expense_accno_id = c.id)'
erzeugten einen Fehler, da es in der Tabelle parts
keine solchen Spalten gibt, sondern in taxzone_charts
Deshalb jeweils die Zeile
'JOIN taxzone_charts t ON (p.buchungsgruppen_id = t.id)'
vorher eingefügt und jeweils p.income bzw. p.expense durch
t.income bzw. t.expense ersetzt.
Der Fehler trat auf bei 'Berichte -> Projektbuchungen'
sowie bei der GUV und BWA mit ausgewähltem Projekt.
Jan Büren [Mon, 3 Sep 2018 14:52:00 +0000 (16:52 +0200)]
Fixt #352 Beim Drucken mehrerer Rechnung aus dem Bericht heraus wird der Rabatt falsch berechnet
Hotfix für die zweifache Berechnung vom Rabatt (Marge bei Berichten falsch) erstellt.
Hintergrund: Der alte Code erwartet keine vorformatierten Werte, wird aber bei
periodischen Jobs noch zwingend aufgerufen (sellprice mit fxsellprice in MassPrintCreatePDF überlagert)
Ferner Rundungsgenauigkeiten für wiederkehrende Rechnungen erhöht.
Jan Büren [Thu, 29 Nov 2018 13:45:33 +0000 (14:45 +0100)]
Fixt #348 DatevExport kommt mit bestimmten Zeichen im Buchungstext nicht klar
In der Mandantenkonfiguration befindet sich jetzt eine Einstellung,
welche die Kodierung des DATEV-Exports steuert. DATEV erwartet CP1252.
kivitendo kann diese Kodierung so vom kivitendo Nutzer einfordern, alternativ nicht
vorhandenen Zeichen versuchen zu ersetzen oder die DATEV-Erwartung ignorieren
und UTF-8 liefern. Voreingestellt ist CP1252 mit Ersetzungen
Moritz Bunkus [Mon, 26 Nov 2018 14:20:47 +0000 (15:20 +0100)]
LC_CTYPE-Locale auf eine UTF-8-Locale setzen
Beim Starten des Perl-Interpreters wird die Locale anhand von
Umgebungsvariablen wie `LC_CTYPE`, `LC_ALL` und `LANG`
gesetzt. Unter (F)CGI sind diese normalerweise leer, wodurch als
Locale die POSIX-Locale (`C`) gewählt wird — und die hat nur ASCII als
Zeichensatz.
Die iconv-Funktion scheint nun nicht transliterieren zu können, wenn
ASCII als Zeichensatz ausgewählt ist. Sie macht dann z.B. aus `ć` ein
`?` anstelle von `c`.
Beim Start der Programme wird nun `LC_CTYPE` auf eine sinnvoller
Locale gesetzt. Dies ist `de_DE.UTF-8` oder `en_US.UTF-8`, falls
erstere nicht verfügbar ist. Die Sprache ist hierbei irrelevant, da
nur `LC_CTYPE` gesetzt wird und und nicht z.B. auch `LC_MESSAGES` oder
`LC_TIME`.
Dies ist Voraussetzung dafür, das #348 gefixt werden kann.
Bernd Bleßmann [Fri, 23 Nov 2018 16:25:50 +0000 (17:25 +0100)]
Part-Controller: Normalisieren nach Parsen der Form und nicht als run_before
Das Problem enstand durch commit 2e97532c88dacf9523576df4028b6f7df5967ea8
"Fixt #349 (Normalisierung Artikel) - normalize_text_blocks nach Part-Controller
migriert"
normalize_text_blocks greift auf $self->part zu, welches beim Neuanlegen
noch nicht existiert, wenn normalize_text_blocks als aller erstes durch
run_before aufgerufen wird. Danach wurde init_part aufgerufen, welches
aber bei einem neue Artikel den part_type braucht, um part zu erzeugen.
Das ist aber nicht nötig, da das part in den action_add_xxx-Methoden
später erzeugt wird.
Ausserdem muss normalize_text_blocks z.B. auch nicht bei den Picker-Actions
aufgerufen werden.
Also normalize_text_blocks nur nach dem Parsen der Form aufrufen.