Zum Hauptinhalt springen

Release 22.1.0

gefahr

Unbedingt die aktuellen Installationsvoraussetzungen vorab prüfen!

Was wurde gemacht?

In diesem Release ging es hauptsächlich um Bugfixing. Dabei wurden 26 Vorgänge behoben.

Zusammenfassung

  • INV-343 - Im Gadget werden nun die Zugriffsberechtigungen geprüft
  • INV-382 - Bei der Aktenbildung werden max. 100 Einträge gezeigt
  • INV-383 - Datumswerte wurden in invoiceItem nicht befüllt
  • INV-384 - Numerische Werte werden nun formatiert gespeichert
  • INV-385 - Felder wurden nicht geleert
  • INV-388 - Wo ist mein Beleg? Suchen im Archiv liefert nicht immer ein Ergebnis (siehe unten)
  • INV-391 - Werte werden nun mit S vorbelegt
  • INV-392 - Installationsanleitung aktualisiert
  • INV-395 - JobUser wird nun aus documents Einstellungen ausgelesen
  • INV-396 - Anlage von Buchungsvorlagen klappt nicht, wenn Anzeigenamen für Rechnungskreise konfiguriert sind (siehe unten)
  • INV-397 - Es gab im AutoIndex ein Rundungsproblem
  • INV-398 - Auswahl standardmäßig aktiviert
  • INV-402 - Access: %fileOwner.login% wird nicht aufgelöst
  • INV-404 - Korrektur after Callbacks von validVerification und verificationDelete wurden nicht getriggert
  • INV-409 - Korrekte Validierung negativer Beträge
  • INV-410 - totalNetAmount fehlt in invplus.fieldMapping.js
  • INV-411 - Schaltfläche Zahllauf aktualisieren - Filter aktualisiert nicht
  • INV-381 - Callbacks Zahlungsziel korrigiert
  • INV-393 - In den Views wurde der recipient nicht mit abgefragt
  • INV-415 - Umstellung TableResultDialog auf TableDialog
  • INV-437 - Lieferanten / Buchungsvorlagen: Verknüpfungsregister zeigt nichts an
  • INV-434 - Unendliche Betragsfreigabe / INV-446 - Unendliche Betragsfreigabe
  • INV-448 - JavaScript Error, wenn man im Gadget auf "Fälligkeit abgelaufen" klickt
  • INV-455 - Verknüpfte Dokumente - OUSP Request
  • INV-459 - moment() wird in ou.sp.ptpINV.job.exportToXtract nicht importiert
  • INV-469 - Steuersatz-Validierung schlägt bei 0%-Steuersätzen fehl

Spezial Thema - Wo ist mein Beleg Gadget

Im Zuge von INV-388 - wurde das FileSearch Gadget komplett umgeschrieben.

Dabei wurde die Logik komplett überarbeitet und funktioniert nicht mehr so wie vielleicht erwartet.

Ein grober Ablauf

img

Es wird nun Standardmäßig über die Datenbank gesucht (und kein HitResultset!). Verwendet wird ein neuer View viewInvoiceFileSearch. Wählt man eine Mappe aus, so wird die uuid als Suchkriterium hergenommen und ein HitResultSet erstellt.

Achtung! Wird ein Archiv verwendet, so muss zwingend die ou.tmpl.ptpINV.callbacks.fileSearch in ein ou.cust.ptpINV.callbacks.fileSearch umbenannt werden. Hier müssen dann folgende Anpassungen getroffen werden.

Im beforeLookupFile Callback (ou.tmpl.ptpINV.callbacks.fileSearch.js#142) muss zwingend das Archiv mit übergeben werden, damit der HitResultSet weiß, dass es auch ein Archiv durchsuchen muss. Dazu einfach folgende Zeile verwenden:

data.searchOptions.searchResources.push("Unit=Default/Instance=Default/View=MyView@EEx");

Manuell auszuführende Schritte

tipp

Diese Anleitung berücksichtig immer nur den Sprung von der vorhergehenden Version zu der gerade beschrieben Version. Bei Upgrades über mehrere Versionen hinweg müssen alle Änderungen der Zwischenversionen ebenfalls beachtet werden!

Also legen wir los, zunächst mit etwas einfachem.

Datenbank

Database/mssql/v22.1.sql

→ Ein neuer View hat sich dazu entschieden im Invoice mit zu machen.

Views anpassen

Im Zuge von INV-393 - müssen die Views um die recipient Bedingung angepasst werden.

Database/mssql/v21.0.sql

viewInvoiceItemLatestByInvoiceNumber
...
FROM invoiceHeader ih
LEFT JOIN invoiceItem ii ON ii.uuid = ih.uuid
LEFT JOIN costcenter ON costcenter.costcenter = ii.itemCostCenter and costcenter.recipient = ih.recipient
LEFT JOIN impersonalAccount ON impersonalAccount.account = ii.itemImpersonalAccount and impersonalAccount.recipient = ih.recipient
LEFT JOIN costunit ON costunit.costunit = ii.itemCostUnit and costunit.recipient = ih.recipient
...
viewInvoiceItemLatest
...
FROM invoiceHeader ih
LEFT JOIN invoiceItem ii ON ii.uuid = ih.uuid
LEFT JOIN costcenter ON costcenter.costcenter = ii.itemCostCenter and costcenter.recipient = ih.recipient
LEFT JOIN impersonalAccount ON impersonalAccount.account = ii.itemImpersonalAccount and impersonalAccount.recipient = ih.recipient
LEFT JOIN costunit ON costunit.costunit = ii.itemCostUnit and costunit.recipient = ih.recipient
...
viewInvoiceItemFrequencySource
...
FROM
invoiceHeader
LEFT JOIN invoiceItem ON invoiceItem.uuid = invoiceHeader.uuid
LEFT JOIN costcenter ON costcenter.costcenter = invoiceItem.itemCostCenter and costcenter.recipient = invoiceHeader.recipient
LEFT JOIN impersonalAccount ON impersonalAccount.account = invoiceItem.itemImpersonalAccount and impersonalAccount.recipient = invoiceHeader.recipient
LEFT JOIN costunit ON costunit.costunit = invoiceItem.itemCostUnit and costunit.recipient = invoiceHeader.recipient

Fertig! 🥳 So, das war einfach, jetzt geht's richtig los:

Portalscripts

Wie im jedem Update, so auch in diesem wird's wieder etwas schmerzlich beim Thema Portalscripts 🤒. Aber so viele sind es diesmal gar nicht, also legen wir los 💪.

Globalcust

INV-343: Anzeige der Kacheln unter Ordner "Rechnung":

  • Portalscripts/globalcust/Gadget_ou.cust.filetype.folder.html.Counter.js
  • Portalscripts/globalcust/ou.cust.callback.folder.counter.js

INV-382: Aktenbildung bei sehr vielen Mappen pro Kreditor dauert sehr lange:

  • Portalscripts/globalcust/ou.cust.global.filetype.property.eNavigator.dataCollector.js

und das war's auch schon für Globalcust, na siehste, ist gar nicht so schlimm. So jetzt tief durchatmen, wir kommen zu den ptpINVcust

ptpINVcust

Ok, gehen wir's an, los geht's. Zunächst gibt es ein paar neue Callback-Skripte. Im Zuge der Umstellung auf die MultiTable wurden die letzten Überbleibsel vom TableResultDialog umgestellt. Das heißt, es gibt neue lookup- und get-Skripte.

INV-415: TableResultDialog UserExits ersetzen durch MultiTableDialog:

  • Portalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.getPaymentTerm.js
  • Portalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.getVendor.js
  • Portalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.getVendorAccount.js
  • Portalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.lookupPaymentTerm.js
  • Portalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.lookupVendor.js
  • Portalscripts/ptpINVcust/ou.cust.ptpINV.callback.functions.lookupVendorAccount.js

Weiter geht's

Portalscripts/ptpINVcust/ou.cust.ptpINV.callbacks.js

→ Behebt INV-381 - Callbacks Zahlungsziel korrigieren:

Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.action.onDelete.js

→ Fehlender Import

Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.field.html.cover.js

→ Behebt INV-398 - Cockpit: Vergangene Rechnungsprüfer - Auswählen standardmäßig aktivieren:

Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.property.eNavigator.js

→ Behebt otris Fehlermeldung in den Logs (AutoText im Format %vendorName% ist obsolete)

Portalscripts/ptpINVcust/ou.cust.ptpINV.filetype.property.hROnFileViewScript.js

→ Fix Fallback auf leeres Array

Flachwitz in 3 ... 2 ... 1

Mir ist gestern mein Joghurt runtergefallen - er war nicht mehr haltbar 😁

Ok, weiter geht's

Portalscripts/ptpINVcust/ou.cust.ptpINV.install.adminDashboard.js

→ Da der oucadmin Benutzer standardmäßig nicht mehr angelegt wird, muss er dennoch die Zugriffsprofile erhalten, das geschieht nun hier.

Portalscripts/ptpINVcust/ou.cust.ptpINV.job.archiv.js

→ Code Refactoring (Hauptsächlich geändert um eine lauffähige Demo zu haben)

Portalscripts/ptpINVcust/ou.cust.ptpINV.lib.js

→ Fix prüfen ob LockingWorfklowSteps vorhanden sind.

Portalscripts/ptpINVcust/ou.cust.ptpINV.lib.proposal.autoIndex.js

🥵 Bald geschafft, das Ende ist in Sicht 🛣️

Jetzt wird's nochmal kurz fies. Im Zuge von "INV-409 - Negative Nettobeträge werden bei Steuersatz Validierung ignoriert", haben wir die cust Logik in sp umgezogen und mit Tests versehen. Diese Logik muss nun angepasst werden:

Portalscripts/ptpINVcust/ou.cust.ptpINV.lib.proposal.autoIndex.js

Portalscripts/ptpINVcust/ou.cust.ptpINV.settings.monitorROB.js

→ Fehlende Keys in Soll/Haben Kennzeichen

Portalscripts/ptpINVcust/ou.cust.ptpINV.workflow.action.incomingEvent.js

Portalscripts/ptpINVcust/ou.cust.ptpINV.workflow.action.outgoingEvent.js

→ Umstellung auf require

🥳 Das war's, einer der größten Brocken erledigt! Weiter geht's

Im Zuge von INV-388 - Wo ist mein Beleg? Suchen im Archiv liefert nicht immer ein Ergebnis" wurde das FileSearch Gadget (wie oben erwähnt) komplett umgeschrieben:

Portalscripts/ptpINVtmpl/ou.tmpl.ptpINV.callbacks.fileSearch.js

→ Genau prüfen ob das dazugehörige ou.cust.ptpINV.callbacks.fileSearch verwendet wird!

Portalscripts/ptpVENcust/Gadget_ou.cust.cfgBT.filetype.field.multiTable.js

→ Soll / Haben Kennzeichen hinzugefügt

Workflow-ext

Und schon sind wir im Workflow-ext Verzeichnis angekommen.

Workflow-ext/js/ou/cust/template-callbacks-file.js

→ Aus dem Standard raus geworfen ♻️

Workflow-ext/js/ou/cust/ptp/invoice/invoice-callbacks-file-functions.js

→ Behebt INV-384 - Funktion setCashDiscount in invoice-callbacks-file-functions: Jetzt wird's nochmal ungemütlich, wir kommen zur invoice-callbacks-file.js

Workflow-ext/js/ou/cust/ptp/invoice/invoice-callbacks-file.js

Folgende UserExits wurden angepasst:

  • vendorSelection
  • paymentTerm
  • vendorBICNumber

Der Rest sind keine Änderungen, sondern nur Codeformatierungen.

tipp

Glückwunsch du hast es geschafft! Der schwierigste Teil ist geschafft!

Benutzer

Der oucadmin Benutzer wird NICHT mehr bei der Installation angelegt! Dieser muss nun vorher über das One Unity Documents installiert werden!

Bei der Installation werden folgende Zugriffsprofile dem oucadmin Benutzer zugewiesen:

  • ptpInvoiceAdmin
  • ptpVerificationGroup
  • ptpPurchaseGroup
  • ptpInvoiceUser
  • ptpInvoiceManagement
  • ptpInvoiceAccounting
  • ptpIndexGroup

Bitte prüfen ob der oucadmin diese Zugriffsprofile auch hat.

EEX Archiv

Falls noch nicht geschehen bitte folgenden Punkt überprüfen: EASY+Archive#Weitere-Anpassungen

Mappenfelder

cfgBookingTemplate

Im Feld vendorFileId muss folgende Zeile recipient=%recipient% durch recipient=%recipient.key% ersetzt werden.

img