
package de.ivu.elect.interfaces.core;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;

@XmlAccessorType(XmlAccessType.FIELD)
public class Wahlhelfer extends Person {

  private static final long serialVersionUID = 1L;

  @XmlElement(required = false)
  private String abwesenheitsgrund;

  @XmlElement(required = true)
  private EntschaedigungssatzArt entschaedigungssatzArt;

  @XmlElement(required = true)
  private WahlhelferEinsatzbereitschaft einsatzbereitschaft;

  @XmlElement(required = false)
  private Date angefragtAm;

  @XmlElement(required = false)
  private Date zugesagtAm;

  @XmlElement(required = false)
  private Date entschuldigtAm;

  @XmlElement(required = false)
  private WahlhelferBerufungStatus berufungStatus;

  @XmlElement(required = false)
  private Date berufungErsteErinnerungAm;

  @XmlElement(required = false)
  private Date berufungErstelltAm;

  @XmlElement(required = false)
  private Date berufungZurueckgemeldetAm;

  @XmlElement(required = false)
  private Date berufungZweiteErinnerungAm;

  @XmlElement(required = true)
  private WahlhelferRolle erfahrungInDerRolle;

  @XmlElement(required = true)
  private WahlhelferErreichbarkeit erreichbarkeit;

  @XmlElement(required = false)
  private String importHashCode;

  @XmlElement(required = true)
  private WahlhelferVerpflichtungArt verpflichtungArt;

  @XmlElement(required = true)
  private WahlhelferQuelle wahlhelferQuelle;

  @XmlElement(required = true)
  private WahlhelferStatus wahlhelferStatus;

  @XmlElement(required = true)
  private WahlhelferStichwahlEinsatz wahlhelferStichwahlEinsatz;

  @XmlElement(required = false)
  @Deprecated
  private Boolean widerspruchZurSpeicherung; // ELECTDD-519 legacy

  @XmlElement(required = false)
  private ZustimmungSpeicherung zustimmungSpeicherung;

  @XmlElement(required = false)
  private Date zustimmungSpeicherungDatum;

  @XmlElement(required = false)
  private GebietReferenz gebiet;

  /**
   * NOTE, dass hier der Wahlhelfer nochmal so exportiert wird, wie er in der Wahlhelfer-DB liegt.
   */
  @XmlElement(required = false)
  private Wahlhelfer wahlhelferInWahlhelferDatenbank;

  @XmlElement(required = false)
  private OrganisationseinheitReferenz organisationseinheitReferenz;

  @XmlElementWrapper(name = "wahlhelferEinsatzHistorieList", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlhelferEinsatzHistorie", nillable = true)
  private List<WahlhelferEinsatzHistorie> wahlhelferEinsatzHistorieList = new ArrayList<>();

  @XmlElementWrapper(name = "wahlhelferEinsatzList", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlhelferEinsatz", nillable = true)
  private List<WahlhelferEinsatz> wahlhelferEinsatzList = new ArrayList<>();

  @XmlElementWrapper(name = "schulungHistorieList", nillable = false, required = true)
  @XmlElement(required = false, name = "schulungHistorie", nillable = true)
  private List<SchulungHistorie> schulungHistorieList = new ArrayList<>();

  @XmlElement(required = false)
  private Date anmeldedatum;

  public Wahlhelfer() {
    super();
  }

  public String getAbwesenheitsgrund() {
    return abwesenheitsgrund;
  }

  public void setAbwesenheitsgrund(String abwesenheitsgrund) {
    this.abwesenheitsgrund = abwesenheitsgrund;
  }

  public EntschaedigungssatzArt getEntschaedigungssatzArt() {
    return entschaedigungssatzArt;
  }

  public void setEntschaedigungssatzArt(EntschaedigungssatzArt entschaedigungssatzArt) {
    this.entschaedigungssatzArt = entschaedigungssatzArt;
  }

  public WahlhelferEinsatzbereitschaft getEinsatzbereitschaft() {
    return einsatzbereitschaft;
  }

  public void setEinsatzbereitschaft(WahlhelferEinsatzbereitschaft einsatzbereitschaft) {
    this.einsatzbereitschaft = einsatzbereitschaft;
  }

  public Date getAngefragtAm() {
    return angefragtAm;
  }

  public void setAngefragtAm(Date angefragtAm) {
    this.angefragtAm = angefragtAm;
  }

  public Date getZugesagtAm() {
    return zugesagtAm;
  }

  public void setZugesagtAm(Date zugesagtAm) {
    this.zugesagtAm = zugesagtAm;
  }

  public Date getEntschuldigtAm() {
    return entschuldigtAm;
  }

  public void setEntschuldigtAm(Date entschuldigtAm) {
    this.entschuldigtAm = entschuldigtAm;
  }

  public WahlhelferBerufungStatus getBerufungStatus() {
    return berufungStatus;
  }

  public void setBerufungStatus(WahlhelferBerufungStatus berufungStatus) {
    this.berufungStatus = berufungStatus;
  }

  public Date getBerufungErsteErinnerungAm() {
    return berufungErsteErinnerungAm;
  }

  public void setBerufungErsteErinnerungAm(Date berufungErsteErinnerungAm) {
    this.berufungErsteErinnerungAm = berufungErsteErinnerungAm;
  }

  public Date getBerufungErstelltAm() {
    return berufungErstelltAm;
  }

  public void setBerufungErstelltAm(Date berufungErstelltAm) {
    this.berufungErstelltAm = berufungErstelltAm;
  }

  public Date getBerufungZurueckgemeldetAm() {
    return berufungZurueckgemeldetAm;
  }

  public void setBerufungZurueckgemeldetAm(Date berufungZurueckgemeldetAm) {
    this.berufungZurueckgemeldetAm = berufungZurueckgemeldetAm;
  }

  public Date getBerufungZweiteErinnerungAm() {
    return berufungZweiteErinnerungAm;
  }

  public void setBerufungZweiteErinnerungAm(Date berufungZweiteErinnerungAm) {
    this.berufungZweiteErinnerungAm = berufungZweiteErinnerungAm;
  }

  public WahlhelferRolle getErfahrungInDerRolle() {
    return erfahrungInDerRolle;
  }

  public void setErfahrungInDerRolle(WahlhelferRolle erfahrungInDerRolle) {
    this.erfahrungInDerRolle = erfahrungInDerRolle;
  }

  public WahlhelferErreichbarkeit getErreichbarkeit() {
    return erreichbarkeit;
  }

  public void setErreichbarkeit(WahlhelferErreichbarkeit erreichbarkeit) {
    this.erreichbarkeit = erreichbarkeit;
  }

  public String getImportHashCode() {
    return importHashCode;
  }

  public void setImportHashCode(String importHashCode) {
    this.importHashCode = importHashCode;
  }

  public WahlhelferVerpflichtungArt getVerpflichtungArt() {
    return verpflichtungArt;
  }

  public void setVerpflichtungArt(WahlhelferVerpflichtungArt verpflichtungArt) {
    this.verpflichtungArt = verpflichtungArt;
  }

  public WahlhelferQuelle getWahlhelferQuelle() {
    return wahlhelferQuelle;
  }

  public void setWahlhelferQuelle(WahlhelferQuelle wahlhelferQuelle) {
    this.wahlhelferQuelle = wahlhelferQuelle;
  }

  public WahlhelferStatus getWahlhelferStatus() {
    return wahlhelferStatus;
  }

  public void setWahlhelferStatus(WahlhelferStatus wahlhelferStatus) {
    this.wahlhelferStatus = wahlhelferStatus;
  }

  public WahlhelferStichwahlEinsatz getWahlhelferStichwahlEinsatz() {
    return wahlhelferStichwahlEinsatz;
  }

  public void setWahlhelferStichwahlEinsatz(WahlhelferStichwahlEinsatz wahlhelferStichwahlEinsatz) {
    this.wahlhelferStichwahlEinsatz = wahlhelferStichwahlEinsatz;
  }

  @Deprecated
  public Boolean getWiderspruchZurSpeicherung() {
    return widerspruchZurSpeicherung;
  }

  @Deprecated
  public void setWiderspruchZurSpeicherung(Boolean widerspruchZurSpeicherung) {
    this.widerspruchZurSpeicherung = widerspruchZurSpeicherung;
  }

  public GebietReferenz getGebiet() {
    return gebiet;
  }

  public void setGebiet(GebietReferenz gebiet) {
    this.gebiet = gebiet;
  }

  public Wahlhelfer getWahlhelferInWahlhelferDatenbank() {
    return wahlhelferInWahlhelferDatenbank;
  }

  public void setWahlhelferInWahlhelferDatenbank(Wahlhelfer wahlhelferInWahlhelferDatenbank) {
    this.wahlhelferInWahlhelferDatenbank = wahlhelferInWahlhelferDatenbank;
  }

  public OrganisationseinheitReferenz getOrganisationseinheitReferenz() {
    return organisationseinheitReferenz;
  }

  public void setOrganisationseinheitReferenz(OrganisationseinheitReferenz organisationseinheitReferenz) {
    this.organisationseinheitReferenz = organisationseinheitReferenz;
  }

  public List<WahlhelferEinsatzHistorie> getWahlhelferEinsatzHistorieList() {
    return wahlhelferEinsatzHistorieList;
  }

  public void setWahlhelferEinsatzHistorieList(List<WahlhelferEinsatzHistorie> wahlhelferEinsatzHistorieList) {
    this.wahlhelferEinsatzHistorieList = wahlhelferEinsatzHistorieList;
  }

  public List<WahlhelferEinsatz> getWahlhelferEinsatzList() {
    return wahlhelferEinsatzList;
  }

  public void setWahlhelferEinsatzList(List<WahlhelferEinsatz> wahlhelferEinsatzList) {
    this.wahlhelferEinsatzList = wahlhelferEinsatzList;
  }

  public ZustimmungSpeicherung getZustimmungSpeicherung() {
    return zustimmungSpeicherung;
  }

  public void setZustimmungSpeicherung(ZustimmungSpeicherung zustimmungSpeicherung) {
    this.zustimmungSpeicherung = zustimmungSpeicherung;
  }

  public Date getZustimmungSpeicherungDatum() {
    return zustimmungSpeicherungDatum;
  }

  public void setZustimmungSpeicherungDatum(Date zustimmungSpeicherungDatum) {
    this.zustimmungSpeicherungDatum = zustimmungSpeicherungDatum;
  }

  public List<SchulungHistorie> getSchulungHistorieList() {
    return schulungHistorieList;
  }

  public void setSchulungHistorieList(List<SchulungHistorie> schulungHistorieList) {
    this.schulungHistorieList = schulungHistorieList;
  }

  public Date getAnmeldedatum() {
    return anmeldedatum;
  }

  public void setAnmeldedatum(Date anmeldedatum) {
    this.anmeldedatum = anmeldedatum;
  }
}
