// Bericht Wartungsauftrag
using craftsReport.Interfaces;

namespace craftsReport.modules
{
	public class rp2703_xbs : IReportModule
	{
		public IReportHost HostObject { set; get; }

		public rp2703_xbs()
		{
		}


		// Wartungsauftrag
		public bool Execute()
		{

			HostObject.DefineVariable2("Zeile", "s,2,0");
			HostObject.DefineVariable2("ZlMax", "s,2,0");
			HostObject.DefineVariable2("Seite", "s,2,0");
			HostObject.DefineVariable2("RandX", "d,8,2");
			HostObject.DefineVariable2("RandY", "d,8,2");
			HostObject.DefineVariable2("SizeX", "d,8,2");
			HostObject.DefineVariable2("Heute", "D,10,0");
			HostObject.DefineVariable2("cyZeile", "d,8,3");
			HostObject.DefineVariable2("mLPI", "s,2,0");
			HostObject.DefineVariable2("cntMessW", "s,2,0");
			HostObject.DefineVariable2("cntTeile", "s,2,0");
			HostObject.DefineVariable2("cntListe", "s,2,0");
			HostObject.DefineVariable2("maxDetails", "s,2,0");
			HostObject.DefineVariable2("LfdNr", "s,2,0");
			HostObject.DefineVariable2("cDimName1", "u,40,0");
			HostObject.DefineVariable2("cDimName2", "u,40,0");
			HostObject.DefineVariable2("cDimName3", "u,40,0");
			HostObject.DefineVariable2("cDimName4", "u,40,0");
			HostObject.DefineVariable2("mHeader", "C,80,0");
			HostObject.DefineVariable2("fntLITT", "C,40,0");
			HostObject.DefineVariable2("fntHDR", "C,40,0");
			HostObject.DefineVariable2("fntTXT", "C,40,0");

			HostObject.Set("mLPI", @"       7", true);

			//  ------------------ Dimensionsnamen
			if (HostObject.IsVar("pDimName1"))
				HostObject.Set("cDimName1", @"$[pDimName1]", true);
			else
				HostObject.Set("cDimName1", @"Hersteller", true);

			if (HostObject.IsVar("pDimName2"))
				HostObject.Set("cDimName2", @"$[pDimName2]", true);
			else
				HostObject.Set("cDimName2", @"Hersteller", true);

			if (HostObject.IsVar("pDimName3"))
				HostObject.Set("cDimName3", @"$[pDimName3]", true);
			else
				HostObject.Set("cDimName3", @"Hersteller", true);

			if (HostObject.IsVar("pDimName4"))
				HostObject.Set("cDimName4", @"$[pDimName4]", true);
			else
				HostObject.Set("cDimName4", @"Hersteller", true);

			if (!HostObject.IsVar("mNadel"))
				HostObject.DefineVariable2("mNadel", "L,1,0");
			if (HostObject.EvalBool("$[mNadel]"))
				SUB_subNadel();
			else
				SUB_subLaser();

			if (!HostObject.IsVar("bDrkBez2"))
				HostObject.DefineVariable2("bDrkBez2", "L,1,0");

			HostObject.Set("RandX", @"      1,80", true);
			HostObject.Set("RandY", @"      0,80", true);
			HostObject.Set("SizeX", @"      17,50", true);
			HostObject.Set("Seite", @"      1", true);
			HostObject.Set("Zeile", @"      0", true);
			HostObject.Set("cyZeile", @"    2.54/$[mLPI]", true);
			HostObject.Set("ZlMax", @"     (26.5/$[cyZeile]) - 1", true);

			HostObject.Set("Heute", @"H", true);
			HostObject.Set("maxDetails", @"$[maxMessW]", true);
			if (HostObject.EvalBool("($[maxDetails]) < ($[maxTeile] + $[maxListe] + 1)"))
				HostObject.Set("maxDetails", @"$[maxTeile] + $[maxListe] +  1", true);

			if (!HostObject.IsVar("pIdent"))
				HostObject.DefineVariable2("pIdent", "N,8,0");

			if (!HostObject.IsVar("mDevice"))
				HostObject.DefineVariable2("mDevice", "C,20,0");
			if (HostObject.IsEmpty("mDevice"))
				HostObject.Set("mDevice", @"Service", true);


			//  Datensätze zum Auftrag
			HostObject.DefineRecord("recAuftrag", "WARTUNGSAUFTRAEGE", 0, 8, HostObject.EvalString(@"$[pIdent>8]"));
			HostObject.DefineRecord("recObject", "WARTUNGSOBJEKTE", 0, 8, HostObject.EvalString(@"$[recAuftrag.ObjektId>8]"));
			HostObject.DefineRecord("recAnlage", "WARTUNGSANLAGEN", 0, 8, HostObject.EvalString(@"$[recAuftrag.AnlagenId>8]"));
			HostObject.DefineRecord("recMonteur", "ADRESSSTAMM", 6, 6, HostObject.EvalString(@" 4$[recAuftrag.Monteur<4]"));
			HostObject.DefineRecord("recKunde", "ADRESSSTAMM", 0, 15, HostObject.EvalString(@"$[recObject.KdNr<15]"));
			HostObject.DefineRecord("recStando", "ADRESSSTAMM", 0, 15, HostObject.EvalString(@"$[recObject.Standort<15]"));

			//  Datensatz EIGENE_ANSCHRIFTEN
			HostObject.DefineRecord("recEIGA", "EIGENE_ANSCHRIFTEN", 0, 2, HostObject.EvalString(@"01"));

			//  -------------------------------------------------
			if (HostObject.EvalBool("$[recAuftrag.Art] = 2"))
				HostObject.Set("mHeader", @"Reparaturauftrag", true);
			else
				HostObject.Set("mHeader", @"Wartungsauftrag", true);
			//  -------------------------------------------------

			//  Druckdatum in ODBC-Schreibweise
			HostObject.DefineVariable2("mDrkDatum", "D,10,0");
			HostObject.DefineVariable2("mDrkDayMon", "C,5,0");
			HostObject.Set("mDrkDatum", @"H", true);
			HostObject.Set("mDrkDayMon", @"$[mDrkDatum<5]", true);

			//  Header
			HostObject.DefineVariable2("mJobHead", "C,250,0");
			HostObject.Set("mJobHead", @"$[mHeader]-$[recAuftrag.Nr]", true);

			//  -------------------------------------------------
			HostObject.DefineVariable2("cTermin", "C,8,0");
			HostObject.DefineVariable2("cBezeich", "C,50,0");
			HostObject.Set("cTermin", @"$[recAuftrag.Termin<6]$[recAuftrag.Termin>2]", true);
			if (HostObject.EvalBool("$[bDrkBez2]"))
				HostObject.Set("cBezeich", @"$[recAnlage.Bez1] $[recAnlage.Bez2]", true);
			else
				HostObject.Set("cBezeich", @"$[recAnlage.Bez1]", true);
			if (HostObject.IsEmpty("cBezeich"))
				HostObject.Set("cBezeich", @"Anlagen-Nr", true);

			// --------------------------------------------------
			//  Erste Seite initialisieren

			HostObject.WriteLine(HostObject.EvalString(@"INITPAGESIZE"));
			HostObject.WriteLine(HostObject.EvalString(@"STARTJOB $[mJobHead]"));
			HostObject.WriteLine(HostObject.EvalString(@"TARGETNAME $[mDrkDatum>4]-$[mDrkDayMon>2]-$[mDrkDayMon<2]_$[mJobHead]"));
			HostObject.WriteLine(HostObject.EvalString(@"TRANSPARENT"));
			HostObject.WriteLine(HostObject.EvalString(@"STARTPAGE"));
			HostObject.WriteLine(HostObject.EvalString(@"DEVICE $[mDevice]"));
			HostObject.Set("Zeile", @"0", true);
			SUB_Kopf();
			SUB_subAufText();
			SUB_subDetails();
			SUB_subMessDat();
			SUB_subLines();

			// --------------------------------------------------
			//  letzte Seite abschliessen
			if (HostObject.EvalBool("($[Zeile]) = (0)"))
				goto NoFussLast;
			HostObject.Set("Zeile", @"$[ZlMax]", true);
			HostObject.ProcessResource("FussSeite");
			HostObject.WriteLine(HostObject.EvalString(@"ENDPAGE"));
			NoFussLast:
			HostObject.WriteLine(HostObject.EvalString(@"ENDJOB"));

			return true;
		}


		bool SUB_subNadel()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von OnPreReport
			//  ------------------ Nadeldrucker OKI 380
			//  fntLITT=Courier 20 cpi,10,N
			//  fntHDR=Courier 15 cpi,10,F
			//  fntTXT=Courier 12 cpi,10,N

			//  ------------------ Nadeldrucker allgemein
			HostObject.Set("fntLITT", @"!Courier New,10,1636,N", true);
			HostObject.Set("fntHDR", @"!Courier New,10,1200,F", true);
			HostObject.Set("fntTXT", @"!Courier New,10,1200,N", true);

			return HostObject.VariablesPop();
		}

		bool SUB_subLaser()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von OnPreReport
			//  ------------------ Nadeldrucker allgemein
			HostObject.Set("fntLITT", @"Arial,9,N", true);
			HostObject.Set("fntHDR", @"Arial,10,F", true);
			HostObject.Set("fntTXT", @"Arial,10,N", true);

			return HostObject.VariablesPop();
		}

		/*
		bool SUB_loopMAIN()
		{
			HostObject.VariablesPush();

			return HostObject.VariablesPop();
		}
		*/

		/*
		bool SUB_CheckPage()
		{
			HostObject.VariablesPush();

			//  Fussbereich ausgeben, wenn letzte Zeile erreicht
			if (HostObject.EvalBool("$[Zeile] >= $[ZlMax]"))
				SUB_Fuss();
			//  Kopfbereich ausgeben, wenn erste Zeile erreicht
			if (HostObject.EvalBool("$[Zeile] = 0"))
				SUB_Kopf();

			return HostObject.VariablesPop();
		}
		*/

		/*
		bool SUB_Fuss()
		{
			HostObject.VariablesPush();

			HostObject.Set("Zeile", @"$[ZlMax]", true);
			HostObject.ProcessResource("FussSeite");

			HostObject.WriteLine(HostObject.EvalString(@"ENDPAGE"));
			//  naechste Seite anfangen
			HostObject.Set("Seite", @"  $[Seite]+1", true);
			HostObject.Set("Zeile", @"0", true);
			HostObject.WriteLine(HostObject.EvalString(@"STARTPAGE"));
			HostObject.WriteLine(HostObject.EvalString(@"DEVICE $[mDevice]"));

			return HostObject.VariablesPop();
		}
		*/

		bool SUB_Kopf()
		{
			HostObject.VariablesPush();

			HostObject.ProcessResource("KopfSeite");
			HostObject.ProcessResource("KopfDetail");

			return HostObject.VariablesPop();
		}

		bool SUB_loopMessW()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subMessDat/loopMuster
			//  Datensatzschleife recMessWert

			HostObject.DefineVariable2("cB1", "u,40,0");
			HostObject.DefineVariable2("cB2", "u,40,0");
			HostObject.Set("cB1", @"$[recMuster.Bez]", true);
			HostObject.Set("cB2", @"$[recMessW.Bez]", true);

			if (HostObject.CompareString("cB1", "=", HostObject.EvalString(@"$[cB2]")))
				HostObject.Set("cWert", @"$[recMessW.Messwert]", true);

			return HostObject.VariablesPop();
		}

		bool SUB_loopMuster()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subMessDat
			//  Datensatzschleife recMuster

			if (!HostObject.EvalBool("($[maxMessW]) > ($[cntMessW])"))
				return HostObject.VariablesPop();

			HostObject.DefineVariable2("fltMon", "C,5,0");
			HostObject.DefineVariable2("fltDate", "C,10,0");
			HostObject.DefineVariable2("cWert", "C,30,0");
			HostObject.Set("fltMon", @"$[recMessD.Datum<5]", true);
			HostObject.Set("fltDate", @"$[recMessD.Datum>4]-$[fltMon>2]-$[recMessD.Datum<2]", true);

			HostObject.DefineRecord("recMessW", "WARTUNGSMESSDATEN", 0, 18, HostObject.EvalString(@"$[recAnlage.Ident>8]$[fltDate<10]"));
			HostObject.Set("cntMessW", @" $[cntMessW] + 1", true);

			while(!HostObject.TestEof("recMessW"))
			{
				SUB_loopMessW();
				HostObject.SkipRecord("recMessW");
			}
			HostObject.ProcessResource("outMessW");
			return HostObject.VariablesPop();
		}

		bool SUB_loopZeilenM()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subMessDat
			//  Datensatzschleife recZeilen

			if (HostObject.EvalBool("($[recZeilen.Tag]) <= ($[cntMessW])"))
				return HostObject.VariablesPop();
			if (HostObject.EvalBool("($[recZeilen.Tag]) > ($[maxDetails])"))
				return HostObject.VariablesPop();

			HostObject.ProcessResource("outZeilenM");
			return HostObject.VariablesPop();
		}

		bool SUB_subMessDat()
		{
			HostObject.VariablesPush();

			//  Messdatenmuster ausgeben

			HostObject.DefineVariable2("SaveZeile", "s,2,0");
			HostObject.DefineRecord("recMuster", "WARTUNGSTYPENDATEN", 0, 8, HostObject.EvalString(@"$[recAnlage.AnlTyp>8]"));
			HostObject.DefineRecord("recMessD", "WARTUNGSMESSDATEN", 100, 8, HostObject.EvalString(@"$[recAnlage.Ident>8]"));

			HostObject.Set("SaveZeile", @"$[Zeile]", true);
			HostObject.ProcessResource("outMessHead");
			while(!HostObject.TestEof("recMuster"))
			{
				SUB_loopMuster();
				HostObject.SkipRecord("recMuster");
			}

			HostObject.DefineRecord("recZeilen", "VIRTUELLES_DATUM", 1, 6, HostObject.EvalString(@"200501"));
			while(!HostObject.TestEof("recZeilen"))
			{
				SUB_loopZeilenM();
				HostObject.SkipRecord("recZeilen");
			}

			// Zeile=$[SaveZeile]
			return HostObject.VariablesPop();
		}

		bool SUB_loopZeilenT()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subDetails
			//  Datensatzschleife recZeilen

			if (HostObject.EvalBool("($[recZeilen.Tag]) <= ($[cntTeile] + $[cntListe] + 2)"))
				return HostObject.VariablesPop();
			if (HostObject.EvalBool("($[recZeilen.Tag]) > ($[maxDetails] + 1)"))
				return HostObject.VariablesPop();

			HostObject.Set("LfdNr", @"$[LfdNr] + 1", true);
			HostObject.ProcessResource("outZeilenT");

			return HostObject.VariablesPop();
		}

		bool SUB_loopDimWerte()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subDetails/loopTeile
			//  Datensatzschleife recDim
			HostObject.DefineVariable2("cBez", "u,40,0");
			HostObject.Set("cBez", @"$[recDim.Bez]", true);

			if (HostObject.CompareString("cBez", "=", HostObject.EvalString(@"$[cDimName1]")))
				HostObject.Set("cDimWert1", @"$[recDim.Wert]", true);
			if (HostObject.CompareString("cBez", "=", HostObject.EvalString(@"$[cDimName2]")))
				HostObject.Set("cDimWert2", @"$[recDim.Wert]", true);
			if (HostObject.CompareString("cBez", "=", HostObject.EvalString(@"$[cDimName3]")))
				HostObject.Set("cDimWert3", @"$[recDim.Wert]", true);
			if (HostObject.CompareString("cBez", "=", HostObject.EvalString(@"$[cDimName4]")))
				HostObject.Set("cDimWert4", @"$[recDim.Wert]", true);

			return HostObject.VariablesPop();
		}

		bool SUB_loopTeile()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subDetails
			//  Datensatzschleife recTeile

			if (!HostObject.EvalBool("($[maxTeile]) > ($[cntTeile])"))
				return HostObject.VariablesPop();

			HostObject.DefineRecord("recDim", "WARTUNGSDIMENSIONEN", 0, 12, HostObject.EvalString(@"$[recTeile.AnlagenId>8]$[recTeile.PosNr>4]"));
			HostObject.DefineVariable2("cDimWert1", "C,40,0");
			HostObject.DefineVariable2("cDimWert2", "C,40,0");
			HostObject.DefineVariable2("cDimWert3", "C,40,0");
			HostObject.DefineVariable2("cDimWert4", "C,40,0");
			while(!HostObject.TestEof("recDim"))
			{
				SUB_loopDimWerte();
				HostObject.SkipRecord("recDim");
			}

			HostObject.Set("cntTeile", @" $[cntTeile] + 1", true);
			HostObject.ProcessResource("outTeile");

			return HostObject.VariablesPop();
		}

		bool SUB_loopTodo()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subDetails
			//  Datensatzschleife recTodo

			if (!HostObject.EvalBool("$[recTodo.Check]"))
				return HostObject.VariablesPop();
			if (!HostObject.EvalBool("($[maxListe]) > ($[cntListe])"))
				return HostObject.VariablesPop();

			HostObject.Set("cntListe", @" $[cntListe] + 1", true);
			HostObject.Set("LfdNr", @"$[LfdNr] + 1", true);
			HostObject.ProcessResource("outTodo");

			return HostObject.VariablesPop();
		}

		bool SUB_subDetails()
		{
			HostObject.VariablesPush();

			//  Ausgabe linke Seite
			HostObject.DefineVariable2("SaveZeile", "s,2,0");
			HostObject.DefineRecord("recTeile", "WARTUNGSPOSITIONEN", 0, 8, HostObject.EvalString(@"$[recAnlage.Ident>8]"));
			HostObject.DefineRecord("recTodo", "WARTUNGSPOSTEN", 0, 8, HostObject.EvalString(@"$[recAuftrag.Ident>8]"));

			HostObject.Set("SaveZeile", @"$[Zeile]", true);

			HostObject.ProcessResource("outTeilHead");
			while(!HostObject.TestEof("recTeile"))
			{
				SUB_loopTeile();
				HostObject.SkipRecord("recTeile");
			}

			HostObject.ProcessResource("outChkHead");
			while(!HostObject.TestEof("recTodo"))
			{
				SUB_loopTodo();
				HostObject.SkipRecord("recTodo");
			}

			HostObject.DefineRecord("recZeilen", "VIRTUELLES_DATUM", 1, 6, HostObject.EvalString(@"200501"));
			while(!HostObject.TestEof("recZeilen"))
			{
				SUB_loopZeilenT();
				HostObject.SkipRecord("recZeilen");
			}

			HostObject.Set("Zeile", @"$[SaveZeile]", true);
			return HostObject.VariablesPop();
		}

		bool SUB_loopZeilenE()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subLines
			//  Datensatzschleife recZeilen
			if (HostObject.EvalBool("($[Zeile]) > ($[ZlMax] - 3)"))
				HostObject.BreakRecord("recZeilen");
			if (HostObject.TestEof("recZeilen"))
				return HostObject.VariablesPop();
			HostObject.Set("LfdNr", @"$[LfdNr] + 1", true);
			HostObject.ProcessResource("outZeilenE");

			return HostObject.VariablesPop();
		}

		bool SUB_subLines()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain
			HostObject.DefineRecord("recZeilen", "VIRTUELLES_DATUM", 1, 4, HostObject.EvalString(@"2005"));
			while(!HostObject.TestEof("recZeilen"))
			{
				SUB_loopZeilenE();
				HostObject.SkipRecord("recZeilen");
			}

			HostObject.Set("LfdNr", @"$[LfdNr] + 1", true);
			HostObject.ProcessResource("outMontZeit");

			return HostObject.VariablesPop();
		}

		bool SUB_loopText()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain/subAufText
			//  Datensatzschleife recText
			HostObject.Set("mLine", @"$[mLine]$[recText.Daten]", true);
			if (HostObject.EvalBool("$[recText.Abschluss]"))
				HostObject.BreakRecord("recText");
			if (!HostObject.EvalBool("$[recText.SoftBreak] | $[recText.LineFeeds]"))
				return HostObject.VariablesPop();
			HostObject.ProcessResource("outTextZeile");
			HostObject.Set("mLine", @"", true);

			return HostObject.VariablesPop();
		}

		bool SUB_subAufText()
		{
			HostObject.VariablesPush();

			//  Unterprogramm von ReportMain
			HostObject.DefineRecord("recText", "LANGTEXTZEILEN", 0, 22, HostObject.EvalString(@"25AUAUF$[recAuftrag.Ident>15]"));
			if (HostObject.TestEof("recText"))
				return HostObject.VariablesPop();
			// IF BOOL($[recText.Abschluss])
			//   RETURN

			HostObject.DefineVariable2("mLine", "C,250,0");
			while(!HostObject.TestEof("recText"))
			{
				SUB_loopText();
				HostObject.SkipRecord("recText");
			}
			if (!HostObject.IsEmpty("mLine"))
				HostObject.ProcessResource("outTextZeile");
			HostObject.ProcessResource("outTextLine");

			return HostObject.VariablesPop();
		}
	}
}
