Search in sources :

Example 41 with Model

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

the class GenerateMessageController method callMessageWizard.

public void callMessageWizard(ActionRequest request, ActionResponse response) {
    Model context = request.getContext().asType(Model.class);
    String model = request.getModel();
    LOG.debug("Call message wizard for model : {} ", model);
    String[] decomposeModel = model.split("\\.");
    String simpleModel = decomposeModel[decomposeModel.length - 1];
    Query<? extends Template> templateQuery = Beans.get(TemplateRepository.class).all().filter("self.metaModel.fullName = ?1 AND self.isSystem != true", model);
    try {
        long templateNumber = templateQuery.count();
        LOG.debug("Template number : {} ", templateNumber);
        if (templateNumber == 0) {
            response.setView(ActionView.define(I18n.get(IExceptionMessage.MESSAGE_3)).model(Message.class.getName()).add("form", "message-form").param("forceEdit", "true").context("_mediaTypeSelect", MessageRepository.MEDIA_TYPE_EMAIL).context("_templateContextModel", model).context("_objectId", context.getId().toString()).map());
        } else if (templateNumber > 1) {
            response.setView(ActionView.define(I18n.get(IExceptionMessage.MESSAGE_2)).model(Wizard.class.getName()).add("form", "generate-message-wizard-form").param("show-confirm", "false").context("_objectId", context.getId().toString()).context("_templateContextModel", model).context("_tag", simpleModel).map());
        } else {
            response.setView(generateMessage(context.getId(), model, simpleModel, templateQuery.fetchOne()));
        }
    } catch (Exception e) {
        TraceBackService.trace(response, e);
    }
}
Also used : Model(com.axelor.db.Model) Wizard(com.axelor.apps.base.db.Wizard) IOException(java.io.IOException) AxelorException(com.axelor.exception.AxelorException)

Example 42 with Model

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

the class CSVImportTest method test.

@Test
public void test() throws ClassNotFoundException {
    final List<Model> records = new ArrayList<>();
    CSVImporter importer = new CSVImporter("data/csv-multi-config.xml");
    Map<String, Object> context = new HashMap<>();
    context.put("CUSTOMER_PHONE", "+3326253225");
    importer.setContext(context);
    importer.addListener(new Listener() {

        @Override
        public void imported(Model bean) {
            log.info("Bean saved : {}(id={})", bean.getClass().getSimpleName(), bean.getId());
            records.add(bean);
        }

        @Override
        public void imported(Integer total, Integer success) {
            log.info("Record (total): " + total);
            log.info("Record (success): " + success);
        }

        @Override
        public void handle(Model bean, Exception e) {
        }
    });
    importer.run(new ImportTask() {

        @Override
        public void configure() throws IOException {
            input("[sale.order]", new File("data/csv-multi/so1.csv"));
            input("[sale.order]", new File("data/csv-multi/so2.csv"));
        }

        @Override
        public boolean handle(ImportException exception) {
            log.error("Import error : " + exception);
            return false;
        }

        @Override
        public boolean handle(IOException e) {
            log.error("IOException error : " + e);
            return true;
        }
    });
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IOException(java.io.IOException) CSVImporter(com.axelor.data.csv.CSVImporter) IOException(java.io.IOException) Model(com.axelor.db.Model) File(java.io.File) Test(org.junit.jupiter.api.Test)

Example 43 with Model

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

the class GlobalAuditTracker method onComplete.

/**
 * This method should be called from {@link
 * AuditInterceptor#beforeTransactionCompletion(Transaction)} method to finish change recording.
 *
 * @param tx the transaction in which the change tracking is being done
 * @param user the session user
 */
public void onComplete(Transaction tx, User user) {
    List<GlobalTrackingLog> logList = LOGS.get();
    LOGS.remove();
    if (CollectionUtils.isEmpty(logList)) {
        return;
    }
    MetaModelRepository modelRepo = Beans.get(MetaModelRepository.class);
    MetaFieldRepository fieldRepo = Beans.get(MetaFieldRepository.class);
    GlobalTrackingLogRepository logRepo = Beans.get(GlobalTrackingLogRepository.class);
    GlobalTrackingConfigurationLineRepository configLineRepo = Beans.get(GlobalTrackingConfigurationLineRepository.class);
    GlobalTrackingConfigurationLine configLine;
    List<GlobalTrackingConfigurationLine> configLineList;
    ScriptBindings bindings;
    for (GlobalTrackingLog log : logList) {
        configLineList = configLineRepo.all().filter("self.metaModel.name = ?", log.getMetaModelName()).fetch();
        if (configLineList.isEmpty()) {
            continue;
        }
        log.setMetaModel(modelRepo.findByName(log.getMetaModelName()));
        List<GlobalTrackingLogLine> logLinesToSave = new ArrayList<>();
        if ((CollectionUtils.isNotEmpty(log.getGlobalTrackingLogLineList()))) {
            try {
                bindings = new ScriptBindings(this.getContext(JPA.find((Class<Model>) Class.forName(log.getMetaModel().getFullName()), log.getRelatedId())));
            } catch (Exception e) {
                continue;
            }
            for (GlobalTrackingLogLine line : log.getGlobalTrackingLogLineList()) {
                configLine = configLineList.stream().filter(l -> l.getMetaField().getName().equals(line.getMetaFieldName())).findFirst().orElse(null);
                if (configLine == null || !this.canTrack(configLine, log.getTypeSelect()) || (!Strings.isNullOrEmpty(configLine.getTrackingCondition()) && !Boolean.TRUE.equals(new GroovyScriptHelper(bindings).eval(configLine.getTrackingCondition())))) {
                    continue;
                }
                line.setMetaField(fieldRepo.all().filter("self.metaModel.id = ? AND self.name = ?", log.getMetaModel().getId(), line.getMetaFieldName()).fetchOne());
                logLinesToSave.add(line);
            }
        }
        if (!logLinesToSave.isEmpty() || (GlobalTrackingLogRepository.TYPE_DELETE == log.getTypeSelect() && configLineList.stream().anyMatch(l -> Boolean.TRUE.equals(l.getTrackDeletion())))) {
            log.getGlobalTrackingLogLineList().stream().forEach(l -> l.setGlobalTrackingLog(null));
            logLinesToSave.stream().forEach(l -> l.setGlobalTrackingLog(log));
            log.setUser(user);
            logRepo.save(log);
        }
    }
}
Also used : GlobalTrackingConfigurationLine(com.axelor.apps.base.db.GlobalTrackingConfigurationLine) MetaModelRepository(com.axelor.meta.db.repo.MetaModelRepository) Arrays(java.util.Arrays) LocalDateTime(java.time.LocalDateTime) GroovyScriptHelper(com.axelor.script.GroovyScriptHelper) HashMap(java.util.HashMap) ScriptBindings(com.axelor.script.ScriptBindings) PersistentSet(org.hibernate.collection.internal.PersistentSet) ArrayList(java.util.ArrayList) Transaction(org.hibernate.Transaction) Strings(com.google.common.base.Strings) Introspector(java.beans.Introspector) GlobalTrackingLog(com.axelor.apps.base.db.GlobalTrackingLog) CollectionUtils(org.apache.commons.collections.CollectionUtils) AuditInterceptor(com.axelor.auth.AuditInterceptor) BeanInfo(java.beans.BeanInfo) Map(java.util.Map) GlobalTrackingLogRepository(com.axelor.apps.base.db.repo.GlobalTrackingLogRepository) Method(java.lang.reflect.Method) JPA(com.axelor.db.JPA) PersistentBag(org.hibernate.collection.internal.PersistentBag) Model(com.axelor.db.Model) Collection(java.util.Collection) GlobalTrackingLogLine(com.axelor.apps.base.db.GlobalTrackingLogLine) Collectors(java.util.stream.Collectors) IntrospectionException(java.beans.IntrospectionException) InvocationTargetException(java.lang.reflect.InvocationTargetException) GlobalTrackingConfigurationLineRepository(com.axelor.apps.base.db.repo.GlobalTrackingConfigurationLineRepository) List(java.util.List) Beans(com.axelor.inject.Beans) MetaFieldRepository(com.axelor.meta.db.repo.MetaFieldRepository) PropertyDescriptor(java.beans.PropertyDescriptor) AbstractPersistentCollection(org.hibernate.collection.internal.AbstractPersistentCollection) AuditableModel(com.axelor.auth.db.AuditableModel) AuthUtils(com.axelor.auth.AuthUtils) User(com.axelor.auth.db.User) MetaModelRepository(com.axelor.meta.db.repo.MetaModelRepository) GlobalTrackingLog(com.axelor.apps.base.db.GlobalTrackingLog) GlobalTrackingConfigurationLineRepository(com.axelor.apps.base.db.repo.GlobalTrackingConfigurationLineRepository) ArrayList(java.util.ArrayList) GlobalTrackingLogLine(com.axelor.apps.base.db.GlobalTrackingLogLine) MetaFieldRepository(com.axelor.meta.db.repo.MetaFieldRepository) GroovyScriptHelper(com.axelor.script.GroovyScriptHelper) IntrospectionException(java.beans.IntrospectionException) InvocationTargetException(java.lang.reflect.InvocationTargetException) GlobalTrackingLogRepository(com.axelor.apps.base.db.repo.GlobalTrackingLogRepository) GlobalTrackingConfigurationLine(com.axelor.apps.base.db.GlobalTrackingConfigurationLine) ScriptBindings(com.axelor.script.ScriptBindings)

Example 44 with Model

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

the class AdvancedExportController method callAdvancedExportWizard.

@SuppressWarnings("unchecked")
public void callAdvancedExportWizard(ActionRequest request, ActionResponse response) throws ClassNotFoundException {
    LOG.debug("Call advanced export wizard for model : {} ", request.getModel());
    MetaModel metaModel = Beans.get(MetaModelRepository.class).all().filter("self.fullName = ?", request.getModel()).fetchOne();
    String criteria = "";
    if (request.getContext().get("_ids") != null)
        criteria = request.getContext().get("_ids").toString();
    else {
        Class<? extends Model> klass = (Class<? extends Model>) request.getBeanClass();
        Filter filter = Beans.get(AdvancedExportService.class).getJpaSecurityFilter(metaModel);
        int recordCount = (int) request.getCriteria().createQuery(klass, filter).count();
        if (recordCount > 0)
            criteria = String.valueOf(recordCount);
    }
    if (Strings.isNullOrEmpty(criteria))
        response.setError(I18n.get(IExceptionMessage.ADVANCED_EXPORT_2));
    else {
        String metaModelName = request.getModel();
        boolean isExist = Beans.get(AdvancedExportService.class).checkAdvancedExportExist(metaModelName);
        if (!isExist) {
            response.setView(ActionView.define(I18n.get("Advanced export")).model(AdvancedExport.class.getName()).add("form", "advanced-export-form").context("_metaModel", metaModel).map());
            return;
        }
        response.setView(ActionView.define(I18n.get("Advanced export")).model(AdvancedExport.class.getName()).add("form", "advanced-export-wizard-form").param("popup", "true").param("show-toolbar", "false").param("show-confirm", "false").param("popup-save", "false").context("_metaModel", metaModel).context("_criteria", criteria.startsWith("[") ? criteria : request).map());
    }
}
Also used : MetaModel(com.axelor.meta.db.MetaModel) MetaModelRepository(com.axelor.meta.db.repo.MetaModelRepository) AdvancedExport(com.axelor.apps.base.db.AdvancedExport) Filter(com.axelor.rpc.filter.Filter) Model(com.axelor.db.Model) MetaModel(com.axelor.meta.db.MetaModel) AdvancedExportService(com.axelor.apps.base.service.advancedExport.AdvancedExportService)

Example 45 with Model

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

the class DuplicateObjectsController method extractModel.

private Class<? extends Model> extractModel(ActionRequest request, Set<String> fields) {
    Context context = request.getContext();
    String model = (String) context.get("_contextModel");
    if (model == null) {
        model = request.getModel();
        String duplicateFinderFields = (String) context.get("_duplicateFinderFields");
        if (duplicateFinderFields != null) {
            fields.addAll(Arrays.asList(duplicateFinderFields.split(";")));
        }
    } else {
        if (context.get("fieldsSet") != null) {
            List<HashMap<String, Object>> fieldsSet = (List<HashMap<String, Object>>) context.get("fieldsSet");
            for (HashMap<String, Object> field : fieldsSet) {
                fields.add((String) field.get("name"));
            }
        }
    }
    return (Class<? extends Model>) JPA.model(model);
}
Also used : Context(com.axelor.rpc.Context) HashMap(java.util.HashMap) Model(com.axelor.db.Model) ArrayList(java.util.ArrayList) List(java.util.List)

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