Skip to content

Method: getFrist(LocalDateTime)

1: package auftraege;
2:
3: import auftraege.auftragsBildungsParameter.abstraction.DokumentenklassenVariable;
4: import auftraege.auftragsBildungsParameter.abstraction.DokumentenklassenVariablenVisitor;
5:
6: import java.time.LocalDateTime;
7: import java.time.LocalTime;
8:
9: /**
10: * SLAs (Service Level Agreements) sind vertragliche Regelungen zwischen dem Auftraggeber und seinen Kunden. Dementsprechende kann ein Kunde beliebige SLAs mit dem
11: * Auftragnehmer vereinbaren. Hier enthalten sind mögliche Vertrags-Penalties, auszuliefernde Qualität und natürlich einzuhaltende Zeiten. Dies ist besonders für
12: * zeitkritische Aufträge wichtig. Für die Produktionsplanung sind diese Zeiten wichtig um besser planen zu können und vereinbarte Zeiten nicht zu verletzten. Diese
13: * Zeiten finden sich auch in Dokumentenklassen wieder, um zeitkritische Aufträge bündeln zu können.
14: * <p>
15: * Wir gehen von maximal einem SLA je Kunden aus. Aus diesem Grund müssen Anwendungsfälle mit mehreren Dokumenten ja Kunde mit unterschiedlichen SLAs nicht betrachtet
16: * werden.
17: */
18: public final class ServiceLevelAgreement implements DokumentenklassenVariable {
19:         /**
20:          * spätester Eingangszeitpunkt, bevor welchem sämtliche Dokumentenklassen eingegangen sein müssen, um das SLA noch für den Eingangstag gültig werden zu lassen.
21:          * TODO Art: unidentified; der sollte vielleicht variabel gehalten werden.
22:          */
23:         private static final LocalTime SPAETESTER_EINGANGSZEITPUNKT = LocalTime.of(16, 0);
24:         public static final ServiceLevelAgreement MAX_VALUE = new ServiceLevelAgreement(Integer.MAX_VALUE);
25:         /**
26:          * vertraglich vereinbarte Anzahl an Tagen, die maximal zwischen Eingang der {@link Dokumentenklasse} und Fertigstellung vergehen darf.
27:          */
28:         private final Integer tage;
29:
30:         /**
31:          * Erstellt ein neues {@link ServiceLevelAgreement}.
32:          *
33:          * @param tage vertraglich vereinbarte Anzahl an Tagen, die maximal zwischen Eingang der {@link Dokumentenklasse} und Fertigstellung vergehen darf.
34:          */
35:         private ServiceLevelAgreement(final Integer tage) {
36:                 this.tage = tage;
37:         }
38:
39:         /**
40:          * erstellt ein {@link ServiceLevelAgreement} für eine Dokumentenklasse auf Basis eines Eingangszeitpunktes und einer Anzahl an Tagen.
41:          *
42:          * @param tage vertraglich vereinbarte Anzahl an Tagen, die maximal zwischen Eingang der {@link Dokumentenklasse} und Fertigstellung vergehen darf.
43:          * @return das erstsellte {@link ServiceLevelAgreement}
44:          */
45:         public static ServiceLevelAgreement create(final Integer tage) {
46:                 return new ServiceLevelAgreement(tage);
47:         }
48:
49:         /**
50:          * @param eingangszeiptunkt Eingangszeitpunkt der {@link Dokumentenklasse}, deren Frist bestimmt werden soll.
51:          * @return Termin, der die Frist des SLAs angibt.
52:          * TODO Art: unidentified; mal darüber nachdenken, ob es nicht sinnvoller wäre hier LocalDate statt LocalDateTime zu nehmen
53:          */
54:         public LocalDateTime getFrist(final LocalDateTime eingangszeiptunkt) {
55:•                return eingangszeiptunkt.plusDays(eingangszeiptunkt.toLocalTime().isBefore(ServiceLevelAgreement.SPAETESTER_EINGANGSZEITPUNKT) ? this.tage : this.tage + 1);
56:         }
57:
58:         /**
59:          * @param dokumentenklasse {@link Dokumentenklasse}, deren Frist bestimmt werden soll.
60:          * @return Termin, der die Frist des SLAs angibt.
61:          * TODO Art: unidentified; mal darüber nachdenken, ob es nicht sinnvoller wäre hier LocalDate statt LocalDateTime zu nehmen
62:          */
63:         public LocalDateTime getFrist(final Dokumentenklasse dokumentenklasse) {
64:                 return this.getFrist(dokumentenklasse.getEingangsZeitpunkt());
65:         }
66:
67:         @Override
68:         public String toString() {
69:                 return String.valueOf(this.tage);
70:         }
71:
72:         @Override
73:         public <T> T accept(final DokumentenklassenVariablenVisitor<T> v) {
74:                 return v.handle(this);
75:         }
76:
77:         @Override
78:         public boolean equals(final Object o) {
79:                 if (this == o) {
80:                         return true;
81:                 } else if (o == null || this.getClass() != o.getClass()) {
82:                         return false;
83:                 }
84:                 final ServiceLevelAgreement that = (ServiceLevelAgreement) o;
85:                 return this.tage.equals(that.tage);
86:         }
87:
88:         @Override
89:         public int hashCode() {
90:                 return this.tage.hashCode();
91:         }
92:
93: }