
package de.ivu.elect.presentation.ergebnis.dokumente.gesamtergebnis;

import java.util.List;

import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.ergebnis.control.ErgebnisDaten;
import de.ivu.elect.business.ergebnis.entity.Gewaehlt;
import de.ivu.elect.business.ergebnis.entity.GewaehltStatus;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.kandidatur.entity.KandidaturStatus;
import de.ivu.elect.business.person.entity.Geschlecht;
import de.ivu.elect.dokumente.CoreElectContext;

public class ErgebnisGewaehltMarkiertDocument {

  @DocumentSimpleField("AnzahlKandidaturenGesamt")
  public final Long anzahlKandidaturenGesamt;

  @DocumentSimpleField("AnzahlKandidaturenWeiblich")
  public final Long anzahlKandidaturenWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenMaennlich")
  public final Long anzahlKandidaturenMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenSonstige")
  public final Long anzahlKandidaturenSonstige;

  @DocumentSimpleField("AnzahlKandidaturenIstGewähltGesamt")
  public final Long anzahlKandidaturenIstGewaehltGesamt;

  @DocumentSimpleField("AnzahlKandidaturenIstGewähltWeiblich")
  public final Long anzahlKandidaturenIstGewaehltWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenIstGewähltMaennlich")
  public final Long anzahlKandidaturenIstGewaehltMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenIstGewähltSonstige")
  public final Long anzahlKandidaturenIstGewaehltSonstige;

  @DocumentSimpleField("AnzahlKandidaturenIstLosOffenGesamt")
  public final Long anzahlKandidaturenIstLosOffenGesamt;

  @DocumentSimpleField("AnzahlKandidaturenIstLosOffenWeiblich")
  public final Long anzahlKandidaturenIstLosOffenWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenIstLosOffenMaennlich")
  public final Long anzahlKandidaturenIstLosOffenMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenIstLosOffenSonstige")
  public final Long anzahlKandidaturenIstLosOffenSonstige;

  @DocumentSimpleField("AnzahlKandidaturenIstNachrückerGesamt")
  public final Long anzahlKandidaturenIstNachrueckerGesamt;

  @DocumentSimpleField("AnzahlKandidaturenIstNachrückerWeiblich")
  public final Long anzahlKandidaturenIstNachrueckerWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenIstNachrückerMaennlich")
  public final Long anzahlKandidaturenIstNachrueckerMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenIstNachrückerSonstige")
  public final Long anzahlKandidaturenIstNachrueckerSonstige;

  @DocumentSimpleField("AnzahlKandidaturenIstStichwahlGesamt")
  public final Long anzahlKandidaturenIstStichwahlGesamt;

  @DocumentSimpleField("AnzahlKandidaturenIstStichwahlWeiblich")
  public final Long anzahlKandidaturenIstStichwahlWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenIstStichwahlMaennlich")
  public final Long anzahlKandidaturenIstStichwahlMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenIstStichwahlSonstige")
  public final Long anzahlKandidaturenIstStichwahlSonstige;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussSonstige")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussSonstige;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussSonstige")
  public final Long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussSonstige;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt")
  public final Long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich")
  public final Long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich")
  public final Long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtshindernisVorhandenSonstige")
  public final Long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenSonstige;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt")
  public final Long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich")
  public final Long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich")
  public final Long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich;

  @DocumentSimpleField("AnzahlKandidaturenNachtraeglichAmtsannahmeVerweigertSonstige")
  public final Long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertSonstige;

  public ErgebnisGewaehltMarkiertDocument(CoreElectContext coreElectContext, ErgebnisDaten ergebnisDaten, List< ? extends Kandidatur> kandidaturen) {
    super();

    long anzahlKandidaturenGesamt = 0L;
    long anzahlKandidaturenWeiblich = 0L;
    long anzahlKandidaturenMaennlich = 0L;

    long anzahlKandidaturenIstGewaehltGesamt = 0L;
    long anzahlKandidaturenIstGewaehltWeiblich = 0L;
    long anzahlKandidaturenIstGewaehltMaennlich = 0L;

    long anzahlKandidaturenIstLosOffenGesamt = 0L;
    long anzahlKandidaturenIstLosOffenWeiblich = 0L;
    long anzahlKandidaturenIstLosOffenMaennlich = 0L;

    long anzahlKandidaturenIstNachrueckerGesamt = 0L;
    long anzahlKandidaturenIstNachrueckerWeiblich = 0L;
    long anzahlKandidaturenIstNachrueckerMaennlich = 0L;

    long anzahlKandidaturenIstStichwahlGesamt = 0L;
    long anzahlKandidaturenIstStichwahlWeiblich = 0L;
    long anzahlKandidaturenIstStichwahlMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt = 0L;
    long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt = 0L;
    long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich = 0L;

    for (Kandidatur kandidatur : kandidaturen) {
      Gewaehlt gewaehlt = ergebnisDaten.getGewaehlteFuerKandidatur(kandidatur);

      if (gewaehlt != null && kandidatur.isAufStimmzettel()) {
        GewaehltStatus gewaehltStatus = gewaehlt.getGewaehltStatus();

        Geschlecht geschlecht = kandidatur.getGeschlecht();
        boolean geschlechtWeiblich = geschlecht.isWeiblich();
        boolean geschlechtMaennlich = geschlecht.isMaennlich();

        anzahlKandidaturenGesamt++;

        if (geschlechtWeiblich) {
          anzahlKandidaturenWeiblich++;
        }

        if (geschlechtMaennlich) {
          anzahlKandidaturenMaennlich++;
        }

        if (gewaehltStatus.isGewaehlt()) {
          anzahlKandidaturenIstGewaehltGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstGewaehltWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstGewaehltMaennlich++;
          }
        }

        if (gewaehltStatus.isLosOffen()) {
          anzahlKandidaturenIstLosOffenGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstLosOffenWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstLosOffenMaennlich++;
          }
        }

        if (gewaehltStatus.isNachruecker()) {
          anzahlKandidaturenIstNachrueckerGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstNachrueckerWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstNachrueckerMaennlich++;
          }
        }

        if (gewaehltStatus.isStichwahl()) {
          anzahlKandidaturenIstStichwahlGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstStichwahlWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstStichwahlMaennlich++;
          }
        }

        KandidaturStatus kandidaturStatus = kandidatur.getKandidaturStatus(); // ELECT-9567

        if (KandidaturStatus.NICHT_MEHR_ZUGELASSEN_WEIL_ZULASSUNGSFAEHIGKEIT_VOR_ZULASSUNGSAUSSCHUSS_NICHT_VORLAG.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich++;
          }
        }

        if (KandidaturStatus.NICHT_MEHR_ZUGELASSEN_WEIL_ZULASSUNGSFAEHIGKEIT_NACH_ZULASSUNGSAUSSCHUSS_VERLOREN.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich++;
          }
        }

        if (KandidaturStatus.ZUGELASSEN_NACHTRAEGLICH_AMTSHINDERNIS_VORHANDEN.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich++;
          }
        }

        if (KandidaturStatus.ZUGELASSEN_NACHTRAEGLICH_AMTSANNAHME_VERWEIGERT.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich++;
          }
        }
      }
    }

    this.anzahlKandidaturenGesamt = anzahlKandidaturenGesamt;
    this.anzahlKandidaturenWeiblich = anzahlKandidaturenWeiblich;
    this.anzahlKandidaturenMaennlich = anzahlKandidaturenMaennlich;
    this.anzahlKandidaturenSonstige = anzahlKandidaturenGesamt - (anzahlKandidaturenWeiblich + anzahlKandidaturenMaennlich);

    this.anzahlKandidaturenIstGewaehltGesamt = anzahlKandidaturenIstGewaehltGesamt;
    this.anzahlKandidaturenIstGewaehltWeiblich = anzahlKandidaturenIstGewaehltWeiblich;
    this.anzahlKandidaturenIstGewaehltMaennlich = anzahlKandidaturenIstGewaehltMaennlich;
    this.anzahlKandidaturenIstGewaehltSonstige = anzahlKandidaturenIstGewaehltGesamt - (anzahlKandidaturenIstGewaehltWeiblich + anzahlKandidaturenIstGewaehltMaennlich);

    this.anzahlKandidaturenIstLosOffenGesamt = anzahlKandidaturenIstLosOffenGesamt;
    this.anzahlKandidaturenIstLosOffenWeiblich = anzahlKandidaturenIstLosOffenWeiblich;
    this.anzahlKandidaturenIstLosOffenMaennlich = anzahlKandidaturenIstLosOffenMaennlich;
    this.anzahlKandidaturenIstLosOffenSonstige = anzahlKandidaturenIstLosOffenGesamt - (anzahlKandidaturenIstLosOffenWeiblich + anzahlKandidaturenIstLosOffenMaennlich);

    this.anzahlKandidaturenIstNachrueckerGesamt = anzahlKandidaturenIstNachrueckerGesamt;
    this.anzahlKandidaturenIstNachrueckerWeiblich = anzahlKandidaturenIstNachrueckerWeiblich;
    this.anzahlKandidaturenIstNachrueckerMaennlich = anzahlKandidaturenIstNachrueckerMaennlich;
    this.anzahlKandidaturenIstNachrueckerSonstige = anzahlKandidaturenIstNachrueckerGesamt - (anzahlKandidaturenIstNachrueckerWeiblich + anzahlKandidaturenIstNachrueckerMaennlich);

    this.anzahlKandidaturenIstStichwahlGesamt = anzahlKandidaturenIstStichwahlGesamt;
    this.anzahlKandidaturenIstStichwahlWeiblich = anzahlKandidaturenIstStichwahlWeiblich;
    this.anzahlKandidaturenIstStichwahlMaennlich = anzahlKandidaturenIstStichwahlMaennlich;
    this.anzahlKandidaturenIstStichwahlSonstige = anzahlKandidaturenIstStichwahlGesamt - (anzahlKandidaturenIstStichwahlWeiblich + anzahlKandidaturenIstStichwahlMaennlich);

    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussSonstige = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt
        - (anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich + anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich);

    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussSonstige = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt
        - (anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich + anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich);

    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt;
    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich;
    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich;
    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenSonstige = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt
        - (anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich + anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich);

    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt;
    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich;
    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich;
    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertSonstige = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt
        - (anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich + anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich);
  }

  public ErgebnisGewaehltMarkiertDocument(CoreElectContext coreElectContext, List<KandidaturMitStimmergebnissenDocument> kandidaturen) {
    super();

    long anzahlKandidaturenGesamt = 0L;
    long anzahlKandidaturenWeiblich = 0L;
    long anzahlKandidaturenMaennlich = 0L;

    long anzahlKandidaturenIstGewaehltGesamt = 0L;
    long anzahlKandidaturenIstGewaehltWeiblich = 0L;
    long anzahlKandidaturenIstGewaehltMaennlich = 0L;

    long anzahlKandidaturenIstLosOffenGesamt = 0L;
    long anzahlKandidaturenIstLosOffenWeiblich = 0L;
    long anzahlKandidaturenIstLosOffenMaennlich = 0L;

    long anzahlKandidaturenIstNachrueckerGesamt = 0L;
    long anzahlKandidaturenIstNachrueckerWeiblich = 0L;
    long anzahlKandidaturenIstNachrueckerMaennlich = 0L;

    long anzahlKandidaturenIstStichwahlGesamt = 0L;
    long anzahlKandidaturenIstStichwahlWeiblich = 0L;
    long anzahlKandidaturenIstStichwahlMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt = 0L;
    long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich = 0L;

    long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt = 0L;
    long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich = 0L;
    long anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich = 0L;

    for (KandidaturMitStimmergebnissenDocument kandidatur : kandidaturen) {
      if (kandidatur.istAufStimzettel) {
        boolean geschlechtWeiblich = kandidatur.geschlechtWeiblich;
        boolean geschlechtMaennlich = kandidatur.geschlechtMaennlich;

        if (kandidatur.gewaehltVorhanden) {
          anzahlKandidaturenGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenMaennlich++;
          }
        }

        if (kandidatur.gewaehlt) {
          anzahlKandidaturenIstGewaehltGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstGewaehltWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstGewaehltMaennlich++;
          }
        }

        if (kandidatur.gewaehltLosOffen) {
          anzahlKandidaturenIstLosOffenGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstLosOffenWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstLosOffenMaennlich++;
          }
        }

        if (kandidatur.gewaehltNachruecker) {
          anzahlKandidaturenIstNachrueckerGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstNachrueckerWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstNachrueckerMaennlich++;
          }
        }

        if (kandidatur.gewaehltStichwahl) {
          anzahlKandidaturenIstStichwahlGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenIstStichwahlWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenIstStichwahlMaennlich++;
          }
        }

        KandidaturStatus kandidaturStatus = kandidatur.getKandidatur() == null ? null : kandidatur.getKandidatur().getKandidaturStatus(); // ELECT-9567

        if (KandidaturStatus.NICHT_MEHR_ZUGELASSEN_WEIL_ZULASSUNGSFAEHIGKEIT_VOR_ZULASSUNGSAUSSCHUSS_NICHT_VORLAG.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich++;
          }
        }

        if (KandidaturStatus.NICHT_MEHR_ZUGELASSEN_WEIL_ZULASSUNGSFAEHIGKEIT_NACH_ZULASSUNGSAUSSCHUSS_VERLOREN.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich++;
          }
        }

        if (KandidaturStatus.ZUGELASSEN_NACHTRAEGLICH_AMTSHINDERNIS_VORHANDEN.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich++;
          }
        }

        if (KandidaturStatus.ZUGELASSEN_NACHTRAEGLICH_AMTSANNAHME_VERWEIGERT.equals(kandidaturStatus)) {
          anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt++;

          if (geschlechtWeiblich) {
            anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich++;
          }

          if (geschlechtMaennlich) {
            anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich++;
          }
        }
      }
    }

    this.anzahlKandidaturenGesamt = anzahlKandidaturenGesamt;
    this.anzahlKandidaturenWeiblich = anzahlKandidaturenWeiblich;
    this.anzahlKandidaturenMaennlich = anzahlKandidaturenMaennlich;
    this.anzahlKandidaturenSonstige = anzahlKandidaturenGesamt - (anzahlKandidaturenWeiblich + anzahlKandidaturenMaennlich);

    this.anzahlKandidaturenIstGewaehltGesamt = anzahlKandidaturenIstGewaehltGesamt;
    this.anzahlKandidaturenIstGewaehltWeiblich = anzahlKandidaturenIstGewaehltWeiblich;
    this.anzahlKandidaturenIstGewaehltMaennlich = anzahlKandidaturenIstGewaehltMaennlich;
    this.anzahlKandidaturenIstGewaehltSonstige = anzahlKandidaturenIstGewaehltGesamt - (anzahlKandidaturenIstGewaehltWeiblich + anzahlKandidaturenIstGewaehltMaennlich);

    this.anzahlKandidaturenIstLosOffenGesamt = anzahlKandidaturenIstLosOffenGesamt;
    this.anzahlKandidaturenIstLosOffenWeiblich = anzahlKandidaturenIstLosOffenWeiblich;
    this.anzahlKandidaturenIstLosOffenMaennlich = anzahlKandidaturenIstLosOffenMaennlich;
    this.anzahlKandidaturenIstLosOffenSonstige = anzahlKandidaturenIstLosOffenGesamt - (anzahlKandidaturenIstLosOffenWeiblich + anzahlKandidaturenIstLosOffenMaennlich);

    this.anzahlKandidaturenIstNachrueckerGesamt = anzahlKandidaturenIstNachrueckerGesamt;
    this.anzahlKandidaturenIstNachrueckerWeiblich = anzahlKandidaturenIstNachrueckerWeiblich;
    this.anzahlKandidaturenIstNachrueckerMaennlich = anzahlKandidaturenIstNachrueckerMaennlich;
    this.anzahlKandidaturenIstNachrueckerSonstige = anzahlKandidaturenIstNachrueckerGesamt - (anzahlKandidaturenIstNachrueckerWeiblich + anzahlKandidaturenIstNachrueckerMaennlich);

    this.anzahlKandidaturenIstStichwahlGesamt = anzahlKandidaturenIstStichwahlGesamt;
    this.anzahlKandidaturenIstStichwahlWeiblich = anzahlKandidaturenIstStichwahlWeiblich;
    this.anzahlKandidaturenIstStichwahlMaennlich = anzahlKandidaturenIstStichwahlMaennlich;
    this.anzahlKandidaturenIstStichwahlSonstige = anzahlKandidaturenIstStichwahlGesamt - (anzahlKandidaturenIstStichwahlWeiblich + anzahlKandidaturenIstStichwahlMaennlich);

    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussSonstige = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussGesamt
        - (anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussWeiblich + anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitBeimZulassungsausschussMaennlich);

    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich;
    this.anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussSonstige = anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussGesamt
        - (anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussWeiblich + anzahlKandidaturenNachtraeglichKeineZulassungsfaehigkeitNachZulassungsausschussMaennlich);

    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt;
    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich;
    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich;
    this.anzahlKandidaturenNachtraeglichAmtshindernisVorhandenSonstige = anzahlKandidaturenNachtraeglichAmtshindernisVorhandenGesamt
        - (anzahlKandidaturenNachtraeglichAmtshindernisVorhandenWeiblich + anzahlKandidaturenNachtraeglichAmtshindernisVorhandenMaennlich);

    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt;
    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich;
    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich;
    this.anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertSonstige = anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertGesamt
        - (anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertWeiblich + anzahlKandidaturenNachtraeglichAmtsannahmeVerweigertMaennlich);
  }
}
