From: Vásáry Dániel Date: Thu, 21 Dec 2023 09:01:33 +0000 (+0100) Subject: EDocument handling completed, project set changed to ordered list X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=60dfb43809fcf1526864b5493f52d4df1af06274;p=sly-crm.git EDocument handling completed, project set changed to ordered list --- diff --git a/lis-app/src/test/java/hu/user/lis/ReflectionsIT.java b/lis-app/src/test/java/hu/user/lis/ReflectionsIT.java index 87d2166..38c7bc4 100644 --- a/lis-app/src/test/java/hu/user/lis/ReflectionsIT.java +++ b/lis-app/src/test/java/hu/user/lis/ReflectionsIT.java @@ -5,7 +5,6 @@ package hu.user.lis; -import com.google.common.collect.Sets; import hu.user.lis.db.Associate; import hu.user.lis.db.Project; import hu.user.lis.db.Treasury; @@ -21,6 +20,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.test.context.junit4.SpringRunner; import java.util.Arrays; +import java.util.Collections; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -76,7 +76,7 @@ public class ReflectionsIT { .build(); Project project = Project.builder() .id(1L) - .treasuries(Sets.newHashSet(treasury)) + .treasuries(Collections.singletonList(treasury)) .build(); Project clone = SerializationUtils.clone(project); Treasury cloneTreasury = (Treasury) clone.getTreasuries().toArray()[0]; @@ -96,7 +96,7 @@ public class ReflectionsIT { .build(); Project project = Project.builder() .id(1L) - .treasuries(Sets.newHashSet(treasury1, treasury2)) + .treasuries(Arrays.asList(treasury1, treasury2)) .build(); Project clone = SerializationUtils.clone(project); Treasury treasury3 = Treasury.builder() @@ -107,7 +107,7 @@ public class ReflectionsIT { .id(2L) .humanId("Test2") .build(); - clone.setTreasuries(Sets.newHashSet(treasury4, treasury3)); + clone.setTreasuries(Arrays.asList(treasury4, treasury3)); assertTrue(entityDataService.areEquals(project, clone)); } } diff --git a/lis-db/migrations/scripts/018_add_signed_to_service_record.sql b/lis-db/migrations/scripts/018_add_signed_to_service_record.sql new file mode 100644 index 0000000..9d1a07c --- /dev/null +++ b/lis-db/migrations/scripts/018_add_signed_to_service_record.sql @@ -0,0 +1,10 @@ +-- // add signed to service_record +-- Migration SQL that makes the change goes here. + +ALTER TABLE service_record ADD COLUMN signed SMALLINT NOT NULL DEFAULT 0; + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE service_record DROP COLUMN signed; +CALL SYSPROC.ADMIN_CMD('REORG TABLE service_record'); diff --git a/lis-db/migrations/scripts/019_add_order_to_treasury.sql b/lis-db/migrations/scripts/019_add_order_to_treasury.sql new file mode 100644 index 0000000..c46fefa --- /dev/null +++ b/lis-db/migrations/scripts/019_add_order_to_treasury.sql @@ -0,0 +1,10 @@ +-- // add order to treasury +-- Migration SQL that makes the change goes here. + +ALTER TABLE treasury ADD COLUMN pos SMALLINT NOT NULL DEFAULT 0; + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE treasury DROP COLUMN pos; +CALL SYSPROC.ADMIN_CMD('REORG TABLE treasury'); diff --git a/lis-db/migrations/scripts/020_add_order_to_invoice.sql b/lis-db/migrations/scripts/020_add_order_to_invoice.sql new file mode 100644 index 0000000..05a6d6c --- /dev/null +++ b/lis-db/migrations/scripts/020_add_order_to_invoice.sql @@ -0,0 +1,10 @@ +-- // add order to invoice +-- Migration SQL that makes the change goes here. + +ALTER TABLE invoice ADD COLUMN pos SMALLINT NOT NULL DEFAULT 0; + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE invoice DROP COLUMN pos; +CALL SYSPROC.ADMIN_CMD('REORG TABLE invoice'); diff --git a/lis-db/migrations/scripts/021_add_technical_id_to_invoice.sql b/lis-db/migrations/scripts/021_add_technical_id_to_invoice.sql new file mode 100644 index 0000000..d3fc241 --- /dev/null +++ b/lis-db/migrations/scripts/021_add_technical_id_to_invoice.sql @@ -0,0 +1,10 @@ +-- // add order to invoice +-- Migration SQL that makes the change goes here. + +ALTER TABLE invoice ADD COLUMN technical_id VARCHAR(8); + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE invoice DROP COLUMN technical_id; +CALL SYSPROC.ADMIN_CMD('REORG TABLE invoice'); diff --git a/lis-db/migrations/scripts/022_add_technical_id_to_treasury.sql b/lis-db/migrations/scripts/022_add_technical_id_to_treasury.sql new file mode 100644 index 0000000..9fbf255 --- /dev/null +++ b/lis-db/migrations/scripts/022_add_technical_id_to_treasury.sql @@ -0,0 +1,10 @@ +-- // add order to treasury +-- Migration SQL that makes the change goes here. + +ALTER TABLE treasury ADD COLUMN technical_id VARCHAR(8); + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE treasury DROP COLUMN technical_id; +CALL SYSPROC.ADMIN_CMD('REORG TABLE treasury'); diff --git a/lis-db/migrations/scripts/023_remove_file.sql b/lis-db/migrations/scripts/023_remove_file.sql new file mode 100644 index 0000000..411e61d --- /dev/null +++ b/lis-db/migrations/scripts/023_remove_file.sql @@ -0,0 +1,23 @@ +-- // remove file +-- Migration SQL that makes the change goes here. + +ALTER TABLE treasury DROP COLUMN file; +CALL SYSPROC.ADMIN_CMD('REORG TABLE treasury'); + +ALTER TABLE invoice DROP COLUMN file; +CALL SYSPROC.ADMIN_CMD('REORG TABLE invoice'); + +ALTER TABLE service_record DROP COLUMN file; +CALL SYSPROC.ADMIN_CMD('REORG TABLE service_record'); + +-- //@UNDO +-- SQL to undo the change goes here. + +ALTER TABLE treasury ADD COLUMN file BLOB; +CALL SYSPROC.ADMIN_CMD('REORG TABLE treasury'); + +ALTER TABLE invoice ADD COLUMN file BLOB; +CALL SYSPROC.ADMIN_CMD('REORG TABLE invoice'); + +ALTER TABLE service_record ADD COLUMN file BLOB; +CALL SYSPROC.ADMIN_CMD('REORG TABLE service_record'); diff --git a/lis-db/src/main/java/hu/user/lis/db/Associate.java b/lis-db/src/main/java/hu/user/lis/db/Associate.java index 6a679bf..2ead6ae 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Associate.java +++ b/lis-db/src/main/java/hu/user/lis/db/Associate.java @@ -1,27 +1,30 @@ package hu.user.lis.db; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import java.io.Serializable; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class Associate implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; - String name; - String login; - String password; - double monthlyCost; - boolean active; - boolean remotelyAuthenticated; +public class Associate extends IdEntity { + + private String name; + + private String login; + + private String password; + + private double monthlyCost; + + private boolean active; + + private boolean remotelyAuthenticated; } diff --git a/lis-db/src/main/java/hu/user/lis/db/Currency.java b/lis-db/src/main/java/hu/user/lis/db/Currency.java index 1b30c93..4c3d509 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Currency.java +++ b/lis-db/src/main/java/hu/user/lis/db/Currency.java @@ -11,6 +11,4 @@ public enum Currency { Currency(int val) { this.val = val; } - - } diff --git a/lis-db/src/main/java/hu/user/lis/db/EDocument.java b/lis-db/src/main/java/hu/user/lis/db/EDocument.java index 06a36ac..c345602 100644 --- a/lis-db/src/main/java/hu/user/lis/db/EDocument.java +++ b/lis-db/src/main/java/hu/user/lis/db/EDocument.java @@ -1,22 +1,23 @@ package hu.user.lis.db; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import org.hibernate.annotations.CreationTimestamp; -import javax.persistence.*; -import java.io.Serializable; +import javax.persistence.Column; +import javax.persistence.Entity; import java.util.Date; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class EDocument implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; +public class EDocument extends IdEntity { @Column(nullable = false) private Long referenceId; diff --git a/lis-db/src/main/java/hu/user/lis/db/IdEntity.java b/lis-db/src/main/java/hu/user/lis/db/IdEntity.java new file mode 100644 index 0000000..ed6cc07 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/IdEntity.java @@ -0,0 +1,27 @@ +package hu.user.lis.db; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import java.io.Serializable; + +@Getter +@Setter +@SuperBuilder +@MappedSuperclass +@NoArgsConstructor +@AllArgsConstructor +public class IdEntity implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + +} diff --git a/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java b/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java index eb53cc1..8c1ba48 100644 --- a/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java +++ b/lis-db/src/main/java/hu/user/lis/db/IncomingInvoice.java @@ -1,5 +1,6 @@ package hu.user.lis.db; +import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import javax.persistence.DiscriminatorValue; @@ -7,9 +8,7 @@ import javax.persistence.Entity; @Entity @SuperBuilder +@NoArgsConstructor @DiscriminatorValue("1") public class IncomingInvoice extends Invoice { - public IncomingInvoice() { - incoming = true; - } } diff --git a/lis-db/src/main/java/hu/user/lis/db/Invoice.java b/lis-db/src/main/java/hu/user/lis/db/Invoice.java index 3be87a4..8c5fe92 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Invoice.java +++ b/lis-db/src/main/java/hu/user/lis/db/Invoice.java @@ -7,7 +7,6 @@ import lombok.Setter; import lombok.experimental.SuperBuilder; import javax.persistence.*; -import java.io.Serializable; import java.util.Date; @Getter @@ -17,47 +16,45 @@ import java.util.Date; @NoArgsConstructor @DiscriminatorColumn(name = "incoming", discriminatorType = DiscriminatorType.INTEGER) @Inheritance(strategy = InheritanceType.SINGLE_TABLE) -public class Invoice implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; +public class Invoice extends IdEntity { - String humanId; + @OneToOne + @JoinColumn(name = "partner_id") + @JsonIncludeProperties({"id"}) + private Partner partner; - String title; + @ManyToOne + @JoinColumn(name = "project_id") + @JsonIncludeProperties({"id"}) + private Project project; - Currency currency; + private String humanId; - double netAmount; + private String title; - double grossAmount; + private Currency currency; - double vatAmount; + private double netAmount; - Date completionDate; + private double grossAmount; - Date createDate; + private double vatAmount; - Date paymentDeadline; + private Date completionDate; - @Column(nullable = false, insertable = false, updatable = false) - boolean incoming; + private Date createDate; - InvoiceStatus status; + private Date paymentDeadline; - boolean paid; + private InvoiceStatus status; - boolean planned; + @Column(nullable = false, insertable = false, updatable = false) + private boolean incoming; - byte[] file; + private boolean planned; - @OneToOne - @JoinColumn(name = "partner_id") - @JsonIncludeProperties({"id"}) - Partner partner; + private boolean paid; + + private String technicalId; - @ManyToOne - @JoinColumn(name = "project_id") - @JsonIncludeProperties({"id"}) - Project project; } diff --git a/lis-db/src/main/java/hu/user/lis/db/InvoiceImport.java b/lis-db/src/main/java/hu/user/lis/db/InvoiceImport.java index 9ade154..6d1df7a 100644 --- a/lis-db/src/main/java/hu/user/lis/db/InvoiceImport.java +++ b/lis-db/src/main/java/hu/user/lis/db/InvoiceImport.java @@ -2,24 +2,24 @@ package hu.user.lis.db; import com.fasterxml.jackson.annotation.JsonIncludeProperties; import hu.user.lis.db.converter.StringListConverter; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import org.hibernate.annotations.CreationTimestamp; import javax.persistence.*; -import java.io.Serializable; import java.util.Date; import java.util.List; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class InvoiceImport implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; +public class InvoiceImport extends IdEntity { @ManyToOne @JoinColumn(name = "invoice_id") diff --git a/lis-db/src/main/java/hu/user/lis/db/InvoiceStatus.java b/lis-db/src/main/java/hu/user/lis/db/InvoiceStatus.java index c7387c0..c6eb7e7 100644 --- a/lis-db/src/main/java/hu/user/lis/db/InvoiceStatus.java +++ b/lis-db/src/main/java/hu/user/lis/db/InvoiceStatus.java @@ -5,12 +5,13 @@ import lombok.Getter; @Getter public enum InvoiceStatus { + INACTIVE(0), ACTIVE(1), SUSPENDED(2); - final int val; + + private final int val; InvoiceStatus(int val) { this.val = val; } - } diff --git a/lis-db/src/main/java/hu/user/lis/db/Partner.java b/lis-db/src/main/java/hu/user/lis/db/Partner.java index 8b09f36..a69bf52 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Partner.java +++ b/lis-db/src/main/java/hu/user/lis/db/Partner.java @@ -1,34 +1,35 @@ package hu.user.lis.db; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; -import javax.persistence.*; -import java.io.Serializable; +import javax.persistence.Column; +import javax.persistence.Entity; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class Partner implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; +public class Partner extends IdEntity { - String name; + private String name; @Column(nullable = false) - String shortName; + private String shortName; @Column(unique = true) - String vatNr; + private String vatNr; - String address; + private String address; - String orderDescription; + private String orderDescription; - boolean active; + private boolean active; - boolean createdByImport; + private boolean createdByImport; } diff --git a/lis-db/src/main/java/hu/user/lis/db/Payment.java b/lis-db/src/main/java/hu/user/lis/db/Payment.java index 0937d61..cb0df95 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Payment.java +++ b/lis-db/src/main/java/hu/user/lis/db/Payment.java @@ -1,28 +1,35 @@ package hu.user.lis.db; import com.fasterxml.jackson.annotation.JsonIncludeProperties; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; -import javax.persistence.*; -import java.io.Serializable; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import java.util.Date; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class Payment implements Serializable { +public class Payment extends IdEntity { + @ManyToOne @JoinColumn(name = "invoice_id") @JsonIncludeProperties({"id"}) - Invoice invoice; - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; - double netAmount; - double grossAmount; - double vatAmount; - Date paymentDate; + private Invoice invoice; + + private double netAmount; + + private double grossAmount; + + private double vatAmount; + + private Date paymentDate; } diff --git a/lis-db/src/main/java/hu/user/lis/db/Profile.java b/lis-db/src/main/java/hu/user/lis/db/Profile.java index 1e800a8..ed008ff 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Profile.java +++ b/lis-db/src/main/java/hu/user/lis/db/Profile.java @@ -1,24 +1,24 @@ package hu.user.lis.db; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import java.io.Serializable; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class Profile implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; - String login; - String type; - String setting; +public class Profile extends IdEntity { + + private String login; + + private String type; + + private String setting; } diff --git a/lis-db/src/main/java/hu/user/lis/db/Project.java b/lis-db/src/main/java/hu/user/lis/db/Project.java index bb2b0c2..daab3ae 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Project.java +++ b/lis-db/src/main/java/hu/user/lis/db/Project.java @@ -1,60 +1,63 @@ package hu.user.lis.db; import com.fasterxml.jackson.annotation.JsonIncludeProperties; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.Where; import javax.persistence.*; -import java.io.Serializable; -import java.util.Set; +import java.util.List; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class Project implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; +public class Project extends IdEntity { @ManyToOne @JoinColumn(name = "project_status_id") - ProjectStatus projectStatus; + private ProjectStatus projectStatus; @ManyToOne @Fetch(FetchMode.JOIN) @JsonIncludeProperties({"id"}) - Partner partner; + private Partner partner; @OneToMany(targetEntity = IncomingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "project_id", referencedColumnName = "id") @Where(clause = "incoming=1") @Fetch(FetchMode.JOIN) + @OrderColumn(name = "pos") @JsonIncludeProperties({"id"}) - Set incomingInvoices; + private List incomingInvoices; @OneToMany(targetEntity = OutgoingInvoice.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "project_id", referencedColumnName = "id") @Where(clause = "incoming=0") @Fetch(FetchMode.JOIN) + @OrderColumn(name = "pos") @JsonIncludeProperties({"id"}) - Set outgoingInvoices; + private List outgoingInvoices; @OneToMany(targetEntity = Treasury.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true) @JoinColumn(name = "project_id", referencedColumnName = "id") @Fetch(FetchMode.JOIN) + @OrderColumn(name = "pos") @JsonIncludeProperties({"id"}) - Set treasuries; + private List treasuries; - String name; + private String name; - String humanId; + private String humanId; - String contactName; + private String contactName; - boolean active; + private boolean active; } diff --git a/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java b/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java index 8cf69ce..d231d32 100644 --- a/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java +++ b/lis-db/src/main/java/hu/user/lis/db/ProjectAssociate.java @@ -1,23 +1,23 @@ package hu.user.lis.db; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import java.io.Serializable; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class ProjectAssociate implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; - Long projectId; - Long associateId; +public class ProjectAssociate extends IdEntity { + + private Long projectId; + + private Long associateId; + } diff --git a/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java b/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java index 759cc6a..3ccdc94 100644 --- a/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java +++ b/lis-db/src/main/java/hu/user/lis/db/ProjectStatus.java @@ -1,24 +1,24 @@ package hu.user.lis.db; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import java.io.Serializable; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class ProjectStatus implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; - String name; - boolean active; - int order; +public class ProjectStatus extends IdEntity { + + private String name; + + private boolean active; + + private int order; } diff --git a/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java b/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java index 44d9d27..cd17d27 100644 --- a/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java +++ b/lis-db/src/main/java/hu/user/lis/db/ServiceRecord.java @@ -1,22 +1,24 @@ package hu.user.lis.db; import com.fasterxml.jackson.annotation.JsonIncludeProperties; -import lombok.*; - -import javax.persistence.*; -import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import java.util.Date; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class ServiceRecord implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; +public class ServiceRecord extends IdEntity { @ManyToOne @JoinColumn(name = "project_id") @@ -37,6 +39,7 @@ public class ServiceRecord implements Serializable { private int workHours; private double cost; - - private byte[] file; + + private boolean signed; + } diff --git a/lis-db/src/main/java/hu/user/lis/db/Supplier.java b/lis-db/src/main/java/hu/user/lis/db/Supplier.java deleted file mode 100644 index 11e6ded..0000000 --- a/lis-db/src/main/java/hu/user/lis/db/Supplier.java +++ /dev/null @@ -1,16 +0,0 @@ -package hu.user.lis.db; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Builder -@AllArgsConstructor -public class Supplier { - String id; - String name; - String zipCode; -} diff --git a/lis-db/src/main/java/hu/user/lis/db/Treasury.java b/lis-db/src/main/java/hu/user/lis/db/Treasury.java index acf1836..a0adcd7 100644 --- a/lis-db/src/main/java/hu/user/lis/db/Treasury.java +++ b/lis-db/src/main/java/hu/user/lis/db/Treasury.java @@ -1,45 +1,44 @@ package hu.user.lis.db; -import lombok.*; +import com.fasterxml.jackson.annotation.JsonIncludeProperties; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import java.io.Serializable; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import java.util.Date; @Getter @Setter @Entity -@Builder +@SuperBuilder @NoArgsConstructor @AllArgsConstructor -public class Treasury implements Serializable { +public class Treasury extends IdEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; + @ManyToOne + @JoinColumn(name = "project_id") + @JsonIncludeProperties({"id"}) + private Project project; - String humanId; + private String humanId; - double buyAmount; + private double buyAmount; - Currency buyCurrency; + private Currency buyCurrency; - double sellAmount; + private double sellAmount; - Currency sellCurrency; + private Currency sellCurrency; - Date transactionDate; + private Date transactionDate; - Date valueDate; + private Date valueDate; - byte[] file; - -// @ManyToOne(fetch = FetchType.LAZY) -// @JoinColumn(name = "project_id") -// @JsonIncludeProperties({"id"}) -// Project project; + private String technicalId; } diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/EDocumentRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/EDocumentRepository.java index 7b913e3..35697da 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/EDocumentRepository.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/EDocumentRepository.java @@ -2,10 +2,15 @@ package hu.user.lis.db.repository; import hu.user.lis.db.EDocument; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import java.util.List; public interface EDocumentRepository extends JpaRepository { List findByReferenceIdAndDocumentType(Long referenceId, String documentType); + @Modifying + @Query("UPDATE EDocument e SET e.referenceId = :referenceId WHERE e.id IN (:ids)") + void attach(Long referenceId, List ids); } diff --git a/lis-service/src/main/java/hu/user/lis/service/api/ProjectApi.java b/lis-service/src/main/java/hu/user/lis/service/api/ProjectApi.java index ec1767f..e1827be 100644 --- a/lis-service/src/main/java/hu/user/lis/service/api/ProjectApi.java +++ b/lis-service/src/main/java/hu/user/lis/service/api/ProjectApi.java @@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Objects; -import java.util.Set; @Log4j2 @RestController @@ -43,7 +42,7 @@ public class ProjectApi extends DbApi entities) { entities.forEach(p -> { - Set incomingInvoices = p.getIncomingInvoices(); + List incomingInvoices = p.getIncomingInvoices(); if (Objects.nonNull(incomingInvoices)) { incomingInvoices.forEach(i -> { // i.setProject(p); @@ -51,7 +50,7 @@ public class ProjectApi extends DbApi outgoingInvoices = p.getOutgoingInvoices(); + List outgoingInvoices = p.getOutgoingInvoices(); if (Objects.nonNull(outgoingInvoices)) { outgoingInvoices.forEach(i -> { // i.setProject(p); @@ -59,7 +58,7 @@ public class ProjectApi extends DbApi treasuries = p.getTreasuries(); + List treasuries = p.getTreasuries(); treasuries.forEach(t -> { // t.setProject(p); treasuryRepository.save(t); diff --git a/lis-service/src/main/java/hu/user/lis/service/data/EDocumentService.java b/lis-service/src/main/java/hu/user/lis/service/data/EDocumentService.java deleted file mode 100644 index 975169a..0000000 --- a/lis-service/src/main/java/hu/user/lis/service/data/EDocumentService.java +++ /dev/null @@ -1,9 +0,0 @@ -package hu.user.lis.service.data; - -import hu.user.lis.db.EDocument; - -public interface EDocumentService extends DataService { - EDocument createNew(); - - void add(EDocument entity); -} diff --git a/lis-service/src/main/java/hu/user/lis/service/data/EDocumentServiceImpl.java b/lis-service/src/main/java/hu/user/lis/service/data/EDocumentServiceImpl.java deleted file mode 100644 index 3fd291a..0000000 --- a/lis-service/src/main/java/hu/user/lis/service/data/EDocumentServiceImpl.java +++ /dev/null @@ -1,36 +0,0 @@ -package hu.user.lis.service.data; - -import hu.user.lis.db.EDocument; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; - -@Service -@Log4j2 -public class EDocumentServiceImpl extends DataServiceImpl implements EDocumentService { - @Autowired - DataGeneratorService dataGeneratorService; - private List entities; - - @Override - public List getAll() { - if (entities == null) { - entities = new ArrayList<>(); - } - return entities; - } - - @Override - public EDocument createNew() { - return EDocument.builder().build(); - } - - @Override - public void add(EDocument entity) { - entities.add(entity); - } - -} diff --git a/lis-service/src/main/java/hu/user/lis/service/data/EntityDocumentAction.java b/lis-service/src/main/java/hu/user/lis/service/data/EntityDocumentAction.java new file mode 100644 index 0000000..e0984c0 --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/data/EntityDocumentAction.java @@ -0,0 +1,19 @@ +package hu.user.lis.service.data; + +import lombok.*; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EntityDocumentAction { + + private boolean attach; + + private Long documentId; + + public boolean isDetach() { + return !attach; + } +} diff --git a/lis-service/src/main/java/hu/user/lis/service/data/EntityDocumentService.java b/lis-service/src/main/java/hu/user/lis/service/data/EntityDocumentService.java new file mode 100644 index 0000000..4e344a4 --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/data/EntityDocumentService.java @@ -0,0 +1,26 @@ +package hu.user.lis.service.data; + +import hu.user.lis.db.repository.EDocumentRepository; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Log4j2 +public class EntityDocumentService { + @Autowired + private EDocumentRepository eDocumentRepository; + + @Transactional + public void executeActions(Long referenceId, List actions) { + List idsToAttach = actions.stream().filter(EntityDocumentAction::isAttach).map(EntityDocumentAction::getDocumentId).collect(Collectors.toList()); + eDocumentRepository.attach(referenceId, idsToAttach); + List idsToRemove = actions.stream().filter(EntityDocumentAction::isDetach).map(EntityDocumentAction::getDocumentId).collect(Collectors.toList()); + eDocumentRepository.deleteAllById(idsToRemove); + } + +} diff --git a/lis-service/src/main/java/hu/user/lis/service/data/ProjectServiceImpl.java b/lis-service/src/main/java/hu/user/lis/service/data/ProjectServiceImpl.java index 39e5b14..e6518b3 100644 --- a/lis-service/src/main/java/hu/user/lis/service/data/ProjectServiceImpl.java +++ b/lis-service/src/main/java/hu/user/lis/service/data/ProjectServiceImpl.java @@ -12,7 +12,6 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; -import java.util.HashSet; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -63,9 +62,9 @@ public class ProjectServiceImpl extends DataServiceImpl implements Proj ProjectStatus projectStatus = projectStatusService.getAll().get(0); return Project.builder() .projectStatus(projectStatus) - .incomingInvoices(new HashSet<>()) - .outgoingInvoices(new HashSet<>()) - .treasuries(new HashSet<>()) +// .incomingInvoices(new HashSet<>()) +// .outgoingInvoices(new HashSet<>()) + .treasuries(new ArrayList<>()) .active(true) .build(); } @@ -106,7 +105,7 @@ public class ProjectServiceImpl extends DataServiceImpl implements Proj .partner(partner) // .incomingInvoices(invoiceService.getRandom(true)) // .outgoingInvoices(invoiceService.getRandom(false)) - .treasuries(new HashSet<>()) + .treasuries(new ArrayList<>()) .build(); result.add(entity); } @@ -131,7 +130,7 @@ public class ProjectServiceImpl extends DataServiceImpl implements Proj .partner(partner) // .incomingInvoices(invoiceService.getByHumanIds(new String[]{"VSz-2023/00070-"})) // VSz-2023/00070- // .outgoingInvoices(invoiceService.getByHumanIds(new String[]{"USER-2023-7"})) // USER-2023-7 - .treasuries(new HashSet<>()) +// .treasuries(new HashSet<>()) .build(); result.add(entity); @@ -148,7 +147,7 @@ public class ProjectServiceImpl extends DataServiceImpl implements Proj .partner(partner) // .incomingInvoices(invoiceService.getByHumanIds(new String[]{"582-SPI1003006-3021", "582-SPI003118", "582-SPI003680", "582-SPI003681", "582-SPI004090", "9090010764", "VSz-2021/00091"})) // 582-SPI1003006-3021, 582-SPI003118, 582-SPI003680, 582-SPI003681, 582-SPI004090, 9090010764, VSz-2021/00091 // .outgoingInvoices(invoiceService.getByHumanIds(new String[]{"2021/0001", "2021/0069"})) // 2021/0001, 2021/0069 - .treasuries(treasuryService.getByHumanIds(new String[]{"014", "015"})) +// .treasuries(treasuryService.getByHumanIds(new String[]{"014", "015"})) .build(); result.add(entity); @@ -165,7 +164,7 @@ public class ProjectServiceImpl extends DataServiceImpl implements Proj .partner(partner) // .incomingInvoices(invoiceService.getByHumanIds(new String[]{"EURSZLA0177/2022", "19044", "9171058452", "9171058628", "2022-SOV/000495", "2022-SOV/000496", "E-SYMPR-2022-105"})) // EURSZLA0177/2022, 19044, 9171058452, 9171058628, V-SZ3-2022/00001, 2022-SOV/000495, 2022-SOV/000496, E-SYMPR-2022-105 // .outgoingInvoices(invoiceService.getByHumanIds(new String[]{"E-USER-2023-12", "E-USER-2023-13"})) // E-USER-2023-12, E-USER-2023-13 - .treasuries(treasuryService.getByHumanIds(new String[]{"001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011"})) +// .treasuries(treasuryService.getByHumanIds(new String[]{"001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011"})) .build(); result.add(entity); @@ -182,7 +181,7 @@ public class ProjectServiceImpl extends DataServiceImpl implements Proj .partner(partner) // .incomingInvoices(invoiceService.getByHumanIds(new String[]{"17356/23"})) // 17356/23 // .outgoingInvoices(invoiceService.getByHumanIds(new String[]{"E-USER-2023-53"})) // E-USER-2023-53 - .treasuries(new HashSet<>()) +// .treasuries(new HashSet<>()) .build(); result.add(entity); @@ -199,7 +198,7 @@ public class ProjectServiceImpl extends DataServiceImpl implements Proj .partner(partner) // .incomingInvoices(invoiceService.getByHumanIds(new String[]{"2023-SOV/000123"})) // 2023-SOV/000123 // .outgoingInvoices(invoiceService.getByHumanIds(new String[]{"E-USER-2023-95"})) // E-USER-2023-95 - .treasuries(treasuryService.getByHumanIds(new String[]{"012", "013"})) +// .treasuries(treasuryService.getByHumanIds(new String[]{"012", "013"})) .build(); result.add(entity); diff --git a/lis-service/src/main/java/hu/user/lis/service/data/SupplierService.java b/lis-service/src/main/java/hu/user/lis/service/data/SupplierService.java deleted file mode 100644 index 2365833..0000000 --- a/lis-service/src/main/java/hu/user/lis/service/data/SupplierService.java +++ /dev/null @@ -1,6 +0,0 @@ -package hu.user.lis.service.data; - -import hu.user.lis.db.Supplier; - -public interface SupplierService extends DataService { -} diff --git a/lis-service/src/main/java/hu/user/lis/service/data/SupplierServiceImpl.java b/lis-service/src/main/java/hu/user/lis/service/data/SupplierServiceImpl.java deleted file mode 100644 index 57b6cc5..0000000 --- a/lis-service/src/main/java/hu/user/lis/service/data/SupplierServiceImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package hu.user.lis.service.data; - -import hu.user.lis.db.Supplier; -import org.apache.commons.lang3.RandomStringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; - -@Service -public class SupplierServiceImpl extends DataServiceImpl implements SupplierService { - @Autowired - DataGeneratorService dataGeneratorService; - private List suppliers; - - @Override - public List getAll() { - if (suppliers == null) { - suppliers = generate(); - } - return suppliers; - } - - private List generate() { - List result = new ArrayList<>(); - for (int i = 0; i < 100; i++) { - String name = dataGeneratorService.faker().name().fullName(); - String zipCode = RandomStringUtils.random(4, "0123456789"); - Supplier supplier = Supplier.builder().name(name).zipCode(zipCode).build(); - result.add(supplier); - } - return result; - } -} diff --git a/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java b/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java index 949adbf..2b23b11 100644 --- a/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java +++ b/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java @@ -25,7 +25,6 @@ public interface InvoiceMapper { @Mapping(target = "id", ignore = true) @Mapping(target = "title", ignore = true) @Mapping(target = "planned", ignore = true) - @Mapping(target = "file", ignore = true) @Mapping(target = "partner", ignore = true) @Mapping(target = "project", ignore = true) IncomingInvoice toEntity(InvoiceData source); diff --git a/lis-ui/src/main/java/hu/user/lis/ui/converter/SupplierToNameConverter.java b/lis-ui/src/main/java/hu/user/lis/ui/converter/SupplierToNameConverter.java deleted file mode 100644 index 1087c38..0000000 --- a/lis-ui/src/main/java/hu/user/lis/ui/converter/SupplierToNameConverter.java +++ /dev/null @@ -1,19 +0,0 @@ -package hu.user.lis.ui.converter; - -import hu.user.lis.db.Supplier; -import org.zkoss.bind.BindContext; -import org.zkoss.bind.Converter; -import org.zkoss.zul.Bandbox; - -public class SupplierToNameConverter implements Converter { - - @Override - public String coerceToUi(Supplier supplier, Bandbox bandbox, BindContext bindContext) { - return supplier == null ? null : supplier.getName(); - } - - @Override - public Supplier coerceToBean(String s, Bandbox bandbox, BindContext bindContext) { - return null; - } -} \ No newline at end of file diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/EntityDocumentDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/EntityDocumentDataModel.java index dbf8f12..13815b5 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/EntityDocumentDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/EntityDocumentDataModel.java @@ -1,7 +1,10 @@ package hu.user.lis.ui.data; import hu.user.lis.db.EDocument; +import hu.user.lis.db.IdEntity; import hu.user.lis.db.repository.EDocumentRepository; +import hu.user.lis.service.data.EntityDocumentAction; +import lombok.Getter; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -10,19 +13,22 @@ import org.springframework.stereotype.Component; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.Command; import org.zkoss.zul.ListModelList; +import org.zkoss.zul.Messagebox; import java.util.*; +import java.util.stream.Collectors; @Log4j2 @Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class EntityDocumentDataModel extends ListModelList { - private final List added = new ArrayList<>(); - private final List removed = new ArrayList<>(); + + @Getter + private final List actions = new ArrayList<>(); + @Autowired private EDocumentRepository eDocumentRepository; - public EDocument getSelectedDocument() { EDocument result = null; Set documents = getSelection(); @@ -33,7 +39,6 @@ public class EntityDocumentDataModel extends ListModelList { return result; } - public void setSelectedDocument(EDocument document) { clearSelection(); if (Objects.nonNull(document)) { @@ -42,36 +47,53 @@ public class EntityDocumentDataModel extends ListModelList { BindUtils.postNotifyChange(this, "selectedDocument"); } - public void refresh(Long referenceId, String documentType) { + public void refresh(IdEntity formDocument, String documentType, List actions) { clear(); - List documents = eDocumentRepository.findByReferenceIdAndDocumentType(referenceId, documentType); - addAll(documents); - if (!documents.isEmpty()) { - setSelectedDocument(documents.stream().findFirst().get()); + if (Objects.nonNull(formDocument.getId())) { + if (Objects.nonNull(actions)) { + List ids = actions.stream().filter(EntityDocumentAction::isAttach).map(EntityDocumentAction::getDocumentId).collect(Collectors.toList()); + if (!ids.isEmpty()) { + List allById = eDocumentRepository.findAllById(ids); + addAll(allById); + } + } + + List documents = eDocumentRepository.findByReferenceIdAndDocumentType(formDocument.getId(), documentType); + addAll(documents); + + if (!getInnerList().isEmpty()) { + setSelectedDocument(getInnerList().get(0)); + } } } public void addNew(EDocument document) { - added.add(document); + long count = getInnerList().stream().filter(d -> d.getName().equals(document.getName()) && d.getSize() == document.getSize()).count(); + if (count > 0) { + Messagebox.show("A fájl már csatolva van."); + return; + } + eDocumentRepository.save(document); add(document); setSelectedDocument(document); + actions.add(EntityDocumentAction.builder().attach(true).documentId(document.getId()).build()); } public void remove() { - EDocument selectedDocument = getSelectedDocument(); - removed.add(selectedDocument); - setSelectedDocument(null); - remove(selectedDocument); + EDocument document = getSelectedDocument(); + if (Objects.nonNull(document)) { + actions.add(EntityDocumentAction.builder().documentId(document.getId()).build()); + setSelectedDocument(null); + remove(document); + } } - public void save(Long entityId) { - eDocumentRepository.deleteAll(removed); - added.forEach(d -> d.setReferenceId(entityId)); - eDocumentRepository.saveAll(added); + public boolean hasFiles() { + return !getInnerList().isEmpty(); } public boolean isChanged() { - return !added.isEmpty() || !removed.isEmpty(); + return !actions.isEmpty(); } @Command diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java index 4e8ef17..78c4c20 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/IncomeMarginsDataModel.java @@ -18,21 +18,21 @@ public class IncomeMarginsDataModel extends ArrayList { public void recalculate(Project project, ServiceRecordsDataModel serviceRecordsDataModel) { clear(); Map balances = new HashMap<>(); - Set outgoingInvoices = project.getOutgoingInvoices(); + List outgoingInvoices = project.getOutgoingInvoices(); if (Objects.nonNull(outgoingInvoices)) { for (Invoice invoice : outgoingInvoices) { addBalance(balances, invoice.getCurrency(), invoice.getNetAmount()); } } - Set incomingInvoices = project.getIncomingInvoices(); + List incomingInvoices = project.getIncomingInvoices(); if (Objects.nonNull(incomingInvoices)) { for (Invoice invoice : incomingInvoices) { substractBalance(balances, invoice.getCurrency(), invoice.getNetAmount()); } } - Set treasuries = project.getTreasuries(); + List treasuries = project.getTreasuries(); if (Objects.nonNull(treasuries)) { for (Treasury treasury : treasuries) { substractBalance(balances, treasury.getSellCurrency(), treasury.getSellAmount()); @@ -51,7 +51,7 @@ public class IncomeMarginsDataModel extends ArrayList { .sorted(Comparator.comparing(IncomeMargin::getCurrency)) .collect(Collectors.toCollection(() -> this)); - BindUtils.postNotifyChange(null, null, this, "*"); + BindUtils.postNotifyChange(this, "*"); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java index 90cb340..bddfd37 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/InvoiceDataModel.java @@ -8,6 +8,7 @@ import hu.user.lis.db.repository.InvoiceRepository; import hu.user.lis.service.data.EntityDataService; import hu.user.lis.service.data.InvoiceService; import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -35,11 +36,13 @@ public class InvoiceDataModel { } public IncomingInvoice createNewIncomingInvoice() { - return IncomingInvoice.builder().incoming(true).status(InvoiceStatus.ACTIVE).build(); + String technicalId = RandomStringUtils.random(8, "0123456789abcdef"); + return IncomingInvoice.builder().incoming(true).technicalId(technicalId).status(InvoiceStatus.ACTIVE).build(); } public OutgoingInvoice createNewOutgoingInvoice() { - return OutgoingInvoice.builder().status(InvoiceStatus.ACTIVE).build(); + String technicalId = RandomStringUtils.random(8, "0123456789abcdef"); + return OutgoingInvoice.builder().technicalId(technicalId).status(InvoiceStatus.ACTIVE).build(); } public void save(Invoice modifiedEntity) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java index 09498c7..1fbd6e3 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java @@ -2,6 +2,7 @@ package hu.user.lis.ui.data; import hu.user.lis.db.Project; import hu.user.lis.db.ProjectStatus; +import hu.user.lis.db.repository.InvoiceRepository; import hu.user.lis.db.repository.ProjectRepository; import hu.user.lis.service.data.EntityDataService; import hu.user.lis.ui.data.common.CachedSpringDataModel; @@ -16,7 +17,7 @@ import org.zkoss.zul.FieldComparator; import javax.persistence.EntityNotFoundException; import java.text.DecimalFormat; import java.time.Year; -import java.util.HashSet; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -27,6 +28,9 @@ public class ProjectsDataModel extends CachedSpringDataModel { @Autowired ProjectRepository projectRepository; + @Autowired + InvoiceRepository invoiceRepository; + @Autowired ProjectStatusDataModel projectStatusDataModel; @@ -83,9 +87,9 @@ public class ProjectsDataModel extends CachedSpringDataModel { ProjectStatus projectStatus = projectStatusDataModel.getDefault(); return Project.builder() .projectStatus(projectStatus) - .incomingInvoices(new HashSet<>()) - .outgoingInvoices(new HashSet<>()) - .treasuries(new HashSet<>()) + .incomingInvoices(new ArrayList<>()) + .outgoingInvoices(new ArrayList<>()) + .treasuries(new ArrayList<>()) .active(true) .build(); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java deleted file mode 100644 index f2813d7..0000000 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersDataModel.java +++ /dev/null @@ -1,92 +0,0 @@ -package hu.user.lis.ui.data; - -import hu.user.lis.db.Supplier; -import hu.user.lis.service.data.SupplierService; -import hu.user.lis.ui.data.common.CachedDataModel; -import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import org.zkoss.bind.BindUtils; -import org.zkoss.zul.FieldComparator; - -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - -@Component -@Log4j2 -@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class SuppliersDataModel extends CachedDataModel { - @Autowired - SupplierService supplierService; - private String partialName; - private String partialZipCode; - private boolean listAll; - - private boolean canExecuteSearch() { - boolean result = StringUtils.isNotBlank(partialName) || StringUtils.isNotBlank(partialZipCode) || listAll; - log.info("Can execute searchByProject: {}", result); - return result; - } - - private boolean filter(Supplier supplier) { - if (listAll) { - return true; - } - - boolean result = true; - if (StringUtils.isNotBlank(partialName)) { - if (!supplier.getName().toLowerCase().startsWith(partialName.toLowerCase())) { - result = false; - } - } - if (StringUtils.isNotBlank(partialZipCode)) { - if (!supplier.getZipCode().toLowerCase().startsWith(partialZipCode.toLowerCase())) { - result = false; - } - } - return result; - } - - @Override - public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - List result = null; - if (canExecuteSearch()) { - result = supplierService.getAll().stream() - .sorted(Comparator.comparing(Supplier::getName)) - .filter(s -> filter(s)) - .collect(Collectors.toList()); - } - return result; - } - - @Override - public int getResultSetCount() { - int result = 0; - if (canExecuteSearch()) { - result = (int) supplierService.getAll().stream() - .filter(s -> filter(s)) - .count(); - } - return result; - } - - public void search(String partialName, String partialZipCode) { - log.info("Searching supplier using filters: name LIKE {}, ZIP code LIKE {}", partialName, partialZipCode); - listAll = false; - this.partialName = partialName; - this.partialZipCode = partialZipCode; - super.reset(); - BindUtils.postNotifyChange(null, null, this, "*"); - } - - public void listAll() { - log.info("List all suppliers"); - listAll = true; - super.reset(); - BindUtils.postNotifyChange(null, null, this, "*"); - } -} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersSimpleDataModel.java b/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersSimpleDataModel.java deleted file mode 100644 index b8f6784..0000000 --- a/lis-ui/src/main/java/hu/user/lis/ui/data/SuppliersSimpleDataModel.java +++ /dev/null @@ -1,64 +0,0 @@ -package hu.user.lis.ui.data; - -import hu.user.lis.db.Supplier; -import hu.user.lis.service.data.SupplierService; -import hu.user.lis.ui.data.common.CachedDataModel; -import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import org.zkoss.bind.BindUtils; -import org.zkoss.zul.FieldComparator; - -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - -@Component -@Log4j2 -@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class SuppliersSimpleDataModel extends CachedDataModel { - static private final int SEARCH_LIMIT = 10; - @Autowired - SupplierService supplierService; - private String partialName; - - private boolean filter(Supplier supplier) { - if (StringUtils.isBlank(partialName)) { - return true; - } else { - if (supplier.getName().toLowerCase().startsWith(partialName.toLowerCase())) { - return true; - } - } - return false; - } - - @Override - public List getResultSet(int page, int pageSize, FieldComparator sortComparator) { - List result = supplierService.getAll().stream() - .sorted(Comparator.comparing(Supplier::getName)) - .filter(s -> filter(s)) - .limit(SEARCH_LIMIT) - .collect(Collectors.toList()); - return result; - } - - @Override - public int getResultSetCount() { - int result = (int) supplierService.getAll().stream() - .filter(s -> filter(s)) - .limit(SEARCH_LIMIT) - .count(); - return result; - } - - public void search(String partialName) { - log.info("Searching supplier using filter {}", partialName); - this.partialName = partialName; - super.reset(); - BindUtils.postNotifyChange(null, null, this, "*"); - } -} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java index 8105beb..8bc0132 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java @@ -3,25 +3,22 @@ package hu.user.lis.ui.editor; import hu.user.lis.db.Currency; import hu.user.lis.db.Invoice; import hu.user.lis.db.Partner; -import hu.user.lis.ui.editor.common.EntityEditorModel; +import hu.user.lis.ui.editor.common.EntityAttachmentEditorModel; import hu.user.lis.ui.editor.validator.FormValidator; import hu.user.lis.ui.editor.validator.InvoiceFormValidator; import lombok.Getter; import lombok.Setter; import lombok.extern.log4j.Log4j2; -import org.zkoss.bind.BindContext; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.*; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; -import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zk.ui.select.annotation.WireVariable; -import org.zkoss.zul.Messagebox; @Log4j2 @Getter @Setter -public class InvoiceEditorModel extends EntityEditorModel { +public class InvoiceEditorModel extends EntityAttachmentEditorModel { private boolean vatCalculated; @@ -66,25 +63,6 @@ public class InvoiceEditorModel extends EntityEditorModel { return invoiceFormValidator.validate(entity); } - @Command - public void onUploadFile(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) { - UploadEvent evt = (UploadEvent) ctx.getTriggerEvent(); - if (!evt.getMedia().getName().toLowerCase().endsWith(".pdf")) { - Messagebox.show("Csak PDF állomány feltöltése támogatott.", "Error", Messagebox.OK, Messagebox.ERROR); - return; - } - getFormDocument().setFile(evt.getMedia().getByteData()); - BindUtils.postNotifyChange(getFormDocument(), "file"); - validate(); - } - - @Command - public void onRemoveFile() { - getFormDocument().setFile(null); - BindUtils.postNotifyChange(getFormDocument(), "file"); - validate(); - } - @Override public void onEvent(Event evt) { if (isEventForCurrentDocument(evt)) { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java index 992ef5e..4d642c0 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java @@ -2,6 +2,8 @@ package hu.user.lis.ui.editor; import com.google.common.collect.ImmutableMap; import hu.user.lis.db.*; +import hu.user.lis.service.data.EntityDocumentAction; +import hu.user.lis.service.data.EntityDocumentService; import hu.user.lis.ui.Constants; import hu.user.lis.ui.converter.ProjectStatusConverter; import hu.user.lis.ui.data.*; @@ -24,71 +26,65 @@ import org.zkoss.zk.ui.util.Notification; import org.zkoss.zul.Panel; import org.zkoss.zul.Window; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; @Log4j2 public class ProjectEditorModel extends EntityEditorModel { + private final Map> invoiceDocumentActions = new HashMap<>(); + private final Map> treasuryDocumentActions = new HashMap<>(); + @Getter @Setter @WireVariable AssociatesDataModel associatesDataModel; - @WireVariable ProjectsDataModel projectsDataModel; - @WireVariable private InvoiceDataModel invoiceDataModel; - @WireVariable private TreasuryDataModel treasuryDataModel; - @Getter @Setter @WireVariable private ServiceRecordsDataModel serviceRecordsDataModel; - @Getter @Setter @WireVariable private ProjectStatusDataModel projectStatusDataModel; - @Getter @Setter @WireVariable private IncomeMarginsDataModel incomeMarginsDataModel; - @WireVariable private ProjectAssociatesDataModel projectAssociatesDataModel; - @Getter @Setter @WireVariable private ProjectStatusConverter projectStatusConverter; - private Map origAssociates; - @Getter @Setter private Map formAssociates; - @Getter @Setter private IncomingInvoice selectedIncomingInvoice; - @Getter @Setter private OutgoingInvoice selectedOutgoingInvoice; - @Getter @Setter private Treasury selectedTreasury; - @Getter private String partialAssociateName; - @WireVariable private ProjectFormValidator projectFormValidator; + @WireVariable + private EntityDocumentService entityDocumentService; + @Override public FormValidator getFormValidator() { return projectFormValidator; @@ -135,29 +131,32 @@ public class ProjectEditorModel extends EntityEditorModel { BindUtils.postNotifyChange(this, "formDocument"); } - @NotifyChange("associatesDataModel") - public void setPartialAssociateName(String partialAssociateName) { - this.partialAssociateName = partialAssociateName; - log.info("Filter assosiates: {}", partialAssociateName); - associatesDataModel.search(partialAssociateName); - } - - @Command - @NotifyChange({"associatesDataModel", "partialAssociateName"}) - public void onResetAssociateFilter() { - this.partialAssociateName = null; - associatesDataModel.listAll(); - } - public void saveProject(Component notif) { boolean notify = Objects.isNull(getFormDocument().getId()); - projectsDataModel.save(getFormDocument()); + Project project = projectsDataModel.save(getFormDocument()); + project.getIncomingInvoices().forEach(this::updateInvoiceFileChanges); + project.getOutgoingInvoices().forEach(this::updateInvoiceFileChanges); + project.getTreasuries().forEach(this::updateTreasuryFileChanges); if (notify) { String msg = String.format("Sikeres projekt létrehozás %s azonosítóval.", getFormDocument().getHumanId()); Notification.show(msg, "info", notif, "after_start", 3000, true); } } + private void updateInvoiceFileChanges(Invoice invoice) { + List actions = invoiceDocumentActions.get(invoice.getTechnicalId()); + if (!actions.isEmpty()) { + entityDocumentService.executeActions(invoice.getId(), actions); + } + } + + private void updateTreasuryFileChanges(Treasury treasury) { + List actions = treasuryDocumentActions.get(treasury.getTechnicalId()); + if (!actions.isEmpty()) { + entityDocumentService.executeActions(treasury.getId(), actions); + } + } + @Command @Transactional public void onEndEdit(@BindingParam("target") Window target, @BindingParam("save") boolean save, @BindingParam("notif") Component notif) { @@ -184,14 +183,17 @@ public class ProjectEditorModel extends EntityEditorModel { @Command public void onEditIncoming() { IncomingInvoice entity = invoiceDataModel.clone(selectedIncomingInvoice); - Editors.doEdit(Editors.INCOMING_INVOICE, entity, selectedIncomingInvoice, this::incomingModified); + Map extraArg = ImmutableMap.of("actions", invoiceDocumentActions.get(selectedIncomingInvoice.getTechnicalId())); + Editors.doEdit(Editors.INCOMING_INVOICE, entity, selectedIncomingInvoice, extraArg, this::incomingModified); } + private void incomingAdded(SaveEntityEvent event) { if (!event.isCanceled()) { IncomingInvoice modifiedEntity = event.getData(); getFormDocument().getIncomingInvoices().add(modifiedEntity); selectedIncomingInvoice = modifiedEntity; + invoiceDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions()); validate(); BindUtils.postNotifyChange(this, "selectedIncomingInvoice"); BindUtils.postNotifyChange(getFormDocument(), "incomingInvoices"); @@ -200,11 +202,12 @@ public class ProjectEditorModel extends EntityEditorModel { private void incomingModified(SaveEntityEvent event) { if (!event.isCanceled()) { - Set incomingInvoices = getFormDocument().getIncomingInvoices(); + List incomingInvoices = getFormDocument().getIncomingInvoices(); incomingInvoices.remove(selectedIncomingInvoice); IncomingInvoice modifiedEntity = event.getData(); incomingInvoices.add(modifiedEntity); selectedIncomingInvoice = modifiedEntity; + invoiceDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions()); validate(); BindUtils.postNotifyChange(this, "selectedIncomingInvoice"); BindUtils.postNotifyChange(getFormDocument(), "incomingInvoices"); @@ -214,6 +217,7 @@ public class ProjectEditorModel extends EntityEditorModel { @Command public void onRemoveIncoming() { if (Objects.nonNull(selectedIncomingInvoice)) { + invoiceDocumentActions.remove(selectedIncomingInvoice.getTechnicalId()); getFormDocument().getIncomingInvoices().remove(selectedIncomingInvoice); selectedIncomingInvoice = null; validate(); @@ -231,7 +235,12 @@ public class ProjectEditorModel extends EntityEditorModel { @Command public void onEditOutgoing() { OutgoingInvoice entity = invoiceDataModel.clone(selectedOutgoingInvoice); - Editors.doEdit(Editors.OUTGOING_INVOICE, entity, this::outgoingModified); + if (invoiceDocumentActions.containsKey(selectedOutgoingInvoice.getTechnicalId())) { + Map extraArg = ImmutableMap.of("actions", invoiceDocumentActions.get(selectedOutgoingInvoice.getTechnicalId())); + Editors.doEdit(Editors.OUTGOING_INVOICE, entity, selectedOutgoingInvoice, extraArg, this::outgoingModified); + } else { + Editors.doEdit(Editors.OUTGOING_INVOICE, entity, selectedOutgoingInvoice, this::outgoingModified); + } } private void outgoingAdded(SaveEntityEvent event) { @@ -239,6 +248,7 @@ public class ProjectEditorModel extends EntityEditorModel { OutgoingInvoice modifiedEntity = event.getData(); getFormDocument().getOutgoingInvoices().add(modifiedEntity); selectedOutgoingInvoice = modifiedEntity; + invoiceDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions()); validate(); BindUtils.postNotifyChange(this, "selectedOutgoingInvoice"); BindUtils.postNotifyChange(getFormDocument(), "outgoingInvoices"); @@ -248,10 +258,11 @@ public class ProjectEditorModel extends EntityEditorModel { private void outgoingModified(SaveEntityEvent event) { if (!event.isCanceled()) { OutgoingInvoice modifiedEntity = event.getData(); - Set outgoingInvoices = getFormDocument().getOutgoingInvoices(); + List outgoingInvoices = getFormDocument().getOutgoingInvoices(); outgoingInvoices.remove(selectedOutgoingInvoice); outgoingInvoices.add(modifiedEntity); selectedOutgoingInvoice = modifiedEntity; + invoiceDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions()); validate(); BindUtils.postNotifyChange(this, "selectedOutgoingInvoice"); BindUtils.postNotifyChange(getFormDocument(), "outgoingInvoices"); @@ -261,11 +272,12 @@ public class ProjectEditorModel extends EntityEditorModel { @Command public void onRemoveOutgoing() { if (Objects.nonNull(selectedOutgoingInvoice)) { + invoiceDocumentActions.remove(selectedOutgoingInvoice.getTechnicalId()); getFormDocument().getOutgoingInvoices().remove(selectedOutgoingInvoice); selectedOutgoingInvoice = null; validate(); BindUtils.postNotifyChange(this, "selectedOutgoingInvoice"); - BindUtils.postNotifyChange(getFormDocument(), "outgoingInvoice"); + BindUtils.postNotifyChange(getFormDocument(), "outgoingInvoices"); } } @@ -295,10 +307,11 @@ public class ProjectEditorModel extends EntityEditorModel { private void treasuryModified(SaveEntityEvent event) { if (!event.isCanceled()) { Treasury modifiedEntity = event.getData(); - Set treasuries = getFormDocument().getTreasuries(); + List treasuries = getFormDocument().getTreasuries(); treasuries.remove(selectedTreasury); treasuries.add(modifiedEntity); selectedTreasury = modifiedEntity; + treasuryDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions()); validate(); BindUtils.postNotifyChange(this, "selectedTreasury"); BindUtils.postNotifyChange(getFormDocument(), "treasuries"); @@ -308,6 +321,7 @@ public class ProjectEditorModel extends EntityEditorModel { @Command public void onRemoveTreasury() { if (Objects.nonNull(selectedTreasury)) { + treasuryDocumentActions.remove(selectedTreasury.getTechnicalId()); getFormDocument().getTreasuries().remove(selectedTreasury); selectedTreasury = null; validate(); @@ -371,8 +385,9 @@ public class ProjectEditorModel extends EntityEditorModel { .anyMatch(e -> !e.getValue().equals(origAssociates.get(e.getKey()))); } + @Override protected boolean areDifferent(Project entity) { - return super.areDifferent(entity) || isAssociatesChanged(); + return super.areDifferent(entity) || isAssociatesChanged() || !invoiceDocumentActions.isEmpty() || !treasuryDocumentActions.isEmpty(); } @Command diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java index f3a598f..81c8860 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java @@ -4,6 +4,7 @@ import hu.user.lis.db.Associate; import hu.user.lis.db.Project; import hu.user.lis.db.ProjectAssociate; import hu.user.lis.db.ServiceRecord; +import hu.user.lis.service.data.EntityDocumentAction; import hu.user.lis.ui.auth.CurrentProfile; import hu.user.lis.ui.data.ProjectAssociatesDataModel; import hu.user.lis.ui.editor.common.EntityAttachmentEditorModel; @@ -53,7 +54,6 @@ public class ServiceRecordEditorModel extends EntityAttachmentEditorModel opProjectAssociate = projectAssociatesDataModel.searchByAssociateAndProject(getFormDocument().getAssociate().getId(), getFormDocument().getProject().getId()); + + + List actions = getEntityDocumentDataModel().getActions(); if (opProjectAssociate.isPresent()) { - Events.postEvent(new SaveEntityWithAttachmentEvent<>(getFormDocument(), getEntityDocumentDataModel(), target)); + Events.postEvent(new SaveEntityWithAttachmentEvent<>(getFormDocument(), actions, target)); } else { Messagebox.show("A munkatárs a kiválasztott projekt résztvevője lesz.", "Megerősítés", Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, e -> { if (!e.getName().equals("onCancel")) { projectAssociatesDataModel.addProjectAssociate(getFormDocument().getProject(), getFormDocument().getAssociate()); - Events.postEvent(new SaveEntityWithAttachmentEvent<>(getFormDocument(), getEntityDocumentDataModel(), target)); + Events.postEvent(new SaveEntityWithAttachmentEvent<>(getFormDocument(), actions, target)); } }); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/TreasuryEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/TreasuryEditorModel.java index 814f975..b8dd97d 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/TreasuryEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/TreasuryEditorModel.java @@ -1,22 +1,15 @@ package hu.user.lis.ui.editor; import hu.user.lis.db.Treasury; -import hu.user.lis.ui.editor.common.EntityEditorModel; +import hu.user.lis.ui.editor.common.EntityAttachmentEditorModel; import hu.user.lis.ui.editor.validator.FormValidator; import hu.user.lis.ui.editor.validator.TreasuryFormValidator; import lombok.extern.log4j.Log4j2; -import org.zkoss.bind.BindContext; -import org.zkoss.bind.BindUtils; -import org.zkoss.bind.annotation.Command; -import org.zkoss.bind.annotation.ContextParam; -import org.zkoss.bind.annotation.ContextType; import org.zkoss.bind.annotation.Init; -import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zk.ui.select.annotation.WireVariable; -import org.zkoss.zul.Messagebox; @Log4j2 -public class TreasuryEditorModel extends EntityEditorModel { +public class TreasuryEditorModel extends EntityAttachmentEditorModel { @WireVariable private TreasuryFormValidator treasuryFormValidator; @@ -37,22 +30,4 @@ public class TreasuryEditorModel extends EntityEditorModel { return treasuryFormValidator.validate(entity); } - @Command - public void onUploadFile(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) { - UploadEvent evt = (UploadEvent) ctx.getTriggerEvent(); - if (!evt.getMedia().getName().toLowerCase().endsWith(".pdf")) { - Messagebox.show("Csak PDF állomány feltöltése támogatott.", "Error", Messagebox.OK, Messagebox.ERROR); - return; - } - getFormDocument().setFile(evt.getMedia().getByteData()); - BindUtils.postNotifyChange(getFormDocument(), "file"); - validate(); - } - - @Command - public void onRemoveFile() { - getFormDocument().setFile(null); - BindUtils.postNotifyChange(getFormDocument(), "file"); - validate(); - } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java index 7c9ef94..a38e246 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/Editors.java @@ -6,6 +6,7 @@ import lombok.extern.log4j.Log4j2; import org.zkoss.zk.ui.Executions; import org.zkoss.zul.Window; +import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -17,7 +18,7 @@ public class Editors { public static final String TREASURY = "~./editor/treasury-editor.zul"; public static final String ASSOCIATE = "~./editor/associate-editor.zul"; public static final String PARTNER = "~./editor/partner-editor.zul"; - public static final String PROJECT_ATTACH = "~./editor/project-attach.zul"; + public static final String PROJECT_ATTACH = "~./editor/project-executeActions.zul"; public static final String IMPORT_INVOICE_ASSIGN = "~./editor/import-invoice-assign-editor.zul"; public static final String IMPORT_INVOICE_APPROVE = "~./editor/import-invoice-approve-editor.zul"; public static final String PROJECT = "~./editor/project-editor.zul"; @@ -44,6 +45,20 @@ public class Editors { doShowEdit(page, arg, editCompleted); } + public static void doEdit(String page, E entity, E original, Map extraArg, EditCompletedListener editCompleted) { + if (Objects.isNull(entity)) { + //header double click + return; + } + Map arg = new HashMap<>(extraArg); + + arg.put("formDocument", entity); + if (Objects.nonNull(original)) { + arg.put("origDocument", original); + } + doShowEdit(page, arg, editCompleted); + } + public static void doShowEdit(String page, Map arg, EditCompletedListener editCompleted) { Window editorWindow = (Window) Executions.createComponents(page, null, arg); editorWindow.addEventListener("onClose", e -> { diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityAttachmentEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityAttachmentEditorModel.java index 02e8e16..bc659b5 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityAttachmentEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityAttachmentEditorModel.java @@ -1,30 +1,50 @@ package hu.user.lis.ui.editor.common; import hu.user.lis.db.EDocument; +import hu.user.lis.db.IdEntity; +import hu.user.lis.service.data.EntityDocumentAction; import hu.user.lis.ui.data.EntityDocumentDataModel; +import hu.user.lis.ui.event.CancelEntityEditEvent; +import hu.user.lis.ui.event.SaveEntityWithAttachmentEvent; import lombok.Getter; import lombok.extern.log4j.Log4j2; import org.zkoss.bind.BindContext; import org.zkoss.bind.BindUtils; +import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.ContextParam; import org.zkoss.bind.annotation.ContextType; import org.zkoss.lang.Strings; +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zul.Messagebox; +import org.zkoss.zul.Window; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.util.List; +@Getter @Log4j2 public class EntityAttachmentEditorModel extends EntityEditorModel { - @Getter @WireVariable private EntityDocumentDataModel entityDocumentDataModel; + @Override + public void init() { + super.init(); + + List actions = (List) Executions.getCurrent().getArg().get("actions"); + log.info(actions); + + entityDocumentDataModel.refresh((IdEntity) getFormDocument(), getDocumentType(), actions); + } + + @Override protected boolean canSave(T entity) { return true; } @@ -36,13 +56,8 @@ public class EntityAttachmentEditorModel extends EntityE Messagebox.show("Csak PDF állomány feltöltése támogatott.", "Error", Messagebox.OK, Messagebox.ERROR); return; } - String documentType = Strings.EMPTY; - Type[] actualTypeArguments = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments(); - if (actualTypeArguments.length > 0) { - documentType = ((Class) actualTypeArguments[0]).getSimpleName(); - } EDocument document = EDocument.builder() - .documentType(documentType) + .documentType(getDocumentType()) .file(evt.getMedia().getByteData()) .size(evt.getMedia().getByteData().length) .name(evt.getMedia().getName()) @@ -52,6 +67,27 @@ public class EntityAttachmentEditorModel extends EntityE validate(); } + @Command + @Override + public void onCloseWindow(@BindingParam("target") Window target, @BindingParam("save") boolean save) { + if (save) { + if (saveEnabled) { + Events.postEvent(new SaveEntityWithAttachmentEvent<>(formDocument, entityDocumentDataModel.getActions(), target)); + } + } else { + Events.postEvent(new CancelEntityEditEvent<>(target)); + } + } + + private String getDocumentType() { + String documentType = Strings.EMPTY; + Type[] actualTypeArguments = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments(); + if (actualTypeArguments.length > 0) { + documentType = ((Class) actualTypeArguments[0]).getSimpleName(); + } + return documentType; + } + @Command public void onRemoveFile() { entityDocumentDataModel.remove(); diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java index 0b0cb2f..4827a28 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/common/EntityEditorModel.java @@ -82,7 +82,10 @@ public abstract class EntityEditorModel extends Abstract eventBus.registerForBinding(this); origDocument = (T) Executions.getCurrent().getArg().get("origDocument"); formDocument = (T) Executions.getCurrent().getArg().get("formDocument"); - validate(formDocument); + if (Objects.nonNull(formDocument)) { + //special pages like ProjectEditorModel validates later + validate(formDocument); + } } @Override diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceApproveFormValidator.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceApproveFormValidator.java index cbd950f..d567c2a 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceApproveFormValidator.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceApproveFormValidator.java @@ -10,7 +10,7 @@ public class ImportInvoiceApproveFormValidator extends InvoiceFormValidator { protected FieldValidation[] getValidators(Invoice entity) { FieldValidation[] validators = new FieldValidation[]{ validator(entity.getProject(), this::validateNotNull, "A 'Projekt' kitöltése kötelező."), - validator(entity.getFile(), this::validateNotNull, "A 'Számlakép' feltöltése kötelező.") + //validator(entity.getFile(), this::validateNotNull, "A 'Számlakép' feltöltése kötelező.") }; return ArrayUtils.addAll(super.getValidators(entity), validators); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceAssignFormValidator.java b/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceAssignFormValidator.java index f7cfb9c..f1a4334 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceAssignFormValidator.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/editor/validator/ImportInvoiceAssignFormValidator.java @@ -11,7 +11,7 @@ public class ImportInvoiceAssignFormValidator extends InvoiceFormValidator { protected FieldValidation[] getValidators(Invoice entity) { FieldValidation[] validators = new FieldValidation[]{ validator(entity.getProject(), this::validateNotNull, "A 'Projekt' kitöltése kötelező."), - validator(entity.getFile(), this::validateNotNull, "A 'Számlakép' feltöltése kötelező.") + //validator(entity.getFile(), this::validateNotNull, "A 'Számlakép' feltöltése kötelező.") }; return ArrayUtils.addAll(super.getValidators(entity), validators); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/event/SaveEntityWithAttachmentEvent.java b/lis-ui/src/main/java/hu/user/lis/ui/event/SaveEntityWithAttachmentEvent.java index a526d63..fc0efd4 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/event/SaveEntityWithAttachmentEvent.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/event/SaveEntityWithAttachmentEvent.java @@ -1,16 +1,18 @@ package hu.user.lis.ui.event; -import hu.user.lis.ui.data.EntityDocumentDataModel; +import hu.user.lis.service.data.EntityDocumentAction; import lombok.Getter; import org.zkoss.zul.Window; +import java.util.List; + @Getter public class SaveEntityWithAttachmentEvent extends SaveEntityEvent { - private final EntityDocumentDataModel entityDocumentDataModel; + private final List actions; - public SaveEntityWithAttachmentEvent(T data, EntityDocumentDataModel entityDocumentDataModel, Window target) { + public SaveEntityWithAttachmentEvent(T data, List actions, Window target) { super(data, target); - this.entityDocumentDataModel = entityDocumentDataModel; + this.actions = actions; } } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java index 4ab406b..0e51170 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/IndexViewModel.java @@ -70,7 +70,7 @@ public class IndexViewModel implements EventListener { private String searchPhrase; private String page; private final Map specialRoutes = ImmutableMap.of( - Constants.NAV_PROJECTS, this::showProjectEditor, + Constants.NAV_PROJECT, this::showProjectEditor, Constants.NAV_INVOICE_PAYMENT, this::showInvoicePayment ); private String importInvoiceMenuClassName; @@ -103,7 +103,7 @@ public class IndexViewModel implements EventListener { String[] pathTokens = path.split("/"); if (pathTokens.length > 2) { Long id = Long.parseLong(pathTokens[2]); - specialRoutes.get(path).route(id); + specialRoutes.get("/" + pathTokens[1]).route(id); } else { setPage("~." + path + ".zul"); } diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java b/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java index c82bd69..74960aa 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java @@ -4,8 +4,9 @@ import com.google.common.collect.ImmutableMap; import hu.user.lis.db.Associate; import hu.user.lis.db.Project; import hu.user.lis.db.ServiceRecord; +import hu.user.lis.service.data.EntityDocumentAction; +import hu.user.lis.service.data.EntityDocumentService; import hu.user.lis.ui.Constants; -import hu.user.lis.ui.data.EntityDocumentDataModel; import hu.user.lis.ui.data.ServiceRecordsDataModel; import hu.user.lis.ui.data.common.CachedSpringDataModel; import hu.user.lis.ui.editor.common.Editors; @@ -27,6 +28,7 @@ import org.zkoss.zk.ui.select.annotation.VariableResolver; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zkplus.spring.DelegatingVariableResolver; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -45,14 +47,18 @@ public class ServiceRecordsViewModel extends EntityViewModel impl @WireVariable EntitySelectorRouter entitySelectorRouter; + @WireVariable + private EntityDocumentService entityDocumentService; + + @WireVariable + private EventBus eventBus; + @Getter private Project filterProject; @Getter private Associate filterAssociate; - @WireVariable - private EventBus eventBus; @Override protected CachedSpringDataModel getDataModel() { @@ -112,9 +118,10 @@ public class ServiceRecordsViewModel extends EntityViewModel impl public void saveServiceRecord(SaveEntityEvent event) { if (!event.isCanceled()) { ServiceRecord modifiedEntity = event.getData(); + List actions = event.withAttachment().getActions(); + modifiedEntity.setSigned(!actions.isEmpty()); serviceRecordsDataModel.save(modifiedEntity); - EntityDocumentDataModel entityDocumentDataModel = event.withAttachment().getEntityDocumentDataModel(); - entityDocumentDataModel.save(modifiedEntity.getId()); + entityDocumentService.executeActions(modifiedEntity.getId(), actions); refresh(); serviceRecordsDataModel.addToSelection(modifiedEntity); } diff --git a/lis-ui/src/main/resources/web/editor/project/project-associates.zul b/lis-ui/src/main/resources/web/editor/project/project-associates.zul index 89ff7fb..fdc3733 100644 --- a/lis-ui/src/main/resources/web/editor/project/project-associates.zul +++ b/lis-ui/src/main/resources/web/editor/project/project-associates.zul @@ -3,13 +3,6 @@ onOpen="@command('onOpenFormPanel', parentPanel=centerPanel)"> - - - - - - - diff --git a/lis-ui/src/main/resources/web/editor/treasury-editor.zul b/lis-ui/src/main/resources/web/editor/treasury-editor.zul index bdbda17..777734f 100644 --- a/lis-ui/src/main/resources/web/editor/treasury-editor.zul +++ b/lis-ui/src/main/resources/web/editor/treasury-editor.zul @@ -69,21 +69,7 @@ - - - - - - - -
-