FinancialDocument.java
package com.tdmconsult.ete.documents;
import com.tdmconsult.ete.transactions.PortfolioTransaction;
import com.tdmconsult.ete.utils.AbstractEntity;
import com.tdmconsult.ete.utils.ApiEnum;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
@Entity
@Data
@Accessors(chain = true)
@Table(name = "ete_financial_documents")
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
public class FinancialDocument extends AbstractEntity {
@Getter
@RequiredArgsConstructor
public enum State implements ApiEnum {
UPLOADED("hochgeladen"),
PROCESSED("verarbeitet");
private final String displayName;
}
@Getter
@AllArgsConstructor
public enum TypeOfDocument implements ApiEnum {
SECURITY_BUY("Kauf von Wertpapieren"),
SECURITY_SELL("Verkauf von Wertpapieren"),
DIVIDEND_PAYMENT("Dividengutschschrift"),
DISTRIBUTION_CREDIT("Ertragsgutschrift"),
CASH_DISTRIBUTION("Barausschüttung aus Kapitalherabsetzung"),
KUPON("Kupongutschrift"),
ACCOUNT_STATEMENT("Kontoauszug"),
TAX_CERTIFICATE("Steuerbescheinigung"),
OTHER("Sonstiges");
private final String displayName;
}
@Enumerated(EnumType.STRING)
private TypeOfDocument typeOfDocument;
private LocalDate dateReceived;
private String uploadBy;
@Enumerated(EnumType.STRING)
private State state;
@OneToMany(mappedBy = "financialDocument", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Attachment> attachments = new ArrayList<>();
@ManyToMany(mappedBy = "documents")
private Set<PortfolioTransaction> transactions = new HashSet<>();
public FinancialDocument linkTo(final PortfolioTransaction trx) {
transactions.add(trx);
trx.getDocuments().add(this);
return this;
}
}