Search in sources :

Example 1 with Transaction

use of pl.morecraft.dev.settler.domain.Transaction in project Settler by EmhyrVarEmreis.

the class ImportService method importTransactions.

public void importTransactions(MultipartFile file) throws IOException {
    List<Category> categoryList = categoryRepository.findAll();
    Map<String, Category> categoryMap = categoryList == null ? new HashMap<>() : categoryList.stream().collect(Collectors.toMap(Category::getCode, category -> category));
    List<Transaction> transactionList = new ArrayList<>();
    ByteArrayInputStream stream = new ByteArrayInputStream(file.getBytes());
    String content = IOUtils.toString(stream, "UTF-8");
    String[] lines = content.split("\\r?\\n");
    DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("dd.MM.yyyy");
    User o = userRepository.findOneByLogin(splitLine(lines[0])[26]);
    User c = userRepository.findOneByLogin(splitLine(lines[0])[27]);
    int ln = 0;
    for (String line : lines) {
        ln++;
        if (ln < 3) {
            continue;
        }
        try {
            String[] cells = splitLine(line);
            String name = cells[0];
            String mark = cells[4].trim();
            Double value;
            Double sharedAValue;
            Double sharedBValue;
            Integer sharedA;
            Integer sharedB;
            LocalDateTime date;
            Boolean normal;
            Transaction transaction = new Transaction();
            List<Redistribution> owners = new ArrayList<>();
            List<Redistribution> contractors = new ArrayList<>();
            value = Double.valueOf(cells[2].replaceAll("[^0-9^,-]+", "").replace(",", "."));
            date = dateTimeFormatter.parseLocalDateTime(cells[1]);
            sharedA = cells.length < 7 || cells[5].trim().isEmpty() ? -1 : Integer.valueOf(cells[5].trim());
            sharedB = cells.length < 7 || cells[6].trim().isEmpty() ? -1 : Integer.valueOf(cells[6].trim());
            normal = value > 0;
            value = Math.abs(value);
            if (mark.equalsIgnoreCase("x")) {
                if (sharedA < 0 || sharedB < 0) {
                    sharedA = 1;
                    sharedB = 2;
                }
            } else if (mark.equalsIgnoreCase("b") || mark.equalsIgnoreCase("z")) {
                sharedA = 1;
                sharedB = 1;
            } else {
                continue;
            }
            sharedAValue = value;
            value = (value / (sharedA)) * sharedB;
            value = (double) Math.round(value * 100) / 100;
            sharedBValue = value - sharedAValue;
            sharedBValue = (double) Math.round(sharedBValue * 100) / 100;
            if (normal) {
                owners.add(new Redistribution(RedistributionType.O, transaction, o, value));
                if (sharedBValue > 0) {
                    contractors.add(new Redistribution(RedistributionType.C, transaction, o, sharedBValue));
                }
                contractors.add(new Redistribution(RedistributionType.C, transaction, c, sharedAValue));
            } else {
                owners.add(new Redistribution(RedistributionType.O, transaction, c, value));
                contractors.add(new Redistribution(RedistributionType.C, transaction, o, sharedAValue));
                if (sharedBValue > 0) {
                    contractors.add(new Redistribution(RedistributionType.C, transaction, c, sharedBValue));
                }
            }
            transaction.setValue(value);
            owners.forEach(redistribution -> redistribution.setPercentage(redistribution.getPercentage() / 1.0 / transaction.getValue()));
            contractors.forEach(redistribution -> redistribution.setPercentage(redistribution.getPercentage() / 1.0 / transaction.getValue()));
            transaction.setOwners(owners);
            transaction.setContractors(contractors);
            date = date.withHourOfDay(12).withMinuteOfHour(0).withSecondOfMinute(0);
            transaction.setCreator(Security.currentUser());
            transaction.setType(TransactionType.NOR);
            transaction.setDescription(name);
            transaction.setEvaluated(date);
            List<Category> cl = checkCategories(transaction.getDescription()).stream().map(categoryMap::get).filter(Objects::nonNull).collect(Collectors.toList());
            transaction.setCategories(cl.isEmpty() ? null : cl);
            transaction.setReference(sequenceManager.getNextReferenceForTransaction(transaction));
            transactionList.add(transaction);
        } catch (Exception e) {
            log.warn("Unable to convert line No{}: {}", ln, line, e);
        }
    }
    transactionList.sort((o1, o2) -> o1.getEvaluated().compareTo(o2.getCreated()));
    transactionList.forEach(t -> {
        t.setCreated(new LocalDateTime());
        log.info(t.getEvaluated() + " " + t.getReference() + " " + t.getValue() + " [" + t.getDescription() + "]" + " [" + t.getOwners().stream().map(r -> r.getId().getUser().getLogin() + "/" + r.getPercentage()).collect(Collectors.joining(", ")) + "]" + " [" + t.getContractors().stream().map(r -> r.getId().getUser().getLogin() + "/" + r.getPercentage()).collect(Collectors.joining(", ")) + "]" + " [" + (t.getCategories() == null ? "" : t.getCategories().stream().map(Category::getCode).collect(Collectors.joining(", "))) + "]");
        transactionRepository.save(t);
    });
}
Also used : LocalDateTime(org.joda.time.LocalDateTime) TransactionType(pl.morecraft.dev.settler.domain.dictionaries.TransactionType) java.util(java.util) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Category(pl.morecraft.dev.settler.domain.Category) ByteArrayInputStream(java.io.ByteArrayInputStream) Transaction(pl.morecraft.dev.settler.domain.Transaction) Gson(com.google.gson.Gson) Service(org.springframework.stereotype.Service) UserRepository(pl.morecraft.dev.settler.dao.repository.UserRepository) Qualifier(org.springframework.beans.factory.annotation.Qualifier) CategoryRepository(pl.morecraft.dev.settler.dao.repository.CategoryRepository) RedistributionType(pl.morecraft.dev.settler.domain.dictionaries.RedistributionType) DateTimeFormat(org.joda.time.format.DateTimeFormat) User(pl.morecraft.dev.settler.domain.User) Logger(org.slf4j.Logger) DateTimeFormatter(org.joda.time.format.DateTimeFormatter) Security(pl.morecraft.dev.settler.security.util.Security) IOException(java.io.IOException) LocalDateTime(org.joda.time.LocalDateTime) Collectors(java.util.stream.Collectors) TransactionRepository(pl.morecraft.dev.settler.dao.repository.TransactionRepository) IOUtils(org.apache.commons.io.IOUtils) MultipartFile(org.springframework.web.multipart.MultipartFile) Redistribution(pl.morecraft.dev.settler.domain.Redistribution) Transactional(org.springframework.transaction.annotation.Transactional) Category(pl.morecraft.dev.settler.domain.Category) User(pl.morecraft.dev.settler.domain.User) IOException(java.io.IOException) Redistribution(pl.morecraft.dev.settler.domain.Redistribution) Transaction(pl.morecraft.dev.settler.domain.Transaction) ByteArrayInputStream(java.io.ByteArrayInputStream) DateTimeFormatter(org.joda.time.format.DateTimeFormatter)

Example 2 with Transaction

use of pl.morecraft.dev.settler.domain.Transaction in project Settler by EmhyrVarEmreis.

the class EmailService method sendNotificationEmailNewTransaction.

public void sendNotificationEmailNewTransaction(Transaction transaction) {
    EmailTemplate emailTemplate = emailTemplateRepository.findOneByTypeAndLanguage(EmailTemplateType.NEW_TRANSACTION, Language.EN_GB);
    if (emailTemplate != null) {
        Stream.concat(transaction.getContractors() == null ? Stream.empty() : transaction.getContractors().stream(), transaction.getOwners() == null ? Stream.empty() : transaction.getOwners().stream()).filter(redistribution -> !redistribution.getId().getUser().getId().equals(transaction.getCreator().getId())).forEach(redistribution -> {
            Map<String, String> options = new HashMap<>();
            options.put("description", transaction.getDescription());
            options.put("creator", transaction.getCreator().getLogin());
            options.put("user", redistribution.getId().getUser().getFirstName());
            options.put("transactionId", transaction.getReference());
            options.put("value", String.format("%.2f", redistribution.getPercentage() * transaction.getValue() / 100.0));
            options.put("total", String.format("%.2f", transaction.getValue()));
            sendEmail(Collections.singletonList(redistribution.getId().getUser().getEmail()), emailTemplate, options);
        });
    }
}
Also used : Async(org.springframework.scheduling.annotation.Async) MimeMessageHelper(org.springframework.mail.javamail.MimeMessageHelper) EmailTemplateRepository(pl.morecraft.dev.settler.dao.repository.EmailTemplateRepository) Logger(org.slf4j.Logger) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) JavaMailSender(org.springframework.mail.javamail.JavaMailSender) HashMap(java.util.HashMap) List(java.util.List) Language(pl.morecraft.dev.settler.domain.dictionaries.Language) Stream(java.util.stream.Stream) MimeMessagePreparator(org.springframework.mail.javamail.MimeMessagePreparator) Transaction(pl.morecraft.dev.settler.domain.Transaction) Service(org.springframework.stereotype.Service) EmailTemplate(pl.morecraft.dev.settler.domain.EmailTemplate) Map(java.util.Map) EmailTemplateType(pl.morecraft.dev.settler.domain.dictionaries.EmailTemplateType) Collections(java.util.Collections) SettlerProperties(pl.morecraft.dev.settler.configuration.SettlerProperties) HashMap(java.util.HashMap) EmailTemplate(pl.morecraft.dev.settler.domain.EmailTemplate)

Aggregations

Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2 Autowired (org.springframework.beans.factory.annotation.Autowired)2 Service (org.springframework.stereotype.Service)2 Transaction (pl.morecraft.dev.settler.domain.Transaction)2 Gson (com.google.gson.Gson)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 IOException (java.io.IOException)1 java.util (java.util)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Collectors (java.util.stream.Collectors)1 Stream (java.util.stream.Stream)1 IOUtils (org.apache.commons.io.IOUtils)1 LocalDateTime (org.joda.time.LocalDateTime)1 DateTimeFormat (org.joda.time.format.DateTimeFormat)1 DateTimeFormatter (org.joda.time.format.DateTimeFormatter)1 Qualifier (org.springframework.beans.factory.annotation.Qualifier)1