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