Bernd Bleßmann [Wed, 10 Feb 2016 12:02:13 +0000 (13:02 +0100)]
Auftrags-Controller: event bindings nicht mehrfach hinzufügen.
Dazu event handler für die Positions-Zeilen mit run_once_for registrieren und
in eine eigene Funktion init_row_handlers() ausgelagert. Damit kann
init_row_handlers() gefahrlos immer nach dem Hinzufügen neuer Positionen
aufgerufen werden, ohne einen Handler mehrmals zu registrieren.
- ungültige Artikel nicht anzeigen.
- Artikel nicht mehrfach hinzufügen, wenn ausversehen mehrfach Enter gedrückt
oder der Weiter-Knopf mehrfach angeklickt wird.
Bernd Bleßmann [Sat, 16 Jan 2016 22:04:27 +0000 (23:04 +0100)]
Auftrags-Controller: Druck-Möglichkeit mit Options
Todos/Anmerkungen
- im Moment werden nur PDF/Bildschirm und PDF/Drucker unterstützt
- Sprache kann die Vorlage steuern, aber nicht das Hinzufügen von übersetzten
Artikeln
- es kann sicher noch mehr ausgelagert werden, entweder in den
PrintOptions-Helper oder in einen PrintOptions-Controller, der
dann auch noch mehr machen könnte
- E-Mail ist nicht berücksichtigt bzw. wird im Controller getrennt behandelt
Bernd Bleßmann [Wed, 2 Dec 2015 10:28:36 +0000 (11:28 +0100)]
Auftrags-Controller: vorhandene orderitems vor Neu-Schreiben nicht löschen …
Hintergrund: Wird einem Rose-Object eine Relationship als Array übergeben (z.B.
$order->orderitems(@items), so löscht Rose dei DB-Einträge und schreibt sie neu.
In dem Fall werden allerdings auch DB-Trigger ausgelöst, was hier zum
unerwünschten Löschen der record_links auf item-Ebene führte.
Hier wurden die items via assign_attributes als ganzes dem Order-Objekt
hinzugefügt.
Jetzt werden die items einzeln hinzugefügt, wenn sie neu sind und die
vorhandenen, die aus der Makse entfernt wurde, werden extra gelöscht.
Bernd Bleßmann [Tue, 12 Jan 2016 10:49:17 +0000 (11:49 +0100)]
kivi.SalesPurchase.edit_longdescription: Aufruf auch mit einzelnen Parametern …
ermöglichen, statt mit row. Dafür gibt es eine zweite Funktion "..._with_params.
Diese wird jetzt von kivi.SalesPurchase.edit_longdescription(row) aufgerufen,
damit in den vorhandenen Templates nicht angepasst werden muss.
G. Richardson [Sat, 2 Jan 2016 11:59:21 +0000 (12:59 +0100)]
FlattenToForm - auch customer_id oder vendor_id übergeben
Dies wird vom neuen OrderController beim Umwandeln in einen Lieferschein
gebraucht, wo nach einem flatten_to_form auf $order delivery_order
aufgerufen wird, wo anhand customer_id oder vendor_id der Kunden geladen
wird.
G. Richardson [Sun, 6 Mar 2016 19:29:40 +0000 (20:29 +0100)]
Payment Helper setzt $self->transactions zurück
Als es noch eine Methode transactions in SL::DB::Helper::Payment gab
wurden die acc_trans-Einträge bei Zugriff per $self->transactions jedes
Mal aus der Datenbank ausgelesen:
(SL::DB::Manager::AccTransaction->get_all(query => [ trans_id => $self->id ]);
Seit Commit 01b298ec3 wird stattdessen der aktuelle relationship Array
verwendet, wenn die transactions noch nicht ausgelesen wurden werden sie
wie oben geladen, wenn sie aber schon existieren dann werden die
Transaktionen im Speicher benutzt.
Bei den Tests gab es aber das Problem, daß in pay_invoice die
acc_trans-Einträge der Zahlungen als AccTrans-Objekte unabhängig vom
Rechnungsobjekt gespeichert wurden, und der transaction Array daher
nicht aktualisiert wurde. Am Ende von pay_invoice wird nun per
forget_related der transaction-Array zurückgesetzt, damit bei der
nächsten Verwendung die aktuell gespeicherten Transaktionen nachgeladen
werden.
G. Richardson [Tue, 1 Mar 2016 16:21:27 +0000 (17:21 +0100)]
Neue Chart Methode new_chart_valid
die prüft, ob es für das Konto ein Folgekonto gibt, und ob das aktuelle
Tagesdatum >= dem Folgedatum ist, d.h. ob eigentlich das Folgekonto
benutzt werden soll. Diese Abfrage war bisher allerdings kaputt und wird
wahrscheinlich auch nirgends sinnvoll genutzt.
G. Richardson [Tue, 1 Mar 2016 14:23:46 +0000 (15:23 +0100)]
SL::DB::Chart - Refactoring der Transaktionsmethoden
... der Methoden number_of_transactions und has_transaction.
Machen fast das Gleiche, aber has_transaction liefert nur 0 oder 1
zurück, und ist schneller.
G. Richardson [Mon, 29 Feb 2016 10:56:49 +0000 (11:56 +0100)]
Debitorenbuchungen als CSV importieren
Ähnlich wie der Auftragsimport wird hier gemultiplexed, d.h. es gibt separate
Zeilen für die Debitorenbuchung (ar) und die Buchungszeilen (acc_trans).
Es handelt sich allerdings nicht exakt um acc_trans-Zeilen, die direkt
als acc_trans Objekte importiert werden, sondern es können die gleichen
Informationen wie bei der Debitorenbuchung übergeben werden, also Konto,
Betrag, Steuerschlüssel und Projekt, und daraus werden dann die
acc_trans-Zeilen generiert, inklusive Steuerautomatik.
Das Forderungskonto muß in der Rechnungszeile übergeben werden, der Betrag wird
dann anhand der Buchungszeilen bestimmt.
Beispiel für Import-Format (siehe auch mehr Beispiele in t/controllers/csvimport/artransactions.t)
G. Richardson [Mon, 29 Feb 2016 10:55:27 +0000 (11:55 +0100)]
Payment Helper - Methode transactions wieder entfernt
Es gibt schon eine Relationship transactions in SL::DB::Invoice und
SL::DB::PurchaseInvoice. Diese wird ansonsten überschrieben, und dann
kann man auch keine AccTransaction Objekte mehr zu Rechnungsobjekten
hinzufügen.
Bernd Bleßmann [Fri, 26 Feb 2016 10:59:03 +0000 (11:59 +0100)]
ReportGenerator-Helper: (wiederholten) Export bei "Zurück" verhindern.
Dazu export-actions nach Aufruf aus form löschen. Da die form-Variablen als
hidden in die Options-Maske übergeben werden, war auch immer die
export-action dabei. Drückte man "Zurück", dann waren beiden actions (für export
und für back) in form und es passierte manchmal, dass der Export (download)
erneut ausgeführt wurde.
Zum Nachstellen: Bei einem Controller mit Export-Möglichkeit den Export aufrufen
und "Zurück" drücken (evtl. wiederholen). Irgenwann wird statt zurückzugehen
doch exportiert.
Sven Schöling [Thu, 25 Feb 2016 14:51:05 +0000 (15:51 +0100)]
Endlosschleife im PDF-Tabellenmodul und damit im PDF-Export gefixt
Wenn die Tabelle zu breit wird und dann irgendwann nicht einmal mehr ein
Wort in eine Zeile passt, dann muss das Wort trotzdem gesetzt werden;
andernfalls würde das PDF::Table-Modul in einer Endlosschleife enden.
Folgende Meldung:
Useless use of greediness modifier '?' in regex; marked by <-- HERE in m/(\b\S{60}? <-- HERE )(\S.*?\b)/ at modules/override/PDF/Table.pm line 334.
Im Artikelselektor bei Multiselect besseren Titel, je nachdem ob multiselect an ist oder nicht.
Auch die horizontale Linie über alle Spalten,
wenn long_description in der Mandanntenkonfig gesetzt ist.
Sven Schöling [Mon, 22 Feb 2016 15:40:33 +0000 (16:40 +0100)]
Stylesheet aus DefaultManager holen
Damit, und dem logo commit von eben, kann man das Aussehen der
Loginmaske personalisieren indem man ein Company css anglegt, und einen
Mini DefaultManager dazu baut, der einfach nur eine Funktion enthält:
sub stylesheet { 'company.css' }
und das dann in der Config der jeweiligen Installation benutzt:
[system]
default_manager = company
Da sowohl css, als auch Defaultmanager nicht im Standard sind, ist damit
das erste mal möglich das Programm umzubranden ohne ständig
Codeänderungen beim rebase mitmergen zu müssen.
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