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