#
#			ITSV GmbH
#	CCDB - Command and Control Database
#
#	FILE:			dquerymfile_SVCL52VIEWDATA.txt
#	DESCRIPTION:	DQUERY definition for DQUERY SVCL52VIEWDATA
#
@querytitle				SVCLEAR-52: Daten zu Zuordnungen und Ergänzungen ansehen
@querydescription		zeigt unterschiedliche Auswahlen an Zuordnungen und assoziierte Daten(Stammdaten, Personen, Unternehmen, Vollmachten) an
@group					SVCLCASETOOLS
@attributenames			what:svcl52what:{{whatoptions}},sel:svcl52assel:{{seloptions}},sel2:string:{{sel2options}},sel3:string:{{sel3options}}
@whatoptions {
	type:		{	structure:	"scalar.enum",
					vlist:		"ZUOASSOC:Zuordnungen und assoziierte Daten:Zuordnungen aus SVCLZUORD und assoziierte Daten aus SVCL52CASSOC,"+
								"VPERS:Personendaten:Personen-Stammdaten zu einer VSNR,"+
								"BKNR:Beitragskonto:Stammdaten zu einem Beitragskonto,"+
								"ESNR:ELDA-Seriennummer-Daten:Informationen zu einer ELDA-Seriennummer,"+
								"PARTNER:Partnerdaten:Partner-Stammdaten zu einer Partner-ID"
				},
	labeltext:	"Datenbereich",
	typedesc:	"Art der Daten, die angezeigt werden sollen"
	}
@seloptions	{
	type:		{	structure: "scalar.enum", 
					vlist:	":<kein>:Kein Auswahlkriterium,"+
							"ZUONOTANNOT:Nicht gekennzeichnete Zuordnungen:wählt Zuordnungen aus die keine Eintragungen in INHPARID und INHROLLE haben,"+
							"ZUONOTASSOC:Zuordnungen ohne Assoziierung:Zuordnungen ohne assoziierte Einträge in SVCL52CASSOC,"+
							"ZUOANNOTNOTASSOC:Zuordnungen ohne Assoziierung aber mit Kennzeichnung:Zuordnungen ohne assoziierte Einträge in SVCL52CASSOC aber trotzdem mit IHPARID/INHROLLE,"+
							"OLDZUO:alte Zuordnungen:Zuordnungen die vor dem 01.01.2020 beendet wurden"
				},
	labeltext:	"Auswahlkriterium",
	typedesc:	"Auswahl der Datensätze, die angezeigt werden sollen",
	is_optional:	"true"
	}
@sel2options {
	labeltext:		"Objekt-Selektor",
	typedesc:		"Auswahl-Kriterium, das bestimmt, welches Fachobjekt angezeigt werden soll",
	is_optional:	"true"
	}
@sel3options {
	labeltext:		"Sub-Objekt-Selektor",
	typedesc:		"Auswahl-Kriterium, das bestimmt, welches Teil-Fachobjekt angezeigt werden soll",
	is_optional:	"true"
	}
@querytype				dbselect
@sql_ZUOASSOC			select	zuo.ID as ZUORDNUNG, zuo.SERIENNUMMER, zuo.TRAEGER, zuo.BKNR, zuo.INHPARID, zuo.INHROLLE, zuo.AKTIVVON, zuo.AKTIVBIS,
								ass.KUR, ass.UPARID, ass.UNAME, ass.VSNR, ass.PPARID, ass.PNAME, ass.TRAEGER as BKTRAEGER, ass.BKNR as BKBKNR, ass.VUMFANG, ass.VOLLMACHTVON, ass.VOLLMACHTBIS, 
								ass.ELDASNR, ass.ZUOID, ass.ZUOINHPARID, ass.ZUOINHROLLE, ass.ZUOVON, ass.ZUOBIS
						  from SVCLZUORD zuo
						    left join SVCL52CASSOC ass on ass.ZUOID=zuo.ID
@sql_VPERS				select 'USP' as QUELLE, upst.VSNR, upst.PARTNERID, upst.NAMENSZUSAMMENFASSUNG as PNAME, upst.SV_BKR_VERSCHL as SVBPKVER, '' as status, '' as rolle, '' as erstellt
						  from SVCLUSPPSTAMM upst 
						 where upst.VSNR=::sel2::
						UNION
						select 'ELDA' as QUELLE, eust.VSNR, eust.PARTNERID, eust.NAMENSZUSAMMENFASSUNG as PNAME, '' as SVBPKVER, eps.status, eps.rolle, eps.erstellt
						  from SVCLELDAUSERSTAMM eust 
						    left join SVCLESNRPERS eps on eps.VSNR=eust.VSNR
						 where eust.VSNR=::sel2::
						UNION
						select 'BKNRVOLLMACHT' as QUELLE, bkst.BEZUGVSNR as VSNR, bkst.PARTNERID, bkst.BEZUGNAMENSZUSAMMENFASSUNG as PNAME, '' as SVBPKVER, '' as status, '' as rolle, '' as erstellt
						  from SVCLBKNRSSTAMM bkst
						 where bkst.BEZUGVSNR=::sel2::
@sql_BKTO				select * from SVCLBKNRSSTAMM where SVT=::sel3:: and BKNR=::sel2::
@sql_ESNR				select seriennummer as "SERIENNUMMER", esp.vsnr as "VSNR", status, rolle, erstellt, eust.PARTNERID, eust.NAMENSZUSAMMENFASSUNG, upz.KUR, upz.UNAME as UNAME
						  from SVCLESNRPERS esp
						    left join SVCLELDAUSERSTAMM eust on eust.VSNR=esp.VSNR
							left join SVCLUSPPERSZP upz on upz.PVSNR=esp.VSNR
						 where esp.SERIENNUMMER=::sel2::
@sql_PARTNER			select 'USP' as QUELLE, upst.PPARID as PARTNERID, upst.PVSNR as VSNR, upst.PNAME as PARTNERNAME from SVCLUSPPERSZP upst where upst.PPARID=::sel2::
						UNION
						select 'ELDA' as QUELLE, eust.PARTNERID, eust.VSNR, eust.NAMENSZUSAMMENFASSUNG as PARTNERNAME from SVCLELDAUSERSTAMM eust where eust.PARTNERID=::sel2::
						UNION
						select 'DG' as QUELLE, bkst.PARTNERID, '' as VSNR, bkst.NAMENSZUSAMMENFASSUNG as PARTNERNAME from SVCLBKNRSSTAMM bkst where bkst.PARTNERID=::sel2::
						UNION
						select 'BKNRVOLLMACHT', bkst.PARTNERBEZUGID as PARTNERID, bkst.BEZUGVSNR as VSNR, bkst.BEZUGNAMENSZUSAMMENFASSUNG as NAME_BEVOLLMAECHTIGTER from SVCLBKNRSSTAMM bkst where bkst.PARTNERBEZUGID=::sel2::
@sql_ZUORD				select zuo.ID as ZUORDNUNG, zuo.SERIENNUMMER, zuo.TRAEGER, zuo.BKNR, zuo.INHPARID, zuo.INHROLLE, zuo.AKTIVVON, zuo.AKTIVBIS,
								eps.VSNR as ELDAUSERVSNR, CONCAT(eps.status,'/',eps.rolle) as ELDAUSERSTATUS,
								eust.NAMENSZUSAMMENFASSUNG as ELDAUSERNAME,
								upz.UNAME as ELDAUSERUSPUNTERNEHMEN,
								bkst.PARTNERID as BKPARTNERID, bkst.NAMENSZUSAMMENFASSUNG as BKUNAME, bkst.KUR as BKUKUR, bkst.VOLLMACHTSUMFANG as BKUVUMFANG,
								bupz.PVSNR as BKUUSPUSERVSNR, bupz.PNAME as BKUUSPUSERNAME,
								ass.KUR, ass.UPARID, ass.UNAME, ass.VSNR, ass.PPARID, ass.PNAME, ass.TRAEGER as BKTRAEGER, ass.BKNR as BKBKNR, ass.VUMFANG, ass.VOLLMACHTVON, ass.VOLLMACHTBIS, 
								ass.ELDASNR, ass.ZUOID, ass.ZUOINHPARID, ass.ZUOINHROLLE, ass.ZUOVON, ass.ZUOBIS
						  from SVCLZUORD zuo
						    left join SVCL52CASSOC ass on ass.ZUOID=zuo.ID
							left join SVCLESNRPERS eps on eps.SERIENNUMMER=zuo.SERIENNUMMER
							  left join SVCLELDAUSERSTAMM eust on eust.VSNR=eps.VSNR
							    left join SVCLUSPPERSZP upz on upz.PVSNR=eps.VSNR
							left join SVCLBKNRSSTAMM bkst on bkst.SVT=zuo.TRAEGER and bkst.BKNR=zuo.BKNR
							  left join SVCLUSPPERSZP bupz on bupz.KUR=bkst.KUR
						 where zuo.ID=::sel2::
@pre_query	
	switch (that.query.what) {
		case "ZUOASSOC":	that.query.sql = that.query.sql_ZUOASSOC;				break;
		case "VPERS":		that.query.sql = that.query.sql_VPERS;					that.query.sel = "";	break;
		case "BKTO":		that.query.sql = that.query.sql_BKTO;					that.query.sel = "";	break;
		case "ESNR":		that.query.sql = that.query.sql_ESNR;					that.query.sel = "";	break;
		case "PARTNER":		that.query.sql = that.query.sql_PARTNER;				that.query.sel = "";	break;
		case "ZUORD":		that.query.sql = that.query.sql_ZUORD;					that.query.sel = "";	break;
		default:			that.query.sql = "SELECT 'Illegal data selector'";		break;
	}
	switch (that.query.sel) {
		case "ZUONOTANNOT":			that.query.whereclause = "WHERE zuo.INHPARID is null or zuo.INHROLLE is null";														break;
		case "ZUONOTASSOC":			that.query.whereclause = "WHERE ass.ZUOID is null";																					break;
		case "ZUOANNOTNOTASSOC":	that.query.whereclause = "WHERE (ass.ZUOID is null) and ((zuo.INHPARID is not null) or (zuo.INHROLLE is not null))";				break;
		case "OLDZUO":				that.query.whereclause = "WHERE zuo.BISDATNUM<20200101000000000";																	break;
		case "":					that.query.whereclause = "";																										break;
		default:					that.query.whereclause = "";																										break;
	}
	that.query.sql = that.query.sql + " " + that.query.whereclause;
	that.query.named_params = { sel2: that.query.sel2, sel3: that.query.sel3 }; 
@post_query
	that.result.title = "Ergebnis von "+that.query.dataname+"(WAS="+that.query.what+",SEL="+that.query.sel+",SEL2="+that.query.sel2+",SEL3="+that.query.sel3+")";
	that.result.toptext = 	"<ul>"+
							"<li>Die Abfrage <code>"+that.query.sql+"</code> hat "+that.result.getRowCount()+" Einträge gefunden</li>"+
							"</ul>";
	if (that.query.what=="ZUORD") {
		let atx = "<h3>Analyse:</h3><br/><ul>";
		let nodguser = false;
		let nobvuser = false;
		let noeldauspuser = false;
		if (that.result.analyze({ analysis: "columnEmpty", columnName: "ZUOID"})) {
			atx += "<li>Keine Assoziation zu dieser Zuordnung erstellt, Grund kann weiter unten folgen</li>\r\n";
		}
		if (that.result.analyze({ analysis: "columnEmpty", columnName: "ELDAUSERUSPUNTERNEHMEN"})) {
			atx += "<li>Kein Benutzer zur ELDA-Seriennummer ist im USP zu einem Unternehmen registriert</li>";
			noeldauspuser = true;
		}
		if (that.result.analyze({ analysis: "columnEmpty", columnName: "BKUUSPUSERVSNR"})) {
			atx += "<li>Es ist kein USP-Benutzer zum DG-Unternehmens des Beitragskontos registriert</li>";
			nodguser = true;
		}
		if (nodguser && (that.result.getCellValue(0,5)=='1')) {
			atx += "<li>Obwohl es keinen USP-Benutzer des Dienstgebers gibt, ist die Kennzeichnung der Zuordnung als \"alsDG\" (1). Dies ist potentiell falsch.</li>";
		}
		atx += "</ul>";
		that.result.bottomtext = atx;
	}
		
@decoration {
		decorate_colcell: {
			VSNR:			{	hyperlink:	{	href:	"/dquery?dataname=SVCL52VIEWDATA&what=VPERS&sel2=@@celldata@@",
												title:	"Stammdaten zu Person mit VSNR @@celldata@@ anzeigen" } },
			ELDAUSERVSNR:	{	hyperlink:	{	href:	"/dquery?dataname=SVCL52VIEWDATA&what=VPERS&sel2=@@celldata@@",
												title:	"Stammdaten zu EKLDA-User-Person mit VSNR @@celldata@@ anzeigen" } },
			BKNR:			{	hyperlink:	{	href:	"/dquery?dataname=SVCL52VIEWDATA&what=BKTO&sel2=@@row.BKNR@@&sel3=@@row.TRAEGER@@",
												title:	"Stammdaten zu Partner und Beitragskonto @@row.TRAEGER@@/@@row.BKNR@@ anzeigen" } },
			PARTNERID:		{	hyperlink:	{	href:	"/dquery?dataname=SVCL52VIEWDATA&what=PARTNER&sel2=@@celldata@@",
												title:	"Stammdaten zu Partner mit ID @@celldata@@ anzeigen" } },
			INHPARID:		{	hyperlink:	{	href:	"/dquery?dataname=SVCL52VIEWDATA&what=PARTNER&sel2=@@celldata@@",
												title:	"Stammdaten zu Partner mit ID @@celldata@@ anzeigen" } },
			SERIENNUMMER:	{	hyperlink:	{	href:	"/dquery?dataname=SVCL52VIEWDATA&what=ESNR&sel2=@@celldata@@",
												title:	"Informationen zu ELDA-Seriennummer @@celldata@@ anzeigen" } },
			ZUORDNUNG:		{	hyperlink:	{	href:	"/dquery?dataname=SVCL52VIEWDATA&what=ZUORD&sel2=@@celldata@@",
												title:	"Informationen zur ZUORDNUNG mit der ID @@celldata@@ anzeigen" } }
		}
	}
	
