Compare commits
24 Commits
0e1588b591
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 6e47137a46 | |||
| f5f97b8886 | |||
| 12ef4a546d | |||
| 3b18084dac | |||
| e11a2f2590 | |||
| 031bfce979 | |||
| 8279e75a8d | |||
|
|
d74a53dd7d | ||
| fac4bff452 | |||
| 6377ed1786 | |||
| 0ff828d41d | |||
| f8a3306af5 | |||
| 5489edbbd4 | |||
| 5bbaf8b087 | |||
| f60380cf58 | |||
| e0fffb4ae2 | |||
| ff85a06ead | |||
| 227755e598 | |||
| e8d38e6ee8 | |||
| 993e4e0ec2 | |||
| 1b227f5179 | |||
| 325ecbe3ea | |||
| af3b6fb343 | |||
| f3a3c3b011 |
84
Bayernoil/2025.12.12 Personalakte/10_hooks.groovy
Normal file
84
Bayernoil/2025.12.12 Personalakte/10_hooks.groovy
Normal file
@@ -0,0 +1,84 @@
|
||||
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 {
|
||||
|
||||
@Entrypoint( entrypoint = "hook_insert_entry_10" )
|
||||
public int hookInsertEntry10(D3Interface d3, User user, DocumentType docType, Document doc)
|
||||
{
|
||||
d3.log.info("START | hookInsertEntry10 ");
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// Validierung Personalnummer mit Mitarbeiternamen calb @ d.velop 2025.12.12 START
|
||||
|
||||
String Namensvalidierung = "DPERS|APERS|APREG";
|
||||
|
||||
if ( Namensvalidierung.contains( docType.id() ) )
|
||||
{
|
||||
if ( doc.field[ 1 ] )
|
||||
{
|
||||
if ( doc.field[ 1 ].indexOf( "|" ) > 0 )
|
||||
{
|
||||
def werte = doc.field[ 1 ].tokenize( " | " );
|
||||
|
||||
if ( werte[ 0 ].length() > 0 )
|
||||
{
|
||||
doc.field[ 1 ] = werte[ 0 ];
|
||||
}
|
||||
|
||||
if ( werte[ 1 ].length() > 0 )
|
||||
{
|
||||
doc.field[ 3 ] = werte[ 1 ];
|
||||
}
|
||||
|
||||
if ( werte[ 2 ].length() > 0 )
|
||||
{
|
||||
doc.field[ 2 ] = werte[ 2 ];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
d3.log.info( "Validierung Personalnummer / Mitarbeiternamen erfolgt.");
|
||||
|
||||
// Validierung Personalnummer mit Mitarbeiternamen calb @ d.velop 2025.12.12 ENDE
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// Validierung Register / Dokumenttyp calb @ d.velop 2025.12.12 START
|
||||
|
||||
String Registervalidierung = "DPERS";
|
||||
|
||||
if ( Registervalidierung.contains( docType.id() ) )
|
||||
{
|
||||
if ( doc.field[ 16 ] )
|
||||
{
|
||||
def sqlQuery = "select distinct dok_dat_feld_20 from firmen_spezifisch where kue_dokuart = 'AADM' and dok_dat_feld_21 = '" + doc.field[ 16 ] + "' ";
|
||||
|
||||
def resultrows = d3.sql.executeAndGet( sqlQuery );
|
||||
|
||||
if ( resultrows.size() > 0 )
|
||||
{
|
||||
doc.field[ 15 ] = resultrows[ 0 ].dok_dat_feld_20;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
d3.log.info( "Validierung Register / Dokumenttyp erfolgt.");
|
||||
|
||||
// Validierung Register / Dokumenttyp calb @ d.velop 2025.12.12 ENDE
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
d3.log.info("ENDE | hookInsertEntry10 ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
57
Bayernoil/2025.12.12 Personalakte/20_value_sets.groovy
Normal file
57
Bayernoil/2025.12.12 Personalakte/20_value_sets.groovy
Normal file
@@ -0,0 +1,57 @@
|
||||
import com.dvelop.d3.server.core.D3Interface;
|
||||
import com.dvelop.d3.server.Document;
|
||||
import com.dvelop.d3.server.User;
|
||||
import com.dvelop.d3.server.DocumentType;
|
||||
import com.dvelop.d3.server.ValueSet;
|
||||
import com.dvelop.d3.server.RepositoryField;
|
||||
|
||||
|
||||
|
||||
public class ValueSetsCombined
|
||||
{
|
||||
|
||||
@ValueSet( entrypoint = "PERS_Dokumenttyp" )
|
||||
def PERS_Dokumenttyp( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def where = "";
|
||||
if ( doc.field[ 15 ] )
|
||||
{
|
||||
where = " and dok_dat_feld_20 = '" + doc.field[ 15 ] + "' "
|
||||
}
|
||||
|
||||
def sqlQuery = "select distinct dok_dat_feld_21 DDF from firmen_spezifisch where kue_dokuart = 'AADM' " + where + " order by dok_dat_feld_21 ";
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.DDF } );
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet( entrypoint = "PERS_Register" )
|
||||
def PERS_Register( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def sqlQuery = "select distinct dok_dat_feld_20 DDF from firmen_spezifisch where kue_dokuart = 'AADM'" + " order by dok_dat_feld_20 ";
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.DDF } );
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet( entrypoint = "PERS_PersonalNr" )
|
||||
def PERS_PersonalNr( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def sqlQuery = "select dok_dat_feld_1 || ' | ' || dok_dat_feld_3 || ' | ' || dok_dat_feld_2 mitarbeiter from firmen_spezifisch where kue_dokuart = 'APERS' order by mitarbeiter ";
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.mitarbeiter } );
|
||||
}
|
||||
}
|
||||
}
|
||||
296
Bewital/20_hooks.groovy
Normal file
296
Bewital/20_hooks.groovy
Normal file
@@ -0,0 +1,296 @@
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
443
Bewital/30_sets.groovy
Normal file
443
Bewital/30_sets.groovy
Normal file
@@ -0,0 +1,443 @@
|
||||
import com.dvelop.d3.server.core.D3Interface;
|
||||
import com.dvelop.d3.server.Document;
|
||||
import com.dvelop.d3.server.User;
|
||||
import com.dvelop.d3.server.DocumentType;
|
||||
import com.dvelop.d3.server.ValueSet;
|
||||
import com.dvelop.d3.server.ValueSetTranslation;
|
||||
import com.dvelop.d3.server.RepositoryField;
|
||||
import com.dvelop.d3.server.UserGroup
|
||||
import com.dvelop.d3.server.UserOrUserGroup
|
||||
import com.dvelop.d3.server.Translation;
|
||||
|
||||
public class Wertemenge
|
||||
{
|
||||
|
||||
@ValueSet(entrypoint="AbteilungenVertragsmanagement")
|
||||
def getAbteilungVM(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document attribContext)
|
||||
{
|
||||
|
||||
d3.log.info("Start getAbteilungVertragsmanagement");
|
||||
def mandant = attribContext.field[65][row_no];
|
||||
def wm
|
||||
if(mandant == "BEWITAL agri GmbH & Co. KG")
|
||||
{
|
||||
wm = 11
|
||||
}
|
||||
else if(mandant == "BEWITAL petfood GmbH & Co. KG")
|
||||
{
|
||||
wm = 12
|
||||
}
|
||||
else if(mandant == "BEWITAL Holding GmbH & Co. KG")
|
||||
{
|
||||
wm = 18
|
||||
}
|
||||
else if(mandant == "BEWITAL Petfood Vertrieb Ost GmbH & Co.KG")
|
||||
{
|
||||
wm = 19
|
||||
}
|
||||
else if(mandant == "Lipox GmbH & Co. KG")
|
||||
{
|
||||
wm = 20
|
||||
}
|
||||
|
||||
|
||||
def sqlParams = [wm];
|
||||
def h_sqlquery = "SELECT value_char_allowed AS Wert FROM doc_field_values WHERE predef_value_id = ?"
|
||||
def resultRows = null;
|
||||
if(mandant != null && mandant != "")
|
||||
{
|
||||
resultRows = d3.sql.executeAndGet( h_sqlquery , sqlParams);
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.Wert } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.info("Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.info("Keine Mandant ausgewaehlt.");
|
||||
}
|
||||
d3.log.info("Ende getAbteilungVertragsmanagement");
|
||||
}
|
||||
|
||||
|
||||
@ValueSet(entrypoint="KategorieZuVertragstyp")
|
||||
def getKategorieVM(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document attribContext)
|
||||
{
|
||||
|
||||
d3.log.info("Start getKategorieVM");
|
||||
def vertragstyp = attribContext.field[5];
|
||||
d3.log.info("Vertragstyp: $vertragstyp-")
|
||||
def wm
|
||||
if(vertragstyp == "Handelvertretung")
|
||||
{
|
||||
wm = 21
|
||||
}
|
||||
else if(vertragstyp.equals("Großhandelsvertrag DE."))
|
||||
{
|
||||
wm = 22
|
||||
}
|
||||
else if(vertragstyp.equals("Großhandelsvertrag Int."))
|
||||
{
|
||||
wm = 23
|
||||
}
|
||||
else if(vertragstyp == "Versicherungen")
|
||||
{
|
||||
wm = 24
|
||||
}
|
||||
else if(vertragstyp == "Markenrecht")
|
||||
{
|
||||
wm = 25
|
||||
}
|
||||
else if(vertragstyp == "Produktregistrierung")
|
||||
{
|
||||
wm = 26
|
||||
}
|
||||
else if(vertragstyp == "Vertrieb")
|
||||
{
|
||||
wm = 27
|
||||
}
|
||||
else if(vertragstyp == "Mietvertrag")
|
||||
{
|
||||
wm = 28
|
||||
}
|
||||
else if(vertragstyp == "Kaufvertrag")
|
||||
{
|
||||
wm = 29
|
||||
}
|
||||
else if(vertragstyp == "Wartungsvertrag")
|
||||
{
|
||||
wm = 30
|
||||
}
|
||||
else if(vertragstyp == "Dienstleistungsvertrag")
|
||||
{
|
||||
wm = 31
|
||||
}
|
||||
else if(vertragstyp == "Pachtvertrag/Erbbaurecht")
|
||||
{
|
||||
wm = 32
|
||||
}
|
||||
else if(vertragstyp == "Zertifizierungsvertrag")
|
||||
{
|
||||
wm = 33
|
||||
}
|
||||
else if(vertragstyp == "Lizenzvertrag")
|
||||
{
|
||||
wm = 34
|
||||
}
|
||||
else if(vertragstyp == "Listungsvertrag")
|
||||
{
|
||||
wm = 35
|
||||
}
|
||||
else if(vertragstyp == "Systemvertrag")
|
||||
{
|
||||
wm = 36
|
||||
}
|
||||
else if(vertragstyp == "Siegelnutzungsvertrag")
|
||||
{
|
||||
wm = 37
|
||||
}
|
||||
else if(vertragstyp == "Geheimhaltungsvereinbarung")
|
||||
{
|
||||
wm = 38
|
||||
}
|
||||
else if(vertragstyp == "Sponsoring/Werbung")
|
||||
{
|
||||
wm = 39
|
||||
}
|
||||
else if(vertragstyp == "Kreditvertrag")
|
||||
{
|
||||
wm = 40
|
||||
}
|
||||
else if(vertragstyp == "Lieferantenvertrag")
|
||||
{
|
||||
wm = 41
|
||||
}
|
||||
else if(vertragstyp == "Auftragsdatenverarbeitung")
|
||||
{
|
||||
wm = 42
|
||||
}
|
||||
else if(vertragstyp == "Bau-/Werkvertrag")
|
||||
{
|
||||
wm = 43
|
||||
}
|
||||
else if(vertragstyp == "Energieversorgung")
|
||||
{
|
||||
wm = 44
|
||||
}
|
||||
else if(vertragstyp == "Mitgliedschaften")
|
||||
{
|
||||
wm = 45
|
||||
}
|
||||
else if(vertragstyp == "Verpflichtungsvertrag")
|
||||
{
|
||||
wm = 46
|
||||
}
|
||||
else if(vertragstyp == "Sonstiges/Mischvertrag")
|
||||
{
|
||||
wm = 47
|
||||
}
|
||||
else if(vertragstyp == "Gesellschaftsvertrag")
|
||||
{
|
||||
wm = 48
|
||||
}
|
||||
else if(vertragstyp == "Migration")
|
||||
{
|
||||
wm = 50
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("Es konnte keine Vertragstyp gefunden werden.")
|
||||
}
|
||||
|
||||
def sqlParams = [wm];
|
||||
def h_sqlquery = "SELECT value_char_allowed AS Wert FROM doc_field_values WHERE predef_value_id = ?"
|
||||
def resultRows = null;
|
||||
if(vertragstyp != null && vertragstyp != "")
|
||||
{
|
||||
resultRows = d3.sql.executeAndGet( h_sqlquery , sqlParams);
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.Wert } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.info("Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
repoField.provideValuesForValueSet( "Bitte zuerst einen Mandant wählen." );
|
||||
}
|
||||
d3.log.info("Ende getAbteilungVertragsmanagement");
|
||||
}
|
||||
|
||||
@ValueSet(entrypoint="getReadAccessVM")
|
||||
def getReadAccessVM(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document attribContext)
|
||||
{
|
||||
d3.log.info("Start getReasAccessVM");
|
||||
d3.getArchive().removeTranslationFromCache("getReadAccessVM", new Locale("de"));
|
||||
def userGroup = d3.archive.getUserGroup("VM_Vererbt");
|
||||
|
||||
d3.log.info( "Show group information for: " + userGroup.name );
|
||||
def userList = [];
|
||||
userGroup.getMembers(UserGroup.MemberType.RECURSIVE).each { userOrGroup ->
|
||||
try
|
||||
{
|
||||
userList.add(userOrGroup.getUser().getEmail() )
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
d3.log.error("Fehler: Beim Auslesen der E-Mail Adresse des Benutzers ist es zu einem Fehler gekommen. " + ex)
|
||||
}
|
||||
}
|
||||
|
||||
if( userList.size() > 0 )
|
||||
{
|
||||
repoField.provideValuesForValueSet( userList );
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="getReadAccessVM")
|
||||
def getReadAccessVMTranslated(D3Interface d3, Translation transl)
|
||||
{
|
||||
d3.log.info("getReasAccessVM translated WM starts");
|
||||
def userGroup = d3.archive.getUserGroup("VM_Vererbt");
|
||||
userGroup.getMembers(UserGroup.MemberType.RECURSIVE).each { userOrGroup ->
|
||||
try
|
||||
{
|
||||
transl.set(userOrGroup.getUser().getEmail(), userOrGroup.defaultName);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
d3.log.error("Fehler: Beim Auslesen der Übersetzen des Benutzernamen." + ex)
|
||||
}
|
||||
}
|
||||
d3.log.info("getReasAccessVM translated WM starts");
|
||||
}
|
||||
|
||||
//////////////////////////////////////////
|
||||
// Wertemengen für die Filer-Ablösung calb/d.velop 2025.12.08 START
|
||||
|
||||
@ValueSet(entrypoint="WM_Auftragsnummer")
|
||||
def WM_Auftragsnummer(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document doc)
|
||||
{
|
||||
d3.log.info("Start WM_Auftragsnummer");
|
||||
|
||||
def sql = groovy.sql.Sql.newInstance( "jdbc:sqlserver://sql.adbewital.local;databaseName=" + "D3T_shared", "d3db_master", "D.velop!db", 'com.microsoft.sqlserver.jdbc.SQLServerDriver' );
|
||||
|
||||
def where = "";
|
||||
|
||||
if ( doc.field[ 2 ] )
|
||||
{
|
||||
if ( doc.field[ 2 ].indexOf( "|" ) > 0 )
|
||||
{
|
||||
def werte = doc.field[ 2 ].tokenize( "|" );
|
||||
|
||||
if ( werte[ 0 ].length() > 0 )
|
||||
{
|
||||
where = " where customer_no = '" + werte[ 0 ].trim() + "'";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
where = " where customer_no = '" + doc.field[ 2 ] + "'";
|
||||
}
|
||||
}
|
||||
|
||||
def sqlquery = "SELECT distinct order_no from bw_customer_order " + where;
|
||||
|
||||
def resultRows = null;
|
||||
resultRows = sql.rows( sqlquery );
|
||||
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.order_no } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("WM_Auftragsnummer: Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet(entrypoint="WM_Kundennummer")
|
||||
def WM_Kundennummer(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document doc)
|
||||
{
|
||||
d3.log.info("Start WM_Kundennummer");
|
||||
|
||||
def sql = groovy.sql.Sql.newInstance( "jdbc:sqlserver://sql.adbewital.local;databaseName=" + "D3T_shared", "d3db_master", "D.velop!db", 'com.microsoft.sqlserver.jdbc.SQLServerDriver' );
|
||||
|
||||
def sqlquery = "SELECT distinct customer_no + ' | ' + customer_name + ' | ' + customer_country as liste from bw_customer_data";
|
||||
|
||||
def resultRows = null;
|
||||
resultRows = sql.rows( sqlquery );
|
||||
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.liste } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("WM_Kundennummer: Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet(entrypoint="WM_Artikelnummer")
|
||||
def WM_Artikelnummer(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document doc)
|
||||
{
|
||||
d3.log.info("Start WM_Artikelnummer");
|
||||
|
||||
def sql = groovy.sql.Sql.newInstance( "jdbc:sqlserver://sql.adbewital.local;databaseName=" + "D3T_shared", "d3db_master", "D.velop!db", 'com.microsoft.sqlserver.jdbc.SQLServerDriver' );
|
||||
|
||||
def sqlquery = "SELECT distinct article_no + ' | ' + article_description as liste from bw_article_data";
|
||||
|
||||
def resultRows = null;
|
||||
resultRows = sql.rows( sqlquery );
|
||||
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.liste } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("WM_Artikelnummer: Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet(entrypoint="WM_Marke")
|
||||
def WM_Marke(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document doc)
|
||||
{
|
||||
d3.log.info("Start WM_Marke");
|
||||
|
||||
def sql = groovy.sql.Sql.newInstance( "jdbc:sqlserver://sql.adbewital.local;databaseName=" + "D3T_shared", "d3db_master", "D.velop!db", 'com.microsoft.sqlserver.jdbc.SQLServerDriver' );
|
||||
|
||||
def sqlquery = "SELECT distinct brand as liste from bw_brand";
|
||||
|
||||
def resultRows = null;
|
||||
resultRows = sql.rows( sqlquery );
|
||||
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.liste } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("WM_Marke: Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet(entrypoint="WM_Sortiment")
|
||||
def WM_Sortiment(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document doc)
|
||||
{
|
||||
d3.log.info("Start WM_Sortiment");
|
||||
|
||||
def sql = groovy.sql.Sql.newInstance( "jdbc:sqlserver://sql.adbewital.local;databaseName=" + "D3T_shared", "d3db_master", "D.velop!db", 'com.microsoft.sqlserver.jdbc.SQLServerDriver' );
|
||||
|
||||
def sqlquery = "SELECT distinct assortment as liste from bw_brand";
|
||||
|
||||
def resultRows = null;
|
||||
resultRows = sql.rows( sqlquery );
|
||||
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.liste } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("WM_Sortiment: Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet(entrypoint="WM_Mandant")
|
||||
def WM_Mandant(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document doc)
|
||||
{
|
||||
d3.log.info("Start WM_Mandant");
|
||||
|
||||
def sql = groovy.sql.Sql.newInstance( "jdbc:sqlserver://sql.adbewital.local;databaseName=" + "D3T_shared", "d3db_master", "D.velop!db", 'com.microsoft.sqlserver.jdbc.SQLServerDriver' );
|
||||
|
||||
def sqlquery = "SELECT distinct company_no + ' | ' + company_name as liste from bw_company";
|
||||
|
||||
def resultRows = null;
|
||||
resultRows = sql.rows( sqlquery );
|
||||
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.liste } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("WM_Mandant: Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSet(entrypoint="WM_Vertreter")
|
||||
def WM_Vertreter(D3Interface d3, RepositoryField repoField, User user, DocumentType docType, Integer row_no, Integer validate, Document doc)
|
||||
{
|
||||
d3.log.info("Start WM_Vertreter");
|
||||
|
||||
def sql = groovy.sql.Sql.newInstance( "jdbc:sqlserver://sql.adbewital.local;databaseName=" + "D3T_shared", "d3db_master", "D.velop!db", 'com.microsoft.sqlserver.jdbc.SQLServerDriver' );
|
||||
|
||||
def sqlquery = "SELECT distinct representative_no + ' | ' + representative_name as liste from bw_representative";
|
||||
|
||||
def resultRows = null;
|
||||
resultRows = sql.rows( sqlquery );
|
||||
|
||||
if(resultRows != null && resultRows.size() > 0)
|
||||
{
|
||||
repoField.provideValuesForValueSet( resultRows.collect{ it.liste } );
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn("WM_Vertreter: Keine SQL Ergebnisse");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Wertemengen für die Filer-Ablösung calb/d.velop 2025.12.08 ENDE
|
||||
//////////////////////////////////////////
|
||||
|
||||
|
||||
}
|
||||
31
Bewital/Const.groovy
Normal file
31
Bewital/Const.groovy
Normal file
@@ -0,0 +1,31 @@
|
||||
//// Allgemeine Konstante
|
||||
|
||||
//
|
||||
// Groovy Definitionsdatei für alle benötigten Konfigurationen
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
public class Const
|
||||
{
|
||||
// DDF der Repositoryfelder
|
||||
|
||||
static final int gDDF_KundenName = 1;
|
||||
static final int gDDF_KundenNr = 2;
|
||||
static final int gDDF_Land = 4;
|
||||
static final int gDDF_Artikelnummer = 12;
|
||||
static final int gDDF_Artikelname = 13;
|
||||
static final int gDDF_Mandant = 15;
|
||||
static final int gDDF_MandantName = 19;
|
||||
static final int gDDF_Vertreternummer = 32;
|
||||
static final int gDDF_Vertretername = 35;
|
||||
|
||||
|
||||
static final int gDDF_Mandant_VM = 65;
|
||||
|
||||
static final int gDDF_Vertragstyp_VM = 5;
|
||||
|
||||
|
||||
|
||||
}
|
||||
85
Bewital/SystemSpecificConst.groovy
Normal file
85
Bewital/SystemSpecificConst.groovy
Normal file
@@ -0,0 +1,85 @@
|
||||
//// Systemspezifische Konstante
|
||||
|
||||
//
|
||||
// Groovy Definitionsdatei für alle benötigten repositoryabhängigen Konfigurationen
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
public class SystemSpecificConst
|
||||
{
|
||||
// Repositoryfeld-IDs
|
||||
|
||||
static final int gKundenNrID = 109;
|
||||
static final int gArtikelNrID = 119;
|
||||
static final int gMandantID = 122;
|
||||
static final int gVertreterID = 136;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Wertemengen-IDs
|
||||
|
||||
static final int gWM_Abteilung_Bewital_agri = 11;
|
||||
static final int gWM_Abteilung_Bewital_petfood = 12;
|
||||
static final int gWM_Abteilung_holding = 18;
|
||||
static final int gWM_Abteilung_Petfood_Vertrieb_Ost = 19;
|
||||
static final int gWM_Abteilung_Lipox = 20;
|
||||
|
||||
static final int gWM_Kategorie_Handelsvertretung = 21;
|
||||
static final int gWM_Kategorie_Grosshandelsvertrag_DE = 22;
|
||||
static final int gWM_Kategorie_Grosshandelsvertrag_INT = 23;
|
||||
static final int gWM_Kategorie_Versicherungen = 24;
|
||||
static final int gWM_Kategorie_Markenrecht = 25;
|
||||
static final int gWM_Kategorie_Produktregistrierung = 26;
|
||||
static final int gWM_Kategorie_Vertrieb = 27;
|
||||
static final int gWM_Kategorie_Mietvertrag = 28;
|
||||
static final int gWM_Kategorie_Kaufvertrag = 29;
|
||||
static final int gWM_Kategorie_Wartungsvertrag = 30;
|
||||
static final int gWM_Kategorie_Dienstleistungsvertrag = 31;
|
||||
static final int gWM_Kategorie_Pachtvertrag_Erbbaurecht = 32;
|
||||
static final int gWM_Kategorie_Zertifizierungsvertrag = 33;
|
||||
static final int gWM_Kategorie_Lizenzvertrag = 34;
|
||||
static final int gWM_Kategorie_Leistungsvertrag = 35;
|
||||
static final int gWM_Kategorie_Systemvertrag = 36;
|
||||
static final int gWM_Kategorie_Siegelnutzungsvertrag = 37;
|
||||
static final int gWM_Kategorie_Geheimhaltungsvereinbarung = 38;
|
||||
static final int gWM_Kategorie_Sponsoring_Werbung = 39;
|
||||
static final int gWM_Kategorie_Kreditvertrag = 40;
|
||||
static final int gWM_Kategorie_Lieferantenvertrag = 41;
|
||||
static final int gWM_Kategorie_Auftragsdatenverarbeitung = 42;
|
||||
static final int gWM_Kategorie_Bau_Werkvertrag = 43;
|
||||
static final int gWM_Kategorie_Energieversorgung = 44;
|
||||
static final int gWM_Kategorie_Mitgliedschaften = 45;
|
||||
static final int gWM_Kategorie_Verpflichtungsvertrag = 46;
|
||||
static final int gWM_Kategorie_Sonstiges_Mischvertrag = 47;
|
||||
static final int gWM_Kategorie_Gesellschaftsvertrag = 48;
|
||||
static final int gWM_Kategorie_Migration = 50;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Datenbankverbindung
|
||||
static final String gDB_Name = "D3T_shared";
|
||||
static final String gDB_Benutzer = "d3db_master";
|
||||
static final String gDB_Passwort = "D.velop!db";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
137
Bewital/d3ValueSets.groovy
Normal file
137
Bewital/d3ValueSets.groovy
Normal file
@@ -0,0 +1,137 @@
|
||||
// Global d.3 libraries -------------------------------------------------------
|
||||
import com.dvelop.d3.server.core.D3;
|
||||
import com.dvelop.d3.server.core.D3Interface;
|
||||
import com.dvelop.d3.server.Document;
|
||||
import com.dvelop.d3.server.User;
|
||||
import com.dvelop.d3.server.DocumentType;
|
||||
// Libraries to handle the different hook types ---------------------------------------------------
|
||||
import com.dvelop.d3.server.Entrypoint;
|
||||
import com.dvelop.d3.server.Condition;
|
||||
// Libraries to handle the different hook types --------------------------------
|
||||
import com.dvelop.d3.server.Validation
|
||||
import com.dvelop.d3.server.ValueSet;
|
||||
import com.dvelop.d3.server.RepositoryField;
|
||||
import com.dvelop.d3.server.Translation;
|
||||
import com.dvelop.d3.server.ValueSetTranslation;
|
||||
|
||||
// Special libraries -----------------------------------------------------------------------------
|
||||
import groovy.sql.Sql;
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import groovy.json.JsonOutput;
|
||||
import groovy.json.JsonSlurper;
|
||||
import groovy.transform.Field;
|
||||
|
||||
|
||||
class d3ValueSets {
|
||||
|
||||
// Wertemenge fuer Benutzer
|
||||
@ValueSet (entrypoint = "vsUserIDP")
|
||||
def getUserIDPID( D3 d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
/*
|
||||
try {
|
||||
//Auslesen der IDP Benutzer IDs
|
||||
HttpsURLConnection idpRequest = new URL(Defs.baseURi + "/identityprovider/scim/users").openConnection();
|
||||
idpRequest.requestMethod = "GET";
|
||||
idpRequest.setRequestProperty("Origin", Defs.baseURi);
|
||||
idpRequest.setRequestProperty("Authorization", "Bearer " + Defs.ServiceAPIKey);
|
||||
idpRequest.setRequestProperty("Accept", "application/json");
|
||||
def response = idpRequest.getInputStream().getText();
|
||||
|
||||
def jsonSlurper = new JsonSlurper()
|
||||
def responseObject = jsonSlurper.parseText(response.toString())
|
||||
|
||||
initValueSetValues(d3, reposField, responseObject.resources.collect { it.get("id") }, "vsUserIDP")
|
||||
|
||||
}catch(Exception e) {
|
||||
d3.log.error("###-> Returnwert Fehler Ermittlung IDPId " + e.getMessage())
|
||||
}
|
||||
*/
|
||||
|
||||
String sql, fieldValue, fieldValue2
|
||||
int fieldPos
|
||||
|
||||
fieldValue = ""
|
||||
|
||||
fieldPos= reposField.getPreferedFieldNumber().toInteger()
|
||||
|
||||
if (fieldPos >= 60 && fieldPos <= 69)
|
||||
{
|
||||
fieldValue = doc.field[fieldPos][rowNo]
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldValue = doc.field[fieldPos]
|
||||
}
|
||||
|
||||
if (!(fieldValue) || fieldValue.length() < 3)
|
||||
{
|
||||
reposField.provideValuesForValueSet(["Please enter at least 3 characters."])
|
||||
}
|
||||
else
|
||||
{
|
||||
fieldValue2 = "%" + fieldValue + "%"
|
||||
|
||||
sql = """SELECT distinct top 50 idp_id as userid from benutzer
|
||||
WHERE (realname like ? or idp_id = ?)"""
|
||||
|
||||
def resultList = d3.sql.executeAndGet(sql, [fieldValue2, fieldValue])
|
||||
|
||||
initValueSetValues(d3, reposField, resultList.collect { it.get("userid") }, "vsUserIDP")
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
// Wertemenge fuer Benutzer
|
||||
@ValueSetTranslation (entrypoint = "vsUserIDP")
|
||||
def getUserIDPIDTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
/* 16.11.2023: Commented out as this is too slow for high amounts of users
|
||||
try {
|
||||
//Auslesen der IDP Benutzer IDs
|
||||
HttpsURLConnection idpRequest = new URL(Defs.baseURi + "/identityprovider/scim/users").openConnection();
|
||||
idpRequest.requestMethod = "GET";
|
||||
idpRequest.setRequestProperty("Origin", Defs.baseURi);
|
||||
idpRequest.setRequestProperty("Authorization", "Bearer " + Defs.ServiceAPIKey);
|
||||
idpRequest.setRequestProperty("Accept", "application/json");
|
||||
def response = idpRequest.getInputStream().getText();
|
||||
|
||||
def jsonSlurper = new JsonSlurper()
|
||||
Map parsedJson = jsonSlurper.parseText(response.toString()) ;
|
||||
def array1 = parsedJson.get("resources");
|
||||
List<String> idpval = new ArrayList<String>();
|
||||
Map<String, String> idpvalall = new HashMap<String, String>();
|
||||
String strMapValue = "" ;
|
||||
|
||||
for(def member : array1) {
|
||||
strMapValue = member.displayName ;
|
||||
idpval.add( member.id );
|
||||
idpvalall.put ( member.id , new String(strMapValue.getBytes(), "UTF-8") );
|
||||
}
|
||||
transl.set(idpvalall);
|
||||
|
||||
}catch(Exception e) {
|
||||
d3.log.error("###-> Returnwert Fehler Ermittlung IDPId " + e.getMessage())
|
||||
}
|
||||
*/
|
||||
|
||||
String sql
|
||||
|
||||
sql = "SELECT distinct realname as username, idp_id as userid from benutzer"
|
||||
|
||||
def resultList = d3.sql.executeAndGet(sql)
|
||||
resultList.each{ transl.set(it["userid"], it["username"]) }
|
||||
|
||||
return 0
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Hilfsfunktion zur Uebersetzung von Wertemengen
|
||||
private void initValueSetValues(D3Interface d3, RepositoryField repoField, Iterable<String> valueKeys, String valueSetId) {
|
||||
repoField.provideValuesForValueSet(valueKeys)
|
||||
d3.getArchive().removeTranslationFromCache(valueSetId, Locale.GERMAN)
|
||||
d3.getArchive().removeTranslationFromCache(valueSetId, Locale.ENGLISH)
|
||||
}
|
||||
}
|
||||
BIN
DMG Dental/.DS_Store
vendored
Normal file
BIN
DMG Dental/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
Enervie/2025.11.14 Einspeiseakten anlegen/Aktenart.png
Normal file
BIN
Enervie/2025.11.14 Einspeiseakten anlegen/Aktenart.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 737 KiB |
877
Enervie/2025.11.14 Einspeiseakten anlegen/EEG_Liste2.csv
Normal file
877
Enervie/2025.11.14 Einspeiseakten anlegen/EEG_Liste2.csv
Normal file
@@ -0,0 +1,877 @@
|
||||
GP-Anrede;Anlage Strasse;Anlage Hausnummer;Anlage PLZ;Anlage Ort;Anlage Gesamtwirkleistung;Anlage Inbetriebnahme-Datum;MaStR-Nummer der EEG-/KWK-Anlage;MaStR-Nummer der Einheit;GP-Strasse;GP-Hausnummer;GP-PLZ;GP-Ort
|
||||
Bartels, Diermann, Gläsel GbR;Parkstr.;50 R;58675;Hemer;99,82;31.03.2012;EEG931881391317;SEE910772801999;Resedarstr.;10a;44289;Dortmund
|
||||
Bartels, Diermann, Gläsel GbR;Parkstr.;48;58675;Hemer;57,5;31.03.2012;EEG905866478072;SEE953455624522;Resedarstr.;10a;44289;Dortmund
|
||||
Gisela & Silke Erwentraut GbR;Harkortstr.;2;58675;Hemer;59,28;20.12.2012;EEG917437536715;SEE942779967125;Von-Wrede-Str.;21;58675;Hemer
|
||||
Karl Josef Schulte GmbH & Co. KG;Amerikastr.;1;58675;Hemer;183,54;13.07.2011;EEG969328289682;SEE906304795478;Amerikastr.;1;58675;Hemer
|
||||
Diermann, Ursula;Parkstr.;46;58675;Hemer;98;28.04.2017;EEG986182706964;SEE989250830998;Am Plack;5;44149;Dortmund
|
||||
Kellner, Jens;Ernst-Stenner-Str.;34;58675;Hemer;58,065;28.09.2012;EEG985832966192;SEE963178758954;Ernst-Stenner-Str.;34;58675;Hemer
|
||||
Schmale, Sigrun;Ihmerter Str.;66;58675;Hemer;10,35;18.12.2009;EEG900997781374;SEE996162036998;Ihmerter Str.;66;58675;Hemer
|
||||
Noga, Ekkehard;Westendorfstr.;25a;58675;Hemer;4,25;09.01.2015;EEG987236522929;SEE995319870706;Westendorfstr.;25a;58675;Hemer
|
||||
Fichtner, Peter;Auf dem Kamp;25;58675;Hemer;6,89;05.07.2016;EEG989170671268;SEE997146463618;Auf dem Kamp;25;58675;Hemer
|
||||
Schulte, Marcus;Im Loh;15;58675;Hemer;8,85;17.07.2018;EEG946649579234;SEE979336039414;Im Loh ;15;58675;Hemer
|
||||
Messarius, Dr. Jochen;Frönsberger Str.;25a;58675;Hemer;9,9;02.10.2018;EEG926641284114;SEE936240931593;Frönsberger Str;25a;58675;Hemer
|
||||
Rotholz, Stephanie;Im Alten Garten;6;58675;Hemer;2,4;07.11.2002;EEG975243670665;SEE910147008725;Im alten Garten;6;58675;Hemer
|
||||
Koss, Andreas;Im Eichholz;2B;58675;Hemer;4,8;06.11.2017;EEG920938728305;SEE992768046270;Im Eichholz;2b;58675;Hemer
|
||||
Burchart, Hildegard;Hagedorn;10;58675;Hemer;5,87;22.10.2019;EEG948178859597;SEE915308165361;Hagedorn;10;58675;Hemer
|
||||
Gubba, Bettina und Augusto;Burhahnstr.;21L;58675;Hemer;6,5;17.06.2020;EEG946368120878;SEE919449301817;Burhahnstr.;21L;58675;Hemer
|
||||
Keune, Julia und Christian;Sternstr.;8;58675;Hemer;5;30.06.2008;EEG998600599072;SEE940795894432;Sternstr.;8;58675;Hemer
|
||||
Hönisch, Peter;Auf dem Lütgenstück;1b;58675;Hemer;4,5;18.11.2008;EEG994918883261;SEE939369538087;Auf dem Lütgenstück;1b;58675;Hemer
|
||||
Jaeger, Herbert;Heukopfstr.;1;58675;Hemer;6,97;09.09.2010;EEG913121734726;SEE927205303289;Heukopfstr.;1;58675;Hemer
|
||||
Kunold, Evelyn und Dr. Ingo;Waldweg;3;58675;Hemer;6,48;20.07.2009;EEG950289031984;SEE960424080661;Waldweg;3;58675;Hemer
|
||||
Mündelein-Jacobsen;Im Loh;11;58675;Hemer;3,78;31.07.2009;EEG937153678353;"SEE995075876189 ";Im Loh;11;58675;Hemer
|
||||
Becke, Klaus;Eichenhohl;22;58675;Hemer;5,92;28.12.2010;EEG999106521055;SEE993197033862;Eichenhohl;22;58675;Hemer
|
||||
Groll Solar GbR;Schwarzpaul;84;58675;Hemer;73,14;29.06.2010;EEG984838048321;SEE979038013415;Schwarzpaul;84;58675;Hemer
|
||||
Schneider, Helmut;Hagedorn;13;58675;Hemer;7,4;16.10.2009;EEG954156144678;SEE980497798140;Hagedorn;13;58675;Hemer
|
||||
Heesmann, Andrea und Gunnar;Am Wäldchen;2;58675;Hemer;7,13;12.05.2011;EEG998696865464;SEE915865780243;Am Wäldchen;2;58675;Hemer
|
||||
Sunjo, Biljana und Venco;Hagedorn;12A;58675;Hemer;6,84;30.08.2011;EEG910878114351;SEE938199143737;Hagedorn;12a;58675;Hemer
|
||||
Niehoff, Jochen;Am Hang;8;58675;Hemer;9,6;07.12.2011;EEG996143726764;SEE922133335739;Am Hang;8;58675;Hemer
|
||||
Unkhoff, Jens;Am Schlehdorn;5;58675;Hemer;5,76;30.03.2012;EEG934380613249;SEE927531410378;Am Schlehdorn;5;58675;Hemer
|
||||
Becke, Klaus;Eichenhohl;22;58675;Hemer;6,63;29.03.2012;EEG918067977787;SEE929027939417;Eichenhohl;22;58675;Hemer
|
||||
Schulte, Jochen;Ihmerter Str.;357;58675;Hemer;36,26;29.06.2012;EEG966678480462;SEE907682489959;Ihmerter Str;357;58675;Hemer
|
||||
Engelmann, Stefan;Stemmessiepener Weg;39;58675;Hemer;2,99;25.06.2010;EEG989253280516;SEE983865566709;Stemmessiepener Weg;39;58675;Hemer
|
||||
Schürmann-Richert, Mechthild;Westendorfstr.;20;58675;Hemer;5,76;29.06.2010;EEG993661491129;SEE934917153033;Westendorfstr.;20;58675;Hemer
|
||||
Schürmann-Richert, Mechthild;Westendorfstr.;20;58675;Hemer;1,98;20.11.2011;EEG939957933492;SEE930584959985;Westendorfstr.;20;58675;Hemer
|
||||
Wirtz, Tim;Im Loh;32;58675;Hemer;3;07.12.2001;EEG931618586405;SEE952873839167;Im Loh ;32;58675;Hemer
|
||||
Heymann, Thorsten;Im Loh;17;58675;Hemer;4;11.08.2011;EEG907779378210;SEE914588652974;Im Loh ;17;58675;Hemer
|
||||
Schledde, Margita;Am Iserbach;71;58675;Hemer;4,68;02.05.2007;EEG983045282375;SEE983413028444;Am Iserbach ;71;58675;Hemer
|
||||
Brückner, Gerd;Lettenberg;7;58675;Hemer;5;16.05.2007;EEG924886356030;SEE998518021771;Lettenberg;7;58675;Hemer
|
||||
Verbruggen, Michiel;Ennertsweg;42;58675;Hemer;5,04;06.11.2007;EEG992544297896;SEE929628266509;Ennertsweg;42;58675;Hemer
|
||||
Franke, Elvira;Im Dümpel;1;58675;Hemer;19,35;12.11.2007;EEG988936444238;SEE976660206697;Bodelschwinghstr.;8;58706;Menden
|
||||
Zobel, Gerlinde;Grüner Brink;14;58675;Hemer;2,88;11.11.1997;EEG953324349204;SEE911008023536;Grüner Brink;14;58675;Hemer
|
||||
Geltch, Christoph;Westerweg;3;58675;Hemer;6,3;02.11.2007;EEG980820617995;SEE903466760191;Westerweg ;3;58675;Hemer
|
||||
Isfort, Susanne;Karl-Bröger-Weg;4;58675;Hemer;1,26;19.11.2007;EEG922276594512;SEE992606796770;Karl-Bröger-Weg;4;58675;Hemer
|
||||
Scheffler, Lothar;Noldeweg;16;58675;Hemer;4,4;17.12.2007;EEG928716157149;SEE913107820375;Noldeweg;16;58675;Hemer
|
||||
Hoffmann, Norbert;Im Turm;32;58675;Hemer;3,24;18.12.2007;EEG962947593772;SEE985538408934;Im Turm;32;58675;Hemer
|
||||
Römer, Kathrin und Marcus;Prinzhornstr.;5;58675;Hemer;1,92;18.05.1999;EEG979190110847;SEE965382259852;Prinzhorn;5;58675;Hemer
|
||||
DBW Walther GmbH & Co.KG;Ostend;28;58675;Hemer;4,84;05.07.2008;EEG946985101229;SEE973331440404;Heinrich-Nuttebaum-Str.;6;58675;Hemer
|
||||
Schäfer, Karsten;Dorfstr.;14a;58675;Hemer;6,12;16.07.2008;EEG960262339099;SEE983221206201;Dorfstr.;14a;58675;Hemer
|
||||
Fröndenberger Naturstrom GbR;Bahnhofstr.;4;58675;Hemer;30;11.12.2008;EEG993107691519;SEE929542683062;Gehringer Schlade ;21;58802;Balve
|
||||
Fröndenberger Naturstrom GbR;Stephanstr.;7;58675;Hemer;30;11.12.2008;EEG956391938890;SEE918782578573;Gehringer Schlade ;21;58802;Balve
|
||||
Fröndenberger Naturstrom GbR;Bahnhofstr.;6;58675;Hemer;30;15.12.2008;EEG940106369222;SEE903305285076;Gehringer Schlade ;21;58802;Balve
|
||||
Kauke, Josef;Schopenhauerweg;5;58675;Hemer;6,45;16.12.2008;EEG970605504206;SEE949243928521;Schopenhauerweg;5;58675;Hemer
|
||||
Keller, Bernd;Heppingserbach;46;58675;Hemer;3;24.03.2009;EEG949751093308;SEE949192882424;Heppingserbach;46;58675;Hemer
|
||||
Annette Dunker-Borchmann u. Andreas Dunker;Am Heßufer;38a;58675;Hemer;6,21;07.05.2009;EEG958236853696;SEE977848690505;Am Hessufer;38;58675;Hemer
|
||||
Rohmann, Dieter;Am Knick;3;58675;Hemer;6,16;15.09.2009;EEG984828466807;SEE963000644813;Am Knick;3;58675;Hemer
|
||||
Börenz, Dagobert;Mühlenweg;33;58675;Hemer;8,33;24.08.2012;EEG902587782907;SEE944409107765;Mühlenweg;33;58675;Hemer
|
||||
Kübler, Mirjam;Parkstr.;84A;58675;Hemer;4,5;28.08.2014;EEG969517552467;SEE992291354101;Parkstr.;84a;58675;Hemer
|
||||
Jaeckel, Sonja u. Andreas;Stormweg;8;58675;Hemer;5,33;13.10.2009;EEG952532925910;SEE977773837006;Stormweg;8;58675;Hemer
|
||||
Schmöle, Hans;Parkstr.;97;58675;Hemer;6,86;29.06.2011;EEG926929021899;SEE932732114222;Parkstr.;97;58675;Hemer
|
||||
Knapp, Siegfried;Löhrberg;2;58675;Hemer;9,45;12.11.2009;EEG922315666897;SEE979975999704;Löhrberg;2;58675;Hemer
|
||||
Lehmann, Gerhard;Mühlenweg;3b;58675;Hemer;7,04;17.12.2009;EEG933627705129;SEE986416168308;Mühlenweg;3b;58675;Hemer
|
||||
Goldschmidt, Lothar;Urbecker Str.;123b;58675;Hemer;9,46;16.12.2009;EEG953963020236;SEE974762011461;Urbecker Str. ;123b;58675;Hemer
|
||||
Rößler, Saskia und Michael;Pastoratstr.;45;58675;Hemer;4,9;21.11.2009;EEG991561477335;SEE956855724519;Pastoratstr.;45;58675;Hemer
|
||||
Sommer, Gerhard;Stephanopel;36;58675;Hemer;5,76;23.11.2012;EEG938417653239;SEE935779530109;Stephanopel;36;58675;Hemer
|
||||
RUSS-Elektroofen Prod. GmbH & Co. KG;Ennertsweg;44;58675;Hemer;7,14;02.12.2009;EEG939167255964;SEE902621981600;Ennertsweg;44;58675;Hemer
|
||||
Winning, Dirk;Hans-Meyer-Str.;16;58675;Hemer;5,32;30.12.2009;EEG928887100944;SEE943282615527;Aixheimer Str.;12;70619;Stuttgart
|
||||
Koptschinski, Janin und Lars;Parkstr.;55a;58675;Hemer;6;30.12.2009;EEG929271100953;SEE936337212390;Parkstr.;55a;58675;Hemer
|
||||
Ernst Alberts;Zeppelinstr.;26;58675;Hemer;8,14;22.12.2009;EEG909652034763;SEE991529043053;Wilhelm-Bröckelmann-Str.;2c;58675;Hemer
|
||||
Koc, Rabiye und Muammer;Urbecker Str.;66;58675;Hemer;11,5;23.12.2009;EEG906649646213;;Urbecker Str. ;66;58675;Hemer
|
||||
Gies, Holger;Pestalozzistr.;17A;58675;Hemer;5,4;08.07.2015;EEG907179787681;SEE981721222516;Pestalozzistr.;17a;58675;Hemer
|
||||
Menzel, Gabriele;Jägerstr.;33;58675;Hemer;14,4;22.12.2009;EEG924797562957;SEE994223575776;Jägerstr.;33;58675;Hemer
|
||||
Kölling, Andreas;Apricke;2;58675;Hemer;8,05;04.05.2010;EEG998477687711;SEE949264533469;Apricke ;2;58675;Hemer
|
||||
Beckmann, Friedrich Wilhelm;Neuer Weg;8a;58675;Hemer;23,625;04.06.2010;EEG924011663064;SEE992043258008;Neuer Weg;8a;58675;Hemer
|
||||
Schumacher, Adrian;Goyastr.;6;58675;Hemer;8,8;29.03.2012;EEG908401290849;SEE912214173336;Goyastr.;6;58675;Hemer
|
||||
Schulte, Heiko;Riemke;17;58675;Hemer;8,05;30.06.2010;EEG943801070332;SEE962982132967;Riemke;17;58675;Hemer
|
||||
Tigges, Lieselotte und Michael;Landhauser Heide;24a;58675;Hemer;11,725;28.06.2010;EEG953212667656;SEE913440953211;Landhauser Heide;24a;58675;Hemer
|
||||
Schwarz, Ralf;Am Langeloh;43a;58675;Hemer;6,21;10.06.2010;EEG961059868921;SEE935089508133;Hauptstr.;154b;13158;Berlin
|
||||
Krone, Klaus-Jürgen;Bosselbar;19;58675;Hemer;9,72;28.06.2010;EEG977331918376;SEE955982924694;Bosselbar;19;58675;Hemer
|
||||
Heinrichs, Elke;Im Hölken;19;58675;Hemer;4,14;10.06.2010;EEG949234964736;SEE921357493263;Im Hölken;19;58675;Hemer
|
||||
Hoffmann, Norbert;Im Turm;32;58675;Hemer;2,85;30.06.2010;EEG971877003145;SEE948897621802;Im Turm;32;58675;Hemer
|
||||
Fulde, Klaus;Am Langeloh;41;58675;Hemer;4,5;28.04.2010;EEG996496998597;SEE989952021656;Am Langeloh;41;58675;Hemer
|
||||
Riesenfeld, Marian;Ostend;21A;58675;Hemer;6,9;29.09.2010;EEG949367960537;SEE915128505262;Ostend ;21a;58675;Hemer
|
||||
Fröndenberger Naturstrom GbR;Hademareplatz;1;58675;Hemer;24,61;27.12.2010;EEG993607794321;SEE903821368109;Gehringer Schlade ;21;58802;Balve
|
||||
C.D. Hücking Inh. K.F. Lueth;Englandstr.;12;58675;Hemer;37,26;21.12.2010;EEG974680768263;SEE933587310975;Englandstr.;12;58675;Hemer
|
||||
Netland GmbH;Bahnhofstr.;15;58675;Hemer;9,12;21.04.2011;EEG959104609063;SEE908845023836;Roggenkamp;8;58093;Hagen
|
||||
Energiegesellschaft Textor GbR;Ostenschlahstr.;20;58675;Hemer;10,56;06.06.2011;EEG925211928687;SEE952062809421;Westenhelle;28;59494;Soest
|
||||
Hennemann, Thorsten;Friedensstr.;4;58675;Hemer;7,52;24.06.2011;EEG930601419249;SEE948225632814;Poststr.;12;58675;Hemer
|
||||
Kriependorf, Rainer;Stephanopeler Str.;98;58675;Hemer;6,65;07.07.2011;EEG963941448280;SEE966649496652;Auf dem Eickenufer;12;58675;Hemer
|
||||
RUSS-Elektroofen Prod. GmbH & Co. KG;Habichtweg;2;58675;Hemer;3,99;21.06.2011;EEG951827790424;SEE929265132304;Ennertsweg;44;58675;Hemer
|
||||
Energiegesellschaft Textor GbR;Jübergstr.;37A;58675;Hemer;9,6;03.08.2011;EEG965848165512;SEE965320295584;Westenhelle;28;59494;Soest
|
||||
Energiegesellschaft Textor GbR;Jübergstr.;37b;58675;Hemer;9,6;03.08.2011;EEG909958374471;SEE989236497702;Westenhelle;28;59494;Soest
|
||||
Groll, Barbara;Charlotte-Terheyden-Weg;2;58675;Hemer;3,885;09.08.2011;EEG957934155880;SEE961981347150;Charlotte-Terheyden-Weg;2;58675;Hemer
|
||||
Giannakis, Nikolaos;Haarweg;27;58675;Hemer;2,156;29.01.2014;EEG999380101905;SEE960482039519;Haarweg;27;58675;Hemer
|
||||
Lahrmann, Werner;Heuweg;8;58675;Hemer;4;24.04.2012;EEG952852923337;SEE990849638055;Heuweg;8;58675;Hemer
|
||||
Gründlers, Björn;Piepers Garten;7;58675;Hemer;10,78;22.12.2011;EEG995391673721;SEE925014263695;Piepers Garten;7;58675;Hemer
|
||||
Hoffmann, Andreas;Mendener Str.;117a;58675;Hemer;7,595;29.12.2011;EEG988510640773;SEE993427975382;Mendener Str.;117a;58675;Hemer
|
||||
Westerhoff, Astrid;Dorfstr.;38;58675;Hemer;16,56;13.12.2011;EEG927710431781;SEE961098171679;Dorfstr.;38;58675;Hemer
|
||||
Kriependorf, Rainer;Auf dem Eickenufer;12;58675;Hemer;12,35;18.10.2011;EEG915803052357;SEE967264550064;Auf dem Eickenufer;12;58675;Hemer
|
||||
Förderverein Zukunftsenergie für unsere Stadt e.V., Klaus Hölcke;Am Osterbrauck;9;58675;Hemer;10,78;19.03.2012;EEG956289002696;SEE909382168592;Unter dem Kehlberg;19;58675;Hemer
|
||||
Stöwe, Johannes;Sonnenblumenallee;14;58675;Hemer;27,72;29.06.2010;EEG997128329185;SEE950200537847;Hauptstr.;269;58675;Hemer
|
||||
Große Böckmann, Thomas;Sonnenblumenallee;24;58675;Hemer;16,2;29.06.2010;EEG958808121437;SEE950447318872;Elvert;5;59348;Lüdinghausen
|
||||
Seuthe GmbH;Deilinghofer Str.;27;58675;Hemer;35,1;29.06.2010;EEG975729386851;SEE903528722068;Deilinghofer Str.;11;58675;Hemer
|
||||
Gematho Solar GbR;Deilinghoferstr.;29;58675;Hemer;35,6;29.06.2010;EEG938746734104;SEE907469844919;Berger;32;59394;Nordkirchen
|
||||
Seuthe GmbH;Deilinghoferstr.;19;58675;Hemer;42,4;29.06.2010;EEG979885954497;SEE972786810688;Deilinghofer Str.;11;58675;Hemer
|
||||
Orth, Elke und Rainer;Deilinghofer Str.;12Z;58675;Hemer;74,875;29.06.2010;EEG971144257080;SEE970965703721;Nordhellen;27;58540;Meinerzhagen
|
||||
Müller, Klaus;Deilinghofer Str.;12Y;58675;Hemer;85,86;29.06.2010;EEG945205861653;SEE961208583309;Hermann-Tuleke-Str.;12;32839;Steinheim
|
||||
Bartels, Diermann, Gläsel GbR;Bergstr.;3;58675;Hemer;69,09;05.03.2012;EEG915967555626;SEE921213592376;Resedastr.;10a;44289;Dortmund
|
||||
Bürgermeister der Stadt Hemer Christian Schweitzer;Hauptstr.;18;58675;Hemer;96,6;31.03.2012;EEG948014092911;SEE909533157390;Hademareplatz;44;58675;Hemer
|
||||
Reichardt, Angelika;Ernst-Stenner-Str.;52;58675;Hemer;29,75;28.01.2016;EEG915438847885;SEE957382479248;Ernst-Stenner-Str.;52;58675;Hemer
|
||||
Bürgermeister der Stadt Hemer Christian Schweitzer;Am Hammerscheid;40;58675;Hemer;27,6;31.03.2012;EEG971313258108;SEE959279282351;Hademareplatz;44;58675;Hemer
|
||||
Busch, Torsten;Deilingerhofstr.;35;58675;Hemer;30,6;29.06.2010;EEG942649605195;SEE914495367831;Eserkamp;17;58675;Hemer
|
||||
Breitenstein, Birgit;Deilinghofer Str.;10;58675;Hemer;15,3;29.06.2010;EEG942608327908;SEE923992825393;Felsenmeerstr.;30;58675;Hemer
|
||||
Bals, Ingo;Am Haseloh;3;58675;Hemer;19,44;25.03.2014;EEG967358439251;SEE976296501791;Breddestr.;21;58675;Hemer
|
||||
Wilkes, Markus;Am Langeloh;38A;58675;Hemer;8,4;14.05.2012;EEG962021374273;SEE940276889209;Am Langeloh;38a;58675;Hemer
|
||||
Smarza, Fredy;Kapellenweg;4;58675;Hemer;3,9;11.11.2014;EEG983592419903;SEE913417504675;Kapellenweg;4;58675;Hemer
|
||||
Gauda, Bernd;Am Iserbach;83;58675;Hemer;10,335;29.03.2012;EEG986929182228;SEE929705562524;Am Iserbach ;83;58675;Hemer
|
||||
Falkenhagen, Gabriele u. Michael;Am Teilfeld;10;58675;Hemer;4,6;02.04.2013;EEG993927913204;SEE996059295422;Am Teilfeld;10;58675;Hemer
|
||||
Levermann, Erwin;Am Schoppenweg;12;58675;Hemer;3,01;09.09.2009;EEG991914454976;SEE928196092725;Am Schoppenweg;12;58675;Hemer
|
||||
Teichert, Michael;Am Sonnenhang;23C;58675;Hemer;4,92;28.03.2013;EEG905610475098;SEE938581056324;Am Sonnenhang;23c;58675;Hemer
|
||||
Nowak, Michael;Brockhauser Weg;18;58675;Hemer;5,1;14.10.2015;EEG997160059323;SEE968744652254;Brockhauser Weg;18;58675;Hemer
|
||||
Kirmes, Sandra;Büttmecker Weg;14;58675;Hemer;7,215;31.07.2013;EEG932676003446;SEE912688739106;Büttmecker Weg;14;58675;Hemer
|
||||
Genau, Doris;Büttmecker Weg;15A;58675;Hemer;9,8;10.06.2013;EEG959560803647;SEE915589960174;Büttmecker Weg;15a;58675;Hemer
|
||||
Strack, Melanie und Sebastian;Caller Str.;17A;58675;Hemer;9,6;29.08.2012;EEG971399623791;SEE961698139178;Callerstr.;17a;58675;Hemer
|
||||
Rapke, Markus;Brockhauser Weg;59;58675;Hemer;4,845;29.08.2014;EEG942444045691;SEE902110480317;Brockhauser Weg;59;58675;Hemer
|
||||
Hammer, Rudolf;Droste-Hülshoff-Weg;13;58675;Hemer;7,68;05.12.2011;EEG943538239859;SEE900990895887;Droste-Hülshoff-Weg ;13;58675;Hemer
|
||||
Becker, Dagmar;Schottlandstr.;1;58675;Hemer;27;25.06.2014;EEG984120829591;SEE920813188118;Schottlandstr. ;1;58675;Hemer
|
||||
Rohde, Ingo;Droste-Hülshoff-Weg;82;58675;Hemer;5,2;30.07.2013;EEG965897560269;SEE956356353522;Droste-Hülshoff-Weg ;82;58675;Hemer
|
||||
Kulagin, Vadim;Breddestr.;5D;58675;Hemer;3;21.11.2014;EEG924112569593;SEE957883324412;Breddestr.;5d;58675;Hemer
|
||||
Kinzel, Christopher;Von-Ketteler-Weg;3;58675;Hemer;5,13;01.03.2015;EEG979130040715;SEE959982233480;Von-Ketteler-Weg;3;58675;Hemer
|
||||
Schulz, Jörg;Heinrich-Lersch-Weg;3;58675;Hemer;3,2;08.05.2002;EEG938377607525;SEE991439191547;Heinrich-Lersch-Weg;3;58675;Hemer
|
||||
Behrendt, Uwe;Droste-Hülshoff-Weg;70;58675;Hemer;7,38;25.03.2013;EEG912690436864;SEE993010633910;Droste-Hülshoff-Weg ;70;58675;Hemer
|
||||
Stanojevic, Linda;Am Voßholz;11;58675;Hemer;3,6;20.09.2002;EEG997564917465;SEE979346377803;Am Voßholz;11;58675;Hemer
|
||||
Knodt, Christa;Caller Str.;65;58675;Hemer;2,64;23.09.2002;EEG982544958149;SEE968670969426;Callerstr.;65;58675;Hemer
|
||||
Figge, Ingo;Schmetterlingsweg;11;58675;Hemer;8,64;17.12.2012;EEG946987121072;SEE951515639370;Schmetterlingsweg;11;58675;Hemer
|
||||
Zeumer, Falk-Holger;Emil-Nensel-Straße;5;58675;Hemer;4,68;01.08.2016;EEG987204686363;SEE904951608066;Emil-Nensel-Str. ;5;58675;Hemer
|
||||
Martynow, Alexander;Hans-Meyer-Str.;9;58675;Hemer;9,54;17.03.2016;EEG934487752445;SEE980372013375;Hans-Meyer-Str.;9;58675;Hemer
|
||||
Dumrau, Nadeschda;Emil-Nensel-Straße;4;58675;Hemer;5,2;12.04.2016;EEG962697956308;SEE910054615665;Emil-Nensel-Str. ;4;58675;Hemer
|
||||
Lahrmann, Doreen und Alexander;Charlotte-Terheyden-Weg;11;58675;Hemer;5,1;29.03.2016;EEG995800424104;SEE939034465427;Charlotte-Terheyden-Weg;11;58675;Hemer
|
||||
Schulte, Carolin;Schmetterlingsweg;13;58675;Hemer;7,8;13.04.2016;EEG988817581229;SEE914582638196;Schmetterlingsweg;13;58675;Hemer
|
||||
Opitz, Matthias;Fichtestr.;28;58675;Hemer;2;22.04.2003;EEG900938127957;SEE950444305370;Fichtestr.;28;58675;Hemer
|
||||
Flor, Christian;Breslauer Str.;31;58675;Hemer;7,5;20.09.2013;EEG931404521207;SEE961473570707;Breslauer Str.;29;58675;Hemer
|
||||
Gertischke, Peter;Am Sonnenhang;2;58675;Hemer;4,9;19.11.2003;EEG956626686114;SEE907650179844;Am Sonnenhang;2;58675;Hemer
|
||||
Blichmann, Frank;Auf dem Brauck;13;58675;Hemer;5,1;22.04.2004;EEG986359218924;SEE992592661762;Auf dem Brauck;13;58675;Hemer
|
||||
Graetz, Achim;Ginsterweg;12C;58675;Hemer;5,5;15.10.2015;EEG987799713888;SEE964757313885;Ginsterweg;12c;58675;Hemer
|
||||
Hücking, Carsten;Am Urberg;19;58675;Hemer;10,112;15.07.2005;EEG948327699173;SEE952562166147;Urbecker Str. ;96b;58675;Hemer
|
||||
Strachwitz, Georg;Steinstr.;4;58675;Hemer;4,9;26.10.2005;EEG973710906316;SEE960054163987;Steinstr.;4;58675;Hemer
|
||||
Haas, Stefan;Geitbecke;13;58675;Hemer;7,02;21.11.2005;EEG988012131069;SEE916389639109;Geitbecke;13;58675;Hemer
|
||||
Kriependorf, Rainer;Auf dem Eickenufer;12;58675;Hemer;5,76;31.10.2012;EEG986370350832;SEE973536001226;Auf dem Eickenufer ;12;58675;Hemer
|
||||
Kaup, Kerstin;Apricke;14B;58675;Hemer;6,24;10.12.2015;EEG967930827957;SEE987273681535;Apricke ;14b;58675;Hemer
|
||||
Podlesch, Wilfried;Feldstr.;61a;58675;Hemer;6,804;19.10.2006;EEG946861681371;SEE916301551960;Feldstr.;61a;58675;Hemer
|
||||
Schulte, Günter;Lohstr.;33b;58675;Hemer;29,75;04.08.2006;EEG911013203671;SEE934676753277;Ennertsweg;40;58675;Hemer
|
||||
Schulte, Günter;Ennertsweg;40;58675;Hemer;4,55;03.09.2006;EEG980600087352;SEE998510068057;Ennertsweg;40;58675;Hemer
|
||||
Fritsch, Helmut;Von-Romberg-Str.;1;58675;Hemer;11,34;28.12.2006;EEG902931371580;SEE958560951594;Von-Romberg-Str.;1;58675;Hemer
|
||||
Wünsche, Jörg;Haarweg;26;58675;Hemer;4,5;16.01.2015;EEG967084861227;SEE952854720156;Haarweg;26;58675;Hemer
|
||||
Steiof, Heinz und Helga;Adjutantenkamp;11;58675;Hemer;3,85;30.03.2010;EEG934656766938;SEE961987468965;Adjutantenkamp;11;58675;Hemer
|
||||
Cilek, Ahmet;Am Bemberg;15;58675;Hemer;9,18;14.11.2015;EEG958353233258;SEE928814315526;Am Bemberg;15;58675;Hemer
|
||||
Hoffmann, Peter;Am Hillebach;10;58675;Hemer;3;22.06.2015;EEG964820672000;SEE937240686018;Am Hillebach;10;58675;Hemer
|
||||
Hauke, Hans Joachim;Am Langeloh;20A;58675;Hemer;3,525;30.09.2013;EEG933870007728;SEE921477081791;Am Langeloh;20a;58675;Hemer
|
||||
Franke, Jörg;Am Langeloh;24;58675;Hemer;3,68;30.09.2013;EEG930988453966;SEE967230275182;Am Langeloh;24;58675;Hemer
|
||||
Hennemann, Meinolf;Am Roland;29;58675;Hemer;8,305;13.05.2011;EEG922762622194;SEE975514457995;Am Roland;29;58675;Hemer
|
||||
Kittner, Friedhelm;Am Rosenhof;6;58675;Hemer;12,985;26.07.2012;EEG912695779614;SEE928148226932;Am Rosenhof;6;58675;Hemer
|
||||
Hernandez, Luise;Am Schieferbruch;5;58675;Hemer;4,2;17.08.2009;EEG976507054382;SEE917314778726;Am Schieferbruch;5;58675;Hemer
|
||||
Hennemann, Dirk;Am Tannenkopf;7;58675;Hemer;5,16;01.07.2013;EEG930129663520;SEE959790285817;Am Tannenkopf;7;58675;Hemer
|
||||
Hennemann, Stefan;Am Tannenkopf;9;58675;Hemer;5,875;17.05.2011;EEG916105993577;SEE976682452942;Am Tannenkopf;9;58675;Hemer
|
||||
Schulze, Ingo;Am Tyrol;3;58675;Hemer;7,155;17.07.2015;EEG907955136788;SEE993197740241;Am Tyrol;3;58675;Hemer
|
||||
Dodt, Martin;An der Landwehr;1A;58675;Hemer;10,8;29.06.2010;EEG967741640936;SEE942501391501;An der Landwehr ;1a;58675;Hemer
|
||||
Giese, Harald;Auf dem Hohenstein;48;58675;Hemer;0,8;22.09.2000;EEG906470766494;SEE932653532174;Auf dem Hohenstein;48;58675;Hemer
|
||||
Schönenberg, Klaus Werner;Beethovenstr.;7;58675;Hemer;6,27;30.11.2012;EEG901030662056;SEE921076317307;Beethovenstr.;7;58675;Hemer
|
||||
Schulte-Nockelmann, Christa;Bembergstr.;40;58675;Hemer;5,4;11.05.2011;EEG903330707413;SEE919930227800;Bembergstr.;40;58675;Hemer
|
||||
Gildenberg, Waldemar;Breslauer Str.;24;58675;Hemer;8;13.06.2013;EEG911044374722;SEE909365250429;Breslauer Str.;24;58675;Hemer
|
||||
Gildenberg, Walter;Breslauer Str.;24;58675;Hemer;8;13.06.2013;EEG978664905200;SEE986136433342;Breslauer Str.;24;58675;Hemer
|
||||
Flor, Christian;Breslauer Str.;29;58675;Hemer;9,75;20.09.2013;EEG947181574718;SEE954567817277;Breslauer Str.;29;58675;Hemer
|
||||
Henkel, Peter;Brucknerstr.;14;58675;Hemer;5,1;07.12.2012;EEG917821126461;SEE982624710667;Brucknerstr.;14;58675;Hemer
|
||||
Vöpel, Henning;Bäingser Weg;100;58675;Hemer;5,28;25.02.2013;EEG938003101625;SEE912171087318;Bäingser Weg;100;58675;Hemer
|
||||
Noreiks-Lange, Ilse;Caller Str.;75;58675;Hemer;3,78;29.08.2014;EEG972015819970;SEE900921930083;Callerstr.;75;58675;Hemer
|
||||
Sander, Jörg;Droste-Hülshoff-Weg;84;58675;Hemer;5,74;23.04.2013;EEG939312695331;SEE923753276860;Droste-Hülshoff-Weg ;84;58675;Hemer
|
||||
Ziegler, Ralf;Dulohstr.;8;58675;Hemer;2,4;29.09.1997;EEG973536610084;SEE967401617643;Dulohstr.;8;58675;Hemer
|
||||
Hartwich, Paul;Eichenweg;6;58675;Hemer;5,83;07.12.2015;EEG971710899072;SEE903864701727;Eichenweg;6;58675;Hemer
|
||||
Tüttelmann, Thomas;Fromersbert;10;58675;Hemer;70,8;28.06.2013;EEG994857960061;SEE967155974559;Fromersbert;10;58675;Hemer
|
||||
Fröhlecke, Denis;Ginsterweg;12A;58675;Hemer;4,77;30.08.2012;EEG901814249473;SEE985943580867;Ginsterweg;12a;58675;Hemer
|
||||
Frank, Konstantin;Hönnetalstr.;183;58675;Hemer;9,88;26.03.2016;EEG936553366426;SEE957302379733;Hönnetalstr.;183;58675;Hemer
|
||||
Langendorf, Wolfgang;Haarweg;53A;58675;Hemer;4,5;20.02.2013;EEG953550496710;SEE935856660934;Haarweg;53a;58675;Hemer
|
||||
Graulich, Stephan;Haarweg;65;58675;Hemer;5,5;10.07.2013;EEG924651956311;SEE908410283337;Haarweg;65;58675;Hemer
|
||||
Schäfer, Sigfried;Heinrich-Lersch-Weg;4;58675;Hemer;6,05;07.08.2015;EEG948650247836;SEE957958822744;Heinrich-Lersch-Weg;4;58675;Hemer
|
||||
Tschorn, Hannelore;Heinrich-Lersch-Weg;8;58675;Hemer;6,16;19.06.2013;EEG953938508981;SEE952657758479;Heinrich-Lersch-Weg;8;58675;Hemer
|
||||
Bauer, Stephan;Heppingsen;70;58675;Hemer;32,43;14.12.2011;EEG930049158434;SEE917529574199;Heppingsen;70;58675;Hemer
|
||||
Ferrire, Annegret;Hermann-Claudius-Weg;6;58675;Hemer;1,56;29.05.2015;EEG929624244631;SEE930998549079;Hermann-Claudius-Weg;6;58675;Hemer
|
||||
Rosenthal, Karl-Heinz;Holbeinstr.;14;58675;Hemer;5,07;04.07.2012;EEG903097589468;SEE990556773551;Holbeinstr.;14;58675;Hemer
|
||||
Jaeger, Michael;Im Bockeloh;6;58675;Hemer;4,73;23.10.2011;EEG964090197340;SEE923312676506;Im Bockeloh;6;58675;Hemer
|
||||
Manfred & Gerda Steinberg GbR;Im Dümpel;12;58675;Hemer;77,33;29.12.2010;EEG908202432004;SEE953471639807;Im Dümpel;12;58675;Hemer
|
||||
Schulte, Bertold;Im Hölken;4;58675;Hemer;6;14.03.2014;EEG929503878674;SEE903101910271;Im Hölken;4;58675;Hemer
|
||||
Mellert;Im Keunenborn;12A;58675;Hemer;22,05;09.03.2012;EEG965563840978;SEE972787459282;Im Keunenborn;12a;58675;Hemer
|
||||
Dahm, Andreas;Im Nettelchen;8;58675;Hemer;8,5;27.06.2013;EEG944271817441;SEE932375997251;Im Nettelchen;8;58675;Hemer
|
||||
Erne, Gerhard;In der Gähre;4;58675;Hemer;6,12;30.07.2013;EEG949061672224;SEE947286071273;In der Gähre;4;58675;Hemer
|
||||
Da Costa;Jägerstr.;11;58675;Hemer;6,72;25.04.2013;EEG994219603629;SEE952895926913;Jägerstr.;11;58675;Hemer
|
||||
Schotte, Sarah und Tim;Jägerstr.;12;58675;Hemer;3,25;29.03.2012;EEG985888360197;SEE989936792817;Jägerstr.;12;58675;Hemer
|
||||
Menzel, Gabriele;Jägerstr.;33;58675;Hemer;9,12;30.03.2012;EEG917219179611;SEE971762037453;Jägerstr.;33;58675;Hemer
|
||||
Franke, Tobias;Kapellenweg;2;58675;Hemer;5,5;30.09.2013;EEG902201905279;SEE979506103181;Am Langeloh;24;58675;Hemer
|
||||
Mämecke, Irmgard;Kiefernweg;15;58675;Hemer;1,96;24.09.1997;EEG912113230307;SEE931023382852;Kiefernweg;15;58675;Hemer
|
||||
Dämmer, Gabriele;Lamferstr.;34;58675;Hemer;6;03.09.2015;EEG990582026287;SEE925208222392;Lamferstr.;34;58675;Hemer
|
||||
Malke, Uwe;Landhauser Str.;114;58675;Hemer;4,5;12.12.2014;EEG971817404049;SEE980840430550;Landhauser Str.;114;58675;Hemer
|
||||
Giebels, Johannes;Lindenstr.;2;58675;Hemer;4,375;20.04.2010;EEG944018134763;SEE999775693152;Lindenstr.;2;58675;Hemer
|
||||
Albert Hohlkörper GmbH & Co. KG;Märkische Str.;38;58675;Hemer;4,8;14.11.2002;EEG978553540703;SEE935383748525;Märkische Str.;38;58675;Hemer
|
||||
Paulokat, Christina;Oberlinweg;40;58675;Hemer;9,62;23.09.2013;EEG981238542718;SEE983370863126;Oberlinweg;40;58675;Hemer
|
||||
Körber, Maria-Helena;Parkstr.;70;58675;Hemer;5,7;04.03.2011;EEG939764608972;SEE941998275585;Parkstr.;70;58675;Hemer
|
||||
Althaus, Martin;Peter-Grah-Str.;12;58675;Hemer;4,94;01.12.2010;EEG945731999592;SEE940117735955;Peter-Grah-Str.;12;58675;Hemer
|
||||
Vollmert, Ernst und Sofija;Rembrandtstr.;3;58675;Hemer;7,44;22.11.2012;EEG997402788929;SEE963277825281;Rembrandtstr;3;58675;Hemer
|
||||
Gil Fernandez, Carlos;Rembrandtstr.;6;58675;Hemer;7,2;12.12.2012;EEG964508808189;SEE907910370929;Rembrandtstr;6;58675;Hemer
|
||||
Pfannenschmidt, Wilhelm;Rembrandtstr.;7A;58675;Hemer;9,69;03.12.2013;EEG968668182448;SEE906196191907;Rembrandtstr;7a;58675;Hemer
|
||||
Gerres, Peter;Rembrandtstr.;8;58675;Hemer;7,68;22.03.2012;EEG958610071494;SEE930537538243;Rembrandtstr;8;58675;Hemer
|
||||
Hövener, Klaus-Jürgen;Rembrandtstr.;13;58675;Hemer;8;19.04.2013;EEG978362121438;SEE930583503240;Rembrandtstr;13;58675;Hemer
|
||||
Lewerenz, Frank;Schulstr.;12;58675;Hemer;12,09;14.11.2011;EEG984007395218;SEE960780988953;Schulstr.;12;58675;Hemer
|
||||
Behle, Karsten und Tanja;Schulstr.;13;58675;Hemer;11,34;12.05.2011;EEG932031603366;SEE990017817497;Schulstr.;13;58675;Hemer
|
||||
Heidsick, Ursula;Seilerstr.;3;58675;Hemer;8,36;17.10.2013;EEG900821335827;SEE996860101172;Seilerstr.;3;58675;Hemer
|
||||
Philipps, Christian;Stephanopel;36A;58675;Hemer;6,56;29.05.2013;EEG964953605333;SEE949118351133;Stephanopel;36a;58675;Hemer
|
||||
Mündelein, Volker;Sundwiger Weg;4;58675;Hemer;5,28;13.01.2016;EEG982577346791;SEE906303162639;Sundwiger Weg;4;58675;Hemer
|
||||
Deipenwisch, Reinhard;Urbecker Str.;83;58675;Hemer;6,84;31.03.2012;EEG972831273338;SEE945195303461;Urbecker Str. ;83;58675;Hemer
|
||||
Tentscher, Peter;Urbecker Str.;92;58675;Hemer;5;26.10.2011;EEG970656846874;SEE929190865247;Urbecker Str.;92;58675;Hemer
|
||||
Schönhoff, Jörg;Von-Wrede-Str.;11A;58675;Hemer;17,1;23.11.2009;EEG907923985561;SEE918554610487;Von-Wrede-Str.;11a;58675;Hemer
|
||||
Erwentraut, Gisela;Von-Wrede-Str.;21;58675;Hemer;7,02;28.08.2013;EEG997559866983;SEE912057507381;Von-Wrede-Str.;21;58675;Hemer
|
||||
Westermann, Kristina und Markus;Voßstr.;19;58675;Hemer;6,09;21.09.2014;EEG990155901560;SEE979351137898;Voßstr.;19;58675;Hemer
|
||||
Menneken, Rainer;Wenhagener Str.;4;58675;Hemer;2,2;15.09.2010;EEG963650699072;SEE965236575794;Wenhagener Str.;4;58675;Hemer
|
||||
Weick, Thomas;Wenhagener Str.;20A;58675;Hemer;7,68;22.03.2012;EEG940089908814;SEE955261838711;Wenhagener Str.;20a;58675;Hemer
|
||||
Giebels, Peter;Zeppelinstr.;69;58675;Hemer;6,58;18.04.2011;EEG901352398367;SEE940036496838;Zeppelinstr.;69;58675;Hemer
|
||||
Schmidt, Dirk;Stormweg;39;58675;Hemer;5;14.03.2013;EEG951247889586;SEE982819390599;Stormweg;39;58675;Hemer
|
||||
Wahlers, Bernhard;Am Rosenhof;1;58675;Hemer;5,3;31.07.2012;EEG956420171205;SEE917309883992;Am Rosenhof;1;58675;Hemer
|
||||
Kapkowski, Gilbert;Am Oelbusch;25;58675;Hemer;5,72;24.08.2013;EEG961530037259;SEE975297940677;Am Oelbusch;25;58675;Hemer
|
||||
Knipping, Werner;Dorfstr.;1;58675;Hemer;7,25;20.01.2014;EEG917975323198;SEE984613421851;Dorfstr.;1;58675;Hemer
|
||||
Osterbrauck, Friedhelm;Eserkamp;42;58675;Hemer;3,43;29.05.2012;EEG951949348947;SEE965557251117;Eserkamp;42;58675;Hemer
|
||||
Samsz, Roland;Falkenweg;6;58675;Hemer;5,27;28.08.2013;EEG947874159925;SEE921686982964;Falkenweg;6;58675;Hemer
|
||||
Maiwurm, Winfried;Piepers Garten;2;58675;Hemer;9,36;03.08.2020;EEG981906307014;SEE945514477378;Piepers Garten;2;58675;Hemer
|
||||
Schmidt, Karl-Heinz;Im Wiehagen;5;58675;Hemer;6,9;12.05.2017;EEG991820485040;SEE981259214199;Im Wiehagen;5;58675;Hemer
|
||||
Bohm, Erika;Lenbachstr.;3A;58675;Hemer;6,63;10.02.2016;EEG915907677890;SEE942296728315;Lenbachstr.;3a;58675;Hemer
|
||||
Schaaf, Katrin;Am Dasbrauck;3;58675;Hemer;9,38;23.07.2020;EEG930155214482;SEE977819631865;Am Dasbrauck;3;58675;Hemer
|
||||
Willkomm, Alexander;Am Dasbrauck;3C;58675;Hemer;8,32;23.09.2019;EEG919884810585;SEE986523685576;Am Dasbrauck;3c;58675;Hemer
|
||||
Kucharzyk, Raimund;Landhauser Str.;98;58675;Hemer;3,6;21.08.2019;EEG917670114053;SEE989019378303;Landhauser Str.;98;58675;Hemer
|
||||
TV Hemer 1862 e.V., Herrn Mick Schelberg;Nockenstr.;15;58675;Hemer;32,55;19.01.2018;EEG950765410500;SEE922774592690;Nockenstr.;15;58675;Hemer
|
||||
Varandani-Gogia, Yasmin;Am Langeloh;22;58675;Hemer;6,76;22.12.2016;EEG955340382524;SEE976931096057;Am Langeloh;22;58675;Hemer
|
||||
Schmöle, Günter;Apricke;22A;58675;Hemer;4,8;22.03.2019;EEG913210766676;SEE954459962559;Apricke ;22a;58675;Hemer
|
||||
Hakenberg, Hubert;An der Iserkuhle;3;58675;Hemer;9,81;31.08.2016;EEG908402216015;SEE907617442912;An der Iserkuhle;3;58675;Hemer
|
||||
Akol, Deniz;Apricke;71;58675;Hemer;8,96;30.05.2017;EEG947479696337;SEE926916453559;Apricke ;71;58675;Hemer
|
||||
Steinhelfer, Damian;Ernst-Stenner-Str.;2;58675;Hemer;7,8;13.09.2019;EEG967953872286;SEE995457927591;Ernst-Stenner-Str.;2;58675;Hemer
|
||||
Zellien, Carsten;Bautenheide;15;58675;Hemer;5,3;20.01.2017;EEG976996485056;SEE929422440822;Bautenheide;15;58675;Hemer
|
||||
Schleich, Karl-Dieter;An der Windfuhr;21;58675;Hemer;8,19;30.11.2019;EEG910220101565;SEE942433893623;An der Windfuhr;21;58675;Hemer
|
||||
Schellewald, Benjamin;Doris-Ebbing-Straße;1;58675;Hemer;7,08;05.07.2016;EEG996660437723;SEE902134871498;Doris-Ebbing-Str.;1;58675;Hemer
|
||||
Flitsch, Sonja und Kai Uwe;Schmetterlingsweg;7;58675;Hemer;4,5;29.02.2016;EEG978360490475;SEE954987578987;Schmetterlingsweg;7;58675;Hemer
|
||||
Pauls, Oxana;Schmetterlingsweg;5;58675;Hemer;10;02.03.2016;EEG915052395793;SEE942747752340;Schmetterlingsweg;5;58675;Hemer
|
||||
Wollny, Jürgen;Schmetterlingsweg;3;58675;Hemer;5;20.01.2016;EEG965483617353;SEE961471547343;Schmetterlingsweg;3;58675;Hemer
|
||||
Schmöle, Dominic;Emil-Nensel-Straße;3;58675;Hemer;4,8;29.03.2019;EEG940510939417;SEE973164295516;Emil-Nensel-Str. ;3;58675;Hemer
|
||||
Jonen, Christoph;Schmetterlingsweg;1;58675;Hemer;3,72;19.12.2016;EEG925967898777;SEE985731594144;Schmetterlingsweg;1;58675;Hemer
|
||||
Blankenberg, Nadine;Lange Wiese;3;58675;Hemer;7,54;13.03.2017;EEG915291435663;SEE902303464988;Lange Wiese;3;58675;Hemer
|
||||
PV Stadtvilla U + H Sprenger GbR;Elsa-Brandström-Str.;14;58675;Hemer;50;23.03.2018;EEG923222153074;SEE985313134249;Tailgelbrand;8;58640;Iserlohn
|
||||
Menze, Tim;Lange Wiese;33;58675;Hemer;2,43;05.12.2018;EEG964283239482;SEE975363275788;Lange Wiese;33;58675;Hemer
|
||||
Menze, Tim;Lange Wiese;33;58675;Hemer;1,89;28.12.2019;EEG948390531912;SEE901459333568;Lange Wiese;33;58675;Hemer
|
||||
Rieske, Alexander;Nikolai-Gubarew-Str.;1;58675;Hemer;4,1;04.10.2019;EEG985730758301;SEE994698005952;Nikolai-Gubarew-Str.;1;58675;Hemer
|
||||
Ott, Eduard;Lange Wiese;42;58675;Hemer;5,7;28.06.2019;EEG967553621802;SEE977226274815;Lange Wiese;42;58675;Hemer
|
||||
Messarius, Jürgen;Felsenmeerstr.;22;58675;Hemer;6;30.08.2019;EEG976484933960;SEE943458107337;Felsenmeerstr.;22;58675;Hemer
|
||||
Kossak, Thorsten;Lange Wiese;1;58675;Hemer;7,68;10.09.2019;EEG959477741452;SEE946578808849;Lange Wiese;1;58675;Hemer
|
||||
Kudraschov, Elena;Haarweg;41;58675;Hemer;6,12;02.12.2016;EEG901495633554;SEE972859717463;Haarweg;41;58675;Hemer
|
||||
Schabram, Dominik;Bäingser Weg;98;58675;Hemer;6,82;09.03.2020;EEG913523831979;SEE991072497280;Bäingser Weg;98;58675;Hemer
|
||||
Schlenke, Gerd;Haarweg;29;58675;Hemer;9,6;30.08.2018;EEG945717862360;SEE952092209796;Haarweg;29;58675;Hemer
|
||||
Meier, Marlis;Arndtstr.;6;58675;Hemer;6,9;04.12.2019;EEG905082211200;SEE974536353520;Arndtstr.;6;58675;Hemer
|
||||
Gross, Wolfgang;Auf dem Brauck;20;58675;Hemer;6,2;31.01.2019;EEG965288782287;SEE910789663337;Auf dem Brauck;20;58675;Hemer
|
||||
Bartmann, Stefan;Balver Weg;34;58675;Hemer;2,86;23.03.2017;EEG981070572973;SEE942628663451;Balver Weg;34;58675;Hemer
|
||||
Verborg, Dirk;Birkenweg;17;58675;Hemer;4,06;05.12.2017;EEG962688562822;SEE959420843813;Birkenweg;17;58675;Hemer
|
||||
Reiffenrath, Christian;Buchenweg;6;58675;Hemer;6,24;09.11.2016;EEG963975928789;SEE916937389210;Buchenweg;6;58675;Hemer
|
||||
Schabram, Dominik;Bäingser Weg;98;58675;Hemer;6,51;06.03.2020;EEG909237233482;SEE953393711612;Bäingser Weg;98;58675;Hemer
|
||||
Fehring-Hänsch, Reinhard;Dorfstr.;59A;58675;Hemer;6,6;01.08.2018;EEG945445026553;SEE954305709567;Dorfstr.;59a;58675;Hemer
|
||||
Verfuß, Christiane;Dulohstr.;51;58675;Hemer;4,64;13.04.2016;EEG966030141406;SEE961454059634;Dulohstr.;51;58675;Hemer
|
||||
Barowsky, Jo-Ann;Ennertsweg;60;58675;Hemer;2,34;09.12.2016;EEG977977378039;SEE930807836338;Ennertsweg;60;58675;Hemer
|
||||
Rohlof, Christian;Fuchsweg;7;58675;Hemer;9,805;28.05.2019;EEG972728360721;SEE985683579244;Fuchsweg;7;58675;Hemer
|
||||
Berger, Johannes;Gerrit-Engelke-Weg;4;58675;Hemer;4,96;08.08.2019;EEG963132659907;SEE905970133812;Gerrit-Engelke-Weg;4;58675;Hemer
|
||||
Ziebach, Michael;Hönnetalstr.;242A;58675;Hemer;7,29;08.03.2018;EEG974174754383;SEE929025048258;Hönnetalstr.;242a;58675;Hemer
|
||||
Buchgeister, Johannes;Haarweg;73;58675;Hemer;9,92;24.06.2019;EEG951004475472;SEE960031873694;Haarweg;73;58675;Hemer
|
||||
Welter, Stefan;Haarweg;79;58675;Hemer;9,9;17.02.2020;EEG923223080652;SEE962444652514;Haarweg;79;58675;Hemer
|
||||
Voss, Michael;Hembecker Weg;13;58675;Hemer;6,405;13.09.2019;EEG904156428391;SEE908449349356;Hembecker Weg;13;58675;Hemer
|
||||
Gailer, Friederike u. Georg;Hembecker Weg;36;58675;Hemer;7,8;23.03.2020;EEG990186403743;SEE946226781937;Hembecker Weg;36;58675;Hemer
|
||||
Elke Vöpel-Weidemann und Uwe Weidemann;Hembecker Weg;43A;58675;Hemer;6;06.04.2017;EEG911907842054;SEE949470605196;Hembecker Weg;43a;58675;Hemer
|
||||
Schneider, Ursula;Heuweg;14;58675;Hemer;6,24;27.02.2017;EEG950717890497;SEE973305217674;Heuweg;14;58675;Hemer
|
||||
Stopsack, Arne Hermann;Im Bockeloh;27;58675;Hemer;9,54;21.09.2016;EEG979129531699;SEE922175105079;Im Bockeloh;27;58675;Hemer
|
||||
Hohendorf, Burkhard;In den Klippen;17;58675;Hemer;6,84;28.11.2016;EEG959075848379;SEE981146342257;In den Klippen;17;58675;Hemer
|
||||
Matrigiano, Marco;In der Bilmecke;9;58675;Hemer;7,848;02.12.2016;EEG986429810669;SEE995818917650;In der Bilmecke;9;58675;Hemer
|
||||
Hanke, Thomas;Lenbachstr.;29;58675;Hemer;3,6;24.04.2017;EEG909439654917;SEE957523096037;Lenbachstr.;29;58675;Hemer
|
||||
Liehn, Johann;Prinzhornstr.;1;58675;Hemer;8,71;06.07.2020;EEG971537492890;SEE975537231343;Prinzhornstr.;1;58675;Hemer
|
||||
Hiepel, Marcus;Rehpfad;9;58675;Hemer;9,16;11.01.2017;EEG995383468861;SEE972488170783;Rehpfad;9;58675;Hemer
|
||||
Solar The World;Unter dem Asenberg;36;58675;Hemer;18,72;22.04.2020;EEG968168985075;SEE958845365443;Forsthausstr.;4;82031;Grünwalt
|
||||
Keller, Björn;Unter dem Naumberg;19;58675;Hemer;6,5;09.01.2020;EEG905853809414;SEE904496680763;Unter dem Naumberg;19;58675;Hemer
|
||||
Bergert, Holger;Von-Ketteler-Weg;1;58675;Hemer;5,49;20.03.2019;EEG952164815986;SEE949685136881;Von-Ketteler-Weg;1;58675;Hemer
|
||||
Friedrich Kirchhoff GmbH;Apricker Weg;15;58675;Hemer;9,83;21.04.2020;EEG964019693298;SEE927584315569;Apricker Weg;15;58675;Hemer
|
||||
Amsbeck, Wolfgang;Brockhauser Weg;33A;58675;Hemer;8,45;18.05.2020;EEG927210460946;SEE903760123289;Brockhauser Weg;33a;58675;Hemer
|
||||
Klemm, Horst;Mesterscheid;1;58675;Hemer;7,75;31.08.2020;EEG918322591734;SEE918511919615;Mesterscheid;1;58675;Hemer
|
||||
Seifert, Daniela;Büttmecker Weg;44;58675;Hemer;9,86;09.07.2020;EEG907367328498;SEE947273589019;Büttmecker Weg;44;58675;Hemer
|
||||
Graw, Fabio;Am Dasbrauck;19;58675;Hemer;8,775;16.07.2020;EEG914453428666;SEE977393802217;Am Dasbrauck;19;58675;Hemer
|
||||
Demiralmaz, Klaudia;Kiefernweg;11;58675;Hemer;9,24;05.08.2020;EEG994758618856;SEE905794283755;Kiefernweg;11;58675;Hemer
|
||||
Winzer, Christel;Dorfstr.;3;58675;Hemer;4,16;28.09.2016;EEG966725315785;SEE915841206552;Dorfstr.;3;58675;Hemer
|
||||
Trottier, Dirk;Am Knapp;10;58675;Hemer;0,3;07.06.2020;EEG980050514613;SEE978941077217;Am Knapp;10;58675;Hemer
|
||||
Frehde, Benjamin;Im Siepen;2;58675;Hemer;0,6;22.06.2020;EEG993591012258;SEE922862794272;Im Siepen;2;58675;Hemer
|
||||
Köpke, Björn;Am Wernshagen;37;58675;Hemer;3,66;07.10.2020;EEG902691477294;SEE942252471941;Am Wernshagen;37;58675;Hemer
|
||||
Rohmann, Dieter;Am Knick;3;58675;Hemer;1,98;25.11.2009;EEG925294280443;SEE955565610914;Am Knick;3;58675;Hemer
|
||||
Hücking, Carsten;Am Urberg;19;58675;Hemer;5,94;15.07.2005;EEG948841858254;SEE901561423157;Urbecker Str.;96b;58675;Hemer
|
||||
Schulte-Nockelmann, Christa;Bembergstr.;40;58675;Hemer;3,15;20.06.2011;EEG925034451812;SEE969028617839;Bembergstr.;40;58675;Hemer
|
||||
Rosenthal, Karl-Heinz;Holbeinstr.;14;58675;Hemer;2,058;20.04.2013;EEG903160544448;SEE938069971606;Holbeinstr.;14;58675;Hemer
|
||||
Menzel, Gabriele;Jägerstr.;33;58675;Hemer;3,04;30.03.2012;EEG906568773793;SEE919124735128;Jägerstr.;33;58675;Hemer
|
||||
Barowsky, Jo-Ann;Ennertsweg;60;58675;Hemer;2,34;28.09.2016;EEG977977378039;SEE930807836338;Ennertsweg;60;58675;Hemer
|
||||
Schumacher, Ingo;Dulohstr.;25;58675;Hemer;9,75;10.12.2020;EEG907943596327;SEE912039676791;Dulohstr.;25;58675;Hemer
|
||||
Rosenthal, Michael;Ennertsweg;30;58675;Hemer;7,15;23.11.2020;EEG990322379826;SEE916596560975;Ennertsweg;30;58675;Hemer
|
||||
Heinrich-Martin Borowka;Im Alten Garten;8;58675;Hemer;27,3;16.09.2020;EEG944128979193;SEE983346981007;Im alten Garten;8;58675;Hemer
|
||||
Atay, Merih;An der Kalkegge;12;58675;Hemer;14,64;01.12.2020;EEG904200839609;SEE935857779055;An der Kalkegge ;12;58675;Hemer
|
||||
Chudy, Jürgen;Brockhauser Weg;97;58675;Hemer;7,75;28.04.2014;EEG931260290491;SEE994841738508;Brockhauser Weg;97;58675;Hemer
|
||||
Chudy, Udo;Am Tannenkopf;26;58675;Hemer;5,06;18.06.2011;EEG901658393257;SEE947954823890;Am Tannenkopf;26;58675;Hemer
|
||||
Bals, Ingo;Am Haseloh;1;58675;Hemer;19,44;25.03.2014;EEG908841981703;SEE933624948192;Breddestr.;21;58675;Hemer
|
||||
Hellmann, Martina;Gartenstr.;35;58675;Hemer;5,28;19.11.2020;EEG916463236033;SEE925338678939;Gartenstr.;35;58675;Hemer
|
||||
Hülsmeyer, Marco;Kiefernweg;14;58675;Hemer;9,75;15.03.2020;EEG900696370633;SEE918341795762;Kiefernweg;14;58675;Hemer
|
||||
Schwantge, Heike;In der Erborst;18;58675;Hemer;9,92;18.09.2020;EEG960086667637;SEE998584606582;In der Erborst;18;58675;Hemer
|
||||
Stenner, Marco;Burhahnstr.;37;58675;Hemer;11,94;30.03.2021;EEG980587137699;SEE995325557899;Burhahnstr.;37;58675;Hemer
|
||||
Zwara, Martin;Charlotte-Terheyden-Weg;21;58675;Hemer;7,15;06.04.2020;EEG903097633949;SEE982947558717;Charlotte-Terheyden-Weg;21;58675;Hemer
|
||||
Schmidt, Torsten;Lange Wiese;10;58675;Hemer;7,44;24.06.2020;EEG968623098609;SEE997863586683;Lange Wiese;10;58675;Hemer
|
||||
Hartmann, Rolf;Unter dem Asenberg;8;58675;Hemer;6,93;29.04.2020;EEG914564719745;SEE990182619452;Unter dem Asenberg;8;58675;Hemer
|
||||
Porrello, Tabea;Am Bemberg;19D;58675;Hemer;9,24;04.05.2020;EEG990880651457;SEE982798455852;Am Bemberg;19d;58675;Hemer
|
||||
Moldoch, Alexandra;Am Eibenbrink;9;58675;Hemer;3,3;30.04.2020;EEG955839649107;SEE945652088610;Am Eibenbrink;9;58675;Hemer
|
||||
Spieckermann, Kirsten;Brandeiche;20;58675;Hemer;9,92;15.05.2020;EEG925694689501;SEE958537664663;Brandeiche;20;58675;Hemer
|
||||
Weifenbach, Jan;Brockhauser Weg;45A;58675;Hemer;9,92;04.05.2020;EEG982322878652;SEE954942794636;Brockhauser Weg;45a;58675;Hemer
|
||||
Blask, Inge;Am Wernshagen;21A;58675;Hemer;7;05.06.2020;EEG991022168901;SEE959223662529;Am Wernshagen;21a;58675;Hemer
|
||||
Porwol, Christoph;Am Haseloh;46;58675;Hemer;4,48;08.05.2020;EEG913142924267;SEE927254117424;Am Haseloh;46;58675;Hemer
|
||||
Zedda, Luciano;Auf dem Kliewe;3;58675;Hemer;11,05;23.06.2020;EEG918763983068;SEE920677013922;Auf dem Kliewe;3;58675;Hemer
|
||||
Ganzer, Bernd;Heisterbusch;4;58675;Hemer;7,2;26.03.2020;EEG997301486940;SEE913304817598;Heisterbusch;4;58675;Hemer
|
||||
Borggräfe, Marcel;Wenhagener Str.;5;58675;Hemer;7,92;20.01.2020;EEG952770313425;SEE911513852485;Wenhagener Str.;5;58675;Hemer
|
||||
Krause, Rainer;Wenhagener Str.;32;58675;Hemer;5,7;11.07.2017;EEG915630659408;SEE934227304446;Wenhagener Str.;32;58675;Hemer
|
||||
Sassner, Frank;Ostfeldstr.;29;58675;Hemer;4,5;21.09.2012;EEG923209526990;SEE982472992864;Ostfeldstr.;29;58675;Hemer
|
||||
Düllberg, Gerald u. Adriana;Burhahnstr.;19;58675;Hemer;6,24;30.10.2012;EEG968487977843;SEE900304432746;Burhahnstr.;19;58675;Hemer
|
||||
Thomas, Treudt;Ihmerter Str.;215b;58675;Hemer;9,75;29.04.2021;EEG973920232830;SEE958256884656;Ihmerter Str.;215b;58675;Hemer
|
||||
Schroth, Tatjana;Auf dem Kamp;17;58675;Hemer;4,95;22.02.2021;EEG995167286438;SEE999309848225;Auf dem Kamp;17;58675;Hemer
|
||||
Suthan, Kirupasini;Wittekindstr.;14A;58675;Hemer;7,92;26.05.2021;EEG999477474721;SEE903604792480;Wittekindstr.;14a;58675;Hemer
|
||||
Martinschledde, Gerd;Goyastr.;3;58675;Hemer;4,95;24.06.2021;EEG937843997665;SEE953416990581;Goyastr.;3;58675;Hemer
|
||||
Kretschmer, Mathias;Habichtweg;5;58675;Hemer;5,4;29.01.2013;EEG993820698529;SEE997667291073;Habichtweg ;5;58675;Hemer
|
||||
Frank, Sabrina-Vanessa;Im Beil;7;58675;Hemer;3;13.11.2017;EEG984706293945;SEE989228408068;Im Beil;7;58675;Hemer
|
||||
Karin Lehmkühler und Werner Rosenthal;Ebberg;7;58675;Hemer;5,2;22.09.2017;EEG915579207265;SEE981766918658;Ebberg ;7;58675;Hemer
|
||||
Sönmez, Sertan;Hans-Meyer-Str.;22;58675;Hemer;6,867;04.10.2017;EEG924094127378;SEE956087149449;Hans-Meyer-Str.;22;58675;Hemer
|
||||
Jankowiak, Renate;Am Tannenkopf;33B;58675;Hemer;6,3;13.01.2018;EEG983960052374;SEE967116295419;Am Tannenkopf;33b;58675;Hemer
|
||||
Bongardt, Stefan;Droste-Hülshoff-Weg;15;58675;Hemer;7,2;03.04.2017;EEG900336844135;SEE970162692996;Droste-Hülshoff-Weg ;15;58675;Hemer
|
||||
Claudia und Michael Patzkies;Kiefernweg;7;58675;Hemer;9,72;12.06.2017;EEG900224276062;SEE911577135951;Kiefernweg;7;58675;Hemer
|
||||
Müller, Rainer;Parkstr.;71;58675;Hemer;6,05;08.06.2017;EEG995330337820;SEE980031017867;Parkstr.;71;58675;Hemer
|
||||
Drolshagen, Klaus;Westerweg;3A;58675;Hemer;8,06;29.07.2020;EEG903010726574;SEE995656158949;Westernweg;3a;58675;Hemer
|
||||
Plattes, Thomas;Am Tannenkopf;21c;58675;Hemer;8,91;14.08.2020;EEG953944880446;SEE941525821377;Am Tannenkopf;21c;58675;Hemer
|
||||
Verfuß GmbH;Mendener Str.;36;58675;Hemer;29,7;22.08.2017;EEG935461182999;SEE952650758483;Mendener Str.;40;58675;Hemer
|
||||
Seeliger, Dietmar Reinhard;Haarweg;30;58675;Hemer;9,1;25.03.2020;EEG999561963933;SEE943472260315;Haarweg;30;58675;Hemer
|
||||
Amelung-Schiebel und Schiebel GbR;Bäingser Weg;96;58675;Hemer;7,8;09.11.2020;EEG948216333058;SEE953983526831;Bäingser Weg;96;58675;Hemer
|
||||
Hendel, Kornelia;Ginsterweg;18;58675;Hemer;8,4;08.10.2020;EEG930093932851;SEE959724721824;Ginsterweg;18;58675;Hemer
|
||||
Sprenger, Christian;Hönnetalstr.;57;58675;Hemer;5,35;17.09.2019;EEG931178859254;SEE958556207308;Hönnetalstr.;57;58675;Hemer
|
||||
Pieper, Reinhold Hubertus;Am Sommerholt;16B;58675;Hemer;11,52;23.06.2021;EEG953756582057;SEE911239004380;Am Sommerholt;16b;58675;Hemer
|
||||
Günes, Sedat;Lamferstr.;27;58675;Hemer;9,9;06.07.2021;EEG903169121107;SEE947692540479;Lamferstr.;27;58675;Hemer
|
||||
Klein, Manuela;Im Santel;7;58675;Hemer;9,38;19.10.2020;EEG992889533161;SEE902535373850;Im Santel;7;58675;Hemer
|
||||
Jäschke, Gregor;Im Hölken;8;58675;Hemer;6,12;23.09.2020;EEG983967851048;SEE908964936581;Im Hölken;8;58675;Hemer
|
||||
Magiera, Jennifer und Meik;Fliednerweg;6;58675;Hemer;8,87;19.08.2021;EEG941311839708;SEE976553791255;Fliednerweg;6;58675;Hemer
|
||||
Ruberg, Dietmar;Am Dasbrauck;6;58675;Hemer;9,1;18.01.2021;EEG965885578818;SEE941700507089;Am Dasbrauck;6;58675;Hemer
|
||||
Beckmann, Volker;Neuer Weg;25;58675;Hemer;10;30.07.2021;EEG958605197611;SEE923698303973;Neuer Weg;25;58675;Hemer
|
||||
Lohre, Stephan;Scharpschnute;1;58675;Hemer;7,92;30.07.2021;EEG971725473717;SEE981387289762;Scharpschnute;1;58762;Altena
|
||||
Lemke, Doris;Auf dem Schilk;6;58675;Hemer;8,91;02.09.2021;EEG907946458318;SEE928308376286;Auf dem Schilk;6;58675;Hemer
|
||||
Nixdorf, Helga;Falkenweg;7;58675;Hemer;9,36;20.04.2021;EEG972720078334;SEE963715371073;Falkenweg;7;58675;Hemer
|
||||
Fessen, Winfried;Am Branddorn;18;58675;Hemer;5,18;02.09.2021;EEG973061345314;SEE949203736708;Am Branddorn;18;58675;Hemer
|
||||
Scheidemann, Maxim;Lenbachstr.;23;58675;Hemer;11,52;09.08.2021;EEG964462678064;SEE983215445029;Lenbachstr.;23;58675;Hemer
|
||||
Schorlemmer, Frank;Droste-Hülshoff-Weg;47;58675;Hemer;3,28;19.08.2021;EEG972542732018;SEE996263834752;Droste-Hülshoff-Weg ;47;58675;Hemer
|
||||
Schneider, Lothar;Heppingsen;23;58675;Hemer;9,52;15.09.2021;EEG942981385557;SEE955029070261;Heppingsen;23;58675;Hemer
|
||||
Schween, Cedrik;In der Gähre;7;58675;Hemer;24,75;29.10.2021;EEG923323717731;SEE991484542219;Bergstr.;32;58905;Hagen
|
||||
Schäfer, Tim;Iserlohner Str.;32;58675;Hemer;16,3;10.09.2021;EEG923833577856;SEE966167318931;Iserlohner Str.;32;58675;Hemer
|
||||
Pohl, Oliver;Ulmenweg;10;58675;Hemer;8,8;23.08.2021;EEG998132305448;SEE919629104306;Ulmenweg;10;58675;Hemer
|
||||
KEUCO GmbH & Co. KG;Oesestr.;36;58675;Hemer;39;30.08.2012;EEG950166452420;SEE954721016683;Oesestr.;36;58675;Hemer
|
||||
Henning, Uwe;Am Teilfeld;36;58675;Hemer;6,38;15.09.2021;EEG985655801342;SEE966358532344;Am Teilfeld;36;58675;Hemer
|
||||
Winner Spedition GmbH & Co. KG;Am Wernshagen;37;58675;Hemer;28,4;04.01.2021;EEG929700464816;SEE999576648931;Industriepark Edelbur;5;58675;Hemer
|
||||
Hisserich, Christoph;An der Fußgängerbrücke;6;58675;Hemer;17,625;24.11.2021;EEG937532623844;SEE992895126838;An der Fußgängerbrücke;6;58675;Hemer
|
||||
Schulte, Elisabeth;Iserlohner Str.;9;58675;Hemer;9,9;29.09.2020;EEG925687686821;SEE904432603078;Iserlohner Str.;9;58675;Hemer
|
||||
Manolopoulos, Konstantin;Im Beil;8;58675;Hemer;24,82;25.10.2021;EEG928225069537;SEE933032986298;Virchowstr.;5a;44263;Dortmund
|
||||
Ochmann, Alexander;Emil-Nensel-Straße;6;58675;Hemer;7,15;17.05.2021;EEG942485168328;SEE936539710526;Emil-Nensel-Str. ;6;58675;Hemer
|
||||
Einsiedel, Jörg;Parkstr.;68;58675;Hemer;10;24.06.2021;EEG952968337684;SEE983971693696;Parkstr.;68;58675;Hemer
|
||||
Landschaftsverband Westfalen-Lippe (LWL);Frönsberger Str.;71;58675;Hemer;27,28;30.07.2019;EEG980942994912;SEE931896553304;Frönsberger Str;71;58675;Hemer
|
||||
Gamig, Armin;Im Bockeloh;29B;58675;Hemer;4,44;27.12.2021;EEG946978998768;SEE970777878211;Im Bockeloh;29b;58675;Hemer
|
||||
Koschinski, Markus;Noldeweg;20;58675;Hemer;7,4;14.09.2021;EEG998263807040;SEE995319181840;Noldeweg;20;58675;Hemer
|
||||
Nickel, Ingo;Südweg;10;58675;Hemer;9,6;13.12.2021;EEG908470955731;SEE926366597537;Südweg;10;58675;Hemer
|
||||
Severin, Björn;Gaxberger Weg;8;58675;Hemer;8,12;02.10.2020;EEG929364801644;SEE961455987738;Gaxberger Weg;8;58675;Hemer
|
||||
Horn, Andre;Baumhof;5;58675;Hemer;10,73;04.02.2021;EEG908734661576;SEE982922598370;Baumhof ;5;58675;Hemer
|
||||
Heilmann, Michael;Auf dem Kamp;15;58675;Hemer;12,4;21.12.2021;EEG940258533281;SEE956453852577;Auf dem Kamp;15;58675;Hemer
|
||||
Stöber, Hermann;Am Knick;4;58675;Hemer;9,75;05.11.2021;EEG998162577419;SEE995641244718;Am Knick;4;58675;Hemer
|
||||
Burgio, Dennis;Stormweg;3;58675;Hemer;11,55;12.01.2022;EEG940475441727;SEE902022676792;Stormweg;3;58675;Hemer
|
||||
Becker, Thomas;Gaxberger Weg;1;58675;Hemer;6,66;08.02.2022;EEG971474731120;SEE988525575077;Gaxberger Weg;1;58675;Hemer
|
||||
Reimer, Elena;Ringstr.;35;58675;Hemer;10,08;24.02.2022;EEG956829717721;SEE982668411360;Ringstr.;35;58675;Hemer
|
||||
Schreiber, Martin;Nieringser Weg;9;58675;Hemer;4;28.05.2008;EEG971537492890;SEE975537231343;Nieringser Weg;9;58675;Hemer
|
||||
Grabowski, Helmut;Widumstr.;6;58675;Hemer;9,75;17.12.2021;EEG972363491736;SEE923692964750;Widumstr.;6;58675;Hemer
|
||||
Ostendorf, Kerstin;Rottmecke;1;58675;Hemer;9,6;31.05.2013;EEG936093528483;SEE939334776896;Rottmecke;1;58675;Hemer
|
||||
Keune, Gundula;Ostfeldstr.;19;58675;Hemer;7,36;18.12.2013;EEG941612036783;SEE946180359968;Ostfeldstr.;19;58675;Hemer
|
||||
Krause, Brunhild;Ihmerter Str.;281;58675;Hemer;6;05.05.2014;EEG948450564638;SEE915186548829;Ihmerter Str.;281;58675;Hemer
|
||||
Noga, Frederick u. Lena;Am Habuch;49;58675;Hemer;3,71;09.01.2018;EEG955133371469;SEE988509614341;AmHabuch;49;58675;Hemer
|
||||
Zimmermann, Waldemar;Stübecker Weg;48;58675;Hemer;5,55;01.03.2022;EEG957702787435;SEE988892780845;Stübecker Weg;48;58675;Hemer
|
||||
Eiser, Josef;Unter dem Ufer;12;58675;Hemer;3,7;04.08.2021;EEG923515291452;SEE991494014119;Unter dem Ufer;12;58675;Hemer
|
||||
Schnettler, Franz-Josef;Burhahnstr.;22;58675;Hemer;8,88;22.04.2021;EEG985847993824;SEE966767227619;Burhahnstr.;22;58675;Hemer
|
||||
Hofsäß, Florian;Nikolai-Gubarew-Str.;7;58675;Hemer;10,23;28.06.2021;EEG927215922166;SEE946732121302;Nikolai-Gubarew-Str;7;58675;Hemer
|
||||
Butcher, Edith;Bodelschwinghstr.;22;58675;Hemer;5,92;24.09.2021;EEG915476044796;SEE957228792166;Bodelschwinghstr.;22;58675;Hemer
|
||||
Maaß, Michael;Am Urberg;8;58675;Hemer;6;08.02.2022;EEG941955605721;SEE928780162773;Am Urberg;8;58675;Hemer
|
||||
Nixdorf, Martin;Mendener Str.;64A;58675;Hemer;6,6;16.10.2020;EEG940117270364;SEE984989661950;Mendener Str.;64a;58675;Hemer
|
||||
Keßeler, Kim;Brockhauser Weg;85;58675;Hemer;8,64;03.03.2022;EEG908823888846;SEE974369187651;Brockhauser Weg;85;58675;Hemer
|
||||
Felix, Robert;Stettiner Str.;7;58675;Hemer;8,8;19.11.2021;EEG947216804582;SEE970567570332;Stettiner Str. ;7;58675;Hemer
|
||||
Schauerte, Jila und Bernd;Kiefernweg;13;58675;Hemer;8,5;10.04.2021;EEG907797803848;SEE928487811837;Kiefernweg;13;58675;Hemer
|
||||
da Costa, Nico;Lange Wiese;20;58675;Hemer;9,72;06.04.2021;EEG957034133313;SEE925985235769;Unterer Nackenweg;5;58313;Herdecke
|
||||
Wulff, Volker;Ihmerterort;3;58675;Hemer;9,86;26.02.2021;EEG994905904078;SEE973089103545;Ihmerterort;3;58675;Hemer
|
||||
Short, Matt;Hans-Meyer-Str.;12;58675;Hemer;5,775;31.03.2021;EEG975292505734;SEE994170535120;Hans-Meyer-Str.;12;58675;Hemer
|
||||
Schäfer, Alexander;Hans-Meyer-Str.;24;58675;Hemer;9,24;20.04.2021;EEG987952885513;SEE957845984661;Hans-Meyer-Str.;24;58675;Hemer
|
||||
Isenberg, Lothar;Im Trichter;14;58675;Hemer;15,54;22.01.2022;EEG986088758111;SEE933295846667;Im Trichter;14;58675;Hemer
|
||||
Garten-Center Immergrün Hölcke (Wind muss eigentlich in sonstige DV);Unter dem Kehlberg;19;58675;Hemer;50;06.12.1989;EEG995789484960;SEE923179162716;Unter dem Kehlberg;19;58675;Hemer
|
||||
Teves, Friedrich-Wilhelm;Am Vogelsang;30;58675;Hemer;8,14;11.03.2022;EEG930257599326;SEE988420001503;Am Vogelsang;30;58675;Hemer
|
||||
Müller, Ingo;Am Osterbrauck;14;58675;Hemer;8,5;08.04.2022;EEG982391375434;SEE919325789159;Am Osterbrauck;14;58675;Hemer
|
||||
Köhler, Arnold;Winkelstr.;5;58675;Hemer;5,18;16.03.2022;EEG911894199087;SEE979601310651;Winkelstr.;5;58675;Hemer
|
||||
Gottwald, Christel;Kapellenweg;7;58675;Hemer;4,44;30.03.2022;EEG986534397574;SEE969876969753;Kapellenweg;7;58675;Hemer
|
||||
Barowsky, Michael;Jübergstr.;1;58675;Hemer;7;09.03.2022;EEG991894477910;SEE935797273880;Jübergstr.;1;58675;Hemer
|
||||
Rittinghaus, Gerd;Bräuckerstr.;60;58675;Hemer;5,71;04.02.2022;EEG926020378861;SEE920263101583;Bräuckerstr.;60;58675;Hemer
|
||||
Hiepel, Marcus;In der Erborst;12A;58675;Hemer;21,5;18.03.2022;EEG912991755671;SEE933751091433;In der Erborst;12a;58675;Hemer
|
||||
Mertn, Hardy;Märkische Str.;165;58675;Hemer;10,36;16.03.2022;EEG910963240712;SEE944046979183;Märkische Str.;165a;58675;Hemer
|
||||
Pelka, Christian;Balver Weg;7A;58675;Hemer;3,3;13.03.2009;EEG928387833403;SEE948711066260;Balver Weg;7a;58675;Hemer
|
||||
Angelika, Klimm;Ennertsweg;46;58675;Hemer;12,58;01.06.2022;EEG901272292134;SEE927317118078;Ennertsweg;46;58675;Hemer
|
||||
Hörstemeier, Annette;Am Tannenkopf;1;58675;Hemer;4,75;29.04.2022;EEG949024551528;SEE985681913859;Am Tannenkopf;1;58675;Hemer
|
||||
Credo, Claudia;Am Bräucken;4;58675;Hemer;11,47;15.03.2022;EEG954539018589;SEE935030286738;Am Bräucken;4;58675;Hemer
|
||||
Frohnert, Melanie und Roland;Kapellenweg;14;58675;Hemer;9,75;12.05.2022;EEG923016385025;SEE973601951593;Kapellenweg;14;58675;Hemer
|
||||
Penderok, Heike;Am Ballo;54;58675;Hemer;11;02.06.2022;EEG956036719716;SEE946238050489;Am Ballo;54;58675;Hemer
|
||||
Fesser, Ronny;Am Tannenkopf;32A;58675;Hemer;4,44;26.04.2022;EEG915170393923;SEE941507144449;Am Tannenkopf;32a;58675;Hemer
|
||||
Ott, Karl;Bautenheide;1;58675;Hemer;11,78;08.04.2022;EEG986113697699;SEE991158175149;Bautenheide;1;58675;Hemer
|
||||
Ender, Oliver;Teichstr.;58B;58675;Hemer;9,92;17.02.2021;EEG934062580111;SEE914229739392;Teichstr.;58b;58675;Hemer
|
||||
Alessio, Fabio;Auf dem Kamp;31;58675;Hemer;9,72;27.06.2022;EEG926054516475;SEE973761890565;Auf dem Kamp;31;58675;Hemer
|
||||
Steinmetzbetrieb, Peter Steffens;Im Ohl;70;58675;Hemer;27;18.05.2022;EEG947049047545;SEE962178358447;Im Ohl;70;58675;Hemer
|
||||
Bierhorn, Andreas;Frönsberger Str.;9;58675;Hemer;5,92;28.03.2022;EEG982966857976;SEE915777343215;Frönsberger Str;9;58675;Hemer
|
||||
Fülling, Anneliese;Wilhelm-Brökelmann-Str.;11B;58675;Hemer;11,1;06.04.2022;EEG917855490033;SEE984753649962;Wilhelm-Brökelmann-Str.;11b;58675;Hemer
|
||||
Stenzel, Rüdiger;Am Jalohsweg;1;58675;Hemer;8,625;20.01.2022;EEG995521041987;SEE954715349759;Am Jalohsweg ;1;58675;Hemer
|
||||
Stenzel, Gunnar und Nicole;Am Jalohsweg;25;58675;Hemer;9;25.01.2022;EEG921056323847;SEE921812261284;Am Jalohsweg ;25;58675;Hemer
|
||||
Annette Dunker-Borchmann u. Andreas Dunker;Am Heßufer;38B;58675;Hemer;4,14;21.05.2021;EEG969751870020;SEE989246735825;Am Heßufer ;38b;58675;Hemer
|
||||
Wiesemann, Antje;Oberlinweg;24;58675;Hemer;9,1;01.08.2022;EEG904792700264;SEE901084537720;Oberlinweg;24;58675;Hemer
|
||||
Märkischer Kreis;Iserlohner Str.;13;58675;Hemer;9,75;26.01.2022;EEG902803439363;SEE929521468550;Heedfelder Str.;45;58509;Lüdenscheid
|
||||
Saloom, Carmen;Ernst-Giese-Str.;3;58675;Hemer;12,37;05.07.2022;EEG995222752861;SEE951746338745;Ernst-Giese-Str.;3;58675;Hemer
|
||||
Schäfer, Tim;Iserlohner Str.;32;58675;Hemer;4;11.04.2022;EEG976138043250;SEE997997568739;Iserlohner Str.;32;58675;Hemer
|
||||
Mickiewicz, Matthäus Josef;Unter dem Asenberg;28;58675;Hemer;7,4;23.03.2022;EEG972269178694;SEE927040447520;Unter dem Asenberg;28;58675;Hemer
|
||||
Koscielski, Jennifer;Brockhauser Weg;61;58675;Hemer;9,62;28.03.2022;EEG909111593213;SEE933429874559;Brockhauser Weg;61;58675;Hemer
|
||||
Becker, Silvia;Lamferstr.;49;58675;Hemer;8,88;02.05.2022;EEG973576344185;SEE917158506608;Lamferstr.;49;58675;Hemer
|
||||
Mitrou, Spiros;Eserkamp;1A;58675;Hemer;5,32;02.06.2022;EEG909916547022;SEE910147656414;Eserkamp;1a;58675;Hemer
|
||||
Kröll, Sebastian;Am Tannenkopf;35;58675;Hemer;4,56;29.06.2022;EEG968588246169;SEE912285391738;Am Tannenkopf;35;58675;Hemer
|
||||
Meyer, Robin;Apricke;43A;58675;Hemer;13,32;23.03.2022;EEG996539995781;SEE981331439397;Apricke;43a;58675;Hemer
|
||||
Rosenthal, Fred & Regina;Hellestr.;34;58675;Hemer;15,2;01.08.2022;EEG932223892363;SEE977795378013;Hellestr.;34;58675;Hemer
|
||||
Kruse, Kirsten Hedda;An der Windfuhr;10;58675;Hemer;6,84;01.08.2022;EEG932223892363;SEE977795378013;Hellestr.;34;58675;Hemer
|
||||
Märkischer Kreis;Edmund-Weller-Str.;1;58675;Hemer;28,5;26.01.2022;EEG978617598022;SEE958337040261;Heedfelder Str.;45;58509;Lüdenscheid
|
||||
Hacker, Philipp;Ispei;5C;58675;Hemer;6,375;24.03.2022;EEG981761680079;SEE904359608026;Ispei;5c;58675;Hemer
|
||||
Grothe, Frank;Am Tannenkopf;31;58675;Hemer;7,5;13.09.2022;EEG935757475453;SEE914601246494;Am Tannenkopf;31;58675;Hemer
|
||||
Becker, Marc;Am Voßholz;22A;58675;Hemer;9,625;06.09.2022;EEG902239201640;SEE968571441755;Am Voßholz;22a;58675;Hemer
|
||||
Szymanski, Viktor und Marion;Am Sonnenhang;1;58675;Hemer;7,695;01.09.2022;EEG915289159960;SEE969785478483;Am Sonnenhang;1;58675;Hemer
|
||||
Plattes, Leo;Bussardweg;12;58675;Hemer;8;20.09.2022;EEG993274390871;SEE930282710376;Bussardweg;12;58675;Hemer
|
||||
Pocher, Larry;Stephanopel;58A;58675;Hemer;4,81;10.05.2022;EEG941459212425;SEE981577349139;Stephanopel;58a;58675;Hemer
|
||||
Retzlaff, Dirk;Brandeiche;6;58675;Hemer;9,6;17.01.2022;EEG917595588694;SEE931902079217;Brandeiche;6;58675;Hemer
|
||||
Stracke, Christian;Hüttenstr.;15;58675;Hemer;9,8;01.10.2022;EEG967818137437;SEE965285357815;Hauptstr.;17;58675;Hemer
|
||||
Hölcke, Klaus;Teichstr.;62;58675;Hemer;3,43;17.08.2018;EEG963012803567;SEE957190285291;Teichstr.;62;58675;Hemer
|
||||
Westhoff, Michael;Parkstr.;94;58675;Hemer;7,15;24.10.2022;EEG979750937082;SEE902198927131;Parkstr.;94;58675;Hemer
|
||||
Idt, Alexander;Hans-Meyer-Str.;38;58675;Hemer;8,8;08.07.2021;EEG910486044354;SEE971175873525;Hans-Meyer-Str.;38;58675;Hemer
|
||||
Recker, Markus;Am Voßholz;7;58675;Hemer;9,3;23.09.2022;EEG950338754550;SEE910843505412;Am Voßholz;7;58675;Hemer
|
||||
Spalek, Tadäus;Hardthöhe;2;58675;Hemer;9,2;04.10.2022;EEG992282055246;SEE901053895943;Hardthöhe;2;58675;Hemer
|
||||
Ecker, David;Am Sommerholt;6B;58675;Hemer;9,99;06.05.2022;EEG970150006217;SEE977515964403;Am Sommerholt;6b;58675;Hemer
|
||||
Keßeler, Franz-Josef;Am Erpel;6;58675;Hemer;4,2;02.11.2022;EEG988431989616;SEE918726248401;Am Erpel;6;58675;Hemer
|
||||
Seifart, Nils;Caller Str.;11;58675;Hemer;11,22;30.08.2022;EEG916976083490;SEE962066917596;Callerstr.;11;58675;Hemer
|
||||
Ülger, Mevlüt;Kirchstr.;2A;58675;Hemer;8,14;26.03.2021;EEG958712416148;SEE978917405686;Kirchstr.;2a;58675;Hemer
|
||||
Steuerungstechnik Schönenberg;Schottlandstr.;8;58675;Hemer;12,32;11.11.2022;EEG946891810642;SEE965763213695;Schottlandstr. ;8;58675;Hemer
|
||||
Ullrich, Thomas;Neuer Weg;22;58675;Hemer;5,18;01.09.2021;EEG910751339215;SEE904595469269;Neuer Weg;22;58675;Hemer
|
||||
Sinn / Kellner, Andrea / Jens;Am Jalohsweg;19;58675;Hemer;9,66;19.10.2022;EEG942453451773;SEE913494627977;Am Jalohsweg;19;58675;Hemer
|
||||
Hoffmann, Dustin;Birkenweg;30;58675;Hemer;8,8;27.10.2022;EEG911133631040;SEE983340380714;Birkenweg;30;58675;Hemer
|
||||
Manke, Björn;Hasenwinkel;3;58675;Hemer;16,17;23.09.2022;EEG931887099323;SEE912750285845;Hasewinkel;3;58675;Hemer
|
||||
Reisewitz, Ingolf;Am Langeloh;32A;58675;Hemer;14,76;08.10.2022;EEG929156380371;SEE946531740988;Am Langeloh;32a;58675;Hemer
|
||||
Peters, Sebastian;Seilerstr.;1;58675;Hemer;15,39;06.09.2022;EEG960354842551;SEE924546238195;Seilerstr.;1;58675;Hemer
|
||||
Losse, Victoria und Christian;Am Jalohsweg;10;58675;Hemer;9;02.11.2022;EEG915212509060;SEE974738806886;Am Jalohsweg;10;58675;Hemer
|
||||
Wiese, Robin;Auf dem Lütgenstück;1d;58675;Hemer;5,18;28.03.2022;EEG938015107318;SEE991235367610;Auf dem Lütgenstück;1d;58675;Hemer
|
||||
Sepanian, Edwin;Noldeweg;5;58675;Hemer;6,93;08.09.2022;EEG946379607924;SEE978868725864;Noldeweg;5;58675;Hemer
|
||||
Linderhaus, Andreas;Am Jalohsweg;5;58675;Hemer;6,08;25.04.2022;EEG963647276200;SEE936968685495;Am Jalohsweg;5;58675;Hemer
|
||||
Voigt, Rüdiger;Bussardweg;4;58675;Hemer;8,8;15.12.2022;EEG947840318080;SEE961646791342;Bussardweg;4;58675;Hemer
|
||||
Kreugel/Klein, Heike/Wolfgang;Weißdornstr.;6;58675;Hemer;16,56;11.06.2022;EEG963887990126;SEE912698920310;Weißdornstr.;6;58675;Hemer
|
||||
Engelmann, Holger;Am Eibenbrink;96;58675;Hemer;22,94;02.01.2023;EEG976616503191;SEE986378431281;Am Eibenbrink;96;58675;Hemer
|
||||
Rübsam, Michael;In den Klippen;9;58675;Hemer;9,7;25.05.2022;EEG997382513030;SEE935830089102;In den Klippen;9;58675;Hemer
|
||||
Hagenkord, Peter;Brockhauser Weg;87;58675;Hemer;5,6;18.11.2022;EEG972071102511;SEE918913612411;Brockhauser Weg;97;58675;Hemer
|
||||
Rohrbach, Eugen;An der Steinert;8;58675;Hemer;4,44;16.02.2022;EEG934186045589;EEG934186045589;An der Steinert;8;58675;Hemer
|
||||
Eroglu, Yusuf;De-Fries-Str.;20a;58675;Hemer;7,6;07.10.2022;EEG931557764469;SEE968935418324;De-Fries-Str.;20a;58675;Hemer
|
||||
Fischer, Christa;Im Hölken;21;58675;Hemer;5,4;23.07.2020;EEG974414735691;SEE955011526141;Im Hölken;21;58675;Hemer
|
||||
Hoffmann, Karsten;Lönsweg;14;58675;Hemer;9,75;23.12.2022;EEG973409499822;SEE905844379971;Lönsweg;14;58675;Hemer
|
||||
Gutberger, Bernhard;Noldeweg;19;58675;Hemer;5,74;07.11.2022;EEG941529589778;SEE989546794003;Noldeweg;19;58675;Hemer
|
||||
Böse, Stefan;Im Trichter;20A;58675;Hemer;7,6;16.12.2022;EEG995456591830;SEE947163700234;Im Trichter;20a;58675;Hemer
|
||||
Kröll, Lars u. Sabrina;Ringstr.;22;58675;Hemer;14,58;04.01.2023;EEG902022354645;SEE971290335298;Ringstr.;22;58675;Hemer
|
||||
Abate, Marco;Heinrich-Nuttebaum-Str.;1;58675;Hemer;10,2;01.12.2020;EEG967460340971;SEE915186366089;Heinrich-Nuttebaum-Str.;1;58675;Hemer
|
||||
Bollweg, Frank;Iserlohner Str.;14;58675;Hemer;4,5;19.01.2023;EEG922793759371;SEE930416229996;Iserlohner Str.;14;58675;Hemer
|
||||
Woznicka, Michael;Oesestr.;41A;58675;Hemer;7,2;19.12.2022;EEG913477035690;SEE990041724204;Oesestr.;41a;58675;Hemer
|
||||
Fingerhut, Werner;Stephanopel;77;58675;Hemer;10,125;13.12.2022;EEG906821640480;SEE992091207133;Stephanopel;77;58675;Hemer
|
||||
Tomczyk, Markus;Urbecker Str.;94;58675;Hemer;6;17.01.2023;EEG955249075374;SEE954045524741;Urbecker Str.;94;58675;Hemer
|
||||
Twelker, Magrit;Am Tannenkopf;35A;58675;Hemer;15,2;29.08.2022;EEG912989628338;SEE913835221512;Am Tannenkopf;35a;58675;Hemer
|
||||
Schmitz, Joachim;Ginsterweg;2;58675;Hemer;9,88;04.11.2022;EEG981874675320;SEE972610892767;Ginsterweg;2;58675;Hemer
|
||||
Jonek, Adam;Kuhbornstr.;14I;58675;Hemer;5,32;25.08.2022;EEG955302855370;SEE903354033642;Kuhbornstr.;14I;58675;Hemer
|
||||
Caratzoulidis, Michael;Kuhbornstr.;14A;58675;Hemer;9,12;28.10.2022;EEG981672745546;SEE986391012702;Kuhbornstr.;14a;58675;Hemer
|
||||
Nasif, Mohanad;Urbecker Str.;100;58675;Hemer;6,08;16.11.2022;EEG913599815590;SEE942187106703;Urbecker Str.;100;58675;Hemer
|
||||
Kissing, Martina und Frank;Klusensteiner Weg;20;58675;Hemer;10,06;10.03.2023;EEG961568627248;"SEE984391226921 ";Klusensteiner Weg;20;58675;Hemer
|
||||
Caputo, Giovanni;An der Werthwiese;25;58675;Hemer;13,95;06.03.2023;EEG956530664758;SEE923065800616;An der Werthwiese;25;58675;Hemer
|
||||
Rau, Bernd;In der Erborst;4;58675;Hemer;9,75;22.02.2023;EEG958796790240;SEE902547244926;In der Erborst;4;58675;Hemer
|
||||
Müller-Goldau, Werner;Am Alten Dorfteich;4;58675;Hemer;4,56;25.01.2023;EEG906281074740;SEE995540853950;Am alten Dorfteich;4;58675;Hemer
|
||||
Rabenschlag-Rödiger, Benjamin Dennis;Am Brandenberg;7;58675;Hemer;11,4;13.02.2023;EEG965804888745;SEE973389690318;Am Brandenberg;7;58675;Hemer
|
||||
Heimann, Sascha;Widumstr.;3;58675;Hemer;11,2;07.03.2023;EEG977590847417;SEE957649694315;Widumstr.;3;58675;Hemer
|
||||
Sonntag, Stefan;Lange Wiese;32;58675;Hemer;9,62;07.03.2023;EEG900624591000;SEE950034246731;Lange Wiese;32;58675;Hemer
|
||||
Gebhard / Kaemper, Marion / Siegfried;Theo-Funccius-Str.;20A;58675;Hemer;9,25;24.11.2021;EEG901154181020;SEE958388879087;Theo-Funccius-Str.;20a;58675;Hemer
|
||||
Schepper, Wilhelm;Mozartstr.;4;58675;Hemer;11,4;08.02.2023;EEG928636511380;SEE916422730787;Mozartstr.;4;58675;Hemer
|
||||
Hoffmann, Heiko;Westendorfstr.;44a;58675;Hemer;8,36;24.02.2023;EEG984593768618;SEE988373626082;Westendorfstr.;44a;58675;Hemer
|
||||
Grüneberg, Carsten;Oberlinweg;9A;58675;Hemer;10,6;31.01.2023;EEG903799105119;SEE979893733893;Oberlinweg;9a;58675;Hemer
|
||||
Schreiber, Raimund;Haarweg;57;58675;Hemer;7,6;28.02.2023;EEG912246122081;SEE965983946311;Haarweg;57;58675;Hemer
|
||||
Gosch, Bianca und Ralf;Hagedorn;16;58675;Hemer;14,58;24.11.2022;EEG948246885992;SEE975413793217;Hagedorn;16;58675;Hemer
|
||||
Gonschorek, Jens;Am Tannenkopf;19;58675;Hemer;12;31.03.2023;EEG955624378816;SEE923435022716;Am Tannenkopf;19;58675;Hemer
|
||||
Kramer, Michael;Friedensstr.;12;58675;Hemer;7,14;04.04.2023;EEG925494253766;SEE972612641400;Friedensstr.;12;58675;Hemer
|
||||
Lellek, Damian;Gaxberger Weg;28;58675;Hemer;12,555;21.04.2023;EEG966293011706;SEE913714809749;Gaxberger Weg;28;58675;Hemer
|
||||
Lorenz, Philipp;An der Fußgängerbrücke;8;58675;Hemer;6,84;20.12.2022;EEG987117109003;SEE971710393617;An der Fußgängerbrücker;8;58675;Hemer
|
||||
Krause, Erwin;Lenbachstr.;15;58675;Hemer;8,4;04.04.2023;EEG938782037337;SEE926550793271;Lenbachstr.;15;58675;Hemer
|
||||
Pott, Matthias und Regina;Lenbachstr.;19;58675;Hemer;9,5;03.03.2023;EEG963151597242;SEE905130762784;Lenbachstr.;19;58675;Hemer
|
||||
Grothe, Frank;Am Damm;1;58675;Hemer;8,8;31.03.2023;EEG907579617403;SEE957506967026;Am Damm;1;58675;Hemer
|
||||
Pampel, Walter;Am Potthofe;1;58675;Hemer;9,96;01.03.2023;EEG912744934513;SEE926140335140;Am Potthofe;1;58675;Hemer
|
||||
Fuchs, Daniel;Mühlackerweg;2;58675;Hemer;8,1;27.01.2023;EEG938228783316;SEE970042701855;Mühlackerweg;2;58675;Hemer
|
||||
Bode, David;Auf dem Uhlenhof;7;58675;Hemer;6,66;24.01.2023;EEG928917592893;SEE901447135341;Auf dem Uhlenhof;7;58675;Hemer
|
||||
Klein, Almut;Im Bockeloh;28;58675;Hemer;5,67;31.01.2023;EEG926481280970;SEE930461405154;Im Bockeloh;28;58675;Hemer
|
||||
Denso, Dennis;Am Langeloh;33;58675;Hemer;8,64;11.04.2023;EEG916098154931;SEE991644336139;Am Langeloh;33;58675;Hemer
|
||||
Ober-Westendorf, Robert;Im Loh;3;58675;Hemer;9,94;28.09.2022;EEG996025373789;SEE994542817281;Im Loh;3;58675;Hemer
|
||||
Hilbert, Thilo;Urbecker Str.;90A;58675;Hemer;6,48;09.05.2023;EEG998534176530;SEE929677136754;Urbecker Str.;90a;58675;Hemer
|
||||
Ritterswürde, Bernd;Hardthöhe;5;58675;Hemer;8,505;30.03.2023;EEG931602145250;SEE910332841885;Hardthöhe;5;58675;Hemer
|
||||
Kischa, Christoph;Am Bemberg;8;58675;Hemer;7,92;15.06.2021;EEG981060611507;SEE951640545874;Am Bemberg;8;58675;Hemer
|
||||
Gottwich, Vadim;Winkelstr.;11;58675;Hemer;7,4;27.10.2021;EEG917378501629;SEE908662496912;Winkelstr.;11;58675;Hemer
|
||||
Holtewert, Thomas;Urbecker Str.;86A;58675;Hemer;9,75;07.02.2023;EEG959941097306;SEE980246775330;Urbecker Str.;86a;58675;Hemer
|
||||
Hermens, Edgar;Callerstr.;2;58675;Hemer;9,75;19.04.2021;EEG945818319459;SEE932693225234;Callerstr.;2;58675;Hemer
|
||||
Römer, Susanne;Dulohstr.;23;58675;Hemer;6,48;30.05.2023;EEG949289959015;SEE990597022908;Dulohstr.;23;58675;Hemer
|
||||
Turowski, Dennis;Stephanopeler Str.;61;58675;Hemer;11,1;12.04.2023;EEG992810149461;SEE986922934923;Stephanopler S;61;58675;Hemer
|
||||
Grabowski, Marcin;Im Eichholz;2A;58675;Hemer;10;22.05.2023;EEG944996675272;SEE953250544186;Im Eichholz;2a;58675;Hemer
|
||||
Bergerow, Ralf;Teichstr.;54A;58675;Hemer;2,4;04.04.2000;EEG908404382671;SEE939884829165;Teichstr.;54a;58675;Hemer
|
||||
de Vries, Gunter;Urbecker Str.;86;58675;Hemer;9;18.04.2023;EEG904181037803;SEE964571985541;Urbecker Str.;86;58675;Hemer
|
||||
Ferguson, Sven;Balver Weg;25B;58675;Hemer;6,75;22.03.2023;EEG984944431277;SEE905037300379;Balver Weg;25b;58675;Hemer
|
||||
Schwarzpaul, Günther;Arndtstr.;19;58675;Hemer;5,4;07.05.2023;EEG969090373336;SEE970454019623;Arndtstr.;19;58675;Hemer
|
||||
Franke Kanaltechnik GmbH;Walesstr.;3;58675;Hemer;16,59;01.02.2023;EEG963000507767;SEE917031238848;Walesstr.;3;58675;Hemer
|
||||
Nolte, Petra;Stemmessiepener Weg;2;58675;Hemer;5,625;02.02.2023;EEG954509941749;SEE930844041498;Stemmessiepener Weg;2;58675;Hemer
|
||||
Kraushaar, Andreas;Am Tannenkopf;39B;58675;Hemer;8,5;30.08.2022;EEG971609226712;SEE954189536686;Am Tannenkopf;39b;58675;Hemer
|
||||
Danehl, Julian;Am Voßholz;9a;58675;Hemer;13,53;15.03.2023;EEG942700946205;SEE946858881753;Am Voßholz;9a;58675;Hemer
|
||||
Kirchner, Marcel;Landhauser Str.;86;58675;Hemer;3;01.07.2023;EEG930677636205;SEE987281878491;Landhauser Str.;86;58675;Hemer
|
||||
Solar The World GmbH & Co.KG;Auf dem Brauck;39;58675;Hemer;10,36;01.08.2022;EEG985303073619;SEE959346424264;Auf dem Brauck;39;58675;Hemer
|
||||
Weckauf, Michael Gerd;Im Siegeloh;29A;58675;Hemer;12,15;22.03.2023;EEG900046445806;SEE948064598623;Im Siegeloh;29a;58675;Hemer
|
||||
Foth, Reinhard;Balver Weg;13;58675;Hemer;10,2;25.05.2023;EEG905023896480;SEE913071792463;Balver Weg;13;58675;Hemer
|
||||
Steinbeck, Wilfried;Grüner Brink;4;58675;Hemer;10,125;05.04.2023;EEG984927414655;SEE979507160718;Grüner Brink;4;58675;Hemer
|
||||
Agapenko, Michael;Am Eibenbrink;30;58675;Hemer;7,5;24.05.2023;EEG949149305099;SEE918901106069;Am Eibenbrink;30;58675;Hemer
|
||||
Lorentz, Carsten;Kuhbornstr.;14D;58675;Hemer;4,1;26.04.2023;EEG927675661957;SEE984751882460;Kuhbornstr.;14d;58675;Hemer
|
||||
Alberts, Heide;In den Weiden;8;58675;Hemer;9,5;10.03.2023;EEG948615089631;SEE918352326993;In den Weiden;8;58675;Hemer
|
||||
Bartholdt, Heike;Gartenstr.;31A;58675;Hemer;4,125;11.05.2023;EEG953345701104;SEE954933678594;Gartenstr.;31a;58675;Hemer
|
||||
Althoff, Andrea;Arndtstr.;23;58675;Hemer;11,46;07.07.2023;EEG946078906205;SEE983856554647;Arndtstr.;23;58675;Hemer
|
||||
Syre, Tobias;Am Voßholz;36B;58675;Hemer;9,02;14.04.2023;EEG927222997355;SEE911854979834;Am Voßholz;36b;58675;Hemer
|
||||
Goeseke, Björn;Heinrich-Nuttebaum-Str.;9;58675;Hemer;6,48;28.04.2023;EEG944849925226;SEE992160448757;Heinrich-Nuttebaum-Str.;9;58675;Hemer
|
||||
Junkernheinrich-Bleicher, Rainer;Am Langeloh;18B;58675;Hemer;5,25;15.06.2023;EEG953922159601;SEE980883278324;Am Langeloh;18b;58675;Hemer
|
||||
Franke Kanaltechnik GmbH;Unter dem Hohenstein;30;58675;Hemer;15;17.04.2023;EEG928696488516;SEE903937142693;Walesstr.;3;58675;Hemer
|
||||
Brand, Peter;Am Sommerholt;6e;58675;Hemer;7,2;15.03.2023;EEG989078045390;SEE982366061966;Am Sommerholt;6e;58675;Hemer
|
||||
Haas / Schweizer, Jürgen / Svenja;Am Tannenkopf;38a;58675;Hemer;9,84;29.06.2023;EEG950971739556;SEE989489967571;Am Tannenkopf;38a;58675;Hemer
|
||||
Tarach, Jürgen;Am Sommerholt;8;58675;Hemer;5,95;21.07.2023;EEG932163801838;SEE947075880758;Am Sommerholt;8;58675;Hemer
|
||||
Schatz, Rudolf;Piepers Garten;1;58675;Hemer;9,315;26.05.2023;EEG995441489876;SEE988946382506;Piepers Garten;1;58675;Hemer
|
||||
Schutzeigel, Nils;Im Bockeloh;23;58675;Hemer;2,5;21.04.2023;EEG994979173066;SEE901371129782;Im Bockeloh;23;58675;Hemer
|
||||
Ott, Tobias;Teichstr.;54B;58675;Hemer;11,06;16.06.2023;EEG954691051141;SEE990503810490;Teichstr.;54b;58675;Hemer
|
||||
Schmidt, Cornelia und Sascha;Auf der Hecke;28;58675;Hemer;17,325;14.06.2023;EEG905773531709;SEE955985886074;Auf der Hecke;28;58675;Hemer
|
||||
Werner, Martin;Urbecker Str.;90B;58675;Hemer;10,53;27.06.2023;EEG947440515193;SEE929649590782;Urbecker Str.;90b;58675;Hemer
|
||||
Plauschin, Martina;Ennertsweg;54;58675;Hemer;5,84;31.01.2023;EEG924925462203;SEE933408261899;Ennertsweg;54;58675;Hemer
|
||||
Söte, Dirk;Westendorfstr.;48A;58675;Hemer;5,84;25.11.2022;EEG906732381724;SEE988352778771;Westendorfstr.;48a;58675;Hemer
|
||||
Schäfer, Nelly;Grüner Brink;10;58675;Hemer;8,2;25.05.2023;EEG948090101798;SEE937807604561;Grüner Brink;10;58675;Hemer
|
||||
Bruyndonckx, Marcel und Rebecca;Am Jalohsweg;14;58675;Hemer;10;07.03.2023;EEG914481130982;SEE970398933863;Am Jalohsweg;14;58675;Hemer
|
||||
Kaltenbach, Norbert;Rembrandtstr.;20;58675;Hemer;2,4;01.07.2023;EEG945911459991;SEE992749757188;Rembrandtstr;20;58675;Hemer
|
||||
Schönenberg, Gerd;Birkenweg;84A;58675;Hemer;7,315;25.04.2023;EEG962013257133;SEE955304402411;Birkenweg;84a;58675;Hemer
|
||||
Schreyer, Lars;Mesterscheid;4;58675;Hemer;38,475;11.05.2023;EEG948725666678;SEE918636365229;Mesterscheid;4;58675;Hemer
|
||||
Frank, Harry;Hans-Meyer-Str.;13;58675;Hemer;10,25;31.05.2023;EEG917079905030;"SEE976861043053 ";Hans-Meyer-Str.;13;58675;Hemer
|
||||
Wolff, Carsten;Albert-Schweitzer-Str.;2;58675;Hemer;12,54;02.06.2023;EEG911202469581;SEE979200088593;Albert-Schweitzer-Str.;2;58675;Hemer
|
||||
Martin, Kurt;Am Brandenberg;4;58675;Hemer;8;22.06.2023;EEG970648304214;SEE926760528052;Am Brandenberg;4;58675;Hemer
|
||||
Streber, Frank;Albert-Schweitzer-Str.;5;58675;Hemer;10,935;12.06.2023;EEG920404937408;SEE978799260779;Albert-Schweitzer-Str.;5;58675;Hemer
|
||||
Haacke, Michael;Haarweg;38;58675;Hemer;8,25;26.06.2023;EEG909095571078;SEE994774844031;Haarweg;38;58675;Hemer
|
||||
Ernst, Volker und Ilona;Am Sommerholt;8A;58675;Hemer;6,375;19.07.2023;EEG916660376440;SEE925672847619;Am Sommerholt;8a;58675;Hemer
|
||||
Mühlengang 6;Mühlengang;6;58675;Hemer;5,2;01.08.2021;EEG910995811638;SEE904004341346;Mühlengang;6;58675;Hemer
|
||||
von der Heyde, Andreas;Dulohstr.;22;58675;Hemer;6;27.07.2023;EEG942483663269;SEE966307151275;Dulohstr.;22;58675;Hemer
|
||||
Nagel, Susanne;Oesestr.;3;58675;Hemer;1,6;12.04.2023;EEG940613506011;SEE902779287777;Oesestr.;3;58675;Hemer
|
||||
Gehrmann, Simone und Thomas;Parkstr.;115;58675;Hemer;9,75;06.03.2023;EEG973990246164;SEE984887863203;Parkstr.;115;58675;Hemer
|
||||
Todea, Paul;Am Damm;1C;58675;Hemer;10,8;19.06.2023;EEG903625794418;SEE954907246408;Am Damm;1c;58675;Hemer
|
||||
Grau, Karsten;Mühlackerweg;6;58675;Hemer;9,6;16.06.2023;EEG956936555285;SEE921231365174;Mühlackerweg;6;58675;Hemer
|
||||
Hesmert, Daniel;Am Vogelsang;9;58675;Hemer;7,6;30.06.2023;EEG989638219681;SEE992275352857;Am Vogelsang;9;58675;Hemer
|
||||
Pospischil, Stefan;Ringstr.;47;58675;Hemer;11,18;11.08.2023;EEG931356913198;SEE977156574443;Ringstr.;47;58675;Hemer
|
||||
Liepach, Barbara;Kuhbornstr.;1;58675;Hemer;7,98;19.01.2023;EEG985160015821;SEE911056288864;Kuhbornstr.;1;58675;Hemer
|
||||
Rasewerg, Rolf;Glüsingweg;8;58675;Hemer;6,3;13.03.2023;EEG971085976620;SEE968725602872;Glüsingweg;8;58675;Hemer
|
||||
Schulte, Annette u. Michael;Urbecker Str.;94B;58675;Hemer;8;02.05.2023;EEG917608174036;SEE968784492643;Urbecker Str.;94b;58675;Hemer
|
||||
Hücking, Heinz Jörg;Urbecker Str.;98;58675;Hemer;9,2;11.01.2023;EEG994244450854;SEE911454232216;Urbecker Str.;98;58675;Hemer
|
||||
Junge, Tobias;Hagedorn;14;58675;Hemer;12,775;31.01.2023;EEG987454569133;SEE911838598082;Hagedorn;14;58675;Hemer
|
||||
Marquardt, Christian u. Nina;Büttmecker Weg;11;58675;Hemer;8,8;31.01.2023;EEG993941634949;SEE924659144239;Büttmecker Weg;11;58675;Hemer
|
||||
Elter, Alina;Kiefernweg;19;58675;Hemer;9,75;07.06.2023;EEG908073420483;SEE979226164066;Kiefernweg;19;58675;Hemer
|
||||
Johannmeier, Yannick;Frönsberger Str.;43;58675;Hemer;9,8;11.08.2023;EEG992585346164;SEE998519257537;Frönsberger Str;43;58675;Hemer
|
||||
Riehle, Björn;Apricke;24A;58675;Hemer;8,1;15.08.2023;EEG916379953642;SEE938717789799;Apricke;24a;58675;Hemer
|
||||
Junklewitz, Alfons;Meisenweg;4c;58675;Hemer;6,8;31.05.2023;EEG964157490285;SEE983130386810;Meisenweg;4c;58675;Hemer
|
||||
Annette Dunker-Borchmann u. Andreas Dunker;Am Heßufer;38a;58675;Hemer;11,34;03.06.2023;EEG943098822355;SEE929470804744;Am Heßufer ;38;58675;Hemer
|
||||
Keim, Ernst;Gaxberger Weg;14C;58675;Hemer;10,8;20.07.2023;EEG935585002937;SEE951533294995;Gaxberger Weg;14c;58675;Hemer
|
||||
Schneider, Stefan;Neuer Weg;28B;58675;Hemer;10,5;05.05.2023;EEG921200550945;SEE904865433105;Neuer Weg;28b;58675;Hemer
|
||||
Kuhn, Björn;Parkstr.;82C;58675;Hemer;5,7;11.08.2023;EEG931160494630;SEE949841303089;Parkstr.;82c;58675;Hemer
|
||||
Müsse, Oliver;Weißdornstr.;3;58675;Hemer;8,58;02.03.2023;EEG938069464085;SEE901738432104;Weißdornstr.;3;58675;Hemer
|
||||
Lourenco, Yaminah & Nuno;Gaxberger Weg;32;58675;Hemer;9;08.04.2022;EEG972359443213;SEE958557094723;Gaxberger Weg;32;58675;Hemer
|
||||
Keil, Ulrich;Am Ballo;51;58675;Hemer;7,38;23.08.2023;EEG948562862202;SEE937699123447;Am Ballo;51;58675;Hemer
|
||||
Rademacher, Dirk;Im Eichholz;27;58675;Hemer;10,5;21.08.2023;EEG962674197199;SEE977537761578;Im Eichholz;27;58675;Hemer
|
||||
Frenzel, Matthias;Ihmerter Str.;212a;58675;Hemer;3,04;30.06.2023;EEG910925652027;SEE963428152822;Ihmerter Str.;212a;58675;Hemer
|
||||
Schruth & Ledergerber, Sören & Janine;Ahornweg;15a;58675;Hemer;8,2;23.08.2023;EEG906675369803;SEE978137892082;Iserlohner Str.;17;58675;Hemer
|
||||
Schweinforth, Thomas;Schützenstr.;18;58675;Hemer;3,6;06.07.2023;EEG967543001768;SEE961982134940;Schützenstr.;18;58675;Hemer
|
||||
Neumann, Dirk;Gaxberger Weg;30;58675;Hemer;9,6;03.04.2023;EEG931331126704;SEE905725848763;Gaxberger Weg;30;58675;Hemer
|
||||
Blichmann, Frank;Auf dem Brauck;13;58675;Hemer;9,6;23.08.2023;EEG908366365972;SEE932433473093;Auf dem Brauck;13;58675;Hemer
|
||||
Gluth, Mirco;Ringstr.;31;58675;Hemer;6,8;24.06.2023;EEG955828538931;SEE915791571489;Ringstr.;31;58675;Hemer
|
||||
Pocher, Larry;Hardthöhe;1;58675;Hemer;8,625;28.08.2023;EEG966209164106;SEE964033306617;Stephanopel;58a;58675;Hemer
|
||||
Huck, Lothar;Fromersbert;9A;58675;Hemer;8,3;23.08.2023;EEG935722719124;SEE907190542290;Fromersbert;9a;58675;Hemer
|
||||
Thompson, Frederick Stephen;Arndtstr.;10;58675;Hemer;10;18.09.2023;EEG918014628205;SEE939730203323;Arndtstr.;10;58675;Hemer
|
||||
Franke, Jörg;Am Langeloh;24;58675;Hemer;9,68;31.07.2023;EEG945016460045;SEE945514477378;Am Langeloh;24;58675;Hemer
|
||||
Sauerland, Jan;Eichenhohl;6;58675;Hemer;11;20.04.2023;EEG976554113872;SEE927397377594;Eichenhohl;6;58675;Hemer
|
||||
Schulte, Jörg;Heinrich-Goswin-Str.;2;58675;Hemer;14,4;03.08.2023;EEG904909452741;SEE943033846958;Heinrich-Goswin-Str.;2;58675;Hemer
|
||||
Schulenburg, Silke;Klusensteiner Weg;21;58675;Hemer;5,32;03.08.2023;EEG932089729391;SEE980021461946;Klusensteiner Weg;21;58675;Hemer
|
||||
Hirth und Lübbenjans-Hirth, Joachim und Anja;Unter dem Asenberg;13;58675;Hemer;7,38;10.05.2023;EEG942195986038;SEE969772938556;Unter dem Asenberg;13;58675;Hemer
|
||||
Gödde, Hendrick;Am Dasbrauck;1;58675;Hemer;5;08.09.2023;EEG980040206184;SEE974116710262;Am Dasbrauck;1;58675;Hemer
|
||||
von Schwerin, Lutz;Gaxberger Weg;36;58675;Hemer;9,96;15.03.2023;EEG910648150671;SEE982368664004;Gaxberger Weg;36;58675;Hemer
|
||||
Nardone, Giuseppe;Hembecker Weg;10;58675;Hemer;8,4;28.09.2023;EEG912239054405;SEE939629264428;Hembecker Weg;10;58675;Hemer
|
||||
Steinberg, Ingo;Josef-Winckler-Weg;4;58675;Hemer;8;16.02.2023;EEG958726081387;SEE900097732962;Josef-Wickler-Weg;4;58675;Hemer
|
||||
Möser, Peter;Von-Eichendorff-Weg;7;58675;Hemer;10,25;18.08.2023;EEG999233704840;SEE991916196409;Von-Eichendorff-Weg;7;58675;Hemer
|
||||
Voß, David;Am Voßholz;1;58675;Hemer;12,15;19.09.2023;EEG998445426625;SEE961425690224;Am Voßholz;1;58675;Hemer
|
||||
Bäcker, Jörg;Hembecker Weg;4;58675;Hemer;6,15;23.05.2023;EEG967101737016;SEE909911961885;Hembecker Weg;4;58675;Hemer
|
||||
Barth, Maximilian;Auf dem Brauck;32A;58675;Hemer;12,325;13.10.2023;EEG959105015351;SEE971965184886;Auf dem Brauck;32a;58675;Hemer
|
||||
Lünenschloß, Moritz;Am Sonnenhang;23A;58675;Hemer;4,94;30.07.2023;EEG994379833904;SEE959811592382;Am Sonnenhang;23a;58675;Hemer
|
||||
Maslonka, Günter;Friedrich-Wern-Str.;4;58675;Hemer;6,32;19.06.2023;EEG958705205827;SEE967492466786;Friedrich-Wern-Str.;4;58675;Hemer
|
||||
Hufnagel, Tobias;Am Jalohsweg;13;58675;Hemer;9,24;23.10.2023;EEG987734147174;SEE984504249229;Am Jalohsweg;14;58675;Hemer
|
||||
Rostek, Björn;Am Tyrol;21;58675;Hemer;10,5;02.10.2023;EEG927570544294;SEE993935809780;Am Tyrol;21;58675;Hemer
|
||||
Bergmann, Nick;Ginsterweg;20;58675;Hemer;11,7;08.08.2023;EEG915615002007;SEE967109943754;Ginsterweg;20;58675;Hemer
|
||||
Palumbo Schlüter / Schlüter, Julia / Karl-Ernst;Caller Str.;4A;58675;Hemer;7,65;19.09.2023;EEG989931390469;SEE979545028902;Caller Str.;4a;58675;Hemer
|
||||
Brocca, Dennis;Am Schlehdorn;8;58675;Hemer;12,3;17.04.2023;EEG991089907529;SEE935137801148;Am Schlehdorn;8;58675;Hemer
|
||||
Dahm, Rainer;Dulohstr.;16;58675;Hemer;5,33;11.10.2023;EEG913976389973;SEE915968166630;Dulohstr.;16;58675;Hemer
|
||||
Viehoff, Sascha;Karl-Bröger-Weg;11;58675;Hemer;12,15;15.11.2023;EEG913603617233;SEE909344465011;Karl-Bröger-Weg;11;58675;Hemer
|
||||
Niederhäuser, Klaus;Droste-Hülshoff-Weg;49;58675;Hemer;4,2;20.10.2023;EEG982444068122;SEE980627278016;Droste-Hülshoff-Weg;49;58675;Hemer
|
||||
Kruschka, Uwe;Westendorfstr.;48;58675;Hemer;8,61;16.11.2023;EEG940058607786;SEE939494976006;Westendorfstr.;48;58675;Hemer
|
||||
Barth, Manfred;Ihmerter Mühle;2;58675;Hemer;18,275;01.12.2023;EEG976292691533;SEE977425476140;Ihmerter Mühle;2;58675;Hemer
|
||||
Hepfner, Peter;Am Schieferbruch;6;58675;Hemer;3,06;30.10.2001;EEG982680828726;SEE908481636704;Am Schieferbruch;6;58675;Hemer
|
||||
Veronika, Metta;Breddestr.;23;58675;Hemer;10,66;26.09.2023;EEG946237474774;SEE902350140293;Breddestr.;23;58675;Hemer
|
||||
Weller, Detlef;Am Sonnenhang;28;58675;Hemer;12,3;27.11.2023;EEG966811341469;SEE999936229459;Werftstr.;14;49733;Haren
|
||||
Frenzel, Stefan;Bembergstr.;27B;58675;Hemer;10,8;25.10.2023;EEG911989821275;SEE966647442682;Bembergstr.;27b;58675;Hemer
|
||||
Paszczela, Lukasz;Goyastr.;2;58675;Hemer;9,84;14.08.2023;EEG934227688713;SEE965124406421;Goyastr.;2;58675;Hemer
|
||||
Linnemann, Susanne + Meinolf;Gaxberger Weg;6C;58675;Hemer;8,925;04.10.2023;EEG909159175037;SEE961480556169;Gaxberger Weg;6c;58675;Hemer
|
||||
Pfeiffer, Petra;August-Hermann-Francke-Weg;1;58675;Hemer;5,59;16.11.2023;EEG966486211531;EEG966486211531;August-Hermann-Francke-Weg;1;58675;Hemer
|
||||
Heuselein, Torsten;Ahornweg;13A;58675;Hemer;8,25;06.03.2023;EEG935513649609;SEE940197713553;Ahornweg;13a;58675;Hemer
|
||||
Klein, Christian;Piepers Garten;14;58675;Hemer;5,81;07.09.2023;EEG960401533241;SEE947814149412;Piepers Garten;14;58675;Hemer
|
||||
Klein Grundstücksgemeinschaft GbR;Kanadastr.;2;58675;Hemer;99,63;06.11.2023;EEG992596789134;SEE924154548204;Kanadastr.;2;58675;Hemer
|
||||
Kemmer, Hans-Peter;Brockhauser Weg;39;58675;Hemer;6,3;12.09.2023;EEG938348189999;SEE962111586234;Brockhauser Weg;39;58675;Hemer
|
||||
Spieckermann, Karin;Büttmecker Weg;3;58675;Hemer;10,2;30.10.2023;EEG960941820191;SEE966293110232;Büttmecker Weg;3;58675;Hemer
|
||||
Schneider, Tim;Dulohstr.;43;58675;Hemer;14,45;11.10.2023;EEG998088767918;SEE999267263245;Dulohstr.;43;58675;Hemer
|
||||
Zmuda, Marius;Im Loh;24;58675;Hemer;6,4;15.05.2023;EEG919066050266;SEE985163153070;Im Loh;24;58675;Hemer
|
||||
Fiefeck, Benjamin;Auf dem Brauck;26D;58675;Hemer;8,8;13.10.2023;EEG951561155657;SEE949386368123;Auf dem Brauck;26d;58675;Hemer
|
||||
Denniger, Ulrich;Am Bräucken;14;58675;Hemer;5,85;07.08.2023;EEG918748849174;SEE965250590278;Am Bräucken;14;58675;Hemer
|
||||
Schmalz, Ronald;Hönnetalstr.;280;58675;Hemer;5,6;13.10.2023;EEG944574133026;SEE972663978722;Hönnetalstr.;280;58675;Hemer
|
||||
Mispagel, Inga;Im Langenbruch;10;58675;Hemer;25,2;04.11.2023;EEG950167612007;SEE985124292114;Im Langenbruch;10;58675;Hemer
|
||||
Grote, Ralf;Unter dem Asenberg;24;58675;Hemer;7,4;28.04.2023;EEG995901584660;SEE944853874718;Unter dem Asenberg;24;58675;Hemer
|
||||
Bornfelder, Sascha;In der Gähre;8;58675;Hemer;8,2;01.01.2024;EEG906649027371;SEE925209170548;In der Gähre;8;58675;Hemer
|
||||
Siegfried, Manfred;Gaxberger Weg;7;58675;Hemer;1,5;15.06.2023;;;;;;
|
||||
Franke, Til;Brockhauser Weg;44;58675;Hemer;7,9;02.01.2024;EEG984263305204;SEE996949387954;Brockhauserweg;44;58675;Hemer
|
||||
Ebberg, Sylvia;Bäingser Weg;49;58675;Hemer;10,08;20.12.2023;EEG981697638212;"SEE927789927635 ";Bäingser Weg;49;58675;Hemer
|
||||
Kahlert, Dieter;Heuweg;2;58675;Hemer;9,62;19.07.2023;EEG945361913173;SEE940836980841;Heuweg;2;58675;Hemer
|
||||
Treuke, Mathias;Am Eibenbrink;22;58675;Hemer;8,8;30.11.2023;EEG952754574163;SEE995061110617;Am Eibenbrink;22;58675;Hemer
|
||||
Arends, Jens;Apricke;24B;58675;Hemer;6,8;10.10.2023;EEG965626598334;"SEE928239083703 ";Apricke;24b;58675;Hemer
|
||||
Emmerich, Marcus & Katrin;An der Werthwiese;7;58675;Hemer;12,15;03.01.2024;EEG930351512092;SEE913837202021;An der Werthwiese;7;58675;Hemer
|
||||
Berger, Udo;Gerrit-Engelke-Weg;6;58675;Hemer;6,54;01.09.2023;EEG938167754408;SEE953745281336;Gerrit-Engelke-Weg;6;58675;Hemer
|
||||
Siegfried-de Jesus, Sónia;Gaxberger Weg;5A;58675;Hemer;9,03;10.11.2023;EEG938846498159;SEE931005349347;Gaxberger Weg;5a;58675;Hemer
|
||||
Maiwurm, Michael;Am Heßufer;42;58675;Hemer;12,3;20.10.2023;EEG951067402798;SEE984551069979;Am Heßufer ;42;58675;Hemer
|
||||
Küter, Stefan;Parkstr.;12;58675;Hemer;9,24;19.12.2023;EEG912624853569;SEE943739060900;Parkstr.;12;58675;Hemer
|
||||
Wrona, Roman;Gerrit-Engelke-Weg;10A;58675;Hemer;9,55;02.08.2023;EEG930535102064;SEE980391969745;Gerrit-Engelke-Weg;10a;58675;Hemer
|
||||
Schröder, Klaus;Am Langeloh;20 D;58675;Hemer;5,6;09.01.2024;EEG974599194245;SEE914681880120;Am Langeloh;20d;58675;Hemer
|
||||
Arndt, Erich;Gaxberger Weg;12;58675;Hemer;6,56;22.08.2023;EEG950341346131;SEE935875339392;Gaxberger Weg;12;58675;Hemer
|
||||
Kuß, Michael;Am Hillebach;24;58675;Hemer;2,49;12.08.2023;EEG945798525925;SEE977318552302;Am Hillebach;24;58675;Hemer
|
||||
Kuß, Michael;Am Hillebach;24;58675;Hemer;2,49;31.08.2023;EEG995835952672;SEE935572554364;Am Hillebach;24;58675;Hemer
|
||||
Hülsemeyer, Ralf;Baumhof;7;58675;Hemer;9,75;14.09.2023;EEG983313693964;SEE926206016907;Baumhof;7;58675;Hemer
|
||||
Gross, Katharina & Igor;Am Tannenkopf;26A;58675;Hemer;8,1;18.07.2023;EEG912158466068;SEE998571174353;Am Tannenkopf;26a;58675;Hemer
|
||||
Schröder, Christiane & Thomas;Felsenmeerstr.;13;58675;Hemer;1,72;17.10.2023;EEG967731621341;SEE937472418616;Felsenmeerstr.;13;58675;Hemer
|
||||
Schulte, Bettina u. Joachim;Weißdornstr.;2;58675;Hemer;11,34;10.01.2024;EEG939548368894;SEE950933893067;Weißdornstr.;2;58675;Hemer
|
||||
Schneider, Robin;Caller Str.;5;58675;Hemer;7,6;16.01.2024;EEG994878715176;SEE933506198660;Caller Str.;5;58675;Hemer
|
||||
Weifenbach, Jan;Wiemer Pfad;7;58675;Hemer;9,57;18.01.2024;EEG973191983950;SEE982636340548;Wiemer Pfad;7;58675;Hemer
|
||||
Lingenberg, Heiko;Von-Wrede-Str.;15;58675;Hemer;10,66;14.08.2023;EEG908717182401;SEE989230244883;Von-Wrede-Str.;15;58675;Hemer
|
||||
Tetzlaff, Thomas;Am Langeloh;40;58675;Hemer;9,6;06.12.2022;EEG945478304963;SEE961915848364;Am Langeloh;40;58675;Hemer
|
||||
Marquardt, Stefan;Am Branddorn;8;58675;Hemer;1,6;15.09.2023;EEG910282609665;SEE935478899903;Am Branddorn;8;58675;Hemer
|
||||
Dickel, Michael;Auf dem Brauck;44;58675;Hemer;10;30.11.2023;EEG965720596014;SEE970413359920;Auf dem Brauck;44;58675;Hemer
|
||||
Fries, Wilhelm;Unter dem Asenberg;38;58675;Hemer;10,32;26.01.2024;EEG941284101710;SEE951668814419;Unter dem Asenberg;38;58675;Hemer
|
||||
Siedler, Jürgen;Am Deinsberg;4;58675;Hemer;18,48;20.09.2023;EEG925266573146;SEE983452061839;Am Deinsberg;4;58675;Hemer
|
||||
Hübenthal, Christoph E.;Ostfeldstr.;14A;58675;Hemer;8,3;17.10.2023;EEG923219671574;SEE998536641722;Ostfeldstr.;14a;58675;Hemer
|
||||
Holve, Jan;Westendorfstr.;35;58675;Hemer;7,9;06.06.2023;EEG991325439074;SEE942937977263;Westendorfstr.;35;58675;Hemer
|
||||
Falk, Helmut;Dorfstr.;37;58675;Hemer;2,4;02.11.2023;EEG943204622978;SEE970183328058;Dorfstr.;37;58675;Hemer
|
||||
Falk, Monika;Dorfstr.;37;58675;Hemer;2,4;02.11.2023;EEG990950439213;SEE924881375364;Dorfstr.;37;58675;Hemer
|
||||
Hesse, Diana;Am Oelbusch;12A;58675;Hemer;7,56;16.12.2023;EEG947448519049;SEE977302658706;Am Oelbusch;12a;58675;Hemer
|
||||
Zielinski, Christoph;Lange Wiese;15;58675;Hemer;10,625;22.11.2023;EEG931118762842;SEE914628657525;Lange Wiese;15;58675;Hemer
|
||||
Schüler, Sebastian;Lange Wiese;5;58675;Hemer;13,175;08.02.2024;EEG935339123741;SEE965404436117;Lange Wiese;5;58675;Hemer
|
||||
Isildak, Adnan;Memeler Str.;1;58675;Hemer;9,315;17.08.2023;EEG992085051032;SEE959271326886;Memeler Str.;1;58675;Hemer
|
||||
Schröder, Dieter;Am Voßholz;3;58675;Hemer;20,16;29.01.2024;EEG918147789057;SEE918828833703;Am Voßholz;3;58675;Hemer
|
||||
Hövener, Michael;Haarweg;32;58675;Hemer;7,56;11.07.2023;EEG966562763503;SEE917886984020;Haarweg;21;58675;Hemer
|
||||
Bollau, Ralf;Parkstr.;90;58675;Hemer;8,715;31.01.2024;EEG925474824382;SEE990996343130;Parkstr.;90;58675;Hemer
|
||||
Bornfelder, Julia;Auf dem Brauck;17;58675;Hemer;12,3;18.08.2023;EEG924051375217;SEE917263748863;Auf dem Brauck;17;58675;Hemer
|
||||
Klein, Carsten;Wenhagener Str.;30A;58675;Hemer;4,51;26.07.2023;EEG994662190493;SEE939475328138;Wenhagener Str.;30a;58675;Hemer
|
||||
Wegiel, Peter;Unter dem Hohenstein;32;58675;Hemer;5,95;01.02.2024;EEG959397461836;SEE958077709817;Unter dem Hohenstein;32;58675;Hemer
|
||||
Zwanzig, Joachim;In den Grächten;15;58675;Hemer;6,48;09.08.2023;EEG918492859511;SEE911940789682;In den Grächten;15;58675;Hemer
|
||||
Scholz, Carsten;Lönsweg;34;58675;Hemer;6,02;02.02.2024;EEG905102178476;SEE989546316472;Lönsweg;34;58675;Hemer
|
||||
Föber, Kai-Uwe;Akazienweg;20;58675;Hemer;7,5;02.02.2024;EEG997430284264;SEE925581146834;Akazienweg;20;58675;Hemer
|
||||
Rynek, Magdalene;Stemmessiepener Weg;24;58675;Hemer;6,24;22.05.2023;EEG914252584020;SEE932129355726;Stemmessiepener Weg;24;58675;Hemer
|
||||
Alper, Yavuz;Baumhof;11;58675;Hemer;7,83;07.02.2024;EEG957151049412;ABR982925839180;Baumhof;11;58675;Hemer
|
||||
Czaja, Sebastian;Goethestr.;9D;58675;Hemer;6,02;08.02.2024;EEG952996599979;SEE953345816143;Goethestr.;9;58675;Hemer
|
||||
Schütt, Karin;Otto-Rentzing-Str.;7;58675;Hemer;4,56;04.11.2022;EEG981159971031;SEE920679570539;Otto-Rentzing-Str.;7;58675;Hemer
|
||||
Blümer, Cyrill;Am Bräucken;12;58675;Hemer;8,97;08.08.2023;EEG961553064706;SEE947117051894;Am Bräucken;12;58675;Hemer
|
||||
Beier, Ottmar und Michaela;Am Höllberg;25;58675;Hemer;15,58;18.04.2023;EEG959202399712;SEE910943696645;Am Höllberg;25;58675;Hemer
|
||||
Bertram, Peter;Auf dem Hohenstein;14;58675;Hemer;14,2;28.09.2023;EEG983691459671;SEE993707748958;Auf dem Hohenstein;14;58675;Hemer
|
||||
Becker, Hans-Joachim;Ihmerter Str.;298;58675;Hemer;9,99;02.08.2023;EEG902230896043;SEE975386616896;Ihmerter Str.;298;58675;Hemer
|
||||
Rosenthal, Horst;Lohstr.;54;58675;Hemer;9,02;17.08.2023;EEG979566357333;SEE965524887011;Lohstr.;54;58675;Hemer
|
||||
Behl, Daniel und Berit;Am Jalohsweg;9;58675;Hemer;14,1;27.09.2023;EEG983772966890;SEE920451827165;Am Jalohsweg;9;58675;Hemer
|
||||
Barna, Zoltan;Erlenweg;2;58675;Hemer;9,24;02.05.2023;EEG900510092048;SEE919074616546;Erlenweg;2;58675;Hemer
|
||||
Koch, Jochen;Sternstr.;13;58675;Hemer;8,91;20.11.2023;EEG949464527152;SEE988401229780;Sternstr.;13;58675;Hemer
|
||||
Hoppe, Andre;Auf dem Brauck;36;58675;Hemer;14,7;19.02.2024;EEG902011591761;SEE928582314622;Auf dem Brauck;36;58675;Hemer
|
||||
Pielhau, Gottried;Clara-Schumann-Str.;6;58675;Hemer;10,125;24.10.2023;EEG939774129184;SEE992054186918;Clara-Schumann-Str.;6;58675;Hemer
|
||||
Wollny, Detlev;Hagedorn;2C;58675;Hemer;10,53;23.11.2023;EEG947002611929;SEE994219863139;Hagedorn;2c;58675;Hemer
|
||||
Schulte, Gerrit;Unter dem Kehlberg;9;58675;Hemer;5,6;23.02.2024;EEG942341782194;SEE991329836251;Unter dem Kehlberg;9;58675;Hemer
|
||||
Hepping, Marcus;Ispei;10;58675;Hemer;9,8;23.02.2024;EEG945157004269;SEE967618773507;Ispei;10;58675;Hemer
|
||||
Grünebaum, David;Schulstr.;22;58675;Hemer;8,4;23.02.2024;EEG970125751951;SEE912703317968;Schulstr.;22;58675;Hemer
|
||||
Tezsoy, Cengiz;Karl-Bröger-Weg;11A;58675;Hemer;10,2;28.02.2024;EEG962608427781;SEE955358173800;Karl-Bröger-Weg;11a;58675;Hemer
|
||||
Junkelwitz, Sebastian;Seilerstr.;10a;58675;Hemer;6,4;24.07.2023;EEG931676662295;SEE999976206106;Seilerstr.;10a;58675;Hemer
|
||||
Schlüter, Peter;Im Alten Garten;7;58675;Hemer;10,25;19.04.2023;EEG998926103496;SEE936606145541;Im alten Garten;7;58675;Hemer
|
||||
Erl, Dorothea;Am Alten Dorfteich;29;58675;Hemer;6,72;09.10.2023;EEG921320414783;SEE924546383970;Am alten Dorfteich;29;58675;Hemer
|
||||
Timmers, Heiko;Gartenstr.;42;58675;Hemer;14,525;01.03.2024;EEG903307977757;SEE997922112143;Gartenstr.;42;58675;Hemer
|
||||
Droste, Alexander;Frönsberger Str.;10;58675;Hemer;5,74;04.03.2024;EEG963543608570;SEE915098338433;Frönsberger Str;10;58675;Hemer
|
||||
Alberts, Stefan;Tannenweg;2;58675;Hemer;11,475;04.03.2024;EEG933867529356;SEE979567472387;Tannenweg;2;58675;Hemer
|
||||
Stein, Björn;Pastoratstr.;12;58675;Hemer;7,5;13.06.2023;EEG909810275182;SEE950396748843;Pastoratstr.;12;58675;Hemer
|
||||
Suffrian, Uwe;Kiefernweg;4;58675;Hemer;13,94;23.05.2023;EEG913697765155;SEE968620054950;Kiefernweg;4;58675;Hemer
|
||||
Mühlendyck, Birgit u. Martin;Am Langeloh;33A;58675;Hemer;15,725;06.03.2024;EEG940277917055;SEE976974195465;Am Langeloh;33a;58675;Hemer
|
||||
Cici, Markus;Am Roland;1;58675;Hemer;6,93;10.03.2023;EEG941867211980;SEE986552398300;Am Roland;1;58675;Hemer
|
||||
Gall, Stefan;Ahornweg;15;58675;Hemer;10,8;06.03.2024;EEG925562449244;SEE920949806863;Ahornweg;15;58675;Hemer
|
||||
Erichsen GmbH & Co. KG;Am Iserbach;14;58675;Hemer;48,6;10.06.2023;EEG930727740982;SEE958441714805;Am Iserbach ;14;58675;Hemer
|
||||
Stegemann, Dirk;Schützenstr.;25;58675;Hemer;4,4;06.03.2024;EEG991740029638;SEE929287151390;Schützenstr.;25;58675;Hemer
|
||||
Iding, Hans-Werner;Westendorfstr.;24a;58675;Hemer;2,4;08.03.2024;EEG987240382403;SEE934451305028;Westendorfstr.;24a;58675;Hemer
|
||||
Runte, Felix;Am Voßholz;10;58675;Hemer;9,68;11.03.2024;EEG968722862989;SEE923883208229;Am Voßholz;10;58675;Hemer
|
||||
Braband, Daniel;Hellestr.;21;58675;Hemer;3,3;20.03.2024;EEG942132641792;SEE987576294074;Hellestr.;21;58675;Hemer
|
||||
Riehle, Norbert;Droste-Hülshoff-Weg;57;58675;Hemer;10,125;21.03.2024;EEG962005483311;SEE978293025706;Droste-Hülshoff-Weg;57;58675;Hemer
|
||||
Klein, Katrin & Oliver;Baumhof;8;58675;Hemer;6,885;25.03.2024;EEG923038458684;SEE991198381609;Baumhof;8;58675;Hemer
|
||||
Hallatsch, Robert;Am Tannenkopf;44B;58675;Hemer;7,56;28.03.2024;EEG965262283960;SEE957908327978;Am Tannenkopf;44b;58675;Hemer
|
||||
Franik, Robert;Emil-Nensel-Straße;2;58675;Hemer;7,65;29.03.2024;EEG997809915133;SEE951440186055;Emil-Nensel-Str.;2;58675;Hemer
|
||||
Stübs, Klaus-Dieter;Am Branddorn;22;58675;Hemer;6,15;03.04.2024;EEG940624671050;SEE995468461565;Am Branddorn;22;58675;Hemer
|
||||
Sommerhoff, Georg;Fuchsweg;6;58675;Hemer;14,62;04.04.2024;EEG954476836819;SEE973976459953;Fuchsweg;6;58675;Hemer
|
||||
Schmischke, Angelika u. Rüdiger;Im Weiler;20;58675;Hemer;6,3;11.12.2023;EEG952737230772;SEE930055438599;Im Weiler;20;58675;Hemer
|
||||
Flexal Metallproduktion GmbH & Co.KG;Oesestr.;49;58675;Hemer;57,46;26.06.2014;EEG925194281502;SEE911084009127;Oesestr.;49;58675;Hemer
|
||||
Drechsel, Günther;Schützenstr.;25A;58675;Hemer;6,09;04.04.2024;EEG970092178850;SEE984771718213;Schützenstr.;25a;58675;Hemer
|
||||
Funke, Fam.;Löhrberg;3;58675;Hemer;4,92;10.04.2024;EEG906138361238;SEE946662197453;Löhrberg;3;58675;Hemer
|
||||
Flexal Metallproduktion GmbH & Co.KG;Oesestr.;49;58675;Hemer;49,41;01.09.2023;EEG928751564636;SEE923508230277;Oesestr.;49;58675;Hemer
|
||||
Hengst, Wolfgang;Südweg;4;58675;Hemer;11,34;17.08.2023;EEG975386733852;SEE914548618941;Südweg;4;58675;Hemer
|
||||
Rosenkranz, Rico;Am Branddorn;27;58675;Hemer;4,5;12.04.2024;EEG947012531491;SEE907708987360;Am Branddorn;27;58675;Hemer
|
||||
Frohwein, Sven;Unter dem Asenberg;26;58675;Hemer;5,16;19.04.2024;EEG935279485671;SEE914541009807;Unter dem Asenberg;26;58675;Hemer
|
||||
Tüshaus, Jan Philip;Stormweg;10;58675;Hemer;6,15;22.04.2024;EEG976217406280;SEE900947471157;Stormweg;10;58675;Hemer
|
||||
Linstaedt, Thomas Adam;Breddestr.;38;58675;Hemer;6,53;25.04.2024;EEG920563575305;SEE958446106162;Breddestr.;38;58675;Hemer
|
||||
Kalnik, Manfred;Droste-Hülshoff-Weg;79;58675;Hemer;7,96;25.04.2024;EEG933705896633;SEE956262987668;Droste-Hülshoff-Weg;79;58675;Hemer
|
||||
Bange, Detlfe;Droste-Hülshoff-Weg;81;58675;Hemer;7,98;30.04.2024;EEG939034841283;SEE986949626238;Droste-Hülshoff-Weg;81;58675;Hemer
|
||||
Steiof, Heinz;Adjutantenkamp;11;58675;Hemer;5,1;08.05.2024;EEG953336598294;SEE902442203578;Adjutantenkamp;11;58675;Hemer
|
||||
Bormann, Jürgen;Stübecker Weg;51;58675;Hemer;10,66;12.12.2023;EEG928929780301;SEE992971295595;Stübecker Weg;51;58675;Hemer
|
||||
Gehrt, Oliver;Stemmessiepener Weg;29;58675;Hemer;9,72;18.12.2023;EEG965331841695;SEE914393980637;Stemmessiepener Weg;29;58675;Hemer
|
||||
Fischer, Volkmar;Unter dem Asenberg;23;58675;Hemer;9,84;15.05.2024;EEG993008202777;SEE950160565478;Unter dem Asenberg;23;58675;Hemer
|
||||
Remmert, Stephan;Habichtweg;6;58675;Hemer;12,59;16.05.2024;EEG917800496820;SEE905062797342;Habichtweg ;6;58675;Hemer
|
||||
Lehnen, Hans-Walter;Droste-Hülshoff-Weg;44;58675;Hemer;10,4;08.12.2023;EEG982878799944;SEE981197831366;Droste-Hülshoff-Weg;44;58675;Hemer
|
||||
Baltzer, Christian;Unter dem Asenberg;15;58675;Hemer;24,92;17.05.2024;EEG994924160080;SEE919363878112;Unter dem Asenberg ;15;58675;Hemer
|
||||
Gabriele Wieland, Matthias Redder;Schützenstr.;21;58675;Hemer;14,45;06.06.2024;EEG960603321462;SEE988976331758;Schützenstr.;21;58675;Hemer
|
||||
Frank, Gudrun & Gerhard;Südweg;8;58675;Hemer;24,78;20.12.2023;EEG926881964739;SEE916570388809;Südweg;8;58675;Hemer
|
||||
Seeliger, Martin;Altenaer Str.;147;58675;Hemer;4,1;12.06.2024;EEG982540712493;SEE928036448620;Altenaer Str.;147;58675;Hemer
|
||||
Wieners, Daniel;Dulohstr.;45;58675;Hemer;19,35;13.06.2024;EEG944536275870;SEE921265524257;Dulohstr.;45;58675;Hemer
|
||||
Schenk, Juri;Lange Wiese;11;58675;Hemer;21,08;17.06.2024;EEG972856771765;SEE905823352490;Lange Wiese ;11;58675;Hemer
|
||||
Tillmann, Birgitt & Bernd;Am Roland;21B;58675;Hemer;7,56;18.06.2024;EEG937270063520;SEE951986386209;Am Roland;21b;58675;Hemer
|
||||
Babilon, Thomas;Am Krausen Bäumchen;8C;58675;Hemer;3,66;24.06.2022;EEG956008696762;SEE951523769496;Am Krausen Bäumchen;8c;58675;Hemer
|
||||
Zimmermann, Bernd;Märkische Str.;81;58675;Hemer;3,52;21.06.2024;EEG993563314588;SEE944910724796;Märkische Str.;81;58675;Hemer
|
||||
Schneider, Lorenz;An der Windfuhr;6;58675;Hemer;20,2;01.09.2023;EEG980239082056;SEE985369317702;An der Windfuhr;6;58675;Hemer
|
||||
Mau, Friedhelm;Eserkamp;40;58675;Hemer;9,9;05.07.2021;EEG934432231018;SEE936240931593;Eserkamp;40;58675;Hemer
|
||||
Klein Bäder u. Wärme GmbH;Hauptstr.;327;58675;Hemer;12,8;18.09.2023;EEG999011564758;SEE968626028665;Hauptstr.;327;58675;Hemer
|
||||
Schmidt, Karsten;Im Eichholz;2;58675;Hemer;11,44;24.06.2024;EEG943958830025;SEE957589235272;Im Eichholz;2;58675;Hemer
|
||||
Benner, Wolfgang;Urbecker Str.;84;58675;Hemer;6,23;25.06.2024;EEG971780784513;SEE999778822504;Urbecker Str.;82;58675;Hemer
|
||||
Seyock, Holger;Im Hölken;14;58675;Hemer;7,885;01.07.2024;EEG923499275028;SEE989769837068;Im Hölken;15;58675;Hemer
|
||||
Ücker, Philip;Bodelschwinghstr.;28;58675;Hemer;9,1;04.07.2024;EEG953264382477;SEE944609227416;Bodelschwinghstr.;28;58675;Hemer
|
||||
Lategahn, Bettina;Waldemey;5;58675;Hemer;6,15;08.07.2024;EEG928699234417;SEE956834307702;Waldemey;5;58675;Hemer
|
||||
Hohmann, Michael;Westerweg;3b;58675;Hemer;8,25;09.07.2024;EEG907973213287;SEE989993891935;Westernweg;3b;58675;Hemer
|
||||
Gerstendorf, Andreas;Heukopfstr.;6;58675;Hemer;17,4;25.07.2024;EEG930396562182;SEE941932332725;Heukopfstr.;6;58675;Hemer
|
||||
Teresa Ginesko &, Janus Lukasczyk;Unter dem Asenberg;44;58675;Hemer;2,46;29.07.2024;EEG922228215861;SEE917326489450;Unter dem Asenberg;44;58675;Hemer
|
||||
Rothhöft, Michaela;Mühlackerweg;9a;58675;Hemer;23,08;30.07.2024;EEG913152502981;SEE985881376249;Mühlackerweg;9a;58675;Hemer
|
||||
Krause, Harry;Auf dem Lütgenstück;6a;58675;Hemer;15,84;22.08.2024;EEG900568915511;SEE991954069734;Auf dem Lütgenstück;6a;58675;Hemer
|
||||
Ruberg, Marc;Landhauser Str.;80 a;58675;Hemer;8,4;02.09.2024;EEG975740955852;SEE961710980979;Landhauser Str.;80a;58675;Hemer
|
||||
Vanselow, Klaus;Von-Ketteler-Weg;22;58675;Hemer;11,88;02.10.2024;EEG956646140696;SEE911805858867;Von-Ketteler-Weg;22;58675;Hemer
|
||||
Raygrotzki, Gerd;Felsenmeerstr.;19;58675;Hemer;8,1;18.10.2024;EEG982434968647;SEE909317945410;Felsenmeerstr.;19;58675;Hemer
|
||||
Schäfer, Rainer;Teichstr.;38;58675;Hemer;1,72;15.06.2024;EEG911051833052;SEE955800857371;Teichstr.;38;58675;Hemer
|
||||
Nitschke, Holger;Waldweg;1a;58675;Hemer;7,5;15.04.2024;EEG979717990211;SEE933121905186;Waldweg;1a;58675;Hemer
|
||||
Heidepriem, Peter;In den Klippen;8;58675;Hemer;13,2;09.06.2024;EEG903916206101;SEE937765119008;In den Klippen;8;58675;Hemer
|
||||
Barranquero, Leandro;Am Sommerholt;14b;58675;Hemer;8;05.04.2024;EEG980873641152;SEE939369347931;Am Sommerholt;14b;58675;Hemer
|
||||
Brücklmeier, Ernst;Am Möllinghof;10;58675;Hemer;8,8;30.04.2024;EEG909896453214;SEE918595010277;Am Möllinghof;10;58675;Hemer
|
||||
Koch, Peter;Schulstr.;10a;58675;Hemer;11,48;18.04.2024;EEG980233272200;SEE941348514395;Schulstr.;10a;58675;Hemer
|
||||
Bücker, Peer;Im Weiler;18;58675;Hemer;14,62;07.06.2024;EEG944621372835;SEE997879475735;Im Weiler;18;58675;Hemer
|
||||
Weidenheimer, Thomas;Iserlohner Str.;22;58675;Hemer;4,62;15.06.2024;EEG963673650272;SEE955121339846;Iserlohner Str.;22;58675;Hemer
|
||||
Thöne, Bernd;Stübecker Weg;69;58675;Hemer;7,395;22.03.2024;EEG904529909007;SEE943608915775;Stübecker Weg;96;58675;Hemer
|
||||
Stiefe, Thomas;Brockhauser Weg;101;58675;Hemer;1,55;04.01.2024;EEG937529330816;SEE969022661623;Brockhauser Weg;101;58675;Hemer
|
||||
Schulte, Gerrit;Unter dem Kehlberg;9;58675;Hemer;5,6;23.02.2024;EEG942341782194;SEE991329836251;Unter dem Kehlberg;9;58675;Hemer
|
||||
Nuyken, Günther;Berliner Str.;39;58675;Hemer;8,2;26.04.2024;EEG975734314542;SEE945497822066;Berliner Str.;39;58675;Hemer
|
||||
Baecker, Amelie & Philipp;Am Vogelsang;23;58675;Hemer;7,98;06.02.2024;EEG917234359241;SEE951646242494;Kellerstr.;1;58644;Iserlohn
|
||||
Posmyk, Christofer;Am Wernshagen;19;58675;Hemer;10,12;16.05.2024;EEG974035696289;SEE949161787323;Am Wernshagen;19;58675;Hemer
|
||||
Rathke, Jens;Am Vogelsang;3;58675;Hemer;5,6;01.04.2024;EEG916357028164;SEE937318895779;Am Vogelsang;3;58675;Hemer
|
||||
Heße, Stefan-Christopher;In der Bilmecke;6;58675;Hemer;5,2;26.04.2024;EEG909245284902;SEE989964169605;In der Bilmecke;6;58675;Hemer
|
||||
Wolfgang Förster GmbH;Industriepark Edelburg;2;58675;Hemer;95,04;07.09.2022;EEG955504480110;SEE930398188991;Industriepark Edelbur;2;58675;Hemer
|
||||
Hüttemeister-Hülsebusch, Ursula;Brandeiche;4;58675;Hemer;12,4;06.02.2023;EEG978350899530;SEE971138272747;Brandeiche;4;58675;Hemer
|
||||
Franke, Nora;Weißdornstr.;8;58675;Hemer;13,5;27.11.2023;EEG946331009988;SEE916368032266;Weißdornstr.;8;58675;Hemer
|
||||
Rosin, Jan;Charlotte-Terheyden-Weg;25;58675;Hemer;9,96;15.10.2023;EEG941795689752;SEE915447592264;Charlotte-Terheyden-Weg 25;25;58675;Hemer
|
||||
Janke, Ulrich;Im Trichter;3;58675;Hemer;9,36;12.12.2023;EEG951126392916;SEE939390094583;Im Trichter;3;58675;Hemer
|
||||
Humpert, Andreas;Am Dasbrauck;1 c;58675;Hemer;7,055;01.12.2023;EEG971299424672;SEE920293983227;Am Dasbrauck;1c;58675;Hemer
|
||||
Sassenscheidt, Thorsten;Brockhauser Weg;33 c;58675;Hemer;5,124;05.09.2024;EEG970564213096;SEE986228808607;Brockhauser Weg;33c;58675;Hemer
|
||||
Markgraf, Manfred;Nockenstr.;11a;58675;Hemer;10,75;09.10.2024;EEG927752482307;SEE958205047736;Nockenstr.;11a;58675;Hemer
|
||||
Horn, Nicole;Stübecker Weg;62;58675;Hemer;10,05;10.09.2024;EEG981111239193;SEE938474917589;Stübecker Weg ;62;58675;Hemer
|
||||
Knuhr, Jürgen;Rosenweg;1;58675;Hemer;10,75;28.02.2024;EEG933019196603;SEE992376547534;Rosenweg;1;58675;Hemer
|
||||
Hebenstreit, Ulrich;Ringstr.;22a;58675;Hemer;14,08;28.08.2024;EEG931623092694;SEE979699470107;Ringstr.;22a;58675;Hemer
|
||||
Eymann, Michael;Parkstr.;66;58675;Hemer;14,19;19.09.2024;EEG935328626475;SEE934473627009;Parkstr.;66;58675;Hemer
|
||||
Schneider, Rüdiger;Hönnetalstr.;160;58675;Hemer;3,42;11.11.2024;EEG963120063235;SEE967522208881;Hönnetalstr.;160;58675;Hemer
|
||||
Adolf, Winfried;Droste-Hülshoff-Weg;62;58675;Hemer;7,74;08.08.2024;EEG903368375905;SEE973586582775;Droste-Hülshoff-Weg;62;58675;Hemer
|
||||
Brenken, Christoph;Am Sommerholt;22;58675;Hemer;3,75;01.01.2024;EEG911653229178;SEE983632154399;Am Sommerholt;22;58675;Hemer
|
||||
Brenken, Christoph;Am Sommerholt;22;58675;Hemer;3,75;01.01.2024;EEG991632824303;SEE985649106033;Am Sommerholt;22;58675;Hemer
|
||||
Grothaus, Fabian Sebastian;Franz-Schubert-Str;6;58675;Hemer;12;29.11.2024;EEG982286181515;SEE970829183980;Franz-Schubert-Str;6;58675;Hemer
|
||||
Böhmer, Hans-Dieter;Hönnetalstr. ;99;58675;Hemer;9,79;08.11.2024;EEG908963290806;SEE948789854035;Hönnetalstr.;99;58675;Hemer
|
||||
Dünhaupt, Ursula;Im Turm;36;58675;Hemer;20,25;02.11.2023;EEG938041094033;SEE916673177379;Im Turm;36;58675;Hemer
|
||||
Morris, John;Akazienweg;2;58675;Hemer;13,65;12.12.2024;EEG975974099599;SEE986346671947;Akazienweg;2;58675;Hemer
|
||||
Baars, Markus;Bäingser Weg;99;58675;Hemer;9,79;15.10.2024;EEG922161043668;SEE948868417847;Bäingser Weg;99;58675;Hemer
|
||||
Wasner, Michael;Büttmecker Weg;19a;58675;Hemer;13,64;17.12.2024;EEG940083666086;SEE985891640224;Büttmecker Weg;19a;58675;Hemer
|
||||
Markert, Christoph;Karl-Wagenfeld-Weg;2;58675;Hemer;5,04;12.09.2023;EEG936749823597;SEE930249923344;Karl-Wagenfeld-Weg;2;58675;Hemer
|
||||
Jonen, Christoph;Schmetterlingsweg;1;58675;Hemer;17,16;01.11.2024;EEG948615151383 ;SEE977050745871;Schmetterlingsweg;1;58675;Hemer
|
||||
Rus, Dirk;Droste-Hülshoff-Weg;95;58675;Hemer;8,7;07.08.2024;EEG927279085418;SEE985133287361;Droste-Hülshoff-Weg;95;58675;Hemer
|
||||
Goldau, Jan-Oliver;Am Ballo ;8;58675;Hemer;8,800;22.07.2024;EEG919706735836;SEE962819397040;Am Ballo ;8;58675;Hemer
|
||||
Jürgen Weibler, M. Vogelmann;Am Deinsberg ;19;58675;Hemer;10,920;27.02.2024;EEG909343459011;SEE910162611597;Am Deinsberg ;19;58675;Hemer
|
||||
Lutz, Rafael;Am Iserbach;20 o;58675;Hemer;10,240;05.07.2024;EEG967664345031;SEE989118136361;Am Iserbach;20o;58675;Hemer
|
||||
Andrek, Josef;Am Lusebrink ;17a;58675;Hemer;18,620;22.04.2024;EEG918484271680;SEE983670574111;Am Lusebrink ;17a;58675;Hemer
|
||||
Hein, Kersten;Am Sonnenhang ;15;58675;Hemer;9,600;07.05.2024;EEG906989382536;SEE978367092290;Am Sonnenhang ;15;58675;Hemer
|
||||
Kawczak, Alexander;Auf dem Kamp ;6;58675;Hemer;10,080;11.09.2023;EEG943263133002;SEE992714823863;Auf dem Kamp ;6;58675;Hemer
|
||||
Böker, Mirella;Bautenheide ;20;58675;Hemer;10,920;14.12.2024;EEG958092897988;SEE921255379706;Bautenheide ;20;58675;Hemer
|
||||
Kaiser, Christian;Bräuckerstr. ;54;58675;Hemer;10,440;11.07.2024;EEG900324399197;SEE916813719667;Bräuckerstr. ;54;58675;Hemer
|
||||
Hirt, Michael;Brucknerstr. ;5;58675;Hemer;6,800;10.07.2024;EEG999160809946;SEE935878525211;Brucknerstr. ;5;58675;Hemer
|
||||
Hartmann, Peter;Caller Str. ;77;58675;Hemer;7,000;07.08.2024;EEG906569825859;SEE910237562014;Caller Str. ;77;58675;Hemer
|
||||
Wienand, Charlotte;Unter dem Asenberg ;12;58675;Hemer;14,760;12.05.2024;EEG936337388927;SEE920660399262;Unter dem Asenberg ;12;58675;Hemer
|
||||
Schönenberg, Joachim;Westendorfstr. ;54;58675;Hemer;24,300;11.12.2024;EEG991027841410;SEE942595163374;Westendorfstr. ;54;58675;Hemer
|
||||
Vorhoff, Rüdiger;Im Hölken ;15;58675;Hemer;16,380;20.08.2024;EEG961247959509;SEE919597640714;Im Hölken ;15;58675;Hemer
|
||||
Lueg, Johannes;Am Eibenbrink ;78;58675;Hemer;6,150;31.07.2024;EEG902832660165;SEE929595239780;Am Eibenbrink ;78;58675;Hemer
|
||||
Enste, André;Ghaxberger Weg ;38;58675;Hemer;9,960;11.01.2024;EEG963938998927;SEE992331287468;Ghaxberger Weg ;38;58675;Hemer
|
||||
Röder, Thomas;Am Schoppenweg ;16;58675;Hemer;11,340;09.09.2023;EEG932340205619;SEE985974584667;Am Schoppenweg ;16;58675;Hemer
|
||||
Dräs, Stefan;Balver Weg ;10b;58675;Hemer;12,640;19.10.2023;EEG995652231707;SEE960202204272;Balver Weg ;10b;58675;Hemer
|
||||
Groß, Thomas;Fichtestr. ;10;58675;Hemer;9,240;22.05.2024;EEG921826932941;SEE916625094440;Fichtestr. ;10;58675;Hemer
|
||||
Krafft, Rebekka & Hanno;Fliednerweg ;5;58675;Hemer;20,210;30.04.2024;EEG960451724071;SEE957986879437;Fliednerweg ;5;58675;Hemer
|
||||
Derksen, Valerij;Heinrich-Nuttebaum-Str. ;5;58675;Hemer;11,340;26.04.2024;EEG933276999603;SEE938818945476;Heinrich-Nuttebaum-Str. ;5;58675;Hemer
|
||||
Riebeling, Christina;Unter dem Asenberg;4;58675;Hemer;6,930;08.03.2024;EEG961208620455;SEE995079782561;Unter dem Asenberg;4;58675;Hemer
|
||||
Wolkewitz, Reiner;Waldemey ;18;58675;Hemer;7,650;10.08.2024;EEG993947320327;SEE940072217503;Waldemey ;18;58675;Hemer
|
||||
Galant, Sabrina;Dorfstr. ;13;58675;Hemer;7,740;23.10.2024;EEG989630741944;SEE910539653335;Dorfstr. ;13;58675;Hemer
|
||||
Waldeck, Sebastian;Ginsterweg ;12 d;58675;Hemer;12,450;14.05.2024;EEG933115957504;SEE980175166988;Ginsterweg ;12d;58675;Hemer
|
||||
Menger, Klaus;Holbeinstr. ;9;58675;Hemer;10,080;05.08.2024;EEG969847582776;SEE966518452420;Holbeinstr. ;9;58675;Hemer
|
||||
Ukiri, Richard;Hönnetalstr. ;70 a;58675;Hemer;6,090;07.08.2024;EEG951633856772;SEE996528221891;Hönnetalstr. ;70a;58675;Hemer
|
||||
Brucke, Horst;Im Eichholz ;21;58675;Hemer;10,250;12.04.2024;EEG953795119351;SEE976614698134;Im Eichholz ;21;58675;Hemer
|
||||
Hildebrandt, Holger;Im Santel ;1;58675;Hemer;11,000;29.08.2024;EEG964419849462;SEE956037691547;Im Santel ;1;58675;Hemer
|
||||
Stützer, Andreas;Josef-Winckler-Weg;2;58675;Hemer;6,580;16.12.2024;EEG936372265917;SEE940151089397;Josef-Winckler-Weg;2;58675;Hemer
|
||||
Siedler, Jürgen;Karl-Bröger-Weg ;10;58675;Hemer;28,500;08.10.2024;EEG941695498157;SEE909136825085;Karl-Bröger-Weg ;10;58675;Hemer
|
||||
Simon, Maria;Königsberger Str. ;24;58675;Hemer;10,080;21.03.2024;EEG923421663466;SEE906307861378;Königsberger Str. ;24;58675;Hemer
|
||||
Schelberg, Mick;Selvestr. ;3;58675;Hemer;10,000;21.08.2024;EEG901943613749;SEE944318762475;Selvestr. ;3;58675;Hemer
|
||||
Buhl, Holger;Urbecker Str.;111b;58675;Hemer;6,480;25.05.2024;EEG944076689816;SEE944919394327;Urbecker Str.;111b;58675;Hemer
|
||||
Keil, Svenja;Waldemey ;6a;58675;Hemer;8,700;08.05.2024;EEG914160242210;SEE968744281355;Waldemey ;6a;58675;Hemer
|
||||
Noga, Jonas;Westendorfstr. ;21a;58675;Hemer;8,265;30.04.2024;EEG948668179754;SEE912496350838;Westendorfstr. ;21a;58675;Hemer
|
||||
Reinders, Michael;Ispei ;11a;58675;Hemer;10,000;12.10.2024;EEG925883597730;SEE913975248189;Ispei ;11a;58675;Hemer
|
||||
Janke, Ulrich;Im Trichter ;3;58675;Hemer;9,360;12.12.2024;EEG951126392916;SEE939390094583;Im Trichter;3;58675;Hemer
|
||||
Busch, Torsten;Deilinghofer Str. ;35-37;58675;Hemer;20,000;27.08.2024;EEG985124377477;SEE965737270570;Deilinghofer Str.;35;58675;Hemer
|
||||
Hoppe, Andre;Auf dem Brauck ;36;58675;Hemer;14,700;25.09.2024;EEG902011591761;SEE928582314622;Auf dem Brauck ;36;58675;Hemer
|
||||
Streber, Jens;Bussardweg ;5;58675;Hemer;16,100;29.11.2024;EEG942939031307;SEE968267223856;Bussardweg ;5;58675;Hemer
|
||||
Friedrich, Hans-Dieter;Am Schieferbruch ;16;58675;Hemer;10,680;18.12.2024;EEG995201911753;SEE936038068067;Am Schieferbruch ;16;58675;Hemer
|
||||
Beckstroem, Inga;Lange Wiese ;31;58675;Hemer;15,300;22.05.2024;EEG947978641920;SEE989935734948;Lange Wiese ;31;58675;Hemer
|
||||
Erwentraut, Frank;Von-Wrede-Str. ;23;58675;Hemer;15,840;15.10.2024;EEG963688015868;SEE916778091136;Von-Wrede-Str. ;23;58675;Hemer
|
||||
Temme, Uli;Beethovenstr. ;8;58675;Hemer;7,740;18.08.2024;EEG999441716666;SEE923510373726;Beethovenstr. ;8;58675;Hemer
|
||||
Bechatzek, Enrico;Am Querrücken ;3 e;58675;Hemer;6,000;02.04.2024;EEG929523738552;SEE973928104672;Am Querrücken ;3e;58675;Hemer
|
||||
Druselmann, Tanja;Balver Weg ;20;58675;Hemer;18,000;15.04.2024;EEG984068718544;SEE930595209130;Balver Weg ;20;58675;Hemer
|
||||
Drossel, Birgit & Jürgen;Eichenweg ;3;58675;Hemer;6,230;14.10.2024;EEG914915124396;SEE943102933220;Eichenweg ;3;58675;Hemer
|
||||
Riesenfeld, Thomas;Ostend ;21;58675;Hemer;8,600;21.05.2024;EEG935641484684;SEE907290125720;Ostend ;21;58675;Hemer
|
||||
Messarius, Jochen;Frönsberger Str. ;25 a;58675;Hemer;8,32;20.11.2024;EEG903681590795;SEE995770230392;Frönsberger Str. ;25a;58675;Hemer
|
||||
Multhaup, Prof. Dr. Roland;Bautenheide;2a;58675;Hemer;9,24;19.12.2024;EEG998502044342;SEE963254090718;Ohlweg;8d;58730;Fröndenberg
|
||||
Multhaup, Prof. Dr. Roland;Bautenheide;2a;58675;Hemer;15,66;24.10.2024;EEG963710485225;SEE998015821249;Ohlweg;8d;58730;Fröndenberg
|
||||
Alberts Johannes;Hönnetalstr.;39a;58675;Hemer;18,5;22.11.2023;EEG933517830122;SEE926104679495;Hönnetalstr.;39a;58675;Hemer
|
||||
Hupe, Marco;Bembergstr.;48a;58675;Hemer;10,08;25.03.2024;EEG950966164318;SEE929894994052;Bembergstr.;48a;58675;Hemer
|
||||
Rosier, Björn;Ostfeldstr.;22a;58675;Hemer;10,875;08.05.2024;EEG959300318721;SEE954108130582;Ostfeldstr.;22a;58675;Hemer
|
||||
Schildwächter, Oliver;Holmecker Weg;9;58675;Hemer;12,18;01.08.2024;EEG928962454191;SEE954250357943;Holmecker Weg;9;58675;Hemer
|
||||
Bongard, Hans-Georg;Meisenweg;4a;58675;Hemer;8,4;07.11.2023;EEG916844407250;SEE954363635532;Meisenweg;4a;58675;Hemer
|
||||
|
@@ -0,0 +1,327 @@
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import groovy.transform.Field
|
||||
|
||||
|
||||
|
||||
D3Interface d3 = getProperty("d3");
|
||||
|
||||
@Field prg = "enervie_akten_anlegen.groovy";
|
||||
@Field version = "0.1";
|
||||
@Field kunde = "Enervie";
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// debug = 0 => es finden Änderungen am Datenbestand statt
|
||||
// debug = 1 => es finden keine Änderungen am Datenbestand statt
|
||||
@Field debug = 1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
def debugtext;
|
||||
|
||||
switch (debug)
|
||||
{
|
||||
case 0:
|
||||
debugtext = "ausgeschaltet";
|
||||
break;
|
||||
default:
|
||||
debugtext = "eingeschaltet (keine Aenderungen am Datenbestand)";
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
xlog( d3, 4, "************************************************" );
|
||||
xlog( d3, 4, "* Programm : " + prg );
|
||||
xlog( d3, 4, "* Version : " + version );
|
||||
xlog( d3, 4, "* Kunde : " + kunde );
|
||||
xlog( d3, 4, "* geschrieben von : calb / d.velop AG" );
|
||||
xlog( d3, 4, "* (c) d.velop AG" );
|
||||
xlog( d3, 4, "************************************************" );
|
||||
|
||||
|
||||
xlog( d3, 4, "Parameter: " );
|
||||
xlog( d3, 4, "* DEBUG : " + debugtext );
|
||||
|
||||
|
||||
|
||||
|
||||
xlog( d3, 4, "************************************************" );
|
||||
|
||||
|
||||
|
||||
def file = new File( "D:\\Einspeiseakte\\EEG_Liste2.csv" );
|
||||
|
||||
def lines = file.readLines( "UTF-8" );
|
||||
|
||||
def headers = parseCsvLine( lines[ 0 ] );
|
||||
def dataRows = lines[1..33];
|
||||
def i = 1;
|
||||
def fehler = false;
|
||||
Number laenge = 35;
|
||||
|
||||
dataRows.eachWithIndex{ line, index ->
|
||||
|
||||
def values = parseCsvLine( line );
|
||||
|
||||
def rowMap = [headers, values].transpose().collectEntries { it }
|
||||
|
||||
Document newDoc = d3.archive.newDocument();
|
||||
|
||||
newDoc.type = "AEINA";
|
||||
|
||||
newDoc.status = Document.DocStatus.DOC_STAT_RELEASE;
|
||||
|
||||
rowMap.each{ key, value ->
|
||||
|
||||
//println "${key}: ${value}"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if ( key == "GP-Anrede" )
|
||||
{
|
||||
newDoc.field[ 22 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF22" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "Anlage Strasse" )
|
||||
{
|
||||
newDoc.field[ 2 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF2 " + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "Anlage Hausnummer" )
|
||||
{
|
||||
newDoc.field[ 43 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF43" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "Anlage PLZ" )
|
||||
{
|
||||
newDoc.field[ 46 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF46" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "Anlage Ort" )
|
||||
{
|
||||
newDoc.field[ 3 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF3 " + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "Anlage Gesamtwirkleistung" )
|
||||
{
|
||||
newDoc.field[ 19 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF19" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "Anlage Inbetriebnahme-Datum" )
|
||||
{
|
||||
def datum_inb = new Date( ).parse( "dd.MM.yyyy", value );
|
||||
newDoc.field[ 58 ] = datum_inb;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF58" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "MaStR-Nummer der EEG-/KWK-Anlage" )
|
||||
{
|
||||
newDoc.field[ 28 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF28" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "MaStR-Nummer der Einheit" )
|
||||
{
|
||||
newDoc.field[ 27 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF27" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "GP-Strasse" )
|
||||
{
|
||||
newDoc.field[ 8 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF8 " + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "GP-Hausnummer" )
|
||||
{
|
||||
newDoc.field[ 44 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF44" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "GP-PLZ" )
|
||||
{
|
||||
newDoc.field[ 45 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF45" + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
if ( key == "GP-Ort" )
|
||||
{
|
||||
newDoc.field[ 9 ] = value;
|
||||
xlog( d3, 4, "Nr. " + i + ": DDF9 " + key.padLeft( laenge ) + " => ${value} " );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
fehler = false;
|
||||
|
||||
if ( debug == 0 )
|
||||
{
|
||||
try
|
||||
{
|
||||
newDoc = d3.archive.importDocument( newDoc );
|
||||
}
|
||||
catch ( D3Exception e )
|
||||
{
|
||||
fehler = true;
|
||||
xlog( d3, 2, "Nr. " + i + ": Akte konnte nicht erzeugt werden: " + e.message );
|
||||
}
|
||||
|
||||
if ( fehler == false )
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + i + ": Akte wurde erzeugt, Doku-ID: " + newDoc.id() );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + i + ": Akte wurde nicht erzeugt: DEBUG-Modus eingeschaltet." );
|
||||
}
|
||||
|
||||
|
||||
|
||||
i++;
|
||||
xlog( d3, 4, "************************************************" );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def xlog( D3Interface d3, int loglevel, String logtext )
|
||||
{
|
||||
def logdatei = "d:\\d3\\logs\\" + prg + ".txt";
|
||||
def g_loglevel = 5;
|
||||
def g_logdirect = "BEIDE"; // BEIDE oder D3LOG oder DATEI
|
||||
def date = new Date();
|
||||
def zeitstempel = date.format( "yyyy.MM.dd HH:mm:ss", TimeZone.getTimeZone('CET') );
|
||||
def loglevel_lang = "[INFO ]";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if ( loglevel <= g_loglevel )
|
||||
{
|
||||
switch ( loglevel )
|
||||
{
|
||||
case 1:
|
||||
loglevel_lang = "[FATAL]";
|
||||
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.critical( logtext );
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
loglevel_lang = "[ERROR]";
|
||||
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.error( logtext );
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
loglevel_lang = "[WARN ]";
|
||||
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.warn( logtext );
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
loglevel_lang = "[INFO ]";
|
||||
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.info( logtext );
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
loglevel_lang = "[DEBUG]";
|
||||
// Da die d.3 Server i.d.R. nicht im Debug-Modus laufen, erscheinen DEBUG-Meldungen nicht im Log.
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.debug( logtext );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( ( g_logdirect == "DATEI" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
new File( logdatei ).append( zeitstempel + " " + loglevel_lang + " " + logtext + "\n", "UTF8" );
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
def parseCsvLine(String line) {
|
||||
def result = []
|
||||
def current = ''
|
||||
def inQuotes = false
|
||||
def i = 0
|
||||
|
||||
while (i < line.length()) {
|
||||
def c = line[i]
|
||||
if (c == '"') {
|
||||
inQuotes = !inQuotes
|
||||
} else if (c == ';' && !inQuotes) {
|
||||
result << current.trim()
|
||||
current = ''
|
||||
} else {
|
||||
current += c
|
||||
}
|
||||
i++
|
||||
}
|
||||
result << current.trim()
|
||||
return result.collect { it.replaceAll(/^"|"$/, '') } // entfernt führende/trailing Quotes
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
BIN
Hermes/.DS_Store
vendored
Normal file
BIN
Hermes/.DS_Store
vendored
Normal file
Binary file not shown.
1
Hermes/CMC/AddContractDocumentInfoFolder.classpath
Normal file
1
Hermes/CMC/AddContractDocumentInfoFolder.classpath
Normal file
@@ -0,0 +1 @@
|
||||
D:\Temp\libs\commons-io-2.11.0.jar
|
||||
497
Hermes/CMC/AddContractDocumentInfoFolder.groovy
Normal file
497
Hermes/CMC/AddContractDocumentInfoFolder.groovy
Normal file
@@ -0,0 +1,497 @@
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.User
|
||||
import groovy.sql.*
|
||||
import groovy.transform.Field
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
/*
|
||||
* Beschreibung: Liesst die Dokumente an
|
||||
*
|
||||
*/
|
||||
//Pfade zur Auslesen und Ablegen der Vertragsdateien inkl. JPL
|
||||
@Field String path = "E:\\WORK_LCM_MIGR\\export\\part0"
|
||||
@Field String TargetPath = "E:\\WORK_LCM_MIGR\\export\\Import_Folder\\"
|
||||
//@Field String TargetPath = "E:\\d3work\\Import\\D3D\\Vertragsdok_Unt\\"
|
||||
|
||||
/* Modus der Dokument Migration
|
||||
* All_Dok - Migriert alle in Ordner @path liegenden Dokumente. Dokumente ohne bestehenden Vertrag,
|
||||
* bekommen keine Vertragsnummer intern und sind somit nicht verknuepft
|
||||
* Only_Available - Migriert nur die vertragsdokumente die zu den Vertraegen der LCM Nummern des Filters @SQLQueryFilter gehoeren.
|
||||
*/
|
||||
@Field String modus = "All_Dok"//"Only_Available"
|
||||
//Filter zur Eingrenzung der Dokumente. Diese Variable wird nur im Modus @modus - Only_Available verwendet.
|
||||
@Field String SQLQueryFilter = " WHERE O.FK_TBL_VERTRAG IN ('13220','14141','14170','14174','14176','14177','14178','14179','14180','16256','16395','16397','16399','16400','16401','16402','16403','16404','16406','16407','16446','16450','16451','16452','16453','16454','16455','17358','21240','21295','21573','13705','16712','15120','16052','12301','18970')"
|
||||
//Beinhaltet die Vertragsnummer von Vertraegen die mehrere Vertragsdokumente im LCM besitzen. Diese Dokumente werden dann Vertragsunterlagen mit dem Typ Vertrag
|
||||
@Field List<String> contractMap
|
||||
|
||||
public class constanten
|
||||
{
|
||||
// Logging
|
||||
static String logDirPath = "./log/"
|
||||
static File logFile = new File(logDirPath + System.currentTimeMillis() + "DokumentenImportDCM.log")
|
||||
}
|
||||
|
||||
D3Interface d3 = getProperty("d3")
|
||||
d3.log.info("Start Dokumente in Vertrag ablegen");
|
||||
getContractWithMoreContractDocs(d3)
|
||||
getDocuments(d3)
|
||||
d3.log.info("Ende Dokumente in Vertrag ablegen");
|
||||
|
||||
def getDocuments (D3Interface d3)
|
||||
{
|
||||
if(modus == "All_Dok")
|
||||
{
|
||||
d3.log.info("Start getDocuments - All_Dok Modus");
|
||||
File folder = new File(path);
|
||||
findAllFilesInFolder(d3,folder)
|
||||
copyFiles(d3)
|
||||
d3.log.info("Ende getDocuments - All_Dok Modus");
|
||||
}
|
||||
else if(modus == "Only_Available")
|
||||
{
|
||||
d3.log.info("Start getDocuments - Only_Available Modus");
|
||||
getOnlyDocumentsForDefinedContracts(d3)
|
||||
d3.log.info("Ende getDocuments - Only_Available Modus");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception ("Fehler: Es wurde ein falscher Modus verwendet. Bitte nur 'Only_Available' oder 'All_Dok' verwenden.");
|
||||
}
|
||||
}
|
||||
|
||||
def copyFiles(D3Interface d3)
|
||||
{
|
||||
File source = new File(path);
|
||||
File dest = new File(TargetPath);
|
||||
try {
|
||||
FileUtils.copyDirectory(source, dest);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
d3.log.error("Fehler: " + e)
|
||||
}
|
||||
}
|
||||
|
||||
def findAllFilesInFolder(D3Interface d3, File folder)
|
||||
{
|
||||
d3.log.info("Start findAllFilesInFolder");
|
||||
for (File file : folder.listFiles()) {
|
||||
d3.log.info("Dokument ist in Ordner vorhanden");
|
||||
if (!file.isDirectory()) {
|
||||
d3.log.info("FileName: " + file.getName());
|
||||
// Auslesen der Dokument ID
|
||||
String fileName = file.getName();
|
||||
//Number--------
|
||||
int ende = fileName.indexOf(".");
|
||||
int start = fileName.indexOf("_")+1;
|
||||
String substring = fileName.substring(start , ende);
|
||||
d3.log.info("substring: " + substring);
|
||||
getFolderNumber(d3, substring, fileName)
|
||||
} else {
|
||||
findAllFilesInFolder(d3, file);
|
||||
}
|
||||
}
|
||||
d3.log.info("Ende findAllFilesInFolder");
|
||||
}
|
||||
|
||||
def getFolderNumber(D3Interface d3, String document_Number, String OriginalFileName)
|
||||
{
|
||||
d3.log.info("Start getContract");
|
||||
|
||||
def lDBUser = "US_DEVELOP_RO"
|
||||
def lDBPasssword = "US_DEVELOP_RO"
|
||||
def lSQLConnection
|
||||
try
|
||||
{
|
||||
String SQLQuery = "Select db.fk_tbl_dokument_id, db.filename, o.titel, O.FK_TBL_VERTRAG, O.FK_REF_DOKUMENTENTYP, da.FK_REF_ATTDL1 , da.FK_REF_ATTDL2, da.FK_REF_ATTDL4, da.FK_REF_ATTDL5, o.FK_REF_DOKUMENT_STATUS, vd.FK_TBL_ORDNER, ORD.BEZEICHNUNG FROM DMS.tbl_dokument_binary db FULL OUTER JOIN DMS.tbl_dokument O ON O.id = db.FK_TBL_DOKUMENT_ID FULL OUTER JOIN LCMDESIGNER.tbl_dokument_attribute da ON da.fk_tbl_dokument = O.id FULL OUTER JOIN LCM.TBL_VERTRAG_DOKUMENT VD ON VD.fk_tbl_dokument = O.id FULL OUTER JOIN DMS.TBL_ORDNER ORD ON ORD.ID = vd.FK_TBL_ORDNER WHERE db.fk_tbl_dokument_id = $document_Number"
|
||||
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
|
||||
lSQLConnection.eachRow(SQLQuery) { row ->
|
||||
d3.log.info("id: ${row.fk_tbl_dokument_id}, Dok Name: ${row.filename}, Vertrag: ${row.FK_TBL_VERTRAG}")
|
||||
def LCM_Number = "LCM-${row.FK_TBL_VERTRAG}"
|
||||
d3.log.info("LCM_Number: " + LCM_Number)
|
||||
def VertInt = getVertragsnummer_Intern(d3, LCM_Number)
|
||||
d3.log.info("Vertragsnummer Intern: " + VertInt)
|
||||
def dokType = row.FK_REF_DOKUMENTENTYP
|
||||
d3.log.info("dokType: " + dokType)
|
||||
def dok_Status = row.FK_REF_DOKUMENT_STATUS
|
||||
|
||||
createJPLFileForFile(d3, VertInt, OriginalFileName, path, dokType, dok_Status, row)
|
||||
createActionFileForFile(d3, OriginalFileName, path)
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
d3.log.error("Fehler beim SQL Verbindungsaufbau:" + e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(lSQLConnection != null)
|
||||
{
|
||||
lSQLConnection.close();
|
||||
}
|
||||
}
|
||||
d3.log.info("Ende getContract");
|
||||
}
|
||||
|
||||
def getVertragsnummer_Intern(D3Interface d3, def LCM_Number)
|
||||
{
|
||||
d3.log.info("Start getVertragsnummer_Intern $LCM_Number")
|
||||
|
||||
String query = "SELECT dok_dat_feld_11 AS VertragsIntern FROM firmen_spezifisch WHERE kue_dokuart = ? AND dok_dat_feld_12 = ?";
|
||||
GroovyRowResult resultRow = d3.sql.firstRow(query, ["A1LE3", LCM_Number]);
|
||||
if(resultRow != null && resultRow.containsKey("VertragsIntern" ) && resultRow.getProperty("VertragsIntern") != null) {
|
||||
String VertInt = resultRow.getProperty("VertragsIntern");
|
||||
d3.log.info("VertInt: " + VertInt)
|
||||
return VertInt
|
||||
}
|
||||
d3.log.info("Ende getVertragsnummer_Intern")
|
||||
return ""
|
||||
}
|
||||
|
||||
def getOnlyDocumentsForDefinedContracts(D3Interface d3)
|
||||
{
|
||||
d3.log.info("Start getOnlyDocumentsForDefinedContracts");
|
||||
|
||||
def lDBUser = "US_DEVELOP_RO"
|
||||
def lDBPasssword = "US_DEVELOP_RO"
|
||||
def lSQLConnection
|
||||
try
|
||||
{
|
||||
String SQLQuery = "Select db.fk_tbl_dokument_id, db.filename, o.titel, O.FK_TBL_VERTRAG, O.FK_REF_DOKUMENTENTYP, da.FK_REF_ATTDL1 , da.FK_REF_ATTDL2, da.FK_REF_ATTDL4, da.FK_REF_ATTDL5, o.FK_REF_DOKUMENT_STATUS, vd.FK_TBL_ORDNER, ORD.BEZEICHNUNG FROM DMS.tbl_dokument_binary db FULL OUTER JOIN DMS.tbl_dokument O ON O.id = db.FK_TBL_DOKUMENT_ID FULL OUTER JOIN LCMDESIGNER.tbl_dokument_attribute da ON da.fk_tbl_dokument = O.id FULL OUTER JOIN LCM.TBL_VERTRAG_DOKUMENT VD ON VD.fk_tbl_dokument = O.id FULL OUTER JOIN DMS.TBL_ORDNER ORD ON ORD.ID = vd.FK_TBL_ORDNER $SQLQueryFilter"
|
||||
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
|
||||
lSQLConnection.eachRow(SQLQuery) { row ->
|
||||
d3.log.info("Start------------------------------------------------------------")
|
||||
def LCM_Number = "LCM-${row.FK_TBL_VERTRAG}"
|
||||
d3.log.info("Vertrag LCM Nummer: " + LCM_Number)
|
||||
def VertInt = getVertragsnummer_Intern(d3, LCM_Number)
|
||||
d3.log.info("Vertragsnummer intern zur LCM Nummer: " + VertInt)
|
||||
if(VertInt != null && VertInt != "")
|
||||
{
|
||||
String documentId = row.fk_tbl_dokument_id
|
||||
def dokType = row.FK_REF_DOKUMENTENTYP
|
||||
def dok_Status = row.FK_REF_DOKUMENT_STATUS
|
||||
d3.log.info("Dokumenten Typ: " + dokType)
|
||||
File[] allDocs = findOnlyDefinedFilesInFolder(d3, new File(path), documentId );
|
||||
if(allDocs?.size() == 1)
|
||||
{
|
||||
d3.log.info("Anzahl gefundener Dokumente: " + allDocs.size() + " zu Vertrag: " + VertInt)
|
||||
try
|
||||
{
|
||||
if(contractMap.contains(VertInt))
|
||||
{
|
||||
log("Der Vertrag " + VertInt + " enthaelt mehrere Vertragsdokumente. Somit werden diese Dokumente nun zu Unterlagen")
|
||||
dokType = 1234
|
||||
}
|
||||
d3.log.info("UebergabeParameter vor Aufruf: " + dokType + " - " + dok_Status)
|
||||
def fileName = allDocs[0].getName();
|
||||
createJPLFileForFile(d3, VertInt, fileName , path, dokType, dok_Status, row)
|
||||
createActionFileForFile(d3, fileName, path)
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
d3.log.error("Fehler beim generieren der Import Dateien fuer den Vertrag " + VertInt +": " + ex)
|
||||
}
|
||||
}
|
||||
else if(allDocs?.size() > 1)
|
||||
{
|
||||
d3.log.warn("Fuer den Vertrag $VertInt wurden " + allDocs?.size() + " Dokumente mit der Dokumenten ID $documentId gefunden. Es darf nur ein Dokument vorhanden sein.")
|
||||
}
|
||||
else if(allDocs?.size() == 0)
|
||||
{
|
||||
d3.log.info("Fuer den Vertrag $VertInt wurden keine Dokumente gefunden.")
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.info("Es konnte keine Vertragsnummer intern zur LCM Nummer $LCM_Number gefunden werden.")
|
||||
}
|
||||
}
|
||||
d3.log.info("Ende+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
d3.log.error("Fehler beim SQL Verbindungsaufbau: " + e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(lSQLConnection != null)
|
||||
{
|
||||
lSQLConnection.close();
|
||||
}
|
||||
}
|
||||
d3.log.info("Ende getOnlyDocumentsForDefinedContracts");
|
||||
}
|
||||
|
||||
def findOnlyDefinedFilesInFolder(D3Interface d3, File folder, String num_Prafix)
|
||||
{
|
||||
if(folder.isDirectory())
|
||||
{
|
||||
//list all files on directory
|
||||
File[] files = folder.listFiles(new FilenameFilter() {
|
||||
|
||||
//apply a filter
|
||||
@Override
|
||||
public boolean accept(File doc, String name) {
|
||||
boolean result;
|
||||
if(name.endsWith("jpl"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
def checkName = name.substring(name.indexOf("_") + "_".length(), name.indexOf("."));
|
||||
if(checkName == num_Prafix){
|
||||
result=true;
|
||||
}
|
||||
else{
|
||||
result=false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
});
|
||||
return files;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//Erzeugt nur fuer die uebergebenen Dokumente eine action Datei
|
||||
def createActionFileForFile(D3Interface d3, String fileName, String targetPath)
|
||||
{
|
||||
d3.log.info("START createActionFileForFile");
|
||||
|
||||
PrintWriter out = null;
|
||||
d3.log.error("Dateiname fuer Action Datei: " + fileName)
|
||||
def extension = fileName
|
||||
if(fileName != "" && fileName != null)
|
||||
{
|
||||
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
|
||||
extension = extension.substring(extension.lastIndexOf('.')+1, extension.length());
|
||||
if((fileName == "" || fileName == null) && (extension == "" || extension != null))
|
||||
{
|
||||
throw new Exception ("Fehler: Es konnte kein File Name oder keine Dateierweiterung extrahiert werden.");
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
out = new PrintWriter(targetPath + "\\" + fileName + ".action");
|
||||
out.println("import_file_ext = '${extension}'");
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
d3.log.error("ERROR: createActionFileForFile = " + e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (out != null)
|
||||
{
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
d3.log.info("ENDE createActionFileForFile");
|
||||
}
|
||||
|
||||
//Erzeugt nur fuer die uebergebenen Dokumente eine JPL Datei
|
||||
def createJPLFileForFile(D3Interface d3, def vertragsnummerIntern, String fileName, String targetPath, def dokType, def dok_status, def row)
|
||||
{
|
||||
d3.log.info("START createJPLFileForFile");
|
||||
d3.log.info("Uebergabeparameter -- dokType: " + dokType + " -- dok_status: " + dok_status);
|
||||
String logiVerzeichnis = "Fr";
|
||||
PrintWriter out = null;
|
||||
d3.log.info("Dateiname: " + fileName)
|
||||
if(fileName != "" && fileName != null && fileName.contains("."))
|
||||
{
|
||||
fileName = fileName.substring(0, fileName.lastIndexOf('.'));
|
||||
if(fileName == "" || fileName == null)
|
||||
{
|
||||
throw new Exception ("Fehler: Es konnte kein JPL File Name extrahiert werden.");
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
out = new PrintWriter(targetPath + "\\" + fileName + ".jpl");
|
||||
//out.println("zeich_nr = '${doc.id()}'"); -> nur bei Versionierung
|
||||
if(dokType == 1002)
|
||||
{
|
||||
out.println("dokuart = 'D1LE5'");
|
||||
out.println("dok_dat_feld[1] = 'Vertrag'");
|
||||
}
|
||||
else
|
||||
{
|
||||
out.println("dokuart = 'D1LE6'");
|
||||
if(dokType == 1001)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Mustervertrag'");
|
||||
}
|
||||
else if(dokType == 1009)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Verpflichtung Mindestlohn'");
|
||||
}
|
||||
else if(dokType == 1003)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Anlage'");
|
||||
}
|
||||
else if(dokType == 1005)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Kündigung'");
|
||||
}
|
||||
else if(dokType == 1004)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Nachtrag/Änderungsvereinbarung'");
|
||||
}
|
||||
else if(dokType == 1007)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Geheimhaltungsvereinbarung'");
|
||||
}
|
||||
else if(dokType == 1008)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Sonstiges'");
|
||||
}
|
||||
else if(dokType == 1006)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Zusatzvereinbarung'");
|
||||
}
|
||||
else if(dokType == 1050)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'DS Dienstleister Audit'");
|
||||
}
|
||||
else if(dokType == 1030)
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Vertrauliches Dokument'");
|
||||
}
|
||||
else if(dokType == 1234)// Dieser Wert ist als DokType nicht vorhanden. Er wird nur zur Eindeutigkeit verwendet um aus dem Dokument eine Unterlage mit Typ Vertrag zu machen. Das ist notwendig, da es Vertraeg mit mehreren Vertragsdokumente gibt.
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Vertrag'");
|
||||
}
|
||||
else
|
||||
{
|
||||
out.println("dok_dat_feld[1] = 'Sonstiges'");
|
||||
d3.log.info("Die Dokumentvariante konnte nicht bestimmt werden. Mapping Nummer: " + dokType)
|
||||
}
|
||||
}
|
||||
if(dok_status == null || dok_status == "" || dok_status == 1002)
|
||||
{
|
||||
out.println("dok_dat_feld[34] = 'Aktiv'");
|
||||
}
|
||||
else if(dok_status == 5)
|
||||
{
|
||||
out.println("dok_dat_feld[34] = 'Archiviert'");
|
||||
}
|
||||
else if(dok_status == 1000)
|
||||
{
|
||||
out.println("dok_dat_feld[34] = 'Beendet'");
|
||||
}
|
||||
else if(dok_status == 1001)
|
||||
{
|
||||
out.println("dok_dat_feld[34] = 'Durch einen Nachtrag ersetzt'");
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.error("Fehler: Der Dokumentenstatus "+ dok_status +" ist nicht definiert.");
|
||||
}
|
||||
out.println("logi_verzeichnis = '${logiVerzeichnis}'");
|
||||
out.println("dok_dat_feld[11] = '${vertragsnummerIntern}'");
|
||||
def titel = row.titel;
|
||||
out.println("dok_dat_feld[26] = '${titel}'");
|
||||
def i = 1;
|
||||
if(row.FK_REF_ATTDL1 == 1000 || row.FK_REF_ATTDL1 == 1002)
|
||||
{
|
||||
out.println("dok_dat_feld_68[${i}] = 'Change of Control'");
|
||||
i++
|
||||
}
|
||||
if(row.FK_REF_ATTDL2 == 1000)
|
||||
{
|
||||
out.println("dok_dat_feld_68[${i}] = 'AV-Vereinbarungen'");
|
||||
i++
|
||||
}
|
||||
if(row.FK_REF_ATTDL5 == 1000)
|
||||
{
|
||||
out.println("dok_dat_feld_68[${i}] = 'Standardvertragsklauseln'");
|
||||
i++
|
||||
}
|
||||
if(row.FK_REF_ATTDL4 == 1000)
|
||||
{
|
||||
out.println("dok_dat_feld_68[${i}] = 'Code of Conduct'");
|
||||
i++
|
||||
}
|
||||
|
||||
def ordner = row.BEZEICHNUNG
|
||||
if(ordner != null && ordner != "")
|
||||
{
|
||||
out.println("dok_dat_feld[28] = '${ordner}'");
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
d3.log.error("ERROR: createJPLFileForFileArray = " + e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (out != null)
|
||||
{
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
d3.log.info("ENDE createJPLFileForFile");
|
||||
}
|
||||
|
||||
def getContractWithMoreContractDocs(D3Interface d3)
|
||||
{
|
||||
d3.log.info("Start getContractWithMoreContractDocs");
|
||||
|
||||
def lDBUser = "US_DEVELOP_RO"
|
||||
def lDBPasssword = "US_DEVELOP_RO"
|
||||
def lSQLConnection
|
||||
contractMap = new LinkedList<String>();
|
||||
try
|
||||
{
|
||||
String SQLQuery = """select FK_TBL_VERTRAG from DMS.TBL_DOKUMENT where FK_REF_DOKUMENTENTYP = '1002' group by FK_TBL_VERTRAG, FK_REF_DOKUMENTENTYP Having count(*) >1""";
|
||||
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
|
||||
lSQLConnection.eachRow(SQLQuery) { row ->
|
||||
String Vertragsnummer = row.FK_TBL_VERTRAG
|
||||
contractMap.add(Vertragsnummer);
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
d3.log.error("Fehler beim SQL Verbindungsaufbau: " + e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(lSQLConnection != null)
|
||||
{
|
||||
lSQLConnection.close();
|
||||
}
|
||||
}
|
||||
d3.log.info("Ende getContractWithMoreContractDocs");
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to log given message to log file and to console
|
||||
* @param message
|
||||
*/
|
||||
void log(String message) {
|
||||
String messageWithTimestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(System.currentTimeMillis())) + " : ${message}"
|
||||
if(!constanten.logFile.exists()) {
|
||||
// check if directory exists
|
||||
// check if directory "Log" exists
|
||||
File logDir = new File(constanten.logDirPath)
|
||||
if(!logDir.exists() || !logDir.isDirectory()) {
|
||||
// create directory for log files
|
||||
logDir.mkdirs()
|
||||
}
|
||||
|
||||
constanten.logFile.createNewFile()
|
||||
}
|
||||
constanten.logFile.append(messageWithTimestamp + "\n")
|
||||
}
|
||||
|
||||
2
Hermes/CMC/CreateFolder.classpath
Normal file
2
Hermes/CMC/CreateFolder.classpath
Normal file
@@ -0,0 +1,2 @@
|
||||
D:\Temp\libs\json-simple-1.1.1.jar
|
||||
D:\Temp\libs\ojdbc8.jar
|
||||
2332
Hermes/CMC/CreateFolder.groovy
Normal file
2332
Hermes/CMC/CreateFolder.groovy
Normal file
File diff suppressed because one or more lines are too long
353
Hermes/CMC/DeleteTermsContractsCaseManager.groovy
Normal file
353
Hermes/CMC/DeleteTermsContractsCaseManager.groovy
Normal file
@@ -0,0 +1,353 @@
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import com.google.gson.Gson
|
||||
import groovy.json.JsonSlurper
|
||||
import groovy.transform.Field
|
||||
import org.apache.http.HttpEntity
|
||||
import org.apache.http.client.methods.CloseableHttpResponse
|
||||
import org.apache.http.client.methods.HttpDelete
|
||||
import org.apache.http.client.methods.HttpGet
|
||||
import org.apache.http.client.methods.HttpPost
|
||||
import org.apache.http.entity.StringEntity
|
||||
import org.apache.http.impl.client.CloseableHttpClient
|
||||
import org.apache.http.impl.client.HttpClientBuilder
|
||||
import org.apache.http.util.EntityUtils
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
||||
/*
|
||||
* Dieses Skript loescht alle Fristen und Aufgaben fuer einen bestimmten Vertrag aus dem DBS Case Manager Contract.
|
||||
*
|
||||
* Erstellung: 12.2024 d.velop/mtiel
|
||||
* Optimierung: 05.2025
|
||||
*/
|
||||
|
||||
// Start of script
|
||||
D3Interface d3 = getProperty("d3") as D3Interface
|
||||
def scriptName = getClass().getName()
|
||||
d3.log.info("groovyhook - START Script ${scriptName}")
|
||||
|
||||
|
||||
// Konfiguration
|
||||
def batchSize = 100 // Größe der Batches für SQL-Abfrage und Verarbeitung
|
||||
def ddfIntContractNo = 11 // DB-Position der Eigenschaft interne Vertragsnummer
|
||||
|
||||
def onlyTerms = false // Wenn nur die Fristen geloescht werden sollen, dann true setzen
|
||||
def onlyTasks = false // Wenn nur die Aufgaben geloescht werden sollen, dann true setzen
|
||||
|
||||
def logDirectory = new File("E:\\d3work\\LOGS\\LOG_$scriptName") // Bitte hier den Pfad zum Logverzeichnis eintragen
|
||||
|
||||
@Field String baseUri = "https://d3dev.int.hlg.de" // Bitte hier die Basis URL eintragen
|
||||
@Field String apiKey = "OJRD7qrEhuoIzM5Pt6M59qApakhyNrA/8My81PPx0/ULs+IisvBdZC6GnhcGTzKRwf4ndOtcsQmNby8YPa+D+mfUFsJGjkEsqhLX3h0N8sg=&_z_A0V5ayCRMk4iQs2RWKEDd9HrFriKdSm-G67jqTxNwqW1jZf2OP2l5b7LkBOKnISHL4YtCPCOz81OVhQgE0TQsWylfWnv1"
|
||||
// Bitte in der oberen Zeile den API Key fuer den User (wie d3ddecsTaskAPIKey) zum Suchen und Loeschen von Aufgaben eintragen
|
||||
// Ende Konfiguration
|
||||
|
||||
|
||||
def today = new Date()
|
||||
def formattedDate = today.format("yyyyMMdd")
|
||||
|
||||
if (!logDirectory.exists()) {
|
||||
logDirectory.mkdir()
|
||||
}
|
||||
@Field StringBuilder logBuilder = new StringBuilder()
|
||||
def logFile = new File(logDirectory.path + "\\${formattedDate}_${System.currentTimeMillis()}_${scriptName}.txt")
|
||||
logBuilder.append("Info:\t$scriptName - Logfile" + System.getProperty("line.separator"))
|
||||
|
||||
def offset = 0 // Offset für die SQL-Abfrage (zur Batch-Verarbeitung)
|
||||
|
||||
// Schleife zur Verarbeitung der SQL-Abfrage in Batches
|
||||
while (true) {
|
||||
def internalContractNumbers = d3.sql.executeAndGet("""
|
||||
WITH Vertragsnummern AS (
|
||||
SELECT DISTINCT t.object_id AS intContractNo
|
||||
FROM terms_term t
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM firmen_spezifisch f WHERE f.dok_dat_feld_$ddfIntContractNo = t.object_id
|
||||
)
|
||||
UNION ALL
|
||||
SELECT DISTINCT d.internal_contract_number AS intContractNo
|
||||
FROM dbsCase_activity d
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM firmen_spezifisch f WHERE f.dok_dat_feld_$ddfIntContractNo = d.internal_contract_number
|
||||
)
|
||||
)
|
||||
SELECT DISTINCT intContractNo
|
||||
FROM Vertragsnummern
|
||||
ORDER BY intContractNo
|
||||
OFFSET ? ROWS FETCH NEXT ? ROWS ONLY
|
||||
""", [offset, batchSize])
|
||||
|
||||
if (internalContractNumbers?.isEmpty()) {
|
||||
break // Keine weiteren Daten vorhanden, Schleife beenden
|
||||
}
|
||||
|
||||
internalContractNumbers?.each {
|
||||
def internalContractNo = it.intContractNo
|
||||
|
||||
//Loeschen der Fristen fuer die Vertragsnummer
|
||||
if (!onlyTasks) {
|
||||
d3.log.info("groovyhook - Es sollen die Fristen fuer den Vertrag ${internalContractNo} geloescht werden!")
|
||||
logBuilder.append("Info:\tEs sollen die Fristen fuer den Vertrag ${internalContractNo} geloescht werden!" + System.getProperty("line.separator"))
|
||||
|
||||
def termIds = d3.sql.executeAndGet("SELECT DISTINCT id FROM terms_term WHERE object_id = ?", [internalContractNo])
|
||||
|
||||
if (!termIds || termIds.isEmpty()) {
|
||||
d3.log.info("groovyhook - Keine Fristen fuer den Vertrag ${internalContractNo} gefunden.")
|
||||
logBuilder.append("Info:\t\tKeine Fristen fuer den Vertrag ${internalContractNo} gefunden." + System.getProperty("line.separator"))
|
||||
} else {
|
||||
// Tabellen und Abhaengigkeiten
|
||||
def termTables = ["terms_idp_ids" : "Term_id",
|
||||
"terms_term_metadata": "Term_id",
|
||||
"terms_term_rem_esc" : "term_id",
|
||||
"terms_term_callback": "term_id",
|
||||
"terms_term_links" : "Term_id",
|
||||
"terms_term" : "id",
|
||||
"terms_interval" : "id"]
|
||||
|
||||
termIds."id"?.each { id ->
|
||||
termTables.each { table, column ->
|
||||
try {
|
||||
def deleteQuery = "DELETE FROM ${table} WHERE ${column} = ?"
|
||||
if (d3.sql.execute(deleteQuery, [id]) == 1) {
|
||||
d3.log.debug("groovyhook - Eintrag aus Tabelle ${table} mit ID ${id} erfolgreich geloescht.")
|
||||
logBuilder.append("Info:\t\tEintrag aus Tabelle ${table} mit ID ${id} erfolgreich geloescht." + System.getProperty("line.separator"))
|
||||
} else {
|
||||
d3.log.debug("groovyhook - Eintrag aus Tabelle ${table} mit ID ${id} nicht gefunden.")
|
||||
logBuilder.append("Info:\t\tEintrag aus Tabelle ${table} mit ID ${id} nicht gefunden." + System.getProperty("line.separator"))
|
||||
}
|
||||
} catch (D3Exception e) {
|
||||
error = true
|
||||
d3.log.error("groovyhook - Fehler beim Loeschen der Eintraege aus Tabelle ${table} mit ID ${id}: ${e}")
|
||||
logBuilder.append("Error:\t\tFehler beim Loeschen der Eintraege aus Tabelle ${table} mit ID ${id}: ${e}" + System.getProperty("line.separator"))
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
logBuilder.append("\t\t--------------------------------------------------------------------------------" + System.getProperty("line.separator"))
|
||||
}
|
||||
|
||||
|
||||
// Loeschen von Aufgaben fuer die Dokumenten ID
|
||||
if (!onlyTerms) {
|
||||
logBuilder.append("Info\tEs sollen die Aktivitaeten fuer den Vertrag ${internalContractNo} geloescht werden!" + System.getProperty("line.separator"))
|
||||
|
||||
def activityIds = d3.sql.executeAndGet("SELECT DISTINCT id FROM terms_activity WHERE context_id = ?", [internalContractNo])
|
||||
|
||||
if (!activityIds || activityIds.isEmpty()) {
|
||||
d3.log.info("groovyhook - Keine Aktivitaeten fuer den Vertrag ${internalContractNo} gefunden.")
|
||||
logBuilder.append("Info:\t\tKeine Aktivitaeten fuer den Vertrag ${internalContractNo} gefunden." + System.getProperty("line.separator"))
|
||||
}
|
||||
|
||||
def activityTables = ["terms_activity_detail": "activity_id",
|
||||
"terms_activity_data" : "id",
|
||||
"terms_activity" : "id"]
|
||||
|
||||
activityIds."id"?.each { id ->
|
||||
activityTables.each { table, column ->
|
||||
try {
|
||||
def deleteQuery = "DELETE FROM ${table} WHERE ${column} = ?"
|
||||
if (d3.sql.execute(deleteQuery, [id]) == 1) {
|
||||
d3.log.debug("groovyhook - Eintrag aus Tabelle ${table} mit ID ${id} erfolgreich geloescht.")
|
||||
logBuilder.append("Info:\t\tEintrag aus Tabelle ${table} mit ID ${id} erfolgreich geloescht." + System.getProperty("line.separator"))
|
||||
} else {
|
||||
d3.log.debug("groovyhook - Eintrag aus Tabelle ${table} mit ID ${id} nicht gefunden.")
|
||||
logBuilder.append("Info:\t\tEintrag aus Tabelle ${table} mit ID ${id} nicht gefunden." + System.getProperty("line.separator"))
|
||||
}
|
||||
} catch (D3Exception e) {
|
||||
error = true
|
||||
d3.log.error("groovyhook - Fehler beim Loeschen der Eintraege aus Tabelle ${table} mit ID ${id}: ${e}")
|
||||
logBuilder.append("Error:\t\tFehler beim Loeschen der Eintraege aus Tabelle ${table} mit ID ${id}: ${e}" + System.getProperty("line.separator"))
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
logBuilder.append("\t\t--------------------------------------------------------------------------------" + System.getProperty("line.separator"))
|
||||
|
||||
logBuilder.append("Info:\tEs sollen die Aufgaben fuer den Vertrag ${internalContractNo} geloescht werden!" + System.getProperty("line.separator"))
|
||||
|
||||
def caseActivityIds = d3.sql.executeAndGet("SELECT DISTINCT act_id FROM dbsCase_activity WHERE internal_contract_number = ?", [internalContractNo])
|
||||
|
||||
def caseActivityTables = ["dbsCase_activity_recip": "activity_id",
|
||||
"dbsCase_activity_cond" : "act_id",
|
||||
"dbsCase_activity" : "act_id"]
|
||||
|
||||
caseActivityIds."act_id"?.each { id ->
|
||||
caseActivityTables.each { table, column ->
|
||||
try {
|
||||
def deleteQuery = "DELETE FROM ${table} WHERE ${column} = ?"
|
||||
if (d3.sql.execute(deleteQuery, [id]) == 1) {
|
||||
d3.log.debug("groovyhook - Eintrag aus Tabelle ${table} mit ID ${id} erfolgreich geloescht.")
|
||||
logBuilder.append("Info:\t\tEintrag aus Tabelle ${table} mit ID ${id} erfolgreich geloescht." + System.getProperty("line.separator"))
|
||||
} else {
|
||||
if (table == "dbsCase_activity_cond") {
|
||||
d3.log.debug("groovyhook - Es gibt keine Bedingungen für die CMC Aufgabe ${id}.")
|
||||
logBuilder.append("Info:\t\tEs gibt keine Bedingungen für die CMC Aufgabe ${id}." + System.getProperty("line.separator"))
|
||||
} else {
|
||||
d3.log.debug("groovyhook - Eintrag aus Tabelle ${table} mit ID ${id} nicht gefunden.")
|
||||
logBuilder.append("Info:\t\tEintrag aus Tabelle ${table} mit ID ${id} nicht gefunden." + System.getProperty("line.separator"))
|
||||
}
|
||||
}
|
||||
} catch (D3Exception e) {
|
||||
error = true
|
||||
d3.log.error("groovyhook - Fehler beim Loeschen der Eintraege aus Tabelle ${table} mit ID ${id}: ${e}")
|
||||
logBuilder.append("Error:\t\tFehler beim Loeschen der Eintraege aus Tabelle ${table} mit ID ${id}: ${e}" + System.getProperty("line.separator"))
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def sessionApiKey = getAuthSession(d3)
|
||||
|
||||
//Ermitteln der Task ID
|
||||
def uriTaskSearch = "${baseUri}/task/api/tasks/search"
|
||||
|
||||
CloseableHttpClient client = HttpClientBuilder.create().build()
|
||||
|
||||
try {
|
||||
HttpPost post = new HttpPost(uriTaskSearch)
|
||||
|
||||
// JSON Inhalt
|
||||
def body = """{
|
||||
"orderBy": "received",
|
||||
"orderDir": "ASC",
|
||||
"filter": {
|
||||
"metadata": {
|
||||
"key": [
|
||||
"internalCaseNumber"
|
||||
],
|
||||
"values": [
|
||||
"$internalContractNo"
|
||||
]
|
||||
}
|
||||
}
|
||||
}"""
|
||||
StringEntity params = new StringEntity(body, "UTF-8")
|
||||
|
||||
post.addHeader("authorization", "Bearer " + sessionApiKey)
|
||||
post.addHeader("content-type", "application/json")
|
||||
post.setEntity(params)
|
||||
|
||||
CloseableHttpResponse response = client.execute(post)
|
||||
|
||||
try {
|
||||
if (response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201) {
|
||||
def js = new JsonSlurper()
|
||||
def parsedJson = js.parseText(EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8))
|
||||
def taskIds = parsedJson.tasks?.id?.collect { it.toString() }
|
||||
def taskSubjects = parsedJson.tasks?.subject?.collect { it.toString() }
|
||||
if (!taskIds || taskIds.isEmpty()) {
|
||||
d3.log.info("groovyhook - Es gibt keine Aufgaben zum Vertrag ${internalContractNo}")
|
||||
logBuilder.append("Info:\t\tEs gibt keine Aufgaben zum Vertrag ${internalContractNo}" + System.getProperty("line.separator"))
|
||||
} else {
|
||||
for (def taskId : taskIds) {
|
||||
for (def taskSubject : taskSubjects) {
|
||||
d3.log.info("groovyhook - Task ID zum Vertrag ${internalContractNo}: ${taskId}")
|
||||
logBuilder.append("Info:\t\tTask ID zum Vertrag ${internalContractNo}: ${taskId}" + System.getProperty("line.separator"))
|
||||
|
||||
//Loeschen der Aufgabe
|
||||
def uriTaskDelete = "${baseUri}/task/tasks/${taskId}"
|
||||
|
||||
def delete = new HttpDelete(uriTaskDelete)
|
||||
delete.addHeader("authorization", "Bearer " + sessionApiKey)
|
||||
|
||||
response = client.execute(delete)
|
||||
|
||||
try {
|
||||
if (response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201) {
|
||||
d3.log.info("groovyhook - Task $taskSubject zum Vertrag ${internalContractNo} wurde erfoglreich geloescht")
|
||||
logBuilder.append("Info:\t\tTask $taskSubject zum Vertrag ${internalContractNo} wurde erfoglreich geloescht" + System.getProperty("line.separator"))
|
||||
} else if (!(response.getStatusLine().getStatusCode() == 404)) {
|
||||
d3.log.error("groovyhook - Task $taskId zum Vertrag ${internalContractNo} mit Betreff $taskSubject konnte nicht geloescht werden: HTTP ${response.getStatusLine().getStatusCode()}")
|
||||
logBuilder.append("Error:\t\tTask $taskId zum Vertrag ${internalContractNo} mit Betreff $taskSubject konnte nicht geloescht werden: HTTP ${response.getStatusLine().getStatusCode()}" + System.getProperty("line.separator"))
|
||||
}
|
||||
} catch (D3Exception e) {
|
||||
d3.log.error("groovyhook - Fehler beim Ausführen von TaskDelete: ${e}")
|
||||
logBuilder.append("Error:\t\tFehler beim Ausführen von TaskDelete: ${e}" + System.getProperty("line.separator"))
|
||||
}
|
||||
finally {
|
||||
response.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
d3.log.error("groovyhook - Task ID zum Vertrag ${internalContractNo} konnte nicht ermittelt werden: HTTP ${response.getStatusLine().getStatusCode()}")
|
||||
logBuilder.append("Error:\t\tTask ID zum Vertrag ${internalContractNo} konnte nicht ermittelt werden: HTTP ${response.getStatusLine().getStatusCode()}" + System.getProperty("line.separator"))
|
||||
}
|
||||
} finally {
|
||||
response.close()
|
||||
}
|
||||
} catch (D3Exception e) {
|
||||
d3.log.error("groovyhook - Fehler beim Ausführen von TaskSearch: ${e}")
|
||||
logBuilder.append("Error:\t\tFehler beim Ausführen von TaskSearch: ${e}" + System.getProperty("line.separator"))
|
||||
}
|
||||
logBuilder.append("\t\t--------------------------------------------------------------------------------" + System.getProperty("line.separator"))
|
||||
}
|
||||
}
|
||||
|
||||
offset += batchSize // Offset für den nächsten Batch erhöhen
|
||||
}
|
||||
|
||||
d3.log.info("groovyhook - END Script ${scriptName}")
|
||||
logBuilder.append("Info:\tEND Script ${scriptName}" + System.getProperty("line.separator"))
|
||||
|
||||
logFile.write(logBuilder.toString())
|
||||
|
||||
def getAuthSession(D3Interface d3) {
|
||||
|
||||
def lAuthSession = null
|
||||
def lSessionExpire = null
|
||||
|
||||
HashMap<String, String> returnMap = doLogin(d3)
|
||||
|
||||
if (returnMap != null) {
|
||||
lAuthSession = returnMap.get("AuthSessionId")
|
||||
lSessionExpire = returnMap.get("Expire")
|
||||
}
|
||||
|
||||
if (lAuthSession == null || lAuthSession == "") {
|
||||
d3.log.error("groovyhook - Keine AuthSession erhalten!")
|
||||
logBuilder.append("Error:\t\tKeine AuthSession erhalten!" + System.getProperty("line.separator"))
|
||||
|
||||
}
|
||||
|
||||
return lAuthSession
|
||||
}
|
||||
|
||||
def doLogin(D3Interface d3) {
|
||||
HashMap<String, String> returnMap = null
|
||||
def loginStatusCode = 0
|
||||
|
||||
CloseableHttpClient client = HttpClientBuilder.create().build()
|
||||
try {
|
||||
HttpGet loginCall = new HttpGet(baseUri + "/identityprovider/login")
|
||||
loginCall.addHeader("authorization", "Bearer " + apiKey)
|
||||
loginCall.addHeader("origin", baseUri)
|
||||
loginCall.addHeader("accept", "application/json")
|
||||
loginCall.addHeader("charset", "utf-8")
|
||||
|
||||
CloseableHttpResponse loginResponse = client.execute(loginCall)
|
||||
try {
|
||||
loginStatusCode = loginResponse.getStatusLine().getStatusCode()
|
||||
|
||||
if (loginStatusCode == 200 || loginStatusCode == 201) {
|
||||
HttpEntity entity = loginResponse.getEntity()
|
||||
String json = EntityUtils.toString(entity, StandardCharsets.UTF_8)
|
||||
Gson gson = new Gson()
|
||||
returnMap = gson.fromJson(json, HashMap.class)
|
||||
} else {
|
||||
d3.log.error("Error ${loginStatusCode} waehrend des Logins!")
|
||||
logBuilder.append("Error:\t\tError ${loginStatusCode} waehrend des Logins!" + System.getProperty("line.separator"))
|
||||
}
|
||||
} finally {
|
||||
loginResponse.close()
|
||||
}
|
||||
} catch (Exception e) {
|
||||
d3.log.error("groovyhook - Fehler waehrend des Logins: ${e}")
|
||||
logBuilder.append("Error:\t\tFehler waehrend des Logins: ${e}" + System.getProperty("line.separator"))
|
||||
} finally {
|
||||
client.close()
|
||||
}
|
||||
return returnMap
|
||||
}
|
||||
BIN
Kleeberg/.DS_Store
vendored
Normal file
BIN
Kleeberg/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -14,7 +14,7 @@ D3Interface d3 = getProperty("d3");
|
||||
|
||||
// Dieses Skript erwartet eine folgendermaßen definierte Tabelle in der d.3-Repositorydatenbank:
|
||||
|
||||
// create table dv_akten_loesen (id varchar(10), doku_id varchar(12), status varchar(5) );
|
||||
// create table dv_akten_loesen (id varchar(10), doku_id varchar(12), status varchar(15) );
|
||||
|
||||
// In dieser Tabelle wird festgehalten, welche Dokumente bereits bearbeitet wurden, damit sie bei einem erneuten Skript-Lauf nicht erneut bearbeitet werden
|
||||
|
||||
|
||||
@@ -127,6 +127,34 @@ public class D3Hooks
|
||||
//////////////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
// Setzen der Aktennummer bei content-crawler-Ablagen in die Dokumentart Debitorendokumente START
|
||||
// siehe E-Mail von Nils Küthe/d.velop an Hrn. Schlicht/Kleeberg vom 28.05.2024
|
||||
/////////////////////////////////////////
|
||||
|
||||
if ( ( docTypeShort.id == "DDEBD" ) && ( user.id == "dvelop-cra" ) )
|
||||
{
|
||||
d3.log.info( " => Ablage in Debitorendokumente durch den User dvelop-crawler." );
|
||||
d3.log.info( " => Setze Aktennummer = <Mandant-Nr> + 'RE000100' ..." );
|
||||
d3.log.info( " => <Mandant-Nr> = <" + doc.field[ 1 ] + "> ");
|
||||
if ( doc.field[ 1 ] )
|
||||
{
|
||||
doc.field[ 10 ] = doc.field[ 1 ] + "RE000100";
|
||||
d3.log.info( " => <Aktennummer> = <" + doc.field[ 10 ] + "> ");
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.warn( "Die Mandant-Nr. ist leer. Kann daher Aktennummer nicht setzen." );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
// Setzen der Aktennummer bei content-crawler-Ablagen in die Dokumentart Debitorendokumente ENDE
|
||||
/////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
// Allgemeines START
|
||||
/////////////////////////////////////////
|
||||
@@ -1599,7 +1627,7 @@ public class D3Hooks
|
||||
if ( ! doc.field[ 21 ] )
|
||||
{
|
||||
// Es wurde kein Aktenname angegeben
|
||||
sqlQuery = "select dok_dat_feld_21 from firmen_spezifisch where dok_dat_feld_10 = '" + doc.field[10] + "' and kue_dokuart in ( 'ADAUR', 'ABERB', 'ABETR', 'AFIBA', 'AJAAA', 'AKRED', 'ALOJA', 'ALBSA', 'ASTEU' )";
|
||||
sqlQuery = "select dok_dat_feld_21 from firmen_spezifisch where dok_dat_feld_10 = '" + doc.field[10] + "' and kue_dokuart in ( 'ADAUR', 'AAURE', 'ABERB', 'ABETR', 'AFIBA', 'AJAAA', 'AKRED', 'ALOJA', 'ALBSA', 'ASTEU' )";
|
||||
|
||||
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
@@ -2405,7 +2433,6 @@ public class D3Hooks
|
||||
public int hookValidateImportEntry10( D3Interface d3, User user, DocumentType docType, Document doc, String nextcall )
|
||||
{
|
||||
d3.log.info("START | hookValidateImportEntry10 ");
|
||||
|
||||
d3.log.info("ENDE | hookValidateImportEntry10 ");
|
||||
return 0;
|
||||
}
|
||||
@@ -2744,12 +2771,13 @@ public class D3Hooks
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
// Vererben von Berechtigungen auf Hauptakte (Dauerakte, Beratungsakte etc.) auf untergeordnete Akten + Dokumente START
|
||||
// Vererben von Berechtigungen von einer Hauptakte (Dauerakte, Beratungsakte etc.) auf untergeordnete Akten + Dokumente ENDE
|
||||
////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2947,7 +2975,98 @@ public class D3Hooks
|
||||
|
||||
}
|
||||
|
||||
@Entrypoint( entrypoint = "hook_unlink_exit_10" )
|
||||
public int hookUnlinkExit10(D3Interface d3, Document docFather, Document docChild, Integer unlinkErrorCode, Integer errorCode) {
|
||||
d3.log.error("START | hookUnlinkExit10 ");
|
||||
|
||||
////////////////////////////
|
||||
// Löschen von Berechtigungseinträgen bei Dokumenten, wenn diese aus Akten entfernt werden START
|
||||
////////////////////////////
|
||||
|
||||
|
||||
switch ( docChild.getType().id )
|
||||
{
|
||||
case "DBERA":
|
||||
case "DBETR":
|
||||
case "DDAUE":
|
||||
case "DDEBD":
|
||||
case "DFIBU":
|
||||
case "DABSC":
|
||||
case "DLOHN":
|
||||
case "DLSTD":
|
||||
case "DSTEU":
|
||||
def ueberdoks = d3.call.link_get_parents( docChild.id, "Master" );
|
||||
|
||||
def ziel_dok_ids = "";
|
||||
|
||||
ueberdoks.each
|
||||
{
|
||||
xlog( d3, 4, " Kind: " + docChild.id + " Elternelement: " + it );
|
||||
|
||||
ziel_dok_ids = ziel_dok_ids + "'" + it + "',";
|
||||
}
|
||||
ziel_dok_ids = ziel_dok_ids.substring( 0, ziel_dok_ids.length( ) - 1 );
|
||||
|
||||
xlog( d3, 4, "Ziel-Dok_IDs: " + ziel_dok_ids );
|
||||
|
||||
def STATEMENT = "select dok_dat_feld_1, dok_dat_feld_2, dok_dat_feld_10, dok_dat_feld_13, dok_dat_feld_21 from firmen_spezifisch where doku_id in ( " + ziel_dok_ids + " ) ";
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( STATEMENT );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
// Schreiben der Verknüpfungen an das Dokument:
|
||||
|
||||
def currentDoc = d3.archive.getDocument( docChild.id );
|
||||
|
||||
// Die Felder werden vor dem Füllen geleert, damit - für den Fall, dass weniger neue Werte reingeschrieben werden als vorher drin waren - keine
|
||||
// deplazierten Restwerte in den Feldern stehen bleiben. (Könnte man vielleicht auch eleganter lösen.)
|
||||
// Felder leeren:
|
||||
for ( int i = 1 ; i <= Integer.valueOf( d3.config.value( "CUR_60ER_FIELD_NR" ) ); i++ )
|
||||
{
|
||||
currentDoc.field[ 60 ][ i ] = ""; // Mandantennamen
|
||||
currentDoc.field[ 61 ][ i ] = ""; // Mandantennummern
|
||||
currentDoc.field[ 62 ][ i ] = ""; // Mandantengruppennummern
|
||||
currentDoc.field[ 63 ][ i ] = ""; // Aktennamen
|
||||
currentDoc.field[ 64 ][ i ] = ""; // Aktennummern
|
||||
}
|
||||
|
||||
// Jetzt Felder füllen mit den gefundenen Werten:
|
||||
for ( int j = 1 ; j <= resultRows.size(); j++ )
|
||||
{
|
||||
currentDoc.field[ 60 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_2; // Mandantennamen
|
||||
currentDoc.field[ 61 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_1; // Mandantennummern
|
||||
currentDoc.field[ 62 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_13; // Mandantengruppennummern
|
||||
currentDoc.field[ 63 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_21; // Aktennamen
|
||||
currentDoc.field[ 64 ][ j ] = resultRows[ j - 1 ].dok_dat_feld_10; // Aktennummern
|
||||
}
|
||||
|
||||
currentDoc.updateAttributes( "Master" );
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
// Löschen von Berechtigungseinträgen bei Dokumenten, wenn diese aus Akten entfernt werden ENDE
|
||||
////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
d3.log.error("ENDE | hookUnlinkExit10 ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
Optima/.DS_Store
vendored
Normal file
BIN
Optima/.DS_Store
vendored
Normal file
Binary file not shown.
383
Optima/Anlegen Equiment-Aktenstrukturen/anlegen_equipm_akten.groovy
Executable file
383
Optima/Anlegen Equiment-Aktenstrukturen/anlegen_equipm_akten.groovy
Executable file
@@ -0,0 +1,383 @@
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import groovy.transform.Field
|
||||
|
||||
|
||||
|
||||
D3Interface d3 = getProperty( "d3" );
|
||||
|
||||
@Field prg = "anlegen_equipm_akten.groovy";
|
||||
@Field version = "0.1";
|
||||
@Field kunde = "Optima";
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
// debug:
|
||||
// 0 => es finden Änderungen am Datenbestand statt
|
||||
// 1 => es finden keine Änderungen am Datenbestand statt
|
||||
@Field debug = 0;
|
||||
|
||||
|
||||
// Dokumente pro Durchlauf
|
||||
// Gibt an, wie viele Dokumente maximal pro Durchlauf verarbeitet werden
|
||||
@Field dokumente_pro_durchlauf = 1000000;
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
def debugtext;
|
||||
|
||||
switch ( debug )
|
||||
{
|
||||
case 0:
|
||||
debugtext = "ausgeschaltet";
|
||||
break;
|
||||
default:
|
||||
debugtext = "eingeschaltet (keine Aenderungen am Datenbestand)";
|
||||
break;
|
||||
}
|
||||
|
||||
def aktengruppe = ['AG101', 'AG102', 'AG103'];
|
||||
//def aktengruppe = ['Projektorganisation', 'Spezifikation', 'Technik'];
|
||||
|
||||
def ag_sortmap = [ "AG101":"50", "AG102":"60", "AG103":"70" ];
|
||||
def ua_sortmap = [ "AK029":"51", "AK007":"52", "AK008":"53", "AK016":"54", "AK003":"55", "AK024":"61", "AK012":"62", "AK013":"63", "AK028":"64", "AK006":"71", "AK018":"72", "AK015":"73", "AK001":"74", "AK020":"75", "AK023":"76", "AK019":"77" ];
|
||||
|
||||
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
xlog( d3, 4, "* Programm : " + prg );
|
||||
xlog( d3, 4, "* Version : " + version );
|
||||
xlog( d3, 4, "* Kunde : " + kunde );
|
||||
xlog( d3, 4, "* geschrieben von : calb / d.velop AG" );
|
||||
xlog( d3, 4, "* (c) d.velop AG " );
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
|
||||
xlog( d3, 4, "Parameter: " );
|
||||
xlog( d3, 4, "* Debug : " + debugtext );
|
||||
xlog( d3, 4, "* Dokumente pro Durchlauf : " + dokumente_pro_durchlauf );
|
||||
|
||||
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
|
||||
def sqlQuery = "select top " + dokumente_pro_durchlauf + " doku_id, dok_dat_feld_9 from firmen_spezifisch where kue_dokuart = 'AEQUI'";
|
||||
|
||||
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
|
||||
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
|
||||
def i = 0;
|
||||
def allesgut = true;
|
||||
|
||||
|
||||
for ( i = 0; i < resultRows.size(); i++ )
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Equipmentakte Doku-ID " + resultRows[ i ].doku_id + " / E-Nr. " + resultRows[ i ].dok_dat_feld_9 );
|
||||
xlog( d3, 4, "*************************************" );
|
||||
// Lade Equipment:
|
||||
|
||||
def eq_akte = d3.archive.getDocument( resultRows[ i ].doku_id );
|
||||
|
||||
// Lege die Aktengruppe-Akten an:
|
||||
|
||||
def doku_id_eq;
|
||||
|
||||
aktengruppe.each
|
||||
{
|
||||
//xlog( d3, 3, "Nr. " + (i+1) + ": Aktengruppe. " + it );
|
||||
|
||||
// Prüfen, ob diee Aktengruppe bereits für dieses Equipment existiert
|
||||
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": pruefe: Equpmentaktegruppe | DDF16 = " + it + " | DDF9 = " + eq_akte.field[ 9 ] );
|
||||
|
||||
def STATEMENT_1 = "select doku_id from firmen_spezifisch where kue_dokuart = 'AEQE1' and dok_dat_feld_9 = '" + eq_akte.field[ 9 ] + "' and dok_dat_feld_16 = '" + it + "'";
|
||||
|
||||
xlog( d3, 5, "Nr. " + (i+1) + ": " + STATEMENT_1 );
|
||||
|
||||
def ergebnis_1 = d3.sql.executeAndGet( STATEMENT_1 );
|
||||
|
||||
if ( ergebnis_1.size() == 0 )
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Equipmentaktengruppe. " + it + " existiert nicht. Lege Aktengruppe an ..." )
|
||||
Document neue_akte = d3.archive.newDocument();
|
||||
|
||||
neue_akte.type = "AEQE1";
|
||||
neue_akte.status = Document.DocStatus.DOC_STAT_RELEASE;
|
||||
//neue_akte.editor = "d3tadm";
|
||||
|
||||
neue_akte.field[ 9 ] = eq_akte.field[ 9 ]; // Equipmentnummer
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Equipmentnummer : " + neue_akte.field[ 9 ] );
|
||||
neue_akte.field[ 22 ] = eq_akte.field[ 22 ]; // Kundennummer
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Kundennummer : " + neue_akte.field[ 22 ] );
|
||||
neue_akte.field[ 36 ] = eq_akte.field[ 36 ]; // Linie
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Linie : " + neue_akte.field[ 36 ] );
|
||||
neue_akte.field[ 12 ] = eq_akte.field[ 12 ]; // Netzplan_Nr
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Netzplan_Nr : " + neue_akte.field[ 12 ] );
|
||||
neue_akte.field[ 19 ] = eq_akte.field[ 19 ]; // Projekt-Nr
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Projekt-Nr : " + neue_akte.field[ 19 ] );
|
||||
neue_akte.field[ 2 ] = eq_akte.field[ 2 ]; // PSP-Element
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": PSP-Element : " + neue_akte.field[ 2 ] );
|
||||
neue_akte.field[ 1 ] = eq_akte.field[ 1 ]; // SAP-Status
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": SAP-Status : " + neue_akte.field[ 1 ] );
|
||||
neue_akte.field[ 40 ] = eq_akte.field[ 40 ]; // Beschreibung
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Beschreibung : " + neue_akte.field[ 40 ] );
|
||||
neue_akte.field[ 28 ] = eq_akte.field[ 28 ]; // Buchungskreis
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Buchungskreis : " + neue_akte.field[ 28 ] );
|
||||
neue_akte.field[ 35 ] = eq_akte.field[ 35 ]; // Equipmenttyp
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Equipmenttyp : " + neue_akte.field[ 35 ] );
|
||||
neue_akte.field[ 23 ] = eq_akte.field[ 23 ]; // Kunden_Name
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Kunden_Name : " + neue_akte.field[ 23 ] );
|
||||
neue_akte.field[ 37 ] = eq_akte.field[ 37 ]; // Submission
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Submission : " + neue_akte.field[ 37 ] );
|
||||
neue_akte.field[ 3 ] = eq_akte.field[ 3 ]; // Prozess
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Prozess : " + neue_akte.field[ 3 ] );
|
||||
neue_akte.field[ 16 ] = it; // Aktengruppe
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Aktengruppe : " + it );
|
||||
neue_akte.field[ 30 ] = ag_sortmap[ it ] ; // Sortierreihenfolge
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Sortierreihenfolge : " + neue_akte.field[ 30 ] );
|
||||
|
||||
|
||||
//xlog( d3, 4, "Nr. " + (i+1) + ": Setze Mehrfachfelder Regionalorganisation und Intercompany ..." );
|
||||
|
||||
for ( int j = 1; j <= Integer.valueOf( d3.config.value( "CUR_60er_FIELD_NR" ) ); j++ )
|
||||
{
|
||||
neue_akte.field[ 68 ][ j ] = eq_akte.field[ 68 ][ j ]; // Intercompany
|
||||
neue_akte.field[ 67 ][ j ] = eq_akte.field[ 67 ][ j ]; // Regionalorganisation
|
||||
}
|
||||
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Setze Mehrfachfelder Regionalorganisation und Intercompany => fertig." );
|
||||
|
||||
allesgut = true;
|
||||
|
||||
try
|
||||
{
|
||||
if ( debug == 0 )
|
||||
{
|
||||
neue_akte = d3.archive.importDocument( neue_akte );
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Aktengruppe. " + it + " angelegt mit Doku-ID " + neue_akte.id() );
|
||||
doku_id_eq = neue_akte.id();
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 3, "Nr. " + (i+1) + ": keine Aktenanlage, da DEBUG-Modus eingeschaltet. " );
|
||||
}
|
||||
}
|
||||
catch ( D3Exception e )
|
||||
{
|
||||
xlog( d3, 2, "Nr. " + (i+1) + ": Akte konnte nicht angelegt werden: " + e.message )
|
||||
allesgut = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 3, "Nr. " + (i+1) + ": Aktengruppe " + it + " existiert mit Doku-ID " + ergebnis_1[ 0 ].doku_id + ". Keine Aktion erforderlich." )
|
||||
doku_id_eq = ergebnis_1[ 0 ].doku_id;
|
||||
}
|
||||
|
||||
if ( allesgut )
|
||||
{
|
||||
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Doku_id Equipmentaktengruppe: " + doku_id_eq );
|
||||
xlog( d3, 4, "*************************************" );
|
||||
// Lege nun die Unterakten an:
|
||||
|
||||
// Feststellen, welche Unterakten angelegt werden müssen:
|
||||
def STATEMENT_2 = "select dok_dat_feld_26 from firmen_spezifisch where kue_dokuart = 'aafol' and dok_dat_feld_45 = 'DEQUI' and dok_dat_feld_48 = '" + it + "' ";
|
||||
|
||||
def ergebnis_2 = d3.sql.executeAndGet( STATEMENT_2 );
|
||||
|
||||
if ( ergebnis_2.size() > 0 )
|
||||
{
|
||||
for ( int m = 0; m < ergebnis_2.size(); m++ )
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": pruefe: Equpmentunterakte | DDF16 = " + it + " | DDF9 = " + eq_akte.field[ 9 ] + " | DDF48 = " + ergebnis_2[ m ].dok_dat_feld_26 );
|
||||
|
||||
// Feststellen, ob die Unterakte bereits existiert
|
||||
|
||||
def STATEMENT_3 = " select doku_id from firmen_spezifisch where kue_dokuart = 'AEQE2' and dok_dat_feld_16 = '" + it + "' and dok_dat_feld_9 = '" + eq_akte.field[ 9 ] + "' and dok_dat_feld_48 = '" + ergebnis_2[ m ].dok_dat_feld_26 + "'";
|
||||
xlog( d3, 5, "Nr. " + (i+1) + ": Statement zum Test ob Unterakte existiert: " + STATEMENT_3 );
|
||||
|
||||
def ergebnis_3 = d3.sql.executeAndGet( STATEMENT_3 );
|
||||
|
||||
if ( ergebnis_3.size() == 0 )
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Equipmentunterakte " + it + " / " + ergebnis_2[ m ].dok_dat_feld_26 + " existiert nicht. Lege Equipmentunterakte an ..." )
|
||||
Document eua = d3.archive.newDocument();
|
||||
|
||||
eua.type = "AEQE2";
|
||||
//eua.status = Document.DocStatus.DOC_STAT_PROCESSING;
|
||||
eua.status = Document.DocStatus.DOC_STAT_RELEASE;
|
||||
//eua.editor = "d3tadm";
|
||||
|
||||
eua.field[ 9 ] = eq_akte.field[ 9 ]; // Equipmentnummer
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Equipmentnummer : " + eq_akte.field[ 9 ] );
|
||||
eua.field[ 16 ] = it; // Aktengruppe
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Aktengruppe : " + it );
|
||||
eua.field[ 48 ] = ergebnis_2[ m ].dok_dat_feld_26; // Akte
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Akte : " + ergebnis_2[ m ].dok_dat_feld_26 );
|
||||
eua.field[ 30 ] = ua_sortmap[ ergebnis_2[ m ].dok_dat_feld_26 ] ; // Sortierreihenfolge
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Sortierreihenfolge: " + eua.field[ 30 ] );
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
if ( debug == 0 )
|
||||
{
|
||||
eua = d3.archive.importDocument( eua );
|
||||
xlog( d3, 4, "Nr. " + (i+1) + ": Equipmentunterakte " + eua.field[ 16 ] + " / Akte " + eua.field[ 48 ] + " angelegt mit Doku-ID " + eua.id() );
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 3, "Nr. " + (i+1) + ": keine Aktenanlage, da DEBUG-Modus eingeschaltet. " );
|
||||
}
|
||||
}
|
||||
catch ( D3Exception e )
|
||||
{
|
||||
xlog( d3, 2, "Nr. " + (i+1) + ": Equipmentunterakte konnte nicht angelegt werden: " + e.message )
|
||||
}
|
||||
|
||||
xlog( d3, 4, "***************************" );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 3, "Nr. " + (i+1) + ": Kombination existiert bereits mit Doku-ID " + ergebnis_3[ 0 ].doku_id );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 2, "Nr. " + (i+1) + ": keine Unterakten fuer " + it + " gefunden." );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
xlog( d3, 4, "*************************************" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
xlog( d3, 4, "*************************************************" );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
def xlog( D3Interface d3, int loglevel, String logtext )
|
||||
{
|
||||
def logdatei = "d:\\d3\\logs\\" + prg + ".txt";
|
||||
def g_loglevel = 4;
|
||||
def g_logdirect = "BEIDE";
|
||||
|
||||
def date = new Date();
|
||||
def zeitstempel = date.format( "yyyy.MM.dd HH:mm:ss", TimeZone.getTimeZone('CET') );
|
||||
def loglevel_lang = "[INFO ]";
|
||||
|
||||
|
||||
|
||||
if ( loglevel <= g_loglevel )
|
||||
{
|
||||
switch ( loglevel )
|
||||
{
|
||||
case 1:
|
||||
loglevel_lang = "[FATAL]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.critical( logtext );
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
loglevel_lang = "[ERROR]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.error( logtext );
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
loglevel_lang = "[WARN ]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.warn( logtext );
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
loglevel_lang = "[INFO ]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.info( logtext );
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
loglevel_lang = "[DEBUG]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.debug( logtext );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ( ( g_logdirect == "DATEI" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
new File( logdatei ).append( zeitstempel + " " + loglevel_lang + " " + logtext + "\n", "UTF8" );
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
32453
Optima/Anlegen Equiment-Aktenstrukturen/anlegen_equipm_akten.groovy.txt
Executable file
32453
Optima/Anlegen Equiment-Aktenstrukturen/anlegen_equipm_akten.groovy.txt
Executable file
File diff suppressed because it is too large
Load Diff
8
Optima/Anlegen Equiment-Aktenstrukturen/readme.txt
Normal file
8
Optima/Anlegen Equiment-Aktenstrukturen/readme.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Anlegen von Aktenstrukturen
|
||||
|
||||
In der Equipmentakte gibt es aktuell die Struktur
|
||||
|
||||
Equipmentakte
|
||||
=> Equipmentdokument
|
||||
|
||||
Hier sollen zwei weitere Zwischenebenen eingezogen werden. Dies erledigt dieses Skript.
|
||||
@@ -0,0 +1 @@
|
||||
Dieses Skript soll Dokumenteigenschaften basierend auf einer CSV-Datei ändern. Durch die Änderung wird das Dokument dann auch im Aktenplan umgehangen, aber das ist nicht Thema des Skripts.
|
||||
@@ -0,0 +1,273 @@
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import groovy.transform.Field
|
||||
|
||||
|
||||
|
||||
D3Interface d3 = getProperty( "d3" );
|
||||
|
||||
@Field prg = "verkn_equipm_dokumente.groovy";
|
||||
@Field version = "0.1";
|
||||
@Field kunde = "Optima";
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
// debug:
|
||||
// 0 => es finden Änderungen am Datenbestand statt
|
||||
// 1 => es finden keine Änderungen am Datenbestand statt
|
||||
@Field debug = 0;
|
||||
|
||||
|
||||
// Dokumente pro Durchlauf
|
||||
// Gibt an, wie viele Dokumente maximal pro Durchlauf verarbeitet werden
|
||||
@Field dokumente_pro_durchlauf = 10;
|
||||
|
||||
// CSV-Datei, enthält die Zuordnungen von Dokumentgruppe zu Akte
|
||||
// Wird erwartet ohne Spaltenüberschriften. Sollte aber auch kein Problem sein, wenn welche drin wären.
|
||||
@Field CSV_FILE = "D:\\d3\\d3server.prg\\ext_groovy\\mapping_equipm_dokumente.csv"
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
def debugtext;
|
||||
|
||||
switch ( debug )
|
||||
{
|
||||
case 0:
|
||||
debugtext = "ausgeschaltet";
|
||||
break;
|
||||
default:
|
||||
debugtext = "eingeschaltet (keine Aenderungen am Datenbestand)";
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
xlog( d3, 4, "* Programm : " + prg );
|
||||
xlog( d3, 4, "* Version : " + version );
|
||||
xlog( d3, 4, "* Kunde : " + kunde );
|
||||
xlog( d3, 4, "* geschrieben von : calb / d.velop AG" );
|
||||
xlog( d3, 4, "* (c) d.velop AG " );
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
|
||||
xlog( d3, 4, "Parameter: " );
|
||||
xlog( d3, 4, "* Debug : " + debugtext );
|
||||
xlog( d3, 4, "* Dokumente pro Durchlauf : " + dokumente_pro_durchlauf );
|
||||
xlog( d3, 4, "* CSV-Datei : " + CSV_FILE );
|
||||
|
||||
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
|
||||
xlog( d3, 4, "* Lese CSV-Datei: " );
|
||||
|
||||
def csvanzahl = 0; // Wie viele Zeilen sind in der CSV-Datei enthalten
|
||||
def csvdatei = new File( CSV_FILE );
|
||||
def csvzeilen = csvdatei.readLines().collect{ it.split( ";" ) };
|
||||
csvzeilen.each{ csvanzahl++; xlog( d3, 5, "* Zeile " + csvanzahl + ": " + it ); }
|
||||
|
||||
xlog( d3, 4, "* " + csvanzahl + " Zeilen gelesen." )
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def sqlQuery = "select top " + dokumente_pro_durchlauf + " doku_id, dok_dat_feld_9, dok_dat_feld_21 from firmen_spezifisch where kue_dokuart = 'DEQUI' and dok_dat_feld_48 is null";
|
||||
|
||||
resultRows = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
xlog( d3, 4, " Es wurden " + resultRows.size() + " Treffer gefunden." );
|
||||
xlog( d3, 4, "********************************************************" );
|
||||
|
||||
def i = 0;
|
||||
def allesgut = true;
|
||||
def allesgut_2 = true;
|
||||
|
||||
for ( i = 0; i < resultRows.size(); i++ )
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + (i+1) + "/" + resultRows[ i ].doku_id + ": Equipmentdokument Doku-ID " + resultRows[ i ].doku_id + " / E-Nr. " + resultRows[ i ].dok_dat_feld_9 + " / Dokumentgruppe " + resultRows[ i ].dok_dat_feld_21 );
|
||||
|
||||
|
||||
// Lade das Dokument
|
||||
|
||||
equidok = d3.archive.getDocument( resultRows[ i ].doku_id );
|
||||
def gefunden = false;
|
||||
|
||||
// DDF21 => Dokumentgruppe
|
||||
// DDF48 => Akte
|
||||
|
||||
|
||||
|
||||
// Suche in den CSV-Daten:
|
||||
csvzeilen.each
|
||||
{
|
||||
if ( it[ 0 ] == equidok.field[ 21 ] )
|
||||
{
|
||||
gefunden = true;
|
||||
// Setze Akte:
|
||||
xlog( d3, 4, "Nr. " + (i+1) + "/" + resultRows[ i ].doku_id + ": setze Akte " + it[ 2 ] + " bei Dokument " + resultRows[ i ].doku_id );
|
||||
equidok.field[ 48 ] = it[ 2 ];
|
||||
|
||||
// Wenn neue Dokumentgruppe verschieden ist von alter Dokumentgruppe, dann ändere Dokumentgruppe:
|
||||
if ( it[ 0 ] != it[ 1 ] )
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + (i+1) + "/" + resultRows[ i ].doku_id + ": Dokumentgruppe bei Dokument " + resultRows[ i ].doku_id + " wird gesetzt (alt/neu) " + equidok.field[ 21 ] + " / " + it[ 1 ] );
|
||||
equidok.field[ 21 ] = it[ 1 ];
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( gefunden == true )
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( debug == 0 )
|
||||
{
|
||||
equidok.updateAttributes("Master");
|
||||
xlog( d3, 4, "Nr. " + (i+1) + "/" + resultRows[ i ].doku_id + ": Dokument " + equidok.id() + " wurde aktualisiert.");
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 4, "Nr. " + (i+1) + "/" + resultRows[ i ].doku_id + ": keine Dokumentaktualisierung, da DEBUG-Modus eingeschaltet." );
|
||||
}
|
||||
}
|
||||
catch ( D3Exception e )
|
||||
{
|
||||
xlog( d3, 2, "Nr. " + (i+1) + "/" + resultRows[ i ].doku_id + ": Equipmentdokument konnte nicht aktualisiert werden: " + e.message )
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 3, "Nr. " + (i+1) + "/" + resultRows[ i ].doku_id + ": Dokumentgruppe " + equidok.field[ 21 ] + " wurde nicht in der CSV-Datei gefunden.");
|
||||
}
|
||||
|
||||
xlog( d3, 4, "*************************************" );
|
||||
}
|
||||
|
||||
xlog( d3, 4, "*************************************************" );
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
xlog( d3, 4, "* Es wurden keine Dokumente zur Bearbeitung gefunden." );
|
||||
xlog( d3, 4, "*************************************" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
def xlog( D3Interface d3, int loglevel, String logtext )
|
||||
{
|
||||
def logdatei = "d:\\d3\\logs\\" + prg + ".txt";
|
||||
def g_loglevel = 5;
|
||||
def g_logdirect = "BEIDE";
|
||||
|
||||
def date = new Date();
|
||||
def zeitstempel = date.format( "yyyy.MM.dd HH:mm:ss", TimeZone.getTimeZone('CET') );
|
||||
def loglevel_lang = "[INFO ]";
|
||||
|
||||
|
||||
|
||||
if ( loglevel <= g_loglevel )
|
||||
{
|
||||
switch ( loglevel )
|
||||
{
|
||||
case 1:
|
||||
loglevel_lang = "[FATAL]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.critical( logtext );
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
loglevel_lang = "[ERROR]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.error( logtext );
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
loglevel_lang = "[WARN ]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.warn( logtext );
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
loglevel_lang = "[INFO ]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.info( logtext );
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
loglevel_lang = "[DEBUG]";
|
||||
if ( ( g_logdirect == "D3LOG" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
d3.log.debug( logtext );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ( ( g_logdirect == "DATEI" ) || ( g_logdirect == "BEIDE" ) )
|
||||
{
|
||||
new File( logdatei ).append( zeitstempel + " " + loglevel_lang + " " + logtext + "\n", "UTF8" );
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
2024.12.05 12:04:34 [INFO ] ********************************************************
|
||||
2024.12.05 12:04:34 [INFO ] * Programm : verkn_equipm_dokumente.groovy
|
||||
2024.12.05 12:04:34 [INFO ] * Version : 0.1
|
||||
2024.12.05 12:04:34 [INFO ] * Kunde : Optima
|
||||
2024.12.05 12:04:34 [INFO ] * geschrieben von : calb / d.velop AG
|
||||
2024.12.05 12:04:34 [INFO ] * (c) d.velop AG
|
||||
2024.12.05 12:04:34 [INFO ] ********************************************************
|
||||
2024.12.05 12:04:34 [INFO ] Parameter:
|
||||
2024.12.05 12:04:34 [INFO ] * Debug : ausgeschaltet
|
||||
2024.12.05 12:04:34 [INFO ] * Dokumente pro Durchlauf : 10
|
||||
2024.12.05 12:04:34 [INFO ] * CSV-Datei : D:\d3\d3server.prg\ext_groovy\mapping_equipm_dokumente.csv
|
||||
2024.12.05 12:04:34 [INFO ] ********************************************************
|
||||
2024.12.05 12:04:34 [INFO ] * Lese CSV-Datei:
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 1: [DG131, DG131, AK029, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 2: [DG088, DG088, AK007, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 3: [DG133, DG133, AK007, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 4: [DG089, DG089, AK007, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 5: [DG090, DG090, AK007, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 6: [DG091, DG091, AK007, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 7: [DG092, DG092, AK007, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 8: [DG093, DG093, AK007, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 9: [DG015, DG015, AK008, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 10: [DG019, DG019, AK008, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 11: [DG096, DG096, AK008, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 12: [DG116, DG116, AK008, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 13: [DG080, DG080, AK016, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 14: [DG081, DG081, AK016, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 15: [DG106, DG106, AK003, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 16: [DG035, DG035, AK003, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 17: [DG043, DG043, AK003, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 18: [DG104, DG104, AK003, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 19: [DG122, DG122, AK024, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 20: [DG054, DG054, AK012, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 21: [DG055, DG055, AK012, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 22: [DG059, DG059, AK013, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 23: [DG025, DG025, AK028, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 24: [DG129, DG129, AK028, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 25: [DG006, DG006, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 26: [DG013, DG013, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 27: [DG021, DG021, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 28: [DG037, DG037, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 29: [DG160, DG160, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 30: [DG051, DG051, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 31: [DG197, DG105, AK006, x]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 32: [DG110, DG110, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 33: [DG117, DG117, AK006, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 34: [DG024, DG024, AK018, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 35: [DG075, DG075, AK018, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 36: [DG086, DG086, AK018, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 37: [DG001, DG001, AK015, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 38: [DG002, DG002, AK015, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 39: [DG038, DG038, AK015, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 40: [DG072, DG072, AK015, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 41: [DG073, DG073, AK015, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 42: [DG027, DG027, AK001, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 43: [DG028, DG028, AK001, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 44: [DG029, DG029, AK001, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 45: [DG042, DG042, AK020, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 46: [DG111, DG111, AK020, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 47: [DG112, DG112, AK020, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 48: [DG121, DG121, AK020, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 49: [DG192, DG016, AK023, x]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 50: [DG195, DG016, AK023, x]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 51: [DG188, DG018, AK023, x]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 52: [DG189, DG033, AK023, x]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 53: [DG076, DG076, AK023, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 54: [DG099, DG099, AK023, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 55: [DG107, DG107, AK023, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 56: [DG109, DG109, AK023, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 57: [DG113, DG113, AK023, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 58: [DG020, DG020, AK019, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 59: [DG045, DG045, AK019, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 60: [DG083, DG083, AK019, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 61: [DG100, DG100, AK019, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 62: [DG162, DG162, AK019, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 63: [DG199, DG199, AK019, ]
|
||||
2024.12.05 12:04:34 [DEBUG] * Zeile 64: [DG198, DG198, AK019, ]
|
||||
2024.12.05 12:04:34 [INFO ] * 64 Zeilen gelesen.
|
||||
2024.12.05 12:04:34 [INFO ] ********************************************************
|
||||
2024.12.05 12:04:34 [INFO ] Es wurden 10 Treffer gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] ********************************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 1/T000327409: Equipmentdokument Doku-ID T000327409 / E-Nr. 26239321202 / Dokumentgruppe DG187
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 1/T000327409: Dokumentgruppe DG187 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 2/T000327413: Equipmentdokument Doku-ID T000327413 / E-Nr. 26239321202 / Dokumentgruppe DG191
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 2/T000327413: Dokumentgruppe DG191 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 3/T000498917: Equipmentdokument Doku-ID T000498917 / E-Nr. SFV0140000 / Dokumentgruppe DG192
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 3/T000498917: setze Akte AK023 bei Dokument T000498917
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 3/T000498917: Dokumentgruppe bei Dokument T000498917 wird gesetzt (alt/neu) DG192 / DG016
|
||||
2024.12.05 12:04:34 [ERROR] Nr. 3/T000498917: Equipmentdokument konnte nicht aktualisiert werden: Error <-170> on updating attributes for document <T000498917>
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 4/T000498919: Equipmentdokument Doku-ID T000498919 / E-Nr. SFV0140000 / Dokumentgruppe DG190
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 4/T000498919: Dokumentgruppe DG190 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 5/T000498920: Equipmentdokument Doku-ID T000498920 / E-Nr. 26308571101 / Dokumentgruppe DG187
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 5/T000498920: Dokumentgruppe DG187 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 6/T000498968: Equipmentdokument Doku-ID T000498968 / E-Nr. SFV0140004 / Dokumentgruppe DG192
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 6/T000498968: setze Akte AK023 bei Dokument T000498968
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 6/T000498968: Dokumentgruppe bei Dokument T000498968 wird gesetzt (alt/neu) DG192 / DG016
|
||||
2024.12.05 12:04:34 [ERROR] Nr. 6/T000498968: Equipmentdokument konnte nicht aktualisiert werden: Error <-170> on updating attributes for document <T000498968>
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 7/T000498970: Equipmentdokument Doku-ID T000498970 / E-Nr. 26308571102 / Dokumentgruppe DG187
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 7/T000498970: Dokumentgruppe DG187 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 8/T000498973: Equipmentdokument Doku-ID T000498973 / E-Nr. 26308571102 / Dokumentgruppe DG185
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 8/T000498973: Dokumentgruppe DG185 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 9/T000498974: Equipmentdokument Doku-ID T000498974 / E-Nr. KUG014690 / Dokumentgruppe DG187
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 9/T000498974: Dokumentgruppe DG187 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] Nr. 10/T000498975: Equipmentdokument Doku-ID T000498975 / E-Nr. KUG014690 / Dokumentgruppe DG185
|
||||
2024.12.05 12:04:34 [WARN ] Nr. 10/T000498975: Dokumentgruppe DG185 wurde nicht in der CSV-Datei gefunden.
|
||||
2024.12.05 12:04:34 [INFO ] *************************************
|
||||
2024.12.05 12:04:34 [INFO ] *************************************************
|
||||
456
Optima/_Groovy/Const.groovy
Normal file
456
Optima/_Groovy/Const.groovy
Normal file
@@ -0,0 +1,456 @@
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
// Const.groovy
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Groovy Definitionsdatei für alle benötigten Dokument- und Aktenarten,
|
||||
// sowie DokDatfelder und RepositoryIDs
|
||||
//
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
public class Const {
|
||||
|
||||
// Dokumentarten
|
||||
// --- Teilprojektübergreifend ---
|
||||
static final String gDTS_DKUKO = "DKUKO"; //Kundenkontaktdokumente
|
||||
static final String gDTS_DLIKO = "DLIKO"; //Lieferantenkontaktdokument
|
||||
static final String gDTS_DKOMM = "DKOMM"; //Email Kommunikation
|
||||
static final String gDTS_DPRST = "DPRST"; //Projektsteuerungsdokumente (01 Projektorganisationsdokumente)
|
||||
static final String gDTS_SAPDO = "SAPDO"; //SAP-Dokumente für die Migr
|
||||
static final String gDTS_DVORL = "DVORL"; //90 Vorlagen
|
||||
static final String gDTS_DUMMY = "Dummy"; //globale Suche
|
||||
static final String gDTS_DALTD = "DALTD" //Altdokumente
|
||||
// --- Organisationsprojekt ---
|
||||
static final String gDTS_DPROO = "dproo"; //Organisationsprojektdokume
|
||||
// --- Opportunity ---
|
||||
static final String gDTS_DOPPD = "DOPPD"; //Angebotsdokumente
|
||||
static final String gDTS_DVERD = "DVERD"; //Vertragrelevante Dokumente
|
||||
// --- Bauakte ---
|
||||
static final String gDTS_DBAUD = "DBAUD"; //Baudokumente
|
||||
static final String gDTS_DABAU = "DABAU"; //abhängige Baudokumente
|
||||
static final String gDTS_DBAAU = "DBAAU"; //Baudokumente Ausführung
|
||||
static final String gDTS_DBAAS = "DBAAS"; //Baudokumente Ausschreibung
|
||||
static final String gDTS_DBABE = "DBABE"; //Baudokumente Besprechungen
|
||||
static final String gDTS_DBAGE = "DBAGE"; //Baudokumente Genehmigung
|
||||
// --- Schulungsdokumente ---
|
||||
static final String gDTS_DSCHU = "DSCHU"; //Schulungsdokumente
|
||||
static final String gDTS_DREGE = "DREGE"; //Regelberichte
|
||||
// --- Regelberichte ---
|
||||
static final String gDTS_DAREG = "DAREG"; //Anhänge zu Regelberichten
|
||||
// --- Marktforschungsdokumente ---
|
||||
static final String gDTS_DMARK = "DMARK"; //Marktbeobachtungsdokumente
|
||||
static final String gDTS_AMARK = "AMARK" //01.02.02 Marktforschungsprojekte
|
||||
// --- Maschinenprojekt ---
|
||||
static final String gDTS_DVERT = "DVERT"; // Vertragsdokumente
|
||||
static final String gDTS_DMDOK = "DMDOK"; //Technikdokumente
|
||||
static final String gDTS_DMAUF = "DMAUF"; //Vertriebsdokumente
|
||||
static final String gDTS_DMSPE = "DMSPE"; //Spezifikationsdokumente
|
||||
static final String gDTS_DMECR = "DMECR"; //ECR-Dokumente
|
||||
static final String gDTS_DMEOP = "DMEOP"; //Ergebnisdokumente Opportunity (in Maschinenprojekt)
|
||||
// --- Wissensmanagement ---
|
||||
static final String gDTS_DWISS = "DWISS"; //Wissensdokumente
|
||||
static final String gDTS_AWISS = "AWISS"; //Wissensarchiv
|
||||
// --- Hauptvorgaenge
|
||||
static final String gDTS_DOSSI = "DOSSI"; //Dossier
|
||||
static final String gDTS_ATEIL = "ATEIL"; //Teilvorgangsakte
|
||||
static final String gDTS_AHAUP = "AHAUP"; //Hauptvorgangsakte
|
||||
|
||||
// --- Lieferantenmanagement
|
||||
static final String gDTS_DLIMA = "DLIMA" //Lieferantendokumente
|
||||
static final String gDTS_DLONT = "DLONT" //Lieferantenkontakt_Neu (Lieferantenmanagement)
|
||||
|
||||
// --- Kundenmanagement
|
||||
static final String gDTS_DKUMA = "DKUMA" //Kundendokumente (Kundenmanagement)
|
||||
static final String gDTS_DERZD = "DERZD" //Erzeugnisdokumente
|
||||
|
||||
// --- Einkauf
|
||||
static final String gDTS_DEINK = "DEINK" //Einkausbelegdokument
|
||||
|
||||
// --- Material
|
||||
static final String gDTS_DMATE = "DMATE" //Materialdokumente
|
||||
|
||||
|
||||
// Aktenarten
|
||||
// --- Teilprojektübergreifend ---
|
||||
static final String gDTS_APROA = "aproa"; //Prozess
|
||||
static final String gDTS_APROZ = "aproz"; //Prozessart
|
||||
static final String gDTS_APROG = "aprog"; //Prozessgruppe
|
||||
static final String gDTS_AAFOL = "aafol"; //administrative folder
|
||||
static final String gDTS_AZTXT = "AZTXT"; //administrative translation
|
||||
static final String gDTS_AADOM = "AADOM"; //administrative domains
|
||||
static final String gDTS_ALIEF = "ALIEF"; //Lieferantenakte
|
||||
static final String gDTS_AKONT = "AKONT"; //Kundenkontakt
|
||||
static final String gDTS_AKUND = "AKUND"; //Kundenakte
|
||||
static final String gDTS_AKUKO = "AKUKO"; //Kundenaktivität
|
||||
static final String gDTS_ALIEK = "ALIEK"; //Projektbeschaffung
|
||||
static final String gDTS_ALIKO = "ALIKO"; //Lieferantenkontakt oder Projektlieferant
|
||||
static final String gDTS_AKONA = "AKONA"; //Kontaktakte OP
|
||||
static final String gDTS_APROR = "APROR"; //Projektorganisation
|
||||
static final String gDTS_AABWL = "AABWL"; //Ablage Whitelist
|
||||
static final String gDTS_AUNMA = "AUNMA"; //Unterakte Marktforschungsprojekte
|
||||
static final String gDTS_AGLAK = "AGLAK"; // GL-Akte
|
||||
static final String gDTS_DLOEH = "DLOEH"; //Notizdokumente
|
||||
// --- Organisationsprojekte ---
|
||||
static final String gDTS_AMEIS = "ameis"; //Meilensteine / Arbeitspakete
|
||||
static final String gDTS_APROJ = "aproj"; //Organisationprojekte
|
||||
// --- Opportunity ---
|
||||
static final String gDTS_AREGI = "AREGI"; //Angebotsversion
|
||||
static final String gDTS_AUNTE = "AUNTE"; //Angebotsvorgang
|
||||
static final String gDTS_AOPPU = "AOPPU"; //Opportunityakte
|
||||
static final String gDTS_AANGE = "AANGE"; //Angebot
|
||||
static final String gDTS_AANGU = "AANGU"; //Angebotsübergreifend/vor Angebot
|
||||
static final String gDTS_AKOMM = "AKOMM"; //Kommunikation
|
||||
static final String gDTS_AVERT = "AVERT"; //Verträge/Vereinbarungen
|
||||
static final String gDTS_AERGE = "AERGE"; //Vertragsergebnis
|
||||
static final String gDTS_ASOPP = "ASOPP"; //Suche Opportunitydokumente
|
||||
// --- Bauprojekt ---
|
||||
static final String gDTS_ABAUG = "ABAUG"; //Bauaktengruppe
|
||||
static final String gDTS_ABAUK = "ABAUK"; //Bauakte
|
||||
static final String gDTS_ABAUN = "ABAUN"; //Bauakte untergeordnet
|
||||
static final String gDTS_ABAUP = "ABAUP"; //Bauprojekte
|
||||
static final String gDTS_ABAUA = "ABAUA"; //Bauplanänderung Akte
|
||||
static final String gDTS_ABESP = "ABESP"; //Bauakte_Besprechungen
|
||||
static final String gDTS_AGENB = "AGENB"; //Genehmigung_Bauprojekt
|
||||
static final String gDTS_AAUSB = "AAUSB"; //Ausschreibung_Bauprojekt
|
||||
// --- Maschinenprojekt ---
|
||||
static final String gDTS_AMPRA = "AMPRA"; //Maschinenprojektakte
|
||||
static final String gDTS_AMAUF = "AMAUF"; //Vertrieb
|
||||
static final String gDTS_AMPRO = "AMPRO"; //Unterakte Technik
|
||||
static final String gDTS_AMUEB = "AMUEB"; //Maschinenübergreifend
|
||||
static final String gDTS_AMAKT = "AMAKT"; //Technik
|
||||
static final String gDTS_AMNAC = "AMNAC"; //Unterakte Vertrieb
|
||||
static final String gDTS_AMSPE = "AMSPE"; //Spezifikation
|
||||
static final String gDTS_AMUPO = "AMUPO"; //Unterakte Projektorganisation
|
||||
static final String gDTS_AMCRA = "AMCRA"; //ECR-Akte
|
||||
static final String gDTS_AMECR = "AMECR"; //Unterakte ECR
|
||||
static final String gDTS_AMUSP = "AMUSP"; //Unterakte Spezifikation
|
||||
static final String gDTS_AMEOP = "AMEOP"; //Akte Ergebnis Opportunity (in Maschinenprojekt)
|
||||
static final String gDTS_ASMAS = "ASMAS"; //Maschinenprojektdokumente
|
||||
static final String gDTS_DERZ1 = "DERZ1"; // Maschinendokumente (vorher neutrale Maschinendokumente)
|
||||
static final String gDTS_DSOFT = "DSOFT"; // Alle Software-Dokumente
|
||||
static final String gDTS_AERZ1 = "AERZ1"; // Maschine
|
||||
static final String gDTS_DMAP1 = "DMAP1"; // Alle Maschinenprojekt Dokumente
|
||||
static final String gDTS_DOPP1 = "DOPP1"; // Alle Opportunity Dokumente
|
||||
static final String gDTS_ENTMAP = "DPEN1"; // Entwicklungsprojektdokumente - Sammler für Primärentwicklung
|
||||
// --- Primärentwicklung
|
||||
static final String gDTS_APREN = "APREN"; //02.04 Entwicklungsprojektakte
|
||||
// --- Abteilungsdokumente ---
|
||||
static final String gDTS_AREME = "AREME"; //01.03.02 Abteilungsakte
|
||||
static final String gDTS_AVODA = "AVODA"; //Vorgangsdatum Akte
|
||||
static final String gDTS_DABTE = "DABTE"; //Abteilungsdokumente
|
||||
// --- Sonstige ---
|
||||
static final String gDTS_DVEME = "DVEME"; //Vertriebsmedien
|
||||
static final String gDTS_AVEVO = "AVEVO"; //Vertrauliche Vorgangsakte
|
||||
static final String gDTS_DVEDO = "DVEDO"; //Vertrauliche Dokumente
|
||||
static final String gDTS_EVDOK = "EVDOK"; //Vertragsdokument
|
||||
static final String gDTS_EVUNT = "EVUNT"; //Vertragsunterlage
|
||||
static final String gDTS_EVERT = "EVERT"; //Einzelvertrag
|
||||
static final String gDTS_RVERT = "RVERT"; //Rahmenvertrag
|
||||
static final String gDTS_MNDNT = "MNDNT"; //Organisationseinheit dbs CaseMngr Contract
|
||||
static final String gDTS_DMATO = "DMATO"; // Marketingtooldokumente
|
||||
static final String gDTS_PRTNR = "PRTNR"; //Partnerakte
|
||||
// --- Lieferantenmanagement
|
||||
static final String gDTS_ALIMA = "ALIMA"; //Lieferantenmanagement
|
||||
static final String gDTS_ALIAK = "ALIAK"; //Lieferantenaktivität (Lieferantenmanagement)
|
||||
static final String gDTS_ALONT = "ALONT"; //Lieferantenkontakt_neu (Lieferantenmanagement)
|
||||
static final String gDTS_AKUMA = "AKUMA"; //Kundenmanagement
|
||||
static final String gDTS_AEINK = "AEINK"; //Prozess (Lieferant)
|
||||
// --- Service
|
||||
static final String gDTS_DSERE = "DSERE"; //Service Request Dokumente
|
||||
static final String gDTS_ASERE = "ASERE"; //Service Request Akte
|
||||
static final String gDTS_DSEBE = "DSEBE"; //Service Beleg Dokumente
|
||||
static final String gDTS_ASEBE = "ASEBE"; //Service Beleg Akte
|
||||
static final String gDTS_DSEFA = "DSEFA"; // Service Faktura Dokumente
|
||||
static final String gDTS_DSELI = "DSELI"; // Service Lieferung Dokumente
|
||||
static final String gDTS_DSER1 = "DSER1"; // Dokumentsammler für Servicedokumente
|
||||
// --- ITSM
|
||||
static final String gDTS_AITSM = "AITSM"; //ITSM Akte
|
||||
static final String gDTS_DITSM = "DITSM"; //ITSM Dokumente
|
||||
// --- Equipment
|
||||
static final String gDTS_DEQUI = "DEQUI"; //Equipment Dokumente
|
||||
static final String gDTS_AEQUI = "AEQUI"; //Equipment Akte
|
||||
// --- Einkauf
|
||||
static final String gDTS_AEIBE = "AEIBE"; //Einkaufsbeleg
|
||||
// --- Material
|
||||
static final String gDTS_AMATE = "AMATE" //Materialakten
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
// DocField IDs
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
|
||||
static final int gDDF_PROJNR = 1; //Projekt-Nr.
|
||||
static final int gDDF_STATUS = 1; //Status
|
||||
static final int gDDF_PARTNERID = 1; //PartnerID
|
||||
static final int gDDF_CONTRACTNO = 1; //Vertragsnummer intern
|
||||
static final int gDDF_PROJTITLE = 2; //Projekt-Titel
|
||||
static final int gDDF_OPPANNr = 2; //Angebot_Nr
|
||||
static final int gDDF_PSPELEMENT = 2; //PSP-Element
|
||||
static final int gDDF_ZIELDTS = 2; //Zieldokumentart
|
||||
static final int gDDF_PARTNERNAME = 2; //Partnername
|
||||
static final int gDDF_PROZESS = 3; //Prozess
|
||||
static final int gDDF_CONTRACTNAME = 3; //Vertragsbezeichnung
|
||||
static final int gDDF_PROZESSGROUP = 4; //Prozessgruppe
|
||||
static final int gDDF_MASCHINENTYP = 4; //Maschinentyp (Achtung: Es gibt Maschinentyp und Maschinen_Typ)
|
||||
static final int gDDF_PROZESSART = 5; //Prozessart
|
||||
static final int gDDF_IHL = 5; //IH-Leistungsart (Service | GROOVY)
|
||||
static final int gDDF_PROJLEITER = 6; //Projektleiter
|
||||
static final int gDDF_ABTSENDER = 6; //Abteilung (Sender)
|
||||
static final int gDDF_PROJVABT = 7; //Projektverantw. Abteilung
|
||||
static final int gDDF_SENDER = 7; //Absender
|
||||
static final int gDDF_PROJSTATUS = 8; //Projektstatus
|
||||
static final int gDDF_PROJKLAMMER = 8; //Projektklammer
|
||||
static final int gDDF_BELEGTYP = 8; //Belegtyp/-art ( Service | GROOVY )
|
||||
static final int gDDF_BASEOPP = 9; //zugrundeliegende Opportunity
|
||||
static final int gDDF_PROJEKTPHASE = 9; //Projektphase
|
||||
static final int gDDF_EQUIPMENT = 9; //Equipment
|
||||
static final int gDDF_LNR = 10; //Lieferant_Nr
|
||||
static final int gDDF_EVENT = 10; //Vorgang
|
||||
static final int gDDF_CASE = 10; //Vorgang
|
||||
static final int gDDF_LNAME = 11; //Lieferant_Name
|
||||
static final int gDDF_VORGANGSSTATUS = 11; //Vorgangsstatus
|
||||
static final int gDDF_NPN = 12; //Netzplan_Nr
|
||||
static final int gDDF_UNTERBAUAKTE = 12; //untergeordnete Bauakte
|
||||
static final int gDDF_GLAKTYP = 12; //GL-Akten Typ
|
||||
static final int gDDF_NPVN = 13; //Netzplanvorgangsnummer
|
||||
static final int gDDF_BAUAKTENGRUPPE = 13; //Bauaktengruppe
|
||||
static final int gDDF_MUSTERMATNR = 13; //Mustermaterial Nr.
|
||||
static final int gDDF_VOROWNER = 13; //Vorgangsbesitzer
|
||||
static final int gDDF_CASEOWNER = 13; //Vorgangsbesitzer
|
||||
static final int gDDF_LNAME2 = 13; //Lieferant_Name2
|
||||
static final int gDDF_ENDKUNDENNR = 13; //Endkunden_Nr
|
||||
static final int gDDF_ENDKUNDENAM = 14; //Endkunden_Name
|
||||
static final int gDDF_GREMIUN = 14; //Gremium
|
||||
static final int gDDF_RESPSALESMAN = 14; //zust. Verkäufer
|
||||
static final int gDDF_LLAND = 14; //Lieferant_Land
|
||||
static final int gDDF_KONTAKTNUMMER = 15; //Kundenkontakt_ID
|
||||
static final int gDDF_AKTIVITAETSID = 15; //ECR Aktivitäts_ID
|
||||
static final int gDDF_ORGEINHEIT = 15; //Organisationseinheit dbs CaseMngr Contract
|
||||
static final int gDDF_ITSMID = 15; //ITSM ID
|
||||
static final int gDDF_ORDNUNG = 16; //Ordnung
|
||||
static final int gDDF_AKTENGRP = 16; //Aktengruppe (Equipment)
|
||||
static final int gDDF_APPHASE = 16; //Arbeitspaketphase
|
||||
static final int gDDF_ADITTITLE = 16; //Zusatztitel
|
||||
static final int gDDF_ORGPROJVERT = 16; //Org.Projekt_Vertretung
|
||||
static final int gDDF_DOKTITLE = 17; //Dokumenttitel
|
||||
static final int gDDF_DOKGRP = 18; //Dokumentkategorie
|
||||
static final int gDDF_AKTENANLAGE = 18; //Nur Aktenanlage
|
||||
static final int gDDF_REIHENFOLGE = 18; //Reihenfolge
|
||||
static final int gDDF_LORT = 18; //Lieferant_Ort
|
||||
static final int gDDF_MSAPS = 19; //Meilenstein/Arbeitspaket
|
||||
static final int gDDF_AUFTRNR = 19; //Projekt_Nr
|
||||
static final int gDDF_ANZZUGRIFFE = 19; //Anzahl Zugriffe
|
||||
static final int gDDF_PROJVERKN = 20; //Projektverknüpfung
|
||||
static final int gDDF_ANGELEGTVON = 20; //Angelegt von
|
||||
static final int gDDF_FRAGESTELLUNG = 20; //Fragestellung
|
||||
static final int gDDF_MATERIALNUMMER = 20; //Material_Nr
|
||||
static final int gDDF_MODUL = 20; //Modul (Erzeugnisstruktur)
|
||||
static final int gDDF_MODULM = 20; //M-Modul (Maschinendokumente)
|
||||
static final int gDDF_NEUEFRAGE = 21; //Neue Fragestellung
|
||||
static final int gDDF_DOKGROUP = 21; //Dokumentgruppe
|
||||
static final int gDDF_KNR = 22; //Kunden_Nr
|
||||
static final int gDDF_THEMEN = 22; //Themen (Caption für Wissensdokumente)
|
||||
static final int gDDF_KNAME = 23; //Kunden_Name
|
||||
static final int gDDF_ABBAUAKTE = 23; //abhängige Bauakte
|
||||
static final int gDDF_KDAKTNAME = 24; //Kundenkontakt_Beschreibung
|
||||
static final int gDDF_BESCHREIBUNG = 24; //ECR Beschreibung
|
||||
static final int gDDF_BAUAKTE = 24; //Bauakte
|
||||
static final int gDDF_SRID = 25; //Service-Request ID ( Service | GROOVY )
|
||||
static final int gDDF_BAUPLANAENDERUNG = 25; //Bauprojekt Unteraktentitel
|
||||
static final int gDDF_KDANPRT = 25; //Kunden_Ansprechpartner
|
||||
static final int gDDF_ORGENTRY = 25; //Originaleintrag
|
||||
static final int gDDF_DOMAIN = 25; //Domäne
|
||||
static final int gDDF_REGISTER = 26; //Register
|
||||
static final int gDDF_REFERENZOBJ = 26; //Referenzobjekt (wird über SAP gefüllt)
|
||||
static final int gDDF_CLASS = 27; //Klasse
|
||||
static final int gDDF_DTSKIND = 27; //Dokumentart des Kindes bei Verknüpfungs-Whitelist
|
||||
static final int gDDF_ZUGRIFF = 27; //Zugriff
|
||||
static final int gDDF_REFERENZNR = 27; //ReferenzNr (wird über SAP gefüllt)
|
||||
static final int gDDF_BUCHKREIS = 28; //Buchungskreis
|
||||
static final int gDDF_HAUPTPROJEKT = 29; //Hauptprojekt // TODO in den D3 Eigenschaften ist Feld 29 die Projektklammer!!
|
||||
static final int gDDF_PROJEKTKLAMMER = 29;
|
||||
static final int gDDF_HAUPTOPPANNR = 29; //Hauptangebot_Nr
|
||||
static final int gDDF_FUNKTION = 29; //Funktion (Erzeugnisstruktur)
|
||||
static final int gDDF_MARKETINGPROJEKT = 30; //Marktforschungsprojekt
|
||||
static final int gDDF_ANLAGE = 30; //Anlage
|
||||
static final int gDDF_KATEGORIE = 30; //Kategorie
|
||||
static final int gDDF_BAUPROJEKT = 30; //Bauprojekt
|
||||
static final int gDDF_SORTIERUNG = 30; //Sortierreiehenfolge
|
||||
static final int gDDF_HAUPTVONR = 30; //Hauptvorgangsnummer
|
||||
static final int gDDF_OPPNUMMER = 31; //Opportunity_Nr
|
||||
static final int gDDF_GESPARTNR = 31; //Geschäftspartnernummer
|
||||
static final int gDDF_HAUPTVOBEZ = 31; //Hauptvorgangsbezeichnung
|
||||
static final int gDDF_BELEGNUMMER = 31; //Belegenummer ( Service | GROOVY )
|
||||
static final int gDDF_KOMMRICHTUNG = 32; //Kommunikationsrichtung
|
||||
static final int gDDF_TEILVONR = 32; //Teilvorgangsnummer
|
||||
static final int gDDF_TEILVOBEZ = 33; //Teilvorgangsbezeichnung
|
||||
static final int gDDF_JAHR = 33; //Jahr
|
||||
static final int gDDF_MONAT = 34; //Monat
|
||||
static final int gDDF_STRUKTURINFO = 34; //Strukturinformationen
|
||||
static final int gDDF_VKPHASE = 35; //CRM-Verkaufsphase
|
||||
static final int gDDF_HAUPTOPP = 36; //Hauptopportunity
|
||||
static final int gDDF_SUBMISSION = 37; //Submission
|
||||
static final int gDFF_SCHLUESSEL = 38; //Schlüsselwert
|
||||
static final int gDDF_SRKATEGORIE = 38; //Service Request Kategorie ( Service | GROOVY )
|
||||
static final int gDFF_ABTEILUNG = 39; //Abteilung (aus Org. Mgmt.)
|
||||
static final int gDDF_ANNAME = 40; //Angebot_Name
|
||||
static final int gDDF_SAPBESCHREIBUNG = 40; //SAP Beschreibung ITSM / Equipment
|
||||
static final int gDDF_SVBESCHREIBUNG = 40; //Beschreibung ( Service | GROOVY )
|
||||
static final int gDDF_ANNEU = 41; //neue Angebotsversion
|
||||
static final int gDDF_ANFORDERER = 41; //Anforderer
|
||||
static final int gDDF_MAPPCUSTACTION = 41; //Zuordnung Kundenkontakt
|
||||
static final int gDDF_KDAKTLAND = 42; // Kunde Land
|
||||
static final int gDDF_ANSTATUS = 43; //Angebotsstatus
|
||||
static final int gDDF_ECRSTATUS = 43; //ECR Status
|
||||
static final int gDDF_KDAKTORT = 43; // Kunde Ort
|
||||
static final int gDDF_ERGEBNISDOK = 44; //Ergebnisdokumente
|
||||
static final int gDDF_ANWENDUNGSFALL = 45; //Anwendungsfall
|
||||
static final int gDDF_DTSVATER = 45; //Dokumentart des Vaters bei Verknüpfungs-Whitelist
|
||||
static final int gDDF_KDAKTKAT = 45; //Kundenkontakt_Kategorie
|
||||
static final int gDDF_LIEFAKTKAT = 45; //Lieferantenkontakt_Kategorie
|
||||
static final int gDDF_KONTAKTBESCH = 46; //Kontakt_Beschreibung
|
||||
static final int gDDF_KDAKTBESCH = 46; //Kundenkontakt_Beschreibung
|
||||
static final int gDDF_KURZTEXT = 46; //Kurztext ( Service | GROOVY )
|
||||
static final int gDDF_SALESGROUP = 47; //Verkäufergruppe
|
||||
static final int gDDF_SUBJECT = 48; //Betreff
|
||||
static final int gDDF_AKTE = 48; //Akte (Equipment)
|
||||
static final int gDDF_BELEGART = 48; //Betreff
|
||||
static final int gDDF_ARCDOCID = 49; //ARC Doc ID
|
||||
static final int gDDF_BESPRTITEL = 49; //Besprechungstitel
|
||||
static final int gDDF_ERDATE = 50; //Ereignisdatum
|
||||
static final int gDDF_KONTAKTDATE = 52; //Kundenkontakt_Termin
|
||||
static final int gDDF_DOKDATE = 54; //Dokumentdatum
|
||||
static final int gDDF_EQUIPMENTS = 60; //Equipments (Service) - 12.12.2022
|
||||
static final int gDDF_PROJBER = 60; //Projektbeteiligte
|
||||
static final int gDDF_ERGDOCFUER = 60; //Ergebnisdokument für
|
||||
static final int gDDF_VORGANG = 60; //Beteiligter Vorgang
|
||||
static final int gDDF_TEILVONRM = 60; //Teilvorgangsnummern
|
||||
static final int gDDF_GESPARTNR60 = 60; //Geschäftspartnernummer
|
||||
static final int gDDF_SCHLAGWORT = 61; //Schlagwort
|
||||
static final int gDDF_MSAPM = 61; //Meilenstein/Arbeitspaket Mehrfach
|
||||
static final int gDDF_TEILVOBEZGEN = 61; //Teilvorgangsbezeichnungen
|
||||
static final int gDDF_PROJEKTE = 62; //Projekte Mehrfach
|
||||
static final int gDDF_OPPNRM = 62; //weitere Opportunity_Nr
|
||||
static final int gDDF_STRUKTURINFOS = 62; //Strukturinformationen
|
||||
static final int gDDF_WEITKDNR = 62; //weitere Kunden_Nr
|
||||
static final int gDDF_MASCHINENTYPEN = 62; //Maschinen-Typen (Maschinendokumente)
|
||||
static final int gDDF_WEITEREBELEGNR = 62; //Weitere Belegnummer (Service)
|
||||
static final int gDDF_PROJLEITERM = 63; //Projektleiter Mehrfach
|
||||
static final int gDDF_EMPFEHLUNG = 63; //Empfehlung
|
||||
static final int gDDF_GESPART = 63; //Geschäftspartner
|
||||
static final int gDDF_ABTEMPM = 63; //Abteilung (Empfänger) Mehrfach
|
||||
static final int gDDF_HAUPTFUNKTION = 63; //Hauptfunktion (Regelberichte)
|
||||
//static final int gDDF_D3USER = 63; //d.3 User
|
||||
static final int gDDF_D3USER63 = 63; //d.3 User -> ehemals "gDDF_D3USER"
|
||||
static final int gDDF_EMPFAENGERM = 65; //Empfänger
|
||||
static final int gDDF_FUNKTIONM = 64; //M-Funktion (Maschinendokumente)
|
||||
static final int gDDF_WEITERESRID = 64; //Weitere SR-ID (Service)
|
||||
static final int gDDF_WEITEREEQUIPMENT = 64;
|
||||
static final int gDDF_PROJVABTM = 65; //Projektverantwortliche Abteilung Mehrfach
|
||||
static final int gDDF_THEMA = 66; //Thema Wissensdokumente
|
||||
static final int gDDF_PROJEKTTITELM = 66; //Projekttitel Mehrfach
|
||||
static final int gDDF_WEITAUFTRAGSNR = 66; //weitere Projekt_Nr
|
||||
static final int gDDF_WEITLIEFNR = 66; //weitere Lieferanten_Nr
|
||||
static final int gDDF_HAUPTPROJEKTM = 67; //Hauptprojekt Mehrfach
|
||||
//static final int gDDF_d3USER = 67; //d.3 Anmeldename
|
||||
static final int gDDF_D3USER67 = 67; //d.3 Anmeldename -> ehemals "gDDF_d3USER"
|
||||
static final int gDDF_ISOCODE = 67; //ISO Sprachcode (ISO3)
|
||||
static final int gDDF_REGIONALORG = 67; //Regionalorganisation
|
||||
static final int gDDF_EMAILKONTAKT = 68; //Emailkontakt Mehrfach
|
||||
static final int gDDF_BUCHKREIS68 = 68; //Buchungskreis Mehrfach Intercompany
|
||||
static final int gDDF_ORGEINHEITEN = 69; //Orgeinheiten aus OrgMngmtn
|
||||
static final int gDDF_UEBERSETZUNG = 69; //Übersetzung
|
||||
static final int gDDF_MUSTERMATNR69 = 69; //Mustermaterial Nr. Mehrfach (Feld 69)
|
||||
static final int gDDF_DOCINFONR = 80; //Dokumenteninfosatz Nr.
|
||||
static final int gDDF_VERSIONINTERN = 88; //d.3 Version (intern)
|
||||
|
||||
// DDF für Vertriebsdokumente
|
||||
static final int gDDF_DIVISION = 61;
|
||||
static final int gDDF_MACHINESYSTEM = 62;
|
||||
static final int gDDF_MACHINE = 63;
|
||||
static final int gDDF_FUNCTIONS = 64;
|
||||
static final int gDDF_MODULES = 60;
|
||||
static final int gDDF_PACKAGE = 65;
|
||||
|
||||
|
||||
// Werte für Baudokumente
|
||||
static final String gAUSFUEHRUNG = "8 Ausführung";
|
||||
static final String gBESPRECHUNG = "Besprechungen";
|
||||
static final String gGENEHMIGUNG = "4 Genehmigungen";
|
||||
static final String gAUSSCHREIBUNG = "6 Ausschreibung";
|
||||
|
||||
// Werte für Wiedervorlage Kundenberichte
|
||||
static final String gDOKUGRP = "DG052"; //Wert aus den administrativen Akte für Dokumentgruppe (#Kundenberichte)
|
||||
static final String gINFOGRP = "INFO_Kundenberichte"; //Gruppe empfängt Postkorbeintrag bei neuen Besuchsberichten
|
||||
|
||||
// Allgemeine Variablen (z.B. Schlüsselumstellung)
|
||||
static final String gDG_Kommunikation = "DG134"
|
||||
static final String gDG_Medien = "DG074"
|
||||
static final String gDG_ECRChangeOrder = "DG025"
|
||||
|
||||
static final String gAK_Kommunikation = "AK010"
|
||||
static final String gAK_Kundenaktivität = "AK011"
|
||||
static final String gAK_Lieferantenaktivität = "AK014"
|
||||
static final String gAK_Projektorganisation = "AK017"
|
||||
static final String gAK_Spezifikation = "AK021"
|
||||
static final String gAK_ErgebnisOpportuntiy = "AK004"
|
||||
static final String gAK_Werkauftrag = "AK028"
|
||||
|
||||
|
||||
static final int RETURNCODE_OK = 0;
|
||||
|
||||
static final String gTECHNICAL_GROUP = "d3_grp_hoo" // Gruppenkürzel
|
||||
|
||||
|
||||
// Zentralisierung Additional Info Text
|
||||
static final String gADITXT001049 = "Bitte geben Sie eine Projektnummer ein, erst dann koennen Sie ECR/CO_Nr und Beschreibung auswaehlen."
|
||||
static final String gADITXT001001 = "Please provide a Project number, after that you can choose a ECR/CO no. and Description."
|
||||
static final String gADITXT002049 = "Bitte waehlen Sie eine ECR/CO_Nr und Beschreibung passend zur Projektnummer."
|
||||
static final String gADITXT002001 = "Please choose an ECR/CO no. and Description which fits to the Project number."
|
||||
static final String gADITXT003049 = "Sie versuchen ein Ergebnisdokument in einen genehmigten ECR/Change Order zu importieren. Bitte korrigieren Sie Ihre Eingabe."
|
||||
static final String gADITXT003001 = "You try to import a document to an accepted ECR/Change Order. Please correct your input."
|
||||
static final String gADITXT004049 = "Bitte waehlen Sie eine gültige Mustermaterialnummer aus."
|
||||
static final String gADITXT004001 = "Please choose a valid sample material number."
|
||||
static final String gADITXT005049 = "Bitte waehlen Sie eine gültige Funktion aus."
|
||||
static final String gADITXT005001 = "Please choose a valid function."
|
||||
static final String gADITXT006049 = "Bitte waehlen Sie ein gültige Modulnummer aus."
|
||||
static final String gADITXT006001 = "Please choose a valid module number."
|
||||
static final String gADITXT007049 = "Sie versuchen ein Maschinenprojektdokument einer Opportunity zuzuordnen. Bitte korrigieren Sie Ihre Eingabe."
|
||||
static final String gADITXT007001 = "You try to add a project document to an opportunity. Please correct your input."
|
||||
static final String gADITXT008049 = "Sie versuchen ein Opportunitydokument einem Maschinenprojekt zuzuordnen. Bitte korrigieren Sie Ihre Eingabe."
|
||||
static final String gADITXT008001 = "You try to add an opportunity document to an project. Please correct your input."
|
||||
static final String gADITXT009049 = "Eine der Angebotsakten in die Sie importieren moechten ist versendet, oder bereits angenommen. Es koennen keine weiteren Ergebnisdokumente abgelegt werden. Erstellen Sie ein neues Angebot, oder importieren Sie ein Basisdokument ohne Ergebnischarakter."
|
||||
static final String gADITXT009001 = "One offer folder you chose for your import has been sent or is already accepted. It is not allowed to import further more result documents. Please create a new offer folder or import a document without result character."
|
||||
static final String gADITXT010049 = "Bitte wählen Sie entweder den Lieferantennamen oder die Lieferantennummer aus der Liste aus, oder geben Sie es manuell ein."
|
||||
static final String gADITXT010001 = "Please choose either a Customer No. or a Customer Name from the Dropdown Box or provide them manually."
|
||||
static final String gADITXT011049 = "Bitte geben Sie mindestens den Lieferantennamen ein oder wählen Sie ihn aus der Drop Down Liste."
|
||||
static final String gADITXT011001 = "Please provide a Customer Name or chose from the Dropdown Box."
|
||||
static final String gADITXT012049 = "Sie versuchen ein Dokument zu importieren, ohne entweder eine Projekt- oder eine Opportunitynummer eingetragen zu haben. Bitte korrigieren Sie Ihre Eingabe."
|
||||
static final String gADITXT012001 = "You try to import a document without attaching it to an order or an opportunity. Please correct your input."
|
||||
static final String gADITXT013049 = "Sie versuchen ein Dokument zu importieren. Dabei haben Sie sowohl eine Projekt- als auch eine Opportunitynummer (ggf. unter weitere) eingetragen. Bitte korrigieren Sie Ihre Eingabe."
|
||||
static final String gADITXT013001 = "You try to import a document by attaching an order as well as an opportunity, maybe concerning the fields for further numbers. Please correct your input."
|
||||
static final String gADITXT014049 = "Bitte geben Sie eine gueltige Kombination aus Kundenkontakt-ID und entweder Kundennummer, Projektnummer oder Opportunitynummer ein."
|
||||
static final String gADITXT014001 = "Please provide a valid combination of Customer Contact ID and Customer Number, Project Number or Opportunitynumber."
|
||||
static final String gADITXT015049 = "Sie versuchen ein Dokument mit der Dokumentgruppe Medien abzulegen, ohne eine Akte ausgewaehlt zu haben. Bitte korrigieren Sie Ihre Eingabe"
|
||||
static final String gADITXT015001 = "You try to import an document as Medien without choosing a folder. Please correct your input."
|
||||
static final String gADITXT016049 = "Bitte geben Sie einen gültigen, eindeutigen Lieferanten an oder wählen Sie den Lieferanten aus der Auswahlliste."
|
||||
static final String gADITXT016001 = "Please choose a valid, unambiguous Supplier or choose from the supplier number drop down."
|
||||
static final String gADITXT017049 = "Dieser Lieferant existiert bereits in dieser Opportunity, bzw. in diesem Projekt. Bitte nutzen Sie die existierende Akte."
|
||||
static final String gADITXT017001 = "This Supplier already exists for this Opportunity or Project. Please use the existing Supplier."
|
||||
static final String gADITXT018049 = "Der Benutzer ist bereits als Projektbeteiligter in diesem Organisationsprojekt hinterlegt."
|
||||
static final String gADITXT018001 = "The User has already been assigned as project participant in this organizational project."
|
||||
static final String gADITXT019049 = "Sie haben eine ungültige Vertragsnummer eingegeben."
|
||||
static final String gADITXT019001 = "You have entered a non existent contract number."
|
||||
static final String gADITXT020049 = "Bitte geben Sie einen gültigen Kunden an."
|
||||
static final String gADITXT020001 = "Please choose a valid Customer"
|
||||
static final String gADITXT021049 = "Bitte geben Sie eine gültige Kombination aus Lieferant_Nr, Kontakt_Beschreibung, Kategorie und Termin ein oder wählen Sie eine Kontakt_Beschreibung aus der Auswahlliste."
|
||||
static final String gADITXT021001 = "Please provide a valid combination of supplier_nr, contact description, categorie and date or choose from the contact description drop down."
|
||||
static final String gADITXT022049 = "Bitte wählen Sie die weitere Kunden_Nr aus der Auswahlliste aus oder geben Sie eine existierende weitere Kunden_Nr ein."
|
||||
static final String gADITXT022001 = "Please choose either a Further customer no. from the Dropdown Box or provide a correct Further customer no. manually."
|
||||
static final String gADITXT023049 = "Bitte wählen Sie die weitere Lieferant_Nr aus der Auswahlliste aus oder geben Sie eine existierende weitere Lieferant_Nr ein."
|
||||
static final String gADITXT023001 = "Please choose either a Further supplier no. from the Dropdown Box or provide a correct Further supplier no. manually."
|
||||
static final String gADITXT024049 = "Der Import einer MSG-Datei ist nicht erlaubt."
|
||||
static final String gADITXT024001 = "Importing a MSG file is not allowed."
|
||||
static final String gADITXT025049 = "Unbekannte ITSM ID"
|
||||
static final String gADITXT025001 = "Unknown ITSM ID"
|
||||
|
||||
}
|
||||
3
Optima/_Groovy/Functions.classpath
Normal file
3
Optima/_Groovy/Functions.classpath
Normal file
@@ -0,0 +1,3 @@
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\json-20180813.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\commons-io-2.5.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\commons-lang-2.6.jar
|
||||
9322
Optima/_Groovy/Functions.groovy
Normal file
9322
Optima/_Groovy/Functions.groovy
Normal file
File diff suppressed because it is too large
Load Diff
4
Optima/_Groovy/Hooks.classpath
Normal file
4
Optima/_Groovy/Hooks.classpath
Normal file
@@ -0,0 +1,4 @@
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\json-20180813.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\commons-io-2.5.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\commons-lang-2.6.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\bcprov-jdk15on-1.62.jar
|
||||
4621
Optima/_Groovy/Hooks.groovy
Normal file
4621
Optima/_Groovy/Hooks.groovy
Normal file
File diff suppressed because it is too large
Load Diff
123
Optima/_Groovy/SystemSpecificConst.groovy
Normal file
123
Optima/_Groovy/SystemSpecificConst.groovy
Normal file
@@ -0,0 +1,123 @@
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
// SystemSpecificConst.groovy -> hier P-System
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Groovy Definitionsdatei f<>r alle ben<65>tigten Repositoryabh<62>ngigen Konfigurationen
|
||||
//
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Historie:
|
||||
// 25.03.2019 dvelop Erste Version f<>r oData-Schnittstelle
|
||||
//
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
|
||||
public class SystemSpecificConst {
|
||||
|
||||
/*
|
||||
* Systemspezifische Variablen
|
||||
*/
|
||||
|
||||
static final String updatedUser = "d3groovy";
|
||||
|
||||
// imue 06.2019 - Pfad um Datei tempor<6F>r zu kopieren - notwendig da es in Groovy noch keine Funktion zum kopieren gibt, wo die FileExtension nicht verloren geht
|
||||
static final String cloneDocumentTempPath = "E:\\d3\\d3work\\D3P\\CloneDocumentTemp"
|
||||
//Aufruf d.3one Link f<>r<EFBFBD>Wissensdokumente
|
||||
static final String gD3oneString = "<a href=https://dms.optima-group.org/dms/r/31edf125-2d59-5950-b055-5bec6a933289/o2/"
|
||||
// Datei mit Text f<>r Email f<>r die Empfehlung der Wissensdokumente
|
||||
static final String gBodyfile = "D:\\d3\\d3config\\D3P\\Hooks\\Mailbody\\body.html"
|
||||
//ersten drei Ziffern der AppId vom d.3one
|
||||
static final String gApp_D3one = "020"
|
||||
// Deaktivierung der Zertifikatspr<70>fung (keine Zertifikatspr<70>fung = false; Ausf<73>hrung Zertifikatspr<70>fung = true)
|
||||
static final boolean needCertificateCheck = false;
|
||||
// Empf<70>nger Benachrichtung bei Fehler von Eigenschafts<74>nderungen
|
||||
static final String recipientHoldFile = "HookUpdates"
|
||||
// imue 08.2019 - Verarbeitung der Massendatenaktualisierungen (true = Aufruf Async und Jpl Funktionen, false = Aufruf von Async Jobs f<>r UPD001)
|
||||
static final boolean workWithAsyncJplForMassDataUpdate = false
|
||||
|
||||
/*
|
||||
* Eigenschaften-ID's
|
||||
*/
|
||||
static final int gProjOrgNrID = 1 // Repository-Id der Eigenschaft Org.Projekt_Nr
|
||||
static final int gProzessGroupId = 4
|
||||
static final int gRepIDProzessart = 5
|
||||
static final int gNetzplanNrId = 15 // Repository-ID der Eigenchaft Netzplan_Nr
|
||||
static final int gBuchungskreisID = 17 // Repository-ID der Eigenschaft Buchungskreis (Einfachfeld)
|
||||
static final int gEreignisDateID = 22 // Repository-ID Der Eigenschaft Ereignisdatum
|
||||
static final int gProjektNrID = 134 // Repository-ID der Eigenschaft Projekt_Nr
|
||||
static final int gDokgroupID = 36 // Repository-ID der Eigenschaft Dokumentgruppe
|
||||
static final int gLieferantNrID = 37
|
||||
static final int gLieferantNaID = 38
|
||||
static final int gKundennrID = 39
|
||||
static final int gKundennameID = 40
|
||||
static final int gEndkundennrID = 302 // Repository-ID der Eigenschaft "Endkunden_Nr"
|
||||
static final int gEndkundennameID = 301 // Repository-ID der Eigenschaft "Endkunden_Name"
|
||||
static final int gRegisterId = 42
|
||||
static final int gKundenkontaktIDID = 72
|
||||
static final int gOpportunityNrID = 84
|
||||
static final int gKommunikationsrichtID = 68
|
||||
static final int gJahrID = 66
|
||||
static final int gMonatID = 82
|
||||
static final int gVerkaufsphaseID = 88
|
||||
static final int gHauptOpportunityID = 64
|
||||
static final int gSubmissionID = 85
|
||||
static final int gAbteilungOrgID = 52
|
||||
static final int gOppannrID = 53
|
||||
static final int gAngebotsnameID = 54
|
||||
static final int gErgebnisDokID = 62
|
||||
static final int gKontaktBeschreibungID = 80
|
||||
static final int gArcdocidID = 57
|
||||
static final int gWeitOpportunityID = 91 // Repository-ID der Mehrfacheigenschaft Opportunity
|
||||
static final int gHauptangebotNrID = 63
|
||||
|
||||
static final int gSalesgroupID = 87
|
||||
static final int gKundenkontaktKategorieID = 73
|
||||
static final int gHauptOppNrID = 63
|
||||
static final int gAbtsenderID = 96
|
||||
static final int gSenderID = 97
|
||||
static final int gWeitProjektnummerID = 131 // Repository-ID der Mehrfacheigenschaft Projekt_Nr
|
||||
static final int gPSPElementId = 127 // Repository-ID der Eigenchaft PSP-Element
|
||||
static final int gAdittitleID = 102
|
||||
static final int gECRCONRID = 122 // Repository-ID der Eigenschaft ECR/CR_NR ID (Activity ID)
|
||||
static final int gIntercompanyID = 136 // Repository-ID der Eigenschaft Intercompany
|
||||
static final int gFunktionID = 202 // Repository-ID der Eigenschaft Funktion
|
||||
static final int gModuleID = 203 // Repository-ID der Eigenschaft Module
|
||||
static final int gBuchungskreiseID = 239 // Repository-ID der Eigenschaft Buchungskreise (Mehrfachfeld)
|
||||
static final int gMusterMaterialMehrfID = 278
|
||||
static final int gOrganEinheitID = 253 // Repository-ID der Eigenschaft Organisationseinheit
|
||||
static final int gVertriebMaterialNrID = 291
|
||||
static final int gAktuellVersInternID = 288
|
||||
static final int gMaschinentypID = 303 // Repository-ID Maschinentyp (ein Wort)
|
||||
static final int gBelegNrID = 316 // Repository-ID Belegnummer
|
||||
static final int gBelegArtID = 314 // Repository-ID Belegart
|
||||
static final int gSRBeschreibungID = 320 // Repository-ID f<>r Beschreibung (Service)
|
||||
static final int gBelegBeschreibungID = 317
|
||||
static final int gEquipmentID = 312
|
||||
static final int gSRIDID = 315 // Repository-ID f??R ID (Service)
|
||||
static final int gWeitereBelegNrID = 322
|
||||
static final int gWeitereSRIDID = 324
|
||||
static final int gWeitereEquipmentID = 325
|
||||
static final int gEinkaufsBelegNrID = 334
|
||||
static final int gWeitereEinkaufBelegNrID = 333
|
||||
static final int gEquipmentsID = 336
|
||||
|
||||
/*
|
||||
* Wertemengen-ID's
|
||||
*/
|
||||
static final int gPredValueIDKTKKat = 56 // Ermittlung der <20>bersetzung der Kontakt_Kategorie
|
||||
static final int gPredValueIDKatLief = 112 // Ermittlung der <20>bersetzung der Lieferantenkontakt_Kategorie
|
||||
static final int gPredValueIDRegister = 51 // Repository-ID der manuellen Wertemenge Register
|
||||
|
||||
|
||||
/*
|
||||
* ODATA-Schnittstelle - Zugangsdaten
|
||||
*/
|
||||
static final String baseOdata = "host";
|
||||
static final def lUserOdata = "user"
|
||||
static final def lPassOdata = "pass"
|
||||
|
||||
|
||||
// Bauakte
|
||||
static final String gResBauakteID = "\$000000130" //DocID des Restrikition Sets Bauakte
|
||||
|
||||
|
||||
}
|
||||
3
Optima/_Groovy/ValueSets_Common.classpath
Normal file
3
Optima/_Groovy/ValueSets_Common.classpath
Normal file
@@ -0,0 +1,3 @@
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\json-20180813.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\commons-io-2.5.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\commons-lang-2.6.jar
|
||||
4740
Optima/_Groovy/ValueSets_Common.groovy
Normal file
4740
Optima/_Groovy/ValueSets_Common.groovy
Normal file
File diff suppressed because it is too large
Load Diff
2
Optima/_Groovy/ValueSets_Translation.classpath
Normal file
2
Optima/_Groovy/ValueSets_Translation.classpath
Normal file
@@ -0,0 +1,2 @@
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\json-20180813.jar
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\commons-io-2.5.jar
|
||||
744
Optima/_Groovy/ValueSets_Translation.groovy
Normal file
744
Optima/_Groovy/ValueSets_Translation.groovy
Normal file
@@ -0,0 +1,744 @@
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
// ValueSets_Common.groovy
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Grrovy Wertemengen Übersetzungen
|
||||
//
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Historie:
|
||||
// 26.06.2017 phoer/dvelop Erste Version zur Umstellung der dynamischen Wertemengen und Übersetzung
|
||||
//
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
|
||||
import com.dvelop.d3.server.Entrypoint;
|
||||
import com.dvelop.d3.server.core.D3Interface;
|
||||
import com.dvelop.d3.server.Document;
|
||||
import com.dvelop.d3.server.User;
|
||||
import com.dvelop.d3.server.DocumentType;
|
||||
import com.dvelop.d3.server.RepositoryField;
|
||||
import com.dvelop.d3.server.UserOrUserGroup;
|
||||
import com.dvelop.d3.server.ValueSet;
|
||||
import com.dvelop.d3.server.ValueSetTranslation;
|
||||
import com.dvelop.d3.server.Validation;
|
||||
import com.dvelop.d3.server.Translation;
|
||||
import com.dvelop.d3.server.*;
|
||||
|
||||
// zusätzliche Imports für oData Zugriff 21.01.2019
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLSession;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import java.security.cert.X509Certificate;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import groovy.sql.GroovyRowResult;
|
||||
import groovy.io.FileType;
|
||||
|
||||
|
||||
class ValueSets_Translation
|
||||
{
|
||||
|
||||
@ValueSetTranslation(entrypoint="SubjectValues")
|
||||
def SubjectValuesTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
def lang = transl.locale.language
|
||||
|
||||
d3.log.info("Groovy - ValueSets: start SubjectValueTranslation " + lang + " - locale: " + transl.locale);
|
||||
|
||||
if( lang == "de" ) {
|
||||
lang = "DEU"
|
||||
} else if( lang == "en" ) {
|
||||
lang = "ENG"
|
||||
}
|
||||
|
||||
// IMUE 26.08.2019 neue Wertemenge bei Umstellung auf Schlüssel statt LangKey
|
||||
// NEU = def lSQL = """select fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as ShortKey, value_char as TransVal
|
||||
// ALT = def lSQL = """select fs.dok_dat_feld_${Const.gDDF_ORGENTRY} as LangKey, value_char as TransVal
|
||||
|
||||
def lSQL = """select fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as ShortKey, value_char as TransVal
|
||||
from firm_spez_mult_val as mv
|
||||
join firmen_spezifisch as fs on fs.doku_id = mv.doku_id
|
||||
where field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
and mv.doku_id in (
|
||||
select doku_id
|
||||
from firmen_spezifisch
|
||||
where kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
AND dok_dat_feld_${Const.gDFF_SCHLUESSEL} like 'AK%' )
|
||||
and row_number in (
|
||||
select row_number
|
||||
from firm_spez_mult_val as mv, firmen_spezifisch as fs
|
||||
where value_char like '${lang}%'
|
||||
and mv.field_no = '${Const.gDDF_ISOCODE}'
|
||||
and fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
and fs.doku_id = mv.doku_id )""";
|
||||
|
||||
def resultlist = d3.sql.executeAndGet( lSQL );
|
||||
|
||||
d3.log.info("Es wurden " + resultlist.size() + " Eintraege gefunden!");
|
||||
|
||||
for ( def i = 0; i < resultlist.size(); i++ ) {
|
||||
transl.set( resultlist.get(i).get("ShortKey"), resultlist.get(i).get("TransVal") );
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="MProjNumValues")
|
||||
def getMProjNumValuesTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
def lang = transl.locale.language
|
||||
|
||||
if ( lang != "DEU" ) {
|
||||
transl.set( "keine Submission", "No Submission" );
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="DokumentuntergruppeValues")
|
||||
def DokumentuntergruppeValuesTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
def lang = transl.locale.language
|
||||
|
||||
d3.log.info("Groovy - ValueSets: start DokumentuntergruppeValueTranslation " + lang + " - locale: " + transl.locale);
|
||||
if( lang == "de" ) {
|
||||
lang = "DEU"
|
||||
} else if( lang == "en" ) {
|
||||
lang = "ENG"
|
||||
}
|
||||
|
||||
|
||||
// IMUE 05.03.2019 neue Wertemenge bei Umstellung auf Schlüssel statt LangKey
|
||||
// ALT = def lSQL = """select fs.dok_dat_feld_${Const.gDDF_ORGENTRY} as LangKey, value_char as TransVal
|
||||
|
||||
def lSQL = """select fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as ShortKey, value_char as TransVal
|
||||
from firm_spez_mult_val as mv
|
||||
join firmen_spezifisch as fs on fs.doku_id = mv.doku_id
|
||||
where field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
and mv.doku_id in (
|
||||
select doku_id
|
||||
from firmen_spezifisch
|
||||
where kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
AND dok_dat_feld_${Const.gDFF_SCHLUESSEL} like 'DG%' )
|
||||
and row_number in (
|
||||
select row_number
|
||||
from firm_spez_mult_val as mv, firmen_spezifisch as fs
|
||||
where value_char like '${lang}%'
|
||||
and field_no = '${Const.gDDF_ISOCODE}'
|
||||
and fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
and fs.doku_id = mv.doku_id )""";
|
||||
|
||||
def resultlist = d3.sql.executeAndGet( lSQL );
|
||||
|
||||
d3.log.info("Es wurden " + resultlist.size() + " Eintraege gefunden!");
|
||||
|
||||
for ( def i = 0; i < resultlist.size(); i++ )
|
||||
{
|
||||
// IMUE 05.03.2019 neue Wertemenge bei Umstellung auf Schlüssel statt LangKey
|
||||
// Alt = transl.set( resultlist.get(i).get("LangKey"), resultlist.get(i).get("TransVal") );
|
||||
transl.set( resultlist.get(i).get("ShortKey"), resultlist.get(i).get("TransVal") );
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="ProzessValues")
|
||||
def ProzessValuesTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
def lang = transl.locale.language
|
||||
|
||||
d3.log.info("Groovy - ValueSets: start ProzessValuesTranslation " + lang + " - locale: " + transl.locale);
|
||||
|
||||
if( lang == "de" ) {
|
||||
lang = "DEU"
|
||||
} else if( lang == "en" ) {
|
||||
lang = "ENG"
|
||||
}
|
||||
|
||||
// IMUE 05.02.2019 - Folgendes Statement ergibt die Schlüssel und die jeweilige Übersetzung nach Prozessumbau
|
||||
def lSQL = """ SELECT fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as LangKey, mv.value_char as TransVal
|
||||
FROM firmen_spezifisch fs
|
||||
LEFT JOIN firm_spez_mult_val mv ON fs.doku_id = mv.doku_id
|
||||
LEFT JOIN firm_spez_mult_val mv2 ON fs.doku_id = mv2.doku_id AND mv.row_number = mv2.row_number
|
||||
WHERE fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
AND mv.field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
AND mv2.field_no = '${Const.gDDF_ISOCODE}'
|
||||
AND mv2.value_char LIKE '${lang}%'
|
||||
ORDER BY mv2.value_char asc """;
|
||||
|
||||
/*
|
||||
def lSQL = """select fs.dok_dat_feld_${Const.gDDF_ORGENTRY} as LangKey, value_char as TransVal
|
||||
from firm_spez_mult_val as mv
|
||||
join firmen_spezifisch as fs on fs.doku_id = mv.doku_id
|
||||
where field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
and mv.doku_id in (
|
||||
select doku_id
|
||||
from firmen_spezifisch
|
||||
where kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
AND dok_dat_feld_${Const.gDFF_SCHLUESSEL} like 'PZ%' )
|
||||
and row_number in (
|
||||
select row_number
|
||||
from firm_spez_mult_val as mv, firmen_spezifisch as fs
|
||||
where value_char like '${lang}%'
|
||||
and field_no = '${Const.gDDF_ISOCODE}'
|
||||
and fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
and fs.doku_id = mv.doku_id )""";
|
||||
*/
|
||||
|
||||
def resultlist = d3.sql.executeAndGet( lSQL );
|
||||
|
||||
d3.log.info("Es wurden " + resultlist.size() + " Eintraege gefunden!");
|
||||
|
||||
for ( def i = 0; i < resultlist.size(); i++ )
|
||||
{
|
||||
transl.set( resultlist.get(i).get("LangKey"), resultlist.get(i).get("TransVal") );
|
||||
}
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="ProzArtValues")
|
||||
def ProzArtValuesTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
def lang = transl.locale.language
|
||||
|
||||
d3.log.info("Groovy - ValueSets: start ProzArtValuesTranslation " + lang + " - locale: " + transl.locale);
|
||||
|
||||
if( lang == "de" ) {
|
||||
lang = "DEU"
|
||||
} else if( lang == "en" ) {
|
||||
lang = "ENG"
|
||||
}
|
||||
|
||||
def lSQL = """ SELECT fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as LangKey, mv.value_char as TransVal
|
||||
FROM firmen_spezifisch fs
|
||||
LEFT JOIN firm_spez_mult_val mv ON fs.doku_id = mv.doku_id
|
||||
LEFT JOIN firm_spez_mult_val mv2 ON fs.doku_id = mv2.doku_id AND mv.row_number = mv2.row_number
|
||||
WHERE fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
AND mv.field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
AND mv2.field_no = '${Const.gDDF_ISOCODE}'
|
||||
AND mv2.value_char LIKE '${lang}%' """;
|
||||
|
||||
/*def lSQL = """select fs.dok_dat_feld_${Const.gDDF_ORGENTRY} as LangKey, value_char as TransVal
|
||||
from firm_spez_mult_val as mv
|
||||
join firmen_spezifisch as fs on fs.doku_id = mv.doku_id
|
||||
where field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
and mv.doku_id in (
|
||||
select doku_id
|
||||
from firmen_spezifisch
|
||||
where kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
AND dok_dat_feld_${Const.gDFF_SCHLUESSEL} like 'PA%' )
|
||||
and row_number in (
|
||||
select row_number
|
||||
from firm_spez_mult_val as mv, firmen_spezifisch as fs
|
||||
where value_char like '${lang}%'
|
||||
and field_no = '${Const.gDDF_ISOCODE}'
|
||||
and fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
and fs.doku_id = mv.doku_id )""";
|
||||
*/
|
||||
|
||||
def resultlist = d3.sql.executeAndGet( lSQL );
|
||||
|
||||
d3.log.info("Es wurden " + resultlist.size() + " Eintraege gefunden!");
|
||||
|
||||
for ( def i = 0; i < resultlist.size(); i++ )
|
||||
{
|
||||
transl.set( resultlist.get(i).get("LangKey"), resultlist.get(i).get("TransVal") );
|
||||
}
|
||||
}
|
||||
|
||||
// 07.2019 wird produktiv noch nicht genutzt
|
||||
@ValueSetTranslation(entrypoint="MachineDocumentModuls")
|
||||
def MachineDocumentsModulsTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
// Persistierung nur der eindeutigen ID - In der Wertemenge wird über die Translation "ID - Beschreibung" angezeigt"
|
||||
def lang = transl.locale.language
|
||||
lang = lang.toUpperCase();
|
||||
def fallbackLangEng = "EN";
|
||||
|
||||
/*
|
||||
// Create a trust manager that does not validate certificate chains -> entfernt 13.02.2019
|
||||
Dafür ist es erforderlich das Zertifikat in Java als vertrauenswürdig hinzuzufügen:
|
||||
cd D:\d3\d3server.prg\JRE\bin keytool.exe -import -keystore "D:\d3\d3server.prg\JRE\lib\security\cacerts" -file "E:\optima_group_ca.cer"
|
||||
*/
|
||||
|
||||
if(SystemSpecificConst.needCertificateCheck == false) {
|
||||
deactivateCertificateCheck();
|
||||
}
|
||||
|
||||
URL url = new URL( 'https://' + SystemSpecificConst.baseOdata + '/sap/opu/odata/sap/ZPS_MACHINE_MASTER_SRV/ModuleTextSet?$filter=Deleted%20eq%20false%20&$format=json');
|
||||
|
||||
try {
|
||||
URLConnection con = url.openConnection();
|
||||
|
||||
String userpass = SystemSpecificConst.lUserOdata + ":" + SystemSpecificConst.lPassOdata;
|
||||
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
|
||||
con.setRequestProperty ("Authorization", basicAuth);
|
||||
|
||||
InputStream is = con.getInputStream();
|
||||
String responseValue = IOUtils.toString(is, "UTF-8");
|
||||
is.close();
|
||||
|
||||
JSONObject obj = new JSONObject(responseValue);
|
||||
JSONArray arr = obj.get("d").getJSONArray("results");
|
||||
|
||||
List<String> guidList = new ArrayList<>();
|
||||
HashMap<String, JSONObject> guidJsonObMap = new HashMap<>();
|
||||
|
||||
if(arr.length() > 0) {
|
||||
for (int i = 0; i < arr.length(); i++) {
|
||||
JSONObject metadataObj = arr.getJSONObject(i);
|
||||
|
||||
// Eindeutige GUID einmalig holen
|
||||
String guid = metadataObj.getString("ModuleGUID");
|
||||
boolean exist = guidList.contains(guid);
|
||||
if(exist == false) {
|
||||
guidList.add(guid);
|
||||
}
|
||||
// Je GUID das JsonObject zwischernspeichern - Eine GUID ist nur je Sprache eindeutig, daher Zusammensetzung für den HashMap-Key notwendig
|
||||
String language = metadataObj.getString("LanguageSap");
|
||||
guidJsonObMap.put(guid + "_" + language, metadataObj);
|
||||
}
|
||||
} else {
|
||||
d3.log.error( " ## ValueSetTranslation for MachineDocumentModuls - JSONArray Size = 0 ") ;
|
||||
}
|
||||
|
||||
// für jede eindeutige GUID müssen die weiteren Informationen in der Anmeldesprache gefunden werden
|
||||
// wenn kein Ergebnis gefunden wurde - Fallback Englisch
|
||||
for(String guid : guidList) {
|
||||
JSONObject jsonTempOb = guidJsonObMap.get(guid + "_" + lang);
|
||||
// wenn es Informationen zu der GUID und der Anmeldesprache gibt
|
||||
if(jsonTempOb != null) {
|
||||
// Eindeutige ID holen
|
||||
String id = jsonTempOb.getString("Id");
|
||||
// Beschreibung holen
|
||||
String description = jsonTempOb.getString("Description");
|
||||
transl.set( guid, id + " - " + description);
|
||||
} else {
|
||||
// Fallback - gibt es keine Informationen in der Anmeldesprache, nehme Englisch
|
||||
JSONObject jsonTempObEng = guidJsonObMap.get(guid + "_" + fallbackLangEng);
|
||||
// Eindeutige ID holen
|
||||
String id = jsonTempObEng.getString("Id");
|
||||
// Beschreibung holen
|
||||
String description = jsonTempObEng.getString("Description");
|
||||
//d3.log.error( " ## ValueSetTranslation for MachineDocumentModuls - " + fallbackLangEng + " - " + guid + " - " + id + " - " + description);
|
||||
transl.set( guid, id + " - " + description);
|
||||
}
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
d3.log.error( " ## ValueSetTranslation for MachineDocumentModuls - Exception = " + e.getMessage() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 07.2019 wird produktiv noch nicht genutzt
|
||||
@ValueSetTranslation(entrypoint="MachineDocumentFunctions")
|
||||
def MachineDocumentsFunctionsTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
// Persistierung nur der eindeutigen ID - In der Wertemenge wird über die Translation "ID - Beschreibung" angezeigt"
|
||||
def lang = transl.locale.language
|
||||
lang = lang.toUpperCase();
|
||||
def fallbackLangEng = "EN";
|
||||
|
||||
/*
|
||||
// Create a trust manager that does not validate certificate chains -> entfernt 13.02.2019
|
||||
Dafür ist es erforderlich das Zertifikat in Java als vertrauenswürdig hinzuzufügen:
|
||||
cd D:\d3\d3server.prg\JRE\bin keytool.exe -import -keystore "D:\d3\d3server.prg\JRE\lib\security\cacerts" -file "E:\optima_group_ca.cer"
|
||||
*/
|
||||
|
||||
if(SystemSpecificConst.needCertificateCheck == false) {
|
||||
deactivateCertificateCheck();
|
||||
}
|
||||
|
||||
// aktuell ist es noch nicht möglich ohne Filterung den oData Aufruf auszuführen
|
||||
URL url = new URL('https://' + SystemSpecificConst.baseOdata + '/sap/opu/odata/sap/ZPS_MACHINE_MASTER_SRV/FunctionTextSet?$filter=Deleted%20eq%20false%20&$format=json');
|
||||
|
||||
try {
|
||||
URLConnection con = url.openConnection();
|
||||
|
||||
String userpass = SystemSpecificConst.lUserOdata + ":" + SystemSpecificConst.lPassOdata;
|
||||
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
|
||||
con.setRequestProperty ("Authorization", basicAuth);
|
||||
|
||||
InputStream is = con.getInputStream();
|
||||
String responseValue = IOUtils.toString(is, "UTF-8");
|
||||
is.close();
|
||||
|
||||
JSONObject obj = new JSONObject(responseValue);
|
||||
JSONArray arr = obj.get("d").getJSONArray("results");
|
||||
|
||||
List<String> guidList = new ArrayList<>();
|
||||
HashMap<String, JSONObject> guidJsonObMap = new HashMap<>();
|
||||
|
||||
if(arr.length() > 0) {
|
||||
for (int i = 0; i < arr.length(); i++) {
|
||||
JSONObject metadataObj = arr.getJSONObject(i);
|
||||
|
||||
// Eindeutige GUID einmalig holen
|
||||
String guid = metadataObj.getString("FunctionGUID");
|
||||
boolean exist = guidList.contains(guid);
|
||||
if(exist == false) {
|
||||
guidList.add(guid);
|
||||
}
|
||||
// Je GUID das JsonObject zwischernspeichern - Eine GUID ist nur je Sprache eindeutig, daher Zusammensetzung für den HashMap-Key notwendig
|
||||
String language = metadataObj.getString("LanguageSap");
|
||||
guidJsonObMap.put(guid + "_" + language, metadataObj);
|
||||
}
|
||||
} else {
|
||||
d3.log.error( " ## ValueSetTranslation for MachineDocumentFunctions - JSONArray Size = 0 ") ;
|
||||
}
|
||||
|
||||
// für jede eindeutige GUID müssen die weiteren Informationen in der Anmeldesprache gefunden werden
|
||||
// wenn kein Ergebnis gefunden wurde - Fallback Englisch
|
||||
for(String guid : guidList) {
|
||||
JSONObject jsonTempOb = guidJsonObMap.get(guid + "_" + lang);
|
||||
// wenn es Informationen zu der GUID und der Anmeldesprache gibt
|
||||
if(jsonTempOb != null) {
|
||||
// Eindeutige ID holen
|
||||
String id = jsonTempOb.getString("Id");
|
||||
// Beschreibung holen
|
||||
String description = jsonTempOb.getString("Description");
|
||||
transl.set( guid, id + " - " + description);
|
||||
} else {
|
||||
// Fallback - gibt es keine Informationen in der Anmeldesprache, nehme Englisch
|
||||
JSONObject jsonTempObEng = guidJsonObMap.get(guid + "_" + fallbackLangEng);
|
||||
// Eindeutige ID holen
|
||||
String id = jsonTempObEng.getString("Id");
|
||||
// Beschreibung holen
|
||||
String description = jsonTempObEng.getString("Description");
|
||||
//d3.log.error( " ## ValueSetTranslation for MachineDocumentFunctions - " + fallbackLangEng + " - " + guid + " - " + id + " - " + description);
|
||||
transl.set( guid, id + " - " + description);
|
||||
}
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
d3.log.error( " ## ValueSetTranslation for MachineDocumentFunctions - Exception = " + e.getMessage() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 07.2019 wird produktiv noch nicht genutzt
|
||||
@ValueSetTranslation(entrypoint="MachineDocumentMachineType")
|
||||
def MachineDocumentMachineTypeTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
// Persistierung nur der eindeutigen ID - In der Wertemenge wird über die Translation "ID - Beschreibung" angezeigt"
|
||||
def lang = transl.locale.language
|
||||
lang = lang.toUpperCase();
|
||||
|
||||
/*
|
||||
// Create a trust manager that does not validate certificate chains -> entfernt 13.02.2019
|
||||
Dafür ist es erforderlich das Zertifikat in Java als vertrauenswürdig hinzuzufügen:
|
||||
cd D:\d3\d3server.prg\JRE\bin keytool.exe -import -keystore "D:\d3\d3server.prg\JRE\lib\security\cacerts" -file "E:\optima_group_ca.cer"
|
||||
*/
|
||||
|
||||
if(SystemSpecificConst.needCertificateCheck == false) {
|
||||
deactivateCertificateCheck();
|
||||
}
|
||||
|
||||
URL url = new URL('https://' + SystemSpecificConst.baseOdata + '/sap/opu/odata/sap/ZPS_MACHINE_MASTER_SRV/MachineSimpleSet?$format=json');
|
||||
|
||||
try {
|
||||
URLConnection con = url.openConnection();
|
||||
|
||||
String userpass = SystemSpecificConst.lUserOdata + ":" + SystemSpecificConst.lPassOdata;
|
||||
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
|
||||
con.setRequestProperty ("Authorization", basicAuth);
|
||||
|
||||
InputStream is = con.getInputStream();
|
||||
String responseValue = IOUtils.toString(is, "UTF-8");
|
||||
is.close();
|
||||
|
||||
JSONObject obj = new JSONObject(responseValue);
|
||||
JSONArray arr = obj.get("d").getJSONArray("results");
|
||||
|
||||
for (int i = 0; i < arr.length(); i++)
|
||||
{
|
||||
JSONObject metadataObj = arr.getJSONObject(i);
|
||||
|
||||
// Eindeutige Id holen
|
||||
String id = metadataObj.getString("Id");
|
||||
|
||||
// Beschreibung holen
|
||||
String description = metadataObj.getString("Description");
|
||||
transl.set( id, id + " - " + description);
|
||||
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
d3.log.error( " ## ValueSetTranslation for MachineDocumentModuls - Exception = " + e.getMessage() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="VorlagenProzArtValues")
|
||||
def VorlagenProzArtValuesTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
def lang = transl.locale.language
|
||||
|
||||
if( lang == "de" ) {
|
||||
lang = "DEU"
|
||||
} else if( lang == "en" ) {
|
||||
lang = "ENG"
|
||||
}
|
||||
|
||||
def lSQL = """select fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as LangKey, value_char as TransVal
|
||||
from firm_spez_mult_val as mv
|
||||
join firmen_spezifisch as fs on fs.doku_id = mv.doku_id
|
||||
where field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
and mv.doku_id in (
|
||||
select doku_id
|
||||
from firmen_spezifisch
|
||||
where kue_dokuart = '${Const.gDTS_AZTXT}' )
|
||||
and row_number in (
|
||||
select row_number
|
||||
from firm_spez_mult_val as mv, firmen_spezifisch as fs
|
||||
where value_char like '${lang}%'
|
||||
and field_no = '${Const.gDDF_ISOCODE}'
|
||||
and fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
and fs.doku_id = mv.doku_id )""";
|
||||
|
||||
def resultlist = d3.sql.executeAndGet( lSQL );
|
||||
|
||||
for ( def i = 0; i < resultlist.size(); i++ )
|
||||
{
|
||||
transl.set( resultlist.get(i).get("LangKey"), resultlist.get(i).get("TransVal") );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="RegisterValues")
|
||||
def RegisterTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
//d3.log.error("RegisterValues Translation started");
|
||||
|
||||
def lang = transl.locale.language
|
||||
|
||||
// Erweiterte Eigenschaft Register hat die ID 51 und muss pro System geprüft werden
|
||||
def registerResultsetTransMan = d3.sql.executeAndGet("SELECT value_char_allowed, value_char_transl FROM dbo.doc_field_val_lang WHERE predef_value_id = 51");
|
||||
|
||||
|
||||
|
||||
if( lang == "de" ) {
|
||||
// manuelle Wertemenge
|
||||
for ( int i = 0; i < registerResultsetTransMan.size(); i++ ) {
|
||||
transl.set( registerResultsetTransMan.get(i).get("value_char_allowed"), registerResultsetTransMan.get(i).get("value_char_allowed") );
|
||||
}
|
||||
// dynamische Wertemenge
|
||||
def registerResultsetTransDyn = d3.sql.executeAndGet("SELECT fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as ShortKey, mv.value_char as ValueTrans FROM firmen_spezifisch fs LEFT JOIN firm_spez_mult_val mv ON fs.doku_id = mv.doku_id WHERE fs.kue_dokuart = '${Const.gDTS_AZTXT}' AND fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} LIKE 'DG%' AND field_no = ${Const.gDDF_UEBERSETZUNG} AND mv.row_number = 1");
|
||||
for ( int i = 0; i < registerResultsetTransDyn.size(); i++ ) {
|
||||
transl.set( registerResultsetTransDyn.get(i).get("ShortKey"), registerResultsetTransDyn.get(i).get("ValueTrans") );
|
||||
}
|
||||
} else if( lang == "en" ) {
|
||||
// manuelle Wertemenge
|
||||
for ( int i = 0; i < registerResultsetTransMan.size(); i++ ) {
|
||||
transl.set( registerResultsetTransMan.get(i).get("value_char_allowed"), registerResultsetTransMan.get(i).get("value_char_transl") );
|
||||
}
|
||||
// dynamische Wertemenge
|
||||
def registerResultsetTransDyn = d3.sql.executeAndGet("SELECT fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as ShortKey, mv.value_char as ValueTrans FROM firmen_spezifisch fs LEFT JOIN firm_spez_mult_val mv ON fs.doku_id = mv.doku_id WHERE fs.kue_dokuart = '${Const.gDTS_AZTXT}' AND fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} LIKE 'DG%' AND field_no = ${Const.gDDF_UEBERSETZUNG} AND mv.row_number = 2");
|
||||
for ( int i = 0; i < registerResultsetTransDyn.size(); i++ ) {
|
||||
transl.set( registerResultsetTransDyn.get(i).get("ShortKey"), registerResultsetTransDyn.get(i).get("ValueTrans") );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="OGValues")
|
||||
def OGValuesTranslation(D3Interface d3, Translation transl)
|
||||
{
|
||||
//def lang = transl.locale.language
|
||||
|
||||
//d3.log.info("Groovy - ValueSets: start OGValuesTranslation " + lang + " - locale: " + transl.locale);
|
||||
|
||||
//if( lang == "de" ) {
|
||||
//lang = "DEU"
|
||||
//} else if( lang == "en" ) {
|
||||
//lang = "ENG"
|
||||
//}
|
||||
|
||||
//def lSQL = """ SELECT fs.dok_dat_feld_${Const.gDFF_SCHLUESSEL} as LangKey, mv.value_char as TransVal
|
||||
// FROM firmen_spezifisch fs
|
||||
// LEFT JOIN firm_spez_mult_val mv ON fs.doku_id = mv.doku_id
|
||||
// LEFT JOIN firm_spez_mult_val mv2 ON fs.doku_id = mv2.doku_id AND mv.row_number = mv2.row_number
|
||||
// WHERE fs.kue_dokuart = '${Const.gDTS_AZTXT}'
|
||||
// AND mv.field_no = '${Const.gDDF_UEBERSETZUNG}'
|
||||
// AND mv2.field_no = '${Const.gDDF_ISOCODE}'
|
||||
// AND mv2.value_char LIKE '${lang}%' """;
|
||||
|
||||
//def resultlist = d3.sql.executeAndGet( lSQL );
|
||||
|
||||
//d3.log.info("Es wurden " + resultlist.size() + " Eintraege gefunden!");
|
||||
|
||||
//for ( def i = 0; i < resultlist.size(); i++ )
|
||||
//{
|
||||
// transl.set( resultlist.get(i).get("LangKey"), resultlist.get(i).get("TransVal") );
|
||||
//}
|
||||
|
||||
// Persistierung nur der eindeutigen ID - In der Wertemenge wird über die Translation "ID - Beschreibung" angezeigt"
|
||||
def lang = transl.locale.language
|
||||
lang = lang.toUpperCase();
|
||||
|
||||
/*
|
||||
// Create a trust manager that does not validate certificate chains -> entfernt 13.02.2019
|
||||
Dafür ist es erforderlich das Zertifikat in Java als vertrauenswürdig hinzuzufügen:
|
||||
cd D:\d3\d3server.prg\JRE\bin keytool.exe -import -keystore "D:\d3\d3server.prg\JRE\lib\security\cacerts" -file "E:\optima_group_ca.cer"
|
||||
*/
|
||||
|
||||
if(SystemSpecificConst.needCertificateCheck == false) {
|
||||
deactivateCertificateCheck();
|
||||
}
|
||||
|
||||
URL url = new URL('https://' + SystemSpecificConst.baseOdata + '/sap/opu/odata/sap/ZCA_D3_AUTHORIZATIONS_SRV/OrgUnitSet?$format=json');
|
||||
|
||||
try {
|
||||
URLConnection con = url.openConnection();
|
||||
|
||||
String userpass = SystemSpecificConst.lUserOdata + ":" + SystemSpecificConst.lPassOdata;
|
||||
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
|
||||
con.setRequestProperty ("Authorization", basicAuth);
|
||||
|
||||
InputStream is = con.getInputStream();
|
||||
String responseValue = IOUtils.toString(is, "UTF-8");
|
||||
is.close();
|
||||
|
||||
JSONObject obj = new JSONObject(responseValue);
|
||||
JSONArray arr = obj.get("d").getJSONArray("results");
|
||||
|
||||
for (int i = 0; i < arr.length(); i++)
|
||||
{
|
||||
JSONObject metadataObj = arr.getJSONObject(i);
|
||||
|
||||
// Eindeutige Id holen
|
||||
String id = metadataObj.getString("Id");
|
||||
|
||||
// Beschreibung holen
|
||||
String description = metadataObj.getString("DisplayName");
|
||||
transl.set( id, description);
|
||||
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
d3.log.error( " ## ValueSetTranslation for OGValuesTranslation - Exception = " + e.getMessage() );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="BuchungskreisValues")
|
||||
def getValuesBuchungskreis(D3Interface d3, Translation transl)
|
||||
{
|
||||
// Persistierung nur der eindeutigen ID - In der Wertemenge wird über die Translation "ID - Beschreibung" angezeigt"
|
||||
|
||||
List<String> buchungskreisResultset = [];
|
||||
|
||||
if(SystemSpecificConst.needCertificateCheck == false) {
|
||||
deactivateCertificateCheck();
|
||||
}
|
||||
|
||||
URL url = new URL('https://' + SystemSpecificConst.baseOdata + '/sap/opu/odata/sap/ZCA_D3_VALUE_LISTS_SRV/CompanySet?$format=json&$orderby=CompanyCode');
|
||||
|
||||
try {
|
||||
if(url != null) {
|
||||
URLConnection con = url.openConnection();
|
||||
|
||||
String userpass = SystemSpecificConst.lUserOdata + ":" + SystemSpecificConst.lPassOdata;
|
||||
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
|
||||
con.setRequestProperty ("Authorization", basicAuth);
|
||||
|
||||
InputStream is = con.getInputStream();
|
||||
String responseValue = IOUtils.toString(is, "UTF-8");
|
||||
is.close();
|
||||
|
||||
JSONObject obj = new JSONObject(responseValue);
|
||||
|
||||
JSONArray arr = obj.get("d").getJSONArray("results");
|
||||
for (int i = 0; i < arr.length(); i++)
|
||||
{
|
||||
JSONObject metadataObj = arr.getJSONObject(i);
|
||||
// Buchungskreis holen
|
||||
String companyCode = metadataObj.getString("CompanyCode");
|
||||
|
||||
// Beschreibung holen
|
||||
String description = metadataObj.getString("Description");
|
||||
transl.set( companyCode, companyCode + " | " + description);
|
||||
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
d3.log.error( " ## BuchungskreisTranslationValues - Exception = " + e.getMessage() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ValueSetTranslation(entrypoint="ServicBelegartValues")
|
||||
def ServicBelegartTransValues(D3Interface d3, Translation transl) {
|
||||
|
||||
def lang = transl.locale.language
|
||||
|
||||
d3.log.info("Groovy - ValueSets: start ServicBelegartValues " + lang + " - locale: " + transl.locale);
|
||||
|
||||
if( lang == "de" ) {
|
||||
lang = "DE"
|
||||
} else if( lang == "en" ) {
|
||||
lang = "EN"
|
||||
}
|
||||
|
||||
List<String> buchungskreisResultset = [];
|
||||
|
||||
if(SystemSpecificConst.needCertificateCheck == false) {
|
||||
deactivateCertificateCheck();
|
||||
}
|
||||
|
||||
URL url = new URL("https://" + SystemSpecificConst.baseOdata + "/sap/opu/odata/sap/ZCA_D3_VALUE_LISTS_SRV/DocumentTypeSet?\$format=json&\$filter=LanguageIso%20eq%20'" + lang + "'");
|
||||
|
||||
try {
|
||||
if(url != null) {
|
||||
URLConnection con = url.openConnection();
|
||||
|
||||
String userpass = SystemSpecificConst.lUserOdata + ":" + SystemSpecificConst.lPassOdata;
|
||||
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
|
||||
con.setRequestProperty ("Authorization", basicAuth);
|
||||
|
||||
InputStream is = con.getInputStream();
|
||||
String responseValue = IOUtils.toString(is, "UTF-8");
|
||||
is.close();
|
||||
|
||||
JSONObject obj = new JSONObject(responseValue);
|
||||
|
||||
JSONArray arr = obj.get("d").getJSONArray("results");
|
||||
for (int i = 0; i < arr.length(); i++) {
|
||||
JSONObject metadataObj = arr.getJSONObject(i);
|
||||
// Belegart holen
|
||||
String documentTypeShort = metadataObj.getString("Id");
|
||||
// Beschreibung holen
|
||||
String documentTypeDescription = metadataObj.getString("Description");
|
||||
transl.set( documentTypeShort, documentTypeDescription );
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
d3.log.error( " ## ServicBelegartTransValues - Exception = " + e.getMessage() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Deaktivierung der Zertifikatsprüfung
|
||||
def deactivateCertificateCheck() {
|
||||
// CONNECT WITHOUT SSL CHECK
|
||||
TrustManager[] trustAllCerts = new TrustManager[1]
|
||||
def tm = new X509TrustManager() {
|
||||
public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; }
|
||||
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
|
||||
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
|
||||
}
|
||||
trustAllCerts[0] = tm;
|
||||
SSLContext sc = SSLContext.getInstance("SSL");
|
||||
sc.init(null, trustAllCerts, new java.security.SecureRandom());
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||
HostnameVerifier allHostsValid = new HostnameVerifier() {
|
||||
public boolean verify(String hostname, SSLSession session) { return true; }
|
||||
};
|
||||
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
|
||||
// CONNECT WITHOUT SSL CHECK
|
||||
}
|
||||
|
||||
} // End of file
|
||||
BIN
Optima/_Groovy/case-mngmnt-hook.jar
Normal file
BIN
Optima/_Groovy/case-mngmnt-hook.jar
Normal file
Binary file not shown.
1
Optima/_Groovy/dbsCaseContractHooks.classpath
Normal file
1
Optima/_Groovy/dbsCaseContractHooks.classpath
Normal file
@@ -0,0 +1 @@
|
||||
D:\d3\d3server.prg\ext_groovy\Jar-Files\case-mngmnt-hook.jar
|
||||
408
Optima/_Groovy/dbsCaseContractHooks.groovy
Normal file
408
Optima/_Groovy/dbsCaseContractHooks.groovy
Normal file
@@ -0,0 +1,408 @@
|
||||
import groovy.sql.GroovyRowResult
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field
|
||||
import java.net.URI;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date
|
||||
|
||||
import javax.swing.text.html.FrameSetView;
|
||||
|
||||
import com.dvelop.casemanagement.clients.ConditionExecutionClient;
|
||||
import com.dvelop.casemanagement.clients.HTTPClientException;
|
||||
import com.dvelop.casemanagement.config.io.HookHandler;
|
||||
import com.dvelop.casemanagement.constants.IniConstants;
|
||||
import com.dvelop.d3.server.ArchiveObject;
|
||||
import com.dvelop.d3.server.Condition
|
||||
import com.dvelop.d3.server.Document;
|
||||
import com.dvelop.d3.server.DocumentType;
|
||||
import com.dvelop.d3.server.Entrypoint;
|
||||
import com.dvelop.d3.server.User;
|
||||
import com.dvelop.d3.server.core.D3Interface;
|
||||
|
||||
//TODO: Refactor statics into a util class
|
||||
public class dbsCaseContractHooks {
|
||||
private static HookHandler handler;
|
||||
private static Map<String, Map<String, String>> langMap;
|
||||
private static final int leadingZeroCount = 5;
|
||||
static {
|
||||
langMap = new HashMap<String, Map<String,String>>();
|
||||
langMap.put("001", new HashMap<String, String>());
|
||||
langMap.put("049", new HashMap<String, String>());
|
||||
}
|
||||
private String getTranslation(String language, String key) {
|
||||
Map<String, String> l;
|
||||
if(langMap.containsKey( language)) {
|
||||
l = langMap.get( language);
|
||||
} else {
|
||||
l = langMap.get( "001");
|
||||
}
|
||||
if(l.containsKey(key)) {
|
||||
return l.get(key);
|
||||
}
|
||||
return key;
|
||||
}
|
||||
private static HookHandler getHandler(D3Interface d3) {
|
||||
if(dbsCaseContractHooks.handler == null) {
|
||||
List<String> paths = new ArrayList<String>();
|
||||
for(int i = 0; i < 100; i++) {
|
||||
String path = d3.conf.value("HOOK_GROOVY_DIRS_CUSTOMER", i);
|
||||
if(path != null && path.length() > 0) {
|
||||
paths.add(path);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
dbsCaseContractHooks.handler = new HookHandler(paths);
|
||||
}
|
||||
return dbsCaseContractHooks.handler;
|
||||
}
|
||||
|
||||
@Entrypoint( entrypoint = "hook_upd_attrib_entry_20" )
|
||||
public int hook_upd_attrib_entry_20_dbsContract ( D3Interface d3, Document doc , User user, DocumentType docType, DocumentType docTypeNew) {
|
||||
String docTypeShort = docType.id;
|
||||
if(getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTRAG).equals( docTypeShort) || getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_RAHMEN).equals( docTypeShort)) {
|
||||
String completeAction = "${user.getLongName()} aktualisierte Eigenschaften.".toString();
|
||||
Integer updateField = Integer.parseInt( getHandler(d3).getOption( IniConstants.DBS_CASEORCONTRACT_LASTCHANGEACTION));
|
||||
String currentActionValue = doc.field[updateField];
|
||||
if(currentActionValue == null || "".equals(currentActionValue)) {
|
||||
doc.field[updateField] = completeAction;
|
||||
} else {
|
||||
Document file = d3.archive.getDocument(doc.id, user.id);
|
||||
if(file != null) {
|
||||
String oldValue = file.field[updateField];
|
||||
if(currentActionValue.equals( oldValue )) {
|
||||
doc.field[updateField] = completeAction;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Entrypoint( entrypoint = "hook_insert_exit_20" )
|
||||
public int hook_insert_exit_20_dbsContract (D3Interface d3 , Document doc, String fileDestination, def importOk, User user, DocumentType docType) {
|
||||
// check importOk for int and string -> type change after update of d.3 server
|
||||
if(importOk == "1" || importOk == 1 ) {
|
||||
String docTypeShort = docType.id;
|
||||
String restPath = getHandler(d3).getOption( IniConstants.DBS_PRESENTATION_SERVER_BASE_URL);
|
||||
ConditionExecutionClient client = new ConditionExecutionClient(restPath);
|
||||
switch(docTypeShort) {
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTRAG):
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_RAHMEN):
|
||||
try {
|
||||
d3.log.info("Informing dbs | case manager contract about import of document with doc id " + doc.id + ".");
|
||||
if(!client.importOfDocument( doc.id, user.id)) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about import of document!");
|
||||
return -1;
|
||||
}
|
||||
} catch (HTTPClientException e) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about import of document with doc id " + doc.id + ": " + e.getLogMsg() + " entity was: " + e.getEntityMsg() );
|
||||
return -1;
|
||||
} catch (Exception e) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about import of document with doc id " + doc.id + ": " + e.getMessage() );
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTR_VUNT):
|
||||
try {
|
||||
d3.log.info("Informing dbs | case manager contract about import of contract paper with doc id " + doc.id + ".");
|
||||
if(!client.importOfMail( doc.id)) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about import of contract paper with doc id " + doc.id + ".");
|
||||
return -1;
|
||||
}
|
||||
} catch (HTTPClientException e) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about import of contract paper with doc id " + doc.id + ": " + e.getLogMsg() + " entity was: " + e.getEntityMsg() );
|
||||
return -1;
|
||||
} catch (Exception e) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about import of contract paper with doc id " + doc.id + ": " + e.getMessage() );
|
||||
return -1;
|
||||
}
|
||||
//Break is missing intentionally!
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTR_DOK):
|
||||
updateLastActionOfContract(d3, user, doc, " importierte ein neues Dokument.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Entrypoint( entrypoint = "hook_upd_attrib_exit_20" )
|
||||
public int hook_upd_attrib_exit_20_dbsContract ( D3Interface d3, Document doc , Integer errorCode, User user, DocumentType docType, DocumentType docTypeNew) {
|
||||
if(errorCode == 0) {
|
||||
String docTypeShort = docType.id;
|
||||
String restPath = getHandler(d3).getOption( IniConstants.DBS_PRESENTATION_SERVER_BASE_URL);
|
||||
ConditionExecutionClient client = new ConditionExecutionClient(restPath);
|
||||
switch(docTypeShort) {
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTRAG):
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_RAHMEN):
|
||||
try {
|
||||
d3.log.info("Informing dbs | case manager contract about update of document with doc id " + doc.id + ".");
|
||||
if(!client.updateOfDocument( doc.id, user.id)) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about update of document with doc id " + doc.id + ".");
|
||||
return -1;
|
||||
}
|
||||
} catch (HTTPClientException e) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about update of document with doc id " + doc.id + ": " + e.getLogMsg() + " entity was: " + e.getEntityMsg() );
|
||||
return -1;
|
||||
} catch (Exception e) {
|
||||
d3.log.error("Could not inform dbs | case manager contract about update of document with doc id " + doc.id + ": " + e.getMessage() );
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTR_DOK):
|
||||
case getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTR_VUNT):
|
||||
updateLastActionOfContract(d3, user, doc, " aktualisierte ein bestehendes Dokument.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void updateLastActionOfContract(D3Interface d3, User user, Document doc, String action) {
|
||||
Integer internalNumberField = Integer.parseInt( getHandler(d3).getOption(IniConstants.DBS_VERTRAGSNUMMER));
|
||||
Integer updateField = Integer.parseInt( getHandler(d3).getOption( IniConstants.DBS_CASEORCONTRACT_LASTCHANGEACTION));
|
||||
String frameStart = getHandler(d3).getOption( IniConstants.DBS_PREFIX_RAHMEN);
|
||||
String docTypeFather = getHandler(d3).getOption( IniConstants.DBS_KUE_DOKUART_VERTRAG);
|
||||
String internalNumberFather = doc.field[internalNumberField];
|
||||
if(internalNumberFather != null && internalNumberFather.startsWith( frameStart)) {
|
||||
docTypeFather = getHandler(d3).getOption( IniConstants.DBS_KUE_DOKUART_RAHMEN);
|
||||
}
|
||||
if(internalNumberField != null && updateField != null && internalNumberFather != null && docTypeFather != null ) {
|
||||
def query = "SELECT doku_id FROM firmen_spezifisch WHERE dok_dat_feld_${internalNumberField} = ? AND kue_dokuart = ?";
|
||||
def params = [internalNumberFather, docTypeFather];
|
||||
GroovyRowResult resultRow = d3.sql.firstRow(query, params);
|
||||
if(resultRow != null && resultRow.containsKey("doku_id" ) && resultRow.getProperty("doku_id") != null) {
|
||||
String docIdFile = resultRow.getProperty("doku_id");
|
||||
String completeAction = "${user.getLongName()} ${action}".toString();
|
||||
Document file = d3.archive.getDocument(docIdFile, user.id);
|
||||
if(file != null) {
|
||||
file.field[updateField] = completeAction;
|
||||
file.updateAttributes(user.id, true);
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException("Could not find any contract files with the internal contract number ${internalNumberFather}" );
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException("dbs | case manager contract hook configuration not found or the configuration was not completed! Please check your configuration.");
|
||||
}
|
||||
}
|
||||
|
||||
// To provide the hook for entrypoint 'hook_validate_import_entry_10' uncomment the following annotation.
|
||||
// Mind that for this method the d.3 server version 8.1 is required.
|
||||
@Entrypoint( entrypoint = "hook_validate_import_entry_10" )
|
||||
public int hook_validate_import_entry_10_dbsContract ( D3Interface d3, User user, DocumentType docType, Document doc, String nextcall ) {
|
||||
String docTypeContractRV = getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_RAHMEN);
|
||||
String docTypeContractEV = getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTRAG);
|
||||
String docTypeContractEVDOK = getHandler(d3).getOption( IniConstants.DBS_KUE_DOKUART_VERTR_DOK);
|
||||
String docTypeContractEVUNT = getHandler( d3).getOption( IniConstants.DBS_KUE_DOKUART_VERTR_VUNT);
|
||||
String docTypeShort = docType.id;
|
||||
Integer internalNumberField = Integer.parseInt( getHandler(d3).getOption(IniConstants.DBS_VERTRAGSNUMMER));
|
||||
|
||||
if(docTypeContractRV == null || docTypeContractEV == null || docTypeContractEVDOK == null || docTypeContractEVUNT == null) {
|
||||
throw new RuntimeException("dbs | case manager hook configuration not found or the configuration was not completed! Please check your configuration.");
|
||||
}
|
||||
try
|
||||
{
|
||||
if( docTypeContractRV.equals(docTypeShort) || docTypeContractEV.equals(docTypeShort)) {
|
||||
String importAction = "${user.getLongName()} importierte Akte.".toString();
|
||||
Integer updateField = Integer.parseInt( getHandler(d3).getOption( IniConstants.DBS_CASEORCONTRACT_LASTCHANGEACTION));
|
||||
doc.field[updateField] = importAction;
|
||||
}
|
||||
// date validation if activated in administration
|
||||
if ( Integer.parseInt( getHandler(d3).getOption( IniConstants.DBS_VALIDATEDATE)) == 1) {
|
||||
if ( docTypeContractEV.equals( docTypeShort)) {
|
||||
d3.log.info("checking internal contract number for blanket contract agreement");
|
||||
Integer internalFrameContractNumberField = Integer.parseInt( getHandler( d3).getOption( IniConstants.DBS_VERTRAG_DOKDAT_RAHMEN));
|
||||
String internalFrameContractNumber = doc.field[internalFrameContractNumberField];
|
||||
if ( internalFrameContractNumber != null && internalFrameContractNumber != "" ) {
|
||||
Integer startDateField = Integer.parseInt(getHandler( d3).getOption( IniConstants.DBS_CONTRACT_STARTDATE_CONTRACT));
|
||||
Date startDateEV = doc.field[startDateField];
|
||||
Integer endDateField = Integer.parseInt(getHandler( d3).getOption( IniConstants.DBS_CONTRACT_ENDDATE_CONTRACT));
|
||||
Date endDateEV = doc.field[endDateField];
|
||||
String docIdFrameContract = getDocId(d3, internalFrameContractNumber, docTypeContractRV, internalNumberField);
|
||||
if ( docIdFrameContract != "" ) {
|
||||
d3.log.info("comparing contract start / end dates with corresponding dates of blanket contract agreement")
|
||||
Date startDateRV = getDate(d3, docIdFrameContract, docTypeContractRV, startDateField);
|
||||
if (startDateRV != null ) {
|
||||
if (startDateEV != null && startDateEV.before( startDateRV)) {
|
||||
d3.log.error("An error occurred validating the contract dates! The specified start date lies before the start date of the blanket agreement.");
|
||||
return -8140505;
|
||||
}
|
||||
if ( endDateEV != null && endDateEV.before( startDateRV)) {
|
||||
d3.log.error("An error occurred validating the contract dates! The specified end date lies before the start date of the blanket agreement.");
|
||||
return -8140506;
|
||||
}
|
||||
}
|
||||
Date endDateRV = getDate(d3, docIdFrameContract, docTypeContractRV, endDateField);
|
||||
if (endDateRV != null ){
|
||||
if (startDateEV != null && startDateEV.after( endDateRV)) {
|
||||
d3.log.error("An error occurred validating the contract dates! The specified start date lies after the end date of the blanket agreement.");
|
||||
return -8140507;
|
||||
}
|
||||
if ( endDateEV != null && endDateEV.after( endDateRV)) {
|
||||
d3.log.error("An error occurred validating the contract dates! The specified end date lies after the end date of the blanket agreement.");
|
||||
return -8140508;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
d3.log.error("Please check the specified internal contract number for the blanket agreement.");
|
||||
return -8140502;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( docTypeContractEV.equals( docTypeShort) || docTypeContractRV.equals( docTypeShort) || docTypeContractEVDOK.equals( docTypeShort)) {
|
||||
if ( doc.field[internalNumberField] != null && doc.field[internalNumberField] != "") {
|
||||
d3.log.info("docfield[${internalNumberField}] for the internal contract number was not empty");
|
||||
int numberOfFoundInternalContractNumber = countExistingInternalContractNumber(d3, docTypeShort, doc.field[internalNumberField], internalNumberField );
|
||||
if (numberOfFoundInternalContractNumber >= 1) {
|
||||
d3.log.info("next api function: ${nextcall}");
|
||||
if ( !"ImportNewVersionDocument".equals( nextcall) || numberOfFoundInternalContractNumber > 1 ) {
|
||||
d3.log.error("Please check the internal contract number. The internal contract number '${doc.field[internalNumberField]}' is already assigned to other contract files and it is forbidden to use duplicates.");
|
||||
return -8140503;
|
||||
}
|
||||
}
|
||||
doc.number = doc.field[internalNumberField];
|
||||
return 0;
|
||||
} else {
|
||||
if ( doc.number != null && doc.number != "") {
|
||||
d3.log.info("doc number was not empty");
|
||||
doc.field[internalNumberField] = doc.number;
|
||||
int numberOfFoundInternalContractNumber = countExistingInternalContractNumber(d3, docTypeShort, doc.field[internalNumberField], internalNumberField );
|
||||
if (numberOfFoundInternalContractNumber >= 1) {
|
||||
d3.log.error("Please check the internal contract number. The internal contract number '${doc.field[internalNumberField]}' is already assigned to other contract files and it is forbidden to use duplicates.");
|
||||
return -8140503;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
d3.log.info("Need to generate a new number: ");
|
||||
setNextContractNumber(d3, docType, doc);
|
||||
} else if ( docTypeContractEVUNT.equals( docTypeShort)) {
|
||||
int numberOfFoundInternalContractNumberEV = countExistingInternalContractNumber(d3, docTypeContractEV, doc.field[internalNumberField], internalNumberField );
|
||||
if ( numberOfFoundInternalContractNumberEV == 0 ) {
|
||||
int numberOfFoundInternalContractNumberRV = countExistingInternalContractNumber(d3, docTypeContractRV, doc.field[internalNumberField], internalNumberField );
|
||||
if ( numberOfFoundInternalContractNumberRV == 0) {
|
||||
d3.log.error("Please check the internal contract number.");
|
||||
return -8140509;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( Exception e)
|
||||
{
|
||||
d3.log.error("An Exception occured: ${e.getCause()} StackTrace: ${e}");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
private void setNextContractNumber(D3Interface d3, DocumentType docType, Document doc) {
|
||||
String docTypeContractRV = getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_RAHMEN);
|
||||
String docTypeContractEV = getHandler(d3).getOption(IniConstants.DBS_KUE_DOKUART_VERTRAG);
|
||||
if(docTypeContractRV == null || docTypeContractEV == null) {
|
||||
throw new RuntimeException("dbs | case manager hook configuration not found or the configuration was not completed! Please check your configuration.");
|
||||
}
|
||||
String prefixType = null;
|
||||
String docTypeShortForPrefix = docTypeContractEV;
|
||||
if ( docType.id == docTypeContractRV){
|
||||
docTypeShortForPrefix = docTypeContractRV;
|
||||
}
|
||||
switch(docTypeShortForPrefix) {
|
||||
case docTypeContractRV:
|
||||
prefixType = IniConstants.DBS_PREFIX_RAHMEN;
|
||||
break;
|
||||
case docTypeContractEV:
|
||||
prefixType = IniConstants.DBS_PREFIX_ID;
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("The hook function \"setNextContractNumber\" was called with an unknown doc type! Expected ${docTypeContractEV} or ${docTypeContractRV} but was ${docTypeShortForPrefix}");
|
||||
}
|
||||
String configuredPrefix = getHandler(d3).getOption(prefixType);
|
||||
Integer internalNumberField = Integer.parseInt( getHandler(d3).getOption(IniConstants.DBS_VERTRAGSNUMMER));
|
||||
if(configuredPrefix == null || internalNumberField == null) {
|
||||
throw new RuntimeException("dbs | case manager hook configuration not found or the configuration was not completed! Please check your configuration.");
|
||||
}
|
||||
|
||||
GroovyObject prefixGenerator = preparePrefixGenerator(d3);
|
||||
String prefix = prefixGenerator.generateContractNumberPrefix(configuredPrefix);
|
||||
d3.log.info("Generated prefix for internal contract number: ${prefix}");
|
||||
|
||||
String query = "select max( dok_dat_feld_${internalNumberField} ) as docNumberCount from firmen_spezifisch where kue_dokuart = ? and (dok_dat_feld_${internalNumberField} like ?)";
|
||||
GroovyRowResult resultRow = d3.sql.firstRow(query, [docTypeShortForPrefix, (prefix + "%")]);
|
||||
int number = 0;
|
||||
if(resultRow != null && resultRow.containsKey("docNumberCount" ) && resultRow.getProperty("docNumberCount") != null) {
|
||||
Integer result = Integer.parseInt(resultRow.getProperty("docNumberCount").substring( prefix.length()));
|
||||
number = result != null ? result : 0;
|
||||
}
|
||||
number++;
|
||||
|
||||
String numberString = String.valueOf( number);
|
||||
if(numberString.length() > leadingZeroCount) {
|
||||
throw new RuntimeException("Could not generate a valid contract number. There are no more contract numbers left! Please use a higher leading zero count.");
|
||||
}
|
||||
while(numberString.length() < leadingZeroCount) {
|
||||
numberString = "0" + numberString;
|
||||
}
|
||||
|
||||
String contractNumberResult = prefix + numberString;
|
||||
d3.log.info("Generated contractNumber: ${contractNumberResult} setting docfield[${internalNumberField}]");
|
||||
doc.field[internalNumberField] = contractNumberResult;
|
||||
doc.number = contractNumberResult;
|
||||
}
|
||||
|
||||
private int countExistingInternalContractNumber(D3Interface d3, String docTypeShort, String internalNumberValue, Integer internalNumberField ) {
|
||||
int countedInternalNumbers = 0;
|
||||
if ( internalNumberValue == null || internalNumberValue.trim().equals( "")){
|
||||
return countedInternalNumbers;
|
||||
}
|
||||
String query = "select count( doku_id) as countedIdenticalInternalNumbers from firmen_spezifisch where kue_dokuart = ? and (dok_dat_feld_${internalNumberField} = ?)";
|
||||
List<Object> params = [docTypeShort, internalNumberValue];
|
||||
GroovyRowResult resultRow = d3.sql.firstRow(query, params);
|
||||
if(resultRow != null && resultRow.containsKey("countedIdenticalInternalNumbers" ) && resultRow.getProperty("countedIdenticalInternalNumbers") != null) {
|
||||
countedInternalNumbers = resultRow.getProperty("countedIdenticalInternalNumbers");
|
||||
}
|
||||
return countedInternalNumbers;
|
||||
}
|
||||
|
||||
private String getDocId( D3Interface d3, String internalContractNumber, String docTypeShort, Integer internalNumberField) {
|
||||
String docId = "";
|
||||
String query = "SELECT doku_id FROM firmen_spezifisch WHERE dok_dat_feld_${internalNumberField} = ? AND kue_dokuart = ?";
|
||||
List<Object> params = [internalContractNumber, docTypeShort];
|
||||
List<GroovyRowResult> resultRowList = d3.sql.executeAndGet( query, params, 2);
|
||||
if(resultRowList != null ) {
|
||||
if (resultRowList.size() == 2) {
|
||||
d3.log.error("More than one blanket agreement with the internal contract number ${internalContractNumber} was found.");
|
||||
} else if ( resultRowList.size() == 1) {
|
||||
docId = resultRowList[0].getProperty("doku_id");
|
||||
}
|
||||
}
|
||||
return docId;
|
||||
}
|
||||
|
||||
private Date getDate(D3Interface d3, String docId, String docTypeShort, Integer dateField) {
|
||||
Date requestedDate = null;
|
||||
String query = "select dok_dat_feld_${dateField} as returnedDate from firmen_spezifisch where kue_dokuart = ? and doku_id = ?";
|
||||
List<Object> params = [ docTypeShort, docId];
|
||||
GroovyRowResult resultRow = d3.sql.firstRow(query, params);
|
||||
if(resultRow != null && resultRow.containsKey("returnedDate" ) && resultRow.getProperty("returnedDate") != null) {
|
||||
requestedDate = resultRow.getProperty("returnedDate");
|
||||
}
|
||||
return requestedDate;
|
||||
}
|
||||
|
||||
private GroovyObject preparePrefixGenerator(D3Interface d3) {
|
||||
String currentPath = getClass().protectionDomain.codeSource.location.path;
|
||||
d3.log.info("Looking for file to generate prefix here (encoded): ${currentPath}");
|
||||
URI uri = new URI(currentPath);
|
||||
d3.log.info("Looking for file to generate prefix here (decoded): ${uri.getPath()}");
|
||||
File sourceFilePrefixGeneration = new File(new File( uri.getPath()).getParentFile(), "dbsCaseContractHooks_prefixGen.groovy");
|
||||
d3.log.info("Found file to generate prefix: ${sourceFilePrefixGeneration.getPath()}");
|
||||
Class prefixGenerationClass = new GroovyClassLoader(getClass().getClassLoader()).parseClass(sourceFilePrefixGeneration);
|
||||
GroovyObject prefixGenerationObject = (GroovyObject) prefixGenerationClass.newInstance();
|
||||
return prefixGenerationObject;
|
||||
}
|
||||
}
|
||||
15
Optima/_Groovy/dbsCaseContractHooks_prefixGen.groovy
Normal file
15
Optima/_Groovy/dbsCaseContractHooks_prefixGen.groovy
Normal file
@@ -0,0 +1,15 @@
|
||||
public class dbsCaseContractHooks_prefixGen {
|
||||
|
||||
/* ########################################################################################
|
||||
* ################### The functions below may be edited by customers #####################
|
||||
* ########################################################################################
|
||||
*/
|
||||
public String generateContractNumberPrefix(String configuredPrefix) {
|
||||
int year = Calendar.getInstance().get( Calendar.YEAR);
|
||||
if ( configuredPrefix == null || configuredPrefix == ""){
|
||||
return "${year}-";
|
||||
} else {
|
||||
return "${configuredPrefix}-${year}-";
|
||||
}
|
||||
}
|
||||
}
|
||||
34
Optima/_Groovy/dbsCase_contract_functions.ini
Normal file
34
Optima/_Groovy/dbsCase_contract_functions.ini
Normal file
@@ -0,0 +1,34 @@
|
||||
# Version: 1.0.0.3
|
||||
#
|
||||
# Beschreibung dieser Datei
|
||||
#
|
||||
# dbsCase_vertragsnummer - Datenbankposition der Vertragsnummer intern
|
||||
# dbsCase_dokuart_vertrag_kue - Kürzel der Dokumentart der Verträge
|
||||
# dbsCase_dokuart_vertrag_vunt_kue - Kürzel der Dokumentart der vertragsrelevanten Unterlagen
|
||||
#
|
||||
# Description of this file
|
||||
#
|
||||
# dbsCase_vertragsnummer - Database location of the Internal contract number
|
||||
# dbsCase_dokuart_vertrag_kue - doc_type_short of doctype "Contracts"
|
||||
# dbsCase_dokuart_vertrag_vunt_kue - doc_type_short of doctype "Contract related documents"
|
||||
#
|
||||
|
||||
|
||||
[dbsContractFunctions]
|
||||
dbsCase_vertragsnummer = 1
|
||||
dbsCase_vorgangsnummer = 1
|
||||
dbsCase_vertrag_dokdat_rahmen = 13
|
||||
dbsCase_contract_startDate_contract = 51
|
||||
dbsCase_contract_endDate_contract = 52
|
||||
dbsCase_caseOrContract_lastChangeAction = 47
|
||||
dbsCase_dokuart_rahmen_kue = RVERT
|
||||
dbsCase_dokuart_vertrag_kue = EVERT
|
||||
dbsCase_dokuart_vorgang_kue = CASE
|
||||
dbsCase_dokuart_vorgang_dok_kue = DCASE
|
||||
dbsCase_dokuart_vertrag_dok_kue = EVDOK
|
||||
dbsCase_dokuart_vertrag_vunt_kue = EVUNT
|
||||
dbsCase_prefix_id = DV
|
||||
dbsCase_prefix_rahmen = RV
|
||||
dbsCase_prefix_vorgang =
|
||||
dbsCase_validateDate = 1
|
||||
dbsCase_presentation_server_base_url = https://sde01d3p01.optima-group.org:8444/case-mngmnt-core/
|
||||
602
Stadt Essen/proz01_prozessakte.groovy
Normal file
602
Stadt Essen/proz01_prozessakte.groovy
Normal file
@@ -0,0 +1,602 @@
|
||||
|
||||
// (1) Global d.3 libraries
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.User
|
||||
import com.dvelop.d3.server.Condition
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import groovy.sql.GroovyRowResult
|
||||
|
||||
import com.dvelop.d3.server.ValueSet
|
||||
import com.dvelop.d3.server.RepositoryField
|
||||
|
||||
import java.sql.Timestamp
|
||||
import java.util.Calendar
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
// Libraries to handle the different hook types
|
||||
import com.dvelop.d3.server.Entrypoint
|
||||
|
||||
public class proz01_prozessakte {
|
||||
boolean logging = true;
|
||||
|
||||
private static int POS_AZ = 1;
|
||||
private static int POS_Jahr = 2;
|
||||
private static int POS_StatZ = 3;
|
||||
private static int POS_GerichtAZ = 4;
|
||||
private static int POS_Klaeger = 9;
|
||||
private static int POS_Zda = 13;
|
||||
private static int POS_Beklaeger = 15;
|
||||
private static int POS_AusArt = 23;
|
||||
private static int POS_DokGrp = 30;
|
||||
private static int POS_DokTyp = 31;
|
||||
private static int POS_AusDat = 51;
|
||||
private static int POS_ZLM = 35;
|
||||
private static int POS_LOESCHGRD = 36;
|
||||
private static int POS_GADRESSE = 33;
|
||||
private static int POS_Gericht = 20;
|
||||
private static int POS_DOKIDORG = 10;
|
||||
private static int POS_DOKDAT = 55;
|
||||
// Feldpostitionen Adressverwaltung
|
||||
private static int POS_FFOE = 2;
|
||||
private static int POS_Name = 9;
|
||||
private static int POS_Strasse = 21;
|
||||
private static int POS_Hnr = 29;
|
||||
private static int POS_Plz = 24;
|
||||
private static int POS_Ort = 25;
|
||||
|
||||
private static String WM_TRENNZEICHEN = ";";
|
||||
|
||||
// Variablen - Aufbewahrungsfristen (in Jahren)
|
||||
private static int FRIST_AUSSONDERUNG = 10; // 10 Jahre
|
||||
private static int STATUS_ZDA = 0;
|
||||
private static int NEUES_AZ = 0;
|
||||
private static int CHANGE_GERICHT = 0;
|
||||
|
||||
// Datenbanktabelle
|
||||
private static String TB_DokGrpTyp = "DV_PROZ_Doktyp";
|
||||
|
||||
private static String G01_DS_PROZESSA = "APROZ";
|
||||
private static String G01_DS_PROZESSD = "DPROZ";
|
||||
private static String G01_DS_ORGANI = "DPROZ";
|
||||
|
||||
|
||||
// Offenbar eigentlich zentral abzulegen
|
||||
|
||||
private static String G01_STR_JA = "Ja";
|
||||
private static String G01_STR_NEIN = "Nein";
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_insert_entry_10" )
|
||||
public int hook_insert_entry_10(D3Interface d3, User user, DocumentType docType, Document doc)
|
||||
{
|
||||
|
||||
!logging ?: d3.log.info(" hook_insert_entry_10: Anfang")
|
||||
proz01_split_AZ( 1, doc, d3 );
|
||||
proz01_split_Gericht( doc, d3 );
|
||||
!logging ?: d3.log.info(" hook_insert_entry_10: Ende")
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_insert_exit_10" )
|
||||
public int hookInsertExit10 (D3Interface d3, Document doc, String fileDestination, Integer importOk, User user, DocumentType docType)
|
||||
{
|
||||
!logging ?: d3.log.info("START | hookInsertExit10 ");
|
||||
|
||||
if ( docType == G01_DS_PROZESSA )
|
||||
{
|
||||
proz01_fill_AZ_Nummer( 0, doc, d3 );
|
||||
}
|
||||
|
||||
|
||||
!logging ?: d3.log.info("ENDE | hookInsertExit10 ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_upd_attrib_entry_20" )
|
||||
public int hookUpdAttribEntry20(D3Interface d3, Document doc, User user, DocumentType docType, DocumentType docTypeNew)
|
||||
{
|
||||
d3.log.info("START | hookUpdAttribEntry20")
|
||||
|
||||
// temporäres Objekt holen, um zu prüfen, das sich Eigenschaften geändert haben
|
||||
def oldDocAttributes = d3.archive.getDocument(doc.id());
|
||||
//d3.log.error( "1 Dokumentart: " + docType.id() );
|
||||
//d3.log.error( "1 Gericht (" + POS_Gericht + "): " + doc.field[ POS_Gericht ] + " ll " + oldDocAttributes.field[ POS_Gericht ] );
|
||||
//d3.log.error( "1 Adresse (" + POS_GADRESSE + "): " + doc.field[ POS_GADRESSE ] + " ll " + oldDocAttributes.field[ POS_GADRESSE ] );
|
||||
|
||||
if ( docType.id() == G01_DS_ORGANI )
|
||||
{
|
||||
if ( doc.field[ POS_Name ] != oldDocAttributes.field[ POS_Name ] )
|
||||
{
|
||||
CHANGE_GERICHT = 1;
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_Strasse ] != oldDocAttributes.field[ POS_Strasse ] )
|
||||
{
|
||||
CHANGE_GERICHT = 1;
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_Hnr ] != oldDocAttributes.field[ POS_Hnr ] )
|
||||
{
|
||||
CHANGE_GERICHT = 1;
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_Plz ] != oldDocAttributes.field[ POS_Plz ] )
|
||||
{
|
||||
CHANGE_GERICHT = 1;
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_Ort ] != oldDocAttributes.field[ POS_Ort ] )
|
||||
{
|
||||
CHANGE_GERICHT = 1;
|
||||
}
|
||||
|
||||
d3.log.error( "hookUpdAttribEntry20 " + CHANGE_GERICHT );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
proz01_split_AZ( 1, doc, d3 );
|
||||
proz01_split_Gericht( doc, d3 );
|
||||
|
||||
if ( doc.field[ POS_Zda ] != oldDocAttributes.field[ POS_Zda ] )
|
||||
{
|
||||
STATUS_ZDA = 1;
|
||||
}
|
||||
|
||||
// Wenn das Feld zum Löschen markiert auf Ja gesetzt wurde, überprüfe ob beim Löschgrund etwas eingetragen wurde. Falls nicht, gebe eine Fehlermeldung aus.
|
||||
// Wenn das Feld zum Löschen markiert auf Nein gesetzt wurde, dann leere das Feld Löschgrund
|
||||
|
||||
if ( doc.field[ POS_ZLM ] != oldDocAttributes.field[ POS_ZLM ] )
|
||||
{
|
||||
if ( doc.field[ POS_ZLM ] == G01_STR_JA )
|
||||
{
|
||||
if ( doc.field[ POS_LOESCHGRD ] == "" )
|
||||
{
|
||||
return -403;
|
||||
}
|
||||
}
|
||||
else if ( doc.field[ POS_ZLM ] == G01_STR_NEIN )
|
||||
{
|
||||
doc.field[ POS_LOESCHGRD ] = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ( docType.id() == G01_DS_PROZESSA ) && ( doc.field[ POS_Jahr ] != oldDocAttributes.field[ POS_Jahr ] ) )
|
||||
{
|
||||
NEUES_AZ = 1;
|
||||
}
|
||||
|
||||
d3.log.error( "2 Dokumentart: " + docType.id() );
|
||||
d3.log.error( "2 Gericht (" + POS_Gericht + "): " + doc.field[ POS_Gericht ] + " ll " + oldDocAttributes.field[ POS_Gericht ] );
|
||||
d3.log.error( "2 Adresse (" + POS_GADRESSE + "): " + doc.field[ POS_GADRESSE ] + " ll " + oldDocAttributes.field[ POS_GADRESSE ] );
|
||||
|
||||
if ( ( docType.id() == G01_DS_PROZESSA ) && ( ( doc.field[ POS_Gericht ] != oldDocAttributes.field[ POS_Gericht ] ) || ( doc.field[ POS_GADRESSE ] != oldDocAttributes.field[ POS_GADRESSE ] ) ) )
|
||||
{
|
||||
def sqlQuery = "SELECT dok_dat_feld_" + POS_Name + " POS_Name, dok_dat_feld_" + POS_Strasse + " POS_Strasse, dok_dat_feld_" + POS_Hnr + " POS_Hnr, dok_dat_feld_" + POS_Plz + " POS_Plz, dok_dat_feld_" + POS_Ort + " POS_Ort FROM firmen_spezifisch WHERE kue_dokuart = 'AAORG' AND dok_dat_feld_" + POS_Name + " = '" + doc.field[POS_Gericht] + "'";
|
||||
|
||||
def ergebnis = d3.sql.executeAndGet( sqlQuery );
|
||||
//d3.log.error( "Name: " + ergebnis[ 0 ].POS_Name );
|
||||
//d3.log.error( "POS_Strasse: " + ergebnis[ 0 ].POS_Strasse );
|
||||
//d3.log.error( "POS_Hnr: " + ergebnis[ 0 ].POS_Hnr );
|
||||
//d3.log.error( "POS_Plz: " + ergebnis[ 0 ].POS_Plz );
|
||||
//d3.log.error( "POS_Ort: " + ergebnis[ 0 ].POS_Ort );
|
||||
|
||||
|
||||
|
||||
|
||||
if ( ( ergebnis[ 0 ].POS_Name == "" ) || ( ergebnis[ 0 ].POS_Strasse == "" ) || ( ergebnis[ 0 ].POS_Hnr == "" ) || ( ergebnis[ 0 ].POS_Plz == "" ) || ( ergebnis[ 0 ].POS_Ort == "" ) )
|
||||
{
|
||||
//Gerichtsdaten nicht gepflegt! Bitte in der Organisation pflegen.
|
||||
return -569;
|
||||
}
|
||||
|
||||
def Gerichtsadresse = ergebnis[ 0 ].POS_Strasse + " " + ergebnis[ 0 ].POS_Hnr + ", " + ergebnis[ 0 ].POS_Plz + " " + ergebnis[ 0 ].POS_Ort;
|
||||
|
||||
if ( Gerichtsadresse != doc.field[ POS_GADRESSE ] )
|
||||
{
|
||||
//Gerichtsadresse entspricht nicht dem aktuell ausgewählten Gericht!
|
||||
return -570;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
d3.log.info("ENDE | hookUpdAttribEntry20")
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_upd_attrib_exit_20" )
|
||||
public int hookUpdAttribExit20(D3Interface d3, Document doc, Integer errorCode, User user, DocumentType docType, DocumentType docTypeOld)
|
||||
{
|
||||
d3.log.info("START | hookUpdAttribExit20 ")
|
||||
|
||||
def strZDA, strDatum;
|
||||
|
||||
if ( ( NEUES_AZ == 1 ) && ( docType != G01_DS_ORGANI ) )
|
||||
{
|
||||
NEUES_AZ = 0;
|
||||
proz01_fill_AZ_Nummer( doc, d3, 1 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ( ( STATUS_ZDA == 1 ) && ( docType != G01_DS_ORGANI ) )
|
||||
{
|
||||
STATUS_ZDA = 0;
|
||||
|
||||
if ( doc.field[ POS_Zda ] == G01_STR_JA )
|
||||
{
|
||||
strZDA = G01_STR_JA;
|
||||
strDatum = proz01_getAussonderungsdatum( FRIST_AUSSONDERUNG );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( doc.field[ POS_Zda ] == G01_STR_NEIN )
|
||||
{
|
||||
strZDA = G01_STR_NEIN;
|
||||
strDatum = "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// hier wird das docSearchCreate übernommen; dafür gibt es aber aktuell keine Entsprechung in Groovy.
|
||||
// das wird in Groovy direkt umgesetzt; d.h. man macht das manuell, was der JPL-Massenänderungs-Code en gros macht:
|
||||
|
||||
def massen_sql = "select doku_id from firmen_spezifisch where ( kue_dokuart = '" + G01_DS_PROZESSA + "' or kue_dokuart = '" + G01_DS_PROZESSD + "' ) and dok_dat_feld_" + POS_AZ + " = '" + doc.field(POS_AZ) + "'";
|
||||
|
||||
def massen_ergebnis = d3.sql.executeAndGet( massen_sql );
|
||||
|
||||
if ( massen_ergebnis.size() > 0 )
|
||||
{
|
||||
int i;
|
||||
for ( i = 0 ; i < massen_ergebnis.size(); i++ )
|
||||
{
|
||||
def updateDoc = d3.archive.getDocument( massen_ergebnis[ i ].doku_id );
|
||||
|
||||
updateDoc.field[ POS_Zda ] = strZDA;
|
||||
updateDoc.field[ POS_AusDat ] = strDatum;
|
||||
updateDoc.field[ POS_AusArt ] = doc.field[ POS_AusArt ];
|
||||
updateDoc.updateAttributes( "Master" );
|
||||
}
|
||||
}
|
||||
|
||||
if ( CHANGE_GERICHT == 1 && docType == G01_DS_ORGANI )
|
||||
{
|
||||
CHANGE_GERICHT = 0;
|
||||
|
||||
def m_sql2 = "SELECT dok_dat_feld_" + POS_Name + " name, dok_dat_feld_" + POS_Strasse + " strasse, dok_dat_feld_" + POS_Hnr + " hnr, dok_dat_feld_" + POS_Plz + " plz, dok_dat_feld_" + POS_Ort + " ort FROM firmen_spezifisch WHERE kue_dokuart = 'AAORG' AND doku_id = '" + doc.id + "'";
|
||||
|
||||
def me2 = d3.sql.executeAndGet( m_sql2 );
|
||||
|
||||
if ( me2.size() == 1 )
|
||||
{
|
||||
def strGAdresse = me2[ 0 ].strasse + " " + me2[ 0 ].hnr + " " + me2[ 0 ].plz + " " + me2[ 0 ].ort;
|
||||
|
||||
m_sql3 = "select doku_id from firmen_spezifisch where kue_dokuart = '" + G01_DS_PROZESSA + "' and dok_dat_feld_" + POS_DOKIDORG + " = '" + doc.id + "'";
|
||||
|
||||
def me3 = d3.sql.executeAndGet( m_sql1 );
|
||||
|
||||
if ( me3.size() > 0 )
|
||||
{
|
||||
def ud2 = d3.archive.getDocument( me3[ i ].doku_id );
|
||||
|
||||
ud2.field[ POS_GADRESSE ] = strGAdresse;
|
||||
ud2.field[ POS_Gericht ] = me2[ 0 ].name;
|
||||
|
||||
ud2.updateAttributes( "Master" );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
d3.log.info("ENDE | hookUpdAttribExit20 ")
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_validate_update_entry_10" )
|
||||
public int hookValidateUpdateEntry10(D3Interface d3, User user, DocumentType docType, Document doc, String nextcall) {
|
||||
d3.log.error("START | hookValidateUpdateEntry10 ");
|
||||
|
||||
proz01_split_AZ( 1, doc, d3 );
|
||||
proz01_split_Gericht( doc, d3 );
|
||||
|
||||
d3.log.error("ENDE | hookValidateUpdateEntry10 ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_search_entry_10" )
|
||||
public int hookSearchEntry10(D3Interface d3, User user, DocumentType docType, Document searchContext) {
|
||||
d3.log.error("START | hookSearchEntry10 ");
|
||||
|
||||
proz01_split_AZ( 0, searchContext, d3 );
|
||||
proz01_split_Gericht( searchContext, d3 );
|
||||
|
||||
d3.log.error("ENDE | hookSearchEntry10 ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
// Wertemengenhooks
|
||||
///////////////////////////////////////
|
||||
|
||||
|
||||
@ValueSet( entrypoint = "proz01_fill_Klaeger" )
|
||||
def proz01_fill_Klaeger( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def where = "";
|
||||
|
||||
if ( doc.field[ POS_Klaeger ] != null )
|
||||
{
|
||||
if ( doc.field[ POS_Klaeger ].length() >= 3 )
|
||||
{
|
||||
where = " AND (dok_dat_feld_" + POS_AZ + " LIKE '%" + doc.field[ POS_Klaeger ] + "%' OR dok_dat_feld_" + POS_Klaeger + " LIKE '%" + doc.field[ POS_Klaeger ] + "%')";
|
||||
}
|
||||
}
|
||||
|
||||
def sqlStatement = "SELECT DISTINCT top 1000 dok_dat_feld_" + POS_AZ + " feld_1, dok_dat_feld_" + POS_Klaeger + " feld_2, dok_dat_feld_" + POS_GerichtAZ + " feld_3 FROM firmen_spezifisch WHERE kue_dokuart = '" + G01_DS_PROZESSA + "' " + where;
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlStatement );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.feld_1 + ";" + it.feld_2 + ";" + it.feld_3 } );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ValueSet( entrypoint = "proz01_fill_Beklagter" )
|
||||
def proz01_fill_Beklagter( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def where = "";
|
||||
|
||||
if ( doc.field[ POS_Beklaeger ] != null )
|
||||
{
|
||||
if ( doc.field[ POS_Beklaeger ].length() >= 3 )
|
||||
{
|
||||
where = " AND (dok_dat_feld_" + POS_Beklaeger + " LIKE '%" + doc.field[ POS_Beklaeger ] + "%' )";
|
||||
}
|
||||
}
|
||||
|
||||
def sqlStatement = "SELECT DISTINCT top 1000 dok_dat_feld_" + POS_Beklaeger + " feld_1 FROM firmen_spezifisch WHERE kue_dokuart = '" + G01_DS_PROZESSA + "'" + where;
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlStatement );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.feld_1 } );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ValueSet( entrypoint = "proz01_WM_DOKGRP" )
|
||||
def proz01_WM_DOKGRP( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def where = "";
|
||||
|
||||
if ( ( doc.field[ POS_DokTyp ] != "" ) && ( doc.field[ POS_DokTyp ] != null ) && ( doc.field[ POS_DokTyp ] != "null" ) )
|
||||
{
|
||||
where = " where Dokumenttyp = '" + doc.field[ POS_DokTyp ] + "'";
|
||||
}
|
||||
|
||||
def sqlStatement = "select distinct Dokumentgruppe from " + TB_DokGrpTyp;
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlStatement );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.Dokumentgruppe } );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ValueSet( entrypoint = "proz01_WM_DOKTYP" )
|
||||
def proz01_WM_DOKTYP( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def where = "";
|
||||
|
||||
if ( ( doc.field[ POS_DokGrp ] != "" ) && ( doc.field[ POS_DokGrp ] != null ) && ( doc.field[ POS_DokGrp ] != "null" ) )
|
||||
{
|
||||
where = " where Dokumentgruppe = '" + doc.field[ POS_DokGrp ] + "'";
|
||||
}
|
||||
|
||||
def sqlStatement = "select distinct Dokumenttyp from " + TB_DokGrpTyp + where;
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlStatement );
|
||||
|
||||
d3.log.error( sqlStatement );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.Dokumenttyp } );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ValueSet( entrypoint = "proz01_getGericht" )
|
||||
def proz01_getGericht( D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def where = "";
|
||||
|
||||
if ( doc.field[ POS_Gericht ] != null )
|
||||
{
|
||||
if ( doc.field[ POS_Gericht ].length() >= 3 )
|
||||
{
|
||||
where = " AND dok_dat_feld_" + POS_Name + " LIKE '%:" + doc.field[ POS_Gericht ] + "%' ";
|
||||
}
|
||||
}
|
||||
|
||||
def sqlQuery = "SELECT fs.dok_dat_feld_" + POS_Name + " feld_1, fs.dok_dat_feld_" + POS_Strasse + " feld_2, fs.dok_dat_feld_" + POS_Hnr + " feld_3, fs.dok_dat_feld_" + POS_Plz + " feld_4, fs.dok_dat_feld_" + POS_Ort + " feld_5, fs.doku_id \
|
||||
FROM firmen_spezifisch fs \
|
||||
LEFT JOIN benutzergruppen gruppe \
|
||||
ON gruppe.benutzergruppe = fs.dok_dat_feld_" + POS_FFOE + " \
|
||||
Left JOIN benutzer_in_gruppe bInGrp \
|
||||
ON gruppe.gruppen_id = bInGrp.benutzergruppe \
|
||||
WHERE fs.kue_dokuart = 'AAORG' AND (bInGrp.benutzername = '" + user + "' OR fs.dok_dat_feld_" + POS_FFOE + " IS NULL) " + where;
|
||||
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.feld_1 + "|" + it.feld_2 + "|" + it.feld_3 + "|" + it.feld_4 + "|" + it.feld_5 + "|" + it.doku_id } );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
// Arbeitsfunktionen
|
||||
///////////////////////////////////////
|
||||
|
||||
|
||||
//////////////////// proz01_split_AZ /////////////////////////////////////////////////
|
||||
// Funktion zum Aufteilen des Feldes Aktenzeichen nach AZ;Klaeger;Gerichtszeichen
|
||||
// und fuellen in die jeweiligen Felder
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void proz01_split_AZ( int NotSearch, Document doc, D3Interface d3 )
|
||||
{
|
||||
def strKlaeger = doc.field[ POS_Klaeger ].toString();
|
||||
|
||||
if ( strKlaeger != null )
|
||||
{
|
||||
def erg = strKlaeger.tokenize( WM_TRENNZEICHEN );
|
||||
|
||||
if ( erg.size() > 2 )
|
||||
{
|
||||
doc.field[ POS_Klaeger ] = "";
|
||||
doc.field[ POS_AZ ] = erg[ 0 ];
|
||||
|
||||
if ( NotSearch == 1 )
|
||||
{
|
||||
doc.field[ POS_Klaeger ] = erg[ 1 ];
|
||||
doc.field[ POS_GerichtAZ ] = erg[ 2 ];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////// proz01_fill_AZ_Nummer //////////////////////////////////////
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void proz01_fill_AZ_Nummer( Document doc, D3Interface d3, int update )
|
||||
{
|
||||
|
||||
def treffer;
|
||||
def strNummer;
|
||||
|
||||
if ( update == 0 )
|
||||
{
|
||||
def sqlQuery = "SELECT TOP (1) right(dok_dat_feld_" + POS_AZ + ", 4) + 1 nummero_uno from firmen_spezifisch WHERE kue_dokuart = '" + G01_DS_PROZESSA + "' ORDER BY right(dok_dat_feld_" + POS_AZ +" ,4) DESC ";
|
||||
|
||||
treffer = d3.sql.executeAndGet( (String) sqlQuery );
|
||||
|
||||
strNummer = doc.field[ POS_Jahr ] + "-" + (String) treffer[ 0 ].nummero_uno.padLeft( 4, '0' );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( update == 1 )
|
||||
{
|
||||
if ( doc.field[ POS_AZ ] != null )
|
||||
{
|
||||
def docfield_pos_az = doc.field[ POS_AZ ].toString();
|
||||
|
||||
def tok = docfield_pos_az.tokenize( "-" );
|
||||
if ( tok.size() > 1 )
|
||||
{
|
||||
strNummer = doc.field[ POS_Jahr ] + "-" + tok.get(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def currentDoc = d3.archive.getDocument( doc.id );
|
||||
currentDoc.field[ POS_AZ ] = strNummer;
|
||||
currentDoc.updateAttributes( "Master" );
|
||||
|
||||
// Update-Call returniert nichts definitiv Verwertbares, daher wird keine Logmeldung ausgegeben (anders als im JPL-Code).
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////// l01_split_Gericht /////////////////////////////////////////////////
|
||||
// Funktion zum Aufteilen des Felds Aktenzeichen nach AZ;Klaeger;Gerichtszeichen
|
||||
// und fuellen in die jeweiligen Felder
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void proz01_split_Gericht( Document doc, D3Interface d3 )
|
||||
{
|
||||
def strGericht = doc.field[ POS_Gericht ].toString();
|
||||
|
||||
if ( strGericht != null )
|
||||
{
|
||||
def erg = strGericht.tokenize( "|" );
|
||||
|
||||
if ( erg.size() > 1 )
|
||||
{
|
||||
doc.field[ POS_Gericht ] = erg[ 0 ];
|
||||
doc.field[ POS_GADRESSE ] = erg[ 1 ] + " " + erg[ 2 ] + ", " + erg[ 3 ] + " " + erg[ 4 ];
|
||||
doc.field[ POS_DOKIDORG ] = erg[ 5 ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////// proz01_getAussonderungsdatum /////////////////////////////////////////////////
|
||||
// Liefert das Aussonderungsdatum anhand einer Frist
|
||||
// Parameter: iFrist - Aufbewahrungsfrist
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public String proz01_getAussonderungsdatum( String iFrist )
|
||||
{
|
||||
def ergebnis = "";
|
||||
|
||||
Date date = new Date();
|
||||
|
||||
int dateYear = date.format( "yyyy" );
|
||||
|
||||
ergebnis = dateYear + iFrist;
|
||||
|
||||
return "31.12." + ergebnis;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
578
Stadt Essen/proz01_prozessakte.jpl
Normal file
578
Stadt Essen/proz01_prozessakte.jpl
Normal file
@@ -0,0 +1,578 @@
|
||||
// ##################### Stadt Essen - Prozessakte ######################
|
||||
|
||||
// Dokumentarten - in g01 deklariert
|
||||
//global G01_DS_PROZESSA = "APROZ"
|
||||
//global G01_DS_PROZESSD = "DPROZ"
|
||||
|
||||
// Feldpositionen
|
||||
vars POS_AZ = 1
|
||||
vars POS_Jahr = 2
|
||||
vars POS_StatZ = 3
|
||||
vars POS_GerichtAZ = 4
|
||||
vars POS_Klaeger = 9
|
||||
vars POS_Zda = 13
|
||||
vars POS_Beklaeger = 15
|
||||
vars POS_AusArt = 23
|
||||
vars POS_DokGrp = 30
|
||||
vars POS_DokTyp = 31
|
||||
vars POS_AusDat = 51
|
||||
vars POS_ZLM = 35
|
||||
vars POS_LOESCHGRD = 36
|
||||
vars POS_GADRESSE = 33
|
||||
vars POS_Gericht = 20
|
||||
vars POS_DOKIDORG = 10
|
||||
|
||||
// Feldpostitionen Adressverwaltung
|
||||
vars POS_FFOE = 2
|
||||
vars POS_Name = 9
|
||||
vars POS_Strasse = 21
|
||||
vars POS_Hnr = 29
|
||||
vars POS_Plz = 24
|
||||
vars POS_Ort = 25
|
||||
|
||||
// Variablen - Aufbewahrungsfristen (in Jahren)
|
||||
vars FRIST_AUSSONDERUNG = 10 // 10 Jahre
|
||||
vars WM_TRENNZEICHEN = ";"
|
||||
vars STATUS_ZDA = 0
|
||||
vars NEUES_AZ = 0
|
||||
vars CHANGE_GERICHT = 0
|
||||
|
||||
// Datenbanktabelle
|
||||
vars TB_DokGrpTyp = "DV_PROZ_Doktyp"
|
||||
|
||||
/////////////////////////// proz01_insert_entry_10 /////////////////////////////////////
|
||||
// Vor Archivierung
|
||||
// Uebernehmen der Werte aus der Akte
|
||||
// Vorbelegen der laufenden Nummer
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_insert_entry_10(user_ref, doc_type_short)
|
||||
{
|
||||
call proz01_split_AZ(1)
|
||||
call proz01_split_Gericht()
|
||||
}
|
||||
|
||||
/////////////////////////// proz01_insert_exit_10 ///////////////////////////////////////
|
||||
// nach dem Import, Rollback noch moeglich
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_insert_exit_10 (doc_id, file_destination, import_ok, user_ref, doc_type_short)
|
||||
{
|
||||
if(doc_type_short == G01_DS_PROZESSA)
|
||||
{
|
||||
// Erstellung des Aktenzeichens
|
||||
vars update = 0
|
||||
call proz01_fill_AZ_Nummer(doc_id, update)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////// proz01_upd_attrib_entry_20 ////////////////////////////
|
||||
// vor Änderung von Attributwerten
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_upd_attrib_entry_20(doc_id, user_ref, doc_type_short, doc_type_short_new)
|
||||
{
|
||||
if(doc_type_short == G01_DS_ORGANI)
|
||||
{
|
||||
if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Name], POS_Name) == 1)
|
||||
{
|
||||
CHANGE_GERICHT = 1
|
||||
}
|
||||
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Strasse], POS_Strasse) == 1)
|
||||
{
|
||||
CHANGE_GERICHT = 1
|
||||
}
|
||||
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Hnr], POS_Hnr) == 1)
|
||||
{
|
||||
CHANGE_GERICHT = 1
|
||||
}
|
||||
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Plz], POS_Plz) == 1)
|
||||
{
|
||||
CHANGE_GERICHT = 1
|
||||
}
|
||||
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Ort], POS_Ort) == 1)
|
||||
{
|
||||
CHANGE_GERICHT = 1
|
||||
}
|
||||
call api_log_error("proz01_upd_attrib_entry_20 Adresse verändert? :CHANGE_GERICHT ")
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
call proz01_split_AZ(1)
|
||||
call proz01_split_Gericht()
|
||||
|
||||
if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Zda], POS_Zda) == 1)
|
||||
{
|
||||
STATUS_ZDA = 1
|
||||
}
|
||||
|
||||
// Wenn das Feld zum Löschen markiert auf Ja gesetzt wurde, überprüfe ob beim Löschgrund etwas eingetragen wurde. Falls nicht, gebe eine Fehlermeldung aus.
|
||||
// Wenn das Feld zum Löschen markiert auf Nein gesetzt wurde, dann leere das Feld Löschgrund
|
||||
if(dok_dat_feld[POS_ZLM] != get_doc_property(doc_id, "doc_field[:POS_ZLM]"))
|
||||
{
|
||||
if(dok_dat_feld[POS_ZLM] == G01_STR_JA)
|
||||
{
|
||||
if(dok_dat_feld[POS_LOESCHGRD] == "")
|
||||
{
|
||||
return -403 //Bitte geben Sie einen Löschgrund an!
|
||||
}
|
||||
}
|
||||
else if(dok_dat_feld[POS_ZLM] == G01_STR_NEIN)
|
||||
{
|
||||
dok_dat_feld[POS_LOESCHGRD] = ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(doc_type_short == G01_DS_PROZESSA && g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Jahr], POS_Jahr) == 1)
|
||||
{
|
||||
NEUES_AZ = 1
|
||||
}
|
||||
|
||||
// hinzugefügt am 13.02.23 - Bei manueller Änderung des Feld Aktenzeichen wird eine Fehlermeldung ausgegeben
|
||||
//if((user_ref != "d3_async" || user_ref != "Master" ) && g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_AZ], POS_AZ) == 1)
|
||||
//{
|
||||
// call api_log_error("proz01_upd_attrib_entry_20 - Das aktenezichen wurde von :user_ref verändert!")
|
||||
// return -403
|
||||
//}
|
||||
|
||||
|
||||
if(doc_type_short == G01_DS_PROZESSA && (g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Gericht], POS_Gericht) == 1 || g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_GADRESSE], POS_GADRESSE) == 1))
|
||||
{
|
||||
vars DocID, Name, Strasse, PLZ, Ort, Hnr, iCnt
|
||||
|
||||
DBMS ALIAS Name, Strasse, Hnr, PLZ, Ort
|
||||
DBMS SQL SELECT dok_dat_feld_:POS_Name, dok_dat_feld_:POS_Strasse, dok_dat_feld_:POS_Hnr, dok_dat_feld_:POS_Plz, dok_dat_feld_:POS_Ort \
|
||||
FROM firmen_spezifisch \
|
||||
WHERE kue_dokuart = 'AAORG' AND dok_dat_feld_:POS_Name = :+dok_dat_feld[POS_Gericht] //AND doku_id = :+doc_id
|
||||
iCnt = @dmrowcount
|
||||
DBMS ALIAS
|
||||
|
||||
|
||||
|
||||
if(Name == "" || Strasse == "" || Hnr == "" || PLZ == "" || Ort == "")
|
||||
{
|
||||
//Gerichtsdaten nicht gepflegt! Bitte in der Organisation pflegen.
|
||||
return -569
|
||||
}
|
||||
|
||||
vars Gerichtsadresse = Strasse ## " " ## Hnr ## ", " ## PLZ ## " " ## Ort
|
||||
call api_log_error("Änderung Ticket vor IF Gerichtsadresse - :Strasse :Hnr :PLZ :Ort")
|
||||
if(Gerichtsadresse != dok_dat_feld[POS_GADRESSE])
|
||||
{
|
||||
//Gerichtsadresse entspricht nicht dem aktuell ausgewählten Gericht!
|
||||
return -570
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//////////////////////////////// ld01_upd_attrib_exit_20 /////////////////////////////
|
||||
// UpdateAttribute: NACH Aenderung
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_upd_attrib_exit_20(doc_id, error_number, user_ref, doc_type_short, doc_type_short_old)
|
||||
{
|
||||
// Update des Aktenzeichens bei Änderung des Jahres
|
||||
if(NEUES_AZ == 1 && doc_type_short != G01_DS_ORGANI)
|
||||
{
|
||||
NEUES_AZ = 0
|
||||
vars update = 1
|
||||
call proz01_fill_AZ_Nummer(doc_id, update)
|
||||
}
|
||||
|
||||
|
||||
if(STATUS_ZDA == 1 && doc_type_short != G01_DS_ORGANI)
|
||||
{
|
||||
STATUS_ZDA = 0
|
||||
|
||||
vars strZDA, strDatum
|
||||
|
||||
if(dok_dat_feld[POS_Zda] == G01_STR_JA)
|
||||
{
|
||||
strZDA = G01_STR_JA
|
||||
strDatum = proz01_getAussonderungsdatum(FRIST_AUSSONDERUNG)
|
||||
}
|
||||
else if(dok_dat_feld[POS_Zda] == G01_STR_NEIN)
|
||||
{
|
||||
strZDA = G01_STR_NEIN
|
||||
strDatum = ""
|
||||
}
|
||||
|
||||
call docSearchCreate()
|
||||
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSA)
|
||||
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSD)
|
||||
call docSearchAddSearchParam("doc_field[:POS_AZ]", "==", dok_dat_feld[POS_AZ])
|
||||
call docSearchAddReplacementParam("doc_field[:POS_Zda]", "*", strZDA)
|
||||
call docSearchAddReplacementParam("doc_field[:POS_AusDat]", "*", strDatum)
|
||||
call docSearchAddReplacementParam("doc_field[:POS_AusArt]", "*", dok_dat_feld[POS_AusArt])
|
||||
call docSearchExecute()
|
||||
call docSearchDestroy()
|
||||
}
|
||||
|
||||
if(CHANGE_GERICHT == 1 && doc_type_short == G01_DS_ORGANI)
|
||||
{
|
||||
CHANGE_GERICHT = 0
|
||||
|
||||
vars strDocID, strNameNeu, strStrasseNeu, strPLZNeu, strOrtNeu, strHnrNeu, iCnt
|
||||
|
||||
DBMS ALIAS strNameNeu, strStrasseNeu, strHnrNeu, strPLZNeu, strOrtNeu
|
||||
DBMS SQL SELECT dok_dat_feld_:POS_Name, dok_dat_feld_:POS_Strasse, dok_dat_feld_:POS_Hnr, dok_dat_feld_:POS_Plz, dok_dat_feld_:POS_Ort \
|
||||
FROM firmen_spezifisch \
|
||||
WHERE kue_dokuart = 'AAORG' AND doku_id = :+doc_id
|
||||
iCnt = @dmrowcount
|
||||
DBMS ALIAS
|
||||
|
||||
call api_log_error("proz01_upd_attrib_exit_20 Datenbankabfrage durchgelaufen iCnt => :iCnt")
|
||||
|
||||
if(iCnt == 1)
|
||||
{
|
||||
vars strGAdresse = strStrasseNeu ## " " ## strHnrNeu ## ", " ## strPLZNeu ## " " ## strOrtNeu
|
||||
call api_log_error("proz01_upd_attrib_exit_20 neue Adresse => :strGAdresse neuer Name => :strNameNeu")
|
||||
|
||||
call docSearchCreate()
|
||||
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSA)
|
||||
call docSearchAddSearchParam("doc_field[:POS_DOKIDORG]", "==", doc_id)
|
||||
call docSearchAddReplacementParam("doc_field[:POS_GADRESSE]", "*", strGAdresse)
|
||||
call docSearchAddReplacementParam("doc_field[:POS_Gericht]", "*", strNameNeu)
|
||||
call docSearchExecute()
|
||||
call docSearchDestroy()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////// proz01_validate_update_entry_10 ///////////////////////
|
||||
// Vor Pruefen der Daten vor dem Ändern
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_validate_update_entry_10(user_ref, doc_type_short)
|
||||
{
|
||||
call api_log_error("proz01_validate_update_entry_10 gestartet")
|
||||
call proz01_split_AZ(1)
|
||||
call proz01_split_Gericht()
|
||||
}
|
||||
|
||||
/////////////////////////// proz01_search_entry_10 /////////////////////////////////////
|
||||
// vor der Recherche
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_search_entry_10(user_ref, doc_type_short)
|
||||
{
|
||||
call proz01_split_AZ(0)
|
||||
call proz01_split_Gericht()
|
||||
|
||||
}
|
||||
|
||||
|
||||
////////////////// Wertemengenhooks ////////////////////////////////////////////////
|
||||
|
||||
//////////////////// proz01_fill_Klaeger /////////////////////////////////////////////////
|
||||
// Wertemengenhook zum fuellen des Felds Kläger mit AZ;Klaeger;Gerichtszeichen
|
||||
// aus der Datenbank
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_fill_Klaeger(repos_id)
|
||||
{
|
||||
vars iRet, iCnt, i
|
||||
vars strAZ[1000], strKlaeger[1000], strGerichtsZ[1000]
|
||||
|
||||
vars strEingabe = dok_dat_feld[POS_Klaeger]
|
||||
vars igetippt = @length(strEingabe)
|
||||
vars igetippt_min = 3
|
||||
|
||||
if(igetippt >= igetippt_min)
|
||||
{
|
||||
DBMS ALIAS strAZ, strKlaeger, strGerichtsZ
|
||||
DBMS SQL SELECT DISTINCT dok_dat_feld_:POS_AZ, dok_dat_feld_:POS_Klaeger, dok_dat_feld_:POS_GerichtAZ \
|
||||
FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA AND (dok_dat_feld_:POS_AZ LIKE '%:strEingabe%' OR dok_dat_feld_:POS_Klaeger LIKE '%:strEingabe%')
|
||||
iRet = @dmretcode
|
||||
iCnt = @dmrowcount
|
||||
DBMS ALIAS
|
||||
|
||||
for i = 1 while (i <= iCnt) step 1
|
||||
{
|
||||
d3server_value_char_allowed[i] = strAZ[i] ## ";" ## strKlaeger[i] ## ";" ## strGerichtsZ[i]
|
||||
d3server_repos_id_allowed[i] = repos_id
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//////////////////// proz01_fill_Beklagter /////////////////////////////////////////////////
|
||||
// Wertemengenhook zum fuellen des Felds Beklagter mit AZ;Beklagter;Gerichtszeichen
|
||||
// aus der Datenbank
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_fill_Beklagter(repos_id)
|
||||
{
|
||||
vars iRet, iCnt, i
|
||||
vars strAZ[1000], strBeklagter[1000], strGerichtsZ[1000]
|
||||
|
||||
vars strEingabe = dok_dat_feld[POS_Beklaeger]
|
||||
vars igetippt = @length(strEingabe)
|
||||
vars igetippt_min = 3
|
||||
|
||||
/*
|
||||
if(igetippt >= igetippt_min)
|
||||
{
|
||||
DBMS ALIAS strAZ, strBeklagter, strGerichtsZ
|
||||
DBMS SQL SELECT DISTINCT dok_dat_feld_:POS_AZ, dok_dat_feld_:POS_Beklaeger, dok_dat_feld_:POS_GerichtAZ \
|
||||
FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA AND (dok_dat_feld_:POS_AZ LIKE '%:strEingabe%' OR dok_dat_feld_:POS_Beklaeger LIKE '%:strEingabe%')
|
||||
iRet = @dmretcode
|
||||
iCnt = @dmrowcount
|
||||
DBMS ALIAS
|
||||
|
||||
for i = 1 while (i <= iCnt) step 1
|
||||
{
|
||||
d3server_value_char_allowed[i] = strAZ[i] ## ";" ## strBeklagter[i] ## ";" ## strGerichtsZ[i]
|
||||
d3server_repos_id_allowed[i] = repos_id
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
//Neu erstellt von N.Tietjen 25.10.2022
|
||||
if(igetippt >= igetippt_min)
|
||||
{
|
||||
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
|
||||
DBMS SQL SELECT DISTINCT dok_dat_feld_:POS_Beklaeger, :+repos_id \
|
||||
FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA AND dok_dat_feld_:POS_Beklaeger LIKE '%:strEingabe%'
|
||||
iRet = @dmretcode
|
||||
iCnt = @dmrowcount
|
||||
DBMS ALIAS
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//////////////////proz01_WM_DOKGRP ////////////////////////////////////////////////
|
||||
proc proz01_WM_DOKGRP(repos_id)
|
||||
{
|
||||
vars strDokTyp = dok_dat_feld[POS_DokTyp]
|
||||
|
||||
if(strDokTyp != "")
|
||||
{
|
||||
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
|
||||
DBMS SQL SELECT DISTINCT Dokumentgruppe, ':repos_id' FROM :TB_DokGrpTyp WHERE Dokumenttyp = :+strDokTyp
|
||||
DBMS ALIAS
|
||||
}
|
||||
else
|
||||
{
|
||||
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
|
||||
DBMS SQL SELECT DISTINCT Dokumentgruppe, ':repos_id' FROM :TB_DokGrpTyp
|
||||
DBMS ALIAS
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////proz01_WM_DOKTYP ////////////////////////////////////////////////
|
||||
proc proz01_WM_DOKTYP(repos_id)
|
||||
{
|
||||
vars strDokGrp = dok_dat_feld[POS_DokGrp]
|
||||
|
||||
if(strDokGrp != "")
|
||||
{
|
||||
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
|
||||
DBMS SQL SELECT DISTINCT Dokumenttyp, ':repos_id' FROM :TB_DokGrpTyp WHERE Dokumentgruppe = :+strDokGrp
|
||||
DBMS ALIAS
|
||||
}
|
||||
else
|
||||
{
|
||||
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
|
||||
DBMS SQL SELECT DISTINCT Dokumenttyp, ':repos_id' FROM :TB_DokGrpTyp
|
||||
DBMS ALIAS
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////// UNTERFUNKTIONEN ////////////////////////////////////////////////
|
||||
|
||||
//////////////////// l01_split_AZ /////////////////////////////////////////////////
|
||||
// Funktion zum des Felds Aktenzeichen nach AZ;Klaeger;Gerichtszeichen
|
||||
// und fuellen in die jeweiligen Felder
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_split_AZ(NotSearch)
|
||||
{
|
||||
vars strKlaeger = dok_dat_feld[POS_Klaeger]
|
||||
//call api_log_error("proz01_split_AZ gestartet - strKlaeger => :strKlaeger")
|
||||
|
||||
vars iSplit = api_function("string_split", strKlaeger, WM_TRENNZEICHEN)
|
||||
|
||||
//call api_log_error("proz01_split_AZ - NotSearch => :NotSearch iSplit => :iSplit")
|
||||
|
||||
if(iSplit > 2)
|
||||
{
|
||||
// Neu hinzugefügt - Leeren des Feldes Kläger bei der Suche - LH 06.12.22
|
||||
dok_dat_feld[POS_Klaeger] = ""
|
||||
dok_dat_feld[POS_AZ] = api_splitted_string[1]
|
||||
|
||||
if(NotSearch == 1)
|
||||
{
|
||||
//call api_log_error("proz01_split_AZ - in NotSearch")
|
||||
dok_dat_feld[POS_Klaeger] = api_splitted_string[2]
|
||||
dok_dat_feld[POS_GerichtAZ] = api_splitted_string[3]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////// proz01_WM_AZ_Nummer //////////////////////////////////////
|
||||
// Wertemenge für laufende Nummer
|
||||
// Zusammengesetzt aus: Fortlaufende Nummer, Herrsteller, Anwendungsbezeichnung
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_fill_AZ_Nummer(doc_id, update)
|
||||
{
|
||||
vars iRet, iCnt
|
||||
vars strNummer, sqlCount
|
||||
vars strJahr = dok_dat_feld[POS_Jahr]
|
||||
vars strLNR = dok_dat_feld[POS_AZ]
|
||||
|
||||
if (update == 0)
|
||||
{
|
||||
/*DBMS ALIAS sqlCount
|
||||
DBMS SQL SELECT COUNT(*) FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA
|
||||
iRet = @dmretcode
|
||||
if(iRet != 0 && iRet != DM_NO_MORE_ROWS)
|
||||
{
|
||||
call api_log_error ("proz01_fill_AZ_Nummer => Fehler beim Ermitteln von Prozessakten. FEHLER: :iRet")
|
||||
}
|
||||
DBMS ALIAS
|
||||
*/
|
||||
DBMS ALIAS sqlCount
|
||||
DBMS SQL SELECT TOP (1) right(dok_dat_feld_:POS_AZ, 4) + 1 from firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA ORDER BY right(dok_dat_feld_:POS_AZ,4) DESC
|
||||
iRet = @dmretcode
|
||||
if(iRet != 0 && iRet != DM_NO_MORE_ROWS)
|
||||
{
|
||||
call api_log_error ("proz01_fill_AZ_Nummer => Fehler beim Ermitteln von Prozessakten. FEHLER: :iRet")
|
||||
}
|
||||
DBMS ALIAS
|
||||
|
||||
|
||||
vars string strCount = sqlCount
|
||||
iRet = api_function ("string_fill_leading_char", strCount, 0, 4)
|
||||
strNummer = strJahr ## "-" ## api_converted_string
|
||||
}
|
||||
else if(update == 1)
|
||||
{
|
||||
vars strTrennzeichen = "-"
|
||||
vars iSplit = api_function("string_split", strLNR, strTrennzeichen)
|
||||
if (iSplit > 1)
|
||||
{
|
||||
strNummer = strJahr ## "-" ## api_splitted_string[2]
|
||||
}
|
||||
}
|
||||
|
||||
iRet = api_function ("attribute_update_single", POS_AZ , strNummer, "", doc_id, "")
|
||||
|
||||
if(iRet != 0 )
|
||||
{
|
||||
call api_log_error ("proz01_fill_AZ_Nummer => Fehler beim Setzen des Aktenzeichens für :doc_id . FEHLER: :iRet")
|
||||
}
|
||||
|
||||
// Vererbung des neuen Gerichtsaktenzeichens auf die darunterliegenden Dokumente - soll nicht umgesetzt werden
|
||||
/*if(iRet == 0 && update == 1)
|
||||
{
|
||||
call docSearchCreate()
|
||||
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSD)
|
||||
call docSearchAddSearchParam("doc_field[:POS_AZ]", "==", strLNR)
|
||||
call docSearchAddReplacementParam("doc_field[:POS_AZ]", "*", strNummer)
|
||||
call docSearchExecute()
|
||||
call docSearchDestroy()
|
||||
} */
|
||||
|
||||
// Kategorie-Kürzel ermitteln
|
||||
//strNummer = api_str_sub( strNummer, 4, 4) //Position Trennzeichen für Kategorie-Kürzel
|
||||
//call api_log_error("proz01_fill_AZ_Nummer nach splitten der Funktion strNummer => :strNummer ")
|
||||
|
||||
/*if(iCnt == 1 && strNummer != -1)
|
||||
{
|
||||
vars strLNr = strNummer + 0001
|
||||
iRet = api_function ("string_fill_leading_char", strLNr, 0, 4)
|
||||
call api_log_error("proz01_fill_AZ_Nummer nach splitten der Funktion strLNr => :strLNr iRet => :iRet")
|
||||
if(iRet >= 0)
|
||||
{
|
||||
d3server_value_char_allowed = strJahr ## "-" ## strLNr
|
||||
d3server_repos_id_allowed = repos_id
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Auslesen des Gerichts und dessen Adresse aus der Adressverwaltung
|
||||
// Einfügen in die Felder Gericht und Gerichtadresse
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
proc proz01_getGericht(repos_id, user, doc_type_short)
|
||||
{
|
||||
vars strGericht = dok_dat_feld[POS_Gericht]
|
||||
vars strGAdresse = dok_dat_feld[POS_GADRESSE]
|
||||
vars strEingabe = dok_dat_feld[POS_Strasse]
|
||||
|
||||
vars strGName[1000], strGStrasse[1000], strGHNR[1000], strGPLZ[1000], strGOrt[1000], strDokId[1000]
|
||||
vars iCnt, iRet, i
|
||||
vars igetippt = @length(strGericht)
|
||||
vars igetippt_min = 2
|
||||
|
||||
if(igetippt >= igetippt_min)
|
||||
{
|
||||
/*DBMS ALIAS strGName, strGStrasse, strGHNR, strGPLZ, strGOrt
|
||||
DBMS SQL SELECT dok_dat_feld_:POS_Name, dok_dat_feld_:POS_Strasse, dok_dat_feld_:POS_Hnr, dok_dat_feld_:POS_Plz, dok_dat_feld_:POS_Ort \
|
||||
FROM firmen_spezifisch \
|
||||
WHERE kue_dokuart = 'AAORG' AND dok_dat_feld_:POS_Name like '%:strGericht%'
|
||||
iCnt = @dmrowcount
|
||||
iRet = @dmretcode
|
||||
DBMS ALIAS
|
||||
*/
|
||||
|
||||
// Sucht die Adressen raus, bei denen der Benutzer in der federfuehrenden OE Gruppe ist oder bei der keine federfuehrende OE eingetragen ist
|
||||
DBMS ALIAS strGName, strGStrasse, strGHNR, strGPLZ, strGOrt, strDokId
|
||||
DBMS SQL SELECT fs.dok_dat_feld_:POS_Name, fs.dok_dat_feld_:POS_Strasse, fs.dok_dat_feld_:POS_Hnr, fs.dok_dat_feld_:POS_Plz, fs.dok_dat_feld_:POS_Ort, fs.doku_id \
|
||||
FROM firmen_spezifisch fs \
|
||||
LEFT JOIN benutzergruppen gruppe \
|
||||
ON gruppe.benutzergruppe = fs.dok_dat_feld_:POS_FFOE \
|
||||
Left JOIN benutzer_in_gruppe bInGrp \
|
||||
ON gruppe.gruppen_id = bInGrp.benutzergruppe \
|
||||
WHERE fs.kue_dokuart = 'AAORG' AND (bInGrp.benutzername = :+user OR fs.dok_dat_feld_:POS_FFOE IS NULL) AND dok_dat_feld_:POS_Name LIKE '%:strGericht%'
|
||||
iCnt = @dmrowcount
|
||||
iRet = @dmretcode
|
||||
DBMS ALIAS
|
||||
|
||||
|
||||
for i = 1 while (i <= iCnt) step 1
|
||||
{
|
||||
d3server_value_char_allowed[i] = strGName[i] ## "|" ## strGStrasse[i] ## " " ## strGHNR[i] ## ", " ## strGPLZ[i] ## " " ## strGOrt[i] ## "|" ## strDokId[i]
|
||||
d3server_repos_id_allowed [i] = repos_id
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//////////////////// l01_split_Gericht /////////////////////////////////////////////////
|
||||
// Funktion zum des Felds Aktenzeichen nach AZ;Klaeger;Gerichtszeichen
|
||||
// und fuellen in die jeweiligen Felder
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
proc proz01_split_Gericht()
|
||||
{
|
||||
vars strGericht = dok_dat_feld[POS_Gericht]
|
||||
vars strTrennzeichen = "|"
|
||||
|
||||
vars iSplit = api_function("string_split", strGericht, strTrennzeichen)
|
||||
|
||||
if(iSplit > 1)
|
||||
{
|
||||
dok_dat_feld[POS_Gericht] = api_splitted_string[1]
|
||||
dok_dat_feld[POS_GADRESSE] = api_splitted_string[2]
|
||||
dok_dat_feld[POS_DOKIDORG] = api_splitted_string[3]
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
# Funktion: Liefert das Aussonderungsdatum anhand einer Frist
|
||||
# Parameter: iFrist - Aufbewahrungsfrist
|
||||
# Rückgabewert: -
|
||||
**/
|
||||
String proc proz01_getAussonderungsdatum(iFrist)
|
||||
{
|
||||
vars dAussondatum = ""
|
||||
|
||||
vars heutigesDatum = aktuelles_datum_deu
|
||||
|
||||
dAussondatum = heutigesDatum(7,4) + iFrist
|
||||
dAussondatum = "31.12." ## dAussondatum
|
||||
|
||||
return dAussondatum
|
||||
}
|
||||
621
Stadt Essen/sg02_Sozialakte.groovy
Normal file
621
Stadt Essen/sg02_Sozialakte.groovy
Normal file
@@ -0,0 +1,621 @@
|
||||
|
||||
|
||||
// (1) Global d.3 libraries
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.User
|
||||
import com.dvelop.d3.server.Condition
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import groovy.sql.GroovyRowResult
|
||||
|
||||
import com.dvelop.d3.server.ValueSet
|
||||
import com.dvelop.d3.server.RepositoryField
|
||||
|
||||
import java.sql.Timestamp
|
||||
import java.util.Calendar
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
// Libraries to handle the different hook types
|
||||
import com.dvelop.d3.server.Entrypoint
|
||||
|
||||
public class sg02_sozialakte {
|
||||
|
||||
// Dokumentarten
|
||||
private static String SG02_DS_SOZ_AKTE = "ASOZ";
|
||||
private static String SG02_DS_SOZ_DOKU = "DSOZ";
|
||||
private static String G01_DS_POSTEINGANG = "";
|
||||
|
||||
// DB-Positionen
|
||||
private static int POS_SACHGEBIET = 1 // Sachgebiet
|
||||
private static int POS_AZ = 2 // Aktenzeichen
|
||||
private static int POS_NACHNAME = 3 // Nachname (HV)
|
||||
private static int POS_VORNAME = 4 // Vorname (HV)
|
||||
private static int POS_STRASSE = 9 // Straße
|
||||
private static int POS_PLZ = 10 // PLZ
|
||||
private static int POS_ZDA = 13 // zdA-verfügt
|
||||
private static int POS_DOKTYP = 14 // Dokumenttyp
|
||||
private static int POS_DOKGRP = 15 // Dokumentgruppe
|
||||
private static int POS_HNR = 16 // Hausnummer
|
||||
private static int POS_ORT = 17 // Ort
|
||||
private static int POS_AUSART = 23 // Aussonderungsart
|
||||
private static int POS_STORNO = 27 // in LISSA storbniert
|
||||
private static int POS_WIDERSPRUCH = 30 // Interne 50-1-4 Widerspruchsnummer
|
||||
private static int POS_AZ_RECHT = 31 // Aktenzeichen Rechtsanwälte
|
||||
private static int POS_LOESCH_FLAG = 33 // zum Löschen markiert
|
||||
private static int POS_GEBURTSDATUM = 50 // Geburtsdatum (HV)
|
||||
private static int POS_AUSSONDDAT = 51 // Aussonderungsdatum
|
||||
private static int POS_LOESCHGRD = 35 // Löschgrund
|
||||
private static int POS_ZLM = 33 // Zum Löschen Markiert
|
||||
|
||||
// DB Tabellen
|
||||
private static String TB_LISSA_DOKTYP = "CS_LISSA_DOKTYP"
|
||||
|
||||
// kundenspezifische Werte
|
||||
private static int FRIST_AUSSONDERUNG = 84
|
||||
|
||||
// statische Werte (nicht ändern)
|
||||
private static int STATUS_SACHGEBIET = 0
|
||||
private static int STATUS_ZDA = 0
|
||||
private static int SG01_SCHALTER_POST = 0 //Diesen schalter auf 1 setzen, wenn die Posteingangsbearbeitung in Verbindung mit Sozialdokumenten genutzt wird.
|
||||
private static String STR_JA = "Ja"
|
||||
private static String STR_NEIN = "Nein"
|
||||
private static int laengeAZ = 8 // Länge des Aktenzeichens
|
||||
|
||||
private static String G01_STR_NEIN = "Nein"
|
||||
private static String G01_STR_JA = "Ja"
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_insert_entry_10" )
|
||||
public int hook_insert_entry_10(D3Interface d3, User user, DocumentType docType, Document doc)
|
||||
{
|
||||
d3.log.error("START | hook_insert_entry_10 " + doc.id() );
|
||||
|
||||
sg02_split_AZ( d3, doc, 0 );
|
||||
def iRet = sg02_fuelleFelder( d3, doc, docType.id );
|
||||
d3.log.error("ENDE | hook_insert_entry_10 " + doc.id() );
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_new_version_entry_10" )
|
||||
public int hookNewVersionEntry10(D3Interface d3, Document doc, String fileSource, String fileDestination, User user, DocumentType docType)
|
||||
{
|
||||
d3.log.error("START | hookNewVersionEntry10 " + doc.id() );
|
||||
|
||||
sg02_split_AZ( d3, doc, 0 );
|
||||
def iRet = sg02_fuelleFelder( d3, doc, docType.id );
|
||||
d3.log.error("ENDE | hookNewVersionEntry10 " + doc.id() );
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_upd_attrib_entry_20" )
|
||||
public int hookUpdAttribEntry20(D3Interface d3, Document doc, User user, DocumentType docType, DocumentType docTypeNew)
|
||||
{
|
||||
d3.log.error("START | hookUpdAttribEntry20" + doc.id() );
|
||||
def rc = 0;
|
||||
|
||||
// temporäres Objekt holen, um zu prüfen, das sich Eigenschaften geändert haben
|
||||
oldDocAttributes = d3.archive.getDocument(doc.id());
|
||||
|
||||
sg02_split_AZ( d3, doc, 0);
|
||||
|
||||
if ( docType.id == SG02_DS_SOZ_AKTE )
|
||||
{
|
||||
STATUS_SACHGEBIET = 1;
|
||||
}
|
||||
|
||||
if ( oldDocAttributes.field[ POS_ZDA ] == doc.field[ POS_ZDA ] )
|
||||
{
|
||||
def massen_sql = "select f.doku_id from firmen_spezifisch f, phys_datei p where f.kue_dokuart = 'SG02_DS_SOZ_DOKU' and f.dok_dat_feld_" + POS_AZ + " = '" + doc.field[ POS_AZ ] + "' and p.logi_verzeichnis = 'Be' and f.doku_id = p.doku_id";
|
||||
def massen_ergebnis = d3.sql.executeAndGet( massen_sql );
|
||||
|
||||
if ( massen_ergebnis.size() > 0 )
|
||||
{
|
||||
d3.log.error( "[sg02_upd_attrib_entry_20] Sozialakte (" + doc.field[POS_AZ] + ") kann nicht zdA-verfügt werden da noch Dokumente in Bearbeitung sind." );
|
||||
rc = -350;
|
||||
}
|
||||
|
||||
if ( rc == 0 )
|
||||
{
|
||||
STATUS_ZDA = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( docType.id == SG02_DS_SOZ_DOKU )
|
||||
{
|
||||
if ( doc.field[ POS_ZLM ] == STR_JA )
|
||||
{
|
||||
if ( doc.field[ POS_LOESCHGRD ] == "" )
|
||||
{
|
||||
return -403;
|
||||
}
|
||||
}
|
||||
else if ( doc.field[ POS_ZLM ] == STR_NEIN )
|
||||
{
|
||||
doc.field[ POS_LOESCHGRD ] = "";
|
||||
}
|
||||
|
||||
if ( oldDocAttributes.field[ POS_STORNO ] == doc.field[ POS_STORNO ] )
|
||||
{
|
||||
if ( doc.field[ POS_STORNO ] == G01_STR_JA )
|
||||
{
|
||||
doc.field[ POS_LOESCH_FLAG ] = G01_STR_JA;
|
||||
doc.field[ POS_LOESCHGRD ] = "In LISSA storniert.";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( rc == 0 && docType.id == G01_DS_POSTEINGANG )
|
||||
{
|
||||
sg02_clear_vorname( d3, doc, docType.id );
|
||||
}
|
||||
|
||||
d3.log.error("ENDE | hookUpdAttribEntry20" + doc.id() );
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_upd_attrib_exit_20" )
|
||||
public int hookUpdAttribExit20(D3Interface d3, Document doc, Integer errorCode, User user, DocumentType docType, DocumentType docTypeOld)
|
||||
{
|
||||
d3.log.error("START | hookUpdAttribExit20 " + doc.id() );
|
||||
|
||||
if ( errorCode == 0 )
|
||||
{
|
||||
if ( STATUS_SACHGEBIET == 1 )
|
||||
{
|
||||
STATUS_SACHGEBIET = 0;
|
||||
|
||||
// hier wird das docSearchCreate übernommen; dafür gibt es aber aktuell keine Entsprechung in Groovy.
|
||||
// das wird in Groovy direkt umgesetzt; d.h. man macht das manuell, was der JPL-Massenänderungs-Code en gros macht:
|
||||
|
||||
def massen_sql = "select doku_id from firmen_spezifisch where kue_dokuart = '" + SG02_DS_SOZ_DOKU + "' and dok_dat_feld_" + POS_AZ + " = '" + doc.field(POS_AZ) + "'";
|
||||
|
||||
def massen_ergebnis = d3.sql.executeAndGet( massen_sql );
|
||||
|
||||
if ( massen_ergebnis.size() > 0 )
|
||||
{
|
||||
int i;
|
||||
for ( i = 0 ; i < massen_ergebnis.size(); i++ )
|
||||
{
|
||||
def updateDoc = d3.archive.getDocument( massen_ergebnis[ i ].doku_id );
|
||||
|
||||
updateDoc.field[ POS_SACHGEBIET ] = doc.field[ POS_SACHGEBIET ];
|
||||
updateDoc.updateAttributes( "Master" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( STATUS_ZDA == 1 )
|
||||
{
|
||||
STATUS_ZDA = 0;
|
||||
|
||||
def strZDA, strDatum, strArt;
|
||||
|
||||
if ( doc.field[ POS_ZDA ] == G01_STR_JA )
|
||||
{
|
||||
strZDA = G01_STR_JA;
|
||||
strDatum = sg02_getDate( FRIST_AUSSONDERUNG, 1 );
|
||||
}
|
||||
else if ( doc.field[POS_ZDA] == G01_STR_NEIN )
|
||||
{
|
||||
strZDA = G01_STR_NEIN;
|
||||
strDatum = "";
|
||||
}
|
||||
|
||||
strArt = doc.field[ POS_AUSART ]
|
||||
if ( strArt == "" )
|
||||
{
|
||||
strArt = "B";
|
||||
}
|
||||
|
||||
// hier wird das docSearchCreate übernommen; dafür gibt es aber aktuell keine Entsprechung in Groovy.
|
||||
// das wird in Groovy direkt umgesetzt; d.h. man macht das manuell, was der JPL-Massenänderungs-Code en gros macht:
|
||||
|
||||
def massen_sql = "select doku_id from firmen_spezifisch where ( kue_dokuart = '" + SG02_DS_SOZ_AKTE + "' or kue_dokuart = '" + SG02_DS_SOZ_DOKU + "' )and dok_dat_feld_" + POS_AZ + " = '" + doc.field(POS_AZ) + "'";
|
||||
|
||||
def massen_ergebnis = d3.sql.executeAndGet( massen_sql );
|
||||
|
||||
if ( massen_ergebnis.size() > 0 )
|
||||
{
|
||||
int i;
|
||||
for ( i = 0 ; i < massen_ergebnis.size(); i++ )
|
||||
{
|
||||
def updateDoc = d3.archive.getDocument( massen_ergebnis[ i ].doku_id );
|
||||
|
||||
updateDoc.field[ POS_ZDA ] = strZDA;
|
||||
updateDoc.field[ POS_AUSSONDDAT ] = strDatum;
|
||||
updateDoc.field[ POS_AZ ] = strArt;
|
||||
// man könnte updateAttributes auch mit dem zweiten Parameter "true" aufrufen, das sollte dann das Ausführen von Hooks
|
||||
// für das Update unterbinden. Beim JPL-Masterdata-update läuft das vermutlich nämlich genau so. Machen wir hier aber erstmal nicht.
|
||||
updateDoc.updateAttributes( "Master" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
d3.log.error("ENDE | hookUpdAttribExit20 " + doc.id() );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_search_entry_10" )
|
||||
public int hookSearchEntry10(D3Interface d3, User user, DocumentType docType, Document searchContext)
|
||||
{
|
||||
d3.log.error("START | hookSearchEntry10 " );
|
||||
|
||||
sg02_split_AZ( d3, doc, 1 );
|
||||
|
||||
if ( isNumeric( doc.field[ POS_AZ ] ) )
|
||||
{
|
||||
if ( doc.field[ POS_AZ ].length() > 0 && doc.field[ POS_AZ ].length() < laengeAZ )
|
||||
{
|
||||
doc.field[ POS_AZ ] = sg02_FillLeadingChar( doc.field[ POS_AZ ] );
|
||||
}
|
||||
}
|
||||
|
||||
d3.log.error("ENDE | hookSearchEntry10 " );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_validate_update_entry_10" )
|
||||
public int hookValidateUpdateEntry10(D3Interface d3, User user, DocumentType docType, Document doc, String nextcall)
|
||||
{
|
||||
d3.log.error("START | hookValidateUpdateEntry10 " + doc.id() );
|
||||
|
||||
sg02_split_AZ( d3, doc, 0 );
|
||||
|
||||
if ( doc.field[ POS_AZ ].length() < laengeAZ )
|
||||
{
|
||||
doc.field[ POS_AZ ] = sg02_FillLeadingChar( doc.field[ POS_AZ ] );
|
||||
}
|
||||
|
||||
def rc = sg02_fuelleFelder( d3, doc, docType.id );
|
||||
|
||||
d3.log.error("ENDE | hookValidateUpdateEntry10 " + doc.id() );
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ---------------------------------- Wertemengen ----------------------------------
|
||||
|
||||
//////////////////////////////// sg02_SOZ_WM_Aktenzeichen ////////////////////////////
|
||||
// -> Funktion füllt das Feld Aktenzeichen mit Wertemenge
|
||||
// aus der d.3 Datenbank
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
@ValueSet( entrypoint = "sg02_SOZ_WM_Aktenzeichen" )
|
||||
def sg02_SOZ_WM_Aktenzeichen(D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
if ( doc.field[ POS_AZ ] != null )
|
||||
{
|
||||
if ( doc.field[ POS_AZ ].length() > 2 )
|
||||
{
|
||||
def sqlQuery = "select dok_dat_feld_" + POS_AZ + " POS_AZ, dok_dat_feld_" + POS_NACHNAME + " POS_NACHNAME, dok_dat_feld_" + POS_VORNAME + " POS_VORNAME, dok_dat_feld_" + POS_SACHGEBIET + " POS_SACHGEBIET, CONVERT(varchar, dok_dat_feld_" + POS_GEBURTSDATUM + ", 104) POS_GEBURTSDATUM from firmen_spezifisch where kue_dokuart = '" + SG02_DS_SOZ_AKTE + "' and ( dok_dat_feld_" + POS_AZ + " like '%" + doc.field[ POS_AZ ] + "%' or dok_dat_feld_" + POS_NACHNAME + " like '%" + doc.field[ POS_AZ ] + "%' or dok_dat_feld_" + POS_VORNAME + " like '%" + doc.field[ POS_AZ ] + "%' or dok_dat_feld_" + POS_SACHGEBIET + " like '%" + doc.field[ POS_AZ ] + "%' or CONVERT(varchar, dok_dat_feld_" + POS_GEBURTSDATUM + ", 104) like '%" + doc.field[ POS_AZ ] + "%' ) ";
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.POS_AZ + "~" + it.POS_NACHNAME + "~" + it.POS_VORNAME + "~" + it.POS_GEBURTSDATUM + "~" + it.POS_SACHGEBIET } );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////// sg02_SOZ_WM_Dokumentgruppe //////////////////////////
|
||||
//
|
||||
// füllt das Feld Dokumenttruppe anhand des Feldes Kategorie
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
@ValueSet( entrypoint = "sg02_SOZ_WM_Dokumentgruppe" )
|
||||
def sg02_SOZ_WM_Dokumentgruppe(D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def resultRows = d3.sql.executeAndGet( "select distinct Dokumentgruppe from " + TB_LISSA_DOKTYP );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.Dokumentgruppe } );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////// sg02_SOZ_WM_Dokumenttyp /////////////////////////////
|
||||
//
|
||||
// füllt das Feld Dokumenttyp anhand des Feldes Dokumentgruppe
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
@ValueSet( entrypoint = "sg02_SOZ_WM_Dokumenttyp" )
|
||||
def sg02_SOZ_WM_Dokumenttyp(D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
def sqlQuery = "";
|
||||
|
||||
if ( doc.field[ POS_AZ ] != null && ! doc.field[ POS_AZ ].isEmpty() )
|
||||
{
|
||||
sqlQuery = "select distinct Dokumenttyp from " + TB_LISSA_DOKTYP + " where Dokumentgruppe = '" + doc.field[ POS_DOKGRP ] + "' ";
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = "select distinct Dokumenttyp from " + TB_LISSA_DOKTYP;
|
||||
}
|
||||
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.Dokumenttyp } );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////// sg02_SOZ_WM_WiderspruchNr /////////////////////////////
|
||||
//
|
||||
// füllt das Feld Widerspruchsnummern anhand des Feldes Aktenzeichen
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
@ValueSet( entrypoint = "sg02_SOZ_WM_WiderspruchNr" )
|
||||
def sg02_SOZ_WM_WiderspruchNr(D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
sg02_split_AZ( d3, doc, 1 );
|
||||
|
||||
def sqlQuery = "";
|
||||
|
||||
if ( doc.field[ POS_AZ ] != "" )
|
||||
{
|
||||
sqlQuery = "select distinct dok_dat_feld_" + POS_WIDERSPRUCH + " POS_WIDERSPRUCH from firmen_spezifisch where dok_dat_feld_" + POS_AZ + " = '" + doc.field[ POS_AZ ] + "' ";
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = "select distinct dok_dat_feld_" + POS_WIDERSPRUCH + " POS_WIDERSPRUCH from firmen_spezifisch";
|
||||
}
|
||||
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.POS_WIDERSPRUCH } );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////// sg02_SOZ_WM_AZ_Rechtsanwalt /////////////////////////////
|
||||
//
|
||||
// füllt das Feld Aktenzeichen Rechtsanwälte anhand des Feldes Aktenzeichen
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
@ValueSet( entrypoint = "sg02_SOZ_WM_AZ_Rechtsanwalt" )
|
||||
def sg02_SOZ_WM_AZ_Rechtsanwalt(D3Interface d3, RepositoryField reposField, User user, DocumentType docType, int rowNo, int validate, Document doc )
|
||||
{
|
||||
sg02_split_AZ( d3, doc, 1 );
|
||||
|
||||
def sqlQuery = "";
|
||||
|
||||
if ( doc.field[ POS_AZ ] != "" )
|
||||
{
|
||||
sqlQuery = "select distinct dok_dat_feld_" + POS_AZ_RECHT + " POS_AZ_RECHT from firmen_spezifisch where dok_dat_feld_" + POS_AZ + " = '" + doc.field[ POS_AZ ] + "' ";
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlQuery = "select distinct dok_dat_feld_" + POS_AZ_RECHT + " POS_AZ_RECHT from firmen_spezifisch";
|
||||
}
|
||||
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( sqlQuery );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
reposField.provideValuesForValueSet( resultRows.collect{ it.POS_AZ_RECHT } );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ---------------------------------- Funktionen ----------------------------------
|
||||
|
||||
|
||||
|
||||
/////////////////////////// sg02_isSozial //////////////////////////////////////////
|
||||
// Püft ob das übergebene Dokumentartkürzel zur Lösung gehört
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
public int sg02_isSozial(doc_type_short)
|
||||
{
|
||||
if ( doc_type_short == SG02_DS_SOZ_AKTE || doc_type_short == SG02_DS_SOZ_DOKU )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////// sg02_split_AZ ///////////////////////////////////////
|
||||
// -> Ermittelt den Wert Aktenzeichen aus der Wertemenge
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void sg02_split_AZ( D3Interface d3, Document doc, int IsSearch )
|
||||
{
|
||||
if ( doc.field[ POS_AZ ] != null )
|
||||
{
|
||||
if ( ! doc.field[ POS_AZ ].isEmpty() )
|
||||
{
|
||||
if ( doc.field[ POS_AZ ].indexOf( "~" ) >= 0 )
|
||||
{
|
||||
def tok = doc.field[ POS_AZ ].tokenize( "~" );
|
||||
|
||||
if ( tok.size() > 1 )
|
||||
{
|
||||
doc.field[ POS_AZ ] = tok[ 0 ];
|
||||
|
||||
if ( IsSearch == 0 )
|
||||
{
|
||||
doc.field[ POS_NACHNAME ] = tok[ 1 ];
|
||||
doc.field[ POS_VORNAME ] = tok[ 2 ];
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat( "dd.MM.yyyy" );
|
||||
Date parsedDate = dateFormat.parse( tok[ 3 ] );
|
||||
doc.field[ POS_GEBURTSDATUM ] = new Timestamp( parsedDate.getTime() );
|
||||
doc.field[ POS_SACHGEBIET ] = tok[ 4 ];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////// sg02_getDate /////////////////////////////////////////////
|
||||
// Gibt das Tagesdatum + Frist zurück
|
||||
//
|
||||
// strFrist Die Frist in Monaten um die das Tagesdatum erhoeht wird
|
||||
// iEndOfYear Unterscheidung ob der genaue Wert oder der letzte Tag des Jahres berechnet wird
|
||||
// 0 = genauer Wert / 1 = Ende des Jahres
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public String sg02_getDate( int iFrist, int iEndOfYear )
|
||||
{
|
||||
String strDatum = "";
|
||||
String strEndOfYear = "";
|
||||
|
||||
def STATEMENT = "SELECT DATEADD(month, " + iFrist + ", GETDATE()) zeitstempel, '31.12.' + CONVERT(varchar,YEAR(DATEADD(month, " + iFrist + ", GETDATE()))) datum";
|
||||
|
||||
def resultRows = d3.sql.executeAndGet( STATEMENT );
|
||||
|
||||
if ( resultRows.size() > 0 )
|
||||
{
|
||||
if ( iEndOfYear == 1 )
|
||||
{
|
||||
return resultRows[ 0 ].datum;
|
||||
}
|
||||
else
|
||||
{
|
||||
return resultRows[ 0 ].zeitstempel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////// sg02_fuelleFelder /////////////////////////////////////////////
|
||||
|
||||
|
||||
public int sg02_fuelleFelder( D3Interface d3, Document doc, String doc_type_short )
|
||||
{
|
||||
int retVal = 0;
|
||||
|
||||
if ( doc_type_short == SG02_DS_SOZ_DOKU )
|
||||
{
|
||||
def STATEMENT = "select doku_id from firmen_spezifisch where kue_dokuart = '" + SG02_DS_SOZ_AKTE + "' and dok_dat_feld_" + POS_AZ + " = '" + doc.field[ POS_AZ ] + "' ";
|
||||
|
||||
def treffer = d3.sql.executeAndGet( (String) STATEMENT );
|
||||
|
||||
if ( treffer.size() > 0 )
|
||||
{
|
||||
int i;
|
||||
for ( i = 0 ; i < treffer.size(); i++ )
|
||||
{
|
||||
def updateDoc = d3.archive.getDocument( treffer[ i ].doku_id );
|
||||
|
||||
if ( updateDoc.field[ POS_ZDA ] == G01_STR_JA )
|
||||
{
|
||||
d3.log.error( "[sg02_fuelleFelder] Sozialakte (:dok_dat_feld[POS_AZ]) ist zdA-verfügt und darf nicht bearbeitet werden." );
|
||||
retVal = -316; //Änderung oder Archivierung nicht erlaubt - Akte oder Vorgang ist schon abgeschlossen
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
if ( doc.field[ POS_SACHGEBIET ] == "" )
|
||||
{
|
||||
doc.field[ POS_SACHGEBIET ] = updateDoc.field[ POS_SACHGEBIET ];
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_NACHNAME ] == "" )
|
||||
{
|
||||
doc.field[ POS_NACHNAME ] = updateDoc.field[ POS_NACHNAME ];
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_VORNAME ] == "" )
|
||||
{
|
||||
doc.field[ POS_VORNAME ] = updateDoc.field[ POS_VORNAMEPOS_VORNAME ];
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_STRASSE ] == "" )
|
||||
{
|
||||
doc.field[ POS_STRASSE ] = updateDoc.field[ POS_STRASSE ];
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_PLZ ] == "" )
|
||||
{
|
||||
doc.field[ POS_PLZ ] = updateDoc.field[ POS_PLZ ];
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_HNR ] == "" )
|
||||
{
|
||||
doc.field[ POS_HNR ] = updateDoc.field[ POS_HNR ];
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_ORT ] == "" )
|
||||
{
|
||||
doc.field[ POS_ORT ] = updateDoc.field[ POS_ORT ];
|
||||
}
|
||||
|
||||
if ( doc.field[ POS_GEBURTSDATUM ] == "" )
|
||||
{
|
||||
doc.field[ POS_GEBURTSDATUM ] = updateDoc.field[ POS_GEBURTSDATUM ];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Funktion: Wenn ein Posteingangsdokument in ein Sozialdokument umgewandelt wird, muss das Dokdatfeld Vorname geleert werden,
|
||||
// da es ansonsten in der Aktenbildung nach oben vererbt wird. In der Posteingangsbearbeitung ist das Dokdatfeld 4 Original behalten.
|
||||
// Rückgabewert:
|
||||
// 0 = wurde geleert.
|
||||
public int sg02_clear_vorname( D3Interface d3, Document doc, String doc_type_short )
|
||||
{
|
||||
if ( doc.field[ POS_VORNAME ] == "Nein" || doc.field[ POS_VORNAME ] == "Ja" )
|
||||
{
|
||||
doc.field[ POS_VORNAME ] = "";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Kommentar in JPL-Datei passt nicht zur Funktion.
|
||||
public String sg02_FillLeadingChar( String strAZ )
|
||||
{
|
||||
def paddedString = String.format( "%08d", strAZ );
|
||||
|
||||
return paddedString;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
1
Stadt Essen/sg02_Sozialakte.jpl
Normal file
1
Stadt Essen/sg02_Sozialakte.jpl
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
173
Stulz/2025.12.17 Geräte und Produktakte/Hooks.groovy
Normal file
173
Stulz/2025.12.17 Geräte und Produktakte/Hooks.groovy
Normal file
@@ -0,0 +1,173 @@
|
||||
import com.dvelop.d3.server.Condition
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import com.dvelop.d3.server.DocumentVersion
|
||||
import com.dvelop.d3.server.PhysicalVersion
|
||||
import com.dvelop.d3.server.Entrypoint
|
||||
import com.dvelop.d3.server.RepositoryField
|
||||
import com.dvelop.d3.server.User
|
||||
import com.dvelop.d3.server.UserGroup
|
||||
import com.dvelop.d3.server.UserOrUserGroup
|
||||
import com.dvelop.d3.server.Document.DocStatus
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
|
||||
import groovy.sql.GroovyRowResult
|
||||
import groovy.sql.Sql
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public class Hooks
|
||||
{
|
||||
|
||||
|
||||
@Entrypoint( entrypoint = "hook_insert_entry_10" )
|
||||
public int hookInsertEntry10(D3Interface d3, User user, DocumentType docType, Document doc)
|
||||
{
|
||||
d3.log.info("START | hookInsertEntry10 ");
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Prüfung, ob Ablage erlaubt ist / Geräte-/Produktakte | calb d.velop 2025.12.17 START
|
||||
|
||||
|
||||
// Zu einer Position darf es nur eine Geräte oder Produktakte geben - nicht beide gleichzeitig.
|
||||
// Da die Dokumentarten nach Akte aufgeteilt sind, kann man also prüfen, ob bei einer Ablage eines Dokuments in die Produktakte bereits eine entsprechende Geräteakte existiert, und - falls ja - die Ablage ablehnen. (Umgekehrt natürlich genauso.)
|
||||
// Diese Logik wird benötigt, weil die Kollegen die Dokumentart während der Ablage ändern könnten.
|
||||
|
||||
String dokumentarten_produktakte = "DBESC;DCSTR;DEAUS;DDBLT;DERST;DGSPZ;DHAND;DKAEL;DKONF;DSOND;DSTRO;DWINP;DWINS;DZPRO";
|
||||
String dokumentarten_geraeteakte = "DCHEA;DCHEP;DCHLP;DCHEC;DDFAD;DLAUF;DPDK1;DPDK2;DPDK3;DPDW1;DPDW2;DPDW3;DPRSP;DPR01;DTYPD;DTYPS;DVSAK";
|
||||
String dokumentarten_auftrag_sap = "DCONO;SCONO;SINVO;SCORD;SDENO;SMSDP;SDSW;SSVRP;";
|
||||
|
||||
|
||||
String such_aktenart = "";
|
||||
String aktenname = "";
|
||||
def do_it = false;
|
||||
String sqlStatement = "";
|
||||
|
||||
if ( dokumentarten_produktakte.contains( docType.id() ) )
|
||||
{
|
||||
// Es handelt sich um eine Produktakten-Dokumentart, daher darf keine Geraeteakte existieren
|
||||
do_it = true;
|
||||
such_aktenart = "AGAKE";
|
||||
aktenname = "Geraeteakte Kundeneinzel";
|
||||
doc.status = Document.DocStatus.DOC_STAT_RELEASE;
|
||||
}
|
||||
|
||||
if ( dokumentarten_geraeteakte.contains( docType.id() ) )
|
||||
{
|
||||
// Es handelt sich um eine Geraeteakten-Dokumentart, daher darf keine Produktakte existieren
|
||||
do_it = true;
|
||||
such_aktenart = "APRKE";
|
||||
aktenname = "Produktakte Kundeneinzel";
|
||||
doc.status = Document.DocStatus.DOC_STAT_RELEASE;
|
||||
}
|
||||
|
||||
if ( dokumentarten_auftrag_sap.contains( docType.id() ) )
|
||||
{
|
||||
doc.status = Document.DocStatus.DOC_STAT_RELEASE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if ( do_it )
|
||||
{
|
||||
// DDF22: Vertriebsbelegposition DDF60: Auftrags-Nr.
|
||||
sqlStatement = "select doku_id from firmen_spezifisch where kue_dokuart = '" + such_aktenart + "' and dok_dat_feld_22 = '" + doc.field[ 22 ] + "' and doku_id in ( select doku_id from firm_spez_mult_val where value_char = '" + doc.field[ 60 ][ 1 ] + "' and field_no = 60 )";
|
||||
|
||||
def rows = d3.sql.executeAndGet( sqlStatement );
|
||||
|
||||
if ( rows.size() > 0 )
|
||||
{
|
||||
// Es wurde ein Treffer gefunden => Fehler
|
||||
d3.hook.setProperty( "additional_info_text", "Da eine Akte vom Typ " + aktenname + " mit den Eigenschaften Auftrags-Nr. " + doc.field[ 60 ][ 1 ] + " / Vertriebsbelegposition " + doc.field[ 22 ] + " bereits existiert, ist eine Ablage dieses Dokuments in dieser Dokumentart nicht erlaubt." );
|
||||
return -142;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Prüfung, ob Ablage erlaubt ist / Geräte-/Produktakte | calb d.velop 2025.12.17 ENDE
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Prüfung ob Doppelablage bei Dokumentarten, bei denen das nicht vorgesehen ist / Geräte-/Produktakte | calb d.velop 2025.12.17 START
|
||||
|
||||
// Bei den hier angegebenen Dokumentarten der Produkt-/Geräteakte sind nur eindeutige Dokumente erlaubt, d.h. pro Auftrags-Nr., Vertriebsbelegposition darf es nur ein Dokument pro Dokumentart geben
|
||||
|
||||
|
||||
String dokumentarten_produktakte_pruef = "DBESC;DCSTR;DEAUS;DDBLT;DERST;DGSPZ;DHAND;DKAEL;DKONF;DSTRO;DWINP;DWINS";
|
||||
|
||||
if ( dokumentarten_produktakte_pruef.contains( docType.id() ) )
|
||||
{
|
||||
// DDF22: Vertriebsbelegposition DDF60: Auftrags-Nr.
|
||||
sqlStatement = "select doku_id from firmen_spezifisch where kue_dokuart = '" + docType.id() + "' and dok_dat_feld_22 = '" + doc.field[ 22 ] + "' and doku_id in ( select doku_id from firm_spez_mult_val where value_char = '" + doc.field[ 60 ][ 1 ] + "' and field_no = 60 )";
|
||||
|
||||
def rows = d3.sql.executeAndGet( sqlStatement );
|
||||
|
||||
if ( rows.size() > 0 )
|
||||
{
|
||||
// Es wurde ein Treffer gefunden => Fehler
|
||||
d3.hook.setProperty( "additional_info_text", "Fuer die Auftrags-Nr. " + doc.field[ 60 ][ 1 ] + " / Vertriebsbelegposition " + doc.field[ 22 ] + " existiert bereits ein Dokument in dieser Dokumentart (Doku-ID " + rows[ 0 ].doku_id + " )." );
|
||||
return -142;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
String dokumentarten_geraeteakte_pruef = "DCHEA;DCHEP;DCHLP;DCHEC;DDFAD;DLAUF;DPDK1;DPDK2;DPDK3;DPDW1;DPDW2;DPDW3;DPRSP;DPR01;DTYPD;DTYPS;DVSAK";
|
||||
|
||||
// Eindeutig: Dokumentart, Auftrags-Nr., Vertriebsbelegposition, Materialnummer, Fertigungsauftragsnummer und, wenn angegeben, Serialnummer
|
||||
if ( dokumentarten_geraeteakte_pruef.contains( docType.id() ) )
|
||||
{
|
||||
def where = "";
|
||||
def meld = "";
|
||||
|
||||
if ( doc.field[ 24 ] )
|
||||
{
|
||||
where = " and dok_dat_feld_24 = '" + doc.field[ 24 ] + "'";
|
||||
meld = " / Serialnummer " + doc.field[ 24 ] + " ";
|
||||
}
|
||||
|
||||
|
||||
// DDF22: Vertriebsbelegposition DDF60: Auftrags-Nr. DDF21: Materialnummer DDF26: Fertigungsauftragsnummer DDF24 Serialnummer
|
||||
sqlStatement = "select doku_id from firmen_spezifisch where kue_dokuart = '" + docType.id() + "' and dok_dat_feld_22 = '" + doc.field[ 22 ] + "' and dok_dat_feld_21 = '" + doc.field[ 21 ] + "' and dok_dat_feld_26 = '" + doc.field[ 26 ] + "' and doku_id in ( select doku_id from firm_spez_mult_val where value_char = '" + doc.field[ 60 ][ 1 ] + "' and field_no = 60 ) " + where;
|
||||
|
||||
def rows = d3.sql.executeAndGet( sqlStatement );
|
||||
|
||||
if ( rows.size() > 0 )
|
||||
{
|
||||
// Es wurde ein Treffer gefunden => Fehler
|
||||
d3.hook.setProperty( "additional_info_text", "Fuer die Auftrags-Nr. " + doc.field[ 60 ][ 1 ] + " / Vertriebsbelegposition " + doc.field[ 22 ] + " / Materialnummer " + doc.field[ 21 ] + " / Materialnummer " + doc.field[ 26 ] + meld + " existiert bereits ein Dokument in dieser Dokumentart (Doku-ID " + rows[ 0 ].doku_id + " )." );
|
||||
return -142;
|
||||
}
|
||||
}
|
||||
|
||||
// Prüfung ob Doppelablage bei Dokumentarten, bei denen das nicht vorgesehen ist / Geräte-/Produktakte | calb d.velop 2025.12.17 ENDE
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
d3.log.info("ENDE | hookInsertEntry10 ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
71
_Vorlagen/2025.04.04 d.3 Dokumentation SQL Statements.txt
Normal file
71
_Vorlagen/2025.04.04 d.3 Dokumentation SQL Statements.txt
Normal file
@@ -0,0 +1,71 @@
|
||||
Dokumentarten:
|
||||
SELECT dokuart AS Dokumentart, kue_dokuart AS Kürzel FROM arten_dokumente WHERE dokument_typ = 'd' AND kue_dokuart NOT LIKE '$%' ORDER BY dokuart
|
||||
|
||||
|
||||
Aktenarten:
|
||||
SELECT dokuart AS Aktenart, kue_dokuart AS Kürzel FROM arten_dokumente WHERE doku-ment_typ = 'a' AND kue_dokuart NOT LIKE '$%' ORDER BY dokuart
|
||||
|
||||
|
||||
Wertemengen:
|
||||
SELECT predef_val_text from doc_field_val_names ORDER BY predef_val_text
|
||||
|
||||
|
||||
Werte in den Wertemengen:
|
||||
SELECT dfvn.predef_val_text AS Wertemenge, dfv.value_char_allowed AS ErlaubterWert
|
||||
FROM doc_field_val_names dfvn
|
||||
JOIN doc_field_values dfv ON dfvn.predef_val_id = dfv.predef_value_id ORDER BY dfvn.predef_val_text, dfv.value_char_allowed
|
||||
|
||||
|
||||
Erweiterte Eigenschaften:
|
||||
SELECT repository_text AS "Erweiterte Eigenschaft", doc_field_nr_pref AS "Dok_dat_feld", da-ta_type AS "Typ", data_length AS "Länge" FROM field_repository WHERE repository_text NOT LIKE '$%' AND repository_text <> 'Logging-Typ' AND repository_text <> 'Logging-Datum';
|
||||
|
||||
|
||||
Gruppen:
|
||||
SELECT benutzergruppe AS d3Gruppe FROM benutzergruppen ORDER BY benutzergruppe
|
||||
|
||||
|
||||
Berechtigungen:
|
||||
SELECT roll_text AS Berechtigungsprofile FROM doc_roll_header ORDER BY roll_text
|
||||
|
||||
|
||||
Rendition Regeln:
|
||||
SELECT
|
||||
dch.class_text AS Dokumentklasse,
|
||||
tr.doc_extension AS Dateierweiterung,
|
||||
CASE WHEN tr.tiff_event = 'N' THEN 'Neuer Version'
|
||||
WHEN tr.tiff_event = 'I' THEN 'Neuimport'
|
||||
WHEN tr.tiff_event = 'F' THEN 'Transfer in Freigabe'
|
||||
WHEN tr.tiff_event = 'P' THEN 'Transfer in Prüfung'
|
||||
WHEN tr.tiff_event = 'A' THEN 'Transfer in Archiv'
|
||||
END AS Ereignis,
|
||||
CASE WHEN tr.tiff_option = '1' THEN 'TIF'
|
||||
WHEN tr.tiff_option = '2' THEN 'PDF'
|
||||
ELSE '-'
|
||||
END AS Zielformat,
|
||||
CASE WHEN tr.ocr_option = '1' THEN 'Ja' ELSE 'Nein' END AS Verschlagwortung
|
||||
FROM tiff_rules tr
|
||||
JOIN doc_classes_header dch ON dch.class_shortcut = tr.class_shortcut ORDER BY dch.class_text
|
||||
|
||||
|
||||
Abfrage um Regeln abzufragen, die nicht einer Dokumentklasse angehören:
|
||||
SELECT
|
||||
tr.class_shortcut AS Dokumentklasse,
|
||||
tr.doc_extension AS Dateierweiterung,
|
||||
CASE WHEN tr.tiff_event = 'N' THEN 'Neuer Version'
|
||||
WHEN tr.tiff_event = 'I' THEN 'Neuimport'
|
||||
WHEN tr.tiff_event = 'F' THEN 'Transfer in Freigabe'
|
||||
WHEN tr.tiff_event = 'P' THEN 'Transfer in Prüfung'
|
||||
WHEN tr.tiff_event = 'A' THEN 'Transfer in Archiv'
|
||||
END AS Ereignis,
|
||||
CASE WHEN tr.tiff_option = '1' THEN 'TIF'
|
||||
WHEN tr.tiff_option = '2' THEN 'PDF'
|
||||
ELSE '-'
|
||||
END AS Zielformat,
|
||||
CASE WHEN tr.ocr_option = '1' THEN 'Ja' ELSE 'Nein' END AS Verschlagwortung
|
||||
FROM tiff_rules tr
|
||||
WHERE tr.class_shortcut IS NULL
|
||||
ORDER BY tr.class_shortcut
|
||||
|
||||
|
||||
|
||||
|
||||
85
_Vorlagen/Groovy-Skripte/Beispiel für Dokumentklasse.groovy
Normal file
85
_Vorlagen/Groovy-Skripte/Beispiel für Dokumentklasse.groovy
Normal file
@@ -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<String>()
|
||||
|
||||
// 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
|
||||
}
|
||||
}
|
||||
235
_Vorlagen/Groovy-Skripte/CopyAttributes.groovy
Normal file
235
_Vorlagen/Groovy-Skripte/CopyAttributes.groovy
Normal file
@@ -0,0 +1,235 @@
|
||||
package dds.tools.scripts
|
||||
|
||||
import javax.swing.JOptionPane
|
||||
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
|
||||
import groovy.sql.GroovyRowResult
|
||||
|
||||
def adminUser = "d3_service"
|
||||
boolean noHooks = true
|
||||
|
||||
class Config{
|
||||
static def MODE = 2 // 0: Es werden nur die SQL-Statements in die Info-Log-Dateien ausgegeben
|
||||
// 1: Es werden alle Dokumente durchlaufen, es werden jedoch keine Updates ausgeführt
|
||||
// 2: Das Script aktualisiert die konfigurierten Dokumente
|
||||
static TOP_CLAUSE = "TOP 100"
|
||||
static def LOG_PATH = "C:\\TEMP"
|
||||
static List<Rule> rules = []
|
||||
static ok = 0
|
||||
static errors = 0
|
||||
|
||||
|
||||
static def init(D3Interface d3) {
|
||||
d3.log.info("Regelwerk wird erstellt")
|
||||
//rules.add(new Rule(d3, "DOKUMENTARKUERZEL", [new FieldTupel("Integer FELD_NR_QUELLE", "Integer FELD_NR_ZIEL", "Boolean TRUE: Es wird nur der Ganzzahl-Anteil übernommen. Schlägt die Konvertierung fehlt wird null übernommen. - DEFAULT = FALSE")]))
|
||||
rules.add(new Rule(d3, "DEINV", [new FieldTupel(83, 1), new FieldTupel(17, 62)]))
|
||||
rules.add(new Rule(d3, "DIERE", [new FieldTupel(55, 1), new FieldTupel(70, 2)]))
|
||||
rules.add(new Rule(d3, "AA002", [new FieldTupel(6, 60), new FieldTupel(1, 61)]))
|
||||
|
||||
d3.log.info("Es wurden ${rules.size()} Regeln angelegt.")
|
||||
def ld = new File(LOG_PATH)
|
||||
if ( ! ld.exists()) {
|
||||
if (!ld.mkdirs()) {
|
||||
throw new Exception("Das Logverzeichnis '$LOG_PATH' konnte nicht angelegt werden")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Rule{
|
||||
def docType, ok, errors
|
||||
List<FieldTupel> mapping
|
||||
private String selectQuery
|
||||
private File logFileInfo
|
||||
private File logFileError
|
||||
private D3Interface d3
|
||||
|
||||
Rule(D3Interface d3, String docType, FieldTupel fieldTupel) {
|
||||
this.d3 = d3
|
||||
this.docType = docType
|
||||
this.mapping = [fieldTupel]
|
||||
init()
|
||||
}
|
||||
|
||||
Rule(D3Interface d3, String docType, List<FieldTupel> fieldTupelArray){
|
||||
this.d3 = d3
|
||||
this.docType = docType
|
||||
this.mapping = fieldTupelArray
|
||||
init()
|
||||
}
|
||||
|
||||
def init() {
|
||||
ok = 0
|
||||
errors = 0
|
||||
logFileInfo = new File("${Config.LOG_PATH}\\${docType}_info.txt")
|
||||
logFileError = new File("${Config.LOG_PATH}\\${docType}_error.txt")
|
||||
selectQuery = """SELECT ${Config.TOP_CLAUSE} f.doku_id\r\n, ${mapping.collect{ FieldTupel ft -> ft.getSelectClause() }.join('\r\n, ') }
|
||||
FROM firmen_spezifisch f
|
||||
WHERE f.kue_dokuart = '${docType}'
|
||||
AND f.doku_id > ?
|
||||
AND (${mapping.collect{ FieldTupel ft -> ft.getWhereClause() }.join('\r\nOR ') })
|
||||
ORDER BY f.doku_id"""
|
||||
logFileInfo << "${selectQuery}\r\n"
|
||||
}
|
||||
|
||||
List<GroovyRowResult> selectDocuments(D3Interface d3, def lastId) {
|
||||
def params = [lastId]
|
||||
logInfo("Selektiere weitere Dokumente mit params=$params")
|
||||
d3.sql.executeAndGet(selectQuery, params)
|
||||
}
|
||||
|
||||
void logInfo(msg) {
|
||||
d3.log.info(msg)
|
||||
logFileInfo << """${new Date().format("yyyy-dd-MM hh:mm:ss")};${(Config.MODE != 2) ? 'SIMULATION!;' : ''}$msg\r\n"""
|
||||
}
|
||||
|
||||
void logError(def msg) {
|
||||
d3.log.error(msg)
|
||||
logFileError << """${new Date().format("yyyy-dd-MM hh:mm:ss")};$msg\r\n"""
|
||||
}
|
||||
|
||||
String toString() {
|
||||
def mappingString = mapping.collect {
|
||||
it.toString()
|
||||
}.join(", ")
|
||||
"dokumentart: $docType, Mapping: $mappingString"
|
||||
}
|
||||
}
|
||||
|
||||
class FieldTupel{
|
||||
def oldDbField, newDbField, toInteger
|
||||
|
||||
FieldTupel(def oldDbField, def newDbField, def toInteger = false) {
|
||||
this.oldDbField = oldDbField
|
||||
this.newDbField = newDbField
|
||||
this.toInteger = toInteger
|
||||
|
||||
if ( (newDbField >= 1 && newDbField <= 49) ) {
|
||||
println("Zielfeld $newDbField ist STRING")
|
||||
} else if ( newDbField >= 60 && newDbField <= 69 ) {
|
||||
println("Zielfeld $newDbField ist MULTI")
|
||||
} else {
|
||||
throw new Exception("DB Position $newDbField ist nicht erlaubt als Ziel!")
|
||||
}
|
||||
if ( oldDbField >= 60 && oldDbField <= 69 ) {
|
||||
throw new Exception("DB Position $oldDbField ist nicht erlaubt als Quelle!")
|
||||
}
|
||||
}
|
||||
|
||||
private getConvertStr( def dbPos ) {
|
||||
if (dbPos >= 50 && dbPos <= 59) {
|
||||
"TRY_CONVERT(nvarchar, f.dok_dat_feld_${dbPos}, 104)"
|
||||
} else if (dbPos >= 70 && dbPos <= 79) {
|
||||
"TRY_CONVERT(nvarchar, f.dok_dat_feld_${dbPos})"
|
||||
} else {
|
||||
if (toInteger) {
|
||||
"CONVERT(nvarchar, TRY_CONVERT(int, f.dok_dat_feld_${dbPos}))"
|
||||
} else {
|
||||
"CONVERT(nvarchar, f.dok_dat_feld_${dbPos})"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def getWhereClause() {
|
||||
if ( newDbField < 60 || newDbField > 69 ) {
|
||||
"(f.dok_dat_feld_${oldDbField} IS NOT NULL AND (f.dok_dat_feld_${newDbField} IS NULL OR ${getConvertStr(oldDbField)} <> f.dok_dat_feld_${newDbField} ))".toString()
|
||||
} else {
|
||||
"(f.dok_dat_feld_${oldDbField} IS NOT NULL AND NOT EXISTS(SELECT top 1 * FROM firm_spez_mult_val m WHERE f.doku_id = m.doku_id and m.field_no = ${newDbField} AND value_char = ${getConvertStr(oldDbField)} ))".toString()
|
||||
}
|
||||
}
|
||||
|
||||
def getSelectClause() {
|
||||
"""${ (newDbField < 60 || newDbField > 69) ? getConvertStr(newDbField) : "'Werte von 60ger Feldern koennen nicht gelogt werden!'" } as dok_dat_feld_${newDbField}, ${getConvertStr(oldDbField)} as dok_dat_feld_${oldDbField}"""
|
||||
}
|
||||
|
||||
String toString(){
|
||||
"[oldDbPos=$oldDbField, newDbPos=$newDbField, toInteger=$toInteger]"
|
||||
}
|
||||
}
|
||||
|
||||
def printStatus(D3Interface d3, Integer c, Boolean running = true){
|
||||
d3.log.statusBar("${ (Config.MODE != 2) ? '(SIMULATON)' : '' }Verarbeite Regel ${c + 1}/${Config.rules.size()}: Ok: ${Config.rules[c].ok}, Fehler: Ok: ${Config.rules[c].errors} | Gesamkt Ok: ${Config.ok}, Fehler: ${Config.errors} ${running ? '...' : '-Script beendet'}")
|
||||
}
|
||||
|
||||
def errors = 0
|
||||
def updated = 0
|
||||
D3Interface d3 = getProperty("d3")
|
||||
|
||||
try {
|
||||
d3.log.info("Script ${this.getClass().toString()} gestartet")
|
||||
d3.log.statusBar("Script ${this.getClass().toString()} gestartet")
|
||||
|
||||
Config.init( d3 )
|
||||
|
||||
d3.log.info("Es wurden ${Config.rules.size()} Regeln hinterlegt.")
|
||||
|
||||
if (Config.MODE == 0) {
|
||||
d3.log.statusBar("Dialog ist geoeffnet!")
|
||||
JOptionPane.showMessageDialog(null, "Es wurden die SQL-Statements generiert und in die Info-Log Dateien geschrieben.\nMode=0")
|
||||
d3.log.statusBar("Script beendet.")
|
||||
return null
|
||||
}
|
||||
|
||||
if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(null, "Es wurden ${Config.rules.size()} Regeln hinterlegt. Soll das Script ausgefuehrt werden?")) {
|
||||
d3.log.error("Script durch Benutzer abgebrochen!")
|
||||
d3.log.statusBar("Script durch Benutzer abgebrochen!")
|
||||
return 0
|
||||
}
|
||||
|
||||
if (Config.rules.size() > 0) {
|
||||
Config.rules.eachWithIndex { Rule rule, def index ->
|
||||
rule.logInfo("START *****************************************************")
|
||||
rule.logInfo(rule.toString())
|
||||
def rows = rule.selectDocuments(d3, "0")
|
||||
while (rows != null && rows.size() > 0) {
|
||||
rule.logInfo("Anzahl ermittelter Dokumente: ${rows.size()}")
|
||||
rows.each{ r ->
|
||||
try {
|
||||
def doc = d3.archive.getDocument(r.doku_id)
|
||||
|
||||
rule.mapping.each { m ->
|
||||
def newValue = r["dok_dat_feld_${m.oldDbField}"]
|
||||
d3.log.info("""setField ${m.newDbField} to ${newValue}""")
|
||||
if ( m.newDbField < 60 || m.newDbField > 69 ) {
|
||||
doc.field[ m.newDbField ] = r["dok_dat_feld_${m.oldDbField}"]
|
||||
} else {
|
||||
doc.field[ m.newDbField ][1] = r["dok_dat_feld_${m.oldDbField}"]
|
||||
for ( def j = 2; j <= d3.config.value("CUR_60ER_FIELD_NR").toInteger(); j++ ) {
|
||||
doc.field[ m.newDbField ][j] = null
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Config.MODE == 2) {
|
||||
doc.updateAttributes(adminUser, true)
|
||||
}
|
||||
Config.ok++
|
||||
rule.ok++
|
||||
rule.logInfo("Dokument aktualisiert $r")
|
||||
} catch (Exception e) {
|
||||
d3.log.error("$r -> ${e.message}")
|
||||
rule.logError("${r.doku_id};${e.message}")
|
||||
rule.errors++
|
||||
Config.errors++
|
||||
}
|
||||
printStatus(d3, index)
|
||||
}
|
||||
|
||||
rows = rule.selectDocuments(d3, rows.doku_id.last())
|
||||
}
|
||||
rule.logInfo("Keine (weiteren) Dokumente ermittelt")
|
||||
rule.logInfo("Zusammenfassung: Ok: ${rule.ok}, Fehler: ${rule.errors}")
|
||||
rule.logInfo("ENDE *****************************************************")
|
||||
}
|
||||
}
|
||||
printStatus(d3, Config.rules.size() - 1, false)
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace()
|
||||
d3.log.statusBar("Bei der Verarbeitung ist ein Fehler aufgetreten. Bitte kontrollieren Sie das d3 log. - Dialog geöffnet")
|
||||
JOptionPane.showMessageDialog(null, "Bei der Verarbeitung ist ein Fehler aufgetreten.\r\nBitte kontrollieren Sie das d3 log.")
|
||||
d3.log.statusBar("Bei der Verarbeitung ist ein Fehler aufgetreten. Bitte kontrollieren Sie das d3 log.")
|
||||
}
|
||||
d3.log.info("Script ${this.getClass().toString()} beendet")
|
||||
//d3.log.statusBar("Script ${this.getClass().toString()} beendet")
|
||||
|
||||
return 0
|
||||
277
_Vorlagen/Groovy-Skripte/ExportPersonaldokumente.groovy
Normal file
277
_Vorlagen/Groovy-Skripte/ExportPersonaldokumente.groovy
Normal file
@@ -0,0 +1,277 @@
|
||||
package dvelop.nanunana
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
|
||||
import org.bouncycastle.crypto.digests.RIPEMD256Digest
|
||||
import org.bouncycastle.crypto.io.DigestOutputStream
|
||||
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
|
||||
import groovy.json.JsonSlurper
|
||||
//update tabExportPersonaldokumente set done =null, err_code = null, err_msg = null, returncodePdfCreation = null where orgExtension = 'TIF'
|
||||
/*
|
||||
create table tabExportPersonaldokumente (
|
||||
doku_id nvarchar(10),
|
||||
done datetime,
|
||||
err_code int,
|
||||
err_msg nvarchar(250),
|
||||
filehash nvarchar(250),
|
||||
orgExtension nvarchar(10),
|
||||
returncodePdfCreation int
|
||||
);
|
||||
insert into tabExportPersonaldokumente (doku_id, orgExtension) select p.doku_id, p.datei_erw from firmen_spezifisch f join phys_datei p on f.doku_id = p.doku_id where kue_dokuart = 'DPERS' and dok_dat_feld_1 in ('10009');
|
||||
create index idxTabExportPersonaldokumente on tabExportPersonaldokumente(doku_id);
|
||||
create table tabExportMapping(
|
||||
typ nvarchar(50),
|
||||
inhalt nvarchar(50),
|
||||
postfix nvarchar(50)
|
||||
);
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Abmahnung/Notiz', 'Abmahnung', 'ab');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Abmahnung/Notiz', 'Notiz', 'not');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Arbeitsrechtliche Verfahren', 'Schriftverkehr Anwalt', 'sv anw');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Arbeitsrechtliche Verfahren', 'Schriftverkehr Gericht', 'sv ger');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Arbeitsunfähigkeit', 'Reha/Kur', 'reha');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Arbeitsunfähigkeit', 'Sonstiges', 'sons au');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Arbeitsunfähigkeit', 'Unfallanzeige', 'unfall');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Arbeitsunfähigkeit', 'Wiedereingliederung', 'we');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Asienreise', 'Schreiben E&V', 'asien');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Ausbildung/EQ', 'Ausbildung', 'ausb');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Ausbildung/EQ', 'EQ', 'eq');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Beendigung', 'Austrittsunterlagen', 'austritt');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Beendigung', 'Beendigungsschreiben', 'kdg');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Beurteilung/MA-Gespräch', 'Beurteilungen', 'beurt');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Beurteilung/MA-Gespräch', 'MA-Gespräch', 'ma ge');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Bewerbung', 'Bewerbung', 'bew');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Bewerbung', 'nachgereichte Unterlagen', 'nach U');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Corona', 'Kurzarbeit', 'ka co');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Corona', 'Quarantäne', 'qua co');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Corona', 'Sonderzahlung', 'sz co');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Corona', 'Sonstiges', 'sons co');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Dienstwagen', 'KFZ-Überlassung', 'kfz');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Elternzeit/Mutterschutz', 'Beschäftigungsverbot', 'bv');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Elternzeit/Mutterschutz', 'Elternzeit', 'etz');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Elternzeit/Mutterschutz', 'Mutterschutz', 'muschu');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Forderungen', 'Insolvenz', 'insol');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Forderungen', 'Pfändung', 'pfänd');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Forderungen', 'Schuldanerkenntnis', 'schuld');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Forderungen', 'Überzahlung', 'überzahl');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Inventar', 'Inventar', 'inven');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Prämie/Ziele', 'Prämie', 'prämie');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Prämie/Ziele', 'Ziele', 'ziele');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Sonderleistungen', 'Darlehen', 'darl');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Sonderleistungen', 'Dauerreisekostenvorschuss', 'reiseko');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Sonderleistungen', 'Jubiläum', 'jubi');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Sonderleistungen', 'Pensionskasse (HPK)/Direktversicherung', 'pens');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Sonderleistungen', 'Umzugskosten/Mietkosten', 'umzug');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Sonstiges', 'Sonstiges', 'so');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Filialwechsel', 'fw');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Funktionszulage/Positionsveränderung', 'funkt');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Gehaltserhöhung', 'gehalt');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Kurzarbeit', 'ka');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Lohnbescheid CZ', 'lohn cz');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Stundenveränderung', 'stunden');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Vertrag', 'av');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertrag', 'Vertragsverlängerung', 'verl');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertragsergänzungen', 'Einarbeitung', 'eina');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertragsergänzungen', 'Empfangsbestätigungen', 'empfang');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertragsergänzungen', 'Fahrtkostenzuschuss', 'fkz');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertragsergänzungen', 'Homeoffice', 'ho');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertragsergänzungen', 'KiTa-Zuschuss', 'kita');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertragsergänzungen', 'Mankoabrede', 'manko');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vertragsergänzungen', 'Nebentätigkeit', 'neben');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Vollmacht', 'Vollmacht', 'voll');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Weiterbildung', 'extern', 'ext');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Weiterbildung', 'intern', 'int');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Zeugnis', 'IHK/Schule', 'ihk zeug');
|
||||
insert into tabExportMapping(typ, inhalt, postfix) values ('Zeugnis', 'NN/Thevs', 'nn zeug');
|
||||
*/
|
||||
|
||||
class Config {
|
||||
class DDF {
|
||||
static final def PERS_NR = 1
|
||||
static final def DOK_DATUM = 50
|
||||
static final def DOK_TYP = 7
|
||||
static final def DOK_INHALT = 8
|
||||
}
|
||||
static final def DOC_TYPE = "DPERS"
|
||||
static def LAST_ID = ""
|
||||
static final def EXPORT_PATH = "g:\\Export"
|
||||
|
||||
class API {
|
||||
static final def BASE_URI = ""
|
||||
static final def REPOSITORY_ID = ""
|
||||
static final def API_KEY = ""
|
||||
}
|
||||
|
||||
class Counter {
|
||||
static def i = 0
|
||||
static def ok = 0
|
||||
static def err = 0
|
||||
static def max = 0
|
||||
static def convert_ok = 0
|
||||
static def convert_error = 0
|
||||
}
|
||||
|
||||
static PERS_NR_MAP = [
|
||||
'33648' : '44523'
|
||||
, '10092' : '48124'
|
||||
, '27456' : '47475'
|
||||
, '38009' : '57613'
|
||||
, '25428' : '42959'
|
||||
, '14180' : '47479'
|
||||
, '39907' : '87316'
|
||||
, '28110' : '79438'
|
||||
, '28173' : '43116'
|
||||
, '38831' : '43271'
|
||||
, '47901' : '61719'
|
||||
, '57499' : '87318'
|
||||
, '60703' : '70438'
|
||||
, '58096' : '93812'
|
||||
, '60408' : '93812'
|
||||
, '72840' : '94291'
|
||||
, '76168' : '90006'
|
||||
]
|
||||
}
|
||||
|
||||
class Downloader {
|
||||
|
||||
static def authSessionId, expire
|
||||
static void login() {
|
||||
HttpsURLConnection request= new URL(Config.API.BASE_URI + "/identityprovider/login").openConnection()
|
||||
request.requestMethod = "GET"
|
||||
request.setRequestProperty("Origin", Config.API.BASE_URI)
|
||||
request.setRequestProperty("Accept", "application/json")
|
||||
request.setRequestProperty("Authorization", "Bearer ${Config.API.API_KEY}")
|
||||
|
||||
if (request.responseCode == 200) {
|
||||
def json = request.inputStream.withCloseable { stream ->
|
||||
new JsonSlurper().parse(stream as InputStream)
|
||||
}
|
||||
|
||||
authSessionId = json.AuthSessionId
|
||||
expire = new Date().getTime()
|
||||
} else {
|
||||
throw new Exception("Login fehlgeschlagen -> $request.responseCode")
|
||||
}
|
||||
}
|
||||
|
||||
static boolean isExpired() {
|
||||
new Date().getTime() < (expire + 3600000)
|
||||
}
|
||||
|
||||
static String downloadDocument(String docId, String filePath) {
|
||||
if (authSessionId == null || isExpired()) {
|
||||
login()
|
||||
}
|
||||
def out = new File(filePath)
|
||||
if (out.exists()) {
|
||||
throw new Exception("Datei bereits vorhanden: $filePath")
|
||||
}
|
||||
|
||||
String baseRequest = Config.API.BASE_URI + "/dms/r/${Config.API.REPOSITORY_ID}/o2/${docId}/v/current/b/main/c"
|
||||
|
||||
HttpsURLConnection request = new URL(baseRequest).openConnection() as HttpsURLConnection
|
||||
request.requestMethod = "GET"
|
||||
request.setRequestProperty("Origin", Config.API.BASE_URI)
|
||||
request.setRequestProperty("Accept", "application/json")
|
||||
request.setRequestProperty("Authorization", "Bearer $authSessionId")
|
||||
|
||||
if (request.responseCode == 200) {
|
||||
request.inputStream.withCloseable { stream ->
|
||||
out << stream.getBytes()
|
||||
}
|
||||
|
||||
return getRIPEMD256(out)
|
||||
} else {
|
||||
throw new Exception ("Fehler beim Herunterladen von $baseRequest")
|
||||
}
|
||||
}
|
||||
|
||||
static private def getRIPEMD256( File file ) {
|
||||
DigestOutputStream dos = new DigestOutputStream(new RIPEMD256Digest()).withStream { os ->
|
||||
file.withInputStream { is -> os << is }
|
||||
}
|
||||
"RIPEMD256:" + dos.getDigest().encodeBase64()
|
||||
}
|
||||
}
|
||||
|
||||
def getDocsToExport(D3Interface d3) {
|
||||
def query = "SELECT top 100 doku_id FROM d3pa.dbo.tabExportPersonaldokumente WHERE doku_id > ? and err_code is null order by doku_id"
|
||||
def params = [Config.LAST_ID]
|
||||
|
||||
return d3.sql.executeAndGet(query, params)
|
||||
}
|
||||
|
||||
def getPostfix(D3Interface d3, Document doc) {
|
||||
def rows
|
||||
if (doc.field[Config.DDF.DOK_INHALT] == null){
|
||||
rows = d3.sql.executeAndGet("SELECT postfix FROM d3pa.dbo.tabExportMapping WHERE typ = ? and inhalt is null", [doc.field[Config.DDF.DOK_TYP]])
|
||||
} else {
|
||||
rows = d3.sql.executeAndGet("SELECT postfix FROM d3pa.dbo.tabExportMapping WHERE typ = ? and isnull(inhalt, 'NULL') = isnull(?, 'NULL')", [doc.field[Config.DDF.DOK_TYP], doc.field[Config.DDF.DOK_INHALT]])
|
||||
}
|
||||
|
||||
if (rows?.size()== 1) {
|
||||
return rows.first().postfix
|
||||
} else {
|
||||
throw new Exception("Postfix für ${doc.field[Config.DDF.DOK_TYP]}, ${doc.field[Config.DDF.DOK_INHALT]} konnte nicht ermittelt werden!")
|
||||
}
|
||||
}
|
||||
|
||||
d3 = (D3Interface) getProperty("d3")
|
||||
|
||||
new File("${Config.EXPORT_PATH}\\TIF").mkdirs()
|
||||
|
||||
Config.Counter.max = d3.sql.executeAndGet("SELECT count(*) anzahl FROM d3pa.dbo.tabExportPersonaldokumente WHERE err_code is null").first().anzahl
|
||||
|
||||
def docs = getDocsToExport(d3)
|
||||
|
||||
while (docs?.size() > 0) {
|
||||
docs.each {
|
||||
d3.log.statusBar("${Config.Counter.i++}/${Config.Counter.max} - ok=${Config.Counter.ok}, err=${Config.Counter.err}, convert_ok=${Config.Counter.convert_ok}, convert_error=${Config.Counter.convert_error}")
|
||||
try {
|
||||
Config.LAST_ID = it.doku_id
|
||||
def doc = d3.archive.getDocument(it.doku_id)
|
||||
|
||||
def postfix = getPostfix(d3, doc)
|
||||
|
||||
def persNr = doc.field[Config.DDF.PERS_NR]
|
||||
if ( Config.PERS_NR_MAP.containsKey(persNr) ) {
|
||||
d3.log.info("PersNr $persNr wird uebersetzt in ${Config.PERS_NR_MAP[persNr]}")
|
||||
persNr = Config.PERS_NR_MAP[persNr]
|
||||
} else {
|
||||
d3.log.info("PersNr $persNr wird nicht uebersetzt")
|
||||
}
|
||||
|
||||
def exportPath = "${persNr}_${(doc.field[Config.DDF.DOK_DATUM] ?: new Date(doc.created.getTime())).format('dd_MM_yyyy')}_${doc.field[Config.DDF.DOK_INHALT]}_${postfix}_${doc.id}.${doc.fileExtension}"
|
||||
exportPath = exportPath.replaceAll(/[\\/?<>:*]/, "-")
|
||||
if (doc.fileExtension?.toUpperCase() == "TIF"){
|
||||
exportPath = "${Config.EXPORT_PATH}\\TIF\\$exportPath"
|
||||
} else {
|
||||
exportPath = "${Config.EXPORT_PATH}\\$exportPath"
|
||||
}
|
||||
def hash = Downloader.downloadDocument(doc.id, exportPath)
|
||||
|
||||
def d3hash = d3.sql.executeAndGet("select isnull(file_hash, md5) file_hash from d3pa.dbo.files_datentraeger where doku_id= ? and index_version = ? ", [it.doku_id, doc.fileIdCurrentVersion]).file_hash.first()
|
||||
d3.log.info([it.doku_id, doc.fileIdCurrentVersion])
|
||||
|
||||
if ( hash == d3hash ) {
|
||||
d3.sql.execute("update d3pa.dbo.tabExportPersonaldokumente set err_code = 0, err_msg = null, done = getdate(), filehash = ?, dateiname = ? where doku_id = ?", [hash, exportPath, it.doku_id])
|
||||
} else {
|
||||
d3.log.info( "fileHashd3=${d3hash}")
|
||||
d3.log.info( "hashberechnet=$hash")
|
||||
d3.sql.execute("update d3pa.dbo.tabExportPersonaldokumente set err_code = 2, err_msg = 'Der berechnete hash stimmt nicht überein!', done = getdate(), filehash = ?, dateiname = ? where doku_id = ?", [hash, exportPath, it.doku_id])
|
||||
}
|
||||
|
||||
Config.Counter.ok++
|
||||
} catch (Exception e) {
|
||||
d3.log.error(e.message)
|
||||
d3.sql.execute("update d3pa.dbo.tabExportPersonaldokumente set err_code = 1, err_msg = ?, done = getdate(), filehash = null where doku_id = ?", [e.message.take(250), it.doku_id])
|
||||
Config.Counter.err++
|
||||
}
|
||||
}
|
||||
docs = getDocsToExport(d3)
|
||||
}
|
||||
d3.log.statusBar("Export abgeschlossen: ${Config.Counter.i}/${Config.Counter.max} - ok=${Config.Counter.ok}, err=${Config.Counter.err}, convert_ok=${Config.Counter.convert_ok}, convert_error=${Config.Counter.convert_error}")
|
||||
return null
|
||||
|
||||
102
_Vorlagen/Groovy-Skripte/automaticRelease.groovy
Normal file
102
_Vorlagen/Groovy-Skripte/automaticRelease.groovy
Normal file
@@ -0,0 +1,102 @@
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
D3Interface d3 = getProperty("d3");
|
||||
d3.log.info("Start Skript: Automatische Freigabe");
|
||||
|
||||
/**
|
||||
* ----------------------Start Initialisierung----------------------------------------------
|
||||
*/
|
||||
|
||||
int returnCode;
|
||||
String currentDB;
|
||||
final String BEARBEITUNG = "DOC_STAT_PROCESSING";
|
||||
final String FREIGABE = "DOC_STAT_RELEASE";
|
||||
final String PRUEFUNG = "DOC_STAT_VERIFICATION";
|
||||
def docuIdList = [];
|
||||
def dtsList = [];
|
||||
|
||||
/**
|
||||
* ----------------------Ende Initialisierung-----------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* ----------------------Konfigurationsbereich allgemein------------------------------------
|
||||
*/
|
||||
|
||||
//Zeitintervall (Tage) für die automatische Freigabe
|
||||
int daysOff = 14;
|
||||
|
||||
//Angabe der relevanten Dokumentart-Kürzel
|
||||
dtsList = ["KRDOK"];
|
||||
|
||||
|
||||
//Angabe des ausführenden Benutzers
|
||||
def d3User = "dvelop";
|
||||
|
||||
/**
|
||||
* ----------------------Ende Konfigurationsbereich allgemein-------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* ----------------------Konfigurationsbereich SQL-------------------------------------------
|
||||
*/
|
||||
|
||||
def dtsString = String.join("','", dtsList);
|
||||
d3.log.info("Dokumentart(en): ${dtsString}");
|
||||
|
||||
//Datumsgrente ermitteln
|
||||
def date = new SimpleDateFormat("dd.MM.yyyy").format(new Date() - daysOff);
|
||||
d3.log.info("Datumsgrenze: ${date}");
|
||||
|
||||
//Prüfung des Datenbank-Servers
|
||||
String dbServer = d3.config.value("db_server");
|
||||
d3.log.info("Datenbank: ${dbServer}");
|
||||
|
||||
if(dbServer == "ORAC" || dbServer == "DB2") {
|
||||
currentDB = "to_date('${date}','DD.MM.YYYY')";
|
||||
}
|
||||
|
||||
if(dbServer == "MSQL") {
|
||||
currentDB = "CONVERT(DATETIME, '${date}', 104)";
|
||||
}
|
||||
String sqlStm = """select firmen_spezifisch.doku_id as dokId from phys_datei
|
||||
inner join firmen_spezifisch on (firmen_spezifisch.doku_id = phys_datei.doku_id)
|
||||
where dokuart in ( '${dtsString}' )
|
||||
and logi_verzeichnis in ('Be', 'Pr')
|
||||
and last_update_attr <= ${currentDB}""";
|
||||
|
||||
d3.log.info("SQL: ${sqlStm}");
|
||||
|
||||
def resultset = d3.sql.executeAndGet(sqlStm);
|
||||
|
||||
docuIdList = resultset.collect{ it.dokId };
|
||||
|
||||
/**
|
||||
* ----------------------Ende Konfigurationsbereich SQL---------------------------------------
|
||||
*/
|
||||
|
||||
for(String id : docuIdList)
|
||||
{
|
||||
// Hole aktuellen Status des Dokuments
|
||||
def currentDoc = d3.archive.getDocument(id, d3User );
|
||||
def docStatus = currentDoc.getStatus();
|
||||
|
||||
d3.log.info("Aktuelle ID: ${id}");
|
||||
|
||||
if(docStatus.toString() == BEARBEITUNG || docStatus.toString() == PRUEFUNG)
|
||||
{
|
||||
returnCode = currentDoc.transfer("Freigabe", "", "Automatischer Statustransfer", false, 0, "");
|
||||
|
||||
if(returnCode != 0)
|
||||
{
|
||||
d3.log.error("Statustransfer 'Freigabe' für DokID: ${id} ist fehlgeschlafen! Fehlercode: ${returnCode}");
|
||||
} else {
|
||||
d3.log.info("Statustransfer 'Freigabe' für DokID: ${id} war erfolgreich!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
d3.log.info("Ende Skript: Automatische Freigabe");
|
||||
38
_Vorlagen/Groovy-Skripte/createFolderWithServerApi.groovy
Normal file
38
_Vorlagen/Groovy-Skripte/createFolderWithServerApi.groovy
Normal file
@@ -0,0 +1,38 @@
|
||||
import com.dvelop.d3.server.Condition
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import com.dvelop.d3.server.Entrypoint
|
||||
import com.dvelop.d3.server.User
|
||||
import com.dvelop.d3.server.core.D3
|
||||
public class D3FolderTest{
|
||||
@Entrypoint( entrypoint = "hook_insert_exit_20" ) //------------------------
|
||||
@Condition( doctype = "DMIG" )
|
||||
public int testCreateFolder( D3 d3, Document doc, def fileDest, def importOK, User user, DocumentType docTypeShort ){
|
||||
// Step 1: Create Document-Object ---------------------
|
||||
// Für den Aufruf von "folder_create" wird ein Dokument-Objekt benötigt. Wenn keines als Parameter zur Verfügung steht,
|
||||
// so kann über die "Archive" Schnittstelle ein Dokument-Objekt für ein existierendes Dokument erzeugt werden.
|
||||
// Dieses wird als Vorlage benutzt und dessen Attribute werden wie gewünscht angepasst.
|
||||
|
||||
def newDocObj = d3.archive.getDocument( "P000000001", "dvelop" ); // Das hier definierte Basis-Dokument legt den Typ fest!
|
||||
|
||||
newDocObj.type = "APERS"; // Leider scheint die Änderung des Dokumenttyps nicht möglich, dieser Eintrag wird ignoriert.
|
||||
newDocObj.status = Document.DocStatus.DOC_STAT_RELEASE;
|
||||
newDocObj.editor = "dvelop";
|
||||
newDocObj.setText(1, "Bemerkungstext Zeile 1");
|
||||
|
||||
newDocObj.field[1] = "7896645";
|
||||
newDocObj.field[80] = 0;
|
||||
//newDocObj.field[60][1] = "Akte per folder_create - Attrib 60-1";
|
||||
// ...
|
||||
|
||||
def error = d3.call.folder_create( newDocObj );
|
||||
if( error ){
|
||||
println "Fehler $error bei der Aktenanlage"
|
||||
}
|
||||
else {
|
||||
println "Aktenanlage erfolgreich"
|
||||
}
|
||||
|
||||
return 0;
|
||||
} // end of testCreateFolder
|
||||
} // end of D3FolderTest
|
||||
33
_Vorlagen/Groovy-Skripte/createGlobalDBInstance.groovy
Normal file
33
_Vorlagen/Groovy-Skripte/createGlobalDBInstance.groovy
Normal file
@@ -0,0 +1,33 @@
|
||||
import groovy.sql.*;
|
||||
|
||||
public class PersonnelHooks {
|
||||
// definition of entrypoint
|
||||
|
||||
|
||||
public String username = "sa";
|
||||
public String password = "password"
|
||||
def sql_global ;
|
||||
|
||||
//*************************************** intiale Anmeldung an die DB
|
||||
public PersonnelHooks(){
|
||||
sql_global = Sql.newInstance("jdbc:sqlserver://10.95.6.177:1433;databaseName=D3ER",username, password);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// hook_insert_entry_10 für Bewerbungsdokumente----------------------------------------------------
|
||||
@Entrypoint(entrypoint = "hook_insert_entry_10")
|
||||
@Condition(doctype = [PersonnelConstants.g_DA_BEWERBERDOKUMENTE])
|
||||
public int DbsInsertEntry10_3(D3Interface d3, User d3User, DocumentType docTypeShort, Document docObj) {
|
||||
d3.log.info("[D3ECMPF] groovy hook insert_entry_10_3 $docTypeShort.id");
|
||||
|
||||
sql_global.eachRow("Select zeich_nr from phys_datei ")
|
||||
{
|
||||
d3.log.info("$it.zeich_nr");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// Ende hook_insert_entry_10 für Bewerbungsdokumente----------------------------------------------------
|
||||
|
||||
} // end of class
|
||||
38
_Vorlagen/Groovy-Skripte/createRendition.groovy
Normal file
38
_Vorlagen/Groovy-Skripte/createRendition.groovy
Normal file
@@ -0,0 +1,38 @@
|
||||
//Dieses Skript erzeugt gezielt für Dokumente eine Rendition
|
||||
//Ausgeführt wird dieses Skript per d.3 server interface, zuvor muss das SQL-Statement angepasst werden. Das SQL-Statement muss die Dokumenten-IDs der Dokumente liefern, für die eine Rendition erzeugt werden soll.
|
||||
//Es muss ein Benutzer "scriptUser" angegeben werden, der volle Rechte für die entsprechenden Dokumente hat.
|
||||
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import javax.swing.*;
|
||||
String scriptName = getClass().getName()
|
||||
|
||||
int dialogButton = JOptionPane.YES_NO_OPTION;
|
||||
int dialogResult = JOptionPane.showConfirmDialog (null, "Dies ist ein nicht supportetes Tool und ist nur fuer den internen Einsatz durch die d.velop AG gedacht.\nEs koennen erhebliche Schaeden in Ihrer d.3 Umgebung entstehen.\n \nWollen Sie wirklich fortfahren?\n ---------------------------------------------------\nThis is an unsupported tool and is only intended for internal use by d.velop AG.\nConsiderable damage can occur in your d.3 environment.\n \nAre you sure you want to continue?","Warning",dialogButton);
|
||||
if(dialogResult == JOptionPane.NO_OPTION){
|
||||
d3.log.info(scriptName + " - cancel")
|
||||
return 0;
|
||||
}
|
||||
|
||||
final def maxRows = 3000
|
||||
String scriptUser = "d3_groovy"
|
||||
int render_option = 2 //0=Nur OCR, 1=TIFF, 2=PDF, 3=TIFF und PDF
|
||||
boolean ocr = true
|
||||
boolean replace_doc = false
|
||||
boolean overwrite = true //false=Auftrag für Rendition wird nur erzeugt, wenn noch keine Rendition vorhanden ist, true=Auftrag für Rendition wird immer erzeugt
|
||||
String prio = "normal" //mögl. Wertelow, normal, high
|
||||
|
||||
def resultSet = d3.sql.executeAndGet("select doku_id from firmen_spezifisch where doku_id = 'A000016491'", maxRows)
|
||||
d3.log.info (scriptName + " - "+resultSet.size()+" Documents found for rendition creation")
|
||||
for (row in resultSet)
|
||||
{
|
||||
try {
|
||||
def retval = d3.call.document_render ("", "", render_option, ocr, true, replace_doc, overwrite, row["doku_id"], scriptUser, "", 0, prio);
|
||||
d3.log.info (scriptName + " - create rendition for " + row["doku_id"] + "--> " + retval)
|
||||
}
|
||||
catch (D3Exception e) {
|
||||
d3.log.error("Error creating rendition " + e.getMessage())
|
||||
}
|
||||
}
|
||||
112
_Vorlagen/Groovy-Skripte/deleteDocuments.groovy
Normal file
112
_Vorlagen/Groovy-Skripte/deleteDocuments.groovy
Normal file
@@ -0,0 +1,112 @@
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import com.dvelop.d3.server.User
|
||||
import com.dvelop.d3.server.ValueSet
|
||||
import com.dvelop.d3.server.Validation
|
||||
import com.dvelop.d3.server.core.D3
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import java.lang.annotation.*
|
||||
import java.sql.SQLWarning;
|
||||
import java.sql.Timestamp
|
||||
|
||||
|
||||
/*
|
||||
Skript zum Löschen von Dokumenten
|
||||
Folgende Konfigurationsparameter sollten vorher im d.3 angedacht werden, insofern die Dokumente auch physikalisch gelöscht werden sollen
|
||||
DELETE_DOCS_ELAPSED_AUTO (Dokumente logisch löschen)
|
||||
DELETE_DOCS_ELAPSED_PHYSICAL (Dokumente physikalisch löschen)
|
||||
DELETE_DOCS_ELAPSED_SEC_STORAGE (Dokumente vom Sekundärspeicher löschen, falls im Einsatz)
|
||||
RECYCLE_STORAGE_PERIOD (Verweildauer im Papierkorb)
|
||||
*/
|
||||
|
||||
// #################################################################################
|
||||
// Konfigurationsbereich
|
||||
// #################################################################################
|
||||
// Pflichtfelder:
|
||||
// --------------
|
||||
def DokumentArt = "('DVFVA', 'DSFVA', 'AFOND', 'AVFVA', 'AMAND', 'AFVA', 'AKUND', 'ASFVA')" // Dokumentarten, entspricht SQL-Where In ...
|
||||
int LoeschModus = 2 // 1 = erzeuge d3l-Datei, 2 = Dokumente Loeschen
|
||||
|
||||
// Optionale Felder
|
||||
// ----------------
|
||||
// Falls leer, im Format <Feldname> = "" angeben, dann wird ueber das Feld nicht eingeschränkt,
|
||||
def ImportDatum = "" // Dokumente >= Import-Datum gem. DB-Tabelle phys_datei, Spalte datum_einbring
|
||||
// Format: DD.MM.YYYY
|
||||
def ImportBenutzer = "" // d.3 Benutzerkürzel, optional
|
||||
def StammGPNummer = "" // Stamm-GP-Nummer
|
||||
|
||||
// Pfade
|
||||
// -----
|
||||
def LogPfad = "D:\\d3log\\DokumenteLoeschen\\"
|
||||
def LogDateiName = "DokumenteLoeschen"
|
||||
def LinkDateiName = "DokumenteLoeschenLink"
|
||||
|
||||
// #################################################################################
|
||||
// Ende Konfigurationsbereich
|
||||
// #################################################################################
|
||||
|
||||
d3.log.info("Starte Lösch-Skript für Dokumentarten: " + DokumentArt)
|
||||
d3.log.info("ImportDatum >= " + ImportDatum)
|
||||
d3.log.info("ImportBenutzer = " + ImportBenutzer)
|
||||
d3.log.info("StammGPNummer = " + StammGPNummer)
|
||||
|
||||
def LogDatei = new File(LogPfad + LogDateiName + ".log")
|
||||
LogDatei.append("\n\rStarte Löschen von Dokumenten ")
|
||||
|
||||
def LinkDatei = new File(LogPfad + LinkDateiName + ".d3l")
|
||||
|
||||
int countDeleted = 0
|
||||
|
||||
if (LoeschModus == 1)
|
||||
{
|
||||
LinkDatei.write("idlist")
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// SQL Abfrage zusammensetzen
|
||||
def SQLWhere = "where kue_dokuart in " + DokumentArt
|
||||
if (ImportDatum)
|
||||
{
|
||||
SQLWhere = SQLWhere + " and datum_einbring >= to_date('" + ImportDatum + "', 'DD.MM.YYYY')"
|
||||
}
|
||||
if (ImportBenutzer)
|
||||
{
|
||||
SQLWhere = SQLWhere + " and besitzer = '" + ImportBenutzer + "'"
|
||||
}
|
||||
if (StammGPNummer)
|
||||
{
|
||||
SQLWhere = SQLWhere + " and dok_dat_feld_3 = '" + StammGPNummer + "'"
|
||||
}
|
||||
|
||||
def resultset = d3.sql.executeAndGet("""select fs.doku_id
|
||||
from firmen_spezifisch fs
|
||||
inner join phys_datei pd on (fs.doku_id = pd.doku_id)""" + SQLWhere)
|
||||
if (resultset.size() > 0)
|
||||
{
|
||||
d3.log.info (resultset.size() + " Dokumente zum Löschen ermittelt.")
|
||||
LogDatei.append("\n\r" + resultset.size() + " Dokumente zum Löschen ermittelt.")
|
||||
|
||||
// Ergebnis durchlaufen und Dokumente / Akten aktualisieren
|
||||
resultset.each
|
||||
{
|
||||
if (LoeschModus == 1)
|
||||
{
|
||||
LinkDatei.append("\n" + it.get("doku_id"))
|
||||
}
|
||||
else if (LoeschModus == 2)
|
||||
{
|
||||
LogDatei.append("\n" + it.get("doku_id") + " wird gelöscht.")
|
||||
d3.call.document_delete("TestdokumenteLoeschen", true, true, it.get("doku_id"), "", false)
|
||||
countDeleted++
|
||||
d3.log.info(countDeleted + " von " + resultset.size() + " Dokumente geloescht.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
d3.log.error ("Dokumente loeschen: Fehler in Script aufgetreten!");
|
||||
}
|
||||
45
_Vorlagen/Groovy-Skripte/deleteGroups.groovy
Normal file
45
_Vorlagen/Groovy-Skripte/deleteGroups.groovy
Normal file
@@ -0,0 +1,45 @@
|
||||
//Dieses Skript erstellt eine XML-Datei mit Gruppen-IDs die gelöscht werden sollen. Die XML-Datei kann per d.3 administration importiert werden.
|
||||
//Ausgeführt wird dieses Skript per d.3 server interface, zuvor muss das SQL-Statement angepasst werden. Das SQL-Statement muss die Gruppen-IDs der zu löschenden Gruppen liefern.
|
||||
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import javax.swing.*;
|
||||
String scriptName = getClass().getName()
|
||||
|
||||
int dialogButton = JOptionPane.YES_NO_OPTION;
|
||||
int dialogResult = JOptionPane.showConfirmDialog (null, "Dies ist ein nicht supportetes Tool und ist nur fuer den internen Einsatz durch die d.velop AG gedacht.\nEs koennen erhebliche Schaeden in Ihrer d.velop documents Umgebung entstehen.\n \nWollen Sie wirklich fortfahren?\n ---------------------------------------------------\nThis is an unsupported tool and is only intended for internal use by d.velop AG.\nConsiderable damage can occur in your d.velop documents environment.\n \nAre you sure you want to continue?","Warning",dialogButton);
|
||||
if(dialogResult == JOptionPane.NO_OPTION){
|
||||
d3.log.info(scriptName + " - cancel")
|
||||
return 0;
|
||||
}
|
||||
|
||||
final def maxRows = 3000
|
||||
|
||||
def resultSet = d3.sql.executeAndGet("select gruppen_id from benutzergruppen where benutzergruppe like '%GroupsToBeDeleted%'", maxRows)
|
||||
|
||||
if(resultSet.size() == 0){
|
||||
d3.log.info (scriptName + " - no result for groups to be deleted")
|
||||
JOptionPane.showMessageDialog(null, "No result for groups to be deleted.");
|
||||
return 0
|
||||
}
|
||||
|
||||
def now = new Date()
|
||||
File file = new File("ext_groovy/"+scriptName+"_"+now.format("yyyyMMddHHmmss", TimeZone.getTimeZone('UTC'))+".xml")
|
||||
|
||||
//Schreibe Kopf der XML-Datei
|
||||
file.append('<?xml version="1.0" encoding="utf-8"?>\n')
|
||||
file.append('<master_data>\n')
|
||||
|
||||
for (row in resultSet){
|
||||
d3.log.info (scriptName + " - preparing group " + row["gruppen_id"] + " for deletion")
|
||||
file.append(' <group id="' + row["gruppen_id"] + '" action="DELETE"/>\n')
|
||||
}
|
||||
|
||||
//Schreibe Fuß der XML-Datei
|
||||
file.append('</master_data>')
|
||||
|
||||
d3.log.info (scriptName + " - Creation of transportfile ("+file+") finished. Please consider that result for groups to be deleted is correct.")
|
||||
d3.log.info (scriptName + " - If result is correct the transportfile can be imported via d.3 administration.")
|
||||
JOptionPane.showMessageDialog(null, "Creation of transportfile ("+file+") finished. Please consider that result for groups to be deleted is correct.\n If result is correct the transportfile can be imported via d.3 administration.");
|
||||
258
_Vorlagen/Groovy-Skripte/dmsUploadDoc.groovy
Normal file
258
_Vorlagen/Groovy-Skripte/dmsUploadDoc.groovy
Normal file
@@ -0,0 +1,258 @@
|
||||
import groovy.json.JsonBuilder
|
||||
import groovyx.net.http.FromServer
|
||||
import groovyx.net.http.HttpBuilder
|
||||
import groovyx.net.http.ContentTypes
|
||||
|
||||
import java.text.SimpleDateFormat
|
||||
import java.time.YearMonth
|
||||
|
||||
|
||||
class Configuration
|
||||
{
|
||||
// login data, used to perform operations which need authentication
|
||||
public static String API_KEY = "{yourApiKey}"
|
||||
// Base Url of d.3 system, to target API endpoints
|
||||
public static String baseUrl = "https://{yourUrl}.de"
|
||||
// repository of destination, is used to target right repository for searching documents
|
||||
public static String repositoryId = "{yourRepostoryId}"
|
||||
public static String logDirPath = "./log/"
|
||||
public static File logFile = new File(logDirPath + System.currentTimeMillis() + "_log.csv")
|
||||
|
||||
|
||||
|
||||
public static String dmsUrl = "/dms/r/" + repositoryId
|
||||
public static HttpBuilder httpBuilder = null
|
||||
public static String authSessionId = ""
|
||||
public static String sessionExpire = ""
|
||||
public static File csvLog = null
|
||||
}
|
||||
|
||||
// must be allowed to set origin header
|
||||
System.setProperty( "sun.net.http.allowRestrictedHeaders", "true")
|
||||
// create httpBuilde with baseUrl
|
||||
log("Create httpBuilder")
|
||||
Configuration.httpBuilder = HttpBuilder.configure {
|
||||
request.uri = Configuration.baseUrl
|
||||
request.headers['Accept'] = 'application/json'
|
||||
request.headers['Origin'] = Configuration.baseUrl
|
||||
}
|
||||
log("httpBuilder created")
|
||||
|
||||
login()
|
||||
uploadDocument()
|
||||
|
||||
/**
|
||||
* Function to upload document / create placeholder
|
||||
*/
|
||||
void uploadDocument(){
|
||||
|
||||
// check if login is valid
|
||||
if(isLoginExpired()) {
|
||||
login()
|
||||
}
|
||||
String requestUUID = UUID.randomUUID().toString()
|
||||
|
||||
// create new file
|
||||
// check if directory "Tmp" exists
|
||||
File tmpDir = new File("./Tmp/")
|
||||
if(!tmpDir.exists() || !tmpDir.isDirectory()) {
|
||||
// create directory for tmp files
|
||||
tmpDir.mkdirs()
|
||||
}
|
||||
File tmpFile = new File("./Tmp/mydoc.hc")
|
||||
tmpFile.createNewFile()
|
||||
tmpFile.text = "New mydoc: " + System.currentTimeMillis()
|
||||
|
||||
Configuration.httpBuilder.post {
|
||||
request.uri.path = Configuration.dmsUrl + "/blob/chunk/"
|
||||
request.headers['Authorization'] = 'Bearer ' + Configuration.authSessionId
|
||||
request.headers['Accept'] = 'application/hal+json'
|
||||
request.headers['x-dv-request-id'] = requestUUID
|
||||
request.contentType = ContentTypes.BINARY[0]
|
||||
request.body = tmpFile.bytes
|
||||
response.exception { e ->
|
||||
log("RequestUUID: ${requestUUID} - Upload exception: ${e.message}")
|
||||
}
|
||||
response.failure { f ->
|
||||
log("RequestUUID: ${requestUUID} - Upload failed: ${f.message}")
|
||||
|
||||
// if request failed because of "Unathorized" ir "Forbidden" try new login and then send request again
|
||||
if(f.message.toString().equals("Unauthorized") || f.message.toString().equals("Forbidden") ) {
|
||||
login()
|
||||
}
|
||||
}
|
||||
response.success { s, bytes ->
|
||||
// get header for Location
|
||||
String locationUrl = FromServer.Header.find(s.getHeaders(), "Location").parsed
|
||||
if(locationUrl != null && !locationUrl.equals("")) {
|
||||
log("RequestUUID: ${requestUUID} - Upload of binary successful -> locationUrl: ${locationUrl} ")
|
||||
//Now assign metadata to uploaded document
|
||||
saveNewUploadedDocument(locationUrl)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function to assign metadata to uploaded document
|
||||
*/
|
||||
void saveNewUploadedDocument(String locationUrl){
|
||||
// check if login is valid
|
||||
if(isLoginExpired()) {
|
||||
login()
|
||||
}
|
||||
|
||||
String requestUUID = UUID.randomUUID().toString()
|
||||
|
||||
Map bodyMap = new HashMap<>()
|
||||
bodyMap.put("filename", "mydoc.hc")
|
||||
//Your file
|
||||
bodyMap.put("sourceCategory", "DTEST")
|
||||
bodyMap.put("sourceId", Configuration.dmsUrl + "/source")
|
||||
bodyMap.put("contentLocationUri", locationUrl)
|
||||
|
||||
List propertiesList = new ArrayList()
|
||||
Map propertyMap = new HashMap<>()
|
||||
//Your metadata
|
||||
propertyMap.put("key", "1")
|
||||
propertyMap.put("value", "myDocValue")
|
||||
propertyMap.put("key", "2")
|
||||
propertyMap.put("value", "myDocValue2")
|
||||
propertiesList.add(propertyMap)
|
||||
Map propertiesMap = new HashMap()
|
||||
propertiesMap.put("properties", propertiesList)
|
||||
bodyMap.put("sourceProperties", propertiesMap)
|
||||
JsonBuilder jsonBuilder = new JsonBuilder()
|
||||
jsonBuilder.content = bodyMap
|
||||
|
||||
Configuration.httpBuilder.post {
|
||||
request.uri.path = Configuration.dmsUrl + "/o2m"
|
||||
request.headers['Authorization'] = 'Bearer ' + Configuration.authSessionId
|
||||
request.headers['Accept'] = 'application/hal+json'
|
||||
request.headers['x-dv-request-id'] = requestUUID
|
||||
request.contentType = ContentTypes.JSON[0]//'application/hal+json'
|
||||
request.body = jsonBuilder.toPrettyString()
|
||||
response.parser(ContentTypes.JSON[0]) {config, resp ->
|
||||
String responseText = resp.inputStream.getText()
|
||||
log("RequestUUID: ${requestUUID} - ResponseText: ${responseText}")
|
||||
}
|
||||
response.exception { e ->
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file exception: ${e.message}")
|
||||
}
|
||||
response.failure { f ->
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file failed: ${f.message}")
|
||||
|
||||
// if request failed because of "Unathorized" ir "Forbidden" try new login and then send request again
|
||||
if(f.message.toString().equals("Unauthorized") || f.message.toString().equals("Forbidden") ) {
|
||||
login()
|
||||
}
|
||||
}
|
||||
response.success { s ->
|
||||
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file successful")
|
||||
|
||||
// get docId from Location Header
|
||||
String locationHeader = FromServer.Header.find(s.getHeaders(), "Location").parsed
|
||||
if(locationHeader != null && !locationHeader.equals("")) {
|
||||
String[] locationParts = locationHeader.split("/o2m/")
|
||||
if(locationParts.size() == 2) {
|
||||
String[] secondParts = locationParts[1].split("\\?")
|
||||
String docId = secondParts[0]
|
||||
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file successful: DocId - " + docId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to perform login request
|
||||
*/
|
||||
void login() {
|
||||
String requestUUID = UUID.randomUUID().toString()
|
||||
|
||||
Configuration.httpBuilder.get {
|
||||
request.uri.path = '/identityprovider/login'
|
||||
request.headers['Authorization'] = 'Bearer ' + Configuration.API_KEY
|
||||
request.headers['x-dv-request-id'] = requestUUID
|
||||
request.contentType = ContentTypes.URLENC
|
||||
response.exception { e ->
|
||||
log("RequestUUID: ${requestUUID} - Login exception")
|
||||
}
|
||||
response.failure { f ->
|
||||
log("RequestUUID: ${requestUUID} - Login failed: ${f.message}")
|
||||
}
|
||||
response.success { s, json ->
|
||||
|
||||
log("RequestUUID: ${requestUUID} - Login success")
|
||||
|
||||
Configuration.authSessionId = json.getAt("authSessionId")
|
||||
Configuration.sessionExpire = json.getAt("expire")
|
||||
|
||||
if(Configuration.authSessionId == null || Configuration.authSessionId.equals("") || Configuration.authSessionId.equals("null")) {
|
||||
log("AuthSessionId not given with first letter small, try upper case")
|
||||
Configuration.authSessionId = json.getAt("AuthSessionId")
|
||||
}
|
||||
if(Configuration.sessionExpire == null || Configuration.sessionExpire.equals("") || Configuration.sessionExpire.equals("null")) {
|
||||
log("Expire not given with first letter small, try upper case")
|
||||
Configuration.sessionExpire = json.getAt("Expire")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to check if authSessionId is given and still not expired
|
||||
*
|
||||
* @return boolean true if login is not valid
|
||||
*/
|
||||
boolean isLoginExpired() {
|
||||
boolean result = false
|
||||
|
||||
if(Configuration.authSessionId == null || Configuration.authSessionId.equals("")) {
|
||||
result = true
|
||||
}
|
||||
|
||||
if(Configuration.sessionExpire == null || Configuration.sessionExpire.equals("")) {
|
||||
result = true
|
||||
} else {
|
||||
// check if sessionExpire is grater then current timestamp
|
||||
long nowTimestamp = System.currentTimeMillis()
|
||||
|
||||
// convert sessionExpire to timestamp
|
||||
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'H:m:s.S'Z'")
|
||||
Date expireDate = inputFormat.parse(Configuration.sessionExpire)
|
||||
long expireTimestamp = expireDate.time
|
||||
|
||||
if(nowTimestamp>=expireTimestamp) {
|
||||
result = true
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to log given message to log file and to console
|
||||
* @param message
|
||||
*/
|
||||
void log(String message) {
|
||||
String messageWithTimestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(System.currentTimeMillis())) + " : ${message}"
|
||||
println(messageWithTimestamp)
|
||||
|
||||
if(!Configuration.logFile.exists()) {
|
||||
// check if directory exists
|
||||
// check if directory "Log" exists
|
||||
File logDir = new File(Configuration.logDirPath)
|
||||
if(!logDir.exists() || !logDir.isDirectory()) {
|
||||
// create directory for log files
|
||||
logDir.mkdirs()
|
||||
}
|
||||
|
||||
Configuration.logFile.createNewFile()
|
||||
}
|
||||
Configuration.logFile.append(messageWithTimestamp + "\n")
|
||||
}
|
||||
58
_Vorlagen/Groovy-Skripte/downloadDocuments.groovy
Normal file
58
_Vorlagen/Groovy-Skripte/downloadDocuments.groovy
Normal file
@@ -0,0 +1,58 @@
|
||||
import com.dvelop.d3.server.core.D3
|
||||
import groovy.json.JsonSlurper
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
|
||||
/**
|
||||
* Beispiel um Dokumente anhand einer Kategorie und einer Eigenschaft zu suchen und mit dem JSON arbeiten zu können
|
||||
*/
|
||||
void searchDocuments(D3 d3, String sessionId, String searchCategory, String searchPropertyKey, String searchPropertyValue) {
|
||||
String searchFor = "?sourceid=/dms/r/$REPO_ID/source&sourcecategories=[\"$searchCategory\"]&sourceproperties={\"$searchPropertyKey\":[\"$searchPropertyValue\"]}"
|
||||
String baseRequest = "$BASE_URI/dms/r/$REPO_ID/srm$searchFor"
|
||||
|
||||
HttpsURLConnection request = new URL(baseRequest).openConnection() as HttpsURLConnection
|
||||
request.requestMethod = "GET"
|
||||
request.setRequestProperty("Origin", BASE_URI)
|
||||
request.setRequestProperty("Accept", "application/json")
|
||||
request.setRequestProperty("Authorization", "Bearer $sessionId")
|
||||
|
||||
if (request.responseCode == 200) {
|
||||
def json = request.inputStream.withCloseable { stream ->
|
||||
new JsonSlurper().parse(stream as InputStream)
|
||||
}
|
||||
|
||||
//Alle gefundenen Dokumente durchgehen
|
||||
json.items?.each {
|
||||
//Dateinamen mit Endung jedes Dokuments holen
|
||||
String fileName = it.sourceProperties.find { property -> property.key == "property_filename" }.value
|
||||
File file = new File(exportDirectory, fileName)
|
||||
|
||||
//Download starten
|
||||
downloadDocument(d3, sessionId, it._links.mainblobcontent.href, file.getPath())
|
||||
}
|
||||
|
||||
} else {
|
||||
d3.log.error("Fehler bei der Suche nach Dokumenten $request.responseCode: $request.responseMessage")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Beispiel um ein Dokument herunter zu laden
|
||||
*/
|
||||
void downloadDocument(D3 d3, String sessionId, String downloadUrl, String filePath) {
|
||||
String baseRequest = BASE_URI + downloadUrl
|
||||
|
||||
HttpsURLConnection request = new URL(baseRequest).openConnection() as HttpsURLConnection
|
||||
request.requestMethod = "GET"
|
||||
request.setRequestProperty("Origin", BASE_URI)
|
||||
request.setRequestProperty("Accept", "application/json")
|
||||
request.setRequestProperty("Authorization", "Bearer $sessionId")
|
||||
|
||||
if (request.responseCode == 200) {
|
||||
d3.log.info("Starte Download von: " + downloadUrl)
|
||||
request.inputStream.withCloseable { stream ->
|
||||
new File(filePath) << stream.getBytes()
|
||||
}
|
||||
} else {
|
||||
d3.log.error("Fehler beim Herunterladen von $baseRequest")
|
||||
}
|
||||
}
|
||||
46
_Vorlagen/Groovy-Skripte/mappingHistData.groovy
Normal file
46
_Vorlagen/Groovy-Skripte/mappingHistData.groovy
Normal file
@@ -0,0 +1,46 @@
|
||||
import com.dvelop.d3.server.core.D3Interface;
|
||||
import groovy.json.JsonSlurper;
|
||||
|
||||
String delReason = "Aufbewahrungsfrist abgelaufen";
|
||||
String sqlGetDocIDs = """SELECT doc_id, delete_date, db_tables_data FROM doc_recycler WHERE delete_reason = '${delReason}'
|
||||
AND delete_date >= TO_DATE('2019-11-29', 'YYYY-MM-DD')
|
||||
AND doc_id NOT IN (SELECT dokuid FROM bla_loeschprotokoll)""";
|
||||
|
||||
D3Interface d3 = getProperty("d3");
|
||||
|
||||
try {
|
||||
def mappingDocsSet = d3.sql.executeAndGet(sqlGetDocIDs);
|
||||
mappingDocsSet.each {
|
||||
String docID = it.doc_id;
|
||||
String docTyp = "";
|
||||
String docBemerkung = "";
|
||||
String docIdentifier = "";
|
||||
String docErstelldatum = "";
|
||||
String docDelDate = it.delete_date.toString();
|
||||
docDelDate = docDelDate.substring(0,10);//YYYY-MM-DD
|
||||
|
||||
def slurper = new JsonSlurper();
|
||||
def docAttributes = slurper.parseText(it.db_tables_data);
|
||||
d3.log.info(docAttributes.get("com.dvelop.d3.DocumentData").get("firmen_spezifisch").get("dok_dat_feld_23"));
|
||||
docTyp = docAttributes.get("com.dvelop.d3.DocumentData").get("firmen_spezifisch").get("dok_dat_feld_41");
|
||||
docBemerkung = docAttributes.get("com.dvelop.d3.DocumentData").get("phys_datei").get("text");
|
||||
docIdentifier = docAttributes.get("com.dvelop.d3.DocumentData").get("firmen_spezifisch").get("dok_dat_feld_23");
|
||||
docErstelldatum = docAttributes.get("com.dvelop.d3.DocumentData").get("firmen_spezifisch").get("dok_dat_feld_59");
|
||||
if (!docErstelldatum?.trim())
|
||||
{
|
||||
docErstelldatum = docAttributes.get("com.dvelop.d3.DocumentData").get("phys_datei").get("datum_einbring");
|
||||
}
|
||||
docErstelldatum = docErstelldatum.substring(0,10);//YYYY-MM-DD
|
||||
|
||||
String sqlInsertLoschprotokoll = """INSERT INTO bla_loeschprotokoll (dokuid, typ, bemerkung, identifier, erstelldatum, loeschdatum)
|
||||
VALUES ('$docID', '$docTyp', '$docBemerkung', '$docIdentifier', TO_DATE('$docErstelldatum', 'YYYY-MM-DD'), TO_DATE('$docDelDate', 'YYYY-MM-DD'))""";
|
||||
try {
|
||||
d3.sql.execute(sqlInsertLoschprotokoll);
|
||||
} catch (Exception e) {
|
||||
d3.log.error("Fehler " + e.getMessage() + " beim Schreiben von bla_loeschprotokoll");
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
d3.log.error("Fehler " + e.getMessage() + " beim Lesen von doc_recycler");
|
||||
}
|
||||
148
_Vorlagen/Groovy-Skripte/reminderFunction.groovy
Normal file
148
_Vorlagen/Groovy-Skripte/reminderFunction.groovy
Normal file
@@ -0,0 +1,148 @@
|
||||
// Das Skript prueft die Felder
|
||||
// - Erinnerungsdatum
|
||||
// - Erinnerung an
|
||||
// - Erinnerung verschickt
|
||||
// und sendet abhaengig hiervon Erinnerungen an die hinterlegten Benutzer
|
||||
|
||||
// Importe
|
||||
import groovy.sql.GroovyRowResult
|
||||
import groovy.json.JsonOutput;
|
||||
import groovy.json.JsonSlurper;
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
// #################################################################################
|
||||
// Konfigurationsbereich
|
||||
// #################################################################################
|
||||
String versandModus = "1" // 0 = Keine Erinnerungen verschicken, nur Logs ausgeben, 1 = Erinnerungen verschicken
|
||||
|
||||
int repoIdErinnerungVerschickt = 97
|
||||
int repoIdErinnerungAn = 98
|
||||
int repoIdErinnerungsdatum = 99
|
||||
|
||||
int dbPosErinnerungVerschickt = 33
|
||||
int dbPosErinnerungAn = 34
|
||||
int dbPosErinnerungsdatum = 58
|
||||
|
||||
String apiServiceUser = "D3APIServi"
|
||||
|
||||
String baseURi = "https://meinHost.meineDomain.de"
|
||||
String repoId = "xxx"
|
||||
String ServiceAPIKey = "xxx"
|
||||
|
||||
// #################################################################################
|
||||
// Ende Konfigurationsbereich
|
||||
// #################################################################################
|
||||
|
||||
try{
|
||||
|
||||
d3.log.info("Starte Skript TH_sendReminder");
|
||||
d3.log.info("Ermittle Dokumente zur Erinnerung")
|
||||
|
||||
// Dokumente suchen, fuer die noch keine Erinnerung verschickt wurde
|
||||
// Und dessen Erinnerungsdatum in der Vergangenheit liegt
|
||||
def sqlQuery = """select doku_id, dok_dat_feld_$dbPosErinnerungAn as ErinnerungAn
|
||||
from firmen_spezifisch
|
||||
where dok_dat_feld_$dbPosErinnerungAn is not null and dok_dat_feld_$dbPosErinnerungsdatum is not null and dok_dat_feld_$dbPosErinnerungVerschickt is null
|
||||
and kue_dokuart in (
|
||||
select kue_dokuart from fispe_titel_dokuart
|
||||
where repository_id = ${repoIdErinnerungVerschickt}
|
||||
intersect
|
||||
select kue_dokuart from fispe_titel_dokuart
|
||||
where repository_id = ${repoIdErinnerungAn}
|
||||
intersect
|
||||
select kue_dokuart from fispe_titel_dokuart
|
||||
where repository_id = ${repoIdErinnerungsdatum}
|
||||
)
|
||||
and dok_dat_feld_$dbPosErinnerungsdatum < getdate()"""
|
||||
|
||||
def resultSet = d3.sql.executeAndGet(sqlQuery)
|
||||
|
||||
d3.log.info (resultSet.size() + " Dokumente ermittelt.")
|
||||
|
||||
if (resultSet.size() > 0)
|
||||
{
|
||||
|
||||
// Ergebnis durchlaufen und Erinnerungen verschicken
|
||||
resultSet.each
|
||||
{
|
||||
lDokId = it.get("doku_id")
|
||||
lEmpfaenger = it.get("ErinnerungAn")
|
||||
|
||||
if (versandModus == "0")
|
||||
{
|
||||
d3.log.info ("Nur Test: Erinnerung zu " + it.get("doku_id") + " wuerde an " + it.get("ErinnerungAn") + " verschickt werden.")
|
||||
}
|
||||
else if (versandModus == "1")
|
||||
{
|
||||
d3.log.info ("Erinnerung zu " + lDokId + " wird an " + lEmpfaenger + " verschickt.")
|
||||
|
||||
//Auslesen der IDP Gruppen IDs
|
||||
HttpsURLConnection taskAppRequest = new URL(baseURi + "/task/tasks").openConnection();
|
||||
taskAppRequest.setRequestMethod("POST");
|
||||
taskAppRequest.setRequestProperty("Origin", baseURi);
|
||||
taskAppRequest.setRequestProperty("content-type", "application/json");
|
||||
taskAppRequest.setRequestProperty("Authorization", "Bearer " + ServiceAPIKey);
|
||||
taskAppRequest.setDoOutput(true);
|
||||
|
||||
//correlationKey zusammensetzen
|
||||
UUID uuid = UUID.randomUUID();
|
||||
String randomUUIDString = uuid.toString();
|
||||
|
||||
String jsonInputString = """{
|
||||
"subject" : "Erinnerung zum Dokument",
|
||||
"description" : "Das Erinnerungsdatum für das anliegende Dokument wurde erreicht.",
|
||||
"assignees" : [${lEmpfaenger}],
|
||||
"correlationKey" : ${randomUUIDString},
|
||||
"context" : {
|
||||
"key" : "COMMON",
|
||||
"type" : "task",
|
||||
"name" : "Allgemeine Erinnerung"
|
||||
},
|
||||
"dmsReferences" : [
|
||||
{
|
||||
"repoId" : ${repoId},
|
||||
"objectId" : ${lDokId}
|
||||
}
|
||||
],
|
||||
"_links" : {
|
||||
"attachment" : { "href": "/dms/r/${repoId}/o2/${lDokId}"}
|
||||
}
|
||||
}""";
|
||||
|
||||
def response = taskAppRequest.getOutputStream().write(jsonInputString.getBytes("UTF-8"));
|
||||
|
||||
response = taskAppRequest.getResponseCode()
|
||||
|
||||
if (response == 200 || response == 201)
|
||||
{
|
||||
// Wenn erfolgreich, Feld "Erinnerung verschickt" aktualisieren
|
||||
d3.log.info("Aufgabe erfolgreich angelegt")
|
||||
|
||||
Document currentDoc = d3.archive.getDocument(lDokId, apiServiceUser)
|
||||
|
||||
def date = new Date()
|
||||
def dateTime = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss")
|
||||
currentDoc.field[dbPosErinnerungVerschickt] = "Verschickt am " + dateTime.format(date)
|
||||
|
||||
currentDoc.updateAttributes(apiServiceUser, true)
|
||||
}
|
||||
else
|
||||
{
|
||||
d3.log.error("Fehlercode " + response + " bei Anlage der Aufgabe")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
d3.log.info("Skript TH_sendReminder erfolgreich beendet.");
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
d3.log.error ("Dokumente loeschen: Fehler in Script aufgetreten!");
|
||||
}
|
||||
31
_Vorlagen/Groovy-Skripte/restoreDocuments.groovy
Normal file
31
_Vorlagen/Groovy-Skripte/restoreDocuments.groovy
Normal file
@@ -0,0 +1,31 @@
|
||||
//Dieses Skript stellt Dokumente aus dem Papierkorb wieder her.
|
||||
//Ausgeführt wird dieses Skript per d.3 server interface, zuvor muss das SQL-Statement angepasst werden. Das SQL-Statement muss die Dokumenten-IDs der wiederherzustellenden Dokumente liefern.
|
||||
//Es muss ein Benutzer "scriptUser" angegeben werden, der volle Rechte für die entsprechenden Dokumente hat. (Um den Aktenplan anzutriggern)
|
||||
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
String scriptName = getClass().getName()
|
||||
|
||||
// d.3 User which executes the restore and check of the folder schemes
|
||||
String scriptUser = "d3_groovy"
|
||||
final def maxRows = 3000
|
||||
|
||||
//Einzelne Dokumente/Akten anhand der ID
|
||||
//def resultSet = d3.sql.executeAndGet("select doc_id from doc_recycler where doc_id = 'DocumentsToBeRestored'", maxRows)
|
||||
|
||||
//oder anhand Metadaten (hier dok_dat_feld_3 = Aktenzeichen) aus dem Papierkorb
|
||||
def resultSet = d3.sql.executeAndGet("select doc_id, delete_date, delete_user from doc_recycler where to_char(delete_date, 'MM-DD-YYYY') = to_char(sysdate, 'MM-DD-YYYY') and delete_user = 'd3_async' and db_tables_data like '%\"dok_dat_feld_3\": \"A-000004-2022\"%'")
|
||||
resultSet.each{
|
||||
try {
|
||||
d3.log.info ("Restoring document with ID " + it.doc_id)
|
||||
d3.call.restore_from_history (0, it.doc_id, '');
|
||||
|
||||
d3.log.info ("Checking folder scheme for document with ID " + it.doc_id)
|
||||
Document myDoc = d3.archive.getDocument(it.doc_id, scriptUser)
|
||||
myDoc.checkFolderScheme(scriptUser)
|
||||
} catch (D3Exception e) {
|
||||
d3.log.error("Error checking folder scheme " + e.getMessage())
|
||||
}
|
||||
}
|
||||
157
_Vorlagen/Groovy-Skripte/taskAppMigration.groovy
Normal file
157
_Vorlagen/Groovy-Skripte/taskAppMigration.groovy
Normal file
@@ -0,0 +1,157 @@
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
|
||||
D3Interface d3 = getProperty( 'd3' ) as D3Interface
|
||||
|
||||
def LOG_PREFIX = 'taskAppMigration: '
|
||||
|
||||
/**
|
||||
* Angabe des Hostnamens ohne Slash am Ende.
|
||||
*/
|
||||
String hostname = ""
|
||||
|
||||
/**
|
||||
* Der API_KEY muss vor der Ausführung gesetzt werden
|
||||
**/
|
||||
String API_KEY = ""
|
||||
/**
|
||||
* Dieser User wird anstelle der gesperrten / nicht vorhandenen d.3-User in die wieder_vorlage geschrieben.
|
||||
* d.3 user-id:
|
||||
*/
|
||||
String d3ServiceUserSender = ""
|
||||
String d3ServiceUserReceiver = ""
|
||||
|
||||
def query = """\
|
||||
SELECT DISTINCT
|
||||
wv.sender wv_user,
|
||||
ben.idp_id,
|
||||
CASE
|
||||
WHEN sia.sid IS NOT NULL THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
ist_gesperrt
|
||||
FROM
|
||||
wieder_vorlage wv
|
||||
JOIN benutzer ben ON ben.benutzername = wv.sender
|
||||
LEFT OUTER JOIN sid_assign sia ON
|
||||
sia.auth_id = ben.benutzername
|
||||
AND
|
||||
sia.delete_flag = 0
|
||||
AND
|
||||
sia.sid = (
|
||||
SELECT
|
||||
sil.sid
|
||||
FROM
|
||||
sid_list sil
|
||||
WHERE
|
||||
sil.caption = 'Konto ist deaktiviert'
|
||||
)
|
||||
WHERE
|
||||
wv.wv_typ = 'W'
|
||||
AND
|
||||
wv.sender != 'd3_async'
|
||||
UNION ALL
|
||||
SELECT DISTINCT
|
||||
wv.benutzername wv_user,
|
||||
ben.idp_id,
|
||||
CASE
|
||||
WHEN sia.sid IS NOT NULL THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
ist_gesperrt
|
||||
FROM
|
||||
wieder_vorlage wv
|
||||
JOIN benutzer ben ON ben.benutzername = wv.benutzername
|
||||
LEFT OUTER JOIN sid_assign sia ON
|
||||
sia.auth_id = ben.benutzername
|
||||
AND
|
||||
sia.delete_flag = 0
|
||||
AND
|
||||
sia.sid = (
|
||||
SELECT
|
||||
sil.sid
|
||||
FROM
|
||||
sid_list sil
|
||||
WHERE
|
||||
sil.caption = 'Konto ist deaktiviert'
|
||||
)
|
||||
WHERE
|
||||
wv.wv_typ = 'W'
|
||||
""".stripIndent()
|
||||
|
||||
Closure<HttpsURLConnection> connection = { String url ->
|
||||
URL theUrl = new URL( url )
|
||||
HttpsURLConnection con = ( HttpsURLConnection ) theUrl.openConnection()
|
||||
con.addRequestProperty( 'Authorization', 'Bearer ' + API_KEY )
|
||||
con.addRequestProperty( 'Accept', 'application/json' )
|
||||
con.setDoInput( true )
|
||||
con.setDoOutput( true )
|
||||
return con
|
||||
}
|
||||
def rows = d3.sql.executeAndGet( query )
|
||||
|
||||
List<String> brokenUsers = [ ]
|
||||
|
||||
int gesperrt = 0
|
||||
int nichtinIdp = 0
|
||||
int aktiv = 0
|
||||
|
||||
rows.each{
|
||||
d3.log.error( LOG_PREFIX + it.wv_user + ": " + it.idp_id )
|
||||
d3.log.info( LOG_PREFIX + 'looking up ' + it.wv_user )
|
||||
|
||||
if( it.ist_gesperrt ){
|
||||
gesperrt++
|
||||
if( !brokenUsers.contains( it.wv_user)){
|
||||
brokenUsers.add( it.wv_user )
|
||||
}
|
||||
d3.log.info( LOG_PREFIX + "Der user '$it.wv_user' ist gesperrt." )
|
||||
return
|
||||
}
|
||||
|
||||
HttpsURLConnection con = connection( hostname + '/identityprovider/scim/users/' + it.idp_id )
|
||||
con.connect()
|
||||
if( con.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND ){
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user existiert nicht als user im IDP." )
|
||||
con.disconnect()
|
||||
con = connection( hostname + '/identityprovider/scim/Groups/' + it.idp_id )
|
||||
con.connect()
|
||||
if( con.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND ){
|
||||
nichtinIdp++
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user existiert nicht als Gruppe im idp." )
|
||||
if( !brokenUsers.contains( it.wv_user)){
|
||||
brokenUsers.add( it.wv_user )
|
||||
}
|
||||
con.disconnect()
|
||||
} else{
|
||||
aktiv++
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user ist eine Gruppe im idp." )
|
||||
}
|
||||
} else{
|
||||
aktiv++
|
||||
d3.log.info( LOG_PREFIX + "Der User $it.wv_user ist im idp." )
|
||||
}
|
||||
}
|
||||
|
||||
def updateUser = 'UPDATE wieder_vorlage SET benutzername = ? WHERE benutzername = ?'
|
||||
def updateSender = 'UPDATE wieder_vorlage SET sender = ? WHERE sender = ?'
|
||||
|
||||
d3.log.info( LOG_PREFIX + "Aktualisiere Nicht-IDP-User in Tabelle wieder_vorlage...")
|
||||
brokenUsers.each{
|
||||
d3.log.info( LOG_PREFIX + "Ersetze user $it in 'benutzername' durch Service-User $d3ServiceUserReceiver")
|
||||
def changed = d3.sql.execute(updateUser, [d3ServiceUserReceiver, it])
|
||||
d3.log.info( LOG_PREFIX + "Zeilen geändert: $changed")
|
||||
d3.log.info( LOG_PREFIX + "Ersetze user $it in 'sender' durch Service-User $d3ServiceUserSender")
|
||||
changed = d3.sql.execute(updateSender, [d3ServiceUserSender, it])
|
||||
d3.log.info( LOG_PREFIX + "Zeilen geändert: $changed")
|
||||
}
|
||||
//Zur Sicherheit noch ein Commit ausführen, wenn kein Autocommit aktiv:
|
||||
d3.sql.execute( 'Commit' )
|
||||
|
||||
d3.log.info( LOG_PREFIX + 'Abgeschlossen.' )
|
||||
d3.log.info( LOG_PREFIX + "Anzahl gesperrter User: $gesperrt" )
|
||||
d3.log.info( LOG_PREFIX + "Anzahl nicht registrierter IDP-User: $nichtinIdp" )
|
||||
d3.log.info( LOG_PREFIX + "Anzahl aktiver User: $aktiv" )
|
||||
|
||||
d3.log.info( LOG_PREFIX + "Betroffene User: $brokenUsers" )
|
||||
95
_Vorlagen/Groovy-Skripte/updateDocuments.groovy
Normal file
95
_Vorlagen/Groovy-Skripte/updateDocuments.groovy
Normal file
@@ -0,0 +1,95 @@
|
||||
import com.dvelop.d3.server.Document
|
||||
import com.dvelop.d3.server.DocumentType
|
||||
import com.dvelop.d3.server.User
|
||||
import com.dvelop.d3.server.ValueSet
|
||||
import com.dvelop.d3.server.Validation
|
||||
import com.dvelop.d3.server.core.D3
|
||||
import com.dvelop.d3.server.core.D3Interface
|
||||
import com.dvelop.d3.server.exceptions.SQLException
|
||||
import com.dvelop.d3.server.exceptions.D3Exception
|
||||
import java.lang.annotation.*
|
||||
import java.sql.SQLWarning;
|
||||
import java.sql.Timestamp
|
||||
|
||||
|
||||
/*
|
||||
Script for updating documents
|
||||
*/
|
||||
|
||||
// #################################################################################
|
||||
// Configuration
|
||||
// #################################################################################
|
||||
def documentTypes = "('DDRA2', 'XXXXX')" // Document types, syntax like sql "where in "
|
||||
def oldValue = "AVEVA" // Existing value in the defined categories
|
||||
def newValue = "AVEVA" // Value to update
|
||||
int dbPos = 33 // DB Position, TODO: Extend for mutli value fields, currently only for DB-Position 1 - 49
|
||||
def updateCount = "1000" // Limit the number of documents to be updated - for testing
|
||||
|
||||
def LogFilePath = "D:\\d3logs\\updateDocuments.log"
|
||||
def ErrorLogFilePath = "D:\\d3logs\\updateDocumentsError.log"
|
||||
|
||||
def logOnly = "0" // 1 = Only write document ids to logfile
|
||||
def apiUser = "d3_hook" // User for api calls
|
||||
boolean noHooks = true // Enable / disable update hooks
|
||||
|
||||
// #################################################################################
|
||||
// End Configuration
|
||||
// #################################################################################
|
||||
|
||||
d3.log.info("Start to update documents " + documentTypes)
|
||||
d3.log.info("Old Value: " + oldValue)
|
||||
d3.log.info("New Value: " + newValue)
|
||||
|
||||
def LogFile = new File(LogFilePath)
|
||||
def ErrorLogFile = new File(ErrorLogFilePath)
|
||||
LogFile.append("\n\rStart Update documents.")
|
||||
|
||||
int countUpdated = 0
|
||||
int countUpdateError = 0
|
||||
|
||||
// Define SQL Query
|
||||
def sqlQuery = "select top ${updateCount} doku_id from firmen_spezifisch where kue_dokuart in" + documentTypes + " and dok_dat_feld_$dbPos = '${oldValue}'"
|
||||
|
||||
def resultset = d3.sql.executeAndGet(sqlQuery)
|
||||
if (resultset.size() > 0)
|
||||
{
|
||||
d3.log.info (resultset.size() + " documents found to update.")
|
||||
LogFile.append("\n\r" + resultset.size() + " documents found to update.")
|
||||
|
||||
// Iterate through results
|
||||
resultset.each
|
||||
{
|
||||
if (logOnly == "1")
|
||||
{
|
||||
LogFile.append("\n" + it.get("doku_id"))
|
||||
countUpdated++
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
Document currentDoc = d3.archive.getDocument(it.get("doku_id"), apiUser)
|
||||
currentDoc.field[dbPos] = newValue
|
||||
currentDoc.updateAttributes(apiUser, noHooks)
|
||||
LogFile.append("\n" + it.get("doku_id"))
|
||||
countUpdated++
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
d3.log.error ("Update documents: Error " + e + " in script!")
|
||||
ErrorLogFile.append("\n" + e)
|
||||
countUpdateError++
|
||||
}
|
||||
}
|
||||
|
||||
if (countUpdated % 100 == 0)
|
||||
{
|
||||
d3.log.info(countUpdated + " documents updated")
|
||||
}
|
||||
}
|
||||
|
||||
d3.log.info(countUpdated + " documents updated")
|
||||
LogFile.append("\n\r" + countUpdated + " documents updated")
|
||||
d3.log.info(countUpdateError + " documents with error")
|
||||
LogFile.append("\n\r" + countUpdateError + " documents with error")
|
||||
}
|
||||
279
_Vorlagen/Groovy-Skripte/uploadDocuments.groovy
Normal file
279
_Vorlagen/Groovy-Skripte/uploadDocuments.groovy
Normal file
@@ -0,0 +1,279 @@
|
||||
//Dieses Skriptist ein Beispiel um Dokumente per DMS-Api hochzuladen
|
||||
//Eine Beispieldatei wird bei Ausführung des Skripts erstellt
|
||||
//In den Konfigurationsparametern muss für die Verbindung die Base-Url, RepoId und ein Api-Key angeben werden. Der Benutzer hinter dem Api-Key braucht mindestens die Berechtigungen "Dokument importieren" und "Eigenschaften aktualisieren"
|
||||
//Per docType kann eine Dokumentart angeben werden. Die Eigenschaften können weiter unten im Skript (suche nach {to be configured}) angegeben werden. Dazu wird in diesem Beispiel das DMS-Default Mapping verwendet -> https://BASE-URL/dms/r/REPO-ID/source Beispiel: https://dms-test.local/dms/r/074ef140-250d-5a76-9c0c-311835e900e2/source
|
||||
|
||||
|
||||
import groovy.json.JsonBuilder
|
||||
import groovyx.net.http.FromServer
|
||||
import groovyx.net.http.HttpBuilder
|
||||
import groovyx.net.http.ContentTypes
|
||||
|
||||
import java.text.SimpleDateFormat
|
||||
import java.time.YearMonth
|
||||
|
||||
|
||||
class Configuration
|
||||
{
|
||||
// login data, used to perform operations which need authentication
|
||||
// public static String API_KEY = "{yourApiKey}"
|
||||
public static String API_KEY = "DOz4JkcUEl2nu+NWmh9ylqFtIz2bDtcA+UpWikbwFpqzHGlnQuaAj5XzM+6XKTI/IPDRQomgoTN6h8y2MDkojGHUeWvqN6qJaMEZ/wNxvXMIQyiCRsDgx4yqSmKmlfEM&_z_A0V5ayCSpMjWpAFIyddgzAJPQsAloshCGVuKs-6Sxam3gyUxmKVy45yP5jqdXY0HQyCzH9im5FHDT4fboog8erv_t0Anu"
|
||||
// Base Url of d.3 system, to target API endpoints
|
||||
// public static String baseUrl = "https://{yourUrl}.de"
|
||||
public static String baseUrl = "https://w2019-sql2019en.vcloud.d-velop.de/"
|
||||
// repository of destination, is used to target right repository for searching documents
|
||||
public static String repositoryId = "1ddde1e8-2431-56c0-8cd1-b05dc1ae7dc3"
|
||||
//public static String repositoryId = "{yourRepostoryId}"
|
||||
|
||||
|
||||
//d.3 destination data
|
||||
public static String docType = "DTEST"
|
||||
|
||||
|
||||
//Do not edit these variables
|
||||
public static String dmsUrl = "/dms/r/" + repositoryId
|
||||
public static HttpBuilder httpBuilder = null
|
||||
public static String authSessionId = ""
|
||||
public static String sessionExpire = ""
|
||||
public static File csvLog = null
|
||||
public static String logDirPath = "./log/"
|
||||
public static File logFile = new File(logDirPath + System.currentTimeMillis() + "_log.csv")
|
||||
}
|
||||
|
||||
// must be allowed to set origin header
|
||||
System.setProperty( "sun.net.http.allowRestrictedHeaders", "true")
|
||||
// create httpBuilde with baseUrl
|
||||
log("Create httpBuilder")
|
||||
Configuration.httpBuilder = HttpBuilder.configure {
|
||||
request.uri = Configuration.baseUrl
|
||||
request.headers['Accept'] = 'application/json'
|
||||
request.headers['Origin'] = Configuration.baseUrl
|
||||
}
|
||||
log("httpBuilder created")
|
||||
|
||||
login()
|
||||
uploadDocument()
|
||||
|
||||
/**
|
||||
* Function to upload document / create placeholder
|
||||
*/
|
||||
void uploadDocument(){
|
||||
|
||||
// check if login is valid
|
||||
if(isLoginExpired()) {
|
||||
login()
|
||||
}
|
||||
String requestUUID = UUID.randomUUID().toString()
|
||||
|
||||
// create new file
|
||||
// check if directory "Tmp" exists
|
||||
File tmpDir = new File("./Tmp/")
|
||||
if(!tmpDir.exists() || !tmpDir.isDirectory()) {
|
||||
// create directory for tmp files
|
||||
tmpDir.mkdirs()
|
||||
}
|
||||
File tmpFile = new File("./Tmp/mydoc.hc")
|
||||
tmpFile.createNewFile()
|
||||
tmpFile.text = "New mydoc: " + System.currentTimeMillis()
|
||||
|
||||
Configuration.httpBuilder.post {
|
||||
request.uri.path = Configuration.dmsUrl + "/blob/chunk/"
|
||||
request.headers['Authorization'] = 'Bearer ' + Configuration.authSessionId
|
||||
request.headers['Accept'] = 'application/hal+json'
|
||||
request.headers['x-dv-request-id'] = requestUUID
|
||||
request.contentType = ContentTypes.BINARY[0]
|
||||
request.body = tmpFile.bytes
|
||||
response.exception { e ->
|
||||
log("RequestUUID: ${requestUUID} - Upload exception: ${e.message}")
|
||||
}
|
||||
response.failure { f ->
|
||||
log("RequestUUID: ${requestUUID} - Upload failed: ${f.message}")
|
||||
|
||||
// if request failed because of "Unathorized" ir "Forbidden" try new login and then send request again
|
||||
if(f.message.toString().equals("Unauthorized") || f.message.toString().equals("Forbidden") ) {
|
||||
login()
|
||||
}
|
||||
}
|
||||
response.success { s, bytes ->
|
||||
// get header for Location
|
||||
String locationUrl = FromServer.Header.find(s.getHeaders(), "Location").parsed
|
||||
if(locationUrl != null && !locationUrl.equals("")) {
|
||||
log("RequestUUID: ${requestUUID} - Upload of binary successful -> locationUrl: ${locationUrl} ")
|
||||
//Now assign metadata to uploaded document
|
||||
saveNewUploadedDocument(locationUrl)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function to assign metadata to uploaded document
|
||||
*/
|
||||
void saveNewUploadedDocument(String locationUrl){
|
||||
// check if login is valid
|
||||
if(isLoginExpired()) {
|
||||
login()
|
||||
}
|
||||
|
||||
String requestUUID = UUID.randomUUID().toString()
|
||||
|
||||
Map bodyMap = new HashMap<>()
|
||||
//Your file
|
||||
bodyMap.put("filename", "mydoc.hc")
|
||||
bodyMap.put("sourceCategory", Configuration.docType)
|
||||
bodyMap.put("sourceId", Configuration.dmsUrl + "/source")
|
||||
bodyMap.put("contentLocationUri", locationUrl)
|
||||
|
||||
List propertiesList = new ArrayList()
|
||||
Map propertiesMap = new HashMap()
|
||||
Map propertyMap1 = new HashMap<>()
|
||||
Map propertyMap2 = new HashMap<>()
|
||||
//ToDo: Adjust Key and value. Have a look at this URL to find out the keys for your metadata: https://BASE-URL/dms/r/REPO-ID/source Example: https://dms-test.local/dms/r/074ef140-250d-5a76-9c0c-311835e900e2/source
|
||||
//Your metadata (single value) {to be configured}
|
||||
propertyMap1.put("key", "1")
|
||||
propertyMap1.put("values", ["myValue"])
|
||||
propertiesList.add(propertyMap1)
|
||||
propertiesMap.put("properties", propertiesList)
|
||||
bodyMap.put("sourceProperties", propertiesMap)
|
||||
|
||||
//Your metadata (multi value) {to be configured}
|
||||
propertyMap2.put("key", "12")
|
||||
propertyMap2.put("values", ["myDocMultiValue1", "myDocMultiValue2"])
|
||||
propertiesList.add(propertyMap2)
|
||||
propertiesMap.put("properties", propertiesList)
|
||||
bodyMap.put("sourceProperties", propertiesMap)
|
||||
|
||||
JsonBuilder jsonBuilder = new JsonBuilder()
|
||||
jsonBuilder.content = bodyMap
|
||||
|
||||
Configuration.httpBuilder.post {
|
||||
request.uri.path = Configuration.dmsUrl + "/o2m"
|
||||
request.headers['Authorization'] = 'Bearer ' + Configuration.authSessionId
|
||||
request.headers['Accept'] = 'application/hal+json'
|
||||
request.headers['x-dv-request-id'] = requestUUID
|
||||
request.contentType = ContentTypes.JSON[0]//'application/hal+json'
|
||||
request.body = jsonBuilder.toPrettyString()
|
||||
response.parser(ContentTypes.JSON[0]) {config, resp ->
|
||||
String responseText = resp.inputStream.getText()
|
||||
log("RequestUUID: ${requestUUID} - ResponseText: ${responseText}")
|
||||
}
|
||||
response.exception { e ->
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file exception: ${e.message}")
|
||||
}
|
||||
response.failure { f ->
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file failed: ${f.message}")
|
||||
|
||||
// if request failed because of "Unathorized" ir "Forbidden" try new login and then send request again
|
||||
if(f.message.toString().equals("Unauthorized") || f.message.toString().equals("Forbidden") ) {
|
||||
login()
|
||||
}
|
||||
}
|
||||
response.success { s ->
|
||||
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file successful")
|
||||
|
||||
// get docId from Location Header
|
||||
String locationHeader = FromServer.Header.find(s.getHeaders(), "Location").parsed
|
||||
if(locationHeader != null && !locationHeader.equals("")) {
|
||||
String[] locationParts = locationHeader.split("/o2m/")
|
||||
if(locationParts.size() == 2) {
|
||||
String[] secondParts = locationParts[1].split("\\?")
|
||||
String docId = secondParts[0]
|
||||
|
||||
log("RequestUUID: ${requestUUID} - Save uploaded file successful: DocId - " + docId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to perform login request
|
||||
*/
|
||||
void login() {
|
||||
String requestUUID = UUID.randomUUID().toString()
|
||||
|
||||
Configuration.httpBuilder.get {
|
||||
request.uri.path = '/identityprovider/login'
|
||||
request.headers['Authorization'] = 'Bearer ' + Configuration.API_KEY
|
||||
request.headers['x-dv-request-id'] = requestUUID
|
||||
request.contentType = ContentTypes.URLENC
|
||||
response.exception { e ->
|
||||
log("RequestUUID: ${requestUUID} - Login exception")
|
||||
}
|
||||
response.failure { f ->
|
||||
log("RequestUUID: ${requestUUID} - Login failed: ${f.message}")
|
||||
}
|
||||
response.success { s, json ->
|
||||
|
||||
log("RequestUUID: ${requestUUID} - Login success")
|
||||
|
||||
Configuration.authSessionId = json.getAt("authSessionId")
|
||||
Configuration.sessionExpire = json.getAt("expire")
|
||||
|
||||
if(Configuration.authSessionId == null || Configuration.authSessionId.equals("") || Configuration.authSessionId.equals("null")) {
|
||||
log("AuthSessionId not given with first letter small, try upper case")
|
||||
Configuration.authSessionId = json.getAt("AuthSessionId")
|
||||
}
|
||||
if(Configuration.sessionExpire == null || Configuration.sessionExpire.equals("") || Configuration.sessionExpire.equals("null")) {
|
||||
log("Expire not given with first letter small, try upper case")
|
||||
Configuration.sessionExpire = json.getAt("Expire")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to check if authSessionId is given and still not expired
|
||||
*
|
||||
* @return boolean true if login is not valid
|
||||
*/
|
||||
boolean isLoginExpired() {
|
||||
boolean result = false
|
||||
|
||||
if(Configuration.authSessionId == null || Configuration.authSessionId.equals("")) {
|
||||
result = true
|
||||
}
|
||||
|
||||
if(Configuration.sessionExpire == null || Configuration.sessionExpire.equals("")) {
|
||||
result = true
|
||||
} else {
|
||||
// check if sessionExpire is grater then current timestamp
|
||||
long nowTimestamp = System.currentTimeMillis()
|
||||
|
||||
// convert sessionExpire to timestamp
|
||||
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'H:m:s.S'Z'")
|
||||
Date expireDate = inputFormat.parse(Configuration.sessionExpire)
|
||||
long expireTimestamp = expireDate.time
|
||||
|
||||
if(nowTimestamp>=expireTimestamp) {
|
||||
result = true
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to log given message to log file and to console
|
||||
* @param message
|
||||
*/
|
||||
void log(String message) {
|
||||
String messageWithTimestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(System.currentTimeMillis())) + " : ${message}"
|
||||
println(messageWithTimestamp)
|
||||
|
||||
if(!Configuration.logFile.exists()) {
|
||||
// check if directory exists
|
||||
// check if directory "Log" exists
|
||||
File logDir = new File(Configuration.logDirPath)
|
||||
if(!logDir.exists() || !logDir.isDirectory()) {
|
||||
// create directory for log files
|
||||
logDir.mkdirs()
|
||||
}
|
||||
|
||||
Configuration.logFile.createNewFile()
|
||||
}
|
||||
Configuration.logFile.append(messageWithTimestamp + "\n")
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
|
||||
SAVE_SRV_CHANGES_ATTRIBUTES = "1"
|
||||
|
||||
msg query "Wollen Sie wirklich die Migration 'Attribut Einfachfeld' durchführen?!" confirm_global
|
||||
if !confirm_global
|
||||
return
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//----------------------Konfigurationsbereich allgemein------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
|
||||
vars log_folder = "D\:\\Migration" //Übergeordnete Ablage der Logdatei
|
||||
vars log_file = "change_field.log" //Name der Logdatei
|
||||
vars doc_type = "DPRVZ" //Kürzel der Dokumentart
|
||||
vars old_field = "20" //altes Mehrfachfeld
|
||||
vars new_field = "31" //Neues Mehrfachfeld
|
||||
vars mode = "move" //Modus: move/copy
|
||||
|
||||
//Achtung: SQL-Statement muss ggfs. zusätzlich angepasst werden
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------Ende Konfigurationsbereich allgemein------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
|
||||
//Zusammenstellen des Pfads für die Logdatei
|
||||
vars logpath = log_folder ## "\\" ## log_file
|
||||
vars retval = check_folders_and_files()
|
||||
if(retval != 0)
|
||||
{
|
||||
return 1
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//----------------------Konfigurationsbereich SQL------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
|
||||
vars value_help, value_value
|
||||
DBMS DECLARE value_cursor CURSOR FOR \
|
||||
select doku_id, dok_dat_feld_:old_field from firmen_spezifisch \
|
||||
where kue_dokuart = :+doc_type \
|
||||
and dok_dat_feld_:old_field is not null
|
||||
|
||||
DBMS WITH CURSOR value_cursor ALIAS value_help, value_value
|
||||
DBMS WITH CURSOR value_cursor EXECUTE
|
||||
while (@dmrowcount > 0)
|
||||
{
|
||||
call change_doc_type(value_help, value_value)
|
||||
DBMS WITH CURSOR value_cursor CONTINUE
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------Ende Konfigurationsbereich SQL------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
|
||||
call write_log("Ende Kopieraktion")
|
||||
msg emsg "Skipt wurde beendet"
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//----------------------Funktionsbereich---------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------------
|
||||
|
||||
proc change_doc_type(doc_id, value)
|
||||
{
|
||||
msg d_msg "Bearbeitete " ## :+doc_id
|
||||
|
||||
SERVER_API_NO_HOOKS = 1 //Kein Einstiegspunkt
|
||||
vars retval_check = api_function( "attribute_update_single", new_field, value, 1, doc_id, "Master")
|
||||
SERVER_API_NO_HOOKS = 0 //Wieder aktiviert
|
||||
|
||||
vars text
|
||||
if (retval_check == 0)
|
||||
{
|
||||
text = doc_id ## " - " ## new_field ## " - erfolgreich kopiert"
|
||||
call write_log(text)
|
||||
|
||||
if(mode == "move")
|
||||
{
|
||||
SERVER_API_NO_HOOKS = 1 //Kein Einstiegspunkt
|
||||
vars retval_check = api_function( "attribute_update_single", old_field, "", 1, doc_id, "Master")
|
||||
SERVER_API_NO_HOOKS = 0 //Wieder aktiviert
|
||||
|
||||
if (retval_check == 0)
|
||||
{
|
||||
text = doc_id ## " - " ## old_field ## " - erfolgreich gelöscht"
|
||||
call write_log(text)
|
||||
}
|
||||
else
|
||||
{
|
||||
text = doc_id ## " - " ## old_field ## " - Löschen fehlgeschlagen!"
|
||||
call write_log(text)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
text = doc_id ## " - " ## new_field ## " - Kopieren fehlgeschlagen!"
|
||||
call write_log(text)
|
||||
}
|
||||
}
|
||||
|
||||
proc check_folders_and_files()
|
||||
{
|
||||
//Ordner der Logdatei überprüfen
|
||||
retval = check_folders()
|
||||
if (retval == 1)
|
||||
{
|
||||
msg emsg "Angegebener Ordner für Logausgabe existiert nicht und konnte nicht angelegt werden -> Abbruch"
|
||||
return 1
|
||||
}
|
||||
|
||||
//Prüfung, ob Logdatei bereits existiert
|
||||
retval = api_function ("file_exist", logpath)
|
||||
//1 = Logdatei existiert bereits
|
||||
if (retval == 1)
|
||||
{
|
||||
msg emsg "Logdatei existiert bereits -> Abbruch"
|
||||
return 1
|
||||
}
|
||||
|
||||
call write_log("Start Kopieraktion")
|
||||
|
||||
|
||||
//Ungleich = 0, Fehler beim Schreiben der Logdatei
|
||||
if (retval != 0 && retval != 1)
|
||||
{
|
||||
msg emsg "Logdatei konnte nicht erstellt werden -> Abbruch"
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
proc check_folders()
|
||||
{
|
||||
//Überprüfung, ob Arbeitsverzeichnis-Auftrag bereits existiert
|
||||
vars retval
|
||||
retval = api_function( "directory_exist", log_folder)
|
||||
if (retval == 0) // falls Ordner nicht existiert wird er angelegt
|
||||
{
|
||||
retval = api_function ("directory_create", log_folder)
|
||||
if (retval != 0) // falls Ordner nicht angelegt werden konnte --> abbruch
|
||||
{
|
||||
return 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc write_log(text)
|
||||
{
|
||||
vars tag_uhrzeit
|
||||
call api_function("get_current_datetime", "%0d.%0m.%4y %0h\:%0M\:%0s")
|
||||
tag_uhrzeit = api_single_info
|
||||
|
||||
text = tag_uhrzeit ## " - " ## text
|
||||
|
||||
//In die Logdatei wird ein Timestamp + übergebenen Text geschrieben
|
||||
vars retval
|
||||
retval = api_function ("file_add_line", logpath, text, "APPEND")
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user