From: Vásáry Dániel Date: Tue, 16 Jan 2024 08:49:49 +0000 (+0100) Subject: Entity selector unique id usage solved bug, import modified for tests X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=d1ccc39dbac17328dfe66ec04f44f93fe1918bb4;p=sly-crm.git Entity selector unique id usage solved bug, import modified for tests --- diff --git a/lis-app/pom.xml b/lis-app/pom.xml index b0d0c6e..27b5c97 100644 --- a/lis-app/pom.xml +++ b/lis-app/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 lis-app - 0.1.9-SNAPSHOT + 0.2.0-SNAPSHOT SLY-CRM hu.user diff --git a/lis-app/src/test/java/hu/user/lis/service/dataimport/DataImportIT.java b/lis-app/src/test/java/hu/user/lis/service/dataimport/DataImportIT.java new file mode 100644 index 0000000..c66bd68 --- /dev/null +++ b/lis-app/src/test/java/hu/user/lis/service/dataimport/DataImportIT.java @@ -0,0 +1,61 @@ +package hu.user.lis.service.dataimport; + +import hu.user.lis.db.repository.*; +import lombok.extern.log4j.Log4j2; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import java.nio.file.Paths; + + +@Log4j2 +@RunWith(SpringRunner.class) +@SpringBootTest +@ActiveProfiles("dev") +@TestPropertySource("classpath:application-dev.yaml") +//@ActiveProfiles("prod") +//@TestPropertySource("classpath:application-prod.yaml") +public class DataImportIT { + @Autowired + InvoiceImportRepository invoiceImportRepository; + @Autowired + PaymentRepository paymentRepository; + @Autowired + ProjectAssociateRepository projectAssociateRepository; + @Autowired + ServiceRecordRepository serviceRecordRepository; + @Autowired + TreasuryRepository treasuryRepository; + @Autowired + InvoiceRepository invoiceRepository; + @Autowired + ProjectRepository projectRepository; + @Autowired + EDocumentRepository eDocumentRepository; + @Autowired + PartnerRepository partnerRepository; + + @Autowired + private DataImportService dataImportService; + + + @Test + public void importTest() throws Exception { + invoiceImportRepository.deleteAllInBatch(); + paymentRepository.deleteAllInBatch(); + projectAssociateRepository.deleteAllInBatch(); + serviceRecordRepository.deleteAllInBatch(); + treasuryRepository.deleteAllInBatch(); + invoiceRepository.deleteAllInBatch(); + projectRepository.deleteAllInBatch(); + partnerRepository.deleteAllInBatch(); + + dataImportService.importData(Paths.get("c:/work/_spec/slycrm/2024/dataimport.xlsx")); + } + +} diff --git a/lis-db/migrations/scripts/024_modify_short_name_on_partner.sql b/lis-db/migrations/scripts/024_modify_short_name_on_partner.sql new file mode 100644 index 0000000..e605f7d --- /dev/null +++ b/lis-db/migrations/scripts/024_modify_short_name_on_partner.sql @@ -0,0 +1,10 @@ +-- // modify short name on partner +-- Migration SQL that makes the change goes here. + +ALTER TABLE partner + ALTER COLUMN short_name + SET DATA TYPE VARCHAR(100); + +-- //@UNDO +-- SQL to undo the change goes here. + diff --git a/lis-db/migrations/scripts/025_add_unique_index_to_project_status_name.sql b/lis-db/migrations/scripts/025_add_unique_index_to_project_status_name.sql new file mode 100644 index 0000000..abb9c58 --- /dev/null +++ b/lis-db/migrations/scripts/025_add_unique_index_to_project_status_name.sql @@ -0,0 +1,9 @@ +-- // add unique index to project_status name +-- Migration SQL that makes the change goes here. + +CREATE UNIQUE INDEX UX_PROJECT_STATUS_NAME ON PROJECT_STATUS(name); + +-- //@UNDO +-- SQL to undo the change goes here. + +DROP INDEX UX_PROJECT_STATUS_NAME; diff --git a/lis-db/migrations/scripts/skratch/024_remove_unique_index_on_partner_vatnr.sql b/lis-db/migrations/scripts/skratch/024_remove_unique_index_on_partner_vatnr.sql new file mode 100644 index 0000000..f64737b --- /dev/null +++ b/lis-db/migrations/scripts/skratch/024_remove_unique_index_on_partner_vatnr.sql @@ -0,0 +1,7 @@ +-- // remove unique index on partner vatnr +-- Migration SQL that makes the change goes here. +DROP INDEX UX_PARTNER_VAT_NR; + +-- //@UNDO +-- SQL to undo the change goes here. +CREATE UNIQUE INDEX UX_PARTNER_VAT_NR ON PARTNER(vat_nr); 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 4c3d509..92a51c2 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 @@ -5,7 +5,7 @@ import lombok.Getter; @Getter public enum Currency { - HUF(0), USD(1), EUR(2); + HUF(0), USD(1), EUR(2), GBP(3); final int val; Currency(int val) { diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/JdbcTemplateRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/JdbcTemplateRepository.java new file mode 100644 index 0000000..737c801 --- /dev/null +++ b/lis-db/src/main/java/hu/user/lis/db/repository/JdbcTemplateRepository.java @@ -0,0 +1,17 @@ +package hu.user.lis.db.repository; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +public class JdbcTemplateRepository { + @Autowired + private JdbcTemplate jdbcTemplate; + + @Transactional + public void truncateTable(String tableName) { + jdbcTemplate.execute(String.format("TRUNCATE TABLE %s IGNORE DELETE TRIGGERS IMMEDIATE", tableName)); + } +} \ No newline at end of file diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java index daabdb6..b4a88c6 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/PartnerRepository.java @@ -3,10 +3,13 @@ package hu.user.lis.db.repository; import hu.user.lis.db.Partner; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface PartnerRepository extends JpaRepository, PartnerRepositorySearch { Optional findByVatNr(String vatNr); + List findAllByName(String name); + } diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java index c3087e4..786f24e 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/ProjectStatusRepository.java @@ -5,10 +5,13 @@ import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; +import java.util.Optional; public interface ProjectStatusRepository extends JpaRepository { List findByActiveIsTrue(Sort sort); + Optional findByName(String name); + long countByActiveIsTrue(); ProjectStatus findByOrder(int order); diff --git a/lis-service/pom.xml b/lis-service/pom.xml index 7f36fad..49e17fd 100644 --- a/lis-service/pom.xml +++ b/lis-service/pom.xml @@ -96,6 +96,11 @@ bcprov-jdk18on 1.76 + + org.dhatim + fastexcel-reader + 0.15.7 + org.springframework.boot spring-boot-starter-webflux diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/DataImportService.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/DataImportService.java new file mode 100644 index 0000000..3e4cccc --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/DataImportService.java @@ -0,0 +1,34 @@ +package hu.user.lis.service.dataimport; + +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.nio.file.Files; +import java.nio.file.Path; + +@Log4j2 +@Service +public class DataImportService { + @Autowired + private PartnerXlsProcessor partnerXlsProcessor; + + @Autowired + private ProjectXlsProcessor projectXlsProcessor; + + @Autowired + private IncomingInvoiceXlsProcessor incomingInvoiceXlsProcessor; + + @Autowired + private OutgoingInvoiceXlsProcessor outgoingInvoiceXlsProcessor; + + public void importData(Path inputFile) throws Exception { + String fileName = inputFile.getFileName().toString(); + byte[] xlsData = Files.readAllBytes(inputFile); + partnerXlsProcessor.process(fileName, xlsData, 1); + projectXlsProcessor.process(fileName, xlsData, 0); + incomingInvoiceXlsProcessor.process(fileName, xlsData, 3); + outgoingInvoiceXlsProcessor.process(fileName, xlsData, 2); + } + +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/IncomingInvoiceXlsProcessor.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/IncomingInvoiceXlsProcessor.java new file mode 100644 index 0000000..af838e0 --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/IncomingInvoiceXlsProcessor.java @@ -0,0 +1,65 @@ +package hu.user.lis.service.dataimport; + +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 lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Map; +import java.util.Objects; + +@Log4j2 +@Component +public class IncomingInvoiceXlsProcessor extends XlsProcessor { + @Autowired + private InvoiceRepository invoiceRepository; + + @Autowired + private ProjectRepository projectRepository; + + @Autowired + private InvoiceXlsMapper invoiceXlsMapper; + + @Override + protected IncomingInvoice mapEntity(Map rowData) { + IncomingInvoice entity = invoiceXlsMapper.toIncomingInvoiceEntity(rowData); + entity.setStatus(InvoiceStatus.ACTIVE); + entity.setIncoming(true); + return entity; + } + + @Override + protected boolean isValid(IncomingInvoice entity) { + return !StringUtils.isBlank(entity.getHumanId()) +// && !Objects.isNull(entity.getPartner()) + && !Objects.isNull(entity.getCurrency()) + && !Objects.isNull(entity.getCreateDate()) + && !Objects.isNull(entity.getCompletionDate()) + && !Objects.isNull(entity.getPaymentDeadline()) + && entity.getNetAmount() > 0 + && entity.getGrossAmount() > 0 + && entity.getVatAmount() > 0; + } + + @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); + } + log.info("Incoming invoice added: {}", entity.getHumanId()); + } + +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/OutgoingInvoiceXlsProcessor.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/OutgoingInvoiceXlsProcessor.java new file mode 100644 index 0000000..94ad14c --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/OutgoingInvoiceXlsProcessor.java @@ -0,0 +1,64 @@ +package hu.user.lis.service.dataimport; + +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 lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Map; +import java.util.Objects; + +@Log4j2 +@Component +public class OutgoingInvoiceXlsProcessor extends XlsProcessor { + @Autowired + private InvoiceRepository invoiceRepository; + + @Autowired + private ProjectRepository projectRepository; + + @Autowired + private InvoiceXlsMapper invoiceXlsMapper; + + @Override + protected OutgoingInvoice mapEntity(Map rowData) { + OutgoingInvoice entity = invoiceXlsMapper.toOutgoingInvoiceEntity(rowData); + entity.setStatus(InvoiceStatus.ACTIVE); + return entity; + } + + @Override + protected boolean isValid(OutgoingInvoice entity) { + return !StringUtils.isBlank(entity.getHumanId()) +// && !Objects.isNull(entity.getPartner()) + && !Objects.isNull(entity.getCurrency()) + && !Objects.isNull(entity.getCreateDate()) + && !Objects.isNull(entity.getCompletionDate()) + && !Objects.isNull(entity.getPaymentDeadline()) + && entity.getNetAmount() > 0 + && entity.getGrossAmount() > 0 + && entity.getVatAmount() > 0; + } + + @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); + } + log.info("Outgoing invoice added: {}", entity.getHumanId()); + } + +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/PartnerXlsProcessor.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/PartnerXlsProcessor.java new file mode 100644 index 0000000..5884eb1 --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/PartnerXlsProcessor.java @@ -0,0 +1,45 @@ +package hu.user.lis.service.dataimport; + +import hu.user.lis.db.Partner; +import hu.user.lis.db.repository.PartnerRepository; +import hu.user.lis.service.dataimport.mapper.PartnerXlsMapper; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Objects; + +@Log4j2 +@Component +public class PartnerXlsProcessor extends XlsProcessor { + @Autowired + private PartnerRepository partnerRepository; + + @Autowired + private PartnerXlsMapper partnerXlsMapper; + + @Override + protected Partner mapEntity(Map rowData) { + Partner entity = partnerXlsMapper.toEntity(rowData); + if (Objects.isNull(entity.getShortName())) { + entity.setShortName(entity.getName()); + } + entity.setActive(true); + return entity; + } + + @Override + protected boolean isValid(Partner entity) { + return !StringUtils.isBlank(entity.getName()) + && !StringUtils.isBlank(entity.getShortName()); + } + + @Override + protected void process(Partner entity) { + partnerRepository.save(entity); + log.info("Partner added: {}", entity.getName()); + } + +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/ProjectXlsProcessor.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/ProjectXlsProcessor.java new file mode 100644 index 0000000..8745a3b --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/ProjectXlsProcessor.java @@ -0,0 +1,69 @@ +package hu.user.lis.service.dataimport; + +import hu.user.lis.db.Project; +import hu.user.lis.db.ProjectStatus; +import hu.user.lis.db.repository.ProjectRepository; +import hu.user.lis.db.repository.ProjectStatusRepository; +import hu.user.lis.service.dataimport.mapper.ProjectXlsMapper; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Map; +import java.util.Optional; + +@Log4j2 +@Component +public class ProjectXlsProcessor extends XlsProcessor { + public static final String IMPORTED = "IMPORTED"; + @Autowired + private ProjectRepository projectRepository; + + @Autowired + private ProjectStatusRepository projectStatusRepository; + + @Autowired + private ProjectXlsMapper projectXlsMapper; + + private ProjectStatus defaultProjectStatus; + + @Override + public void process(String fileName, byte[] xlsData, int sheetIndex) throws IOException { + Optional projectStatus = projectStatusRepository.findByName(IMPORTED); + if (projectStatus.isPresent()) { + defaultProjectStatus = projectStatus.get(); + } else { + defaultProjectStatus = ProjectStatus.builder().name(IMPORTED).active(true).build(); + projectStatusRepository.saveAndFlush(defaultProjectStatus); + } + super.process(fileName, xlsData, sheetIndex); + } + + @Override + protected Project mapEntity(Map rowData) { + Project entity = projectXlsMapper.toEntity(rowData); + entity.setProjectStatus(defaultProjectStatus); + entity.setActive(true); + + if (entity.getHumanId().equals("99000199")) { + log.info(""); + } + return entity; + } + + @Override + protected boolean isValid(Project entity) { + return !StringUtils.isBlank(entity.getName()) + && !StringUtils.isBlank(entity.getHumanId()); +// && !Objects.isNull(entity.getPartner()); + } + + @Override + protected void process(Project entity) { + projectRepository.save(entity); + log.info("Project added: {}", entity.getName()); + } + +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/XlsProcessor.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/XlsProcessor.java new file mode 100644 index 0000000..b718480 --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/XlsProcessor.java @@ -0,0 +1,85 @@ +package hu.user.lis.service.dataimport; + +import lombok.extern.log4j.Log4j2; +import org.dhatim.fastexcel.reader.Cell; +import org.dhatim.fastexcel.reader.ReadableWorkbook; +import org.dhatim.fastexcel.reader.Row; +import org.dhatim.fastexcel.reader.Sheet; +import org.springframework.transaction.annotation.Transactional; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Log4j2 +public abstract class XlsProcessor { + private List headers; + + @Transactional + public void process(String fileName, byte[] xlsData, int sheetIndex) throws IOException { + try (InputStream is = new ByteArrayInputStream(xlsData); + ReadableWorkbook wb = new ReadableWorkbook(is)) { + Sheet sheet = wb.getSheet(sheetIndex).orElseThrow(IndexOutOfBoundsException::new); + try (Stream rows = sheet.openStream()) { + rows.forEach(row -> { + if (row.getRowNum() == 1) { + headers = getHeaders(row); + } else if (row.getRowNum() == 2) { + //skip + } else { + //log.info("Processing {}", row.getRowNum()); + processRow(row); + } + }); + } + } catch (IOException e) { + log.error("Excel file reading error from {}. System message: {}", fileName, e.getMessage()); + throw e; + } + } + + private List getHeaders(Row row) { + return row.stream().collect(Collectors.toList()); + } + + private void processRow(Row r) { + Map rowData = getRowMap(r); + T entity = mapEntity(rowData); + try { + if (isValid(entity)) { + process(entity); + } + } catch (Exception e) { + log.error("Processing error for {}", r, e); + throw e; + } + } + + private Map getRowMap(Row r) { + Map rowData = new HashMap<>(); + r.stream().filter(Objects::nonNull).forEach(c -> { + try { + if (c.getColumnIndex() < headers.size()) { + String header = headers.get(c.getColumnIndex()).getRawValue(); + String data = c.getRawValue(); + rowData.put(header, data); + } + } catch (Exception e) { + log.error("Cell error!", e); + } + }); + return rowData; + } + + protected abstract T mapEntity(Map rowData); + + protected abstract boolean isValid(T entity); + + protected abstract void process(T entity); +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/InvoiceXlsMapper.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/InvoiceXlsMapper.java new file mode 100644 index 0000000..7d3a44f --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/InvoiceXlsMapper.java @@ -0,0 +1,91 @@ +package hu.user.lis.service.dataimport.mapper; + +import hu.user.lis.db.IncomingInvoice; +import hu.user.lis.db.OutgoingInvoice; +import hu.user.lis.db.Partner; +import hu.user.lis.db.Project; +import hu.user.lis.db.repository.PartnerRepository; +import hu.user.lis.db.repository.ProjectRepository; +import org.apache.commons.lang3.StringUtils; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.mapstruct.ReportingPolicy; +import org.springframework.beans.factory.annotation.Autowired; + +import java.sql.Date; +import java.util.List; +import java.util.Map; +import java.util.Optional; + + +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) +public abstract class InvoiceXlsMapper { + @Autowired + private PartnerRepository partnerRepository; + + @Autowired + private ProjectRepository projectRepository; + + @Named("mapDate") + static Date mapDate(String numberValue) { + long longValue = 0; + try { + longValue = Long.parseLong(numberValue); + } catch (Exception ignored) { + } + long javaDateValue = (longValue - 25569) * 86400 * 1000; + return new Date(javaDateValue); + } + + @Named("mapPartner") + Partner mapPartner(String partnerName) { + Partner result = null; + List partners = partnerRepository.findAllByName(partnerName); + if (partners.size() == 1) { + result = partners.get(0); + } + return result; + } + + @Named("mapProject") + Project mapProject(String humanId) { + Project result = null; + Optional project = projectRepository.findByHumanId(humanId); + if (project.isPresent()) { + result = project.get(); + } + return result; + } + + @Named("mapPaid") + boolean mapPaid(String paymentDate) { + return StringUtils.isNotBlank(paymentDate); + } + + @Mapping(source = "Sorszám", target = "humanId") + @Mapping(source = "Azonosító", target = "project", qualifiedByName = "mapProject") + @Mapping(source = "Partner", target = "partner", qualifiedByName = "mapPartner") + @Mapping(source = "Teljesítés dátuma", target = "completionDate", qualifiedByName = "mapDate") + @Mapping(source = "Számla kelte", target = "createDate", qualifiedByName = "mapDate") + @Mapping(source = "Fizetési határidő", target = "paymentDeadline", qualifiedByName = "mapDate") + @Mapping(source = "Nettó összeg", target = "netAmount") + @Mapping(source = "Bruttó összeg", target = "grossAmount") + @Mapping(source = "ÁFA (HUF)", target = "vatAmount") + @Mapping(source = "Devizanem", target = "currency") + @Mapping(source = "Kiegyenlítve", target = "paid", qualifiedByName = "mapPaid") + public abstract IncomingInvoice toIncomingInvoiceEntity(Map xlsRowData); + + @Mapping(source = "Sorszám", target = "humanId") + @Mapping(source = "Azonosító", target = "project", qualifiedByName = "mapProject") + @Mapping(source = "Partner", target = "partner", qualifiedByName = "mapPartner") + @Mapping(source = "Teljesítés dátuma", target = "completionDate", qualifiedByName = "mapDate") + @Mapping(source = "Számla kelte", target = "createDate", qualifiedByName = "mapDate") + @Mapping(source = "Fizetési határidő", target = "paymentDeadline", qualifiedByName = "mapDate") + @Mapping(source = "Nettó összeg", target = "netAmount") + @Mapping(source = "Bruttó összeg", target = "grossAmount") + @Mapping(source = "ÁFA (HUF)", target = "vatAmount") + @Mapping(source = "Devizanem", target = "currency") + @Mapping(source = "Kiegyenlítve", target = "paid", qualifiedByName = "mapPaid") + public abstract OutgoingInvoice toOutgoingInvoiceEntity(Map xlsRowData); +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/PartnerXlsMapper.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/PartnerXlsMapper.java new file mode 100644 index 0000000..7fce8d9 --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/PartnerXlsMapper.java @@ -0,0 +1,18 @@ +package hu.user.lis.service.dataimport.mapper; + +import hu.user.lis.db.Partner; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import java.util.Map; + + +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface PartnerXlsMapper { + @Mapping(source = "Partner név", target = "name") + @Mapping(source = "Rövid név", target = "shortName") + @Mapping(source = "Adószám", target = "vatNr") + @Mapping(source = "Cím", target = "address") + Partner toEntity(Map xlsRowData); +} diff --git a/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/ProjectXlsMapper.java b/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/ProjectXlsMapper.java new file mode 100644 index 0000000..4b95430 --- /dev/null +++ b/lis-service/src/main/java/hu/user/lis/service/dataimport/mapper/ProjectXlsMapper.java @@ -0,0 +1,42 @@ +package hu.user.lis.service.dataimport.mapper; + +import hu.user.lis.db.Partner; +import hu.user.lis.db.Project; +import hu.user.lis.db.repository.PartnerRepository; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.mapstruct.ReportingPolicy; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; +import java.util.Map; + + +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) +public abstract class ProjectXlsMapper { + @Autowired + private PartnerRepository partnerRepository; + + @Named("mapPartner") + Partner mapPartner(String partnerName) { + Partner result = null; + List partners = partnerRepository.findAllByName(partnerName); + if (partners.size() == 1) { + result = partners.get(0); + } + return result; + } + + @Mapping(source = "Megnevezés", target = "name") + @Mapping(source = "Azonosító", target = "humanId") + @Mapping(source = "Kapcsolattartó", target = "contactName") + @Mapping(source = "Ügyfél", target = "partner", qualifiedByName = "mapPartner") + @Mapping(target = "projectStatus", ignore = true) + @Mapping(target = "incomingInvoices", ignore = true) + @Mapping(target = "outgoingInvoices", ignore = true) + @Mapping(target = "treasuries", ignore = true) + public abstract Project toEntity(Map xlsRowData); + + +} diff --git a/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java b/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java index f9ebf1b..22b2a77 100644 --- a/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java +++ b/lis-ui/src/main/java/hu/user/lis/ui/auth/CurrentProfile.java @@ -15,6 +15,7 @@ import java.util.stream.Collectors; @Service public class CurrentProfile { + @Autowired ProfileRepository profileRepository; @Getter diff --git a/lis-ui/src/main/java/hu/user/lis/ui/view/SpringBindComposer.java b/lis-ui/src/main/java/hu/user/lis/ui/view/SpringBindComposer.java new file mode 100644 index 0000000..62ad329 --- /dev/null +++ b/lis-ui/src/main/java/hu/user/lis/ui/view/SpringBindComposer.java @@ -0,0 +1,6 @@ +package hu.user.lis.ui.view; + +import org.zkoss.bind.BindComposer; + +public class SpringBindComposer extends BindComposer { +} diff --git a/lis-ui/src/main/resources/web/associates.zul b/lis-ui/src/main/resources/web/associates.zul index eb0ac5f..95d71a8 100644 --- a/lis-ui/src/main/resources/web/associates.zul +++ b/lis-ui/src/main/resources/web/associates.zul @@ -28,7 +28,7 @@
+ onSelect="@command('onListSelection')"> @@ -39,7 +39,7 @@