
package de.ivu.elect.business.entschaedigung.control;

import javax.inject.Inject;

import de.ivu.elect.business.entschaedigung.entity.Entschaedigungsart;
import de.ivu.elect.business.entschaedigung.entity.EntschaedigungsartKriteriumEinsatzfunktion;
import de.ivu.elect.business.entschaedigung.entity.EntschaedigungsartKriteriumEinsatzort;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.boundary.WahlterminDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class EntschaedigungsartCreate extends AbstractEntschaedigungsartCreate {

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient WahlterminDAO wahlterminDAO;

  public EntschaedigungsartCreate() {
    super();
  }

  @Override
  public void save(Entschaedigungsart entschaedigungsart) {
    Wahl wahl = entschaedigungsart.getWahl();
    Wahltermin wahltermin = entschaedigungsart.getWahltermin();

    if (wahl != null) {
      entschaedigungsart.setWahl(wahlDAO.attach(wahl));
    }

    if (wahltermin != null) {
      entschaedigungsart.setWahltermin(wahlterminDAO.attach(wahltermin));
    }

    if (!entschaedigungsart.isBerechnetPerEinsatz()) {
      entschaedigungsart.setKriteriumEinsatzort(EntschaedigungsartKriteriumEinsatzort.IRRELEVANT);
      entschaedigungsart.setKriteriumEinsatzfunktion(EntschaedigungsartKriteriumEinsatzfunktion.IRRELEVANT);
    }

    if (entschaedigungsart.hasAnzahlMaximal()) {
      entschaedigungsart.setAnzahlInitial(Math.min(entschaedigungsart.getAnzahlInitial(), entschaedigungsart.getAnzahlMaximal()));
    }

    if (entschaedigungsart.hasEinzelbetragMaximal()) {
      entschaedigungsart.setEinzelbetragInitial(entschaedigungsart.getEinzelbetragInitial().min(entschaedigungsart.getEinzelbetragMaximal()));
    }

    super.save(entschaedigungsart);
  }
}
