Compare commits

..

24 Commits

Author SHA1 Message Date
6e47137a46 Bewital aktualisiert 2026-03-03 16:06:16 +01:00
f5f97b8886 Optima Groovy-Hooks hinzugefügt 2026-02-06 13:42:40 +01:00
12ef4a546d Hook-Anpassung 2026-02-06 13:25:23 +01:00
3b18084dac Bewital Hook-Anpassung 2026-02-06 13:17:23 +01:00
e11a2f2590 ExportPersonaldokumente.groovy hinzugefügt 2026-01-01 20:14:44 +01:00
031bfce979 Projekt umbenannt 2025-12-17 16:42:27 +01:00
8279e75a8d Kommentare angepasst 2025-12-17 16:40:01 +01:00
Albers
d74a53dd7d Stulz hinzugefügt 2025-12-17 16:19:28 +01:00
fac4bff452 Personalakte hinzugefügt 2025-12-12 15:49:43 +01:00
6377ed1786 Bewital hinzugefügt 2025-12-08 14:08:05 +01:00
0ff828d41d _Vorlagen/.DS_Store gelöscht 2025-11-14 17:12:26 +01:00
f8a3306af5 Skripte hinzugefügt 2025-11-14 17:11:43 +01:00
5489edbbd4 Enervie/.DS_Store gelöscht 2025-11-14 10:28:13 +01:00
5bbaf8b087 Enervie hinzugefügt mit Unterordner 2025-11-14 10:26:27 +01:00
f60380cf58 Enervie hinzugefügt 2025-11-14 10:24:57 +01:00
e0fffb4ae2 deleteDocuments.groovy hinzugefügt 2025-06-04 14:26:00 +02:00
ff85a06ead Hermes Dateinamen geändert 2025-06-02 17:13:25 +02:00
227755e598 Hermes hinzugefügt 2025-06-02 17:10:23 +02:00
e8d38e6ee8 _Vorlagen/.DS_Store gelöscht 2025-04-04 11:36:11 +02:00
993e4e0ec2 Vorlagen ergänzt 2025-04-04 11:35:25 +02:00
1b227f5179 Hinzufügen der Skripte für die Stadt Essen 2025-02-11 14:55:56 +01:00
325ecbe3ea Fuege Optima hinzu 2024-12-06 15:31:59 +01:00
af3b6fb343 Änderungen bzgl. Unlink von Dokumenten 2024-08-29 12:41:03 +02:00
f3a3c3b011 DB-Tabelle geändert. 2024-08-29 11:35:52 +02:00
67 changed files with 76812 additions and 6 deletions

View 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;
}
}

View 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
View 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
View 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
View 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;
}

View 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
View 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

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

View 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
1 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
2 Bartels, Diermann, Gläsel GbR Parkstr. 50 R 58675 Hemer 99,82 31.03.2012 EEG931881391317 SEE910772801999 Resedarstr. 10a 44289 Dortmund
3 Bartels, Diermann, Gläsel GbR Parkstr. 48 58675 Hemer 57,5 31.03.2012 EEG905866478072 SEE953455624522 Resedarstr. 10a 44289 Dortmund
4 Gisela & Silke Erwentraut GbR Harkortstr. 2 58675 Hemer 59,28 20.12.2012 EEG917437536715 SEE942779967125 Von-Wrede-Str. 21 58675 Hemer
5 Karl Josef Schulte GmbH & Co. KG Amerikastr. 1 58675 Hemer 183,54 13.07.2011 EEG969328289682 SEE906304795478 Amerikastr. 1 58675 Hemer
6 Diermann, Ursula Parkstr. 46 58675 Hemer 98 28.04.2017 EEG986182706964 SEE989250830998 Am Plack 5 44149 Dortmund
7 Kellner, Jens Ernst-Stenner-Str. 34 58675 Hemer 58,065 28.09.2012 EEG985832966192 SEE963178758954 Ernst-Stenner-Str. 34 58675 Hemer
8 Schmale, Sigrun Ihmerter Str. 66 58675 Hemer 10,35 18.12.2009 EEG900997781374 SEE996162036998 Ihmerter Str. 66 58675 Hemer
9 Noga, Ekkehard Westendorfstr. 25a 58675 Hemer 4,25 09.01.2015 EEG987236522929 SEE995319870706 Westendorfstr. 25a 58675 Hemer
10 Fichtner, Peter Auf dem Kamp 25 58675 Hemer 6,89 05.07.2016 EEG989170671268 SEE997146463618 Auf dem Kamp 25 58675 Hemer
11 Schulte, Marcus Im Loh 15 58675 Hemer 8,85 17.07.2018 EEG946649579234 SEE979336039414 Im Loh 15 58675 Hemer
12 Messarius, Dr. Jochen Frönsberger Str. 25a 58675 Hemer 9,9 02.10.2018 EEG926641284114 SEE936240931593 Frönsberger Str 25a 58675 Hemer
13 Rotholz, Stephanie Im Alten Garten 6 58675 Hemer 2,4 07.11.2002 EEG975243670665 SEE910147008725 Im alten Garten 6 58675 Hemer
14 Koss, Andreas Im Eichholz 2B 58675 Hemer 4,8 06.11.2017 EEG920938728305 SEE992768046270 Im Eichholz 2b 58675 Hemer
15 Burchart, Hildegard Hagedorn 10 58675 Hemer 5,87 22.10.2019 EEG948178859597 SEE915308165361 Hagedorn 10 58675 Hemer
16 Gubba, Bettina und Augusto Burhahnstr. 21L 58675 Hemer 6,5 17.06.2020 EEG946368120878 SEE919449301817 Burhahnstr. 21L 58675 Hemer
17 Keune, Julia und Christian Sternstr. 8 58675 Hemer 5 30.06.2008 EEG998600599072 SEE940795894432 Sternstr. 8 58675 Hemer
18 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
19 Jaeger, Herbert Heukopfstr. 1 58675 Hemer 6,97 09.09.2010 EEG913121734726 SEE927205303289 Heukopfstr. 1 58675 Hemer
20 Kunold, Evelyn und Dr. Ingo Waldweg 3 58675 Hemer 6,48 20.07.2009 EEG950289031984 SEE960424080661 Waldweg 3 58675 Hemer
21 Mündelein-Jacobsen Im Loh 11 58675 Hemer 3,78 31.07.2009 EEG937153678353 SEE995075876189 Im Loh 11 58675 Hemer
22 Becke, Klaus Eichenhohl 22 58675 Hemer 5,92 28.12.2010 EEG999106521055 SEE993197033862 Eichenhohl 22 58675 Hemer
23 Groll Solar GbR Schwarzpaul 84 58675 Hemer 73,14 29.06.2010 EEG984838048321 SEE979038013415 Schwarzpaul 84 58675 Hemer
24 Schneider, Helmut Hagedorn 13 58675 Hemer 7,4 16.10.2009 EEG954156144678 SEE980497798140 Hagedorn 13 58675 Hemer
25 Heesmann, Andrea und Gunnar Am Wäldchen 2 58675 Hemer 7,13 12.05.2011 EEG998696865464 SEE915865780243 Am Wäldchen 2 58675 Hemer
26 Sunjo, Biljana und Venco Hagedorn 12A 58675 Hemer 6,84 30.08.2011 EEG910878114351 SEE938199143737 Hagedorn 12a 58675 Hemer
27 Niehoff, Jochen Am Hang 8 58675 Hemer 9,6 07.12.2011 EEG996143726764 SEE922133335739 Am Hang 8 58675 Hemer
28 Unkhoff, Jens Am Schlehdorn 5 58675 Hemer 5,76 30.03.2012 EEG934380613249 SEE927531410378 Am Schlehdorn 5 58675 Hemer
29 Becke, Klaus Eichenhohl 22 58675 Hemer 6,63 29.03.2012 EEG918067977787 SEE929027939417 Eichenhohl 22 58675 Hemer
30 Schulte, Jochen Ihmerter Str. 357 58675 Hemer 36,26 29.06.2012 EEG966678480462 SEE907682489959 Ihmerter Str 357 58675 Hemer
31 Engelmann, Stefan Stemmessiepener Weg 39 58675 Hemer 2,99 25.06.2010 EEG989253280516 SEE983865566709 Stemmessiepener Weg 39 58675 Hemer
32 Schürmann-Richert, Mechthild Westendorfstr. 20 58675 Hemer 5,76 29.06.2010 EEG993661491129 SEE934917153033 Westendorfstr. 20 58675 Hemer
33 Schürmann-Richert, Mechthild Westendorfstr. 20 58675 Hemer 1,98 20.11.2011 EEG939957933492 SEE930584959985 Westendorfstr. 20 58675 Hemer
34 Wirtz, Tim Im Loh 32 58675 Hemer 3 07.12.2001 EEG931618586405 SEE952873839167 Im Loh 32 58675 Hemer
35 Heymann, Thorsten Im Loh 17 58675 Hemer 4 11.08.2011 EEG907779378210 SEE914588652974 Im Loh 17 58675 Hemer
36 Schledde, Margita Am Iserbach 71 58675 Hemer 4,68 02.05.2007 EEG983045282375 SEE983413028444 Am Iserbach 71 58675 Hemer
37 Brückner, Gerd Lettenberg 7 58675 Hemer 5 16.05.2007 EEG924886356030 SEE998518021771 Lettenberg 7 58675 Hemer
38 Verbruggen, Michiel Ennertsweg 42 58675 Hemer 5,04 06.11.2007 EEG992544297896 SEE929628266509 Ennertsweg 42 58675 Hemer
39 Franke, Elvira Im Dümpel 1 58675 Hemer 19,35 12.11.2007 EEG988936444238 SEE976660206697 Bodelschwinghstr. 8 58706 Menden
40 Zobel, Gerlinde Grüner Brink 14 58675 Hemer 2,88 11.11.1997 EEG953324349204 SEE911008023536 Grüner Brink 14 58675 Hemer
41 Geltch, Christoph Westerweg 3 58675 Hemer 6,3 02.11.2007 EEG980820617995 SEE903466760191 Westerweg 3 58675 Hemer
42 Isfort, Susanne Karl-Bröger-Weg 4 58675 Hemer 1,26 19.11.2007 EEG922276594512 SEE992606796770 Karl-Bröger-Weg 4 58675 Hemer
43 Scheffler, Lothar Noldeweg 16 58675 Hemer 4,4 17.12.2007 EEG928716157149 SEE913107820375 Noldeweg 16 58675 Hemer
44 Hoffmann, Norbert Im Turm 32 58675 Hemer 3,24 18.12.2007 EEG962947593772 SEE985538408934 Im Turm 32 58675 Hemer
45 Römer, Kathrin und Marcus Prinzhornstr. 5 58675 Hemer 1,92 18.05.1999 EEG979190110847 SEE965382259852 Prinzhorn 5 58675 Hemer
46 DBW Walther GmbH & Co.KG Ostend 28 58675 Hemer 4,84 05.07.2008 EEG946985101229 SEE973331440404 Heinrich-Nuttebaum-Str. 6 58675 Hemer
47 Schäfer, Karsten Dorfstr. 14a 58675 Hemer 6,12 16.07.2008 EEG960262339099 SEE983221206201 Dorfstr. 14a 58675 Hemer
48 Fröndenberger Naturstrom GbR Bahnhofstr. 4 58675 Hemer 30 11.12.2008 EEG993107691519 SEE929542683062 Gehringer Schlade 21 58802 Balve
49 Fröndenberger Naturstrom GbR Stephanstr. 7 58675 Hemer 30 11.12.2008 EEG956391938890 SEE918782578573 Gehringer Schlade 21 58802 Balve
50 Fröndenberger Naturstrom GbR Bahnhofstr. 6 58675 Hemer 30 15.12.2008 EEG940106369222 SEE903305285076 Gehringer Schlade 21 58802 Balve
51 Kauke, Josef Schopenhauerweg 5 58675 Hemer 6,45 16.12.2008 EEG970605504206 SEE949243928521 Schopenhauerweg 5 58675 Hemer
52 Keller, Bernd Heppingserbach 46 58675 Hemer 3 24.03.2009 EEG949751093308 SEE949192882424 Heppingserbach 46 58675 Hemer
53 Annette Dunker-Borchmann u. Andreas Dunker Am Heßufer 38a 58675 Hemer 6,21 07.05.2009 EEG958236853696 SEE977848690505 Am Hessufer 38 58675 Hemer
54 Rohmann, Dieter Am Knick 3 58675 Hemer 6,16 15.09.2009 EEG984828466807 SEE963000644813 Am Knick 3 58675 Hemer
55 Börenz, Dagobert Mühlenweg 33 58675 Hemer 8,33 24.08.2012 EEG902587782907 SEE944409107765 Mühlenweg 33 58675 Hemer
56 Kübler, Mirjam Parkstr. 84A 58675 Hemer 4,5 28.08.2014 EEG969517552467 SEE992291354101 Parkstr. 84a 58675 Hemer
57 Jaeckel, Sonja u. Andreas Stormweg 8 58675 Hemer 5,33 13.10.2009 EEG952532925910 SEE977773837006 Stormweg 8 58675 Hemer
58 Schmöle, Hans Parkstr. 97 58675 Hemer 6,86 29.06.2011 EEG926929021899 SEE932732114222 Parkstr. 97 58675 Hemer
59 Knapp, Siegfried Löhrberg 2 58675 Hemer 9,45 12.11.2009 EEG922315666897 SEE979975999704 Löhrberg 2 58675 Hemer
60 Lehmann, Gerhard Mühlenweg 3b 58675 Hemer 7,04 17.12.2009 EEG933627705129 SEE986416168308 Mühlenweg 3b 58675 Hemer
61 Goldschmidt, Lothar Urbecker Str. 123b 58675 Hemer 9,46 16.12.2009 EEG953963020236 SEE974762011461 Urbecker Str. 123b 58675 Hemer
62 Rößler, Saskia und Michael Pastoratstr. 45 58675 Hemer 4,9 21.11.2009 EEG991561477335 SEE956855724519 Pastoratstr. 45 58675 Hemer
63 Sommer, Gerhard Stephanopel 36 58675 Hemer 5,76 23.11.2012 EEG938417653239 SEE935779530109 Stephanopel 36 58675 Hemer
64 RUSS-Elektroofen Prod. GmbH & Co. KG Ennertsweg 44 58675 Hemer 7,14 02.12.2009 EEG939167255964 SEE902621981600 Ennertsweg 44 58675 Hemer
65 Winning, Dirk Hans-Meyer-Str. 16 58675 Hemer 5,32 30.12.2009 EEG928887100944 SEE943282615527 Aixheimer Str. 12 70619 Stuttgart
66 Koptschinski, Janin und Lars Parkstr. 55a 58675 Hemer 6 30.12.2009 EEG929271100953 SEE936337212390 Parkstr. 55a 58675 Hemer
67 Ernst Alberts Zeppelinstr. 26 58675 Hemer 8,14 22.12.2009 EEG909652034763 SEE991529043053 Wilhelm-Bröckelmann-Str. 2c 58675 Hemer
68 Koc, Rabiye und Muammer Urbecker Str. 66 58675 Hemer 11,5 23.12.2009 EEG906649646213 Urbecker Str. 66 58675 Hemer
69 Gies, Holger Pestalozzistr. 17A 58675 Hemer 5,4 08.07.2015 EEG907179787681 SEE981721222516 Pestalozzistr. 17a 58675 Hemer
70 Menzel, Gabriele Jägerstr. 33 58675 Hemer 14,4 22.12.2009 EEG924797562957 SEE994223575776 Jägerstr. 33 58675 Hemer
71 Kölling, Andreas Apricke 2 58675 Hemer 8,05 04.05.2010 EEG998477687711 SEE949264533469 Apricke 2 58675 Hemer
72 Beckmann, Friedrich Wilhelm Neuer Weg 8a 58675 Hemer 23,625 04.06.2010 EEG924011663064 SEE992043258008 Neuer Weg 8a 58675 Hemer
73 Schumacher, Adrian Goyastr. 6 58675 Hemer 8,8 29.03.2012 EEG908401290849 SEE912214173336 Goyastr. 6 58675 Hemer
74 Schulte, Heiko Riemke 17 58675 Hemer 8,05 30.06.2010 EEG943801070332 SEE962982132967 Riemke 17 58675 Hemer
75 Tigges, Lieselotte und Michael Landhauser Heide 24a 58675 Hemer 11,725 28.06.2010 EEG953212667656 SEE913440953211 Landhauser Heide 24a 58675 Hemer
76 Schwarz, Ralf Am Langeloh 43a 58675 Hemer 6,21 10.06.2010 EEG961059868921 SEE935089508133 Hauptstr. 154b 13158 Berlin
77 Krone, Klaus-Jürgen Bosselbar 19 58675 Hemer 9,72 28.06.2010 EEG977331918376 SEE955982924694 Bosselbar 19 58675 Hemer
78 Heinrichs, Elke Im Hölken 19 58675 Hemer 4,14 10.06.2010 EEG949234964736 SEE921357493263 Im Hölken 19 58675 Hemer
79 Hoffmann, Norbert Im Turm 32 58675 Hemer 2,85 30.06.2010 EEG971877003145 SEE948897621802 Im Turm 32 58675 Hemer
80 Fulde, Klaus Am Langeloh 41 58675 Hemer 4,5 28.04.2010 EEG996496998597 SEE989952021656 Am Langeloh 41 58675 Hemer
81 Riesenfeld, Marian Ostend 21A 58675 Hemer 6,9 29.09.2010 EEG949367960537 SEE915128505262 Ostend 21a 58675 Hemer
82 Fröndenberger Naturstrom GbR Hademareplatz 1 58675 Hemer 24,61 27.12.2010 EEG993607794321 SEE903821368109 Gehringer Schlade 21 58802 Balve
83 C.D. Hücking Inh. K.F. Lueth Englandstr. 12 58675 Hemer 37,26 21.12.2010 EEG974680768263 SEE933587310975 Englandstr. 12 58675 Hemer
84 Netland GmbH Bahnhofstr. 15 58675 Hemer 9,12 21.04.2011 EEG959104609063 SEE908845023836 Roggenkamp 8 58093 Hagen
85 Energiegesellschaft Textor GbR Ostenschlahstr. 20 58675 Hemer 10,56 06.06.2011 EEG925211928687 SEE952062809421 Westenhelle 28 59494 Soest
86 Hennemann, Thorsten Friedensstr. 4 58675 Hemer 7,52 24.06.2011 EEG930601419249 SEE948225632814 Poststr. 12 58675 Hemer
87 Kriependorf, Rainer Stephanopeler Str. 98 58675 Hemer 6,65 07.07.2011 EEG963941448280 SEE966649496652 Auf dem Eickenufer 12 58675 Hemer
88 RUSS-Elektroofen Prod. GmbH & Co. KG Habichtweg 2 58675 Hemer 3,99 21.06.2011 EEG951827790424 SEE929265132304 Ennertsweg 44 58675 Hemer
89 Energiegesellschaft Textor GbR Jübergstr. 37A 58675 Hemer 9,6 03.08.2011 EEG965848165512 SEE965320295584 Westenhelle 28 59494 Soest
90 Energiegesellschaft Textor GbR Jübergstr. 37b 58675 Hemer 9,6 03.08.2011 EEG909958374471 SEE989236497702 Westenhelle 28 59494 Soest
91 Groll, Barbara Charlotte-Terheyden-Weg 2 58675 Hemer 3,885 09.08.2011 EEG957934155880 SEE961981347150 Charlotte-Terheyden-Weg 2 58675 Hemer
92 Giannakis, Nikolaos Haarweg 27 58675 Hemer 2,156 29.01.2014 EEG999380101905 SEE960482039519 Haarweg 27 58675 Hemer
93 Lahrmann, Werner Heuweg 8 58675 Hemer 4 24.04.2012 EEG952852923337 SEE990849638055 Heuweg 8 58675 Hemer
94 Gründlers, Björn Piepers Garten 7 58675 Hemer 10,78 22.12.2011 EEG995391673721 SEE925014263695 Piepers Garten 7 58675 Hemer
95 Hoffmann, Andreas Mendener Str. 117a 58675 Hemer 7,595 29.12.2011 EEG988510640773 SEE993427975382 Mendener Str. 117a 58675 Hemer
96 Westerhoff, Astrid Dorfstr. 38 58675 Hemer 16,56 13.12.2011 EEG927710431781 SEE961098171679 Dorfstr. 38 58675 Hemer
97 Kriependorf, Rainer Auf dem Eickenufer 12 58675 Hemer 12,35 18.10.2011 EEG915803052357 SEE967264550064 Auf dem Eickenufer 12 58675 Hemer
98 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
99 Stöwe, Johannes Sonnenblumenallee 14 58675 Hemer 27,72 29.06.2010 EEG997128329185 SEE950200537847 Hauptstr. 269 58675 Hemer
100 Große Böckmann, Thomas Sonnenblumenallee 24 58675 Hemer 16,2 29.06.2010 EEG958808121437 SEE950447318872 Elvert 5 59348 Lüdinghausen
101 Seuthe GmbH Deilinghofer Str. 27 58675 Hemer 35,1 29.06.2010 EEG975729386851 SEE903528722068 Deilinghofer Str. 11 58675 Hemer
102 Gematho Solar GbR Deilinghoferstr. 29 58675 Hemer 35,6 29.06.2010 EEG938746734104 SEE907469844919 Berger 32 59394 Nordkirchen
103 Seuthe GmbH Deilinghoferstr. 19 58675 Hemer 42,4 29.06.2010 EEG979885954497 SEE972786810688 Deilinghofer Str. 11 58675 Hemer
104 Orth, Elke und Rainer Deilinghofer Str. 12Z 58675 Hemer 74,875 29.06.2010 EEG971144257080 SEE970965703721 Nordhellen 27 58540 Meinerzhagen
105 Müller, Klaus Deilinghofer Str. 12Y 58675 Hemer 85,86 29.06.2010 EEG945205861653 SEE961208583309 Hermann-Tuleke-Str. 12 32839 Steinheim
106 Bartels, Diermann, Gläsel GbR Bergstr. 3 58675 Hemer 69,09 05.03.2012 EEG915967555626 SEE921213592376 Resedastr. 10a 44289 Dortmund
107 Bürgermeister der Stadt Hemer Christian Schweitzer Hauptstr. 18 58675 Hemer 96,6 31.03.2012 EEG948014092911 SEE909533157390 Hademareplatz 44 58675 Hemer
108 Reichardt, Angelika Ernst-Stenner-Str. 52 58675 Hemer 29,75 28.01.2016 EEG915438847885 SEE957382479248 Ernst-Stenner-Str. 52 58675 Hemer
109 Bürgermeister der Stadt Hemer Christian Schweitzer Am Hammerscheid 40 58675 Hemer 27,6 31.03.2012 EEG971313258108 SEE959279282351 Hademareplatz 44 58675 Hemer
110 Busch, Torsten Deilingerhofstr. 35 58675 Hemer 30,6 29.06.2010 EEG942649605195 SEE914495367831 Eserkamp 17 58675 Hemer
111 Breitenstein, Birgit Deilinghofer Str. 10 58675 Hemer 15,3 29.06.2010 EEG942608327908 SEE923992825393 Felsenmeerstr. 30 58675 Hemer
112 Bals, Ingo Am Haseloh 3 58675 Hemer 19,44 25.03.2014 EEG967358439251 SEE976296501791 Breddestr. 21 58675 Hemer
113 Wilkes, Markus Am Langeloh 38A 58675 Hemer 8,4 14.05.2012 EEG962021374273 SEE940276889209 Am Langeloh 38a 58675 Hemer
114 Smarza, Fredy Kapellenweg 4 58675 Hemer 3,9 11.11.2014 EEG983592419903 SEE913417504675 Kapellenweg 4 58675 Hemer
115 Gauda, Bernd Am Iserbach 83 58675 Hemer 10,335 29.03.2012 EEG986929182228 SEE929705562524 Am Iserbach 83 58675 Hemer
116 Falkenhagen, Gabriele u. Michael Am Teilfeld 10 58675 Hemer 4,6 02.04.2013 EEG993927913204 SEE996059295422 Am Teilfeld 10 58675 Hemer
117 Levermann, Erwin Am Schoppenweg 12 58675 Hemer 3,01 09.09.2009 EEG991914454976 SEE928196092725 Am Schoppenweg 12 58675 Hemer
118 Teichert, Michael Am Sonnenhang 23C 58675 Hemer 4,92 28.03.2013 EEG905610475098 SEE938581056324 Am Sonnenhang 23c 58675 Hemer
119 Nowak, Michael Brockhauser Weg 18 58675 Hemer 5,1 14.10.2015 EEG997160059323 SEE968744652254 Brockhauser Weg 18 58675 Hemer
120 Kirmes, Sandra Büttmecker Weg 14 58675 Hemer 7,215 31.07.2013 EEG932676003446 SEE912688739106 Büttmecker Weg 14 58675 Hemer
121 Genau, Doris Büttmecker Weg 15A 58675 Hemer 9,8 10.06.2013 EEG959560803647 SEE915589960174 Büttmecker Weg 15a 58675 Hemer
122 Strack, Melanie und Sebastian Caller Str. 17A 58675 Hemer 9,6 29.08.2012 EEG971399623791 SEE961698139178 Callerstr. 17a 58675 Hemer
123 Rapke, Markus Brockhauser Weg 59 58675 Hemer 4,845 29.08.2014 EEG942444045691 SEE902110480317 Brockhauser Weg 59 58675 Hemer
124 Hammer, Rudolf Droste-Hülshoff-Weg 13 58675 Hemer 7,68 05.12.2011 EEG943538239859 SEE900990895887 Droste-Hülshoff-Weg 13 58675 Hemer
125 Becker, Dagmar Schottlandstr. 1 58675 Hemer 27 25.06.2014 EEG984120829591 SEE920813188118 Schottlandstr. 1 58675 Hemer
126 Rohde, Ingo Droste-Hülshoff-Weg 82 58675 Hemer 5,2 30.07.2013 EEG965897560269 SEE956356353522 Droste-Hülshoff-Weg 82 58675 Hemer
127 Kulagin, Vadim Breddestr. 5D 58675 Hemer 3 21.11.2014 EEG924112569593 SEE957883324412 Breddestr. 5d 58675 Hemer
128 Kinzel, Christopher Von-Ketteler-Weg 3 58675 Hemer 5,13 01.03.2015 EEG979130040715 SEE959982233480 Von-Ketteler-Weg 3 58675 Hemer
129 Schulz, Jörg Heinrich-Lersch-Weg 3 58675 Hemer 3,2 08.05.2002 EEG938377607525 SEE991439191547 Heinrich-Lersch-Weg 3 58675 Hemer
130 Behrendt, Uwe Droste-Hülshoff-Weg 70 58675 Hemer 7,38 25.03.2013 EEG912690436864 SEE993010633910 Droste-Hülshoff-Weg 70 58675 Hemer
131 Stanojevic, Linda Am Voßholz 11 58675 Hemer 3,6 20.09.2002 EEG997564917465 SEE979346377803 Am Voßholz 11 58675 Hemer
132 Knodt, Christa Caller Str. 65 58675 Hemer 2,64 23.09.2002 EEG982544958149 SEE968670969426 Callerstr. 65 58675 Hemer
133 Figge, Ingo Schmetterlingsweg 11 58675 Hemer 8,64 17.12.2012 EEG946987121072 SEE951515639370 Schmetterlingsweg 11 58675 Hemer
134 Zeumer, Falk-Holger Emil-Nensel-Straße 5 58675 Hemer 4,68 01.08.2016 EEG987204686363 SEE904951608066 Emil-Nensel-Str. 5 58675 Hemer
135 Martynow, Alexander Hans-Meyer-Str. 9 58675 Hemer 9,54 17.03.2016 EEG934487752445 SEE980372013375 Hans-Meyer-Str. 9 58675 Hemer
136 Dumrau, Nadeschda Emil-Nensel-Straße 4 58675 Hemer 5,2 12.04.2016 EEG962697956308 SEE910054615665 Emil-Nensel-Str. 4 58675 Hemer
137 Lahrmann, Doreen und Alexander Charlotte-Terheyden-Weg 11 58675 Hemer 5,1 29.03.2016 EEG995800424104 SEE939034465427 Charlotte-Terheyden-Weg 11 58675 Hemer
138 Schulte, Carolin Schmetterlingsweg 13 58675 Hemer 7,8 13.04.2016 EEG988817581229 SEE914582638196 Schmetterlingsweg 13 58675 Hemer
139 Opitz, Matthias Fichtestr. 28 58675 Hemer 2 22.04.2003 EEG900938127957 SEE950444305370 Fichtestr. 28 58675 Hemer
140 Flor, Christian Breslauer Str. 31 58675 Hemer 7,5 20.09.2013 EEG931404521207 SEE961473570707 Breslauer Str. 29 58675 Hemer
141 Gertischke, Peter Am Sonnenhang 2 58675 Hemer 4,9 19.11.2003 EEG956626686114 SEE907650179844 Am Sonnenhang 2 58675 Hemer
142 Blichmann, Frank Auf dem Brauck 13 58675 Hemer 5,1 22.04.2004 EEG986359218924 SEE992592661762 Auf dem Brauck 13 58675 Hemer
143 Graetz, Achim Ginsterweg 12C 58675 Hemer 5,5 15.10.2015 EEG987799713888 SEE964757313885 Ginsterweg 12c 58675 Hemer
144 Hücking, Carsten Am Urberg 19 58675 Hemer 10,112 15.07.2005 EEG948327699173 SEE952562166147 Urbecker Str. 96b 58675 Hemer
145 Strachwitz, Georg Steinstr. 4 58675 Hemer 4,9 26.10.2005 EEG973710906316 SEE960054163987 Steinstr. 4 58675 Hemer
146 Haas, Stefan Geitbecke 13 58675 Hemer 7,02 21.11.2005 EEG988012131069 SEE916389639109 Geitbecke 13 58675 Hemer
147 Kriependorf, Rainer Auf dem Eickenufer 12 58675 Hemer 5,76 31.10.2012 EEG986370350832 SEE973536001226 Auf dem Eickenufer 12 58675 Hemer
148 Kaup, Kerstin Apricke 14B 58675 Hemer 6,24 10.12.2015 EEG967930827957 SEE987273681535 Apricke 14b 58675 Hemer
149 Podlesch, Wilfried Feldstr. 61a 58675 Hemer 6,804 19.10.2006 EEG946861681371 SEE916301551960 Feldstr. 61a 58675 Hemer
150 Schulte, Günter Lohstr. 33b 58675 Hemer 29,75 04.08.2006 EEG911013203671 SEE934676753277 Ennertsweg 40 58675 Hemer
151 Schulte, Günter Ennertsweg 40 58675 Hemer 4,55 03.09.2006 EEG980600087352 SEE998510068057 Ennertsweg 40 58675 Hemer
152 Fritsch, Helmut Von-Romberg-Str. 1 58675 Hemer 11,34 28.12.2006 EEG902931371580 SEE958560951594 Von-Romberg-Str. 1 58675 Hemer
153 Wünsche, Jörg Haarweg 26 58675 Hemer 4,5 16.01.2015 EEG967084861227 SEE952854720156 Haarweg 26 58675 Hemer
154 Steiof, Heinz und Helga Adjutantenkamp 11 58675 Hemer 3,85 30.03.2010 EEG934656766938 SEE961987468965 Adjutantenkamp 11 58675 Hemer
155 Cilek, Ahmet Am Bemberg 15 58675 Hemer 9,18 14.11.2015 EEG958353233258 SEE928814315526 Am Bemberg 15 58675 Hemer
156 Hoffmann, Peter Am Hillebach 10 58675 Hemer 3 22.06.2015 EEG964820672000 SEE937240686018 Am Hillebach 10 58675 Hemer
157 Hauke, Hans Joachim Am Langeloh 20A 58675 Hemer 3,525 30.09.2013 EEG933870007728 SEE921477081791 Am Langeloh 20a 58675 Hemer
158 Franke, Jörg Am Langeloh 24 58675 Hemer 3,68 30.09.2013 EEG930988453966 SEE967230275182 Am Langeloh 24 58675 Hemer
159 Hennemann, Meinolf Am Roland 29 58675 Hemer 8,305 13.05.2011 EEG922762622194 SEE975514457995 Am Roland 29 58675 Hemer
160 Kittner, Friedhelm Am Rosenhof 6 58675 Hemer 12,985 26.07.2012 EEG912695779614 SEE928148226932 Am Rosenhof 6 58675 Hemer
161 Hernandez, Luise Am Schieferbruch 5 58675 Hemer 4,2 17.08.2009 EEG976507054382 SEE917314778726 Am Schieferbruch 5 58675 Hemer
162 Hennemann, Dirk Am Tannenkopf 7 58675 Hemer 5,16 01.07.2013 EEG930129663520 SEE959790285817 Am Tannenkopf 7 58675 Hemer
163 Hennemann, Stefan Am Tannenkopf 9 58675 Hemer 5,875 17.05.2011 EEG916105993577 SEE976682452942 Am Tannenkopf 9 58675 Hemer
164 Schulze, Ingo Am Tyrol 3 58675 Hemer 7,155 17.07.2015 EEG907955136788 SEE993197740241 Am Tyrol 3 58675 Hemer
165 Dodt, Martin An der Landwehr 1A 58675 Hemer 10,8 29.06.2010 EEG967741640936 SEE942501391501 An der Landwehr 1a 58675 Hemer
166 Giese, Harald Auf dem Hohenstein 48 58675 Hemer 0,8 22.09.2000 EEG906470766494 SEE932653532174 Auf dem Hohenstein 48 58675 Hemer
167 Schönenberg, Klaus Werner Beethovenstr. 7 58675 Hemer 6,27 30.11.2012 EEG901030662056 SEE921076317307 Beethovenstr. 7 58675 Hemer
168 Schulte-Nockelmann, Christa Bembergstr. 40 58675 Hemer 5,4 11.05.2011 EEG903330707413 SEE919930227800 Bembergstr. 40 58675 Hemer
169 Gildenberg, Waldemar Breslauer Str. 24 58675 Hemer 8 13.06.2013 EEG911044374722 SEE909365250429 Breslauer Str. 24 58675 Hemer
170 Gildenberg, Walter Breslauer Str. 24 58675 Hemer 8 13.06.2013 EEG978664905200 SEE986136433342 Breslauer Str. 24 58675 Hemer
171 Flor, Christian Breslauer Str. 29 58675 Hemer 9,75 20.09.2013 EEG947181574718 SEE954567817277 Breslauer Str. 29 58675 Hemer
172 Henkel, Peter Brucknerstr. 14 58675 Hemer 5,1 07.12.2012 EEG917821126461 SEE982624710667 Brucknerstr. 14 58675 Hemer
173 Vöpel, Henning Bäingser Weg 100 58675 Hemer 5,28 25.02.2013 EEG938003101625 SEE912171087318 Bäingser Weg 100 58675 Hemer
174 Noreiks-Lange, Ilse Caller Str. 75 58675 Hemer 3,78 29.08.2014 EEG972015819970 SEE900921930083 Callerstr. 75 58675 Hemer
175 Sander, Jörg Droste-Hülshoff-Weg 84 58675 Hemer 5,74 23.04.2013 EEG939312695331 SEE923753276860 Droste-Hülshoff-Weg 84 58675 Hemer
176 Ziegler, Ralf Dulohstr. 8 58675 Hemer 2,4 29.09.1997 EEG973536610084 SEE967401617643 Dulohstr. 8 58675 Hemer
177 Hartwich, Paul Eichenweg 6 58675 Hemer 5,83 07.12.2015 EEG971710899072 SEE903864701727 Eichenweg 6 58675 Hemer
178 Tüttelmann, Thomas Fromersbert 10 58675 Hemer 70,8 28.06.2013 EEG994857960061 SEE967155974559 Fromersbert 10 58675 Hemer
179 Fröhlecke, Denis Ginsterweg 12A 58675 Hemer 4,77 30.08.2012 EEG901814249473 SEE985943580867 Ginsterweg 12a 58675 Hemer
180 Frank, Konstantin Hönnetalstr. 183 58675 Hemer 9,88 26.03.2016 EEG936553366426 SEE957302379733 Hönnetalstr. 183 58675 Hemer
181 Langendorf, Wolfgang Haarweg 53A 58675 Hemer 4,5 20.02.2013 EEG953550496710 SEE935856660934 Haarweg 53a 58675 Hemer
182 Graulich, Stephan Haarweg 65 58675 Hemer 5,5 10.07.2013 EEG924651956311 SEE908410283337 Haarweg 65 58675 Hemer
183 Schäfer, Sigfried Heinrich-Lersch-Weg 4 58675 Hemer 6,05 07.08.2015 EEG948650247836 SEE957958822744 Heinrich-Lersch-Weg 4 58675 Hemer
184 Tschorn, Hannelore Heinrich-Lersch-Weg 8 58675 Hemer 6,16 19.06.2013 EEG953938508981 SEE952657758479 Heinrich-Lersch-Weg 8 58675 Hemer
185 Bauer, Stephan Heppingsen 70 58675 Hemer 32,43 14.12.2011 EEG930049158434 SEE917529574199 Heppingsen 70 58675 Hemer
186 Ferrire, Annegret Hermann-Claudius-Weg 6 58675 Hemer 1,56 29.05.2015 EEG929624244631 SEE930998549079 Hermann-Claudius-Weg 6 58675 Hemer
187 Rosenthal, Karl-Heinz Holbeinstr. 14 58675 Hemer 5,07 04.07.2012 EEG903097589468 SEE990556773551 Holbeinstr. 14 58675 Hemer
188 Jaeger, Michael Im Bockeloh 6 58675 Hemer 4,73 23.10.2011 EEG964090197340 SEE923312676506 Im Bockeloh 6 58675 Hemer
189 Manfred & Gerda Steinberg GbR Im Dümpel 12 58675 Hemer 77,33 29.12.2010 EEG908202432004 SEE953471639807 Im Dümpel 12 58675 Hemer
190 Schulte, Bertold Im Hölken 4 58675 Hemer 6 14.03.2014 EEG929503878674 SEE903101910271 Im Hölken 4 58675 Hemer
191 Mellert Im Keunenborn 12A 58675 Hemer 22,05 09.03.2012 EEG965563840978 SEE972787459282 Im Keunenborn 12a 58675 Hemer
192 Dahm, Andreas Im Nettelchen 8 58675 Hemer 8,5 27.06.2013 EEG944271817441 SEE932375997251 Im Nettelchen 8 58675 Hemer
193 Erne, Gerhard In der Gähre 4 58675 Hemer 6,12 30.07.2013 EEG949061672224 SEE947286071273 In der Gähre 4 58675 Hemer
194 Da Costa Jägerstr. 11 58675 Hemer 6,72 25.04.2013 EEG994219603629 SEE952895926913 Jägerstr. 11 58675 Hemer
195 Schotte, Sarah und Tim Jägerstr. 12 58675 Hemer 3,25 29.03.2012 EEG985888360197 SEE989936792817 Jägerstr. 12 58675 Hemer
196 Menzel, Gabriele Jägerstr. 33 58675 Hemer 9,12 30.03.2012 EEG917219179611 SEE971762037453 Jägerstr. 33 58675 Hemer
197 Franke, Tobias Kapellenweg 2 58675 Hemer 5,5 30.09.2013 EEG902201905279 SEE979506103181 Am Langeloh 24 58675 Hemer
198 Mämecke, Irmgard Kiefernweg 15 58675 Hemer 1,96 24.09.1997 EEG912113230307 SEE931023382852 Kiefernweg 15 58675 Hemer
199 Dämmer, Gabriele Lamferstr. 34 58675 Hemer 6 03.09.2015 EEG990582026287 SEE925208222392 Lamferstr. 34 58675 Hemer
200 Malke, Uwe Landhauser Str. 114 58675 Hemer 4,5 12.12.2014 EEG971817404049 SEE980840430550 Landhauser Str. 114 58675 Hemer
201 Giebels, Johannes Lindenstr. 2 58675 Hemer 4,375 20.04.2010 EEG944018134763 SEE999775693152 Lindenstr. 2 58675 Hemer
202 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
203 Paulokat, Christina Oberlinweg 40 58675 Hemer 9,62 23.09.2013 EEG981238542718 SEE983370863126 Oberlinweg 40 58675 Hemer
204 Körber, Maria-Helena Parkstr. 70 58675 Hemer 5,7 04.03.2011 EEG939764608972 SEE941998275585 Parkstr. 70 58675 Hemer
205 Althaus, Martin Peter-Grah-Str. 12 58675 Hemer 4,94 01.12.2010 EEG945731999592 SEE940117735955 Peter-Grah-Str. 12 58675 Hemer
206 Vollmert, Ernst und Sofija Rembrandtstr. 3 58675 Hemer 7,44 22.11.2012 EEG997402788929 SEE963277825281 Rembrandtstr 3 58675 Hemer
207 Gil Fernandez, Carlos Rembrandtstr. 6 58675 Hemer 7,2 12.12.2012 EEG964508808189 SEE907910370929 Rembrandtstr 6 58675 Hemer
208 Pfannenschmidt, Wilhelm Rembrandtstr. 7A 58675 Hemer 9,69 03.12.2013 EEG968668182448 SEE906196191907 Rembrandtstr 7a 58675 Hemer
209 Gerres, Peter Rembrandtstr. 8 58675 Hemer 7,68 22.03.2012 EEG958610071494 SEE930537538243 Rembrandtstr 8 58675 Hemer
210 Hövener, Klaus-Jürgen Rembrandtstr. 13 58675 Hemer 8 19.04.2013 EEG978362121438 SEE930583503240 Rembrandtstr 13 58675 Hemer
211 Lewerenz, Frank Schulstr. 12 58675 Hemer 12,09 14.11.2011 EEG984007395218 SEE960780988953 Schulstr. 12 58675 Hemer
212 Behle, Karsten und Tanja Schulstr. 13 58675 Hemer 11,34 12.05.2011 EEG932031603366 SEE990017817497 Schulstr. 13 58675 Hemer
213 Heidsick, Ursula Seilerstr. 3 58675 Hemer 8,36 17.10.2013 EEG900821335827 SEE996860101172 Seilerstr. 3 58675 Hemer
214 Philipps, Christian Stephanopel 36A 58675 Hemer 6,56 29.05.2013 EEG964953605333 SEE949118351133 Stephanopel 36a 58675 Hemer
215 Mündelein, Volker Sundwiger Weg 4 58675 Hemer 5,28 13.01.2016 EEG982577346791 SEE906303162639 Sundwiger Weg 4 58675 Hemer
216 Deipenwisch, Reinhard Urbecker Str. 83 58675 Hemer 6,84 31.03.2012 EEG972831273338 SEE945195303461 Urbecker Str. 83 58675 Hemer
217 Tentscher, Peter Urbecker Str. 92 58675 Hemer 5 26.10.2011 EEG970656846874 SEE929190865247 Urbecker Str. 92 58675 Hemer
218 Schönhoff, Jörg Von-Wrede-Str. 11A 58675 Hemer 17,1 23.11.2009 EEG907923985561 SEE918554610487 Von-Wrede-Str. 11a 58675 Hemer
219 Erwentraut, Gisela Von-Wrede-Str. 21 58675 Hemer 7,02 28.08.2013 EEG997559866983 SEE912057507381 Von-Wrede-Str. 21 58675 Hemer
220 Westermann, Kristina und Markus Voßstr. 19 58675 Hemer 6,09 21.09.2014 EEG990155901560 SEE979351137898 Voßstr. 19 58675 Hemer
221 Menneken, Rainer Wenhagener Str. 4 58675 Hemer 2,2 15.09.2010 EEG963650699072 SEE965236575794 Wenhagener Str. 4 58675 Hemer
222 Weick, Thomas Wenhagener Str. 20A 58675 Hemer 7,68 22.03.2012 EEG940089908814 SEE955261838711 Wenhagener Str. 20a 58675 Hemer
223 Giebels, Peter Zeppelinstr. 69 58675 Hemer 6,58 18.04.2011 EEG901352398367 SEE940036496838 Zeppelinstr. 69 58675 Hemer
224 Schmidt, Dirk Stormweg 39 58675 Hemer 5 14.03.2013 EEG951247889586 SEE982819390599 Stormweg 39 58675 Hemer
225 Wahlers, Bernhard Am Rosenhof 1 58675 Hemer 5,3 31.07.2012 EEG956420171205 SEE917309883992 Am Rosenhof 1 58675 Hemer
226 Kapkowski, Gilbert Am Oelbusch 25 58675 Hemer 5,72 24.08.2013 EEG961530037259 SEE975297940677 Am Oelbusch 25 58675 Hemer
227 Knipping, Werner Dorfstr. 1 58675 Hemer 7,25 20.01.2014 EEG917975323198 SEE984613421851 Dorfstr. 1 58675 Hemer
228 Osterbrauck, Friedhelm Eserkamp 42 58675 Hemer 3,43 29.05.2012 EEG951949348947 SEE965557251117 Eserkamp 42 58675 Hemer
229 Samsz, Roland Falkenweg 6 58675 Hemer 5,27 28.08.2013 EEG947874159925 SEE921686982964 Falkenweg 6 58675 Hemer
230 Maiwurm, Winfried Piepers Garten 2 58675 Hemer 9,36 03.08.2020 EEG981906307014 SEE945514477378 Piepers Garten 2 58675 Hemer
231 Schmidt, Karl-Heinz Im Wiehagen 5 58675 Hemer 6,9 12.05.2017 EEG991820485040 SEE981259214199 Im Wiehagen 5 58675 Hemer
232 Bohm, Erika Lenbachstr. 3A 58675 Hemer 6,63 10.02.2016 EEG915907677890 SEE942296728315 Lenbachstr. 3a 58675 Hemer
233 Schaaf, Katrin Am Dasbrauck 3 58675 Hemer 9,38 23.07.2020 EEG930155214482 SEE977819631865 Am Dasbrauck 3 58675 Hemer
234 Willkomm, Alexander Am Dasbrauck 3C 58675 Hemer 8,32 23.09.2019 EEG919884810585 SEE986523685576 Am Dasbrauck 3c 58675 Hemer
235 Kucharzyk, Raimund Landhauser Str. 98 58675 Hemer 3,6 21.08.2019 EEG917670114053 SEE989019378303 Landhauser Str. 98 58675 Hemer
236 TV Hemer 1862 e.V., Herrn Mick Schelberg Nockenstr. 15 58675 Hemer 32,55 19.01.2018 EEG950765410500 SEE922774592690 Nockenstr. 15 58675 Hemer
237 Varandani-Gogia, Yasmin Am Langeloh 22 58675 Hemer 6,76 22.12.2016 EEG955340382524 SEE976931096057 Am Langeloh 22 58675 Hemer
238 Schmöle, Günter Apricke 22A 58675 Hemer 4,8 22.03.2019 EEG913210766676 SEE954459962559 Apricke 22a 58675 Hemer
239 Hakenberg, Hubert An der Iserkuhle 3 58675 Hemer 9,81 31.08.2016 EEG908402216015 SEE907617442912 An der Iserkuhle 3 58675 Hemer
240 Akol, Deniz Apricke 71 58675 Hemer 8,96 30.05.2017 EEG947479696337 SEE926916453559 Apricke 71 58675 Hemer
241 Steinhelfer, Damian Ernst-Stenner-Str. 2 58675 Hemer 7,8 13.09.2019 EEG967953872286 SEE995457927591 Ernst-Stenner-Str. 2 58675 Hemer
242 Zellien, Carsten Bautenheide 15 58675 Hemer 5,3 20.01.2017 EEG976996485056 SEE929422440822 Bautenheide 15 58675 Hemer
243 Schleich, Karl-Dieter An der Windfuhr 21 58675 Hemer 8,19 30.11.2019 EEG910220101565 SEE942433893623 An der Windfuhr 21 58675 Hemer
244 Schellewald, Benjamin Doris-Ebbing-Straße 1 58675 Hemer 7,08 05.07.2016 EEG996660437723 SEE902134871498 Doris-Ebbing-Str. 1 58675 Hemer
245 Flitsch, Sonja und Kai Uwe Schmetterlingsweg 7 58675 Hemer 4,5 29.02.2016 EEG978360490475 SEE954987578987 Schmetterlingsweg 7 58675 Hemer
246 Pauls, Oxana Schmetterlingsweg 5 58675 Hemer 10 02.03.2016 EEG915052395793 SEE942747752340 Schmetterlingsweg 5 58675 Hemer
247 Wollny, Jürgen Schmetterlingsweg 3 58675 Hemer 5 20.01.2016 EEG965483617353 SEE961471547343 Schmetterlingsweg 3 58675 Hemer
248 Schmöle, Dominic Emil-Nensel-Straße 3 58675 Hemer 4,8 29.03.2019 EEG940510939417 SEE973164295516 Emil-Nensel-Str. 3 58675 Hemer
249 Jonen, Christoph Schmetterlingsweg 1 58675 Hemer 3,72 19.12.2016 EEG925967898777 SEE985731594144 Schmetterlingsweg 1 58675 Hemer
250 Blankenberg, Nadine Lange Wiese 3 58675 Hemer 7,54 13.03.2017 EEG915291435663 SEE902303464988 Lange Wiese 3 58675 Hemer
251 PV Stadtvilla U + H Sprenger GbR Elsa-Brandström-Str. 14 58675 Hemer 50 23.03.2018 EEG923222153074 SEE985313134249 Tailgelbrand 8 58640 Iserlohn
252 Menze, Tim Lange Wiese 33 58675 Hemer 2,43 05.12.2018 EEG964283239482 SEE975363275788 Lange Wiese 33 58675 Hemer
253 Menze, Tim Lange Wiese 33 58675 Hemer 1,89 28.12.2019 EEG948390531912 SEE901459333568 Lange Wiese 33 58675 Hemer
254 Rieske, Alexander Nikolai-Gubarew-Str. 1 58675 Hemer 4,1 04.10.2019 EEG985730758301 SEE994698005952 Nikolai-Gubarew-Str. 1 58675 Hemer
255 Ott, Eduard Lange Wiese 42 58675 Hemer 5,7 28.06.2019 EEG967553621802 SEE977226274815 Lange Wiese 42 58675 Hemer
256 Messarius, Jürgen Felsenmeerstr. 22 58675 Hemer 6 30.08.2019 EEG976484933960 SEE943458107337 Felsenmeerstr. 22 58675 Hemer
257 Kossak, Thorsten Lange Wiese 1 58675 Hemer 7,68 10.09.2019 EEG959477741452 SEE946578808849 Lange Wiese 1 58675 Hemer
258 Kudraschov, Elena Haarweg 41 58675 Hemer 6,12 02.12.2016 EEG901495633554 SEE972859717463 Haarweg 41 58675 Hemer
259 Schabram, Dominik Bäingser Weg 98 58675 Hemer 6,82 09.03.2020 EEG913523831979 SEE991072497280 Bäingser Weg 98 58675 Hemer
260 Schlenke, Gerd Haarweg 29 58675 Hemer 9,6 30.08.2018 EEG945717862360 SEE952092209796 Haarweg 29 58675 Hemer
261 Meier, Marlis Arndtstr. 6 58675 Hemer 6,9 04.12.2019 EEG905082211200 SEE974536353520 Arndtstr. 6 58675 Hemer
262 Gross, Wolfgang Auf dem Brauck 20 58675 Hemer 6,2 31.01.2019 EEG965288782287 SEE910789663337 Auf dem Brauck 20 58675 Hemer
263 Bartmann, Stefan Balver Weg 34 58675 Hemer 2,86 23.03.2017 EEG981070572973 SEE942628663451 Balver Weg 34 58675 Hemer
264 Verborg, Dirk Birkenweg 17 58675 Hemer 4,06 05.12.2017 EEG962688562822 SEE959420843813 Birkenweg 17 58675 Hemer
265 Reiffenrath, Christian Buchenweg 6 58675 Hemer 6,24 09.11.2016 EEG963975928789 SEE916937389210 Buchenweg 6 58675 Hemer
266 Schabram, Dominik Bäingser Weg 98 58675 Hemer 6,51 06.03.2020 EEG909237233482 SEE953393711612 Bäingser Weg 98 58675 Hemer
267 Fehring-Hänsch, Reinhard Dorfstr. 59A 58675 Hemer 6,6 01.08.2018 EEG945445026553 SEE954305709567 Dorfstr. 59a 58675 Hemer
268 Verfuß, Christiane Dulohstr. 51 58675 Hemer 4,64 13.04.2016 EEG966030141406 SEE961454059634 Dulohstr. 51 58675 Hemer
269 Barowsky, Jo-Ann Ennertsweg 60 58675 Hemer 2,34 09.12.2016 EEG977977378039 SEE930807836338 Ennertsweg 60 58675 Hemer
270 Rohlof, Christian Fuchsweg 7 58675 Hemer 9,805 28.05.2019 EEG972728360721 SEE985683579244 Fuchsweg 7 58675 Hemer
271 Berger, Johannes Gerrit-Engelke-Weg 4 58675 Hemer 4,96 08.08.2019 EEG963132659907 SEE905970133812 Gerrit-Engelke-Weg 4 58675 Hemer
272 Ziebach, Michael Hönnetalstr. 242A 58675 Hemer 7,29 08.03.2018 EEG974174754383 SEE929025048258 Hönnetalstr. 242a 58675 Hemer
273 Buchgeister, Johannes Haarweg 73 58675 Hemer 9,92 24.06.2019 EEG951004475472 SEE960031873694 Haarweg 73 58675 Hemer
274 Welter, Stefan Haarweg 79 58675 Hemer 9,9 17.02.2020 EEG923223080652 SEE962444652514 Haarweg 79 58675 Hemer
275 Voss, Michael Hembecker Weg 13 58675 Hemer 6,405 13.09.2019 EEG904156428391 SEE908449349356 Hembecker Weg 13 58675 Hemer
276 Gailer, Friederike u. Georg Hembecker Weg 36 58675 Hemer 7,8 23.03.2020 EEG990186403743 SEE946226781937 Hembecker Weg 36 58675 Hemer
277 Elke Vöpel-Weidemann und Uwe Weidemann Hembecker Weg 43A 58675 Hemer 6 06.04.2017 EEG911907842054 SEE949470605196 Hembecker Weg 43a 58675 Hemer
278 Schneider, Ursula Heuweg 14 58675 Hemer 6,24 27.02.2017 EEG950717890497 SEE973305217674 Heuweg 14 58675 Hemer
279 Stopsack, Arne Hermann Im Bockeloh 27 58675 Hemer 9,54 21.09.2016 EEG979129531699 SEE922175105079 Im Bockeloh 27 58675 Hemer
280 Hohendorf, Burkhard In den Klippen 17 58675 Hemer 6,84 28.11.2016 EEG959075848379 SEE981146342257 In den Klippen 17 58675 Hemer
281 Matrigiano, Marco In der Bilmecke 9 58675 Hemer 7,848 02.12.2016 EEG986429810669 SEE995818917650 In der Bilmecke 9 58675 Hemer
282 Hanke, Thomas Lenbachstr. 29 58675 Hemer 3,6 24.04.2017 EEG909439654917 SEE957523096037 Lenbachstr. 29 58675 Hemer
283 Liehn, Johann Prinzhornstr. 1 58675 Hemer 8,71 06.07.2020 EEG971537492890 SEE975537231343 Prinzhornstr. 1 58675 Hemer
284 Hiepel, Marcus Rehpfad 9 58675 Hemer 9,16 11.01.2017 EEG995383468861 SEE972488170783 Rehpfad 9 58675 Hemer
285 Solar The World Unter dem Asenberg 36 58675 Hemer 18,72 22.04.2020 EEG968168985075 SEE958845365443 Forsthausstr. 4 82031 Grünwalt
286 Keller, Björn Unter dem Naumberg 19 58675 Hemer 6,5 09.01.2020 EEG905853809414 SEE904496680763 Unter dem Naumberg 19 58675 Hemer
287 Bergert, Holger Von-Ketteler-Weg 1 58675 Hemer 5,49 20.03.2019 EEG952164815986 SEE949685136881 Von-Ketteler-Weg 1 58675 Hemer
288 Friedrich Kirchhoff GmbH Apricker Weg 15 58675 Hemer 9,83 21.04.2020 EEG964019693298 SEE927584315569 Apricker Weg 15 58675 Hemer
289 Amsbeck, Wolfgang Brockhauser Weg 33A 58675 Hemer 8,45 18.05.2020 EEG927210460946 SEE903760123289 Brockhauser Weg 33a 58675 Hemer
290 Klemm, Horst Mesterscheid 1 58675 Hemer 7,75 31.08.2020 EEG918322591734 SEE918511919615 Mesterscheid 1 58675 Hemer
291 Seifert, Daniela Büttmecker Weg 44 58675 Hemer 9,86 09.07.2020 EEG907367328498 SEE947273589019 Büttmecker Weg 44 58675 Hemer
292 Graw, Fabio Am Dasbrauck 19 58675 Hemer 8,775 16.07.2020 EEG914453428666 SEE977393802217 Am Dasbrauck 19 58675 Hemer
293 Demiralmaz, Klaudia Kiefernweg 11 58675 Hemer 9,24 05.08.2020 EEG994758618856 SEE905794283755 Kiefernweg 11 58675 Hemer
294 Winzer, Christel Dorfstr. 3 58675 Hemer 4,16 28.09.2016 EEG966725315785 SEE915841206552 Dorfstr. 3 58675 Hemer
295 Trottier, Dirk Am Knapp 10 58675 Hemer 0,3 07.06.2020 EEG980050514613 SEE978941077217 Am Knapp 10 58675 Hemer
296 Frehde, Benjamin Im Siepen 2 58675 Hemer 0,6 22.06.2020 EEG993591012258 SEE922862794272 Im Siepen 2 58675 Hemer
297 Köpke, Björn Am Wernshagen 37 58675 Hemer 3,66 07.10.2020 EEG902691477294 SEE942252471941 Am Wernshagen 37 58675 Hemer
298 Rohmann, Dieter Am Knick 3 58675 Hemer 1,98 25.11.2009 EEG925294280443 SEE955565610914 Am Knick 3 58675 Hemer
299 Hücking, Carsten Am Urberg 19 58675 Hemer 5,94 15.07.2005 EEG948841858254 SEE901561423157 Urbecker Str. 96b 58675 Hemer
300 Schulte-Nockelmann, Christa Bembergstr. 40 58675 Hemer 3,15 20.06.2011 EEG925034451812 SEE969028617839 Bembergstr. 40 58675 Hemer
301 Rosenthal, Karl-Heinz Holbeinstr. 14 58675 Hemer 2,058 20.04.2013 EEG903160544448 SEE938069971606 Holbeinstr. 14 58675 Hemer
302 Menzel, Gabriele Jägerstr. 33 58675 Hemer 3,04 30.03.2012 EEG906568773793 SEE919124735128 Jägerstr. 33 58675 Hemer
303 Barowsky, Jo-Ann Ennertsweg 60 58675 Hemer 2,34 28.09.2016 EEG977977378039 SEE930807836338 Ennertsweg 60 58675 Hemer
304 Schumacher, Ingo Dulohstr. 25 58675 Hemer 9,75 10.12.2020 EEG907943596327 SEE912039676791 Dulohstr. 25 58675 Hemer
305 Rosenthal, Michael Ennertsweg 30 58675 Hemer 7,15 23.11.2020 EEG990322379826 SEE916596560975 Ennertsweg 30 58675 Hemer
306 Heinrich-Martin Borowka Im Alten Garten 8 58675 Hemer 27,3 16.09.2020 EEG944128979193 SEE983346981007 Im alten Garten 8 58675 Hemer
307 Atay, Merih An der Kalkegge 12 58675 Hemer 14,64 01.12.2020 EEG904200839609 SEE935857779055 An der Kalkegge 12 58675 Hemer
308 Chudy, Jürgen Brockhauser Weg 97 58675 Hemer 7,75 28.04.2014 EEG931260290491 SEE994841738508 Brockhauser Weg 97 58675 Hemer
309 Chudy, Udo Am Tannenkopf 26 58675 Hemer 5,06 18.06.2011 EEG901658393257 SEE947954823890 Am Tannenkopf 26 58675 Hemer
310 Bals, Ingo Am Haseloh 1 58675 Hemer 19,44 25.03.2014 EEG908841981703 SEE933624948192 Breddestr. 21 58675 Hemer
311 Hellmann, Martina Gartenstr. 35 58675 Hemer 5,28 19.11.2020 EEG916463236033 SEE925338678939 Gartenstr. 35 58675 Hemer
312 Hülsmeyer, Marco Kiefernweg 14 58675 Hemer 9,75 15.03.2020 EEG900696370633 SEE918341795762 Kiefernweg 14 58675 Hemer
313 Schwantge, Heike In der Erborst 18 58675 Hemer 9,92 18.09.2020 EEG960086667637 SEE998584606582 In der Erborst 18 58675 Hemer
314 Stenner, Marco Burhahnstr. 37 58675 Hemer 11,94 30.03.2021 EEG980587137699 SEE995325557899 Burhahnstr. 37 58675 Hemer
315 Zwara, Martin Charlotte-Terheyden-Weg 21 58675 Hemer 7,15 06.04.2020 EEG903097633949 SEE982947558717 Charlotte-Terheyden-Weg 21 58675 Hemer
316 Schmidt, Torsten Lange Wiese 10 58675 Hemer 7,44 24.06.2020 EEG968623098609 SEE997863586683 Lange Wiese 10 58675 Hemer
317 Hartmann, Rolf Unter dem Asenberg 8 58675 Hemer 6,93 29.04.2020 EEG914564719745 SEE990182619452 Unter dem Asenberg 8 58675 Hemer
318 Porrello, Tabea Am Bemberg 19D 58675 Hemer 9,24 04.05.2020 EEG990880651457 SEE982798455852 Am Bemberg 19d 58675 Hemer
319 Moldoch, Alexandra Am Eibenbrink 9 58675 Hemer 3,3 30.04.2020 EEG955839649107 SEE945652088610 Am Eibenbrink 9 58675 Hemer
320 Spieckermann, Kirsten Brandeiche 20 58675 Hemer 9,92 15.05.2020 EEG925694689501 SEE958537664663 Brandeiche 20 58675 Hemer
321 Weifenbach, Jan Brockhauser Weg 45A 58675 Hemer 9,92 04.05.2020 EEG982322878652 SEE954942794636 Brockhauser Weg 45a 58675 Hemer
322 Blask, Inge Am Wernshagen 21A 58675 Hemer 7 05.06.2020 EEG991022168901 SEE959223662529 Am Wernshagen 21a 58675 Hemer
323 Porwol, Christoph Am Haseloh 46 58675 Hemer 4,48 08.05.2020 EEG913142924267 SEE927254117424 Am Haseloh 46 58675 Hemer
324 Zedda, Luciano Auf dem Kliewe 3 58675 Hemer 11,05 23.06.2020 EEG918763983068 SEE920677013922 Auf dem Kliewe 3 58675 Hemer
325 Ganzer, Bernd Heisterbusch 4 58675 Hemer 7,2 26.03.2020 EEG997301486940 SEE913304817598 Heisterbusch 4 58675 Hemer
326 Borggräfe, Marcel Wenhagener Str. 5 58675 Hemer 7,92 20.01.2020 EEG952770313425 SEE911513852485 Wenhagener Str. 5 58675 Hemer
327 Krause, Rainer Wenhagener Str. 32 58675 Hemer 5,7 11.07.2017 EEG915630659408 SEE934227304446 Wenhagener Str. 32 58675 Hemer
328 Sassner, Frank Ostfeldstr. 29 58675 Hemer 4,5 21.09.2012 EEG923209526990 SEE982472992864 Ostfeldstr. 29 58675 Hemer
329 Düllberg, Gerald u. Adriana Burhahnstr. 19 58675 Hemer 6,24 30.10.2012 EEG968487977843 SEE900304432746 Burhahnstr. 19 58675 Hemer
330 Thomas, Treudt Ihmerter Str. 215b 58675 Hemer 9,75 29.04.2021 EEG973920232830 SEE958256884656 Ihmerter Str. 215b 58675 Hemer
331 Schroth, Tatjana Auf dem Kamp 17 58675 Hemer 4,95 22.02.2021 EEG995167286438 SEE999309848225 Auf dem Kamp 17 58675 Hemer
332 Suthan, Kirupasini Wittekindstr. 14A 58675 Hemer 7,92 26.05.2021 EEG999477474721 SEE903604792480 Wittekindstr. 14a 58675 Hemer
333 Martinschledde, Gerd Goyastr. 3 58675 Hemer 4,95 24.06.2021 EEG937843997665 SEE953416990581 Goyastr. 3 58675 Hemer
334 Kretschmer, Mathias Habichtweg 5 58675 Hemer 5,4 29.01.2013 EEG993820698529 SEE997667291073 Habichtweg 5 58675 Hemer
335 Frank, Sabrina-Vanessa Im Beil 7 58675 Hemer 3 13.11.2017 EEG984706293945 SEE989228408068 Im Beil 7 58675 Hemer
336 Karin Lehmkühler und Werner Rosenthal Ebberg 7 58675 Hemer 5,2 22.09.2017 EEG915579207265 SEE981766918658 Ebberg 7 58675 Hemer
337 Sönmez, Sertan Hans-Meyer-Str. 22 58675 Hemer 6,867 04.10.2017 EEG924094127378 SEE956087149449 Hans-Meyer-Str. 22 58675 Hemer
338 Jankowiak, Renate Am Tannenkopf 33B 58675 Hemer 6,3 13.01.2018 EEG983960052374 SEE967116295419 Am Tannenkopf 33b 58675 Hemer
339 Bongardt, Stefan Droste-Hülshoff-Weg 15 58675 Hemer 7,2 03.04.2017 EEG900336844135 SEE970162692996 Droste-Hülshoff-Weg 15 58675 Hemer
340 Claudia und Michael Patzkies Kiefernweg 7 58675 Hemer 9,72 12.06.2017 EEG900224276062 SEE911577135951 Kiefernweg 7 58675 Hemer
341 Müller, Rainer Parkstr. 71 58675 Hemer 6,05 08.06.2017 EEG995330337820 SEE980031017867 Parkstr. 71 58675 Hemer
342 Drolshagen, Klaus Westerweg 3A 58675 Hemer 8,06 29.07.2020 EEG903010726574 SEE995656158949 Westernweg 3a 58675 Hemer
343 Plattes, Thomas Am Tannenkopf 21c 58675 Hemer 8,91 14.08.2020 EEG953944880446 SEE941525821377 Am Tannenkopf 21c 58675 Hemer
344 Verfuß GmbH Mendener Str. 36 58675 Hemer 29,7 22.08.2017 EEG935461182999 SEE952650758483 Mendener Str. 40 58675 Hemer
345 Seeliger, Dietmar Reinhard Haarweg 30 58675 Hemer 9,1 25.03.2020 EEG999561963933 SEE943472260315 Haarweg 30 58675 Hemer
346 Amelung-Schiebel und Schiebel GbR Bäingser Weg 96 58675 Hemer 7,8 09.11.2020 EEG948216333058 SEE953983526831 Bäingser Weg 96 58675 Hemer
347 Hendel, Kornelia Ginsterweg 18 58675 Hemer 8,4 08.10.2020 EEG930093932851 SEE959724721824 Ginsterweg 18 58675 Hemer
348 Sprenger, Christian Hönnetalstr. 57 58675 Hemer 5,35 17.09.2019 EEG931178859254 SEE958556207308 Hönnetalstr. 57 58675 Hemer
349 Pieper, Reinhold Hubertus Am Sommerholt 16B 58675 Hemer 11,52 23.06.2021 EEG953756582057 SEE911239004380 Am Sommerholt 16b 58675 Hemer
350 Günes, Sedat Lamferstr. 27 58675 Hemer 9,9 06.07.2021 EEG903169121107 SEE947692540479 Lamferstr. 27 58675 Hemer
351 Klein, Manuela Im Santel 7 58675 Hemer 9,38 19.10.2020 EEG992889533161 SEE902535373850 Im Santel 7 58675 Hemer
352 Jäschke, Gregor Im Hölken 8 58675 Hemer 6,12 23.09.2020 EEG983967851048 SEE908964936581 Im Hölken 8 58675 Hemer
353 Magiera, Jennifer und Meik Fliednerweg 6 58675 Hemer 8,87 19.08.2021 EEG941311839708 SEE976553791255 Fliednerweg 6 58675 Hemer
354 Ruberg, Dietmar Am Dasbrauck 6 58675 Hemer 9,1 18.01.2021 EEG965885578818 SEE941700507089 Am Dasbrauck 6 58675 Hemer
355 Beckmann, Volker Neuer Weg 25 58675 Hemer 10 30.07.2021 EEG958605197611 SEE923698303973 Neuer Weg 25 58675 Hemer
356 Lohre, Stephan Scharpschnute 1 58675 Hemer 7,92 30.07.2021 EEG971725473717 SEE981387289762 Scharpschnute 1 58762 Altena
357 Lemke, Doris Auf dem Schilk 6 58675 Hemer 8,91 02.09.2021 EEG907946458318 SEE928308376286 Auf dem Schilk 6 58675 Hemer
358 Nixdorf, Helga Falkenweg 7 58675 Hemer 9,36 20.04.2021 EEG972720078334 SEE963715371073 Falkenweg 7 58675 Hemer
359 Fessen, Winfried Am Branddorn 18 58675 Hemer 5,18 02.09.2021 EEG973061345314 SEE949203736708 Am Branddorn 18 58675 Hemer
360 Scheidemann, Maxim Lenbachstr. 23 58675 Hemer 11,52 09.08.2021 EEG964462678064 SEE983215445029 Lenbachstr. 23 58675 Hemer
361 Schorlemmer, Frank Droste-Hülshoff-Weg 47 58675 Hemer 3,28 19.08.2021 EEG972542732018 SEE996263834752 Droste-Hülshoff-Weg 47 58675 Hemer
362 Schneider, Lothar Heppingsen 23 58675 Hemer 9,52 15.09.2021 EEG942981385557 SEE955029070261 Heppingsen 23 58675 Hemer
363 Schween, Cedrik In der Gähre 7 58675 Hemer 24,75 29.10.2021 EEG923323717731 SEE991484542219 Bergstr. 32 58905 Hagen
364 Schäfer, Tim Iserlohner Str. 32 58675 Hemer 16,3 10.09.2021 EEG923833577856 SEE966167318931 Iserlohner Str. 32 58675 Hemer
365 Pohl, Oliver Ulmenweg 10 58675 Hemer 8,8 23.08.2021 EEG998132305448 SEE919629104306 Ulmenweg 10 58675 Hemer
366 KEUCO GmbH & Co. KG Oesestr. 36 58675 Hemer 39 30.08.2012 EEG950166452420 SEE954721016683 Oesestr. 36 58675 Hemer
367 Henning, Uwe Am Teilfeld 36 58675 Hemer 6,38 15.09.2021 EEG985655801342 SEE966358532344 Am Teilfeld 36 58675 Hemer
368 Winner Spedition GmbH & Co. KG Am Wernshagen 37 58675 Hemer 28,4 04.01.2021 EEG929700464816 SEE999576648931 Industriepark Edelbur 5 58675 Hemer
369 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
370 Schulte, Elisabeth Iserlohner Str. 9 58675 Hemer 9,9 29.09.2020 EEG925687686821 SEE904432603078 Iserlohner Str. 9 58675 Hemer
371 Manolopoulos, Konstantin Im Beil 8 58675 Hemer 24,82 25.10.2021 EEG928225069537 SEE933032986298 Virchowstr. 5a 44263 Dortmund
372 Ochmann, Alexander Emil-Nensel-Straße 6 58675 Hemer 7,15 17.05.2021 EEG942485168328 SEE936539710526 Emil-Nensel-Str. 6 58675 Hemer
373 Einsiedel, Jörg Parkstr. 68 58675 Hemer 10 24.06.2021 EEG952968337684 SEE983971693696 Parkstr. 68 58675 Hemer
374 Landschaftsverband Westfalen-Lippe (LWL) Frönsberger Str. 71 58675 Hemer 27,28 30.07.2019 EEG980942994912 SEE931896553304 Frönsberger Str 71 58675 Hemer
375 Gamig, Armin Im Bockeloh 29B 58675 Hemer 4,44 27.12.2021 EEG946978998768 SEE970777878211 Im Bockeloh 29b 58675 Hemer
376 Koschinski, Markus Noldeweg 20 58675 Hemer 7,4 14.09.2021 EEG998263807040 SEE995319181840 Noldeweg 20 58675 Hemer
377 Nickel, Ingo Südweg 10 58675 Hemer 9,6 13.12.2021 EEG908470955731 SEE926366597537 Südweg 10 58675 Hemer
378 Severin, Björn Gaxberger Weg 8 58675 Hemer 8,12 02.10.2020 EEG929364801644 SEE961455987738 Gaxberger Weg 8 58675 Hemer
379 Horn, Andre Baumhof 5 58675 Hemer 10,73 04.02.2021 EEG908734661576 SEE982922598370 Baumhof 5 58675 Hemer
380 Heilmann, Michael Auf dem Kamp 15 58675 Hemer 12,4 21.12.2021 EEG940258533281 SEE956453852577 Auf dem Kamp 15 58675 Hemer
381 Stöber, Hermann Am Knick 4 58675 Hemer 9,75 05.11.2021 EEG998162577419 SEE995641244718 Am Knick 4 58675 Hemer
382 Burgio, Dennis Stormweg 3 58675 Hemer 11,55 12.01.2022 EEG940475441727 SEE902022676792 Stormweg 3 58675 Hemer
383 Becker, Thomas Gaxberger Weg 1 58675 Hemer 6,66 08.02.2022 EEG971474731120 SEE988525575077 Gaxberger Weg 1 58675 Hemer
384 Reimer, Elena Ringstr. 35 58675 Hemer 10,08 24.02.2022 EEG956829717721 SEE982668411360 Ringstr. 35 58675 Hemer
385 Schreiber, Martin Nieringser Weg 9 58675 Hemer 4 28.05.2008 EEG971537492890 SEE975537231343 Nieringser Weg 9 58675 Hemer
386 Grabowski, Helmut Widumstr. 6 58675 Hemer 9,75 17.12.2021 EEG972363491736 SEE923692964750 Widumstr. 6 58675 Hemer
387 Ostendorf, Kerstin Rottmecke 1 58675 Hemer 9,6 31.05.2013 EEG936093528483 SEE939334776896 Rottmecke 1 58675 Hemer
388 Keune, Gundula Ostfeldstr. 19 58675 Hemer 7,36 18.12.2013 EEG941612036783 SEE946180359968 Ostfeldstr. 19 58675 Hemer
389 Krause, Brunhild Ihmerter Str. 281 58675 Hemer 6 05.05.2014 EEG948450564638 SEE915186548829 Ihmerter Str. 281 58675 Hemer
390 Noga, Frederick u. Lena Am Habuch 49 58675 Hemer 3,71 09.01.2018 EEG955133371469 SEE988509614341 AmHabuch 49 58675 Hemer
391 Zimmermann, Waldemar Stübecker Weg 48 58675 Hemer 5,55 01.03.2022 EEG957702787435 SEE988892780845 Stübecker Weg 48 58675 Hemer
392 Eiser, Josef Unter dem Ufer 12 58675 Hemer 3,7 04.08.2021 EEG923515291452 SEE991494014119 Unter dem Ufer 12 58675 Hemer
393 Schnettler, Franz-Josef Burhahnstr. 22 58675 Hemer 8,88 22.04.2021 EEG985847993824 SEE966767227619 Burhahnstr. 22 58675 Hemer
394 Hofsäß, Florian Nikolai-Gubarew-Str. 7 58675 Hemer 10,23 28.06.2021 EEG927215922166 SEE946732121302 Nikolai-Gubarew-Str 7 58675 Hemer
395 Butcher, Edith Bodelschwinghstr. 22 58675 Hemer 5,92 24.09.2021 EEG915476044796 SEE957228792166 Bodelschwinghstr. 22 58675 Hemer
396 Maaß, Michael Am Urberg 8 58675 Hemer 6 08.02.2022 EEG941955605721 SEE928780162773 Am Urberg 8 58675 Hemer
397 Nixdorf, Martin Mendener Str. 64A 58675 Hemer 6,6 16.10.2020 EEG940117270364 SEE984989661950 Mendener Str. 64a 58675 Hemer
398 Keßeler, Kim Brockhauser Weg 85 58675 Hemer 8,64 03.03.2022 EEG908823888846 SEE974369187651 Brockhauser Weg 85 58675 Hemer
399 Felix, Robert Stettiner Str. 7 58675 Hemer 8,8 19.11.2021 EEG947216804582 SEE970567570332 Stettiner Str. 7 58675 Hemer
400 Schauerte, Jila und Bernd Kiefernweg 13 58675 Hemer 8,5 10.04.2021 EEG907797803848 SEE928487811837 Kiefernweg 13 58675 Hemer
401 da Costa, Nico Lange Wiese 20 58675 Hemer 9,72 06.04.2021 EEG957034133313 SEE925985235769 Unterer Nackenweg 5 58313 Herdecke
402 Wulff, Volker Ihmerterort 3 58675 Hemer 9,86 26.02.2021 EEG994905904078 SEE973089103545 Ihmerterort 3 58675 Hemer
403 Short, Matt Hans-Meyer-Str. 12 58675 Hemer 5,775 31.03.2021 EEG975292505734 SEE994170535120 Hans-Meyer-Str. 12 58675 Hemer
404 Schäfer, Alexander Hans-Meyer-Str. 24 58675 Hemer 9,24 20.04.2021 EEG987952885513 SEE957845984661 Hans-Meyer-Str. 24 58675 Hemer
405 Isenberg, Lothar Im Trichter 14 58675 Hemer 15,54 22.01.2022 EEG986088758111 SEE933295846667 Im Trichter 14 58675 Hemer
406 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
407 Teves, Friedrich-Wilhelm Am Vogelsang 30 58675 Hemer 8,14 11.03.2022 EEG930257599326 SEE988420001503 Am Vogelsang 30 58675 Hemer
408 Müller, Ingo Am Osterbrauck 14 58675 Hemer 8,5 08.04.2022 EEG982391375434 SEE919325789159 Am Osterbrauck 14 58675 Hemer
409 Köhler, Arnold Winkelstr. 5 58675 Hemer 5,18 16.03.2022 EEG911894199087 SEE979601310651 Winkelstr. 5 58675 Hemer
410 Gottwald, Christel Kapellenweg 7 58675 Hemer 4,44 30.03.2022 EEG986534397574 SEE969876969753 Kapellenweg 7 58675 Hemer
411 Barowsky, Michael Jübergstr. 1 58675 Hemer 7 09.03.2022 EEG991894477910 SEE935797273880 Jübergstr. 1 58675 Hemer
412 Rittinghaus, Gerd Bräuckerstr. 60 58675 Hemer 5,71 04.02.2022 EEG926020378861 SEE920263101583 Bräuckerstr. 60 58675 Hemer
413 Hiepel, Marcus In der Erborst 12A 58675 Hemer 21,5 18.03.2022 EEG912991755671 SEE933751091433 In der Erborst 12a 58675 Hemer
414 Mertn, Hardy Märkische Str. 165 58675 Hemer 10,36 16.03.2022 EEG910963240712 SEE944046979183 Märkische Str. 165a 58675 Hemer
415 Pelka, Christian Balver Weg 7A 58675 Hemer 3,3 13.03.2009 EEG928387833403 SEE948711066260 Balver Weg 7a 58675 Hemer
416 Angelika, Klimm Ennertsweg 46 58675 Hemer 12,58 01.06.2022 EEG901272292134 SEE927317118078 Ennertsweg 46 58675 Hemer
417 Hörstemeier, Annette Am Tannenkopf 1 58675 Hemer 4,75 29.04.2022 EEG949024551528 SEE985681913859 Am Tannenkopf 1 58675 Hemer
418 Credo, Claudia Am Bräucken 4 58675 Hemer 11,47 15.03.2022 EEG954539018589 SEE935030286738 Am Bräucken 4 58675 Hemer
419 Frohnert, Melanie und Roland Kapellenweg 14 58675 Hemer 9,75 12.05.2022 EEG923016385025 SEE973601951593 Kapellenweg 14 58675 Hemer
420 Penderok, Heike Am Ballo 54 58675 Hemer 11 02.06.2022 EEG956036719716 SEE946238050489 Am Ballo 54 58675 Hemer
421 Fesser, Ronny Am Tannenkopf 32A 58675 Hemer 4,44 26.04.2022 EEG915170393923 SEE941507144449 Am Tannenkopf 32a 58675 Hemer
422 Ott, Karl Bautenheide 1 58675 Hemer 11,78 08.04.2022 EEG986113697699 SEE991158175149 Bautenheide 1 58675 Hemer
423 Ender, Oliver Teichstr. 58B 58675 Hemer 9,92 17.02.2021 EEG934062580111 SEE914229739392 Teichstr. 58b 58675 Hemer
424 Alessio, Fabio Auf dem Kamp 31 58675 Hemer 9,72 27.06.2022 EEG926054516475 SEE973761890565 Auf dem Kamp 31 58675 Hemer
425 Steinmetzbetrieb, Peter Steffens Im Ohl 70 58675 Hemer 27 18.05.2022 EEG947049047545 SEE962178358447 Im Ohl 70 58675 Hemer
426 Bierhorn, Andreas Frönsberger Str. 9 58675 Hemer 5,92 28.03.2022 EEG982966857976 SEE915777343215 Frönsberger Str 9 58675 Hemer
427 Fülling, Anneliese Wilhelm-Brökelmann-Str. 11B 58675 Hemer 11,1 06.04.2022 EEG917855490033 SEE984753649962 Wilhelm-Brökelmann-Str. 11b 58675 Hemer
428 Stenzel, Rüdiger Am Jalohsweg 1 58675 Hemer 8,625 20.01.2022 EEG995521041987 SEE954715349759 Am Jalohsweg 1 58675 Hemer
429 Stenzel, Gunnar und Nicole Am Jalohsweg 25 58675 Hemer 9 25.01.2022 EEG921056323847 SEE921812261284 Am Jalohsweg 25 58675 Hemer
430 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
431 Wiesemann, Antje Oberlinweg 24 58675 Hemer 9,1 01.08.2022 EEG904792700264 SEE901084537720 Oberlinweg 24 58675 Hemer
432 Märkischer Kreis Iserlohner Str. 13 58675 Hemer 9,75 26.01.2022 EEG902803439363 SEE929521468550 Heedfelder Str. 45 58509 Lüdenscheid
433 Saloom, Carmen Ernst-Giese-Str. 3 58675 Hemer 12,37 05.07.2022 EEG995222752861 SEE951746338745 Ernst-Giese-Str. 3 58675 Hemer
434 Schäfer, Tim Iserlohner Str. 32 58675 Hemer 4 11.04.2022 EEG976138043250 SEE997997568739 Iserlohner Str. 32 58675 Hemer
435 Mickiewicz, Matthäus Josef Unter dem Asenberg 28 58675 Hemer 7,4 23.03.2022 EEG972269178694 SEE927040447520 Unter dem Asenberg 28 58675 Hemer
436 Koscielski, Jennifer Brockhauser Weg 61 58675 Hemer 9,62 28.03.2022 EEG909111593213 SEE933429874559 Brockhauser Weg 61 58675 Hemer
437 Becker, Silvia Lamferstr. 49 58675 Hemer 8,88 02.05.2022 EEG973576344185 SEE917158506608 Lamferstr. 49 58675 Hemer
438 Mitrou, Spiros Eserkamp 1A 58675 Hemer 5,32 02.06.2022 EEG909916547022 SEE910147656414 Eserkamp 1a 58675 Hemer
439 Kröll, Sebastian Am Tannenkopf 35 58675 Hemer 4,56 29.06.2022 EEG968588246169 SEE912285391738 Am Tannenkopf 35 58675 Hemer
440 Meyer, Robin Apricke 43A 58675 Hemer 13,32 23.03.2022 EEG996539995781 SEE981331439397 Apricke 43a 58675 Hemer
441 Rosenthal, Fred & Regina Hellestr. 34 58675 Hemer 15,2 01.08.2022 EEG932223892363 SEE977795378013 Hellestr. 34 58675 Hemer
442 Kruse, Kirsten Hedda An der Windfuhr 10 58675 Hemer 6,84 01.08.2022 EEG932223892363 SEE977795378013 Hellestr. 34 58675 Hemer
443 Märkischer Kreis Edmund-Weller-Str. 1 58675 Hemer 28,5 26.01.2022 EEG978617598022 SEE958337040261 Heedfelder Str. 45 58509 Lüdenscheid
444 Hacker, Philipp Ispei 5C 58675 Hemer 6,375 24.03.2022 EEG981761680079 SEE904359608026 Ispei 5c 58675 Hemer
445 Grothe, Frank Am Tannenkopf 31 58675 Hemer 7,5 13.09.2022 EEG935757475453 SEE914601246494 Am Tannenkopf 31 58675 Hemer
446 Becker, Marc Am Voßholz 22A 58675 Hemer 9,625 06.09.2022 EEG902239201640 SEE968571441755 Am Voßholz 22a 58675 Hemer
447 Szymanski, Viktor und Marion Am Sonnenhang 1 58675 Hemer 7,695 01.09.2022 EEG915289159960 SEE969785478483 Am Sonnenhang 1 58675 Hemer
448 Plattes, Leo Bussardweg 12 58675 Hemer 8 20.09.2022 EEG993274390871 SEE930282710376 Bussardweg 12 58675 Hemer
449 Pocher, Larry Stephanopel 58A 58675 Hemer 4,81 10.05.2022 EEG941459212425 SEE981577349139 Stephanopel 58a 58675 Hemer
450 Retzlaff, Dirk Brandeiche 6 58675 Hemer 9,6 17.01.2022 EEG917595588694 SEE931902079217 Brandeiche 6 58675 Hemer
451 Stracke, Christian Hüttenstr. 15 58675 Hemer 9,8 01.10.2022 EEG967818137437 SEE965285357815 Hauptstr. 17 58675 Hemer
452 Hölcke, Klaus Teichstr. 62 58675 Hemer 3,43 17.08.2018 EEG963012803567 SEE957190285291 Teichstr. 62 58675 Hemer
453 Westhoff, Michael Parkstr. 94 58675 Hemer 7,15 24.10.2022 EEG979750937082 SEE902198927131 Parkstr. 94 58675 Hemer
454 Idt, Alexander Hans-Meyer-Str. 38 58675 Hemer 8,8 08.07.2021 EEG910486044354 SEE971175873525 Hans-Meyer-Str. 38 58675 Hemer
455 Recker, Markus Am Voßholz 7 58675 Hemer 9,3 23.09.2022 EEG950338754550 SEE910843505412 Am Voßholz 7 58675 Hemer
456 Spalek, Tadäus Hardthöhe 2 58675 Hemer 9,2 04.10.2022 EEG992282055246 SEE901053895943 Hardthöhe 2 58675 Hemer
457 Ecker, David Am Sommerholt 6B 58675 Hemer 9,99 06.05.2022 EEG970150006217 SEE977515964403 Am Sommerholt 6b 58675 Hemer
458 Keßeler, Franz-Josef Am Erpel 6 58675 Hemer 4,2 02.11.2022 EEG988431989616 SEE918726248401 Am Erpel 6 58675 Hemer
459 Seifart, Nils Caller Str. 11 58675 Hemer 11,22 30.08.2022 EEG916976083490 SEE962066917596 Callerstr. 11 58675 Hemer
460 Ülger, Mevlüt Kirchstr. 2A 58675 Hemer 8,14 26.03.2021 EEG958712416148 SEE978917405686 Kirchstr. 2a 58675 Hemer
461 Steuerungstechnik Schönenberg Schottlandstr. 8 58675 Hemer 12,32 11.11.2022 EEG946891810642 SEE965763213695 Schottlandstr. 8 58675 Hemer
462 Ullrich, Thomas Neuer Weg 22 58675 Hemer 5,18 01.09.2021 EEG910751339215 SEE904595469269 Neuer Weg 22 58675 Hemer
463 Sinn / Kellner, Andrea / Jens Am Jalohsweg 19 58675 Hemer 9,66 19.10.2022 EEG942453451773 SEE913494627977 Am Jalohsweg 19 58675 Hemer
464 Hoffmann, Dustin Birkenweg 30 58675 Hemer 8,8 27.10.2022 EEG911133631040 SEE983340380714 Birkenweg 30 58675 Hemer
465 Manke, Björn Hasenwinkel 3 58675 Hemer 16,17 23.09.2022 EEG931887099323 SEE912750285845 Hasewinkel 3 58675 Hemer
466 Reisewitz, Ingolf Am Langeloh 32A 58675 Hemer 14,76 08.10.2022 EEG929156380371 SEE946531740988 Am Langeloh 32a 58675 Hemer
467 Peters, Sebastian Seilerstr. 1 58675 Hemer 15,39 06.09.2022 EEG960354842551 SEE924546238195 Seilerstr. 1 58675 Hemer
468 Losse, Victoria und Christian Am Jalohsweg 10 58675 Hemer 9 02.11.2022 EEG915212509060 SEE974738806886 Am Jalohsweg 10 58675 Hemer
469 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
470 Sepanian, Edwin Noldeweg 5 58675 Hemer 6,93 08.09.2022 EEG946379607924 SEE978868725864 Noldeweg 5 58675 Hemer
471 Linderhaus, Andreas Am Jalohsweg 5 58675 Hemer 6,08 25.04.2022 EEG963647276200 SEE936968685495 Am Jalohsweg 5 58675 Hemer
472 Voigt, Rüdiger Bussardweg 4 58675 Hemer 8,8 15.12.2022 EEG947840318080 SEE961646791342 Bussardweg 4 58675 Hemer
473 Kreugel/Klein, Heike/Wolfgang Weißdornstr. 6 58675 Hemer 16,56 11.06.2022 EEG963887990126 SEE912698920310 Weißdornstr. 6 58675 Hemer
474 Engelmann, Holger Am Eibenbrink 96 58675 Hemer 22,94 02.01.2023 EEG976616503191 SEE986378431281 Am Eibenbrink 96 58675 Hemer
475 Rübsam, Michael In den Klippen 9 58675 Hemer 9,7 25.05.2022 EEG997382513030 SEE935830089102 In den Klippen 9 58675 Hemer
476 Hagenkord, Peter Brockhauser Weg 87 58675 Hemer 5,6 18.11.2022 EEG972071102511 SEE918913612411 Brockhauser Weg 97 58675 Hemer
477 Rohrbach, Eugen An der Steinert 8 58675 Hemer 4,44 16.02.2022 EEG934186045589 EEG934186045589 An der Steinert 8 58675 Hemer
478 Eroglu, Yusuf De-Fries-Str. 20a 58675 Hemer 7,6 07.10.2022 EEG931557764469 SEE968935418324 De-Fries-Str. 20a 58675 Hemer
479 Fischer, Christa Im Hölken 21 58675 Hemer 5,4 23.07.2020 EEG974414735691 SEE955011526141 Im Hölken 21 58675 Hemer
480 Hoffmann, Karsten Lönsweg 14 58675 Hemer 9,75 23.12.2022 EEG973409499822 SEE905844379971 Lönsweg 14 58675 Hemer
481 Gutberger, Bernhard Noldeweg 19 58675 Hemer 5,74 07.11.2022 EEG941529589778 SEE989546794003 Noldeweg 19 58675 Hemer
482 Böse, Stefan Im Trichter 20A 58675 Hemer 7,6 16.12.2022 EEG995456591830 SEE947163700234 Im Trichter 20a 58675 Hemer
483 Kröll, Lars u. Sabrina Ringstr. 22 58675 Hemer 14,58 04.01.2023 EEG902022354645 SEE971290335298 Ringstr. 22 58675 Hemer
484 Abate, Marco Heinrich-Nuttebaum-Str. 1 58675 Hemer 10,2 01.12.2020 EEG967460340971 SEE915186366089 Heinrich-Nuttebaum-Str. 1 58675 Hemer
485 Bollweg, Frank Iserlohner Str. 14 58675 Hemer 4,5 19.01.2023 EEG922793759371 SEE930416229996 Iserlohner Str. 14 58675 Hemer
486 Woznicka, Michael Oesestr. 41A 58675 Hemer 7,2 19.12.2022 EEG913477035690 SEE990041724204 Oesestr. 41a 58675 Hemer
487 Fingerhut, Werner Stephanopel 77 58675 Hemer 10,125 13.12.2022 EEG906821640480 SEE992091207133 Stephanopel 77 58675 Hemer
488 Tomczyk, Markus Urbecker Str. 94 58675 Hemer 6 17.01.2023 EEG955249075374 SEE954045524741 Urbecker Str. 94 58675 Hemer
489 Twelker, Magrit Am Tannenkopf 35A 58675 Hemer 15,2 29.08.2022 EEG912989628338 SEE913835221512 Am Tannenkopf 35a 58675 Hemer
490 Schmitz, Joachim Ginsterweg 2 58675 Hemer 9,88 04.11.2022 EEG981874675320 SEE972610892767 Ginsterweg 2 58675 Hemer
491 Jonek, Adam Kuhbornstr. 14I 58675 Hemer 5,32 25.08.2022 EEG955302855370 SEE903354033642 Kuhbornstr. 14I 58675 Hemer
492 Caratzoulidis, Michael Kuhbornstr. 14A 58675 Hemer 9,12 28.10.2022 EEG981672745546 SEE986391012702 Kuhbornstr. 14a 58675 Hemer
493 Nasif, Mohanad Urbecker Str. 100 58675 Hemer 6,08 16.11.2022 EEG913599815590 SEE942187106703 Urbecker Str. 100 58675 Hemer
494 Kissing, Martina und Frank Klusensteiner Weg 20 58675 Hemer 10,06 10.03.2023 EEG961568627248 SEE984391226921 Klusensteiner Weg 20 58675 Hemer
495 Caputo, Giovanni An der Werthwiese 25 58675 Hemer 13,95 06.03.2023 EEG956530664758 SEE923065800616 An der Werthwiese 25 58675 Hemer
496 Rau, Bernd In der Erborst 4 58675 Hemer 9,75 22.02.2023 EEG958796790240 SEE902547244926 In der Erborst 4 58675 Hemer
497 Müller-Goldau, Werner Am Alten Dorfteich 4 58675 Hemer 4,56 25.01.2023 EEG906281074740 SEE995540853950 Am alten Dorfteich 4 58675 Hemer
498 Rabenschlag-Rödiger, Benjamin Dennis Am Brandenberg 7 58675 Hemer 11,4 13.02.2023 EEG965804888745 SEE973389690318 Am Brandenberg 7 58675 Hemer
499 Heimann, Sascha Widumstr. 3 58675 Hemer 11,2 07.03.2023 EEG977590847417 SEE957649694315 Widumstr. 3 58675 Hemer
500 Sonntag, Stefan Lange Wiese 32 58675 Hemer 9,62 07.03.2023 EEG900624591000 SEE950034246731 Lange Wiese 32 58675 Hemer
501 Gebhard / Kaemper, Marion / Siegfried Theo-Funccius-Str. 20A 58675 Hemer 9,25 24.11.2021 EEG901154181020 SEE958388879087 Theo-Funccius-Str. 20a 58675 Hemer
502 Schepper, Wilhelm Mozartstr. 4 58675 Hemer 11,4 08.02.2023 EEG928636511380 SEE916422730787 Mozartstr. 4 58675 Hemer
503 Hoffmann, Heiko Westendorfstr. 44a 58675 Hemer 8,36 24.02.2023 EEG984593768618 SEE988373626082 Westendorfstr. 44a 58675 Hemer
504 Grüneberg, Carsten Oberlinweg 9A 58675 Hemer 10,6 31.01.2023 EEG903799105119 SEE979893733893 Oberlinweg 9a 58675 Hemer
505 Schreiber, Raimund Haarweg 57 58675 Hemer 7,6 28.02.2023 EEG912246122081 SEE965983946311 Haarweg 57 58675 Hemer
506 Gosch, Bianca und Ralf Hagedorn 16 58675 Hemer 14,58 24.11.2022 EEG948246885992 SEE975413793217 Hagedorn 16 58675 Hemer
507 Gonschorek, Jens Am Tannenkopf 19 58675 Hemer 12 31.03.2023 EEG955624378816 SEE923435022716 Am Tannenkopf 19 58675 Hemer
508 Kramer, Michael Friedensstr. 12 58675 Hemer 7,14 04.04.2023 EEG925494253766 SEE972612641400 Friedensstr. 12 58675 Hemer
509 Lellek, Damian Gaxberger Weg 28 58675 Hemer 12,555 21.04.2023 EEG966293011706 SEE913714809749 Gaxberger Weg 28 58675 Hemer
510 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
511 Krause, Erwin Lenbachstr. 15 58675 Hemer 8,4 04.04.2023 EEG938782037337 SEE926550793271 Lenbachstr. 15 58675 Hemer
512 Pott, Matthias und Regina Lenbachstr. 19 58675 Hemer 9,5 03.03.2023 EEG963151597242 SEE905130762784 Lenbachstr. 19 58675 Hemer
513 Grothe, Frank Am Damm 1 58675 Hemer 8,8 31.03.2023 EEG907579617403 SEE957506967026 Am Damm 1 58675 Hemer
514 Pampel, Walter Am Potthofe 1 58675 Hemer 9,96 01.03.2023 EEG912744934513 SEE926140335140 Am Potthofe 1 58675 Hemer
515 Fuchs, Daniel Mühlackerweg 2 58675 Hemer 8,1 27.01.2023 EEG938228783316 SEE970042701855 Mühlackerweg 2 58675 Hemer
516 Bode, David Auf dem Uhlenhof 7 58675 Hemer 6,66 24.01.2023 EEG928917592893 SEE901447135341 Auf dem Uhlenhof 7 58675 Hemer
517 Klein, Almut Im Bockeloh 28 58675 Hemer 5,67 31.01.2023 EEG926481280970 SEE930461405154 Im Bockeloh 28 58675 Hemer
518 Denso, Dennis Am Langeloh 33 58675 Hemer 8,64 11.04.2023 EEG916098154931 SEE991644336139 Am Langeloh 33 58675 Hemer
519 Ober-Westendorf, Robert Im Loh 3 58675 Hemer 9,94 28.09.2022 EEG996025373789 SEE994542817281 Im Loh 3 58675 Hemer
520 Hilbert, Thilo Urbecker Str. 90A 58675 Hemer 6,48 09.05.2023 EEG998534176530 SEE929677136754 Urbecker Str. 90a 58675 Hemer
521 Ritterswürde, Bernd Hardthöhe 5 58675 Hemer 8,505 30.03.2023 EEG931602145250 SEE910332841885 Hardthöhe 5 58675 Hemer
522 Kischa, Christoph Am Bemberg 8 58675 Hemer 7,92 15.06.2021 EEG981060611507 SEE951640545874 Am Bemberg 8 58675 Hemer
523 Gottwich, Vadim Winkelstr. 11 58675 Hemer 7,4 27.10.2021 EEG917378501629 SEE908662496912 Winkelstr. 11 58675 Hemer
524 Holtewert, Thomas Urbecker Str. 86A 58675 Hemer 9,75 07.02.2023 EEG959941097306 SEE980246775330 Urbecker Str. 86a 58675 Hemer
525 Hermens, Edgar Callerstr. 2 58675 Hemer 9,75 19.04.2021 EEG945818319459 SEE932693225234 Callerstr. 2 58675 Hemer
526 Römer, Susanne Dulohstr. 23 58675 Hemer 6,48 30.05.2023 EEG949289959015 SEE990597022908 Dulohstr. 23 58675 Hemer
527 Turowski, Dennis Stephanopeler Str. 61 58675 Hemer 11,1 12.04.2023 EEG992810149461 SEE986922934923 Stephanopler S 61 58675 Hemer
528 Grabowski, Marcin Im Eichholz 2A 58675 Hemer 10 22.05.2023 EEG944996675272 SEE953250544186 Im Eichholz 2a 58675 Hemer
529 Bergerow, Ralf Teichstr. 54A 58675 Hemer 2,4 04.04.2000 EEG908404382671 SEE939884829165 Teichstr. 54a 58675 Hemer
530 de Vries, Gunter Urbecker Str. 86 58675 Hemer 9 18.04.2023 EEG904181037803 SEE964571985541 Urbecker Str. 86 58675 Hemer
531 Ferguson, Sven Balver Weg 25B 58675 Hemer 6,75 22.03.2023 EEG984944431277 SEE905037300379 Balver Weg 25b 58675 Hemer
532 Schwarzpaul, Günther Arndtstr. 19 58675 Hemer 5,4 07.05.2023 EEG969090373336 SEE970454019623 Arndtstr. 19 58675 Hemer
533 Franke Kanaltechnik GmbH Walesstr. 3 58675 Hemer 16,59 01.02.2023 EEG963000507767 SEE917031238848 Walesstr. 3 58675 Hemer
534 Nolte, Petra Stemmessiepener Weg 2 58675 Hemer 5,625 02.02.2023 EEG954509941749 SEE930844041498 Stemmessiepener Weg 2 58675 Hemer
535 Kraushaar, Andreas Am Tannenkopf 39B 58675 Hemer 8,5 30.08.2022 EEG971609226712 SEE954189536686 Am Tannenkopf 39b 58675 Hemer
536 Danehl, Julian Am Voßholz 9a 58675 Hemer 13,53 15.03.2023 EEG942700946205 SEE946858881753 Am Voßholz 9a 58675 Hemer
537 Kirchner, Marcel Landhauser Str. 86 58675 Hemer 3 01.07.2023 EEG930677636205 SEE987281878491 Landhauser Str. 86 58675 Hemer
538 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
539 Weckauf, Michael Gerd Im Siegeloh 29A 58675 Hemer 12,15 22.03.2023 EEG900046445806 SEE948064598623 Im Siegeloh 29a 58675 Hemer
540 Foth, Reinhard Balver Weg 13 58675 Hemer 10,2 25.05.2023 EEG905023896480 SEE913071792463 Balver Weg 13 58675 Hemer
541 Steinbeck, Wilfried Grüner Brink 4 58675 Hemer 10,125 05.04.2023 EEG984927414655 SEE979507160718 Grüner Brink 4 58675 Hemer
542 Agapenko, Michael Am Eibenbrink 30 58675 Hemer 7,5 24.05.2023 EEG949149305099 SEE918901106069 Am Eibenbrink 30 58675 Hemer
543 Lorentz, Carsten Kuhbornstr. 14D 58675 Hemer 4,1 26.04.2023 EEG927675661957 SEE984751882460 Kuhbornstr. 14d 58675 Hemer
544 Alberts, Heide In den Weiden 8 58675 Hemer 9,5 10.03.2023 EEG948615089631 SEE918352326993 In den Weiden 8 58675 Hemer
545 Bartholdt, Heike Gartenstr. 31A 58675 Hemer 4,125 11.05.2023 EEG953345701104 SEE954933678594 Gartenstr. 31a 58675 Hemer
546 Althoff, Andrea Arndtstr. 23 58675 Hemer 11,46 07.07.2023 EEG946078906205 SEE983856554647 Arndtstr. 23 58675 Hemer
547 Syre, Tobias Am Voßholz 36B 58675 Hemer 9,02 14.04.2023 EEG927222997355 SEE911854979834 Am Voßholz 36b 58675 Hemer
548 Goeseke, Björn Heinrich-Nuttebaum-Str. 9 58675 Hemer 6,48 28.04.2023 EEG944849925226 SEE992160448757 Heinrich-Nuttebaum-Str. 9 58675 Hemer
549 Junkernheinrich-Bleicher, Rainer Am Langeloh 18B 58675 Hemer 5,25 15.06.2023 EEG953922159601 SEE980883278324 Am Langeloh 18b 58675 Hemer
550 Franke Kanaltechnik GmbH Unter dem Hohenstein 30 58675 Hemer 15 17.04.2023 EEG928696488516 SEE903937142693 Walesstr. 3 58675 Hemer
551 Brand, Peter Am Sommerholt 6e 58675 Hemer 7,2 15.03.2023 EEG989078045390 SEE982366061966 Am Sommerholt 6e 58675 Hemer
552 Haas / Schweizer, Jürgen / Svenja Am Tannenkopf 38a 58675 Hemer 9,84 29.06.2023 EEG950971739556 SEE989489967571 Am Tannenkopf 38a 58675 Hemer
553 Tarach, Jürgen Am Sommerholt 8 58675 Hemer 5,95 21.07.2023 EEG932163801838 SEE947075880758 Am Sommerholt 8 58675 Hemer
554 Schatz, Rudolf Piepers Garten 1 58675 Hemer 9,315 26.05.2023 EEG995441489876 SEE988946382506 Piepers Garten 1 58675 Hemer
555 Schutzeigel, Nils Im Bockeloh 23 58675 Hemer 2,5 21.04.2023 EEG994979173066 SEE901371129782 Im Bockeloh 23 58675 Hemer
556 Ott, Tobias Teichstr. 54B 58675 Hemer 11,06 16.06.2023 EEG954691051141 SEE990503810490 Teichstr. 54b 58675 Hemer
557 Schmidt, Cornelia und Sascha Auf der Hecke 28 58675 Hemer 17,325 14.06.2023 EEG905773531709 SEE955985886074 Auf der Hecke 28 58675 Hemer
558 Werner, Martin Urbecker Str. 90B 58675 Hemer 10,53 27.06.2023 EEG947440515193 SEE929649590782 Urbecker Str. 90b 58675 Hemer
559 Plauschin, Martina Ennertsweg 54 58675 Hemer 5,84 31.01.2023 EEG924925462203 SEE933408261899 Ennertsweg 54 58675 Hemer
560 Söte, Dirk Westendorfstr. 48A 58675 Hemer 5,84 25.11.2022 EEG906732381724 SEE988352778771 Westendorfstr. 48a 58675 Hemer
561 Schäfer, Nelly Grüner Brink 10 58675 Hemer 8,2 25.05.2023 EEG948090101798 SEE937807604561 Grüner Brink 10 58675 Hemer
562 Bruyndonckx, Marcel und Rebecca Am Jalohsweg 14 58675 Hemer 10 07.03.2023 EEG914481130982 SEE970398933863 Am Jalohsweg 14 58675 Hemer
563 Kaltenbach, Norbert Rembrandtstr. 20 58675 Hemer 2,4 01.07.2023 EEG945911459991 SEE992749757188 Rembrandtstr 20 58675 Hemer
564 Schönenberg, Gerd Birkenweg 84A 58675 Hemer 7,315 25.04.2023 EEG962013257133 SEE955304402411 Birkenweg 84a 58675 Hemer
565 Schreyer, Lars Mesterscheid 4 58675 Hemer 38,475 11.05.2023 EEG948725666678 SEE918636365229 Mesterscheid 4 58675 Hemer
566 Frank, Harry Hans-Meyer-Str. 13 58675 Hemer 10,25 31.05.2023 EEG917079905030 SEE976861043053 Hans-Meyer-Str. 13 58675 Hemer
567 Wolff, Carsten Albert-Schweitzer-Str. 2 58675 Hemer 12,54 02.06.2023 EEG911202469581 SEE979200088593 Albert-Schweitzer-Str. 2 58675 Hemer
568 Martin, Kurt Am Brandenberg 4 58675 Hemer 8 22.06.2023 EEG970648304214 SEE926760528052 Am Brandenberg 4 58675 Hemer
569 Streber, Frank Albert-Schweitzer-Str. 5 58675 Hemer 10,935 12.06.2023 EEG920404937408 SEE978799260779 Albert-Schweitzer-Str. 5 58675 Hemer
570 Haacke, Michael Haarweg 38 58675 Hemer 8,25 26.06.2023 EEG909095571078 SEE994774844031 Haarweg 38 58675 Hemer
571 Ernst, Volker und Ilona Am Sommerholt 8A 58675 Hemer 6,375 19.07.2023 EEG916660376440 SEE925672847619 Am Sommerholt 8a 58675 Hemer
572 Mühlengang 6 Mühlengang 6 58675 Hemer 5,2 01.08.2021 EEG910995811638 SEE904004341346 Mühlengang 6 58675 Hemer
573 von der Heyde, Andreas Dulohstr. 22 58675 Hemer 6 27.07.2023 EEG942483663269 SEE966307151275 Dulohstr. 22 58675 Hemer
574 Nagel, Susanne Oesestr. 3 58675 Hemer 1,6 12.04.2023 EEG940613506011 SEE902779287777 Oesestr. 3 58675 Hemer
575 Gehrmann, Simone und Thomas Parkstr. 115 58675 Hemer 9,75 06.03.2023 EEG973990246164 SEE984887863203 Parkstr. 115 58675 Hemer
576 Todea, Paul Am Damm 1C 58675 Hemer 10,8 19.06.2023 EEG903625794418 SEE954907246408 Am Damm 1c 58675 Hemer
577 Grau, Karsten Mühlackerweg 6 58675 Hemer 9,6 16.06.2023 EEG956936555285 SEE921231365174 Mühlackerweg 6 58675 Hemer
578 Hesmert, Daniel Am Vogelsang 9 58675 Hemer 7,6 30.06.2023 EEG989638219681 SEE992275352857 Am Vogelsang 9 58675 Hemer
579 Pospischil, Stefan Ringstr. 47 58675 Hemer 11,18 11.08.2023 EEG931356913198 SEE977156574443 Ringstr. 47 58675 Hemer
580 Liepach, Barbara Kuhbornstr. 1 58675 Hemer 7,98 19.01.2023 EEG985160015821 SEE911056288864 Kuhbornstr. 1 58675 Hemer
581 Rasewerg, Rolf Glüsingweg 8 58675 Hemer 6,3 13.03.2023 EEG971085976620 SEE968725602872 Glüsingweg 8 58675 Hemer
582 Schulte, Annette u. Michael Urbecker Str. 94B 58675 Hemer 8 02.05.2023 EEG917608174036 SEE968784492643 Urbecker Str. 94b 58675 Hemer
583 Hücking, Heinz Jörg Urbecker Str. 98 58675 Hemer 9,2 11.01.2023 EEG994244450854 SEE911454232216 Urbecker Str. 98 58675 Hemer
584 Junge, Tobias Hagedorn 14 58675 Hemer 12,775 31.01.2023 EEG987454569133 SEE911838598082 Hagedorn 14 58675 Hemer
585 Marquardt, Christian u. Nina Büttmecker Weg 11 58675 Hemer 8,8 31.01.2023 EEG993941634949 SEE924659144239 Büttmecker Weg 11 58675 Hemer
586 Elter, Alina Kiefernweg 19 58675 Hemer 9,75 07.06.2023 EEG908073420483 SEE979226164066 Kiefernweg 19 58675 Hemer
587 Johannmeier, Yannick Frönsberger Str. 43 58675 Hemer 9,8 11.08.2023 EEG992585346164 SEE998519257537 Frönsberger Str 43 58675 Hemer
588 Riehle, Björn Apricke 24A 58675 Hemer 8,1 15.08.2023 EEG916379953642 SEE938717789799 Apricke 24a 58675 Hemer
589 Junklewitz, Alfons Meisenweg 4c 58675 Hemer 6,8 31.05.2023 EEG964157490285 SEE983130386810 Meisenweg 4c 58675 Hemer
590 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
591 Keim, Ernst Gaxberger Weg 14C 58675 Hemer 10,8 20.07.2023 EEG935585002937 SEE951533294995 Gaxberger Weg 14c 58675 Hemer
592 Schneider, Stefan Neuer Weg 28B 58675 Hemer 10,5 05.05.2023 EEG921200550945 SEE904865433105 Neuer Weg 28b 58675 Hemer
593 Kuhn, Björn Parkstr. 82C 58675 Hemer 5,7 11.08.2023 EEG931160494630 SEE949841303089 Parkstr. 82c 58675 Hemer
594 Müsse, Oliver Weißdornstr. 3 58675 Hemer 8,58 02.03.2023 EEG938069464085 SEE901738432104 Weißdornstr. 3 58675 Hemer
595 Lourenco, Yaminah & Nuno Gaxberger Weg 32 58675 Hemer 9 08.04.2022 EEG972359443213 SEE958557094723 Gaxberger Weg 32 58675 Hemer
596 Keil, Ulrich Am Ballo 51 58675 Hemer 7,38 23.08.2023 EEG948562862202 SEE937699123447 Am Ballo 51 58675 Hemer
597 Rademacher, Dirk Im Eichholz 27 58675 Hemer 10,5 21.08.2023 EEG962674197199 SEE977537761578 Im Eichholz 27 58675 Hemer
598 Frenzel, Matthias Ihmerter Str. 212a 58675 Hemer 3,04 30.06.2023 EEG910925652027 SEE963428152822 Ihmerter Str. 212a 58675 Hemer
599 Schruth & Ledergerber, Sören & Janine Ahornweg 15a 58675 Hemer 8,2 23.08.2023 EEG906675369803 SEE978137892082 Iserlohner Str. 17 58675 Hemer
600 Schweinforth, Thomas Schützenstr. 18 58675 Hemer 3,6 06.07.2023 EEG967543001768 SEE961982134940 Schützenstr. 18 58675 Hemer
601 Neumann, Dirk Gaxberger Weg 30 58675 Hemer 9,6 03.04.2023 EEG931331126704 SEE905725848763 Gaxberger Weg 30 58675 Hemer
602 Blichmann, Frank Auf dem Brauck 13 58675 Hemer 9,6 23.08.2023 EEG908366365972 SEE932433473093 Auf dem Brauck 13 58675 Hemer
603 Gluth, Mirco Ringstr. 31 58675 Hemer 6,8 24.06.2023 EEG955828538931 SEE915791571489 Ringstr. 31 58675 Hemer
604 Pocher, Larry Hardthöhe 1 58675 Hemer 8,625 28.08.2023 EEG966209164106 SEE964033306617 Stephanopel 58a 58675 Hemer
605 Huck, Lothar Fromersbert 9A 58675 Hemer 8,3 23.08.2023 EEG935722719124 SEE907190542290 Fromersbert 9a 58675 Hemer
606 Thompson, Frederick Stephen Arndtstr. 10 58675 Hemer 10 18.09.2023 EEG918014628205 SEE939730203323 Arndtstr. 10 58675 Hemer
607 Franke, Jörg Am Langeloh 24 58675 Hemer 9,68 31.07.2023 EEG945016460045 SEE945514477378 Am Langeloh 24 58675 Hemer
608 Sauerland, Jan Eichenhohl 6 58675 Hemer 11 20.04.2023 EEG976554113872 SEE927397377594 Eichenhohl 6 58675 Hemer
609 Schulte, Jörg Heinrich-Goswin-Str. 2 58675 Hemer 14,4 03.08.2023 EEG904909452741 SEE943033846958 Heinrich-Goswin-Str. 2 58675 Hemer
610 Schulenburg, Silke Klusensteiner Weg 21 58675 Hemer 5,32 03.08.2023 EEG932089729391 SEE980021461946 Klusensteiner Weg 21 58675 Hemer
611 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
612 Gödde, Hendrick Am Dasbrauck 1 58675 Hemer 5 08.09.2023 EEG980040206184 SEE974116710262 Am Dasbrauck 1 58675 Hemer
613 von Schwerin, Lutz Gaxberger Weg 36 58675 Hemer 9,96 15.03.2023 EEG910648150671 SEE982368664004 Gaxberger Weg 36 58675 Hemer
614 Nardone, Giuseppe Hembecker Weg 10 58675 Hemer 8,4 28.09.2023 EEG912239054405 SEE939629264428 Hembecker Weg 10 58675 Hemer
615 Steinberg, Ingo Josef-Winckler-Weg 4 58675 Hemer 8 16.02.2023 EEG958726081387 SEE900097732962 Josef-Wickler-Weg 4 58675 Hemer
616 Möser, Peter Von-Eichendorff-Weg 7 58675 Hemer 10,25 18.08.2023 EEG999233704840 SEE991916196409 Von-Eichendorff-Weg 7 58675 Hemer
617 Voß, David Am Voßholz 1 58675 Hemer 12,15 19.09.2023 EEG998445426625 SEE961425690224 Am Voßholz 1 58675 Hemer
618 Bäcker, Jörg Hembecker Weg 4 58675 Hemer 6,15 23.05.2023 EEG967101737016 SEE909911961885 Hembecker Weg 4 58675 Hemer
619 Barth, Maximilian Auf dem Brauck 32A 58675 Hemer 12,325 13.10.2023 EEG959105015351 SEE971965184886 Auf dem Brauck 32a 58675 Hemer
620 Lünenschloß, Moritz Am Sonnenhang 23A 58675 Hemer 4,94 30.07.2023 EEG994379833904 SEE959811592382 Am Sonnenhang 23a 58675 Hemer
621 Maslonka, Günter Friedrich-Wern-Str. 4 58675 Hemer 6,32 19.06.2023 EEG958705205827 SEE967492466786 Friedrich-Wern-Str. 4 58675 Hemer
622 Hufnagel, Tobias Am Jalohsweg 13 58675 Hemer 9,24 23.10.2023 EEG987734147174 SEE984504249229 Am Jalohsweg 14 58675 Hemer
623 Rostek, Björn Am Tyrol 21 58675 Hemer 10,5 02.10.2023 EEG927570544294 SEE993935809780 Am Tyrol 21 58675 Hemer
624 Bergmann, Nick Ginsterweg 20 58675 Hemer 11,7 08.08.2023 EEG915615002007 SEE967109943754 Ginsterweg 20 58675 Hemer
625 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
626 Brocca, Dennis Am Schlehdorn 8 58675 Hemer 12,3 17.04.2023 EEG991089907529 SEE935137801148 Am Schlehdorn 8 58675 Hemer
627 Dahm, Rainer Dulohstr. 16 58675 Hemer 5,33 11.10.2023 EEG913976389973 SEE915968166630 Dulohstr. 16 58675 Hemer
628 Viehoff, Sascha Karl-Bröger-Weg 11 58675 Hemer 12,15 15.11.2023 EEG913603617233 SEE909344465011 Karl-Bröger-Weg 11 58675 Hemer
629 Niederhäuser, Klaus Droste-Hülshoff-Weg 49 58675 Hemer 4,2 20.10.2023 EEG982444068122 SEE980627278016 Droste-Hülshoff-Weg 49 58675 Hemer
630 Kruschka, Uwe Westendorfstr. 48 58675 Hemer 8,61 16.11.2023 EEG940058607786 SEE939494976006 Westendorfstr. 48 58675 Hemer
631 Barth, Manfred Ihmerter Mühle 2 58675 Hemer 18,275 01.12.2023 EEG976292691533 SEE977425476140 Ihmerter Mühle 2 58675 Hemer
632 Hepfner, Peter Am Schieferbruch 6 58675 Hemer 3,06 30.10.2001 EEG982680828726 SEE908481636704 Am Schieferbruch 6 58675 Hemer
633 Veronika, Metta Breddestr. 23 58675 Hemer 10,66 26.09.2023 EEG946237474774 SEE902350140293 Breddestr. 23 58675 Hemer
634 Weller, Detlef Am Sonnenhang 28 58675 Hemer 12,3 27.11.2023 EEG966811341469 SEE999936229459 Werftstr. 14 49733 Haren
635 Frenzel, Stefan Bembergstr. 27B 58675 Hemer 10,8 25.10.2023 EEG911989821275 SEE966647442682 Bembergstr. 27b 58675 Hemer
636 Paszczela, Lukasz Goyastr. 2 58675 Hemer 9,84 14.08.2023 EEG934227688713 SEE965124406421 Goyastr. 2 58675 Hemer
637 Linnemann, Susanne + Meinolf Gaxberger Weg 6C 58675 Hemer 8,925 04.10.2023 EEG909159175037 SEE961480556169 Gaxberger Weg 6c 58675 Hemer
638 Pfeiffer, Petra August-Hermann-Francke-Weg 1 58675 Hemer 5,59 16.11.2023 EEG966486211531 EEG966486211531 August-Hermann-Francke-Weg 1 58675 Hemer
639 Heuselein, Torsten Ahornweg 13A 58675 Hemer 8,25 06.03.2023 EEG935513649609 SEE940197713553 Ahornweg 13a 58675 Hemer
640 Klein, Christian Piepers Garten 14 58675 Hemer 5,81 07.09.2023 EEG960401533241 SEE947814149412 Piepers Garten 14 58675 Hemer
641 Klein Grundstücksgemeinschaft GbR Kanadastr. 2 58675 Hemer 99,63 06.11.2023 EEG992596789134 SEE924154548204 Kanadastr. 2 58675 Hemer
642 Kemmer, Hans-Peter Brockhauser Weg 39 58675 Hemer 6,3 12.09.2023 EEG938348189999 SEE962111586234 Brockhauser Weg 39 58675 Hemer
643 Spieckermann, Karin Büttmecker Weg 3 58675 Hemer 10,2 30.10.2023 EEG960941820191 SEE966293110232 Büttmecker Weg 3 58675 Hemer
644 Schneider, Tim Dulohstr. 43 58675 Hemer 14,45 11.10.2023 EEG998088767918 SEE999267263245 Dulohstr. 43 58675 Hemer
645 Zmuda, Marius Im Loh 24 58675 Hemer 6,4 15.05.2023 EEG919066050266 SEE985163153070 Im Loh 24 58675 Hemer
646 Fiefeck, Benjamin Auf dem Brauck 26D 58675 Hemer 8,8 13.10.2023 EEG951561155657 SEE949386368123 Auf dem Brauck 26d 58675 Hemer
647 Denniger, Ulrich Am Bräucken 14 58675 Hemer 5,85 07.08.2023 EEG918748849174 SEE965250590278 Am Bräucken 14 58675 Hemer
648 Schmalz, Ronald Hönnetalstr. 280 58675 Hemer 5,6 13.10.2023 EEG944574133026 SEE972663978722 Hönnetalstr. 280 58675 Hemer
649 Mispagel, Inga Im Langenbruch 10 58675 Hemer 25,2 04.11.2023 EEG950167612007 SEE985124292114 Im Langenbruch 10 58675 Hemer
650 Grote, Ralf Unter dem Asenberg 24 58675 Hemer 7,4 28.04.2023 EEG995901584660 SEE944853874718 Unter dem Asenberg 24 58675 Hemer
651 Bornfelder, Sascha In der Gähre 8 58675 Hemer 8,2 01.01.2024 EEG906649027371 SEE925209170548 In der Gähre 8 58675 Hemer
652 Siegfried, Manfred Gaxberger Weg 7 58675 Hemer 1,5 15.06.2023
653 Franke, Til Brockhauser Weg 44 58675 Hemer 7,9 02.01.2024 EEG984263305204 SEE996949387954 Brockhauserweg 44 58675 Hemer
654 Ebberg, Sylvia Bäingser Weg 49 58675 Hemer 10,08 20.12.2023 EEG981697638212 SEE927789927635 Bäingser Weg 49 58675 Hemer
655 Kahlert, Dieter Heuweg 2 58675 Hemer 9,62 19.07.2023 EEG945361913173 SEE940836980841 Heuweg 2 58675 Hemer
656 Treuke, Mathias Am Eibenbrink 22 58675 Hemer 8,8 30.11.2023 EEG952754574163 SEE995061110617 Am Eibenbrink 22 58675 Hemer
657 Arends, Jens Apricke 24B 58675 Hemer 6,8 10.10.2023 EEG965626598334 SEE928239083703 Apricke 24b 58675 Hemer
658 Emmerich, Marcus & Katrin An der Werthwiese 7 58675 Hemer 12,15 03.01.2024 EEG930351512092 SEE913837202021 An der Werthwiese 7 58675 Hemer
659 Berger, Udo Gerrit-Engelke-Weg 6 58675 Hemer 6,54 01.09.2023 EEG938167754408 SEE953745281336 Gerrit-Engelke-Weg 6 58675 Hemer
660 Siegfried-de Jesus, Sónia Gaxberger Weg 5A 58675 Hemer 9,03 10.11.2023 EEG938846498159 SEE931005349347 Gaxberger Weg 5a 58675 Hemer
661 Maiwurm, Michael Am Heßufer 42 58675 Hemer 12,3 20.10.2023 EEG951067402798 SEE984551069979 Am Heßufer 42 58675 Hemer
662 Küter, Stefan Parkstr. 12 58675 Hemer 9,24 19.12.2023 EEG912624853569 SEE943739060900 Parkstr. 12 58675 Hemer
663 Wrona, Roman Gerrit-Engelke-Weg 10A 58675 Hemer 9,55 02.08.2023 EEG930535102064 SEE980391969745 Gerrit-Engelke-Weg 10a 58675 Hemer
664 Schröder, Klaus Am Langeloh 20 D 58675 Hemer 5,6 09.01.2024 EEG974599194245 SEE914681880120 Am Langeloh 20d 58675 Hemer
665 Arndt, Erich Gaxberger Weg 12 58675 Hemer 6,56 22.08.2023 EEG950341346131 SEE935875339392 Gaxberger Weg 12 58675 Hemer
666 Kuß, Michael Am Hillebach 24 58675 Hemer 2,49 12.08.2023 EEG945798525925 SEE977318552302 Am Hillebach 24 58675 Hemer
667 Kuß, Michael Am Hillebach 24 58675 Hemer 2,49 31.08.2023 EEG995835952672 SEE935572554364 Am Hillebach 24 58675 Hemer
668 Hülsemeyer, Ralf Baumhof 7 58675 Hemer 9,75 14.09.2023 EEG983313693964 SEE926206016907 Baumhof 7 58675 Hemer
669 Gross, Katharina & Igor Am Tannenkopf 26A 58675 Hemer 8,1 18.07.2023 EEG912158466068 SEE998571174353 Am Tannenkopf 26a 58675 Hemer
670 Schröder, Christiane & Thomas Felsenmeerstr. 13 58675 Hemer 1,72 17.10.2023 EEG967731621341 SEE937472418616 Felsenmeerstr. 13 58675 Hemer
671 Schulte, Bettina u. Joachim Weißdornstr. 2 58675 Hemer 11,34 10.01.2024 EEG939548368894 SEE950933893067 Weißdornstr. 2 58675 Hemer
672 Schneider, Robin Caller Str. 5 58675 Hemer 7,6 16.01.2024 EEG994878715176 SEE933506198660 Caller Str. 5 58675 Hemer
673 Weifenbach, Jan Wiemer Pfad 7 58675 Hemer 9,57 18.01.2024 EEG973191983950 SEE982636340548 Wiemer Pfad 7 58675 Hemer
674 Lingenberg, Heiko Von-Wrede-Str. 15 58675 Hemer 10,66 14.08.2023 EEG908717182401 SEE989230244883 Von-Wrede-Str. 15 58675 Hemer
675 Tetzlaff, Thomas Am Langeloh 40 58675 Hemer 9,6 06.12.2022 EEG945478304963 SEE961915848364 Am Langeloh 40 58675 Hemer
676 Marquardt, Stefan Am Branddorn 8 58675 Hemer 1,6 15.09.2023 EEG910282609665 SEE935478899903 Am Branddorn 8 58675 Hemer
677 Dickel, Michael Auf dem Brauck 44 58675 Hemer 10 30.11.2023 EEG965720596014 SEE970413359920 Auf dem Brauck 44 58675 Hemer
678 Fries, Wilhelm Unter dem Asenberg 38 58675 Hemer 10,32 26.01.2024 EEG941284101710 SEE951668814419 Unter dem Asenberg 38 58675 Hemer
679 Siedler, Jürgen Am Deinsberg 4 58675 Hemer 18,48 20.09.2023 EEG925266573146 SEE983452061839 Am Deinsberg 4 58675 Hemer
680 Hübenthal, Christoph E. Ostfeldstr. 14A 58675 Hemer 8,3 17.10.2023 EEG923219671574 SEE998536641722 Ostfeldstr. 14a 58675 Hemer
681 Holve, Jan Westendorfstr. 35 58675 Hemer 7,9 06.06.2023 EEG991325439074 SEE942937977263 Westendorfstr. 35 58675 Hemer
682 Falk, Helmut Dorfstr. 37 58675 Hemer 2,4 02.11.2023 EEG943204622978 SEE970183328058 Dorfstr. 37 58675 Hemer
683 Falk, Monika Dorfstr. 37 58675 Hemer 2,4 02.11.2023 EEG990950439213 SEE924881375364 Dorfstr. 37 58675 Hemer
684 Hesse, Diana Am Oelbusch 12A 58675 Hemer 7,56 16.12.2023 EEG947448519049 SEE977302658706 Am Oelbusch 12a 58675 Hemer
685 Zielinski, Christoph Lange Wiese 15 58675 Hemer 10,625 22.11.2023 EEG931118762842 SEE914628657525 Lange Wiese 15 58675 Hemer
686 Schüler, Sebastian Lange Wiese 5 58675 Hemer 13,175 08.02.2024 EEG935339123741 SEE965404436117 Lange Wiese 5 58675 Hemer
687 Isildak, Adnan Memeler Str. 1 58675 Hemer 9,315 17.08.2023 EEG992085051032 SEE959271326886 Memeler Str. 1 58675 Hemer
688 Schröder, Dieter Am Voßholz 3 58675 Hemer 20,16 29.01.2024 EEG918147789057 SEE918828833703 Am Voßholz 3 58675 Hemer
689 Hövener, Michael Haarweg 32 58675 Hemer 7,56 11.07.2023 EEG966562763503 SEE917886984020 Haarweg 21 58675 Hemer
690 Bollau, Ralf Parkstr. 90 58675 Hemer 8,715 31.01.2024 EEG925474824382 SEE990996343130 Parkstr. 90 58675 Hemer
691 Bornfelder, Julia Auf dem Brauck 17 58675 Hemer 12,3 18.08.2023 EEG924051375217 SEE917263748863 Auf dem Brauck 17 58675 Hemer
692 Klein, Carsten Wenhagener Str. 30A 58675 Hemer 4,51 26.07.2023 EEG994662190493 SEE939475328138 Wenhagener Str. 30a 58675 Hemer
693 Wegiel, Peter Unter dem Hohenstein 32 58675 Hemer 5,95 01.02.2024 EEG959397461836 SEE958077709817 Unter dem Hohenstein 32 58675 Hemer
694 Zwanzig, Joachim In den Grächten 15 58675 Hemer 6,48 09.08.2023 EEG918492859511 SEE911940789682 In den Grächten 15 58675 Hemer
695 Scholz, Carsten Lönsweg 34 58675 Hemer 6,02 02.02.2024 EEG905102178476 SEE989546316472 Lönsweg 34 58675 Hemer
696 Föber, Kai-Uwe Akazienweg 20 58675 Hemer 7,5 02.02.2024 EEG997430284264 SEE925581146834 Akazienweg 20 58675 Hemer
697 Rynek, Magdalene Stemmessiepener Weg 24 58675 Hemer 6,24 22.05.2023 EEG914252584020 SEE932129355726 Stemmessiepener Weg 24 58675 Hemer
698 Alper, Yavuz Baumhof 11 58675 Hemer 7,83 07.02.2024 EEG957151049412 ABR982925839180 Baumhof 11 58675 Hemer
699 Czaja, Sebastian Goethestr. 9D 58675 Hemer 6,02 08.02.2024 EEG952996599979 SEE953345816143 Goethestr. 9 58675 Hemer
700 Schütt, Karin Otto-Rentzing-Str. 7 58675 Hemer 4,56 04.11.2022 EEG981159971031 SEE920679570539 Otto-Rentzing-Str. 7 58675 Hemer
701 Blümer, Cyrill Am Bräucken 12 58675 Hemer 8,97 08.08.2023 EEG961553064706 SEE947117051894 Am Bräucken 12 58675 Hemer
702 Beier, Ottmar und Michaela Am Höllberg 25 58675 Hemer 15,58 18.04.2023 EEG959202399712 SEE910943696645 Am Höllberg 25 58675 Hemer
703 Bertram, Peter Auf dem Hohenstein 14 58675 Hemer 14,2 28.09.2023 EEG983691459671 SEE993707748958 Auf dem Hohenstein 14 58675 Hemer
704 Becker, Hans-Joachim Ihmerter Str. 298 58675 Hemer 9,99 02.08.2023 EEG902230896043 SEE975386616896 Ihmerter Str. 298 58675 Hemer
705 Rosenthal, Horst Lohstr. 54 58675 Hemer 9,02 17.08.2023 EEG979566357333 SEE965524887011 Lohstr. 54 58675 Hemer
706 Behl, Daniel und Berit Am Jalohsweg 9 58675 Hemer 14,1 27.09.2023 EEG983772966890 SEE920451827165 Am Jalohsweg 9 58675 Hemer
707 Barna, Zoltan Erlenweg 2 58675 Hemer 9,24 02.05.2023 EEG900510092048 SEE919074616546 Erlenweg 2 58675 Hemer
708 Koch, Jochen Sternstr. 13 58675 Hemer 8,91 20.11.2023 EEG949464527152 SEE988401229780 Sternstr. 13 58675 Hemer
709 Hoppe, Andre Auf dem Brauck 36 58675 Hemer 14,7 19.02.2024 EEG902011591761 SEE928582314622 Auf dem Brauck 36 58675 Hemer
710 Pielhau, Gottried Clara-Schumann-Str. 6 58675 Hemer 10,125 24.10.2023 EEG939774129184 SEE992054186918 Clara-Schumann-Str. 6 58675 Hemer
711 Wollny, Detlev Hagedorn 2C 58675 Hemer 10,53 23.11.2023 EEG947002611929 SEE994219863139 Hagedorn 2c 58675 Hemer
712 Schulte, Gerrit Unter dem Kehlberg 9 58675 Hemer 5,6 23.02.2024 EEG942341782194 SEE991329836251 Unter dem Kehlberg 9 58675 Hemer
713 Hepping, Marcus Ispei 10 58675 Hemer 9,8 23.02.2024 EEG945157004269 SEE967618773507 Ispei 10 58675 Hemer
714 Grünebaum, David Schulstr. 22 58675 Hemer 8,4 23.02.2024 EEG970125751951 SEE912703317968 Schulstr. 22 58675 Hemer
715 Tezsoy, Cengiz Karl-Bröger-Weg 11A 58675 Hemer 10,2 28.02.2024 EEG962608427781 SEE955358173800 Karl-Bröger-Weg 11a 58675 Hemer
716 Junkelwitz, Sebastian Seilerstr. 10a 58675 Hemer 6,4 24.07.2023 EEG931676662295 SEE999976206106 Seilerstr. 10a 58675 Hemer
717 Schlüter, Peter Im Alten Garten 7 58675 Hemer 10,25 19.04.2023 EEG998926103496 SEE936606145541 Im alten Garten 7 58675 Hemer
718 Erl, Dorothea Am Alten Dorfteich 29 58675 Hemer 6,72 09.10.2023 EEG921320414783 SEE924546383970 Am alten Dorfteich 29 58675 Hemer
719 Timmers, Heiko Gartenstr. 42 58675 Hemer 14,525 01.03.2024 EEG903307977757 SEE997922112143 Gartenstr. 42 58675 Hemer
720 Droste, Alexander Frönsberger Str. 10 58675 Hemer 5,74 04.03.2024 EEG963543608570 SEE915098338433 Frönsberger Str 10 58675 Hemer
721 Alberts, Stefan Tannenweg 2 58675 Hemer 11,475 04.03.2024 EEG933867529356 SEE979567472387 Tannenweg 2 58675 Hemer
722 Stein, Björn Pastoratstr. 12 58675 Hemer 7,5 13.06.2023 EEG909810275182 SEE950396748843 Pastoratstr. 12 58675 Hemer
723 Suffrian, Uwe Kiefernweg 4 58675 Hemer 13,94 23.05.2023 EEG913697765155 SEE968620054950 Kiefernweg 4 58675 Hemer
724 Mühlendyck, Birgit u. Martin Am Langeloh 33A 58675 Hemer 15,725 06.03.2024 EEG940277917055 SEE976974195465 Am Langeloh 33a 58675 Hemer
725 Cici, Markus Am Roland 1 58675 Hemer 6,93 10.03.2023 EEG941867211980 SEE986552398300 Am Roland 1 58675 Hemer
726 Gall, Stefan Ahornweg 15 58675 Hemer 10,8 06.03.2024 EEG925562449244 SEE920949806863 Ahornweg 15 58675 Hemer
727 Erichsen GmbH & Co. KG Am Iserbach 14 58675 Hemer 48,6 10.06.2023 EEG930727740982 SEE958441714805 Am Iserbach 14 58675 Hemer
728 Stegemann, Dirk Schützenstr. 25 58675 Hemer 4,4 06.03.2024 EEG991740029638 SEE929287151390 Schützenstr. 25 58675 Hemer
729 Iding, Hans-Werner Westendorfstr. 24a 58675 Hemer 2,4 08.03.2024 EEG987240382403 SEE934451305028 Westendorfstr. 24a 58675 Hemer
730 Runte, Felix Am Voßholz 10 58675 Hemer 9,68 11.03.2024 EEG968722862989 SEE923883208229 Am Voßholz 10 58675 Hemer
731 Braband, Daniel Hellestr. 21 58675 Hemer 3,3 20.03.2024 EEG942132641792 SEE987576294074 Hellestr. 21 58675 Hemer
732 Riehle, Norbert Droste-Hülshoff-Weg 57 58675 Hemer 10,125 21.03.2024 EEG962005483311 SEE978293025706 Droste-Hülshoff-Weg 57 58675 Hemer
733 Klein, Katrin & Oliver Baumhof 8 58675 Hemer 6,885 25.03.2024 EEG923038458684 SEE991198381609 Baumhof 8 58675 Hemer
734 Hallatsch, Robert Am Tannenkopf 44B 58675 Hemer 7,56 28.03.2024 EEG965262283960 SEE957908327978 Am Tannenkopf 44b 58675 Hemer
735 Franik, Robert Emil-Nensel-Straße 2 58675 Hemer 7,65 29.03.2024 EEG997809915133 SEE951440186055 Emil-Nensel-Str. 2 58675 Hemer
736 Stübs, Klaus-Dieter Am Branddorn 22 58675 Hemer 6,15 03.04.2024 EEG940624671050 SEE995468461565 Am Branddorn 22 58675 Hemer
737 Sommerhoff, Georg Fuchsweg 6 58675 Hemer 14,62 04.04.2024 EEG954476836819 SEE973976459953 Fuchsweg 6 58675 Hemer
738 Schmischke, Angelika u. Rüdiger Im Weiler 20 58675 Hemer 6,3 11.12.2023 EEG952737230772 SEE930055438599 Im Weiler 20 58675 Hemer
739 Flexal Metallproduktion GmbH & Co.KG Oesestr. 49 58675 Hemer 57,46 26.06.2014 EEG925194281502 SEE911084009127 Oesestr. 49 58675 Hemer
740 Drechsel, Günther Schützenstr. 25A 58675 Hemer 6,09 04.04.2024 EEG970092178850 SEE984771718213 Schützenstr. 25a 58675 Hemer
741 Funke, Fam. Löhrberg 3 58675 Hemer 4,92 10.04.2024 EEG906138361238 SEE946662197453 Löhrberg 3 58675 Hemer
742 Flexal Metallproduktion GmbH & Co.KG Oesestr. 49 58675 Hemer 49,41 01.09.2023 EEG928751564636 SEE923508230277 Oesestr. 49 58675 Hemer
743 Hengst, Wolfgang Südweg 4 58675 Hemer 11,34 17.08.2023 EEG975386733852 SEE914548618941 Südweg 4 58675 Hemer
744 Rosenkranz, Rico Am Branddorn 27 58675 Hemer 4,5 12.04.2024 EEG947012531491 SEE907708987360 Am Branddorn 27 58675 Hemer
745 Frohwein, Sven Unter dem Asenberg 26 58675 Hemer 5,16 19.04.2024 EEG935279485671 SEE914541009807 Unter dem Asenberg 26 58675 Hemer
746 Tüshaus, Jan Philip Stormweg 10 58675 Hemer 6,15 22.04.2024 EEG976217406280 SEE900947471157 Stormweg 10 58675 Hemer
747 Linstaedt, Thomas Adam Breddestr. 38 58675 Hemer 6,53 25.04.2024 EEG920563575305 SEE958446106162 Breddestr. 38 58675 Hemer
748 Kalnik, Manfred Droste-Hülshoff-Weg 79 58675 Hemer 7,96 25.04.2024 EEG933705896633 SEE956262987668 Droste-Hülshoff-Weg 79 58675 Hemer
749 Bange, Detlfe Droste-Hülshoff-Weg 81 58675 Hemer 7,98 30.04.2024 EEG939034841283 SEE986949626238 Droste-Hülshoff-Weg 81 58675 Hemer
750 Steiof, Heinz Adjutantenkamp 11 58675 Hemer 5,1 08.05.2024 EEG953336598294 SEE902442203578 Adjutantenkamp 11 58675 Hemer
751 Bormann, Jürgen Stübecker Weg 51 58675 Hemer 10,66 12.12.2023 EEG928929780301 SEE992971295595 Stübecker Weg 51 58675 Hemer
752 Gehrt, Oliver Stemmessiepener Weg 29 58675 Hemer 9,72 18.12.2023 EEG965331841695 SEE914393980637 Stemmessiepener Weg 29 58675 Hemer
753 Fischer, Volkmar Unter dem Asenberg 23 58675 Hemer 9,84 15.05.2024 EEG993008202777 SEE950160565478 Unter dem Asenberg 23 58675 Hemer
754 Remmert, Stephan Habichtweg 6 58675 Hemer 12,59 16.05.2024 EEG917800496820 SEE905062797342 Habichtweg 6 58675 Hemer
755 Lehnen, Hans-Walter Droste-Hülshoff-Weg 44 58675 Hemer 10,4 08.12.2023 EEG982878799944 SEE981197831366 Droste-Hülshoff-Weg 44 58675 Hemer
756 Baltzer, Christian Unter dem Asenberg 15 58675 Hemer 24,92 17.05.2024 EEG994924160080 SEE919363878112 Unter dem Asenberg 15 58675 Hemer
757 Gabriele Wieland, Matthias Redder Schützenstr. 21 58675 Hemer 14,45 06.06.2024 EEG960603321462 SEE988976331758 Schützenstr. 21 58675 Hemer
758 Frank, Gudrun & Gerhard Südweg 8 58675 Hemer 24,78 20.12.2023 EEG926881964739 SEE916570388809 Südweg 8 58675 Hemer
759 Seeliger, Martin Altenaer Str. 147 58675 Hemer 4,1 12.06.2024 EEG982540712493 SEE928036448620 Altenaer Str. 147 58675 Hemer
760 Wieners, Daniel Dulohstr. 45 58675 Hemer 19,35 13.06.2024 EEG944536275870 SEE921265524257 Dulohstr. 45 58675 Hemer
761 Schenk, Juri Lange Wiese 11 58675 Hemer 21,08 17.06.2024 EEG972856771765 SEE905823352490 Lange Wiese 11 58675 Hemer
762 Tillmann, Birgitt & Bernd Am Roland 21B 58675 Hemer 7,56 18.06.2024 EEG937270063520 SEE951986386209 Am Roland 21b 58675 Hemer
763 Babilon, Thomas Am Krausen Bäumchen 8C 58675 Hemer 3,66 24.06.2022 EEG956008696762 SEE951523769496 Am Krausen Bäumchen 8c 58675 Hemer
764 Zimmermann, Bernd Märkische Str. 81 58675 Hemer 3,52 21.06.2024 EEG993563314588 SEE944910724796 Märkische Str. 81 58675 Hemer
765 Schneider, Lorenz An der Windfuhr 6 58675 Hemer 20,2 01.09.2023 EEG980239082056 SEE985369317702 An der Windfuhr 6 58675 Hemer
766 Mau, Friedhelm Eserkamp 40 58675 Hemer 9,9 05.07.2021 EEG934432231018 SEE936240931593 Eserkamp 40 58675 Hemer
767 Klein Bäder u. Wärme GmbH Hauptstr. 327 58675 Hemer 12,8 18.09.2023 EEG999011564758 SEE968626028665 Hauptstr. 327 58675 Hemer
768 Schmidt, Karsten Im Eichholz 2 58675 Hemer 11,44 24.06.2024 EEG943958830025 SEE957589235272 Im Eichholz 2 58675 Hemer
769 Benner, Wolfgang Urbecker Str. 84 58675 Hemer 6,23 25.06.2024 EEG971780784513 SEE999778822504 Urbecker Str. 82 58675 Hemer
770 Seyock, Holger Im Hölken 14 58675 Hemer 7,885 01.07.2024 EEG923499275028 SEE989769837068 Im Hölken 15 58675 Hemer
771 Ücker, Philip Bodelschwinghstr. 28 58675 Hemer 9,1 04.07.2024 EEG953264382477 SEE944609227416 Bodelschwinghstr. 28 58675 Hemer
772 Lategahn, Bettina Waldemey 5 58675 Hemer 6,15 08.07.2024 EEG928699234417 SEE956834307702 Waldemey 5 58675 Hemer
773 Hohmann, Michael Westerweg 3b 58675 Hemer 8,25 09.07.2024 EEG907973213287 SEE989993891935 Westernweg 3b 58675 Hemer
774 Gerstendorf, Andreas Heukopfstr. 6 58675 Hemer 17,4 25.07.2024 EEG930396562182 SEE941932332725 Heukopfstr. 6 58675 Hemer
775 Teresa Ginesko &, Janus Lukasczyk Unter dem Asenberg 44 58675 Hemer 2,46 29.07.2024 EEG922228215861 SEE917326489450 Unter dem Asenberg 44 58675 Hemer
776 Rothhöft, Michaela Mühlackerweg 9a 58675 Hemer 23,08 30.07.2024 EEG913152502981 SEE985881376249 Mühlackerweg 9a 58675 Hemer
777 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
778 Ruberg, Marc Landhauser Str. 80 a 58675 Hemer 8,4 02.09.2024 EEG975740955852 SEE961710980979 Landhauser Str. 80a 58675 Hemer
779 Vanselow, Klaus Von-Ketteler-Weg 22 58675 Hemer 11,88 02.10.2024 EEG956646140696 SEE911805858867 Von-Ketteler-Weg 22 58675 Hemer
780 Raygrotzki, Gerd Felsenmeerstr. 19 58675 Hemer 8,1 18.10.2024 EEG982434968647 SEE909317945410 Felsenmeerstr. 19 58675 Hemer
781 Schäfer, Rainer Teichstr. 38 58675 Hemer 1,72 15.06.2024 EEG911051833052 SEE955800857371 Teichstr. 38 58675 Hemer
782 Nitschke, Holger Waldweg 1a 58675 Hemer 7,5 15.04.2024 EEG979717990211 SEE933121905186 Waldweg 1a 58675 Hemer
783 Heidepriem, Peter In den Klippen 8 58675 Hemer 13,2 09.06.2024 EEG903916206101 SEE937765119008 In den Klippen 8 58675 Hemer
784 Barranquero, Leandro Am Sommerholt 14b 58675 Hemer 8 05.04.2024 EEG980873641152 SEE939369347931 Am Sommerholt 14b 58675 Hemer
785 Brücklmeier, Ernst Am Möllinghof 10 58675 Hemer 8,8 30.04.2024 EEG909896453214 SEE918595010277 Am Möllinghof 10 58675 Hemer
786 Koch, Peter Schulstr. 10a 58675 Hemer 11,48 18.04.2024 EEG980233272200 SEE941348514395 Schulstr. 10a 58675 Hemer
787 Bücker, Peer Im Weiler 18 58675 Hemer 14,62 07.06.2024 EEG944621372835 SEE997879475735 Im Weiler 18 58675 Hemer
788 Weidenheimer, Thomas Iserlohner Str. 22 58675 Hemer 4,62 15.06.2024 EEG963673650272 SEE955121339846 Iserlohner Str. 22 58675 Hemer
789 Thöne, Bernd Stübecker Weg 69 58675 Hemer 7,395 22.03.2024 EEG904529909007 SEE943608915775 Stübecker Weg 96 58675 Hemer
790 Stiefe, Thomas Brockhauser Weg 101 58675 Hemer 1,55 04.01.2024 EEG937529330816 SEE969022661623 Brockhauser Weg 101 58675 Hemer
791 Schulte, Gerrit Unter dem Kehlberg 9 58675 Hemer 5,6 23.02.2024 EEG942341782194 SEE991329836251 Unter dem Kehlberg 9 58675 Hemer
792 Nuyken, Günther Berliner Str. 39 58675 Hemer 8,2 26.04.2024 EEG975734314542 SEE945497822066 Berliner Str. 39 58675 Hemer
793 Baecker, Amelie & Philipp Am Vogelsang 23 58675 Hemer 7,98 06.02.2024 EEG917234359241 SEE951646242494 Kellerstr. 1 58644 Iserlohn
794 Posmyk, Christofer Am Wernshagen 19 58675 Hemer 10,12 16.05.2024 EEG974035696289 SEE949161787323 Am Wernshagen 19 58675 Hemer
795 Rathke, Jens Am Vogelsang 3 58675 Hemer 5,6 01.04.2024 EEG916357028164 SEE937318895779 Am Vogelsang 3 58675 Hemer
796 Heße, Stefan-Christopher In der Bilmecke 6 58675 Hemer 5,2 26.04.2024 EEG909245284902 SEE989964169605 In der Bilmecke 6 58675 Hemer
797 Wolfgang Förster GmbH Industriepark Edelburg 2 58675 Hemer 95,04 07.09.2022 EEG955504480110 SEE930398188991 Industriepark Edelbur 2 58675 Hemer
798 Hüttemeister-Hülsebusch, Ursula Brandeiche 4 58675 Hemer 12,4 06.02.2023 EEG978350899530 SEE971138272747 Brandeiche 4 58675 Hemer
799 Franke, Nora Weißdornstr. 8 58675 Hemer 13,5 27.11.2023 EEG946331009988 SEE916368032266 Weißdornstr. 8 58675 Hemer
800 Rosin, Jan Charlotte-Terheyden-Weg 25 58675 Hemer 9,96 15.10.2023 EEG941795689752 SEE915447592264 Charlotte-Terheyden-Weg 25 25 58675 Hemer
801 Janke, Ulrich Im Trichter 3 58675 Hemer 9,36 12.12.2023 EEG951126392916 SEE939390094583 Im Trichter 3 58675 Hemer
802 Humpert, Andreas Am Dasbrauck 1 c 58675 Hemer 7,055 01.12.2023 EEG971299424672 SEE920293983227 Am Dasbrauck 1c 58675 Hemer
803 Sassenscheidt, Thorsten Brockhauser Weg 33 c 58675 Hemer 5,124 05.09.2024 EEG970564213096 SEE986228808607 Brockhauser Weg 33c 58675 Hemer
804 Markgraf, Manfred Nockenstr. 11a 58675 Hemer 10,75 09.10.2024 EEG927752482307 SEE958205047736 Nockenstr. 11a 58675 Hemer
805 Horn, Nicole Stübecker Weg 62 58675 Hemer 10,05 10.09.2024 EEG981111239193 SEE938474917589 Stübecker Weg 62 58675 Hemer
806 Knuhr, Jürgen Rosenweg 1 58675 Hemer 10,75 28.02.2024 EEG933019196603 SEE992376547534 Rosenweg 1 58675 Hemer
807 Hebenstreit, Ulrich Ringstr. 22a 58675 Hemer 14,08 28.08.2024 EEG931623092694 SEE979699470107 Ringstr. 22a 58675 Hemer
808 Eymann, Michael Parkstr. 66 58675 Hemer 14,19 19.09.2024 EEG935328626475 SEE934473627009 Parkstr. 66 58675 Hemer
809 Schneider, Rüdiger Hönnetalstr. 160 58675 Hemer 3,42 11.11.2024 EEG963120063235 SEE967522208881 Hönnetalstr. 160 58675 Hemer
810 Adolf, Winfried Droste-Hülshoff-Weg 62 58675 Hemer 7,74 08.08.2024 EEG903368375905 SEE973586582775 Droste-Hülshoff-Weg 62 58675 Hemer
811 Brenken, Christoph Am Sommerholt 22 58675 Hemer 3,75 01.01.2024 EEG911653229178 SEE983632154399 Am Sommerholt 22 58675 Hemer
812 Brenken, Christoph Am Sommerholt 22 58675 Hemer 3,75 01.01.2024 EEG991632824303 SEE985649106033 Am Sommerholt 22 58675 Hemer
813 Grothaus, Fabian Sebastian Franz-Schubert-Str 6 58675 Hemer 12 29.11.2024 EEG982286181515 SEE970829183980 Franz-Schubert-Str 6 58675 Hemer
814 Böhmer, Hans-Dieter Hönnetalstr. 99 58675 Hemer 9,79 08.11.2024 EEG908963290806 SEE948789854035 Hönnetalstr. 99 58675 Hemer
815 Dünhaupt, Ursula Im Turm 36 58675 Hemer 20,25 02.11.2023 EEG938041094033 SEE916673177379 Im Turm 36 58675 Hemer
816 Morris, John Akazienweg 2 58675 Hemer 13,65 12.12.2024 EEG975974099599 SEE986346671947 Akazienweg 2 58675 Hemer
817 Baars, Markus Bäingser Weg 99 58675 Hemer 9,79 15.10.2024 EEG922161043668 SEE948868417847 Bäingser Weg 99 58675 Hemer
818 Wasner, Michael Büttmecker Weg 19a 58675 Hemer 13,64 17.12.2024 EEG940083666086 SEE985891640224 Büttmecker Weg 19a 58675 Hemer
819 Markert, Christoph Karl-Wagenfeld-Weg 2 58675 Hemer 5,04 12.09.2023 EEG936749823597 SEE930249923344 Karl-Wagenfeld-Weg 2 58675 Hemer
820 Jonen, Christoph Schmetterlingsweg 1 58675 Hemer 17,16 01.11.2024 EEG948615151383 SEE977050745871 Schmetterlingsweg 1 58675 Hemer
821 Rus, Dirk Droste-Hülshoff-Weg 95 58675 Hemer 8,7 07.08.2024 EEG927279085418 SEE985133287361 Droste-Hülshoff-Weg 95 58675 Hemer
822 Goldau, Jan-Oliver Am Ballo 8 58675 Hemer 8,800 22.07.2024 EEG919706735836 SEE962819397040 Am Ballo 8 58675 Hemer
823 Jürgen Weibler, M. Vogelmann Am Deinsberg 19 58675 Hemer 10,920 27.02.2024 EEG909343459011 SEE910162611597 Am Deinsberg 19 58675 Hemer
824 Lutz, Rafael Am Iserbach 20 o 58675 Hemer 10,240 05.07.2024 EEG967664345031 SEE989118136361 Am Iserbach 20o 58675 Hemer
825 Andrek, Josef Am Lusebrink 17a 58675 Hemer 18,620 22.04.2024 EEG918484271680 SEE983670574111 Am Lusebrink 17a 58675 Hemer
826 Hein, Kersten Am Sonnenhang 15 58675 Hemer 9,600 07.05.2024 EEG906989382536 SEE978367092290 Am Sonnenhang 15 58675 Hemer
827 Kawczak, Alexander Auf dem Kamp 6 58675 Hemer 10,080 11.09.2023 EEG943263133002 SEE992714823863 Auf dem Kamp 6 58675 Hemer
828 Böker, Mirella Bautenheide 20 58675 Hemer 10,920 14.12.2024 EEG958092897988 SEE921255379706 Bautenheide 20 58675 Hemer
829 Kaiser, Christian Bräuckerstr. 54 58675 Hemer 10,440 11.07.2024 EEG900324399197 SEE916813719667 Bräuckerstr. 54 58675 Hemer
830 Hirt, Michael Brucknerstr. 5 58675 Hemer 6,800 10.07.2024 EEG999160809946 SEE935878525211 Brucknerstr. 5 58675 Hemer
831 Hartmann, Peter Caller Str. 77 58675 Hemer 7,000 07.08.2024 EEG906569825859 SEE910237562014 Caller Str. 77 58675 Hemer
832 Wienand, Charlotte Unter dem Asenberg 12 58675 Hemer 14,760 12.05.2024 EEG936337388927 SEE920660399262 Unter dem Asenberg 12 58675 Hemer
833 Schönenberg, Joachim Westendorfstr. 54 58675 Hemer 24,300 11.12.2024 EEG991027841410 SEE942595163374 Westendorfstr. 54 58675 Hemer
834 Vorhoff, Rüdiger Im Hölken 15 58675 Hemer 16,380 20.08.2024 EEG961247959509 SEE919597640714 Im Hölken 15 58675 Hemer
835 Lueg, Johannes Am Eibenbrink 78 58675 Hemer 6,150 31.07.2024 EEG902832660165 SEE929595239780 Am Eibenbrink 78 58675 Hemer
836 Enste, André Ghaxberger Weg 38 58675 Hemer 9,960 11.01.2024 EEG963938998927 SEE992331287468 Ghaxberger Weg 38 58675 Hemer
837 Röder, Thomas Am Schoppenweg 16 58675 Hemer 11,340 09.09.2023 EEG932340205619 SEE985974584667 Am Schoppenweg 16 58675 Hemer
838 Dräs, Stefan Balver Weg 10b 58675 Hemer 12,640 19.10.2023 EEG995652231707 SEE960202204272 Balver Weg 10b 58675 Hemer
839 Groß, Thomas Fichtestr. 10 58675 Hemer 9,240 22.05.2024 EEG921826932941 SEE916625094440 Fichtestr. 10 58675 Hemer
840 Krafft, Rebekka & Hanno Fliednerweg 5 58675 Hemer 20,210 30.04.2024 EEG960451724071 SEE957986879437 Fliednerweg 5 58675 Hemer
841 Derksen, Valerij Heinrich-Nuttebaum-Str. 5 58675 Hemer 11,340 26.04.2024 EEG933276999603 SEE938818945476 Heinrich-Nuttebaum-Str. 5 58675 Hemer
842 Riebeling, Christina Unter dem Asenberg 4 58675 Hemer 6,930 08.03.2024 EEG961208620455 SEE995079782561 Unter dem Asenberg 4 58675 Hemer
843 Wolkewitz, Reiner Waldemey 18 58675 Hemer 7,650 10.08.2024 EEG993947320327 SEE940072217503 Waldemey 18 58675 Hemer
844 Galant, Sabrina Dorfstr. 13 58675 Hemer 7,740 23.10.2024 EEG989630741944 SEE910539653335 Dorfstr. 13 58675 Hemer
845 Waldeck, Sebastian Ginsterweg 12 d 58675 Hemer 12,450 14.05.2024 EEG933115957504 SEE980175166988 Ginsterweg 12d 58675 Hemer
846 Menger, Klaus Holbeinstr. 9 58675 Hemer 10,080 05.08.2024 EEG969847582776 SEE966518452420 Holbeinstr. 9 58675 Hemer
847 Ukiri, Richard Hönnetalstr. 70 a 58675 Hemer 6,090 07.08.2024 EEG951633856772 SEE996528221891 Hönnetalstr. 70a 58675 Hemer
848 Brucke, Horst Im Eichholz 21 58675 Hemer 10,250 12.04.2024 EEG953795119351 SEE976614698134 Im Eichholz 21 58675 Hemer
849 Hildebrandt, Holger Im Santel 1 58675 Hemer 11,000 29.08.2024 EEG964419849462 SEE956037691547 Im Santel 1 58675 Hemer
850 Stützer, Andreas Josef-Winckler-Weg 2 58675 Hemer 6,580 16.12.2024 EEG936372265917 SEE940151089397 Josef-Winckler-Weg 2 58675 Hemer
851 Siedler, Jürgen Karl-Bröger-Weg 10 58675 Hemer 28,500 08.10.2024 EEG941695498157 SEE909136825085 Karl-Bröger-Weg 10 58675 Hemer
852 Simon, Maria Königsberger Str. 24 58675 Hemer 10,080 21.03.2024 EEG923421663466 SEE906307861378 Königsberger Str. 24 58675 Hemer
853 Schelberg, Mick Selvestr. 3 58675 Hemer 10,000 21.08.2024 EEG901943613749 SEE944318762475 Selvestr. 3 58675 Hemer
854 Buhl, Holger Urbecker Str. 111b 58675 Hemer 6,480 25.05.2024 EEG944076689816 SEE944919394327 Urbecker Str. 111b 58675 Hemer
855 Keil, Svenja Waldemey 6a 58675 Hemer 8,700 08.05.2024 EEG914160242210 SEE968744281355 Waldemey 6a 58675 Hemer
856 Noga, Jonas Westendorfstr. 21a 58675 Hemer 8,265 30.04.2024 EEG948668179754 SEE912496350838 Westendorfstr. 21a 58675 Hemer
857 Reinders, Michael Ispei 11a 58675 Hemer 10,000 12.10.2024 EEG925883597730 SEE913975248189 Ispei 11a 58675 Hemer
858 Janke, Ulrich Im Trichter 3 58675 Hemer 9,360 12.12.2024 EEG951126392916 SEE939390094583 Im Trichter 3 58675 Hemer
859 Busch, Torsten Deilinghofer Str. 35-37 58675 Hemer 20,000 27.08.2024 EEG985124377477 SEE965737270570 Deilinghofer Str. 35 58675 Hemer
860 Hoppe, Andre Auf dem Brauck 36 58675 Hemer 14,700 25.09.2024 EEG902011591761 SEE928582314622 Auf dem Brauck 36 58675 Hemer
861 Streber, Jens Bussardweg 5 58675 Hemer 16,100 29.11.2024 EEG942939031307 SEE968267223856 Bussardweg 5 58675 Hemer
862 Friedrich, Hans-Dieter Am Schieferbruch 16 58675 Hemer 10,680 18.12.2024 EEG995201911753 SEE936038068067 Am Schieferbruch 16 58675 Hemer
863 Beckstroem, Inga Lange Wiese 31 58675 Hemer 15,300 22.05.2024 EEG947978641920 SEE989935734948 Lange Wiese 31 58675 Hemer
864 Erwentraut, Frank Von-Wrede-Str. 23 58675 Hemer 15,840 15.10.2024 EEG963688015868 SEE916778091136 Von-Wrede-Str. 23 58675 Hemer
865 Temme, Uli Beethovenstr. 8 58675 Hemer 7,740 18.08.2024 EEG999441716666 SEE923510373726 Beethovenstr. 8 58675 Hemer
866 Bechatzek, Enrico Am Querrücken 3 e 58675 Hemer 6,000 02.04.2024 EEG929523738552 SEE973928104672 Am Querrücken 3e 58675 Hemer
867 Druselmann, Tanja Balver Weg 20 58675 Hemer 18,000 15.04.2024 EEG984068718544 SEE930595209130 Balver Weg 20 58675 Hemer
868 Drossel, Birgit & Jürgen Eichenweg 3 58675 Hemer 6,230 14.10.2024 EEG914915124396 SEE943102933220 Eichenweg 3 58675 Hemer
869 Riesenfeld, Thomas Ostend 21 58675 Hemer 8,600 21.05.2024 EEG935641484684 SEE907290125720 Ostend 21 58675 Hemer
870 Messarius, Jochen Frönsberger Str. 25 a 58675 Hemer 8,32 20.11.2024 EEG903681590795 SEE995770230392 Frönsberger Str. 25a 58675 Hemer
871 Multhaup, Prof. Dr. Roland Bautenheide 2a 58675 Hemer 9,24 19.12.2024 EEG998502044342 SEE963254090718 Ohlweg 8d 58730 Fröndenberg
872 Multhaup, Prof. Dr. Roland Bautenheide 2a 58675 Hemer 15,66 24.10.2024 EEG963710485225 SEE998015821249 Ohlweg 8d 58730 Fröndenberg
873 Alberts Johannes Hönnetalstr. 39a 58675 Hemer 18,5 22.11.2023 EEG933517830122 SEE926104679495 Hönnetalstr. 39a 58675 Hemer
874 Hupe, Marco Bembergstr. 48a 58675 Hemer 10,08 25.03.2024 EEG950966164318 SEE929894994052 Bembergstr. 48a 58675 Hemer
875 Rosier, Björn Ostfeldstr. 22a 58675 Hemer 10,875 08.05.2024 EEG959300318721 SEE954108130582 Ostfeldstr. 22a 58675 Hemer
876 Schildwächter, Oliver Holmecker Weg 9 58675 Hemer 12,18 01.08.2024 EEG928962454191 SEE954250357943 Holmecker Weg 9 58675 Hemer
877 Bongard, Hans-Georg Meisenweg 4a 58675 Hemer 8,4 07.11.2023 EEG916844407250 SEE954363635532 Meisenweg 4a 58675 Hemer

View File

@@ -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

Binary file not shown.

View File

@@ -0,0 +1 @@
D:\Temp\libs\commons-io-2.11.0.jar

View 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")
}

View File

@@ -0,0 +1,2 @@
D:\Temp\libs\json-simple-1.1.1.jar
D:\Temp\libs\ojdbc8.jar

File diff suppressed because one or more lines are too long

View 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

Binary file not shown.

View File

@@ -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

View File

@@ -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,9 +2771,10 @@ 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
////////////////////////////
@@ -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

Binary file not shown.

View 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;
}
}

File diff suppressed because it is too large Load Diff

View 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.

View File

@@ -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.

View File

@@ -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;
}
}

View File

@@ -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
View 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"
}

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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
}

View 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

File diff suppressed because it is too large Load Diff

View 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

View 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

Binary file not shown.

View File

@@ -0,0 +1 @@
D:\d3\d3server.prg\ext_groovy\Jar-Files\case-mngmnt-hook.jar

View 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;
}
}

View 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}-";
}
}
}

View 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/

View 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;
}
}

View 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
}

View 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;
}
}

View File

@@ -0,0 +1 @@

View 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;
}
}

View 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

View 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
}
}

View 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

View 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

View 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");

View 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

View 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

View 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())
}
}

View 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!");
}

View 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.");

View 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")
}

View 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")
}
}

View 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");
}

View 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!");
}

View 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())
}
}

View 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" )

View 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")
}

View 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")
}

View File

@@ -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")
}