diff --git a/Stulz/2025.12.17 Geräte und Produktakte/Hooks.groovy b/Stulz/2025.12.17 Geräte und Produktakte/Hooks.groovy index ddd96fd..d0d1746 100644 --- a/Stulz/2025.12.17 Geräte und Produktakte/Hooks.groovy +++ b/Stulz/2025.12.17 Geräte und Produktakte/Hooks.groovy @@ -26,7 +26,7 @@ public class Hooks @Entrypoint( entrypoint = "hook_insert_entry_10" ) public int hookInsertEntry10(D3Interface d3, User user, DocumentType docType, Document doc) { - d3.log.error("START | hookInsertEntry10 "); + d3.log.info("START | hookInsertEntry10 "); ////////////////////////////////////////////////// // Prüfung, ob Ablage erlaubt ist / Geräte-/Produktakte | calb d.velop 2025.12.17 START @@ -110,7 +110,7 @@ public class Hooks String dokumentarten_geraeteakte_pruef = "DCHEA;DCHEP;DCHLP;DCHEC;DDFAD;DLAUF;DPDK1;DPDK2;DPDK3;DPDW1;DPDW2;DPDW3;DPRSP;DPR01;DTYPD;DTYPS;DVSAK"; - // Eindeutig: Auftrags-Nr., Vertriebsbelegposition, Materialnummer, Fertigungsauftragsnummer und wenn angegeben, Serialnummer, außerdem Dokumentart ist eindeutig + // Eindeutig: Dokumentart, Auftrags-Nr., Vertriebsbelegposition, Materialnummer, Fertigungsauftragsnummer und, wenn angegeben, Serialnummer if ( dokumentarten_geraeteakte_pruef.contains( docType.id() ) ) { def where = ""; @@ -139,7 +139,7 @@ public class Hooks // Prüfung ob Doppelablage bei Dokumentarten, bei denen das nicht vorgesehen ist / Geräte-/Produktakte | calb d.velop 2025.12.17 ENDE ////////////////////////////////////////////////// - d3.log.error("ENDE | hookInsertEntry10 "); + d3.log.info("ENDE | hookInsertEntry10 "); return 0; } diff --git a/_Vorlagen/Groovy-Skripte/Beispiel für Dokumentklasse.groovy b/_Vorlagen/Groovy-Skripte/Beispiel für Dokumentklasse.groovy new file mode 100644 index 0000000..a476ee9 --- /dev/null +++ b/_Vorlagen/Groovy-Skripte/Beispiel für Dokumentklasse.groovy @@ -0,0 +1,85 @@ +import com.dvelop.d3.server.Document +import com.dvelop.d3.server.DocumentClass +import com.dvelop.d3.server.DocumentType +import com.dvelop.d3.server.RepositoryField +import com.dvelop.d3.server.User +import com.dvelop.d3.server.UserGroup +import com.dvelop.d3.server.ValueSet +import com.dvelop.d3.server.core.D3Interface + +class ValueSets { + + @ValueSet(entrypoint = "AllowedVendorNumbers") + def allowedVendorNumbers(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer rowNo, Integer validate, Document attribContext) { + d3.log.warn("allowedVendorNumbers ValueSet reached") + def credNumbers = new LinkedList() + + // Gruppenberechtigungen aus DB lesen + def groups = user.groups + + // Alle erlaubten Kreditorennummern hinzufügen + for (UserGroup group in groups) { + def groupResult = d3.sql.executeAndGet("SELECT KREDNR FROM STU_KREDITOREN_BERECHTIGUNGEN WHERE USERORGROUP = '${group.id()}'") + groupResult.forEach({ row -> + def value = row.get("KREDNR").toString() + if (!credNumbers.contains(value)) { + credNumbers.add(value) + } + }) + } + + // Userberechtigungen aus DB lesen + def userResult = d3.sql.executeAndGet("SELECT KREDNR FROM STU_KREDITOREN_BERECHTIGUNGEN WHERE USERORGROUP = '${user.id()}'") + userResult.forEach({ row -> + def value = row.get("KREDNR").toString() + if (!credNumbers.contains(value)) { + credNumbers.add(value) + } + }) + + // Ergebnis zurückgeben + repoField.provideValuesForValueSet(credNumbers) + } + + // Rückgabe von 1 = Berechtigt, 0 = Zugriff verweigert + @DocumentClass(entrypoint = "vendorNumberAllowed") + int vendorNumberIsAllowed(D3Interface d3, String value, DocumentType docType, String userId, Document doc){ + if (userId == null || userId == "") { + return 0 + } + + if (value == null || value == "") { + return 0 + } + + // Prüfe ob Kreditorennummer in User-Berechtigungen vorkommt, wenn ja Berechtigen (1) + def userResult = d3.sql.executeAndGet("SELECT KREDNR FROM STU_KREDITOREN_BERECHTIGUNGEN WHERE USERORGROUP = '${userId}'") + for (def row in userResult) { + d3.log.debug("current value: $value") + d3.log.debug("current row value: ${row.get("KREDNR").toString()}") + if (value == row.get("KREDNR").toString()) { + d3.log.debug("returning 1 for user") + return 1 + } + } + + // Gruppenzugehörigkeiten aus d.3 lesen + def groups = d3.archive.getUser(userId).groups + + // Prüfe ob Kreditorennummer in Gruppen-Berechtigungen vorkommt, wenn ja Berechtigen (1) + for (UserGroup group in groups) { + def groupResult = d3.sql.executeAndGet("SELECT KREDNR FROM STU_KREDITOREN_BERECHTIGUNGEN WHERE USERORGROUP = '${group.id()}'") + for (def row in groupResult) { + d3.log.debug("current value: $value") + d3.log.debug("current row value: ${row.get("KREDNR").toString()}") + if (value.equalsIgnoreCase(row.get("KREDNR").toString().trim())) { + d3.log.debug("returning 1 for group ${group.id()}") + return 1 + } + } + } + + // Keine Berechtigung für Kreditorennummer gefunden, als nicht berechtigt zurückgeben + return 0 + } +}