
package de.ivu.elect.interfaces.core;

import java.io.Serializable;
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 Person implements Serializable {

  private static final long serialVersionUID = 1L;

  // für Abwärtskompatibilität nicht Pflicht
  @XmlElement(required = false)
  private Long id;

  @XmlElement(required = false)
  private String externesOrdnungsmerkmal;

  @XmlElement(required = false)
  private String externeId;

  @XmlElement(required = false)
  private String finanzId; // ELECTKOM-1352

  @XmlElement(required = false)
  private String vorname;

  @XmlElement(required = false)
  private String familienname;

  @XmlElement(required = false)
  private String titel;

  @XmlElement(required = false)
  private String akademischerGrad;

  @XmlElementWrapper(name = "staatsangehoerigkeiten", nillable = false, required = true)
  @XmlElement(required = false, name = "staatsangehoerigkeit", nillable = true)
  private List<Staat> staatsangehoerigkeiten = new ArrayList<>();

  @XmlElement(required = false)
  private String staatsangehoerigkeitenSortOrder;

  @XmlElement(required = false)
  private Date geburtsdatum;

  @XmlElement(required = false)
  private Wahlrechtsausschluss wahlrechtsausschluss;

  @XmlElement(required = false)
  private Sperrmerkmal sperrmerkmal;

  @XmlElement(required = false)
  private Geschlecht geschlecht;

  @XmlElement(required = false)
  private String anrede;

  @XmlElement(required = false)
  private String ordensname;

  @XmlElement(required = false)
  private String kuenstlername;

  @XmlElement(required = false)
  private String ehrenamt;

  @XmlElement(required = false)
  private String namensbestandteile;

  @XmlElement(required = false)
  private String vornamenVollstaendig;

  @XmlElement(required = false)
  private String beruf;

  @XmlElement(required = false)
  private String berufsschluessel;

  @XmlElement(required = false)
  private String geburtsort;

  @XmlElement(required = false)
  private String bemerkung;

  @XmlElementWrapper(name = "personendatenTags", nillable = false, required = false) // ELECTKOM-699
  @XmlElement(required = false, name = "personendatenTag", nillable = true)
  private List<String> personendatenTags = new ArrayList<>();

  @XmlElement(required = false)
  private String emailAdresse;

  @XmlElement(required = false)
  private String emailAdresseArbeit;

  @XmlElement(required = false)
  private String telefonnummerFestnetz;

  @XmlElement(required = false)
  private String telefonnummerMobil;

  @XmlElement(required = false)
  private String telefonnummerArbeit;

  @XmlElement(required = false)
  private String faxnummer;

  @XmlElement(required = false)
  private Boolean auswaertig;

  @XmlElement(required = false)
  private Date zuzugsdatumBund;

  @XmlElement(required = false)
  private Date zuzugsdatumLand;

  @XmlElement(required = false)
  private Date zuzugsdatumGemeinde;

  @XmlElement(required = false)
  private Date zuzugsdatumStadtbezirk;

  @XmlElement(required = true)
  private Anschrift anschrift = new Anschrift();

  @XmlElement(required = false /* legacy */)
  private Anschrift erreichbarkeitsanschrift = new Anschrift();

  @XmlElement(required = false)
  private String stimmbezirkSchluessel;

  @XmlElement(required = false)
  private String customData;

  @XmlElement(required = false)
  private PersonStatus personStatus;

  @XmlElement(required = false)
  private PersonenregisterAbgleichStatus personenregisterAbgleichStatus;

  @XmlElement(required = false)
  private Date personenregisterAbgleichZeitpunkt;

  @XmlElement(required = false)
  private SichtpruefungStatus sichtpruefungStatus;

  @XmlElement(required = false)
  private Long bewertung;

  @XmlElement(required = false)
  private Bild foto;

  @XmlElement(required = true)
  private Kontoverbindung kontoverbindung = new Kontoverbindung();

  @XmlElementWrapper(name = "teilnahmen", nillable = false, required = true)
  @XmlElement(required = false, name = "teilnahme", nillable = true)
  private List<Teilnahme> teilnahmen = new ArrayList<>();

  public Person() {
    super();
  }

  public Anschrift getAnschrift() {
    return anschrift;
  }

  public void setAnschrift(Anschrift anschrift) {
    this.anschrift = anschrift;
  }

  public String getStimmbezirkSchluessel() {
    return stimmbezirkSchluessel;
  }

  public void setStimmbezirkSchluessel(String stimmbezirkSchluessel) {
    this.stimmbezirkSchluessel = stimmbezirkSchluessel;
  }

  public String getExternesOrdnungsmerkmal() {
    return externesOrdnungsmerkmal;
  }

  public void setExternesOrdnungsmerkmal(String externesOrdnungsmerkmal) {
    this.externesOrdnungsmerkmal = externesOrdnungsmerkmal;
  }

  public String getExterneId() {
    return externeId;
  }

  public void setExterneId(String externeId) {
    this.externeId = externeId;
  }

  public String getFinanzId() {
    return finanzId;
  }

  public void setFinanzId(String finanzId) {
    this.finanzId = finanzId;
  }

  public String getVorname() {
    return vorname;
  }

  public void setVorname(String vorname) {
    this.vorname = vorname;
  }

  public String getFamilienname() {
    return familienname;
  }

  public void setFamilienname(String familienname) {
    this.familienname = familienname;
  }

  public String getTitel() {
    return titel;
  }

  public void setTitel(String titel) {
    this.titel = titel;
  }

  public String getAkademischerGrad() {
    return akademischerGrad;
  }

  public void setAkademischerGrad(String akademischerGrad) {
    this.akademischerGrad = akademischerGrad;
  }

  public List<Staat> getStaatsangehoerigkeiten() {
    return staatsangehoerigkeiten;
  }

  public void setStaatsangehoerigkeiten(List<Staat> staatsangehoerigkeiten) {
    this.staatsangehoerigkeiten = staatsangehoerigkeiten;
  }

  public String getStaatsangehoerigkeitenSortOrder() {
    return staatsangehoerigkeitenSortOrder;
  }

  public void setStaatsangehoerigkeitenSortOrder(String staatsangehoerigkeitenSortOrder) {
    this.staatsangehoerigkeitenSortOrder = staatsangehoerigkeitenSortOrder;
  }

  public Date getGeburtsdatum() {
    return geburtsdatum;
  }

  public void setGeburtsdatum(Date geburtsdatum) {
    this.geburtsdatum = geburtsdatum;
  }

  public Wahlrechtsausschluss getWahlrechtsausschluss() {
    return wahlrechtsausschluss;
  }

  public void setWahlrechtsausschluss(Wahlrechtsausschluss wahlrechtsausschluss) {
    this.wahlrechtsausschluss = wahlrechtsausschluss;
  }

  public Sperrmerkmal getSperrmerkmal() {
    return sperrmerkmal;
  }

  public void setSperrmerkmal(Sperrmerkmal sperrmerkmal) {
    this.sperrmerkmal = sperrmerkmal;
  }

  public Geschlecht getGeschlecht() {
    return geschlecht;
  }

  public void setGeschlecht(Geschlecht geschlecht) {
    this.geschlecht = geschlecht;
  }

  public String getAnrede() {
    return anrede;
  }

  public void setAnrede(String anrede) {
    this.anrede = anrede;
  }

  public String getOrdensname() {
    return ordensname;
  }

  public void setOrdensname(String ordensname) {
    this.ordensname = ordensname;
  }

  public String getKuenstlername() {
    return kuenstlername;
  }

  public void setKuenstlername(String kuenstlername) {
    this.kuenstlername = kuenstlername;
  }

  public String getEhrenamt() {
    return ehrenamt;
  }

  public void setEhrenamt(String ehrenamt) {
    this.ehrenamt = ehrenamt;
  }

  public String getNamensbestandteile() {
    return namensbestandteile;
  }

  public void setNamensbestandteile(String namensbestandteile) {
    this.namensbestandteile = namensbestandteile;
  }

  public String getVornamenVollstaendig() {
    return vornamenVollstaendig;
  }

  public void setVornamenVollstaendig(String vornamenVollstaendig) {
    this.vornamenVollstaendig = vornamenVollstaendig;
  }

  public String getBeruf() {
    return beruf;
  }

  public void setBeruf(String beruf) {
    this.beruf = beruf;
  }

  public String getBerufsschluessel() {
    return berufsschluessel;
  }

  public void setBerufsschluessel(String berufsschluessel) {
    this.berufsschluessel = berufsschluessel;
  }

  public String getGeburtsort() {
    return geburtsort;
  }

  public void setGeburtsort(String geburtsort) {
    this.geburtsort = geburtsort;
  }

  public String getBemerkung() {
    return bemerkung;
  }

  public void setBemerkung(String bemerkung) {
    this.bemerkung = bemerkung;
  }

  public List<String> getPersonendatenTags() {
    return personendatenTags;
  }

  public void setPersonendatenTags(List<String> personendatenTags) {
    this.personendatenTags = personendatenTags;
  }

  public String getEmailAdresse() {
    return emailAdresse;
  }

  public void setEmailAdresse(String emailAdresse) {
    this.emailAdresse = emailAdresse;
  }

  public String getEmailAdresseArbeit() {
    return emailAdresseArbeit;
  }

  public void setEmailAdresseArbeit(String emailAdresseArbeit) {
    this.emailAdresseArbeit = emailAdresseArbeit;
  }

  public String getTelefonnummerFestnetz() {
    return telefonnummerFestnetz;
  }

  public void setTelefonnummerFestnetz(String telefonnummerFestnetz) {
    this.telefonnummerFestnetz = telefonnummerFestnetz;
  }

  public String getTelefonnummerMobil() {
    return telefonnummerMobil;
  }

  public void setTelefonnummerMobil(String telefonnummerMobil) {
    this.telefonnummerMobil = telefonnummerMobil;
  }

  public String getTelefonnummerArbeit() {
    return telefonnummerArbeit;
  }

  public void setTelefonnummerArbeit(String telefonnummerArbeit) {
    this.telefonnummerArbeit = telefonnummerArbeit;
  }

  public String getFaxnummer() {
    return faxnummer;
  }

  public void setFaxnummer(String faxnummer) {
    this.faxnummer = faxnummer;
  }

  public Boolean getAuswaertig() {
    return auswaertig;
  }

  public void setAuswaertig(Boolean auswaertig) {
    this.auswaertig = auswaertig;
  }

  public Date getZuzugsdatumBund() {
    return zuzugsdatumBund;
  }

  public void setZuzugsdatumBund(Date zuzugsdatumBund) {
    this.zuzugsdatumBund = zuzugsdatumBund;
  }

  public Date getZuzugsdatumLand() {
    return zuzugsdatumLand;
  }

  public void setZuzugsdatumLand(Date zuzugsdatumLand) {
    this.zuzugsdatumLand = zuzugsdatumLand;
  }

  public Date getZuzugsdatumGemeinde() {
    return zuzugsdatumGemeinde;
  }

  public void setZuzugsdatumGemeinde(Date zuzugsdatumGemeinde) {
    this.zuzugsdatumGemeinde = zuzugsdatumGemeinde;
  }

  public Date getZuzugsdatumStadtbezirk() {
    return zuzugsdatumStadtbezirk;
  }

  public void setZuzugsdatumStadtbezirk(Date zuzugsdatumStadtbezirk) {
    this.zuzugsdatumStadtbezirk = zuzugsdatumStadtbezirk;
  }

  public String getCustomData() {
    return customData;
  }

  public void setCustomData(String customData) {
    this.customData = customData;
  }

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public PersonStatus getPersonStatus() {
    return personStatus;
  }

  public void setPersonStatus(PersonStatus personStatus) {
    this.personStatus = personStatus;
  }

  public PersonenregisterAbgleichStatus getPersonenregisterAbgleichStatus() {
    return personenregisterAbgleichStatus;
  }

  public void setPersonenregisterAbgleichStatus(PersonenregisterAbgleichStatus personenregisterAbgleichStatus) {
    this.personenregisterAbgleichStatus = personenregisterAbgleichStatus;
  }

  public Date getPersonenregisterAbgleichZeitpunkt() {
    return personenregisterAbgleichZeitpunkt;
  }

  public void setPersonenregisterAbgleichZeitpunkt(Date personenregisterAbgleichZeitpunkt) {
    this.personenregisterAbgleichZeitpunkt = personenregisterAbgleichZeitpunkt;
  }

  public SichtpruefungStatus getSichtpruefungStatus() {
    return sichtpruefungStatus;
  }

  public void setSichtpruefungStatus(SichtpruefungStatus sichtpruefungStatus) {
    this.sichtpruefungStatus = sichtpruefungStatus;
  }

  public Long getBewertung() {
    return bewertung;
  }

  public void setBewertung(Long bewertung) {
    this.bewertung = bewertung;
  }

  public Bild getFoto() {
    return foto;
  }

  public void setFoto(Bild foto) {
    this.foto = foto;
  }

  public Kontoverbindung getKontoverbindung() {
    return kontoverbindung;
  }

  public void setKontoverbindung(Kontoverbindung kontoverbindung) {
    this.kontoverbindung = kontoverbindung;
  }

  public List<Teilnahme> getTeilnahmen() {
    return teilnahmen;
  }

  public void setTeilnahmen(List<Teilnahme> teilnahmen) {
    this.teilnahmen = teilnahmen;
  }

  public Anschrift getErreichbarkeitsanschrift() {
    if (erreichbarkeitsanschrift == null) {
      // legacy
      erreichbarkeitsanschrift = new Anschrift();
    }
    return erreichbarkeitsanschrift;
  }

  public void setErreichbarkeitsanschrift(Anschrift erreichbarkeitsanschrift) {
    this.erreichbarkeitsanschrift = erreichbarkeitsanschrift;
  }
}
