Search in sources :

Example 6 with Model

use of com.axelor.db.Model in project axelor-open-suite by axelor.

the class AdvancedImportServiceImpl method removeRecord.

@SuppressWarnings("unchecked")
@Transactional
public void removeRecord(FileTab fileTab, Class<? extends Model> modelKlass, List<Object> recordList, List<FileTab> fileTabList) throws ClassNotFoundException {
    JpaRepository<? extends Model> modelRepo = JpaRepository.of(modelKlass);
    for (FileTab tab : fileTabList) {
        Map<String, Object> jsonContextMap = dataImportService.createJsonContext(tab);
        JsonContext jsonContext = (JsonContext) jsonContextMap.get("jsonContext");
        String fieldName = inflector.camelize(tab.getMetaModel().getName(), true) + "Set";
        List<Object> recList = (List<Object>) jsonContext.get(fieldName);
        if (CollectionUtils.isEmpty(recList)) {
            continue;
        }
        Class<? extends Model> klass = (Class<? extends Model>) Class.forName(tab.getMetaModel().getFullName());
        Property[] props = Mapper.of(klass).getProperties();
        for (Property prop : props) {
            if (prop.getTarget() != null && prop.getTarget() == modelKlass && prop.isRequired()) {
                removeRecord(tab, klass, recList, fileTabList);
            }
        }
    }
    String ids = recordList.stream().map(obj -> {
        Map<String, Object> recordMap = Mapper.toMap(EntityHelper.getEntity(obj));
        return recordMap.get("id").toString();
    }).collect(Collectors.joining(","));
    modelRepo.all().filter("self.id IN (" + ids + ")").delete();
    fileTab.setAttrs(null);
    LOG.debug("Reset imported data : {}", modelKlass.getSimpleName());
}
Also used : MetaModelRepository(com.axelor.meta.db.repo.MetaModelRepository) Arrays(java.util.Arrays) EntityHelper(com.axelor.db.EntityHelper) JpaRepository(com.axelor.db.JpaRepository) Inject(com.google.inject.Inject) LoggerFactory(org.slf4j.LoggerFactory) Property(com.axelor.db.mapper.Property) HashMap(java.util.HashMap) Mapper(com.axelor.db.mapper.Mapper) StringUtils(org.apache.commons.lang3.StringUtils) JsonContext(com.axelor.rpc.JsonContext) Transactional(com.google.inject.persist.Transactional) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) FileField(com.axelor.apps.base.db.FileField) Strings(com.google.common.base.Strings) AxelorException(com.axelor.exception.AxelorException) AdvancedImportRepository(com.axelor.apps.base.db.repo.AdvancedImportRepository) Files(com.google.common.io.Files) CollectionUtils(org.apache.commons.collections.CollectionUtils) Map(java.util.Map) I18n(com.axelor.i18n.I18n) Inflector(com.axelor.common.Inflector) DataReaderFactory(com.axelor.apps.tool.reader.DataReaderFactory) Logger(org.slf4j.Logger) Model(com.axelor.db.Model) TraceBackRepository(com.axelor.exception.db.repo.TraceBackRepository) MetaField(com.axelor.meta.db.MetaField) MethodHandles(java.lang.invoke.MethodHandles) Set(java.util.Set) Collectors(java.util.stream.Collectors) DataReaderService(com.axelor.apps.tool.reader.DataReaderService) MetaModel(com.axelor.meta.db.MetaModel) List(java.util.List) Beans(com.axelor.inject.Beans) FileFieldRepository(com.axelor.apps.base.db.repo.FileFieldRepository) MetaFieldRepository(com.axelor.meta.db.repo.MetaFieldRepository) IExceptionMessage(com.axelor.apps.base.exceptions.IExceptionMessage) FileTab(com.axelor.apps.base.db.FileTab) AdvancedImport(com.axelor.apps.base.db.AdvancedImport) JsonContext(com.axelor.rpc.JsonContext) Model(com.axelor.db.Model) MetaModel(com.axelor.meta.db.MetaModel) ArrayList(java.util.ArrayList) List(java.util.List) FileTab(com.axelor.apps.base.db.FileTab) Property(com.axelor.db.mapper.Property) HashMap(java.util.HashMap) Map(java.util.Map) Transactional(com.google.inject.persist.Transactional)

Example 7 with Model

use of com.axelor.db.Model in project axelor-open-suite by axelor.

the class FileTabServiceImpl method getShowRecordIds.

@SuppressWarnings("unchecked")
@Override
public String getShowRecordIds(FileTab fileTab, String field) throws ClassNotFoundException {
    Context context = new Context(fileTab.getClass());
    Class<? extends Model> klass = (Class<? extends Model>) Class.forName(fileTab.getClass().getName());
    JsonContext jsonContext = new JsonContext(context, Mapper.of(klass).getProperty("attrs"), fileTab.getAttrs());
    List<Object> recordList = (List<Object>) jsonContext.get(field);
    if (CollectionUtils.isEmpty(recordList)) {
        return null;
    }
    String ids = recordList.stream().map(obj -> {
        Map<String, Object> recordMap = Mapper.toMap(EntityHelper.getEntity(obj));
        return recordMap.get("id").toString();
    }).collect(Collectors.joining(","));
    return ids;
}
Also used : JsonContext(com.axelor.rpc.JsonContext) Context(com.axelor.rpc.Context) MetaModelRepository(com.axelor.meta.db.repo.MetaModelRepository) EntityHelper(com.axelor.db.EntityHelper) Model(com.axelor.db.Model) MetaField(com.axelor.meta.db.MetaField) Inject(com.google.inject.Inject) Mapper(com.axelor.db.mapper.Mapper) Collectors(java.util.stream.Collectors) JsonContext(com.axelor.rpc.JsonContext) FileField(com.axelor.apps.base.db.FileField) Strings(com.google.common.base.Strings) MetaModel(com.axelor.meta.db.MetaModel) List(java.util.List) Beans(com.axelor.inject.Beans) FileFieldRepository(com.axelor.apps.base.db.repo.FileFieldRepository) MetaFieldRepository(com.axelor.meta.db.repo.MetaFieldRepository) CollectionUtils(org.apache.commons.collections.CollectionUtils) Map(java.util.Map) FileTab(com.axelor.apps.base.db.FileTab) Context(com.axelor.rpc.Context) JsonContext(com.axelor.rpc.JsonContext) Model(com.axelor.db.Model) MetaModel(com.axelor.meta.db.MetaModel) List(java.util.List) Map(java.util.Map)

Example 8 with Model

use of com.axelor.db.Model in project axelor-open-suite by axelor.

the class MailServiceBaseImpl method send.

@Override
public void send(final MailMessage message) throws MailException {
    if (!appBaseService.isApp("base") || !appBaseService.getAppBase().getActivateSendingEmail()) {
        return;
    }
    final EmailAccount emailAccount = mailAccountService.getDefaultSender();
    if (emailAccount == null) {
        super.send(message);
        return;
    }
    Preconditions.checkNotNull(message, "mail message can't be null");
    final Model related = findEntity(message);
    final MailSender sender = getMailSender(emailAccount);
    final Set<String> recipients = recipients(message, related);
    if (recipients.isEmpty()) {
        return;
    }
    final MailMessageRepository messages = Beans.get(MailMessageRepository.class);
    for (String recipient : recipients) {
        MailBuilder builder = sender.compose().subject(getSubject(message, related));
        this.setRecipients(builder, recipient, related);
        Model obj = Beans.get(MailService.class).resolve(recipient);
        userName = null;
        if (obj != null) {
            Class<Model> klass = EntityHelper.getEntityClass(obj);
            if (klass.equals(User.class)) {
                User user = (User) obj;
                userName = user.getName();
            } else if (klass.equals(Partner.class)) {
                Partner partner = (Partner) obj;
                userName = partner.getSimpleFullName();
            }
        }
        for (MetaAttachment attachment : messages.findAttachments(message)) {
            final Path filePath = MetaFiles.getPath(attachment.getMetaFile());
            final File file = filePath.toFile();
            builder.attach(file.getName(), file.toString());
        }
        MimeMessage email;
        try {
            builder.html(template(message, related));
            email = builder.build(message.getMessageId());
            final Set<String> references = new LinkedHashSet<>();
            if (message.getParent() != null) {
                references.add(message.getParent().getMessageId());
            }
            if (message.getRoot() != null) {
                references.add(message.getRoot().getMessageId());
            }
            if (!references.isEmpty()) {
                email.setHeader("References", Joiner.on(" ").skipNulls().join(references));
            }
        } catch (MessagingException | IOException e) {
            throw new MailException(e);
        }
        // send email using a separate process to void thread blocking
        executor.submit(new Callable<Boolean>() {

            @Override
            public Boolean call() throws Exception {
                send(sender, email);
                return true;
            }
        });
    }
}
Also used : Path(java.nio.file.Path) LinkedHashSet(java.util.LinkedHashSet) EmailAccount(com.axelor.apps.message.db.EmailAccount) User(com.axelor.auth.db.User) MessagingException(javax.mail.MessagingException) MailSender(com.axelor.mail.MailSender) IOException(java.io.IOException) MailBuilder(com.axelor.mail.MailBuilder) MessagingException(javax.mail.MessagingException) MailException(com.axelor.mail.MailException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) MailMessageRepository(com.axelor.mail.db.repo.MailMessageRepository) MailService(com.axelor.mail.service.MailService) MimeMessage(javax.mail.internet.MimeMessage) Model(com.axelor.db.Model) MailException(com.axelor.mail.MailException) Partner(com.axelor.apps.base.db.Partner) File(java.io.File) MetaAttachment(com.axelor.meta.db.MetaAttachment)

Example 9 with Model

use of com.axelor.db.Model in project axelor-open-suite by axelor.

the class MailServiceBaseImpl method recipients.

@Override
protected Set<String> recipients(MailMessage message, Model entity) {
    final Set<String> recipients = new LinkedHashSet<>();
    final MailFollowerRepository followers = Beans.get(MailFollowerRepository.class);
    String entityName = entity.getClass().getName();
    if (message.getRecipients() != null) {
        for (MailAddress address : message.getRecipients()) {
            recipients.add(address.getAddress());
        }
    }
    for (MailFollower follower : followers.findAll(message)) {
        if (follower.getArchived()) {
            continue;
        }
        User user = follower.getUser();
        if (user != null) {
            if (!(user.getReceiveEmails() && user.getFollowedMetaModelSet().stream().anyMatch(x -> x.getFullName().equals(entityName)))) {
                continue;
            } else {
                Partner partner = user.getPartner();
                if (partner != null && partner.getEmailAddress() != null) {
                    recipients.add(partner.getEmailAddress().getAddress());
                } else if (user.getEmail() != null) {
                    recipients.add(user.getEmail());
                }
            }
        } else {
            if (follower.getEmail() != null) {
                recipients.add(follower.getEmail().getAddress());
            } else {
                log.info("No email address found for follower : " + follower);
            }
        }
    }
    return Sets.filter(recipients, Predicates.notNull());
}
Also used : LinkedHashSet(java.util.LinkedHashSet) UserRepository(com.axelor.auth.db.repo.UserRepository) MetaAttachment(com.axelor.meta.db.MetaAttachment) Templates(com.axelor.text.Templates) Filter(com.axelor.rpc.filter.Filter) Inject(com.google.inject.Inject) LoggerFactory(org.slf4j.LoggerFactory) MessagingException(javax.mail.MessagingException) StringTemplates(com.axelor.text.StringTemplates) Map(java.util.Map) MailBuilder(com.axelor.mail.MailBuilder) TypeReference(com.fasterxml.jackson.core.type.TypeReference) Path(java.nio.file.Path) MailServiceMessageImpl(com.axelor.apps.message.service.MailServiceMessageImpl) MailFollower(com.axelor.mail.db.MailFollower) MethodHandles(java.lang.invoke.MethodHandles) Set(java.util.Set) AppBaseService(com.axelor.apps.base.service.app.AppBaseService) StringUtils(com.axelor.common.StringUtils) Sets(com.google.common.collect.Sets) Executors(java.util.concurrent.Executors) List(java.util.List) MailException(com.axelor.mail.MailException) StringUtils.isBlank(com.axelor.common.StringUtils.isBlank) MailFollowerRepository(com.axelor.mail.db.repo.MailFollowerRepository) Partner(com.axelor.apps.base.db.Partner) UnsupportedEncodingException(java.io.UnsupportedEncodingException) MailAddress(com.axelor.mail.db.MailAddress) Joiner(com.google.common.base.Joiner) Query(com.axelor.db.Query) MailTemplateAssociation(com.axelor.apps.base.db.MailTemplateAssociation) EntityHelper(com.axelor.db.EntityHelper) HashMap(java.util.HashMap) Callable(java.util.concurrent.Callable) MailSender(com.axelor.mail.MailSender) Singleton(javax.inject.Singleton) MailMessageRepository(com.axelor.mail.db.repo.MailMessageRepository) MailService(com.axelor.mail.service.MailService) ArrayList(java.util.ArrayList) InternetAddress(javax.mail.internet.InternetAddress) Strings(com.google.common.base.Strings) GroovyTemplates(com.axelor.text.GroovyTemplates) Predicates(com.google.common.base.Predicates) MailMessage(com.axelor.mail.db.MailMessage) LinkedHashSet(java.util.LinkedHashSet) ExecutorService(java.util.concurrent.ExecutorService) MetaFiles(com.axelor.meta.MetaFiles) Logger(org.slf4j.Logger) Model(com.axelor.db.Model) JpaSecurity(com.axelor.db.JpaSecurity) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) TraceBackService(com.axelor.exception.service.TraceBackService) PartnerRepository(com.axelor.apps.base.db.repo.PartnerRepository) IOException(java.io.IOException) MimeMessage(javax.mail.internet.MimeMessage) TemplateRepository(com.axelor.apps.message.db.repo.TemplateRepository) Maps(com.google.common.collect.Maps) Template(com.axelor.apps.message.db.Template) File(java.io.File) Beans(com.axelor.inject.Beans) EmailAccount(com.axelor.apps.message.db.EmailAccount) Preconditions(com.google.common.base.Preconditions) TemplateMessageService(com.axelor.apps.message.service.TemplateMessageService) User(com.axelor.auth.db.User) MailFollowerRepository(com.axelor.mail.db.repo.MailFollowerRepository) MailAddress(com.axelor.mail.db.MailAddress) User(com.axelor.auth.db.User) MailFollower(com.axelor.mail.db.MailFollower) Partner(com.axelor.apps.base.db.Partner)

Example 10 with Model

use of com.axelor.db.Model in project axelor-open-suite by axelor.

the class DataBackupCreateService method writeCSVData.

protected CSVInput writeCSVData(MetaModel metaModel, CSVWriter csvWriter, DataBackup dataBackup, long totalRecord, List<String> subClasses, String dirPath) {
    CSVInput csvInput = new CSVInput();
    boolean headerFlag = true;
    List<String> dataArr;
    List<String> headerArr = new ArrayList<>();
    List<Model> dataList;
    try {
        Mapper metaModelMapper = Mapper.of(Class.forName(metaModel.getFullName()));
        Property[] pro = metaModelMapper.getProperties();
        Integer fetchLimit = dataBackup.getFetchLimit();
        boolean isRelativeDate = dataBackup.getIsRelativeDate();
        boolean updateImportId = dataBackup.getUpdateImportId();
        csvInput.setFileName(metaModel.getName() + ".csv");
        csvInput.setTypeName(metaModel.getFullName());
        csvInput.setBindings(new ArrayList<>());
        for (int i = 0; i < totalRecord; i = i + fetchLimit) {
            dataList = getMetaModelDataList(metaModel, i, fetchLimit, subClasses);
            if (dataList != null && !dataList.isEmpty()) {
                for (Object dataObject : dataList) {
                    dataArr = new ArrayList<>();
                    for (Property property : pro) {
                        if (isPropertyExportable(property)) {
                            if (headerFlag) {
                                String headerStr = getMetaModelHeader(property, csvInput, isRelativeDate);
                                headerArr.add(headerStr);
                            }
                            dataArr.add(getMetaModelData(metaModel.getName(), metaModelMapper, property, dataObject, dirPath, isRelativeDate, updateImportId));
                        }
                    }
                    if (headerFlag) {
                        if (byteArrFieldFlag) {
                            csvInput.setCallable("com.axelor.apps.base.service.app.DataBackupRestoreService:importObjectWithByteArray");
                            byteArrFieldFlag = false;
                        }
                        csvWriter.writeNext(headerArr.toArray(new String[headerArr.size()]), true);
                        headerFlag = false;
                    }
                    csvWriter.writeNext(dataArr.toArray(new String[dataArr.size()]), true);
                }
            }
        }
        if (AutoImportModelMap.containsKey(csvInput.getTypeName())) {
            csvInput.setSearch(AutoImportModelMap.get(csvInput.getTypeName()).toString());
        } else if (Class.forName(metaModel.getFullName()).getSuperclass() == App.class) {
            csvInput.setSearch("self.code = :code");
        } else {
            csvInput.setSearch("self.importId = :importId");
        }
    } catch (ClassNotFoundException e) {
    }
    return csvInput;
}
Also used : App(com.axelor.apps.base.db.App) ArrayList(java.util.ArrayList) CSVInput(com.axelor.data.csv.CSVInput) Mapper(com.axelor.db.mapper.Mapper) MetaModel(com.axelor.meta.db.MetaModel) AuditableModel(com.axelor.auth.db.AuditableModel) Model(com.axelor.db.Model) Property(com.axelor.db.mapper.Property)

Aggregations

Model (com.axelor.db.Model)77 MetaModel (com.axelor.meta.db.MetaModel)22 AxelorException (com.axelor.exception.AxelorException)19 ArrayList (java.util.ArrayList)18 HashMap (java.util.HashMap)16 Context (com.axelor.rpc.Context)15 Transactional (com.google.inject.persist.Transactional)15 List (java.util.List)14 Mapper (com.axelor.db.mapper.Mapper)13 IOException (java.io.IOException)13 File (java.io.File)12 Map (java.util.Map)12 Property (com.axelor.db.mapper.Property)11 MetaJsonRecord (com.axelor.meta.db.MetaJsonRecord)9 JsonContext (com.axelor.rpc.JsonContext)8 MetaModelRepository (com.axelor.meta.db.repo.MetaModelRepository)7 Strings (com.google.common.base.Strings)7 HashSet (java.util.HashSet)7 FullContext (com.axelor.apps.tool.context.FullContext)6 Beans (com.axelor.inject.Beans)6