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);
}
}
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;
}
});
}
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);
}
}
}
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());
}
}
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);
}
Aggregations