use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class PrintServiceImpl method generatePDF.
@Override
@Transactional
public Map<String, Object> generatePDF(Print print) throws AxelorException {
try {
print = printRepo.find(print.getId());
String html = generateHtml(print);
ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
try (PdfDocument pdfDoc = new PdfDocument(new PdfWriter(pdfOutputStream))) {
pdfDoc.setDefaultPageSize(print.getDisplayTypeSelect() == PrintRepository.DISPLAY_TYPE_LANDSCAPE ? PageSize.A4.rotate() : PageSize.A4);
if (print.getPrintPdfFooter() != null && !print.getHidePrintSettings()) {
com.itextpdf.layout.Document doc = new com.itextpdf.layout.Document(pdfDoc);
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new TableFooterEventHandler(doc, print));
}
ConverterProperties converterProperties = new ConverterProperties();
converterProperties.setBaseUri(attachmentPath);
HtmlConverter.convertToPdf(html, pdfDoc, converterProperties);
}
String documentName = (StringUtils.notEmpty(print.getDocumentName()) ? print.getDocumentName() : "") + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + FILE_EXTENSION_PDF;
InputStream pdfInputStream = new ByteArrayInputStream(pdfOutputStream.toByteArray());
MetaFile metaFile = metaFiles.upload(pdfInputStream, documentName);
File file = MetaFiles.getPath(metaFile).toFile();
String fileLink = PdfTool.getFileLinkFromPdfFile(PdfTool.printCopiesToFile(file, 1), metaFile.getFileName());
if (ObjectUtils.notEmpty(file) && file.exists() && (print.getAttach() || StringUtils.notEmpty(print.getMetaFileField()))) {
Class<? extends Model> modelClass = (Class<? extends Model>) Class.forName(print.getMetaModel().getFullName());
Model objectModel = JPA.find(modelClass, print.getObjectId());
if (ObjectUtils.notEmpty(objectModel)) {
if (print.getAttach()) {
metaFiles.attach(metaFile, documentName, objectModel);
}
if (StringUtils.notEmpty(print.getMetaFileField())) {
saveMetaFileInModel(modelClass, objectModel, metaFile, print.getMetaFileField());
}
}
}
if (CollectionUtils.isNotEmpty(print.getPrintSet())) {
for (Print subPrint : print.getPrintSet()) {
generatePDF(subPrint);
}
}
return ActionView.define(documentName).add("html", fileLink).map();
} catch (IOException | ClassNotFoundException e) {
throw new AxelorException(e, TraceBackRepository.CATEGORY_INCONSISTENCY);
}
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class PrintTemplateLineServiceImpl method initMaker.
@SuppressWarnings("unchecked")
protected TemplateMaker initMaker(Long objectId, String model, String simpleModel, Locale locale) throws ClassNotFoundException {
String timezone = null;
Company activeCompany = Optional.ofNullable(AuthUtils.getUser()).map(User::getActiveCompany).orElse(null);
if (activeCompany != null) {
timezone = activeCompany.getTimezone();
}
TemplateMaker maker = new TemplateMaker(timezone, locale, TEMPLATE_DELIMITER, TEMPLATE_DELIMITER);
Class<? extends Model> modelClass = (Class<? extends Model>) Class.forName(model);
maker.setContext(JPA.find(modelClass, objectId), simpleModel);
return maker;
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class PrintTemplateServiceImpl method generatePrint.
@SuppressWarnings("unchecked")
@Override
@Transactional(rollbackOn = { AxelorException.class, Exception.class })
public Print generatePrint(Long objectId, PrintTemplate printTemplate) throws AxelorException, IOException, ClassNotFoundException {
MetaModel metaModel = printTemplate.getMetaModel();
if (metaModel == null) {
return null;
}
String model = metaModel.getFullName();
String simpleModel = metaModel.getName();
// debug
LOG.debug("");
LOG.debug("model : {}", model);
LOG.debug("simpleModel : {}", simpleModel);
LOG.debug("object id : {}", objectId);
LOG.debug("printTemplate : {}", printTemplate);
LOG.debug("");
Locale locale = Optional.ofNullable(printTemplate.getLanguage()).map(Language::getCode).map(Locale::new).orElseGet(AppFilter::getLocale);
TemplateMaker maker = initMaker(objectId, model, simpleModel, locale);
Print print = new Print();
if (StringUtils.notEmpty(printTemplate.getDocumentName())) {
maker.setTemplate(printTemplate.getDocumentName());
print.setDocumentName(maker.make());
}
print.setMetaModel(metaModel);
print.setObjectId(objectId);
print.setCompany(printTemplate.getCompany());
print.setLanguage(printTemplate.getLanguage());
print.setHidePrintSettings(printTemplate.getHidePrintSettings());
print.setFormatSelect(printTemplate.getFormatSelect());
print.setDisplayTypeSelect(printTemplate.getDisplayTypeSelect());
print.setIsEditable(printTemplate.getIsEditable());
print.setAttach(printTemplate.getAttach());
print.setMetaFileField(printTemplate.getMetaFileField());
if (!printTemplate.getHidePrintSettings()) {
if (StringUtils.notEmpty(printTemplate.getPrintTemplatePdfHeader())) {
maker.setTemplate(printTemplate.getPrintTemplatePdfHeader());
print.setPrintPdfHeader(maker.make());
}
if (StringUtils.notEmpty(printTemplate.getPrintTemplatePdfFooter())) {
maker.setTemplate(printTemplate.getPrintTemplatePdfFooter());
print.setPrintPdfFooter(maker.make());
print.setFooterFontSize(printTemplate.getFooterFontSize());
print.setFooterFontType(printTemplate.getFooterFontType());
print.setFooterTextAlignment(printTemplate.getFooterTextAlignment());
print.setIsFooterUnderLine(printTemplate.getIsFooterUnderLine());
print.setFooterFontColor(printTemplate.getFooterFontColor());
}
print.setLogoPositionSelect(printTemplate.getLogoPositionSelect());
print.setLogoWidth(printTemplate.getLogoWidth());
print.setHeaderContentWidth(printTemplate.getHeaderContentWidth());
}
Context scriptContext = null;
if (StringUtils.notEmpty(model)) {
Class<? extends Model> modelClass = (Class<? extends Model>) Class.forName(model);
Model modelObject = JPA.find(modelClass, objectId);
if (ObjectUtils.notEmpty(modelObject)) {
scriptContext = new Context(Mapper.toMap(modelObject), modelClass);
}
}
rank = 0;
int level = 1;
if (CollectionUtils.isNotEmpty(printTemplate.getPrintTemplateLineList())) {
processPrintTemplateLineList(printTemplate.getPrintTemplateLineList(), print, null, scriptContext, maker, level);
}
if (CollectionUtils.isNotEmpty(printTemplate.getPrintTemplateSet())) {
for (PrintTemplate subPrintTemplate : printTemplate.getPrintTemplateSet()) {
Long subObjectId = objectId;
if (StringUtils.notEmpty(subPrintTemplate.getMetaModelDefaultPath())) {
Object subMetaModelObject = templateContextService.computeTemplateContext(subPrintTemplate.getMetaModelDefaultPath(), scriptContext);
Class<? extends Model> subModelClass = (Class<? extends Model>) Class.forName(subPrintTemplate.getMetaModel().getFullName());
subObjectId = (Long) Mapper.of(subModelClass).get(subMetaModelObject, "id");
}
Print subPrint = generatePrint(subObjectId, subPrintTemplate);
print.addPrintSetItem(subPrint);
}
}
print = printRepo.save(print);
printService.attachMetaFiles(print, getMetaFiles(maker, printTemplate));
return print;
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class PrintTemplateServiceImpl method initMaker.
@SuppressWarnings("unchecked")
protected TemplateMaker initMaker(Long objectId, String model, String simpleModel, Locale locale) throws ClassNotFoundException {
String timezone = null;
Company activeCompany = Optional.ofNullable(AuthUtils.getUser()).map(User::getActiveCompany).orElse(null);
if (activeCompany != null) {
timezone = activeCompany.getTimezone();
}
TemplateMaker maker = new TemplateMaker(timezone, locale, TEMPLATE_DELIMITER, TEMPLATE_DELIMITER);
Class<? extends Model> myClass = (Class<? extends Model>) Class.forName(model);
maker.setContext(JPA.find(myClass, objectId), simpleModel);
return maker;
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class AdvancedImportServiceImpl method removeRecords.
@SuppressWarnings("unchecked")
public void removeRecords(List<FileTab> fileTabList) throws ClassNotFoundException {
for (FileTab fileTab : fileTabList) {
String targetModelName = fileTab.getMetaModel().getFullName();
Map<String, Object> jsonContextMap = dataImportService.createJsonContext(fileTab);
JsonContext jsonContext = (JsonContext) jsonContextMap.get("jsonContext");
String fieldName = inflector.camelize(fileTab.getMetaModel().getName(), true) + "Set";
List<Object> recordList = (List<Object>) jsonContext.get(fieldName);
if (CollectionUtils.isEmpty(recordList)) {
continue;
}
Class<? extends Model> modelKlass = (Class<? extends Model>) Class.forName(targetModelName);
removeRecord(fileTab, modelKlass, recordList, fileTabList);
removeSubRecords(modelKlass, jsonContext);
}
}
Aggregations