Skip to content

Commit

Permalink
fix: OperationsImpossibles is computed from EvolutionPatrimoine
Browse files Browse the repository at this point in the history
fix: properly type Dette and Creance in the future

TODO: test on PatrimoineRiche is deliberately broken: fix it
  • Loading branch information
hei-teacher committed Jul 15, 2024
1 parent 1a74584 commit beb6d88
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 44 deletions.
46 changes: 31 additions & 15 deletions src/main/java/school/hei/patrimoine/modele/EvolutionPatrimoine.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import school.hei.patrimoine.modele.possession.Argent;
import school.hei.patrimoine.modele.possession.Dette;
import school.hei.patrimoine.modele.possession.FluxArgent;
import school.hei.patrimoine.modele.possession.Possession;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand All @@ -26,32 +28,46 @@ public class EvolutionPatrimoine {
private final LocalDate debut;
private final LocalDate fin;
private final Map<LocalDate, Patrimoine> evolutionJournaliere;
private final Set<Argent.OperationImpossible> operationsImpossibles;
private final Set<FluxImpossibles> fluxImpossibles;

public EvolutionPatrimoine(String nom, Patrimoine patrimoine, LocalDate debut, LocalDate fin) {
this.nom = nom;
this.patrimoine = patrimoine;
this.debut = debut;
this.fin = fin;
this.evolutionJournaliere = evolutionJournaliere();
this.operationsImpossibles = operationsImpossibles();
log.info("OPERATIONS IMPOSSIBLES: {} --> {}\n{}\n\n", debut, fin, operationsImpossibleStr());
this.fluxImpossibles = fluxImpossibles();
log.info("FLUX IMPOSSIBLES: {} --> {}\n{}\n\n", debut, fin, fluxImpossiblesStr());
}

private Set<Argent.OperationImpossible> operationsImpossibles() {
return patrimoine.possessions().stream()
.filter(p -> p instanceof Argent)
.flatMap(p -> ((Argent) p).getOperationsImpossibles().stream())
.filter(o -> o.date().isAfter(debut) || o.date().isEqual(debut))
.filter(o -> o.date().isBefore(fin) || o.date().isEqual(fin))
.collect(toSet());
private Set<FluxImpossibles> fluxImpossibles() {
var res = new HashSet<FluxImpossibles>();
evolutionJournaliere.forEach((date, patrimoine) ->
patrimoine.possessions().forEach(p -> {
if (p instanceof Argent argent && !(p instanceof Dette) && p.getValeurComptable() < 0) {
var fluxImpossibles = argent.getFluxArgents().stream()
.filter(f -> f.getDateOperation() == date.getDayOfMonth())
.filter(f -> f.getDebut().isBefore(date) || f.getDebut().isEqual(date))
.filter(f -> f.getFin().isAfter(date) || f.getFin().isEqual(date))
.collect(toSet());
if (!fluxImpossibles.isEmpty()) {
res.add(new FluxImpossibles(
date,
argent.getNom(),
argent.getValeurComptable(),
fluxImpossibles));
}
}
}
));
return res;
}

public String operationsImpossibleStr() {
return operationsImpossibles.stream()
.sorted(comparing(Argent.OperationImpossible::date))
.map(Argent.OperationImpossible::toString)
.collect(joining("\n"));
public String fluxImpossiblesStr() {
return fluxImpossibles.stream()
.sorted(comparing(FluxImpossibles::date))
.map(FluxImpossibles::toString)
.collect(joining("\n\n"));
}

private Map<LocalDate, Patrimoine> evolutionJournaliere() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package school.hei.patrimoine.modele;

import school.hei.patrimoine.modele.possession.FluxArgent;

import java.time.LocalDate;
import java.util.Set;

public record FluxImpossibles(LocalDate date, String nomArgent, int valeurArgent, Set<FluxArgent> flux) {
}
33 changes: 7 additions & 26 deletions src/main/java/school/hei/patrimoine/modele/possession/Argent.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package school.hei.patrimoine.modele.possession;

import lombok.Getter;
import lombok.ToString;
import school.hei.patrimoine.modele.Devise;

import java.time.LocalDate;
Expand All @@ -10,25 +11,12 @@
import static java.util.stream.Collectors.toSet;
import static school.hei.patrimoine.modele.Devise.NON_NOMMEE;

@ToString
@Getter
public sealed class Argent extends Possession permits Dette, Creance {
private final LocalDate dateOuverture;
private final Set<FluxArgent> fluxArgents;

private final Set<OperationImpossible> operationsImpossibles = new HashSet<>();

public record OperationImpossible(LocalDate date, int valeurArgentAvantOperation, FluxArgent flux) {
@Override
public String toString() {
return String.join(", ",
date.toString(),
flux.getArgent().getNom(),
valeurArgentAvantOperation + "",
flux.getNom(),
flux.getFluxMensuel() + "");
}
}

public Argent(String nom, LocalDate t, int valeurComptable, Devise devise) {
this(nom, t, t, valeurComptable, devise);
}
Expand Down Expand Up @@ -65,21 +53,14 @@ public Argent projectionFuture(LocalDate tFutur) {
nom,
dateOuverture,
tFutur,
valeurComptableFutur(tFutur),
valeurComptable - financementsFuturs(tFutur),
fluxArgents.stream().map(f -> f.projectionFuture(tFutur)).collect(toSet()), devise);
}

private int valeurComptableFutur(LocalDate tFutur) {
var res = valeurComptable;
for (var f : fluxArgents) {
var financementsFuturs = valeurComptable - f.projectionFuture(tFutur).getArgent().getValeurComptable();
var newRes = res - financementsFuturs;
if (!(this instanceof Dette) && newRes < 0 && newRes < res) {
operationsImpossibles.add(new Argent.OperationImpossible(tFutur, res, f));
}
res = newRes;
}
return res;
private int financementsFuturs(LocalDate tFutur) {
return fluxArgents.stream()
.mapToInt(f -> valeurComptable - f.projectionFuture(tFutur).getArgent().getValeurComptable())
.sum();
}

void addFinancés(FluxArgent fluxArgent) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,13 @@ public Creance(String nom, LocalDate t, int valeurComptable, Devise devise) {
public Creance(String nom, LocalDate t, int valeurComptable) {
this(nom, t, valeurComptable, NON_NOMMEE);
}

private Creance(Argent argent) {
this(argent.nom, argent.t, argent.valeurComptable, argent.devise);
}

@Override
public Creance projectionFuture(LocalDate tFutur) {
return new Creance(super.projectionFuture(tFutur));
}
}
11 changes: 10 additions & 1 deletion src/main/java/school/hei/patrimoine/modele/possession/Dette.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,13 @@ public Dette(String nom, LocalDate t, int valeurComptable, Devise devise) {
public Dette(String nom, LocalDate t, int valeurComptable) {
this(nom, t, valeurComptable, NON_NOMMEE);
}
}

private Dette(Argent argent) {
this(argent.nom, argent.t, argent.valeurComptable, argent.devise);
}

@Override
public Dette projectionFuture(LocalDate tFutur) {
return new Dette(super.projectionFuture(tFutur));
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package school.hei.patrimoine.modele.possession;

import lombok.Getter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import school.hei.patrimoine.modele.Devise;

import java.time.LocalDate;

import static school.hei.patrimoine.modele.Devise.NON_NOMMEE;

@ToString(callSuper = true)
@Slf4j
@Getter
public final class FluxArgent extends Possession {
@ToString.Exclude
private final Argent argent;
private final LocalDate debut;
private final LocalDate fin;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
import school.hei.patrimoine.modele.Devise;

import java.io.Serializable;
import java.time.LocalDate;

import static school.hei.patrimoine.modele.Devise.NON_NOMMEE;

@ToString
@EqualsAndHashCode
@AllArgsConstructor
@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ public OperationsImpossiblesIHM(PatrimoinesVisualisables patrimoinesVisualisable
}

private void updateTextPane() {
var operationsImpossibleStr = patrimoinesVisualisables.getEvolutionPatrimoine().operationsImpossibleStr();
var operationsImpossibleStr = patrimoinesVisualisables.getEvolutionPatrimoine().fluxImpossiblesStr();
operationsImpossiblesTextPane.setText(
"".equals(operationsImpossibleStr)
? ""
: ("!! OPERATIONS IMPOSSIBLES !!\n\n" + operationsImpossibleStr));
: ("!! FLUX IMPOSSIBLES !!\n\n" + operationsImpossibleStr));
}

@Override
Expand Down

0 comments on commit beb6d88

Please sign in to comment.