Manual project invoice load/save
authorVásáry Dániel <vasary@elgekko.net>
Thu, 15 Feb 2024 23:05:21 +0000 (00:05 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Thu, 15 Feb 2024 23:05:21 +0000 (00:05 +0100)
lis-db/src/main/java/hu/user/lis/db/Project.java
lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepository.java
lis-ui/src/main/java/hu/user/lis/ui/data/ProjectsDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ProjectEditorModel.java

index daab3ae5bdd28a4098254f02a5565de53ad99d21..4e0b93e27d513cc0e32a20d9adee3a0ccd9635e4 100644 (file)
@@ -8,7 +8,6 @@ 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.util.List;
@@ -30,20 +29,22 @@ public class Project extends IdEntity {
     @JsonIncludeProperties({"id"})
     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"})
+    //    @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"})
+    @Transient
     private List<IncomingInvoice> 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"})
+    //    @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"})
+    @Transient
     private List<OutgoingInvoice> outgoingInvoices;
 
     @OneToMany(targetEntity = Treasury.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
index 979bf995387f0fe6f0b7dec516d415e567afa91f..4413ac1ba3d5f6e8722db00fa70d7d30fce4876a 100644 (file)
@@ -1,7 +1,6 @@
 package hu.user.lis.db.repository;
 
-import hu.user.lis.db.Invoice;
-import hu.user.lis.db.Partner;
+import hu.user.lis.db.*;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import java.util.List;
@@ -13,4 +12,7 @@ public interface InvoiceRepository extends JpaRepository<Invoice, Long>, Invoice
 
     Optional<Invoice> findByHumanIdAndPartnerAndPlanned(String humanId, Partner partner, boolean planned);
 
+    List<IncomingInvoice> findAllByProjectAndIncomingIsTrue(Project project);
+
+    List<OutgoingInvoice> findAllByProjectAndIncomingIsFalse(Project project);
 }
index 1fbd6e32a9cb3ddf954a6f949a0fc8a4c72b598a..2793a5050c7e6f7ea29ee5df65a6fcdeb443ba02 100644 (file)
@@ -107,7 +107,14 @@ public class ProjectsDataModel extends CachedSpringDataModel<Project> {
     }
 
     public Project save(Project selectedEntity) {
-        return projectRepository.save(selectedEntity);
+        Project result = projectRepository.save(selectedEntity);
+        selectedEntity.getIncomingInvoices().forEach(i -> i.setProject(selectedEntity));
+        selectedEntity.getOutgoingInvoices().forEach(i -> i.setProject(selectedEntity));
+        invoiceRepository.saveAll(selectedEntity.getIncomingInvoices());
+        invoiceRepository.saveAll(selectedEntity.getOutgoingInvoices());
+        result.setIncomingInvoices(selectedEntity.getIncomingInvoices());
+        result.setOutgoingInvoices(selectedEntity.getOutgoingInvoices());
+        return result;
     }
 
     public Project getById(Long id) {
index 91b4fdda0fd7d5a7e1352897e291330b50f9da6e..9b2de095dd64cab94a4a5e9c1000fee26c1492aa 100644 (file)
@@ -2,6 +2,7 @@ package hu.user.lis.ui.editor;
 
 import com.google.common.collect.ImmutableMap;
 import hu.user.lis.db.*;
+import hu.user.lis.db.repository.InvoiceRepository;
 import hu.user.lis.service.data.EntityDocumentAction;
 import hu.user.lis.service.data.EntityDocumentService;
 import hu.user.lis.ui.Constants;
@@ -46,6 +47,8 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
     @WireVariable
     private InvoiceDataModel invoiceDataModel;
     @WireVariable
+    private InvoiceRepository invoiceRepository;
+    @WireVariable
     private TreasuryDataModel treasuryDataModel;
     @Getter
     @Setter
@@ -125,10 +128,16 @@ public class ProjectEditorModel extends EntityEditorModel<Project> {
             Long id = (Long) data;
             Clients.evalJavaScript(String.format("pushNav('/project/%d')", id));
             log.info("Loading entity {} to editor", id);
-            setFormDocument(projectsDataModel.getById(id));
+            Project project = projectsDataModel.getById(id);
+            List<IncomingInvoice> incoming = invoiceRepository.findAllByProjectAndIncomingIsTrue(project);
+            List<OutgoingInvoice> outgoing = invoiceRepository.findAllByProjectAndIncomingIsFalse(project);
+            project.setIncomingInvoices(incoming);
+            project.setOutgoingInvoices(outgoing);
+            setFormDocument(project);
             setOrigDocument(projectsDataModel.clone(getFormDocument()));
         }
         projectFormValidator.validate(getFormDocument());
+
         BindUtils.postNotifyChange(this, "formDocument");
     }