Aufträge sollten nicht an die Lieferadresse, sondern an die Stammdaten-Adresse
gehen. Zudem sind seit commit b6213d3539ccd179cd1f21b9afc54b8de8970774
"Einkauf/Verkauf: Lieferadressenfelder nie aus Stammdaten vorbelegen" die sipto-
Felder leer, wenn keine Lieferadresse angegeben ist.
jQuery kann aus HTML-Strings DOM-Objekte bauen:
$("<p>stuff</p>"). Beginnt der HTML-String mit Leerzeichen, so croakt
jQuery daran. Daher bei den betroffenen Funktionen, die immer auf einem
so gebauten DOM-Objekt hantieren, das Ziel-Argument um führende
Leerzeichen bereinigen.
G. Richardson [Wed, 17 Jun 2015 11:13:09 +0000 (13:13 +0200)]
Banktransactions Import - bessere Fehlermeldung wenn BLZ nicht stimmt
Beim Import wird sowohl Kontonummer oder IBAN als auch die BLZ geprüft.
Für den Fall, daß ein Konto anhand der importierten Kontonummer gefunden
wurde, die importierte BLZ aber nicht mit der dazu gespeicherten BLZ
übereinstimmt, gibt es nun eine aussagekräftigere Fehlermeldung.
Wahrscheinlich ist in diesem Fall die BLZ in den Bankkonteneinstellungen
falsch und muß dort aktualisiert werden.
Zumindest für den Fall, daß die IBAN übergeben wird, könnte man auf die
BLZ Prüfung wahrscheinlich auch verzichten.
G. Richardson [Fri, 12 Jun 2015 12:49:42 +0000 (14:49 +0200)]
Rechte für Bankbewegungen in Bankerweiterung setzen
Als sinnvollen Default erhalten beim Upgrade Gruppen, die schon das
Recht für "Zahlungseingang, Zahlungsausgang, Kontenabgleich" (cash)
besitzen, auch alle Rechte für die Bankerweiterung, also die Arbeit mit
den importierten Bankbewegungen.
Moritz Bunkus [Wed, 3 Jun 2015 12:35:23 +0000 (14:35 +0200)]
SL::DB::Helper::TransNumberGenerator: Belegnummern einmal direkt auslesen
Es werden alle vorhandenen Belegnummern benötigt. Diese wurden bisher so
ausgelesen, dass die Belege vom Rose-Manager via ->get_all komplett
geladen wurden und dann jeweils die Belegnummernspalte davon genommen
wurde. Das ist sehr langsam, vor allem da es potenziell sogar gleich ein
zweites Mal gemacht wurde.
Die Umstellung hier nutzt dafür ein direktes SQL-Query und umgeht Rose
dafür. Außerdem werden die nur einmal ausgelesen.
Moritz Bunkus [Wed, 3 Jun 2015 10:46:00 +0000 (12:46 +0200)]
SL::DB::Helper::TransNumberGenerator: Tabellen und Zeilen locken
Die Tabelle, aus der die Liste der bereits benutzten Belegnummern
ausgelesen wird, muss exklusiv gelockt werden, um zu verhindern, dass
danach zwischen dem Auslesen und der Vergabe der neuen Belegnummer eine
andere DB-Verbindung dasselbe macht und dieselbe Nummer verwendet.
Dieses Locking muss daher vor dem Auslesen der Daten geschehen.
Weiterhin müssen die Zeilen in den Nummernkreistabellen (defaults
bzw. business) gelockt werden. Hier reicht aber das Locking der
entsprechenden Zeile.
Beide Locks müssen analog zu SL::TransNumber gehandhabt werden, um einen
potenziellen Deadlock zu vermeiden, sprich zuerst die Belegtabelle,
danach die Zeile in der Nummernkreistabelle.
Moritz Bunkus [Wed, 3 Jun 2015 09:33:47 +0000 (11:33 +0200)]
SL::TransNumber: Belegtabelle vor Auslesen locken
Die Tabelle, aus der die Liste der bereits benutzten Belegnummern
ausgelesen wird, muss exklusiv gelockt werden, um zu verhindern, dass
danach zwischen dem Auslesen und der Vergabe der neuen Belegnummer eine
andere DB-Verbindung dasselbe macht und dieselbe Nummer verwendet.
Dieses Locking muss daher vor dem Auslesen der Daten geschehen.
Moritz Bunkus [Wed, 3 Jun 2015 09:15:56 +0000 (11:15 +0200)]
Task-Server: vor Schlafen aufräumen
Dabei werden unter Anderem potenziell noch laufende Transaktionen
beendet und zumindest das Standard-DBH (nicht das von Rose)
geschlossen. Dadurch sollten alle Locks, die durch die Jobs
evtl. entstanden sind, wieder aufgelöst worden sein.
Bernd Bleßmann [Mon, 1 Jun 2015 18:53:10 +0000 (20:53 +0200)]
HTML::Util: "nbsp" als HTML-Entity durch " " (space) ersetzen.
"nbsp" wird hier zu space, obwohl U+00A0 (non-breaking space) richtig wäre.
non-breaking space kann allerdings zu schwer zu findenden Fehlern zum Beispiel
beim CSV-Export führen, wenn ein Benutzer dieses nicht sichtbare Zeichen dann
per cut-and-paste irgendwo einfügt.
Sven Schöling [Mon, 1 Jun 2015 14:07:32 +0000 (16:07 +0200)]
ClientJS: Values nicht trimmen
Wenn numerische Werte (also IVs und NVs) per Regex getrimmt werden,
wird dabei das POK Flag gesetzt, das anzeigt, dass der Scalar auch ein
valider String ist.
JSON kann dann nicht mehr unterscheiden welcher Typ der Scalar ist, und
nimmt String. Das führt aber dazu, dass _alle_ Zahlen als Strings
encodiert werden.
Auch das wäre prinzipiell kein Problem, ausser dass Javascript keine
separaten Operatoren für Strings und Zahlen hat.
json.val1 + json.val2
wird also immer als concat aufgefasst und nicht als Addition, und
json.val ? true : false
ist immer true, weil "0" und "1" beide true in Javascript sind.
Bernd Bleßmann [Wed, 27 May 2015 12:56:03 +0000 (14:56 +0200)]
Ausdruck Erzeugnisse mit Stückliste und Lieferantenartikelnummer repariert.
Betraf wohl auch andere Felder zu Artikeln, die vor der Aufbereitung des
TEMPLATE_ARRAYS aus der DB gelesen wurden. Diese werden jetzt richtig in
TEMPLATE_ARRAYS einsortiert.
Um auch die Einträge für Erzeugnis-Teile und Warengruppen (beim Gruppieren
der Waren) in den Druckvorlagen unterscheiden zu können, gibt es ein Feld
'entry_type', dass die Werte 'normal', 'partsgroup', 'assembly-item' und
'assembly-item-partsgroup' annehmen kann.
Bernd Bleßmann [Sun, 24 May 2015 10:04:10 +0000 (12:04 +0200)]
Listenpreis in Belegen u. Ausdruck richtig formatieren und nicht mehr parsen.
listprice wird in den Belegen nur angezeigt. Man kann ihn nicht eingeben und
auch nicht speichern. Deshalb wird er jetzt nur zur Ausgabe formatiert
(io.pl:display_row, OE.pm:order_details, IS.pm:invoice_details), aber nicht
formatiert gespeichert.
io.pl:display_row schreibt ihn auch unformatiert als hidden in die Form.
Das war wohl so gedacht, aber nicht konsequent eingehalten und auch von mir an
einigen Stellen "verschlimmbessert" worden.
Evtl. sollte der listprice gar nicht als hidden mitgeschliffen werden, sondern
immer aus der DB gelesen werden.
G. Richardson [Wed, 6 May 2015 15:59:15 +0000 (17:59 +0200)]
Keine Weiche für mt940 in SL/Controller/CsvImport.pm mehr
Stattdessen ein eigener Controller BankImport, der die Daten über einen
neuen Helper in SL/Helper/MT940.pm (wo aqbanking-cli aufgerufen wird)
nach CSV konvertiert.
mt940 ist nun kein eigener Importtyp vom CSV-Import mehr. Stattdessen
wird nach der mt940 Upload-Maske ein CSV-Import-Profil geladen und
direkt ein Redirect auf den CSV-Import vom Typ Bankbewegungen
ausgeführt. Durch setzen des Parameters "force_profile" und ein Redirect
auf CsvImport/test statt CsvImport/new wird der Import auch direkt im
"Test und Vorschau"-Modus ausgeführt und der Benutzer sieht direkt das
Ergebnis. Ab hier verhält sich der Import also genau so, als ob der
User direkt eine CSV-Datei hochgeladen hätte.
Ein Nachteil der Umstellung ist, daß die CSV Profildefaults nun nicht
mehr auf den Typ "mt940" reagieren können und auf ein existierendes
CSV-Profil zurückgreifen müssen. Beim ersten MT940 Import wird bei
fehlen dieses Profils eine Meldung an den User gegeben.
Man könnte ein Referenzprofil per Update einspielen, allerdings sind die
Profile an Logins gebunden, und man bräuchte dafür ein globales Profil
und müßte hierfür generell die Profile erweitern.
Sven Schöling [Wed, 6 May 2015 13:32:28 +0000 (15:32 +0200)]
POSIX: Autoexport aller Funktionen vermeiden.
use POSIX; exportiert den kompletten Funktionsumfang in das package. Das
alleine ist schon nicht schön, allerdings ändert sich die Liste der
exportierten Funktionen je nach POSIX Version.
POSIX 1.47 bringt nun mathematische Funktionen, unter anderem round und
ähnlich oft benutzte Schlüsselwörter. Zu unsicher das alles zu testen.
Einfach nur das exportieren, was man haben will.
G. Richardson [Tue, 28 Apr 2015 15:08:59 +0000 (17:08 +0200)]
Sammelcommit Bankerweiterung und Skonto
Überarbeitung der Bankerweiterung vom Stand Niclas, und Einführung von
Bezahlung mit Skonto (alter payment Branch). Mehr Details siehe
changelog.
* changelog
* Ungültige Bankkonten ausblenden
* Punktesystem in Hash %points ausgelagert
* format_amount beim Erstellen von Kreditorenbuchungen behoben
* Debug-Modus in manchen Templates für zusätzliche Tabellenfelder, muß im Template angeschaltet werden: [% SET debug=1 %]
Rechnung zuweisen:
* Filterdatum bei Rechnungszuweisung repariert
* bank_transactions vor reconciliation_starting_date ignorieren
* Rechnungen mit offenem Betrag < 1 Cent ignorieren
* Reihenfolge der Bankfelder in Tabelle angepasst
Bankbuchungen
* Sortierreihenfolge ist standardmäßig Neueste zuerst
* aqbanking Binary in configuration hinterlegen
acc_tran in acc_trans umbenannt in MetaSetup/ReconciliationLink
Kontenabgleich - EB- und SB-Buchungen ignorieren
Payment Helper mit Skontomodus und Skontoautomatik
neuer DB Helper zum Bezahlen von Rechnungsobjekten: pay_invoice
Drei Bezahlarten:
* ohne Skonto
* mit Skonto laut Zahlungsbedingungen
* Differenz als Skonto
Neue Helpermethoden rund um Rechnungen für Einkauf und Verkauf.
Für das automatische Verbuchen von Skonto muß für jeden Steuertyp ein
Skontoautomatikkonto für Verkauf oder Einkauf konfiguriert (bei Steuerschlüssel
0 und 1 beides).
Skontomodi und pay_invoice für SEPA umgesetzt
Beim Auswählen von Rechnungen für den SEPA-Lauf kann nun auch Skonto
berücksichtigt werden.
Berichte Bankbewegungen - Export repariert
Bankkonten - Validierung beim Speichern temporär ausgeschaltet
CsvImport bank transactions - show name of bank in preview
Csv-Import Bank transaction - join remote names
like for purpose, join remote_name and remote_name_1 into one field
Punktesystem in Hash pflegen, und die Regeln, die matchen,
protokollieren, wird aber noch nirgends angezeigt.
Zahlungsauswahl bei el. Kontoauszug
im Tooltip auch Skonto-Information anzeigen
beim Auswählen Dropdown mit Bezahltyp anzeigen
pay_invoice aus Helper nutzt transdate_to_kivitendo
Bericht Bankbuchungen - Name des Bankkontos in eigener Spalte anzeigen
Übersetzung für Kontenabgleich - Bank und Buchung vertauscht
Kontenabgleich - bei Vorschlägen Rechnungsnummer verlinken
Kontenabgleich - "nicht abgeglichen" als Default
Vorschläge Kontenabgleich - Beschriftung und Template Default
Bankerweiterung - in Tooltip Skonto nur bei Bedarf anzeigen
BankAccounts Upgrade - bestehende Konten auf obsolete false setzen
displayable_name für BankAccount
kann im Bankkonto select_tag als title_key statt label_sub verwendet
werden.
SEPA - Umstellung auf Bankkonten-Controller
Bankerweiterung - BankAccount Dropdowns mit displayable_name
statt label_subs
Bankerweiterung - Übersetzung korrigiert
bank_accounts mit obsolete NOT NULL und DEFAULT FALSE intialisieren
SEPA payment - noch offene SEPA-Überweisungen mit berücksichtigen
Beim SEPA-Einzug und der SEPA-Überweisung wurden beim offenen Betrag die
noch nicht geschlossenen SEPA Aufträge mit berücksichtigt. Dies wird
jetzt auch bei der Skonto-Erweiterung berücksichtigt.
Dies ist v.A. dann wichtig, wenn man eine Rechnung in mehreren Schritten
per SEPA-Überweisung bezahlen möchte, oder vielleicht von mehreren
Bankkonten aus.
Beim SEPA-Einzug kommt der Fall wohl eher nicht vor.
CSV-Import der Bankbuchungen nach Menü "Zahlungsverkehr" verschoben
Reihenfolge geändert, entspricht der üblichen Abarbeitungsfolge:
Import -> Verbuchen -> Abgleich
SEPA Export - kein "Differenz als Skonto" vorschlagen
bei SEPA Export soll immer Geld fließen, wenn noch ein Betrag offen ist,
der nicht bezahlt werden soll, muß dies außerhalb des SEPA-Exports
verbucht werden.
Nur die Optionen "ohne Skonto" ohne "mit Skonto nach ZB" machen Sinn.
BankTransaction - diverse Änderungen
* Punktesystem erweitert
* Kontonummer und IBAN vergleichen
* zutreffende Punkt-Regeln in Template im Debug-Modus anzeigen, als
Mouseover Tooltip in der Punktespalte
Kontenabgleich verbessert
* bei schon verknüpften Belegen kleine Abweichungen
(Rundungsungenauigkeiten im Subcent-Bereich) tolerieren
* Sowohl auf IBAN als auf Kontonummer prüfen
* Kontenabgleichsstartdatum bei Gesamtsumme verwenden
Bankerweiterung: Bei Rechnung zuweisen Skontosumme anzeigen
Kontoauszug verbuchen: add_invoices um Parameter skonto erweitert
Wenn Zahlbetrag mit Skontobetrag übereinstimmt dann Dropdown mit
"mit Skonto nach ZB" vorausgewählt übergeben.
Kann an der Stelle im Template aber noch nicht prüfen, ob
Zahlungseingangsdatum innerhalb Skontofrist liegt.
in pay_invoice für die Fälle "Differenz als Skonto" und "mit Skonto nach
ZB".
Moved BankTransaction matching from Controller to DB
There is now a new function in SL::DB::BankTransaction called
get_agreement_with_invoice that takes a Invoice or PurchaseInvoice
object as an argument and calculates the agreement.
Kontoauszug verbuchen - bei Zuweisung Zahlungsart berücksichtigen
Übernimmt man einen Vorschlag, wird nun per AJAX geprüft, ob die
Kombination aus $bt und $invoice mit Skonto verbucht wird oder nicht.
Es wird ein Optionsliste für eine select als HTML-Blog zurückgeliefert
und unter "Zugewiesene Rechnungen" eingefügt.
Wenn der Zahlungsbetrag genau dem Rechnungsbetrag abzgl. Skonto
entspricht, und die Zahlung innerhalb der Skontofrist erfolgt ist, wird
"mit Skonto nach ZB" vorausgewählt". Ist die Skontofrist vorbei wird
"ohne Skonto" vorausgewählt, dadurch bleibt der Skontobetrag offen,
sofern man nicht manuell auf "mit Skonto nach ZB" umstellt.
Gibt es für die Rechnung keine Skontooption so wird auch keine Dropdown
angezeigt.
Kontoauszug verbuchen - Übersetzung für "Add invoices" korrigiert
BankTransaction - Offene Subcent-Rechnungen rausfiltern
damit diese nicht mehr zum Zuweisen zur Verfügung stehen.
EXPORT_OK angepasst und alle Methoden in SL::DB::Invoice und
SL::DB::PurchaseInvoice importieren
Doku von SL/DB/Helper/Payment.pm angepasst
Kontauszug verbuchen - max agreement refactored
Nicht mehr von einer hohen Zahl in einer Schleife herunterzählen,
sondern den Wert der höchsten Matches per map und max raussuchen und
direkt danach die Vorschläge greppen.
Kontoauszug verbuchen - Refactoring von Rechnung zuweisen (html)
* das HTML wird jetzt nicht mehr per javascript, sondern in
SL/DB/Helper/Payment.pm mit Hilfe des Presenters (für die Tags)
als HTML Blob zusammengebaut
* der Rückgabewert von get_payment_select_options_for_bank_transaction
ist jetzt ein Array, mit dem direkt das select_tag erstellt werden kann.
* Die Daten werden jetzt an to_json als to_json( { 'html' => $html } ...
übergeben, und im AJAX code als data.html ausgelesen.
Reconciliation auf record umgestellt
Reconciliation - ajax as POST bei Vorschlägen, weil url zu lang werden
kann
G. Richardson [Tue, 28 Apr 2015 13:08:50 +0000 (15:08 +0200)]
DATEV - Buchungscheck prüft nur Buchungen einer trans_id
DATEV-Check für AR/AP/IS/IR/GL:
In der ersten Inkarnation wurden beim Check alle Buchungen des selben
Tages mit geprüft. In der zweiten Version wurde zusätzlich zum
Tagesdatum nach der trans_id der aktuellen Buchung gefiltert. Hatte die
Zahlung ein anderes Datum als die Rechnung wurde die Rechnung nicht
nochmal geprüft.
Jetzt wird beim Datevcheck bei jeder Buchung/Zahlung immer die komplette
Buchung auf Datevkompatibilität geprüft.
Es ist nun auch möglich, einzelne Transaktionen gezielt zu
kontrollieren, z.B. per console, indem man nur die trans_id ohne
von-bis-Datum eingibt.
Tritt ein DATEV-Exportfehler auf wird nun außerdem mehr Information zu
den verdächtigen Buchungen ausgegeben (vorher nur trans_id und amount).