Files
d.velop/Bewital/20_hooks.groovy

296 lines
7.7 KiB
Groovy

import com.dvelop.d3.server.Document
import com.dvelop.d3.server.Entrypoint
import com.dvelop.d3.server.User
import com.dvelop.d3.server.core.D3Interface
import com.dvelop.d3.server.DocumentTypeAttribute;
import com.dvelop.d3.server.DocumentType;
import com.dvelop.d3.server.RepositoryField;
class Hook {
// ValPasswdExit10
@Entrypoint(entrypoint="hook_val_passwd_exit_10")
public int hook_val_passwd_exit_10(D3Interface d3, int errorCode, User user, String appLanguage, String appVersion) {
d3.log.info("ValPasswdExit10: START ...");
// ERV: Restriction-Set "ERV-Kostenstellen"
d3.log.info("ValPasswdExit10: KST: user.id: '" + user.id + "'");
d3.log.info("ValPasswdExit10: KST: user.email: '" + user.email + "'");
def d3_email = user.email;
def d3_username = user.id;
def sqlQuery = "";
List<Object> varArrayKST;
def resultRowsKST;
def resultAnzKST = 0;
def resSetKostenstellen = "";
def result = 0;
// DEBUG:
if (user.id == "ext_dvelo2") {
d3_email = "ext_dvelo2@test.de"
}
d3.log.info("ValPasswdExit10: KST: d3_username: '" + d3_username + "'");
d3.log.info("ValPasswdExit10: KST: d3_email: '" + d3_email + "'");
d3.log.info("ValPasswdExit10: KST: user.id: '" + user.id + "'");
// Benutzer in Tabelle 'erv_rights_kostenstellen" suchen und Kostenstellen auslesen
sqlQuery = """
SELECT kostenstelle as db_kostenstelle
FROM dbo.erv_rights_kostenstellen
WHERE email = ?
""";
varArrayKST = [d3_email];
resultRowsKST = d3.sql.executeAndGet(sqlQuery, varArrayKST);
resultAnzKST = resultRowsKST.size();
if (resultAnzKST > 0) {
resultRowsKST.each {kst ->
if (resSetKostenstellen == "") {
resSetKostenstellen = kst.db_kostenstelle;
} else {
resSetKostenstellen = resSetKostenstellen + ";" + kst.db_kostenstelle;
}
}
// Restriction-Set "ERV_Kostenstellen" schreiben
d3.log.info("ValPasswdExit10: KST: resSetKostenstellen: '" + resSetKostenstellen + "'");
// d3.log.info("ValPasswdExit10: KST: : Restriktionsmenge 'ERV_Kostenstellen' fuer User '" + user.realName + " [" + d3_email + "]' mit dem Filter '" + resSetKostenstellen + "' erstellt.");
if (resSetKostenstellen) {
result = d3.call.d3set_add_filter("Master", "", "ERV_Kostenstellen", d3_username, resSetKostenstellen, true)
if (result != 0) {
d3.log.error("ValPasswdExit10: KST: ERROR '" + result + "' in 'd3set_add_filter' | SET: 'ERV_Kostenstellen' | USER: '" + d3_email + "' | FILTER: '" + resSetKostenstellen + "'");
}
else {
d3.log.info("ValPasswdExit10: KST: Restriktionsmenge 'ERV_Kostenstellen' fuer User '" + user.realName + " [" + d3_email + "]' mit dem Filter '" + resSetKostenstellen + "' erstellt.");
}
}
}
d3.log.info("ValPasswdExit10: STOP ...");
return 0
}
@Entrypoint( entrypoint = 'hook_validate_update_entry_10' )
public int hookValidateUpdateEntry10( D3Interface d3, User user, DocumentType docType, Document doc, String nextcall ){
d3.log.info("START | hookValidateUpdateEntry10 ");
validateValues(d3, docType, doc);
d3.log.info("ENDE | hookValidateUpdateEntry10 ");
return 0;
}
@Entrypoint( entrypoint = "hook_insert_entry_10" )
public int hookInsertEntry10(D3Interface d3, User user, DocumentType docType, Document doc)
{
d3.log.info("START | hookInsertEntry10 ");
validateValues(d3, docType, doc);
def dokuart_liste = "DIE01;DIE02;DIE03;DIE04;DIE05;DIE06;DIE07;DIE08;DNV01;DNV02;DNV03;DNV04;DNV05;DNV06;DNV07;DNV08;DFE01;DFE02;DFE03;DQM01";
if ( dokuart_liste.contains( docType.id() ) )
{
doc.status = Document.DocStatus.DOC_STAT_RELEASE;
}
d3.log.info("ENDE | hookInsertEntry10 ");
return 0;
}
public void validateValues(D3Interface d3, DocumentType docType, Document doc){
////////////////////////////////////////
// Validierung Kundennummer calb/d.velop 2025.12.08 START
if ( isRepoIdInDocType( d3, docType.id(), 109 ) )
{
if ( doc.field[ 2 ] )
{
if ( doc.field[ 2 ].indexOf( "|" ) > 0 )
{
def werte = doc.field[ 2 ].tokenize( "|" );
// Kundennummer
if ( werte[ 0 ].length() > 0 )
{
doc.field[ 2 ] = werte[ 0 ].trim();
}
// Kundenname
if ( werte[ 1 ].length() > 0 )
{
doc.field[ 1 ] = werte[ 1 ].trim();
}
// Land
if ( werte[ 2 ].length() > 0 )
{
doc.field[ 4 ] = werte[ 2 ].trim();
}
}
}
}
// Validierung Kundennummer ENDE
////////////////////////////////////////
////////////////////////////////////////
// Validierung Artikelnummer calb/d.velop 2025.12.08 START
if ( isRepoIdInDocType( d3, docType.id(), 119 ) )
{
if ( doc.field[ 12 ] )
{
if ( doc.field[ 12 ].indexOf( "|" ) > 0 )
{
def werte = doc.field[ 12 ].tokenize( "|" );
// Artikelnummer
if ( werte[ 0 ].length() > 0 )
{
doc.field[ 12 ] = werte[ 0 ].trim();
}
// Artikelname
if ( werte[ 1 ].length() > 0 )
{
doc.field[ 13 ] = werte[ 1 ].trim();
}
}
}
}
// Validierung Artikelnummer ENDE
////////////////////////////////////////
////////////////////////////////////////
// Validierung Mandant calb/d.velop 2025.12.08 START
if ( isRepoIdInDocType( d3, docType.id(), 122 ) )
{
if ( doc.field[ 15 ] )
{
if ( doc.field[ 15 ].indexOf( "|" ) > 0 )
{
def werte = doc.field[ 15 ].tokenize( "|" );
// Mandant
if ( werte[ 0 ].length() > 0 )
{
doc.field[ 15 ] = werte[ 0 ].trim();
}
// Mandantenname
if ( werte[ 1 ].length() > 0 )
{
doc.field[ 19 ] = werte[ 1 ].trim();
}
}
}
}
// Validierung Mandant ENDE
////////////////////////////////////////
////////////////////////////////////////
// Validierung Vertreter calb/d.velop 2025.12.08 START
if ( isRepoIdInDocType( d3, docType.id(), 136 ) )
{
if ( doc.field[ 32 ] )
{
if ( doc.field[ 32 ].indexOf( "|" ) > 0 )
{
def werte = doc.field[ 32 ].tokenize( "|" );
// Artikelnummer
if ( werte[ 0 ].length() > 0 )
{
doc.field[ 32 ] = werte[ 0 ].trim();
}
// Artikelname
if ( werte[ 1 ].length() > 0 )
{
doc.field[ 35 ] = werte[ 1 ].trim();
}
}
}
}
// Validierung Vertreter ENDE
////////////////////////////////////////
}
private boolean isRepoIdInDocType( D3Interface d3, String docTypeShort, int repoId )
{
boolean isRepoIdInDocType = false;
try
{
Document docTemp = d3.archive.newDocument();
docTemp.setType( docTypeShort );
DocumentType docType = docTemp.getType();
if ( docTemp != null && docType != null )
{
for ( int i = 1; i <= 89; i++ )
{
try
{
DocumentTypeAttribute docTypeAttrib = docTemp.getType().getField().getAt( i );
if ( docTypeAttrib != null )
{
RepositoryField repoField = docTypeAttrib.getRepositoryField();
if ( repoField != null )
{
String currRepoId = repoField.getId();
if ( currRepoId != null )
{
int currRepoIdInt = Integer.valueOf( currRepoId );
if ( currRepoIdInt == repoId )
{
isRepoIdInDocType = true;
break;
}
}
}
}
}
catch ( Exception eField )
{
//nix
}
}
}
}
catch ( Exception e )
{
// wieder nix
}
//d3.log.error( "Nachricht: " + isRepoIdInDocType );
return isRepoIdInDocType;
}
}