using System;
using System.Linq;

using BS.Shared;
using BS.Shared.Core;

using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.ReportObjects;


namespace BeWo.GpzBiberachReports
{
    public partial class Jahresauswertung : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<QueryRO>
    {
        private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1;
        private DevExpress.XtraReports.UI.DetailBand detailBand1;
        private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1;

		public Jahresauswertung()
        {
            InitializeComponent();
        }

        public void SetReportDataSource(QueryRO pRO)
        {
            //var reportDate = DateTime.Parse(pRO.Rows[0].Field1.ToString());
			var reportDate = new DateTime(DateTime.Now.Year, 1, 1);

			if (pRO.Rows != null)
			{
				DateTime dt;
				if (DateTime.TryParse(pRO.Rows[0].Field1.ToString(), out dt))
				{
					reportDate = new DateTime(dt.Year, 1, 1);

					
				}
			}
			xrLabel1.Text = String.Format("SpDi-Erhebung {0:yyyy}", reportDate);

            #region RowVariables

			// 2.1 Insgesamt betreute Personen
            int anzMaennlich = 0;
            int anzWeiblich = 0;
	        int anzMaennlichAuslaender = 0;
			int anzWeiblichAuslaender = 0;

			// 2.2 Personen in den einzelnen Leistungsbereichen
	        int anzSozioTherapieM = 0;
			int anzSozioTherapieW = 0;

			// 2.3 Längerfristig Betreute Personen in der Grundversorgung
	        int anzLaengerfristigBetreutM = 0;
			int anzLaengerfristigBetreutW = 0;
	        int anzLaengerfristigBetreuteAueslaenderW = 0;
			int anzLaengerfristigBetreuteAueslaenderM = 0;

			// 3.1 Familienstand
	        int anzLedig = 0;
	        int anzVerwitwert = 0;
	        int anzGeschieden = 0;
	        int anzVerheiratet = 0;
	        int anzGetrennt = 0;
	        int anzFamlienstandUnbekannt = 0;
			int anzPartner = 0;
			int anzPartnerMarried = 0;
			int anzEntpartnert = 0;
			int anzPartnerDead = 0;

			// 3.1a Person hat minderjährige(s) Kind(er)
	        int anzMitMinderjaehrigenKindern = 0;
	        int anzOhneMinderjaehrigenKindern = 0;
	        int anzAlterKinderUnbekannt = 0;

			// 3.2 Lebensverhältnisse
	        int anzAlleinlebend = 0;
	        int anzAlleinerziehendMitMinderjaehrigenKindern = 0;
	        int anzMitPartnerLebendMitGgfMinderjaehrigenKindern = 0;
	        int anzInBeWoLebend = 0;
	        int anzMitElternVerwandtenLebend = 0;
	        int anzInPrivaterWGLebend = 0;
	        int anzLebensverhaeltnisUnbekannt = 0;

			// 3.3 Einkommen
	        int anzUnterhaltDurchEhepartner = 0;
	        int anzUnterhaltDurchFamilie = 0;
	        int anzErwerbsBerufstaetig = 0;
	        int anzGelegenheitsarbeiten = 0;
	        int anzErwerbsBerufsunfaehigkeitsrente = 0;
	        int anzALGI = 0;
	        int anzALGII = 0;
	        int anzKrankengeld = 0;
	        int anzAltersrentePensionWitwenrente = 0;
	        int anzGrundsicherungNachSGBXII = 0;
	        int anzEigenesVermoegenErsparnisse = 0;
	        int anzUebergangsgeld = 0;
	        int anzWfbM = 0;
	        int anzEinkommenUnbekannt = 0;
	        int anzEinkommenSonstiges = 0;

			// 3.4 Alter
	        int anz18bis27W = 0;
			int anz28bis40W = 0;
			int anz41bis60W = 0;
			int anzUeber60W = 0;
			int anzAlterUnbekanntW = 0;
			int anz18bis27M = 0;
			int anz28bis40M = 0;
			int anz41bis60M = 0;
			int anzUeber60M = 0;
			int anzAlterUnbekanntM = 0;

			// 3.5 Diagnosen
	        int anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenM = 0;
	        int anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtM = 0;
	        int anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseM = 0;
	        int anzAffektiveStoerungenZBDepressionManieM = 0;
			int anzNeurotischeBelastungsUndsomatoformeStoerungM = 0;
			int anzVerhaltensauffaelligkeitMitKoerperlicherStoerungM = 0;
			int anzPersoenlichkeitsUndVerhaltensstoerungM = 0;
			int anzIntelligenzminderungM = 0;
			int anzNichtNaeherBezeichnetePsychischeStoerungM = 0;
			int anzAnderePsychischeStoerungM = 0;
			int anzNichtpsychischeStoerungM = 0;
			int anzUnklareDiagnoseFormulierungenM = 0;
			int anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenM = 0;
			int anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenW = 0;
			int anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtW = 0;
			int anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseW = 0;
			int anzAffektiveStoerungenZBDepressionManieW = 0;
			int anzNeurotischeBelastungsUndsomatoformeStoerungW = 0;
			int anzVerhaltensauffaelligkeitMitKoerperlicherStoerungW = 0;
			int anzPersoenlichkeitsUndVerhaltensstoerungW = 0;
			int anzIntelligenzminderungW = 0;
			int anzNichtNaeherBezeichnetePsychischeStoerungW = 0;
			int anzAnderePsychischeStoerungW = 0;
			int anzNichtpsychischeStoerungW = 0;
			int anzUnklareDiagnoseFormulierungenW = 0;
			int anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenW = 0;

			// 3.6 Gleichzeitig bestehende behandlungsbedürftige körperliche Erkrankung
	        int anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungJa = 0;
			int anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungNein = 0;
			int anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungUnbekannt = 0;

			// 3.7 Gleichzeitig bestehende behandlungsbedürftige Suchtproblematik
			int anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikJa = 0;
			int anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikNein = 0;
			int anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikUnbekannt = 0;

			// 3.8 Gleichzeitig bestehende, für die Betreuung relevante Minderbegabung
			int anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungJa = 0;
			int anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungNein = 0;
			int anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungUnbekannt = 0;

			// 3.9 Zuweisungswege
	        int anzZuweisungDurchPsychiatrischesKrankenhaus = 0;
	        int anzZuweisungDurchAndereKlinik = 0;
	        int anzZuweisungDurchPIA = 0;
	        int anzZuweisungDurchNiedergelassenerNervenarzt = 0;
	        int anzZuweisungDurchNiedergelassenerArzt = 0;
	        int anzZuweisungDurchSozialpsychiatrischeEinrichtung = 0;
	        int anzZuweisungDurchREHAEinrichtung = 0;
	        int anzZuweisungDurchAllgemeinerSozialdienst = 0;
	        int anzZuweisungDurchAmtFuerOeffentlicheOrdnungGericht = 0;
	        int anzZuweisungDurchSozialamt = 0;
	        int anzZuweisungDurchGesundheitsamt = 0;
	        int anzZuweisungDurchARGE = 0;
	        int anzZuweisungDurchSozialstationNachbarschaftshilfe = 0;
	        int anzZuweisungDurchBeratungsstelle = 0;
	        int anzZuweisungDurchTherapeut = 0;
	        int anzZuweisungDurchEhrenamtlicher = 0;
	        int anzZuweisungDurchNachbarAngehoeriger = 0;
	        int anzZuweisungDurchEigeninitiativePatient = 0;
	        int anzZuweisungDurchKollegeArbeitgeber = 0;
	        int anzZuweisungDurchGesetzlicherBetreuer = 0;
	        int anzZuweisungDurchWohnungslosenhilfe = 0;
	        int anzZuweisungDurchBewaehrungshilfe = 0;
	        int anzZuweisungDurchUnbekannt = 0;

			// 4.1 Art der Betreuung im Rahmen der Grundversorgung
	        int anzKurzbetreuung = 0;
	        int anzLangfristigeBetreuung = 0;
	        int anzIndirekteBetreuung = 0;
			int anzKurzbetreuungErstbetreuung = 0;
			int anzLangfristigeBetreuungErstbetreuung = 0;
			int anzIndirekteBetreuungErstbetreuung = 0;

	        int anzErstverordnung = 0;
	        int anzFolgeverordnung = 0;

			// 4.2 Dauer der längerfristigen Betreuung im Rahmen der Grundversorger
	        int anzBis3MonateBetreuung5Bis10Kontakte = 0;
			int anzBis3MonateBetreuung11Bis20Kontakte = 0;
			int anzBis3MonateBetreuung21Bis40Kontakte = 0;
			int anzBis3MonateBetreuung40PlusKontakte = 0;
			int anzBis3MonateBetreuungSumme = 0;

			int anz3Bis6MonateBetreuung5Bis10Kontakte = 0;
			int anz3Bis6MonateBetreuung11Bis20Kontakte = 0;
			int anz3Bis6MonateBetreuung21Bis40Kontakte = 0;
			int anz3Bis6MonateBetreuung40PlusKontakte = 0;
			int anz3Bis6MonateBetreuungSumme = 0;

			int anz7Bis12MonateBetreuung5Bis10Kontakte = 0;
			int anz7Bis12MonateBetreuung11Bis20Kontakte = 0;
			int anz7Bis12MonateBetreuung21Bis40Kontakte = 0;
			int anz7Bis12MonateBetreuung40PlusKontakte = 0;
			int anz7Bis12MonateBetreuungSumme = 0;

			// 4.3 Beendigung längerfristiger Betreuung in der Grundversorgung im Berichtsjahr
	        int anzBeendigungInGegenseitigemEinvernehmenOhneWeiterbetreuungDurchAnderenPsychFachdienst = 0;
	        int anzBeendigungDurchVermittlungInAnschlussbetreuung = 0;
	        int anzBeendigungDurchUebergangInSoziotherapie = 0;
	        int anzBeendigungDurchKlient = 0;
	        int anzBeendigungDurchDienst = 0;
	        int anzBeendigungDurchEndeDerRegionalenZustaendigkeit = 0;
	        int anzBeendigungDurchTodAusserSuizid = 0;
	        int anzBeendigungDurchSuizid = 0;
	        int anzBeendigungDurchSonstiges = 0;

			// 5.1 Anzahl der Soziotherapiefälle
	        int anzSoziotherapiefaelleErstverordnungen = 0;
			int anzSoziotherapiefaelleFolgeverordnungen = 0;

			// 6.1.2 Anzahl gemeinsamer Klientinnen mit der PIA
	        int anzGemeinsamerKlientenMitDerPIA = 0;

            #endregion

	        int customercount = 0;

            var customerList = DAOFactory.GenericDAO.GetAllActiveAndArchived<Customer>(); //.Where(c => c.SupportConcepts.Count > 0 && c.SupportConcepts.Any(sc => sc.StartDate.Value.Year == reportDate.Year));

            var varFieldDefs = DAOFactory.GenericDAO.GetAllActive<VarFieldDef>();
            var oid2VarfieldDef = varFieldDefs.ToDictionary(varFieldDef => varFieldDef.Oid.Value);
			
            foreach (var customer in customerList)
            {
	            bool hatSoziotherapie = false;

	            CostBearer2SupportConcept soPsyDiC2S = null;
	            foreach (var sc in customer.SupportConcepts)
	            {
		            if (sc.IsActive != ActivationTypeId.Deleted)
		            {
			            foreach (var cb in sc.CostBearer2SupportConceptList)
			            {
				            if (cb.ApprovedStartDate.HasValue && cb.ApprovedStartDate < reportDate.AddYears(1) &&
				                cb.ApprovedEndDate.HasValue &&
				                cb.ApprovedEndDate >= reportDate)

				            {
					            if (cb.ApprovalPeriodList.Any(
									a => a.ServiceCategory != null && a.ServiceCategory.Name == "Sozialpsychiatrischer Dienst"))
					            {
									soPsyDiC2S = cb;
									customercount++;
					            }
								if (cb.ApprovalPeriodList.Any(
									a => a.ServiceCategory != null && a.ServiceCategory.Name == "Soziotherapie"))
								{
									hatSoziotherapie = true;
								}
				            }
				                
				           
			            }
		            }
	            }

	            if (hatSoziotherapie)
	            {
		            if (
			            customer.SupportConcepts.Any(
				            a =>
					            a.IsActive != ActivationTypeId.Deleted &&
					            a.CostBearer2SupportConceptList.Any(
						            b =>
							            b.ServiceRecords.Any(
								            c => c.ServiceDescription.Name == "Grundpauschale" && c.Start.Value.Year == reportDate.Year))))
			            anzSoziotherapiefaelleErstverordnungen++;
		            else
			            anzSoziotherapiefaelleFolgeverordnungen++;
	            }

	            var hatMigrationshintergrund = false;
				foreach (var item in customer.VarFieldValueList.Where(item => item.VarFieldDefOid.Equals(oid2VarfieldDef.First(f => f.Value.Label.Equals("Migrationshintergrund")).Key)))
					hatMigrationshintergrund = item.SerializedValue.Contains("true");

				if (hatSoziotherapie)
	            {
					if (customer.Person.Sex.Equals(Sex.Male))
						anzSozioTherapieM++;
					else
						anzSozioTherapieW++;

	            }

				anzGemeinsamerKlientenMitDerPIA += oid2VarfieldDef.Where(item => item.Value.Label.Equals("dabei gleichzeitig bei PIA Arzt")).Count(item => customer.VarFieldValueList.Any(a => a.VarFieldDefOid.Equals(item.Value.Oid)));

				if (soPsyDiC2S != null)
	            {
					// Längerfristig betreut
					int recordsDiesesJahr = soPsyDiC2S.ServiceRecords.Where(sr => sr.Start >= reportDate && sr.Start < reportDate.AddYears(1)).Count();

		            if (customer.TerminationReason != null)
		            {
			            switch (customer.TerminationReason.Value)
			            {
				            case "Im Gegenseitigen Einvernehmen":
					            anzBeendigungInGegenseitigemEinvernehmenOhneWeiterbetreuungDurchAnderenPsychFachdienst++;
					            break;
				            case "Einseitige Beendigung durch Klient":
					            anzBeendigungDurchKlient++;
					            break;
				            case "natürlicher Tod":
					            anzBeendigungDurchTodAusserSuizid++;
					            break;
				            case "Suizid":
					            anzBeendigungDurchSuizid++;
					            break;
				            case "Wegzug":
					            anzBeendigungDurchSonstiges++;
					            break;
				            case "sonstige Gründe":
					            anzBeendigungDurchSonstiges++;
					            break;
			            }
		            }

					#region 4.1. Leistung nur indirekt Leistung, wenn eine direkte Leistung dabei ist, dann nicht mehr zählen
						//anzIndirekteBetreuungErstbetreuung
					#endregion

					

		            // Längerfristig betreut
					if (recordsDiesesJahr >= 5)
		            {
						#region 3.1 Familienstand

						switch (customer.Person.FamilyStatus)
						{
							case FamilyStatus.Divorced:
								anzGeschieden++;
								break;
							case FamilyStatus.Married:
								anzVerheiratet++;
								break;
							case FamilyStatus.PartnerDivorced:
								anzGetrennt++;
								break;
							case FamilyStatus.Single:
								anzLedig++;
								break;
							case FamilyStatus.Widowed:
								anzVerwitwert++;
								break;
							case FamilyStatus.Partner:
								anzPartner++;
								break;
							case FamilyStatus.PartnerMarried:
								anzPartnerMarried++;
								break;
							case FamilyStatus.Entpartnert:
								anzEntpartnert++;
								break;
							case FamilyStatus.PartnerDead:
								anzPartnerDead++;
								break;
							default:
								anzFamlienstandUnbekannt++;
								break;
						}


						#endregion

						#region 3.2 Lebensverhältnisse

						var def = oid2VarfieldDef.First(v => v.Value.Label.Equals("Lebensverhältnisse")).Value;
						var lvvalue = customer.VarFieldValueList.FirstOrDefault(v => v.VarFieldDefOid.Equals(def.Oid));

						if (lvvalue != null)
						{
							var type = Type.GetType(lvvalue.TypeName);
							var label = Utils.XMLDeserializeFromString(lvvalue.SerializedValue, type).ToString();

							switch (label)
							{
								case "lebt alleine":
									anzAlleinlebend++;
									break;
								case "lebt mit Eltern/Kindern/Verwandten":
									anzMitElternVerwandtenLebend++;
									break;
								case "lebt in priv. Wohngemeinschaft":
									anzInPrivaterWGLebend++;
									break;
								case "lebt mit (Ehe-)Partner/in":
									anzMitPartnerLebendMitGgfMinderjaehrigenKindern++;
									break;
								case "lebt in betreuter Wohnform":
									anzInBeWoLebend++;
									break;
								case "Lebensverhältnisse unbekannt":
									anzLebensverhaeltnisUnbekannt++;
									break;
								default:
									anzLebensverhaeltnisUnbekannt++;
									break;
							}
						}
						else
						{
							anzLebensverhaeltnisUnbekannt++;
						}

						#endregion

						#region 3.3 Einkommen

						var finanzielleSituation =
							oid2VarfieldDef.First(f => f.Value.Label.ToLower().Equals("finanzielle situation")).Value;
						var klientenSituation =
							customer.VarFieldValueList.FirstOrDefault(f => f.VarFieldDefOid.Equals(finanzielleSituation.Oid));

						if (klientenSituation != null)
						{
							var type = Type.GetType(klientenSituation.TypeName);
							var situation = Utils.XMLDeserializeFromString(klientenSituation.SerializedValue, type).ToString();

							switch (situation)
							{
								case "Erwerbs-/Berufstätigkeit":
									anzErwerbsBerufstaetig++;
									break;
								case "Gelegenheitsarbeiten":
									anzGelegenheitsarbeiten++;
									break;
								case "Unterhalt d. Familie":
									anzUnterhaltDurchFamilie++;
									break;
								case "Unterhalt d. Ehepartner":
									anzUnterhaltDurchEhepartner++;
									break;
								case "Arbeitslosengeld":
									anzALGI++;
									break;
								case "Grundsicherung":
									anzGrundsicherungNachSGBXII++;
									break;
								case "Krankengeld":
									anzKrankengeld++;
									break;
								case "Altersrente/-pension/Witwenrente":
									anzAltersrentePensionWitwenrente++;
									break;
								case "Ausbildungsgeld":
									anzEinkommenSonstiges++;
									break;
								case "Kindergeld":
									anzEinkommenSonstiges++;
									break;
								case "Erwerbs-/Berufsmindernd":
									anzErwerbsBerufsunfaehigkeitsrente++;
									break;
								case "ALG II":
									anzALGII++;
									break;
								case "unbekannt":
									anzEinkommenUnbekannt++;
									break;
								case "Wohngeld":
									anzEinkommenSonstiges++;
									break;
								case "sonstige":
									anzEinkommenSonstiges++;
									break;
								default:
									anzEinkommenUnbekannt++;
									break;
							}
						}
						else
						{
							anzEinkommenUnbekannt++;
						}

						#endregion

						#region 3.4 Alter

						var geb = customer.Person.DateOfBirth;

						if (geb == null)
						{
							if (customer.Person.Sex.Equals(Sex.Male))
								anzAlterUnbekanntM++;
							else
								anzAlterUnbekanntW++;
						}
						else if (geb.Value < DateTime.Now)
						{
							var alter = (new DateTime(1, 1, 1) + (DateTime.Now - geb.Value)).Year - 1;

							if (customer.Person.Sex.Equals(Sex.Male))
							{
								if (alter < 28)
									anz18bis27M++;
								else if (alter < 41)
									anz28bis40M++;
								else if (alter < 61)
									anz41bis60M++;
								else if (alter > 60)
									anzUeber60M++;
							}
							else
							{
								if (alter < 28)
									anz18bis27W++;
								else if (alter < 41)
									anz28bis40W++;
								else if (alter < 61)
									anz41bis60W++;
								else if (alter > 60)
									anzUeber60W++;
							}
						}

						#endregion

						#region 3.5 Diagnose

						
						foreach (var d2c in customer.Diagnosis2CustomerList)
						{
							var code = d2c.ICD10DiagnosisCode;

							if (code.StartsWith("F0"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenM++;
								else
									anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenW++;
							else if (code.StartsWith("F1"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtM++;
								else
									anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtW++;

							else if (code.StartsWith("F2"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseM++;
								else
									anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseW++;
							else if (code.StartsWith("F3"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzAffektiveStoerungenZBDepressionManieM++;
								else
									anzAffektiveStoerungenZBDepressionManieW++;
							else if (code.StartsWith("F4"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzNeurotischeBelastungsUndsomatoformeStoerungM++;
								else
									anzNeurotischeBelastungsUndsomatoformeStoerungW++;
							else if (code.StartsWith("F5"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzVerhaltensauffaelligkeitMitKoerperlicherStoerungM++;
								else
									anzVerhaltensauffaelligkeitMitKoerperlicherStoerungW++;
							else if (code.StartsWith("F6"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzPersoenlichkeitsUndVerhaltensstoerungM++;
								else
									anzPersoenlichkeitsUndVerhaltensstoerungW++;
							else if (code.StartsWith("F7"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzIntelligenzminderungM++;
								else
									anzIntelligenzminderungW++;
							else if (code.StartsWith("F99"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzNichtNaeherBezeichnetePsychischeStoerungM++;
								else
									anzNichtNaeherBezeichnetePsychischeStoerungW++;
							else if (code.StartsWith("F8") || code.StartsWith("F9"))
								if (customer.Person.Sex.Equals(Sex.Male))
									anzAnderePsychischeStoerungM++;
								else
									anzAnderePsychischeStoerungW++;
							else if (customer.Person.Sex.Equals(Sex.Male))
								anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenM++;
							else
								anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenW++;

							break;
						}

						if (!customer.Diagnosis2CustomerList.Any())
							if (customer.Person.Sex.Equals(Sex.Male))
								anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenM++;
							else
								anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenW++;

						#endregion

						#region 3.6 Gleichzeitig bestehende behandlungsbedürftige körperliche Erkrankung



						foreach (
							var item in
								customer.VarFieldValueList.Where(
									item =>
										item.VarFieldDefOid.Equals(
											oid2VarfieldDef.First(
												f => f.Value.Label.Equals("Gleichzeitig bestehende behandlungsbedürftige körperliche Erkrankung"))
												.Key)))
						{
							if (item.SerializedValue.Contains("true"))
								anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungJa++;
							if (item.SerializedValue.Contains("false"))
								anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungNein++;
						}
						if (
							customer.VarFieldValueList.Where(
								item =>
									item.VarFieldDefOid.Equals(
										oid2VarfieldDef.First(
											f => f.Value.Label.Equals("Gleichzeitig bestehende behandlungsbedürftige körperliche Erkrankung"))
											.Key)).ToList().Count == 0)
							anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungUnbekannt++;

						#endregion

						#region 3.7 Gleichzeitig bestehende behandlungsbedürftige Suchtproblematik

						foreach (
							var item in
								customer.VarFieldValueList.Where(
									item =>
										item.VarFieldDefOid.Equals(
											oid2VarfieldDef.First(
												f => f.Value.Label.Equals("Gleichzeitig bestehende behandlungsbedürftige Suchtproblematik")).Key)))
						{
							if (item.SerializedValue.Contains("true"))
								anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikJa++;
							if (item.SerializedValue.Contains("false"))
								anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikNein++;
						}
						if (
							customer.VarFieldValueList.Where(
								item =>
									item.VarFieldDefOid.Equals(
										oid2VarfieldDef.First(
											f => f.Value.Label.Equals("Gleichzeitig bestehende behandlungsbedürftige Suchtproblematik")).Key))
								.ToList()
								.Count == 0)
							anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikUnbekannt++;

						#endregion

						#region 3.8 Gleichzeitig bestehende, für die Betreuung relevante Minderbegabung

						foreach (
							var item in
								customer.VarFieldValueList.Where(
									item =>
										item.VarFieldDefOid.Equals(
											oid2VarfieldDef.First(
												f => f.Value.Label.Equals("Gleichzeitig bestehende, für die Betreuung relevante Minderbegabung"))
												.Key)))
						{
							if (item.SerializedValue.Contains("true"))
								anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungJa++;
							if (item.SerializedValue.Contains("false"))
								anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungNein++;
						}
						if (
							customer.VarFieldValueList.Where(
								item =>
									item.VarFieldDefOid.Equals(
										oid2VarfieldDef.First(
											f => f.Value.Label.Equals("Gleichzeitig bestehende, für die Betreuung relevante Minderbegabung"))
											.Key)).ToList().Count == 0)
							anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungUnbekannt++;

						#endregion

						#region 3.9 Zuweisungswege

						var zValues = oid2VarfieldDef.FirstOrDefault(v => v.Value.Label.Equals("Zuweisungswege")).Value;
						if (zValues != null)
						{
							var zValue = customer.VarFieldValueList.FirstOrDefault(v => v.VarFieldDefOid.Equals(zValues.Oid));

							if (zValue != null)
							{
								var zType = Type.GetType(zValue.TypeName);
								var zLabel = Utils.XMLDeserializeFromString(zValue.SerializedValue, zType).ToString();

								switch (zLabel)
								{
									case "Psychatrisches Krankenhaus":
										anzZuweisungDurchPsychiatrischesKrankenhaus++;
										break;
									case "Andere Klinik":
										anzZuweisungDurchAndereKlinik++;
										break;
									case "PIA":
										anzZuweisungDurchPIA++;
										break;
									case "Niedergelassener Nervenarzt":
										anzZuweisungDurchNiedergelassenerNervenarzt++;
										break;
									case "Niedergelassener Arzt":
										anzZuweisungDurchNiedergelassenerArzt++;
										break;
									case "Sozialpsychatrische Einrichtung":
										anzZuweisungDurchSozialpsychiatrischeEinrichtung++;
										break;
									case "REHA-Einrichtung":
										anzZuweisungDurchREHAEinrichtung++;
										break;
									case "Allgemeiner Sozialdienst":
										anzZuweisungDurchAllgemeinerSozialdienst++;
										break;
									case "Amt für Öffentliche Ordnung / Gericht":
										anzZuweisungDurchAmtFuerOeffentlicheOrdnungGericht++;
										break;
									case "Sozialamt":
										anzZuweisungDurchSozialamt++;
										break;
									case "Gesundheitsamt":
										anzZuweisungDurchGesundheitsamt++;
										break;
									case "ARGE":
										anzZuweisungDurchARGE++;
										break;
									case "Sozialstation / Nachbarschaftshilfe":
										anzZuweisungDurchSozialstationNachbarschaftshilfe++;
										break;
									case "Beratungsstelle":
										anzZuweisungDurchBeratungsstelle++;
										break;
									case "Therapeut/in":
										anzZuweisungDurchTherapeut++;
										break;
									case "Ehrenamtliche/r":
										anzZuweisungDurchEhrenamtlicher++;
										break;
									case "Nachbarn / Angehörige":
										anzZuweisungDurchNachbarAngehoeriger++;
										break;
									case "Eigeninitiative der Patientin/des Patienten":
										anzZuweisungDurchEigeninitiativePatient++;
										break;
									case "KollegIn / Arbeitgeber":
										anzZuweisungDurchKollegeArbeitgeber++;
										break;
									case "Gesetzlicher Betreuer":
										anzZuweisungDurchGesetzlicherBetreuer++;
										break;
									case "Wohnungslosenhilfe":
										anzZuweisungDurchWohnungslosenhilfe++;
										break;
									case "Bewährungshilfe":
										anzZuweisungDurchBewaehrungshilfe++;
										break;
									case "Unbekannt":
										anzZuweisungDurchUnbekannt++;
										break;
								}
							}
						}

						#endregion

			            #region 4.2 Dauer der längerfristigen Betreuung im Rahmen der Grundversorgung

						//nur indirekt egal wieviele Kontakte
						// direkt 
			            var ersterKontakt = new DateTime(1900, 1, 1);
			            var letzterKontakt = new DateTime(1900, 1, 1);

			            var ersterSC = customer.SupportConcepts.FirstOrDefault();
			            if (ersterSC != null)
			            {
				            var y = ersterSC.ServiceRecordList.FirstOrDefault();
				            if (y != null)
				            {
					            ersterKontakt = y.Start.Value;
					            letzterKontakt = ersterKontakt;
				            }
			            }

			            foreach (var item in customer.SupportConcepts)
			            {
				            foreach (var sr in item.ServiceRecordList)
				            {
					            if (ersterKontakt > sr.Start.Value)
						            ersterKontakt = sr.Start.Value;

					            if (letzterKontakt < sr.End.Value)
						            letzterKontakt = sr.End.Value;
				            }
			            }

			            var zeitraum = letzterKontakt - ersterKontakt;

			            // bis 3 Monate
			            if (ersterKontakt.Month != 2 && zeitraum.Days < 90 || ersterKontakt.Month == 2 && zeitraum.Days < 89)
			            {
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 5 && a.ServiceRecordList.Count < 11))
					            anzBis3MonateBetreuung5Bis10Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 10 && a.ServiceRecordList.Count < 21))
					            anzBis3MonateBetreuung11Bis20Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 20 && a.ServiceRecordList.Count < 41))
					            anzBis3MonateBetreuung21Bis40Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 40))
					            anzBis3MonateBetreuung40PlusKontakte++;
			            }
			            else if (zeitraum.Days < 185) // 3-6 Monate
			            {
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 5 && a.ServiceRecordList.Count < 11))
					            anz3Bis6MonateBetreuung5Bis10Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 10 && a.ServiceRecordList.Count < 21))
					            anz3Bis6MonateBetreuung11Bis20Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 20 && a.ServiceRecordList.Count < 41))
					            anz3Bis6MonateBetreuung21Bis40Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 40))
					            anz3Bis6MonateBetreuung40PlusKontakte++;
			            }
			            else if ((zeitraum.Days <= 366 && IstSchaltjahr(letzterKontakt.Year) && letzterKontakt.Month > 2 ||
			                      zeitraum.Days <= 366 && IstSchaltjahr(ersterKontakt.Year) && ersterKontakt.Month <= 2) ||
			                     zeitraum.Days <= 365) // 7-12 Monate
			            {
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 5 && a.ServiceRecordList.Count < 11))
					            anz7Bis12MonateBetreuung5Bis10Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 10 && a.ServiceRecordList.Count < 21))
					            anz7Bis12MonateBetreuung11Bis20Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 20 && a.ServiceRecordList.Count < 41))
					            anz7Bis12MonateBetreuung21Bis40Kontakte++;
				            if (customer.SupportConcepts.Any(a => a.ServiceRecordList.Count > 40))
					            anz7Bis12MonateBetreuung40PlusKontakte++;
			            }

			            #endregion

			            if (customer.Person.Sex == Sex.Male)
			            {
				            anzLaengerfristigBetreutM++;
				            if (hatMigrationshintergrund)
					            anzLaengerfristigBetreuteAueslaenderM++;
			            }
			            else
			            {
				            anzLaengerfristigBetreutW++;
				            if (hatMigrationshintergrund)
					            anzLaengerfristigBetreuteAueslaenderW++;
			            }

			            anzLangfristigeBetreuung++;

			            if (
				            customer.VarFieldValueList.Any(
					            item =>
						            item.VarFieldDefOid.Equals(oid2VarfieldDef.First(f => f.Value.Label.Equals("Vorjahr übernommen")).Key)))
				            anzLangfristigeBetreuungErstbetreuung++;
		            }
		            else
		            {
						anzKurzbetreuung++;

						if (
							customer.VarFieldValueList.Any(
								item =>
									item.VarFieldDefOid.Equals(oid2VarfieldDef.First(f => f.Value.Label.Equals("Vorjahr übernommen")).Key)))
							anzKurzbetreuungErstbetreuung++;
		            }

		            #region Klientenzahl

		            if (customer.Person.Sex == Sex.Male)
		            {
			            anzMaennlich++;
			            if (hatMigrationshintergrund)
				            anzMaennlichAuslaender++;
		            }
		            else
		            {
			            anzWeiblich++;
			            if (hatMigrationshintergrund)
				            anzWeiblichAuslaender++;
		            }

		            #endregion
	            }
            }

	        anzMLabel.Text = string.Format("{0}", anzMaennlich);
			anzWLabel.Text = string.Format("{0}", anzWeiblich);
			anzMAuslaenderLabel.Text = string.Format("{0}", anzMaennlichAuslaender);
			anzWAuslaenderLabel.Text = string.Format("{0}", anzWeiblichAuslaender);

	        anzAuslaenderGesamtLabel.Text = string.Format("{0}", anzWeiblichAuslaender + anzMaennlichAuslaender);
			anzKlientenGesamtLabel.Text = string.Format("{0}", anzMaennlich + anzWeiblich);

			anzMSozioLabel.Text = string.Format("{0}", anzSozioTherapieM);
			anzWSozioLabel.Text = string.Format("{0}", anzSozioTherapieW);
			anzSozioGesamtLabel.Text = string.Format("{0}", anzSozioTherapieM + anzSozioTherapieW);

			anzLedigLabel.Text = string.Format("{0}", anzLedig);
			anzVerwitwetLabel.Text = string.Format("{0}", anzVerwitwert);
			anzGeschiedenLabel.Text = string.Format("{0}", anzGeschieden);
	        anzVerheiratetLabel.Text = string.Format("{0}", anzVerheiratet);
			anzGetrenntLabel.Text = string.Format("{0}", anzGetrennt);
			anzPartnerschaftLabel.Text = string.Format("{0}", anzPartner);
			anzVerpartnertLabel.Text = string.Format("{0}", anzPartnerMarried);
			anzEntpartnertLabel.Text = string.Format("{0}", anzEntpartnert);
			anzPartnerhinterbliebenLabel.Text = string.Format("{0}", anzPartnerDead);
			anzFamilienstatusUnbekanntLabel.Text = string.Format("{0}", anzFamlienstandUnbekannt);
	        anzFamilienstandSummeLabel.Text = string.Format("{0}", anzLedig + anzVerheiratet + anzGeschieden + anzVerwitwert + anzGetrennt +
				+ anzPartner + anzPartnerMarried + anzEntpartnert + anzPartnerDead + anzFamlienstandUnbekannt);

	        anzLaengerFristigMLabel.Text = string.Format("{0}", anzLaengerfristigBetreutM);
			anzLaengerFristigWLabel.Text = string.Format("{0}", anzLaengerfristigBetreutW);
			anzLaengerFristigMAuslaenderLabel.Text = string.Format("{0}", anzLaengerfristigBetreuteAueslaenderM);
			anzLaengerFristigWAuslaenderLabel.Text = string.Format("{0}", anzLaengerfristigBetreuteAueslaenderW);
			anzLaengerFristigGesamtAuslaenderLabel.Text = string.Format("{0}", anzLaengerfristigBetreuteAueslaenderW + anzLaengerfristigBetreuteAueslaenderM);
	        anzLaengerFristigGesamtLabel.Text = string.Format("{0}", anzLaengerfristigBetreutW + anzLaengerfristigBetreutM);

			anzFamilienstandSumme23Label.Text = anzLaengerFristigGesamtLabel.Text;

			anzLebtAlleinLabel.Text = string.Format("{0}", anzAlleinlebend);
			lebtAlleinerziehendMitMindKindLabel.Text = string.Format("{0}", anzAlleinerziehendMitMinderjaehrigenKindern);
	        anzLebtMitPartnerUndGgfMindKindern.Text = string.Format("{0}", anzMitPartnerLebendMitGgfMinderjaehrigenKindern);
			anzLebtInBeWoLabel.Text = string.Format("{0}", anzInBeWoLebend);
			anzLebtInPrivaterWGLabel.Text = string.Format("{0}", anzInPrivaterWGLebend);
			anzLebtMitElternVerwandtenLabel.Text = string.Format("{0}", anzMitElternVerwandtenLebend);
			anzLebensverhaeltnisseUnbekanntLabel.Text = string.Format("{0}", anzLebensverhaeltnisUnbekannt);
			anzLebensverhaeltnisseSummeLabel.Text = string.Format("{0}", anzAlleinlebend + anzInBeWoLebend + anzInPrivaterWGLebend + anzMitElternVerwandtenLebend + anzLebensverhaeltnisUnbekannt + anzAlleinerziehendMitMinderjaehrigenKindern + anzMitPartnerLebendMitGgfMinderjaehrigenKindern);

			anzUnterhaltEhepartnerLabel.Text = string.Format("{0}", anzUnterhaltDurchEhepartner);
			anzUnterhaltBerufstaetigkeitLabel.Text = string.Format("{0}", anzErwerbsBerufstaetig);
			anzUnterhaltGelegenheitsarbeitenLabel.Text = string.Format("{0}", anzGelegenheitsarbeiten);
			anzUnterhaltFamilieLabel.Text = string.Format("{0}", anzUnterhaltDurchFamilie);
			anzBerufsunfaehigkeitsrenteLabel.Text = string.Format("{0}", anzErwerbsBerufsunfaehigkeitsrente);
			anzUnterhaltALG1Label.Text = string.Format("{0}", anzALGI);
			anzUnterhaltALG2Label.Text = string.Format("{0}", anzALGII);
			anzUnterhaltKrankengeldLabel.Text = string.Format("{0}", anzKrankengeld);
			anzUnterhaltRenteLabel.Text = string.Format("{0}", anzAltersrentePensionWitwenrente);
			anzUnterhaltGrundsicherungLabel.Text = string.Format("{0}", anzGrundsicherungNachSGBXII);
			anzUnterhaltErsparnisseLabel.Text = string.Format("{0}", anzEigenesVermoegenErsparnisse);
			anzUnterhaltUebergangsgeldLabel.Text = string.Format("{0}", anzUebergangsgeld);
			anzUnterhaltWfbMLabel.Text = string.Format("{0}", anzWfbM);
			anzUnterhaltUnbekanntLabel.Text = string.Format("{0}", anzEinkommenUnbekannt);
	        anzEinkommenSonstigesLabel.Text = string.Format("{0}", anzEinkommenSonstiges);

	        anzUnterhaltSummeLabel.Text = string.Format("{0}", anzUnterhaltDurchEhepartner +
	                                                           anzErwerbsBerufstaetig +
	                                                           anzGelegenheitsarbeiten +
	                                                           anzUnterhaltDurchFamilie +
	                                                           anzErwerbsBerufsunfaehigkeitsrente +
	                                                           anzALGI +
	                                                           anzALGII +
	                                                           anzKrankengeld +
	                                                           anzAltersrentePensionWitwenrente +
	                                                           anzGrundsicherungNachSGBXII +
															   anzEigenesVermoegenErsparnisse +
															   anzUebergangsgeld +
															   anzWfbM +
	                                                           anzEinkommenUnbekannt +
															   anzEinkommenSonstiges);

	        anzSumme23Label.Text = anzLaengerFristigGesamtLabel.Text;
			anzLebensverhaeltnisseSummeAus23Label.Text = anzLaengerFristigGesamtLabel.Text;

			anzAlterAb18MLabel.Text = string.Format("{0}", anz18bis27M);
			anzAlterAb18WLabel.Text = string.Format("{0}", anz18bis27W);
	        anzAlterAb18SummeLabel.Text = string.Format("{0}", anz18bis27W + anz18bis27M);

			anzAlterAb28MLabel.Text = string.Format("{0}", anz28bis40M);
			anzAlterAb28WLabel.Text = string.Format("{0}", anz28bis40W);
			anzAlterAb28SummeLabel.Text = string.Format("{0}", anz28bis40W + anz28bis40M);

			anzAlterAb41MLabel.Text = string.Format("{0}", anz41bis60M);
			anzAlterAb41WLabel.Text = string.Format("{0}", anz41bis60W);
			anzAlterAb41SummeLabel.Text = string.Format("{0}", anz41bis60W + anz41bis60M);

			anzAlterAb60MLabel.Text = string.Format("{0}", anzUeber60M);
			anzAlterAb60WLabel.Text = string.Format("{0}", anzUeber60W);
			anzAlterAb60SummeLabel.Text = string.Format("{0}", anzUeber60W + anzUeber60M);

			anzAlterUnbekanntMLabel.Text = string.Format("{0}", anzAlterUnbekanntM);
			anzAlterUnbekanntWLabel.Text = string.Format("{0}", anzAlterUnbekanntW);
			anzAlterUnbekanntSummeLabel.Text = string.Format("{0}", anzAlterUnbekanntW + anzAlterUnbekanntM);

	        var alterSummeW = anz18bis27W +
	                          anz28bis40W +
	                          anz41bis60W +
	                          anzUeber60W +
	                          anzAlterUnbekanntW;

			anzSummeAlterWLabel.Text = string.Format("{0}", alterSummeW);

	        var alterSummeM = anz18bis27M +
	                          anz28bis40M +
	                          anz41bis60M +
	                          anzUeber60M +
	                          anzAlterUnbekanntM;

			anzSummeAlterMLabel.Text = string.Format("{0}", alterSummeM);

	        anzAlterSummeLabel.Text = string.Format("{0}", alterSummeW + alterSummeM);

			anzAlterSumme23Label.Text = anzLaengerFristigGesamtLabel.Text;

			anzSumme23WLabel.Text = anzLaengerFristigWLabel.Text;
			anzSumme23MLabel.Text = anzLaengerFristigMLabel.Text;

	        anzEndeLaengerBetreuungGrundV1Label.Text = string.Format("{0}", anzBeendigungInGegenseitigemEinvernehmenOhneWeiterbetreuungDurchAnderenPsychFachdienst);
	        anzEndeLaengerBetreuungGrundV2Label.Text = string.Format("{0}", anzBeendigungDurchVermittlungInAnschlussbetreuung);
			anzEndeLaengerBetreuungGrundV3Label.Text = string.Format("{0}", anzBeendigungDurchUebergangInSoziotherapie);
			anzEndeLaengerBetreuungGrundV4Label.Text = string.Format("{0}", anzBeendigungDurchKlient);
			anzEndeLaengerBetreuungGrundV5Label.Text = string.Format("{0}", anzBeendigungDurchDienst);
			anzEndeLaengerBetreuungGrundV6Label.Text = string.Format("{0}", anzBeendigungDurchEndeDerRegionalenZustaendigkeit);
			anzEndeLaengerBetreuungGrundV7Label.Text = string.Format("{0}", anzBeendigungDurchTodAusserSuizid);
			anzEndeLaengerBetreuungGrundV8Label.Text = string.Format("{0}", anzBeendigungDurchSuizid);
			anzEndeLaengerBetreuungGrundV9Label.Text = string.Format("{0}", anzBeendigungDurchSonstiges);
	        anzEndeLaengerBetreuungSummeLabel.Text = string.Format("{0}", anzBeendigungInGegenseitigemEinvernehmenOhneWeiterbetreuungDurchAnderenPsychFachdienst +
	                                                                      anzBeendigungDurchUebergangInSoziotherapie + anzBeendigungDurchKlient +
	                                                                      anzBeendigungDurchDienst +
	                                                                      anzBeendigungDurchEndeDerRegionalenZustaendigkeit +
	                                                                      anzBeendigungDurchTodAusserSuizid +
	                                                                      anzBeendigungDurchSuizid +
	                                                                      anzBeendigungDurchSonstiges);

			anzGemeinsameKlientenMitPIALabel.Text = string.Format("{0} Personen", anzGemeinsamerKlientenMitDerPIA);

	        anz36JaLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungJa);
			anz36NeinLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungNein);
			anz36UnbekanntLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeBehandlungsbeduerftigeKoerperlicheErkrankungUnbekannt);

			anz37JaLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikJa);
			anz37NeinLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikNein);
			anz37UnbekanntLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeBehandlungsbeduerftigeSuchtproblematikUnbekannt);

			anz38JaLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungJa);
			anz38NeinLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungNein);
			anz38UnbekanntLabel.Text = string.Format("{0}", anzGleichzeitigBestehendeFuerDieBetreuungRelevanteMinderbegabungUnbekannt);

			anzDiagnose1WLabel.Text = string.Format("{0}", anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenW);
			anzDiagnose1MLabel.Text = string.Format("{0}", anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenM);
			anzDiagnose1SummeLabel.Text = string.Format("{0}", anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenW + anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenM);

			anzDiagnose2WLabel.Text = string.Format("{0}", anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtW);
			anzDiagnose2MLabel.Text = string.Format("{0}", anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtM);
			anzDiagnose2SummeLabel.Text = string.Format("{0}", anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtW + anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtM);

			anzDiagnose3WLabel.Text = string.Format("{0}", anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseW);
			anzDiagnose3MLabel.Text = string.Format("{0}", anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseM);
			anzDiagnose3SummeLabel.Text = string.Format("{0}", anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseW + anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseM);

			anzDiagnose4WLabel.Text = string.Format("{0}", anzAffektiveStoerungenZBDepressionManieW);
			anzDiagnose4MLabel.Text = string.Format("{0}", anzAffektiveStoerungenZBDepressionManieM);
			anzDiagnose4SummeLabel.Text = string.Format("{0}", anzAffektiveStoerungenZBDepressionManieW + anzAffektiveStoerungenZBDepressionManieM);

			anzDiagnose5WLabel.Text = string.Format("{0}", anzNeurotischeBelastungsUndsomatoformeStoerungW);
			anzDiagnose5MLabel.Text = string.Format("{0}", anzNeurotischeBelastungsUndsomatoformeStoerungM);
			anzDiagnose5SummeLabel.Text = string.Format("{0}", anzNeurotischeBelastungsUndsomatoformeStoerungW + anzNeurotischeBelastungsUndsomatoformeStoerungM);

			anzDiagnose6WLabel.Text = string.Format("{0}", anzVerhaltensauffaelligkeitMitKoerperlicherStoerungW);
			anzDiagnose6MLabel.Text = string.Format("{0}", anzVerhaltensauffaelligkeitMitKoerperlicherStoerungM);
			anzDiagnose6SummeLabel.Text = string.Format("{0}", anzVerhaltensauffaelligkeitMitKoerperlicherStoerungW + anzVerhaltensauffaelligkeitMitKoerperlicherStoerungM);

			anzDiagnose7WLabel.Text = string.Format("{0}", anzPersoenlichkeitsUndVerhaltensstoerungW);
			anzDiagnose7MLabel.Text = string.Format("{0}", anzPersoenlichkeitsUndVerhaltensstoerungM);
			anzDiagnose7SummeLabel.Text = string.Format("{0}", anzPersoenlichkeitsUndVerhaltensstoerungW + anzPersoenlichkeitsUndVerhaltensstoerungM);

			anzDiagnose8WLabel.Text = string.Format("{0}", anzIntelligenzminderungW);
			anzDiagnose8MLabel.Text = string.Format("{0}", anzIntelligenzminderungM);
			anzDiagnose8SummeLabel.Text = string.Format("{0}", anzIntelligenzminderungW + anzIntelligenzminderungM);

			anzDiagnose9WLabel.Text = string.Format("{0}", anzNichtNaeherBezeichnetePsychischeStoerungW);
			anzDiagnose9MLabel.Text = string.Format("{0}", anzNichtNaeherBezeichnetePsychischeStoerungM);
			anzDiagnose9SummeLabel.Text = string.Format("{0}", anzNichtNaeherBezeichnetePsychischeStoerungW + anzNichtNaeherBezeichnetePsychischeStoerungM);

			anzDiagnose10WLabel.Text = string.Format("{0}", anzAnderePsychischeStoerungW);
			anzDiagnose10MLabel.Text = string.Format("{0}", anzAnderePsychischeStoerungM);
			anzDiagnose10SummeLabel.Text = string.Format("{0}", anzAnderePsychischeStoerungW + anzAnderePsychischeStoerungM);

			anzDiagnose11WLabel.Text = string.Format("{0}", anzNichtpsychischeStoerungW);
			anzDiagnose11MLabel.Text = string.Format("{0}", anzNichtpsychischeStoerungM);
			anzDiagnose11SummeLabel.Text = string.Format("{0}", anzNichtpsychischeStoerungW + anzNichtpsychischeStoerungM);

			anzDiagnose12WLabel.Text = string.Format("{0}", anzUnklareDiagnoseFormulierungenW);
			anzDiagnose12MLabel.Text = string.Format("{0}", anzUnklareDiagnoseFormulierungenM);
			anzDiagnose12SummeLabel.Text = string.Format("{0}", anzUnklareDiagnoseFormulierungenW + anzUnklareDiagnoseFormulierungenM);

			anzDiagnose13WLabel.Text = string.Format("{0}", anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenW);
			anzDiagnose13MLabel.Text = string.Format("{0}", anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenM);
			anzDiagnose13SummeLabel.Text = string.Format("{0}", anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenW + anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenM);

	        var anzDiagnoseSummeW = anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenW +
	                                anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtW +
	                                anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseW +
	                                anzAffektiveStoerungenZBDepressionManieW +
	                                anzNeurotischeBelastungsUndsomatoformeStoerungW +
	                                anzVerhaltensauffaelligkeitMitKoerperlicherStoerungW +
	                                anzPersoenlichkeitsUndVerhaltensstoerungW +
	                                anzIntelligenzminderungW +
	                                anzNichtNaeherBezeichnetePsychischeStoerungW +
	                                anzAnderePsychischeStoerungW +
									anzNichtpsychischeStoerungW +
	                                anzUnklareDiagnoseFormulierungenW +
	                                anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenW;

	        var anzDiagnoseSummeM = anzOrganischePsychosenEinschlSymptomatischerPsychischerStoerungenM +
	                                anzPsychischeUndVerhaltensstoerungenDurchPsychotropeSubstanzenZBSuchtM +
	                                anzSchizophrenieSchizotypeUndWahnhafteStoerungenZBSchizophrenePsychoseM +
	                                anzAffektiveStoerungenZBDepressionManieM +
	                                anzNeurotischeBelastungsUndsomatoformeStoerungM +
	                                anzVerhaltensauffaelligkeitMitKoerperlicherStoerungM +
	                                anzPersoenlichkeitsUndVerhaltensstoerungM +
	                                anzIntelligenzminderungM +
	                                anzNichtNaeherBezeichnetePsychischeStoerungM +
	                                anzAnderePsychischeStoerungM +
									anzNichtpsychischeStoerungM +
	                                anzUnklareDiagnoseFormulierungenM +
	                                anzDiagnoseUnbekanntAerztlicheDiagnoseNichtVorhandenM;

			anzDiagnoseSummeWLabel.Text = string.Format("{0}", anzDiagnoseSummeW);
			anzDiagnoseSummeMLabel.Text = string.Format("{0}", anzDiagnoseSummeM);
			anzDiagnoseSummeLabel.Text = string.Format("{0}", anzDiagnoseSummeW + anzDiagnoseSummeM);

			anzDiagnoseSummeAus23WLabel.Text = string.Format("{0}", anzLaengerFristigWLabel.Text);
			anzDiagnoseSummeAus23MLabel.Text = string.Format("{0}", anzLaengerFristigMLabel.Text);
			anzDiagnoseSummeAus23Label.Text = string.Format("{0}", anzLaengerFristigGesamtLabel.Text);

	        anzZuweisung1Label.Text = string.Format("{0}", anzZuweisungDurchPsychiatrischesKrankenhaus);
			anzZuweisung2Label.Text = string.Format("{0}", anzZuweisungDurchAndereKlinik);
			anzZuweisung3Label.Text = string.Format("{0}", anzZuweisungDurchPIA);
			anzZuweisung4Label.Text = string.Format("{0}", anzZuweisungDurchNiedergelassenerNervenarzt);
			anzZuweisung5Label.Text = string.Format("{0}", anzZuweisungDurchNiedergelassenerArzt);
			anzZuweisung6Label.Text = string.Format("{0}", anzZuweisungDurchSozialpsychiatrischeEinrichtung);
			anzZuweisung7Label.Text = string.Format("{0}", anzZuweisungDurchREHAEinrichtung);
			anzZuweisung8Label.Text = string.Format("{0}", anzZuweisungDurchAllgemeinerSozialdienst);
			anzZuweisung9Label.Text = string.Format("{0}", anzZuweisungDurchAmtFuerOeffentlicheOrdnungGericht);
			anzZuweisung10Label.Text = string.Format("{0}", anzZuweisungDurchSozialamt);

			anzZuweisung11Label.Text = string.Format("{0}", anzZuweisungDurchGesundheitsamt);
			anzZuweisung12Label.Text = string.Format("{0}", anzZuweisungDurchARGE);
			anzZuweisung13Label.Text = string.Format("{0}", anzZuweisungDurchSozialstationNachbarschaftshilfe);
			anzZuweisung14Label.Text = string.Format("{0}", anzZuweisungDurchBeratungsstelle);
			anzZuweisung15Label.Text = string.Format("{0}", anzZuweisungDurchTherapeut);
			anzZuweisung16Label.Text = string.Format("{0}", anzZuweisungDurchEhrenamtlicher);
			anzZuweisung17Label.Text = string.Format("{0}", anzZuweisungDurchNachbarAngehoeriger);
			anzZuweisung18Label.Text = string.Format("{0}", anzZuweisungDurchEigeninitiativePatient);
			anzZuweisung19Label.Text = string.Format("{0}", anzZuweisungDurchKollegeArbeitgeber);
			anzZuweisung20Label.Text = string.Format("{0}", anzZuweisungDurchGesetzlicherBetreuer);

			anzZuweisung21Label.Text = string.Format("{0}", anzZuweisungDurchWohnungslosenhilfe);
			anzZuweisung22Label.Text = string.Format("{0}", anzZuweisungDurchBewaehrungshilfe);
			anzZuweisung23Label.Text = string.Format("{0}", anzZuweisungDurchUnbekannt);

	        anzZuweisungSummeLabel.Text = string.Format("{0}", anzZuweisungDurchPsychiatrischesKrankenhaus +
	                                                           anzZuweisungDurchAndereKlinik +
	                                                           anzZuweisungDurchPIA +
	                                                           anzZuweisungDurchNiedergelassenerNervenarzt +
	                                                           anzZuweisungDurchNiedergelassenerArzt +
	                                                           anzZuweisungDurchSozialpsychiatrischeEinrichtung +
	                                                           anzZuweisungDurchREHAEinrichtung +
	                                                           anzZuweisungDurchAllgemeinerSozialdienst +
	                                                           anzZuweisungDurchAmtFuerOeffentlicheOrdnungGericht +
	                                                           anzZuweisungDurchSozialamt +
	                                                           anzZuweisungDurchGesundheitsamt +
	                                                           anzZuweisungDurchARGE +
	                                                           anzZuweisungDurchSozialstationNachbarschaftshilfe +
	                                                           anzZuweisungDurchBeratungsstelle +
	                                                           anzZuweisungDurchTherapeut +
	                                                           anzZuweisungDurchEhrenamtlicher +
	                                                           anzZuweisungDurchNachbarAngehoeriger +
	                                                           anzZuweisungDurchEigeninitiativePatient +
	                                                           anzZuweisungDurchKollegeArbeitgeber +
	                                                           anzZuweisungDurchGesetzlicherBetreuer +
	                                                           anzZuweisungDurchWohnungslosenhilfe +
	                                                           anzZuweisungDurchBewaehrungshilfe +
	                                                           anzZuweisungDurchUnbekannt);

	        anzBetreuung1Label.Text = string.Format("{0}", anzKurzbetreuung);
			anzBetreuung1ErstLabel.Text = string.Format("{0}", anzKurzbetreuungErstbetreuung);

			anzBetreuung2Label.Text = string.Format("{0}", anzLangfristigeBetreuung);
			anzBetreuung2ErstLabel.Text = string.Format("{0}", anzLangfristigeBetreuungErstbetreuung);

			anzBetreuung3Label.Text = string.Format("{0}", anzIndirekteBetreuung);
			anzBetreuung3ErstLabel.Text = string.Format("{0}", anzIndirekteBetreuungErstbetreuung);

	        anzBetreuungSummeLabel.Text = string.Format("{0}", anzKurzbetreuung + anzLangfristigeBetreuung + anzIndirekteBetreuung);
			anzBetreuungSummeErstLabel.Text = string.Format("{0}", anzKurzbetreuungErstbetreuung + anzLangfristigeBetreuungErstbetreuung + anzIndirekteBetreuungErstbetreuung);
	        anzBetreuungSummeAus221Label.Text = anzKlientenGesamtLabel.Text;
			anzBetreuungErstSummeAus221Label.Text = anzBetreuungSummeErstLabel.Text;

	        anzBis3MonateBetreuungSumme = anzBis3MonateBetreuung5Bis10Kontakte + anzBis3MonateBetreuung11Bis20Kontakte + anzBis3MonateBetreuung21Bis40Kontakte + anzBis3MonateBetreuung40PlusKontakte;
			anzBis3Monate5Bis10KLabel.Text = string.Format("{0}", anzBis3MonateBetreuung5Bis10Kontakte);
			anzBis3Monate11Bis20KLabel.Text = string.Format("{0}", anzBis3MonateBetreuung11Bis20Kontakte);
			anzBis3Monate21Bis40KLabel.Text = string.Format("{0}", anzBis3MonateBetreuung21Bis40Kontakte);
			anzBis3MonateUeber40KLabel.Text = string.Format("{0}", anzBis3MonateBetreuung40PlusKontakte);
			anzBis3MonateSummeLabel.Text = string.Format("{0}", anzBis3MonateBetreuungSumme);
	        
			anz3Bis6MonateBetreuungSumme = anz3Bis6MonateBetreuung5Bis10Kontakte + anz3Bis6MonateBetreuung11Bis20Kontakte + anz3Bis6MonateBetreuung21Bis40Kontakte + anz3Bis6MonateBetreuung40PlusKontakte;
			anz3Bis6Monate5Bis10KLabel.Text = string.Format("{0}", anz3Bis6MonateBetreuung5Bis10Kontakte);
			anz3Bis6Monate11Bis20KLabel.Text = string.Format("{0}", anz3Bis6MonateBetreuung11Bis20Kontakte);
			anz3Bis6Monate21Bis40KLabel.Text = string.Format("{0}", anz3Bis6MonateBetreuung21Bis40Kontakte);
			anz3Bis6MonateUeber40KLabel.Text = string.Format("{0}", anz3Bis6MonateBetreuung40PlusKontakte);
			anz3Bis6MonateSummeLabel.Text = string.Format("{0}", anz3Bis6MonateBetreuungSumme);

			anz7Bis12MonateBetreuungSumme = anz7Bis12MonateBetreuung5Bis10Kontakte + anz7Bis12MonateBetreuung11Bis20Kontakte + anz7Bis12MonateBetreuung21Bis40Kontakte + anz7Bis12MonateBetreuung40PlusKontakte;
			anz7Bis12Monate5Bis10KLabel.Text = string.Format("{0}", anz7Bis12MonateBetreuung5Bis10Kontakte);
			anz7Bis12Monate11Bis20KLabel.Text = string.Format("{0}", anz7Bis12MonateBetreuung11Bis20Kontakte);
			anz7Bis12Monate21Bis40KLabel.Text = string.Format("{0}", anz7Bis12MonateBetreuung21Bis40Kontakte);
			anz7Bis12MonateUeber40KLabel.Text = string.Format("{0}", anz7Bis12MonateBetreuung40PlusKontakte);
			anz7Bis12MonateSummeLabel.Text = string.Format("{0}", anz7Bis12MonateBetreuungSumme);

			anz5Bis10KSummeLabel.Text = string.Format("{0}", anzBis3MonateBetreuung5Bis10Kontakte + anz3Bis6MonateBetreuung5Bis10Kontakte + anz7Bis12MonateBetreuung5Bis10Kontakte);
			anz11Bis20KSummeLabel.Text = string.Format("{0}", anzBis3MonateBetreuung11Bis20Kontakte + anz3Bis6MonateBetreuung11Bis20Kontakte + anz7Bis12MonateBetreuung11Bis20Kontakte);
			anz21Bis40KSummeLabel.Text = string.Format("{0}", anzBis3MonateBetreuung21Bis40Kontakte + anz3Bis6MonateBetreuung21Bis40Kontakte + anz7Bis12MonateBetreuung21Bis40Kontakte);
			anzUeber40KSummeLabel.Text = string.Format("{0}", anzBis3MonateBetreuung40PlusKontakte + anz3Bis6MonateBetreuung40PlusKontakte + anz7Bis12MonateBetreuung40PlusKontakte);

	        anzDauerLaengBetreuungSummeLabel.Text = string.Format("{0}", anzBis3MonateBetreuungSumme + anz3Bis6MonateBetreuungSumme + anz7Bis12MonateBetreuungSumme);
	        anzDauerLaengBetreuungSummeAus412Label.Text = anzBetreuung2Label.Text;

	        anzSoziotherapiefaelleErstverordnungenLabel.Text = string.Format("{0}", anzSoziotherapiefaelleErstverordnungen);
			anzSoziotherapiefaelleFolgeverordnungenLabel.Text = string.Format("{0}", anzSoziotherapiefaelleFolgeverordnungen);
			anzSoziotherapiefaelleGesamtLabel.Text = string.Format("{0}", anzSoziotherapiefaelleErstverordnungen + anzSoziotherapiefaelleFolgeverordnungen);
        }

	    private static bool IstSchaltjahr(int jahr)
	    {
		    return jahr%4 == 0 && jahr%100 != 0 || jahr%4 == 0 && jahr%400 == 0;
	    }
    }
}
