invoicer initial version
Change-Id: Ib20a96c224f5c055874f72f8f9a04a4dc8bbbc24
diff --git a/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Client.java b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Client.java
new file mode 100644
index 0000000..2dab10f
--- /dev/null
+++ b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Client.java
@@ -0,0 +1,69 @@
+package pl.hackerspace.domain;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Set;
+
+@Entity
+@Table(name = "client")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Client {
+
+ @Id
+ private String nip;
+
+ @Column(nullable = false)
+ private String name;
+
+ @Column(nullable = false)
+ private String email;
+
+ private String addressLine1;
+ private String addressLine2;
+
+ @Column(nullable = false)
+ private String serviceName;
+
+ @Column(nullable = false)
+ private BigDecimal price;
+
+ @Builder.Default
+ @Column(nullable = false)
+ private BigDecimal amount = BigDecimal.valueOf(1);
+
+ @Builder.Default
+ @Column(nullable = false)
+ private BigDecimal vat = BigDecimal.valueOf(23);
+
+ @Builder.Default
+ @Column(nullable = false)
+ private int paymentOffsetDays = 14;
+
+ @Builder.Default
+ private boolean subscriber = true;
+
+ private boolean prepaid;
+
+ @OneToMany(mappedBy="client")
+ Set<Invoice> invoices;
+
+ public byte[] getInvoiceForSubscriptionMonth(String monthOfInvoice) {
+ return invoices.stream()
+ .filter(i -> monthOfInvoice.equals(i.getMonthOfSubscription()))
+ .map(Invoice::getPdfContent)
+ .findFirst()
+ .orElse(null);
+ }
+}
diff --git a/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Invoice.java b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Invoice.java
new file mode 100644
index 0000000..e32f5fe
--- /dev/null
+++ b/personal/arsenicum/invoicer/src/main/java/pl/hackerspace/domain/Invoice.java
@@ -0,0 +1,41 @@
+package pl.hackerspace.domain;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Entity
+@Table(name = "invoice")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Invoice {
+
+ @Id
+ private long id;
+
+ @Column(nullable = false)
+ private String invoiceTitle;
+
+ private String monthOfSubscription;
+
+ @Column(nullable = false)
+ private LocalDateTime creationDate;
+
+ @Column(columnDefinition = "VARBINARY(50000)", nullable = false)
+ private byte[] pdfContent;
+
+ @ManyToOne
+ @JoinColumn(nullable = false)
+ private Client client;
+}