import hu.user.lis.db.Associate;
import hu.user.lis.db.Project;
-import hu.user.lis.db.Treasury;
import hu.user.lis.service.data.EntityDataService;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.SerializationUtils;
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;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
@Log4j2
Assertions.assertNotEquals(associate, clone);
}
- @Test
- public void testOneToManyMemberChanged() {
- Treasury treasury = Treasury.builder()
- .id(1L)
- .humanId("Test")
- .build();
- Project project = Project.builder()
- .id(1L)
- .treasuries(Collections.singletonList(treasury))
- .build();
- Project clone = SerializationUtils.clone(project);
- Treasury cloneTreasury = (Treasury) clone.getTreasuries().toArray()[0];
- cloneTreasury.setId(2L);
- assertFalse(entityDataService.areEquals(project, clone));
- }
-
- @Test
- public void testOneToManyMemberOrderEquals() {
- Treasury treasury1 = Treasury.builder()
- .id(1L)
- .humanId("Test1")
- .build();
- Treasury treasury2 = Treasury.builder()
- .id(2L)
- .humanId("Test2")
- .build();
- Project project = Project.builder()
- .id(1L)
- .treasuries(Arrays.asList(treasury1, treasury2))
- .build();
- Project clone = SerializationUtils.clone(project);
- Treasury treasury3 = Treasury.builder()
- .id(1L)
- .humanId("Test1")
- .build();
- Treasury treasury4 = Treasury.builder()
- .id(2L)
- .humanId("Test2")
- .build();
- clone.setTreasuries(Arrays.asList(treasury4, treasury3));
- assertTrue(entityDataService.areEquals(project, clone));
- }
}
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
-import javax.persistence.EntityNotFoundException;
import java.util.Arrays;
import java.util.List;
@Autowired
private InvoiceRepository invoiceRepository;
+ @Autowired
+ private IncomingInvoiceRepository incomingInvoiceRepository;
@Test
public void testRepositoryCapabilities() {
@Test
public void listProjects() {
List<Project> allItems = projectRepository.findAll();
- log.info("Found {} items", allItems.size());
- }
- @Test
- public void createProjectWithTreasury() {
- Project project = projectService.createNew();
- project.setProjectStatus(null);
+ allItems.forEach(project -> {
+ List<IncomingInvoice> incomingInvoices = incomingInvoiceRepository.findAllByProjectOrderByPos(project);
+ log.info("Found {} items", incomingInvoices.size());
+ });
- Treasury treasury = treasuryService.createNew();
- project.getTreasuries().add(treasury);
- projectRepository.save(project);
-
- Project persistedProject = projectRepository.findById(project.getId()).orElseThrow(EntityNotFoundException::new);
- assertEquals(1, persistedProject.getTreasuries().size());
-
- projectRepository.deleteAll();
- }
-
- @Test
- public void createProjectWithIncomingInvoice() {
- Project project = projectService.createNew();
- project.setProjectStatus(null);
-
- IncomingInvoice invoice = IncomingInvoice.builder()
- .incoming(true)
- .planned(true)
- .currency(Currency.HUF)
- .netAmount(1)
- .grossAmount(1)
- .vatAmount(0.5)
- .build();
- project.getIncomingInvoices().add(invoice);
- projectRepository.save(project);
-
- Project persistedProject = projectRepository.findById(project.getId()).orElseThrow(EntityNotFoundException::new);
- assertEquals(1, persistedProject.getIncomingInvoices().size());
- assertEquals(0, persistedProject.getOutgoingInvoices().size());
-
- projectRepository.deleteAll();
+ log.info("Found {} items", allItems.size());
}
@Test
private String technicalId;
+ private int pos;
}
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;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
@Getter
@Setter
@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"})
- 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"})
- private List<OutgoingInvoice> 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"})
- private List<Treasury> treasuries;
+// @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"})
+// 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"})
+// private List<OutgoingInvoice> 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"})
+// private List<Treasury> treasuries;
private String name;
private String technicalId;
+ private int pos;
}
--- /dev/null
+package hu.user.lis.db.repository;
+
+import hu.user.lis.db.IncomingInvoice;
+import hu.user.lis.db.Project;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface IncomingInvoiceRepository extends JpaRepository<IncomingInvoice, Long> {
+
+ List<IncomingInvoice> findAllByProjectOrderByPos(Project project);
+
+}
package hu.user.lis.db.repository;
+import hu.user.lis.db.Project;
import hu.user.lis.db.Treasury;
import org.springframework.data.jpa.repository.JpaRepository;
+import java.util.List;
+
public interface TreasuryRepository extends JpaRepository<Treasury, Long> {
+ List<Treasury> findAllByProjectOrderByPos(Project project);
+
}
package hu.user.lis.service.api;
-import hu.user.lis.db.IncomingInvoice;
-import hu.user.lis.db.OutgoingInvoice;
import hu.user.lis.db.Project;
-import hu.user.lis.db.Treasury;
import hu.user.lis.db.repository.InvoiceRepository;
import hu.user.lis.db.repository.ProjectRepository;
import hu.user.lis.db.repository.TreasuryRepository;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
-import java.util.Objects;
@Log4j2
@RestController
@Override
protected void afterSave(List<Project> entities) {
- entities.forEach(p -> {
- List<IncomingInvoice> incomingInvoices = p.getIncomingInvoices();
- if (Objects.nonNull(incomingInvoices)) {
- incomingInvoices.forEach(i -> {
-// i.setProject(p);
- invoiceRepository.save(i);
- });
- }
-
- List<OutgoingInvoice> outgoingInvoices = p.getOutgoingInvoices();
- if (Objects.nonNull(outgoingInvoices)) {
- outgoingInvoices.forEach(i -> {
-// i.setProject(p);
- invoiceRepository.save(i);
- });
- }
-
- List<Treasury> treasuries = p.getTreasuries();
- treasuries.forEach(t -> {
-// t.setProject(p);
- treasuryRepository.save(t);
- });
- });
+// entities.forEach(p -> {
+// List<IncomingInvoice> incomingInvoices = p.getIncomingInvoices();
+// if (Objects.nonNull(incomingInvoices)) {
+// incomingInvoices.forEach(i -> {
+// invoiceRepository.save(i);
+// });
+// }
+//
+// List<OutgoingInvoice> outgoingInvoices = p.getOutgoingInvoices();
+// if (Objects.nonNull(outgoingInvoices)) {
+// outgoingInvoices.forEach(i -> {
+// invoiceRepository.save(i);
+// });
+// }
+//
+// List<Treasury> treasuries = p.getTreasuries();
+// treasuries.forEach(t -> {
+// treasuryRepository.save(t);
+// });
+// });
}
}
.projectStatus(projectStatus)
// .incomingInvoices(new HashSet<>())
// .outgoingInvoices(new HashSet<>())
- .treasuries(new ArrayList<>())
+// .treasuries(new ArrayList<>())
.active(true)
.build();
}
.partner(partner)
// .incomingInvoices(invoiceService.getRandom(true))
// .outgoingInvoices(invoiceService.getRandom(false))
- .treasuries(new ArrayList<>())
+// .treasuries(new ArrayList<>())
.build();
result.add(entity);
}
import hu.user.lis.db.IncomingInvoice;
import hu.user.lis.db.InvoiceStatus;
-import hu.user.lis.db.Project;
import hu.user.lis.db.repository.InvoiceRepository;
import hu.user.lis.db.repository.ProjectRepository;
import hu.user.lis.service.dataimport.mapper.InvoiceXlsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
import java.util.Map;
import java.util.Objects;
@Override
protected void process(IncomingInvoice entity) {
invoiceRepository.save(entity);
- Project project = entity.getProject();
- if (Objects.nonNull(project)) {
- if (Objects.isNull(project.getIncomingInvoices())) {
- project.setIncomingInvoices(new ArrayList<>());
- }
- project.getIncomingInvoices().add(entity);
- projectRepository.save(project);
- }
+// Project project = entity.getProject();
+// if (Objects.nonNull(project)) {
+// if (Objects.isNull(project.getIncomingInvoices())) {
+// project.setIncomingInvoices(new ArrayList<>());
+// }
+// project.getIncomingInvoices().add(entity);
+// projectRepository.save(project);
+// }
log.info("Incoming invoice added: {}", entity.getHumanId());
}
import hu.user.lis.db.InvoiceStatus;
import hu.user.lis.db.OutgoingInvoice;
-import hu.user.lis.db.Project;
import hu.user.lis.db.repository.InvoiceRepository;
import hu.user.lis.db.repository.ProjectRepository;
import hu.user.lis.service.dataimport.mapper.InvoiceXlsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
import java.util.Map;
import java.util.Objects;
@Override
protected void process(OutgoingInvoice entity) {
invoiceRepository.save(entity);
- Project project = entity.getProject();
- if (Objects.nonNull(project)) {
- if (Objects.isNull(project.getOutgoingInvoices())) {
- project.setOutgoingInvoices(new ArrayList<>());
- }
- project.getOutgoingInvoices().add(entity);
- projectRepository.save(project);
- }
+// Project project = entity.getProject();
+// if (Objects.nonNull(project)) {
+// if (Objects.isNull(project.getOutgoingInvoices())) {
+// project.setOutgoingInvoices(new ArrayList<>());
+// }
+// project.getOutgoingInvoices().add(entity);
+// projectRepository.save(project);
+// }
log.info("Outgoing invoice added: {}", entity.getHumanId());
}
@Log4j2
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class IncomeMarginsDataModel extends ArrayList<IncomeMargin> {
- public void recalculate(Project project, ServiceRecordsDataModel serviceRecordsDataModel) {
+ public void recalculate(List<IncomingInvoice> incomingInvoices, List<OutgoingInvoice> outgoingInvoices, List<Treasury> treasuries, ServiceRecordsDataModel serviceRecordsDataModel) {
clear();
- Map<Currency, Double> balances = new HashMap<>();
- List<OutgoingInvoice> outgoingInvoices = project.getOutgoingInvoices();
+ Map<Currency, Double> balances = new EnumMap<>(Currency.class);
if (Objects.nonNull(outgoingInvoices)) {
for (Invoice invoice : outgoingInvoices) {
addBalance(balances, invoice.getCurrency(), invoice.getNetAmount());
}
}
- List<IncomingInvoice> incomingInvoices = project.getIncomingInvoices();
if (Objects.nonNull(incomingInvoices)) {
for (Invoice invoice : incomingInvoices) {
substractBalance(balances, invoice.getCurrency(), invoice.getNetAmount());
}
}
- List<Treasury> treasuries = project.getTreasuries();
if (Objects.nonNull(treasuries)) {
for (Treasury treasury : treasuries) {
substractBalance(balances, treasury.getSellCurrency(), treasury.getSellAmount());
import hu.user.lis.service.data.EntityDataService;
import hu.user.lis.service.data.EntityDocumentAction;
import hu.user.lis.service.data.EntityDocumentService;
-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;
@Log4j2
public class InvoiceDataModel {
- @Autowired
- InvoiceService invoiceService;
-
@Autowired
InvoiceRepository invoiceRepository;
package hu.user.lis.ui.data;
-import hu.user.lis.db.Project;
-import hu.user.lis.db.ProjectStatus;
+import hu.user.lis.db.*;
import hu.user.lis.db.repository.InvoiceRepository;
import hu.user.lis.db.repository.ProjectRepository;
+import hu.user.lis.db.repository.TreasuryRepository;
import hu.user.lis.service.data.EntityDataService;
import hu.user.lis.ui.data.common.CachedSpringDataModel;
import lombok.extern.log4j.Log4j2;
import javax.persistence.EntityNotFoundException;
import java.text.DecimalFormat;
import java.time.Year;
-import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Autowired
InvoiceRepository invoiceRepository;
+ @Autowired
+ TreasuryRepository treasuryRepository;
+
@Autowired
ProjectStatusDataModel projectStatusDataModel;
ProjectStatus projectStatus = projectStatusDataModel.getDefault();
return Project.builder()
.projectStatus(projectStatus)
- .incomingInvoices(new ArrayList<>())
- .outgoingInvoices(new ArrayList<>())
- .treasuries(new ArrayList<>())
.active(true)
.build();
}
public void delete(Project selectedEntity) {
projectRepository.delete(selectedEntity);
}
+
+
+ public List<IncomingInvoice> getIncomingInvoices(Project project) {
+ return null;
+ }
+
+ public List<OutgoingInvoice> getOutgoingInvoices(Project project) {
+ return null;
+ }
+
+ public List<Treasury> getTreasuries(Project project) {
+ return null;
+ }
}
import org.zkoss.zul.Panel;
import org.zkoss.zul.Window;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
@Log4j2
public class ProjectEditorModel extends EntityEditorModel<Project> {
private final Map<String, List<EntityDocumentAction>> invoiceDocumentActions = new HashMap<>();
private final Map<String, List<EntityDocumentAction>> treasuryDocumentActions = new HashMap<>();
-
+ @Getter
+ private final List<IncomingInvoice> incomingInvoices = new ArrayList<>();
+ @Getter
+ private final List<OutgoingInvoice> outgoingInvoices = new ArrayList<>();
+ @Getter
+ private final List<Treasury> treasuries = new ArrayList<>();
@Getter
@Setter
@WireVariable
private String partialAssociateName;
@WireVariable
private ProjectFormValidator projectFormValidator;
-
@WireVariable
private EntityDocumentService entityDocumentService;
initAssociates();
serviceRecordsDataModel.search(getFormDocument(), true);
getEntitySelectorRouter().configureSelector(Partner.class, getFormDocument(), "partner");
- incomeMarginsDataModel.recalculate(getFormDocument(), serviceRecordsDataModel);
+ incomeMarginsDataModel.recalculate(incomingInvoices, outgoingInvoices, treasuries, serviceRecordsDataModel);
}
- private void initDocuments(Object data) {
+ // @Transactional
+ public void initDocuments(Object data) {
if (Objects.isNull(data)) {
setFormDocument(projectsDataModel.createNew());
getFormDocument().setHumanId(projectsDataModel.generateHumanId());
public void saveProject(Component notif) {
boolean notify = Objects.isNull(getFormDocument().getId());
- Project project = projectsDataModel.save(getFormDocument());
- project.getIncomingInvoices().forEach(this::updateInvoiceFileChanges);
- project.getOutgoingInvoices().forEach(this::updateInvoiceFileChanges);
- project.getTreasuries().forEach(this::updateTreasuryFileChanges);
+ incomingInvoices.forEach(this::updateInvoiceFileChanges);
+ incomingInvoices.forEach(this::updateInvoiceFileChanges);
+ treasuries.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 incomingAdded(SaveEntityEvent<IncomingInvoice> event) {
if (event.isSave()) {
IncomingInvoice modifiedEntity = event.getData();
- getFormDocument().getIncomingInvoices().add(modifiedEntity);
+ incomingInvoices.add(modifiedEntity);
selectedIncomingInvoice = modifiedEntity;
invoiceDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions());
validate();
private void incomingModified(SaveEntityEvent<IncomingInvoice> event) {
if (event.isSave()) {
- List<IncomingInvoice> incomingInvoices = getFormDocument().getIncomingInvoices();
incomingInvoices.remove(selectedIncomingInvoice);
IncomingInvoice modifiedEntity = event.getData();
incomingInvoices.add(modifiedEntity);
public void onRemoveIncoming() {
if (Objects.nonNull(selectedIncomingInvoice)) {
invoiceDocumentActions.remove(selectedIncomingInvoice.getTechnicalId());
- getFormDocument().getIncomingInvoices().remove(selectedIncomingInvoice);
+ incomingInvoices.remove(selectedIncomingInvoice);
selectedIncomingInvoice = null;
validate();
BindUtils.postNotifyChange(this, "selectedIncomingInvoice");
private void outgoingAdded(SaveEntityEvent<OutgoingInvoice> event) {
if (event.isSave()) {
OutgoingInvoice modifiedEntity = event.getData();
- getFormDocument().getOutgoingInvoices().add(modifiedEntity);
+ outgoingInvoices.add(modifiedEntity);
selectedOutgoingInvoice = modifiedEntity;
invoiceDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions());
validate();
private void outgoingModified(SaveEntityEvent<OutgoingInvoice> event) {
if (event.isSave()) {
OutgoingInvoice modifiedEntity = event.getData();
- List<OutgoingInvoice> outgoingInvoices = getFormDocument().getOutgoingInvoices();
outgoingInvoices.remove(selectedOutgoingInvoice);
outgoingInvoices.add(modifiedEntity);
selectedOutgoingInvoice = modifiedEntity;
public void onRemoveOutgoing() {
if (Objects.nonNull(selectedOutgoingInvoice)) {
invoiceDocumentActions.remove(selectedOutgoingInvoice.getTechnicalId());
- getFormDocument().getOutgoingInvoices().remove(selectedOutgoingInvoice);
+ outgoingInvoices.remove(selectedOutgoingInvoice);
selectedOutgoingInvoice = null;
validate();
BindUtils.postNotifyChange(this, "selectedOutgoingInvoice");
private void treasuryAdded(SaveEntityEvent<Treasury> event) {
if (event.isSave()) {
Treasury modifiedEntity = event.getData();
- getFormDocument().getTreasuries().add(modifiedEntity);
+ treasuries.add(modifiedEntity);
selectedTreasury = modifiedEntity;
treasuryDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions());
validate();
private void treasuryModified(SaveEntityEvent<Treasury> event) {
if (event.isSave()) {
Treasury modifiedEntity = event.getData();
- List<Treasury> treasuries = getFormDocument().getTreasuries();
treasuries.remove(selectedTreasury);
treasuries.add(modifiedEntity);
selectedTreasury = modifiedEntity;
public void onRemoveTreasury() {
if (Objects.nonNull(selectedTreasury)) {
treasuryDocumentActions.remove(selectedTreasury.getTechnicalId());
- getFormDocument().getTreasuries().remove(selectedTreasury);
+ treasuries.remove(selectedTreasury);
selectedTreasury = null;
validate();
BindUtils.postNotifyChange(this, "selectedTreasury");
@Override
protected boolean areDifferent(Project entity) {
+ //TODO incomingInvoices, outgoingInvoices, treasuries ellenorzese !!!!
return super.areDifferent(entity) || isAssociatesChanged() || !invoiceDocumentActions.isEmpty() || !treasuryDocumentActions.isEmpty();
}
@Override
public void validate() {
super.validate();
- incomeMarginsDataModel.recalculate(getFormDocument(), serviceRecordsDataModel);
+ incomeMarginsDataModel.recalculate(incomingInvoices, outgoingInvoices, treasuries, serviceRecordsDataModel);
}
}
onClick="@command('onRemoveIncoming')"
disabled="@load(empty vm.selectedIncomingInvoice)"/>
</toolbar>
- <listbox model="@load(vm.formDocument.incomingInvoices)"
+ <listbox model="@load(vm.incomingInvoices)"
selectedItem="@bind(vm.selectedIncomingInvoice)"
onDoubleClick="@command('onEditIncoming')"
forward="onOK=submit.onClick, onCancel=cancel.onClick">
onClick="@command('onRemoveOutgoing')"
disabled="@load(empty vm.selectedOutgoingInvoice)"/>
</toolbar>
- <listbox model="@load(vm.formDocument.outgoingInvoices)"
+ <listbox model="@load(vm.outgoingInvoices)"
selectedItem="@bind(vm.selectedOutgoingInvoice)"
onDoubleClick="@command('onEditOutgoing')"
forward="onOK=submit.onClick, onCancel=cancel.onClick">
disabled="@load(empty vm.selectedTreasury)"/>
</toolbar>
- <listbox model="@load(vm.formDocument.treasuries)"
+ <listbox model="@load(vm.treasuries)"
selectedItem="@bind(vm.selectedTreasury)"
onDoubleClick="@command('onEditTreasury')"
forward="onOK=submit.onClick, onCancel=cancel.onClick">