Jan Büren [Mon, 15 Dec 2014 08:17:10 +0000 (09:17 +0100)]
orderitems persistent teil III
IMMER die orderitems_id in sub poso löschen, nicht nur in
der if-bedingung
Angebot -> Auftrag i.O.
Auftrag - > Angebot i.O.
Kundenauftrag -> Lieferantenauftrag i.O.
Jan Büren [Tue, 9 Dec 2014 15:09:36 +0000 (16:09 +0100)]
orderitems persistent machen.
bei vorlage als und position löschen entsprechend die ids löschen, sodass
diese beim speichern des neuen beleges, bzw. beim neu erstellen der positionen
erzeugt werden.
Folgende Szenarien geprüft:
Von Angebot:
-> erneuern i.O.
-> mittlere Position löschen i.O.
-> als neu speichern i.O.
-> Speichern, Löschen, neue Pos i.O.
-> Angebot -> Auftrag i.O.
Rücksprünge von:
-> Auftrag -> Angebot (quotation in io.pl!) i.O.
-> Lieferantenauftrag -> Verkaufsauftrag i.O.
-> Lieferantenauftrag -> Lieferantenanfrage i.O.
-> Verkaufs-Rechnung -> Auftrag (keine orderitems vorhanden) i.O.
Sven Schöling [Thu, 4 Dec 2014 17:47:02 +0000 (18:47 +0100)]
Layout Aufräumaktion:
- Admin und V3 Menü entflochten. Benutzen jetzt beide das neue CssMenu
als sub_layout
- Top-Klone aus V3 und Javascript herausoperiert und als sub_layout
eingebunden
- Neues Layout AdminLogin für die Loginmaske im Adminbereich (d'oh)
- Inputfelder im frame_header kleiner gemacht, Frickelfox ignoriert mal
wieder css Vorgaben und inheritet font-size nicht.
- Beschreibung in Placeholder verschoben. Ja das ist html5. Benutz halt
nicht IE6.
- javascript für Ansprechpartnersuche gefixt und ausgelagert.
- Login, Classic und V3 sind top level Layouts und brauchen nicht
sub_layoutbar sein. Macht den Code einfacher.
Moritz Bunkus [Thu, 4 Dec 2014 15:12:55 +0000 (16:12 +0100)]
Auth.pm: Rechte nur dann laden, wenn User & Client gesetzt sind
Seit f6ed86e wird im Menü-Template-Code auf Rechte
getestet (AUTH.assert(…)). Im User-Bereich ist das kein Problem, weil
die Menü-Templates nur dann benutzt werden, wenn tatsächlich ein User
angemeldet ist.
Im Admin-Bereich allerdings wird ebenfalls Menü-Code verwendet,
allerdings gibt es in dem Moment weder einen Client noch einen User. Der
Auth-Code muss damit klarkommen und in dem Fall schlicht »nicht
berechtigt« zurückliefern.
G. Richardson [Tue, 21 Oct 2014 00:19:31 +0000 (02:19 +0200)]
setTimeOut für schnelle Datumseinsgabe bei set_duedate
Die jquery-Abfrage des Datumsfeldes in set_duedate (Fälligkeitsdatum)
wird mit setTimeOut erst nach Ersetzen des Datums per schneller
Datumseingabe durchführen
G. Richardson [Tue, 21 Oct 2014 00:07:07 +0000 (02:07 +0200)]
Schnelle Datumseingabe ohne Trenner
Buchhalter sind es gewohnt, das Datum im Nummernblock ohne Punkte
eingeben zu können, z.B. wird aus 01122014 -> 01.12.2014
Mit diesem Patch wird im Datumsfeld noch vor der Prüfung auf ein gültiges
Datumsformat per Javascript geprüft, ob
* die Eingabe nur aus Zahlen besteht
* das Datumsformat dd.mm.yy, dd-mm-yy oder mm-dd-yy ist
Trifft dies zu, werden am Beispiel für den Fall dd.mm.yy folgende
Umwandlungen durchgeführt:
8 Zahlen: 31122014 -> 31.12.2014
6 Zahlen: 311214 -> 31.12.2014
4 Zahlen: 3112 -> 31.12.2014 aktuelles Jahr wird angenommen
1-2 Zahlen: 12 -> 31.10.2014 aktueller Monat wird angenommen
7 -> 07.10.2014 aktueller Monat wird angenommen
Nach der Umwandlung findet wie bisher eine (simple) Plausibilitätsprüfung des
Datums per Javascript statt. Sollte das Datumsfeld andere Datumsfelder
beeinflussen, wie z.B. das Rechnungsdatum das Fälligkeitsdatum im Ein-
und Verkauf durch ein onChange, muß hier eventuell mit einem setTimeOut
gearbeitet werden, da ansonsten der Wert vor der Umwandlung genommen
wird.
G. Richardson [Fri, 4 Apr 2014 11:09:26 +0000 (13:09 +0200)]
FiBu Schellsuche in Headerzeile
neues Ajax Autocompletefeld im Header für Benutzer mit FiBu-Rechten,
welches Rechnungsnummern und Kunden-/Lieferantennamen durchsucht. Durch
die Auswahl im Dropdown gelangt man direkt zu dem Beleg.
Jan Büren [Wed, 3 Dec 2014 19:15:18 +0000 (20:15 +0100)]
Lieferplan: all_businesses in init-methode ausgelagert
<gorash> kurzes feedback zum lieferplan:
<gorash> in der action alle business laden: der ganze punkt an den init_* sachen ist, dass mand as laden von nötigen daten aus der action rauskriegt
Moritz Bunkus [Fri, 28 Nov 2014 11:53:46 +0000 (12:53 +0100)]
CVars-Lösch-Queries deutlich effizienter gestaltet
PostgreSQL kann Queries à la »DELETE … WHERE … IN (SELECT…)« nicht gut
optimieren und erzeugt dafür exponentielle Laufzeit. Viel schneller ist,
eine Vorselektierung mit normalen JOINs zu nutzen und nachher beim
DELETE ein WHERE EXIST (…) mit Bezug auf die zu löschende Tabelle
einzusetzen.
Moritz Bunkus [Tue, 25 Nov 2014 13:29:02 +0000 (14:29 +0100)]
CustomerVendor-Controller: Daten in Neu-Anzeige bei Fehler beibehalten
RDBO hat das Verhalten, dass bei einem neuen, noch nicht gespeicherten
Objekt die Methoden zum Hinzufügen von Relationship-Objekten (z.B. in
1:n-Beziehnungen wie $customer->add_contacts(…)) beim danach erfolgenden
Auslesen der Beziehung nicht zurückliefert. Das heißt, dass Folgendes
der Fall ist:
my $customer = SL::DB::Customer->new;
$customer->add_contacts(SL::DB::Contacts->new);
print scalar(@{ $customer->contacts || [] }); # Das hier gibt 0 aus
Existiert das Objekt hingegen schon, dann klappt das normal. Das Problem
kann man umgehen, indem man beim Anlegen des neuen Objektes die
Beziehungen explizit auf eine leere Array-Referenz setzt, damit der in
RDBO enthaltene Check an der Stelle greift.
Das betrifft den Workflow, wenn man Daten in den benutzerdefinierten
Variablen eingibt, auf Speichern drückt und kivitendo dann wegen eines
fehlgeschlagenen Checks die Maske erneut anzeigt.
Bernd Bleßmann [Tue, 25 Nov 2014 12:30:44 +0000 (13:30 +0100)]
Redundante Trigger zum Aufräumen nach Löschen von Kunden/Lieferanten entfernen.
Diese Trigger sind nicht nur doppelt, sondern auch falsch, da sie "module" in
"shipto" nicht berücksichtigen, was dazu führen kann, das in Belegen individuell
vergebene Lieferadressen gelöscht werden, wenn ein Kunde oder Lieferant gelöscht
wird, der zufällig die selbe id hat, wir der entsprechende Beleg.
Die neueren Trigger werden/wurden mit dem Upgrade-Tag
"cleanup_after_customer_vendor_deletion" installiert.
Jan Büren [Tue, 25 Nov 2014 11:51:57 +0000 (12:51 +0100)]
Neuer Bericht: Lieferwertbericht
Erweiterung DeliveryPlan.pm um Modusweiche Lieferplan oder Lieferwertbericht
Implementierungstand Lieferwertbericht:
- Alle offenen Verkaufsaufträge werden berücksichtigt
- Beim CSV-Export wird die Einheit als Extra-Spalte exportiert und die
Einheiten bei allen anderen Spalten ausgeblendet
Ferner neues Recht Lieferwertbericht umgesetzt
Sven Schöling [Fri, 21 Nov 2014 17:17:16 +0000 (18:17 +0100)]
Layout: title Ausgabe normalisieren
...mit dem Ziel das später ins Layout zu migrieren.
- In allen Templates den Tital auch wirklich als erstes ins DOM
verschoben
- unterschiedliche Verwendung der folgenden Muster vereinheitlicht:
<h1>...</h1>
<div class='listtop'>...</div>
<p><div class='listtop'>...</div></p>a
<tr><th class='listtop' colspan=..>....</th></tr>
- Verwendung der gleichen Klasse im Footer in <h2> geändert
- Puffer <tr height=5> entfert
Das ergibt insgesamt folgende Effekte:
- Einheitliches Rendern der Überschrift
- Einheitlicher Abstand zum Content
- flash/message werden immer unter der Überschrift angezeigt
Sven Schöling [Tue, 18 Nov 2014 14:11:13 +0000 (15:11 +0100)]
Stylesheets: Aufräumaktion
- gemeinsame stylesheets aus den kivitendo/lx-office-erp Verzeichnissen
genommen
- README aktualisiert
- rp/bwa nicht mehr hartcodiert in kivitendo laden
Moritz Bunkus [Wed, 12 Nov 2014 11:29:25 +0000 (12:29 +0100)]
Ansprechpersonen-CVars auch beim Updaten speichern
Beim Neuanlegen wurden sie schon geschrieben, weil da in den Objekten
noch keine ID vorhanden ist. Bei existierenden Objekten muss aber das
Mutterobjekt mit cascade=>1 gespeichert werden, damit modifizierte
Relationships auch gespeichert werden.
Moritz Bunkus [Wed, 12 Nov 2014 11:12:33 +0000 (12:12 +0100)]
Ansprechpersonen-CVars mit INCLUDE und nicht PROCESS einbinden
PROCESS lokalisiert die Variablen nicht. Das führt dazu, dass bei
multiplen CVars für Ansprechpersonen der Feldname aller CVar-Inputs
immer der der ersten CVar ist.
Jan Büren [Mon, 10 Nov 2014 14:23:51 +0000 (15:23 +0100)]
OrderItems-> delivered_qty in helper-funktion ausgelagert
Ergänzung zum Commit von gerade: Da man nicht sicher sein kann,
ob dieser Wert als Objekt-Variable zu dem Zeitpunkt (t2) schon berechnet
wurde, entsprechend in eine nach perl-konvention private (_delivered_qty)
funktion ausgelagert.
Waldemar Toews [Fri, 7 Nov 2014 10:01:27 +0000 (11:01 +0100)]
Laden von CVars mit falschen Werten in Artikelstammdaten unterbinden.
Beim Laden der CVars in Stammdaten fand die Prüfung nach 'sub_module'
nicht statt.
Dabei werden mehrere Datensätze zurückgeliefert und wenn mann Pech hat
kann der erste Satz, der genommen wird, den Wert aus dem Auftrag oder
woher auch immer haben.
Die Abfrage ist jetzt geändert: Wenn der Parameter nicht übergeben
wurde, dann mit Leerstring vorbelegen und immer nach 'sub_module'
durchsuchen.
Jan Büren [Tue, 4 Nov 2014 16:50:11 +0000 (17:50 +0100)]
Verbesserung Standard-Auslagern
a) Überprüfung auf negative Eingabe des Benutzers (hier wird beim
manuellen Auslagern keine Lager-Bewegung durchgeführt).
b) Löschen von bisher eingetragenene Mengen innerhalb der einzelnen
Positionen (für den Fall Dienstleistung nicht ein- oder auslagern).
Falls das ein Benutzer so eingibt
Jan Büren [Tue, 4 Nov 2014 15:19:46 +0000 (16:19 +0100)]
Verbesserung Standardauslagern für den Fall Dienstleistung ist nicht lagerbar
Kein undef an SL/DO.pm übergeben, sondern die richtigen Position zum
Einlagern durch eine "schlauere" Schleife machen.
Falls eine Position die NICHT ein-, bzw. ausgelagert werden soll, schon
belegt wurde (per Benutzereingabe). Diese auch dann löschen, da ansonsten
Beleg ne Lager (Hinweis von Sven)
a) Falls Dienstleistungen nicht per Standardverfahren
ein- oder ausgelagert werden sollen, entsprechend NICHT auslagern.
Meine erste Idee, einfach die Menge auf 0 zu setzen funktioniert nur dann,
wenn auch ein Standardlagerplatz für die Dienstleistung oder Mandanten gesetzt ist.
Ferner wird dann eine Lagerbewegung mit der Menge 0 noch in inventory gemacht.
Folgende Ergänzungen: a) Menge auf 0, b) delete für Prüfung auf "Mengen-Hash" (qty)
c) ein undef Element in dem Array all_requests hinzugefügt, sodass DO.pm (unpack_stock_info)
in demselben Format die Daten empfängt wie beim manuellen Auslagern, wenn eine Position nicht
per Fragezeichen ausgelagert wird.
b) Ergänzung ob beim Einlagern per Standard-Einlagern ein Standard-Lagerplatz für
die Ware / Dienstleistung gesetzt ist, anstatt der Ausgabe eines SQL-Fehlers
Testfälle für a)
Notwendige Bedingung: Auslagern über Standardlagerplatz aktiviert
Verkauf | Einkauf
A Dienstleistung |
NICHT automatisch i.O. | i.O.
ein- oder auslagern |
-------------------------------------------------------------
B Leere Position (QTY == 0) i.O. | i.O.