base structure for list printing with custom template
This commit is contained in:
parent
e2a916f37d
commit
a085de6e2f
19 changed files with 279 additions and 98 deletions
|
@ -1,7 +1,6 @@
|
|||
import { newsletterDemoData } from "../demodata/newsletter.data";
|
||||
import { protocolDemoData } from "../demodata/protocol.data";
|
||||
import { PermissionModule } from "../type/permissionTypes";
|
||||
import { memberlistDemoData } from "../demodata/member.list.data";
|
||||
import { memberDemoData } from "../demodata/member.data";
|
||||
|
||||
export abstract class DemoDataHelper {
|
||||
|
@ -11,8 +10,6 @@ export abstract class DemoDataHelper {
|
|||
return protocolDemoData;
|
||||
case "newsletter":
|
||||
return newsletterDemoData;
|
||||
case "member.list":
|
||||
return memberlistDemoData;
|
||||
case "member":
|
||||
return memberDemoData;
|
||||
default:
|
||||
|
|
|
@ -12,6 +12,7 @@ export abstract class PdfExport {
|
|||
data = {},
|
||||
saveToDisk = true,
|
||||
folder = "",
|
||||
customTemplate = undefined,
|
||||
}: {
|
||||
template: `${PermissionModule}` | `${PermissionModule}.${string}`;
|
||||
title?: string;
|
||||
|
@ -19,16 +20,34 @@ export abstract class PdfExport {
|
|||
data?: any;
|
||||
saveToDisk?: boolean;
|
||||
folder?: string;
|
||||
customTemplate?: {
|
||||
headerId?: number;
|
||||
footerId?: number;
|
||||
bodyId?: string | number;
|
||||
headerHeight: number;
|
||||
footerHeight: number;
|
||||
};
|
||||
}) {
|
||||
if (folder != "") FileSystemHelper.createFolder(folder);
|
||||
|
||||
const { header, footer, body, headerMargin, footerMargin } = await TemplateHelper.renderFileForModule({
|
||||
module: template,
|
||||
headerData: data,
|
||||
bodyData: data,
|
||||
footerData: data,
|
||||
title: title,
|
||||
});
|
||||
let header: string, footer: string, body: string, headerMargin: number, footerMargin: number;
|
||||
if (!customTemplate) {
|
||||
({ header, footer, body, headerMargin, footerMargin } = await TemplateHelper.renderFileForModule({
|
||||
module: template,
|
||||
headerData: data,
|
||||
bodyData: data,
|
||||
footerData: data,
|
||||
title: title,
|
||||
}));
|
||||
} else {
|
||||
({ header, footer, body, headerMargin, footerMargin } = await TemplateHelper.renderFileForCustom({
|
||||
customTemplate,
|
||||
headerData: data,
|
||||
bodyData: data,
|
||||
footerData: data,
|
||||
title: title,
|
||||
}));
|
||||
}
|
||||
|
||||
const browser = await puppeteer.launch({
|
||||
headless: true,
|
||||
|
|
|
@ -4,36 +4,15 @@ import TemplateUsageService from "../service/configuration/templateUsageService"
|
|||
import Handlebars, { template } from "handlebars";
|
||||
import { FileSystemHelper } from "./fileSystemHelper";
|
||||
|
||||
Handlebars.registerHelper("date", function (aString) {
|
||||
return new Date(aString).toLocaleDateString("de-DE", {
|
||||
day: "2-digit",
|
||||
month: "2-digit",
|
||||
year: "numeric",
|
||||
});
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("longdate", function (aString) {
|
||||
return new Date(aString).toLocaleDateString("de-DE", {
|
||||
weekday: "long",
|
||||
day: "2-digit",
|
||||
month: "2-digit",
|
||||
year: "numeric",
|
||||
});
|
||||
});
|
||||
|
||||
Handlebars.registerHelper("datetime", function (aString) {
|
||||
return new Date(aString).toLocaleDateString("de-DE", {
|
||||
day: "2-digit",
|
||||
month: "2-digit",
|
||||
year: "numeric",
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
});
|
||||
});
|
||||
|
||||
export abstract class TemplateHelper {
|
||||
static getTemplateFromFile(template: string) {
|
||||
return FileSystemHelper.readTemplateFile(`/src/templates/${template}.template.html`);
|
||||
let tmpFile;
|
||||
try {
|
||||
tmpFile = FileSystemHelper.readTemplateFile(`/src/templates/${template}.template.html`);
|
||||
} catch (err) {
|
||||
tmpFile = FileSystemHelper.readTemplateFile(`/src/templates/${template.split(".")[1]}.template.html`);
|
||||
}
|
||||
return tmpFile;
|
||||
}
|
||||
|
||||
static async getTemplateFromStore(templateId: number): Promise<string> {
|
||||
|
@ -83,14 +62,14 @@ export abstract class TemplateHelper {
|
|||
} else {
|
||||
footer = this.getTemplateFromFile(module + ".footer");
|
||||
}
|
||||
footer = this.applyDataToTemplate(footer, footerData);
|
||||
footer = this.applyDataToTemplate(footer, { title, ...footerData });
|
||||
|
||||
if (moduleTemplate.bodyId) {
|
||||
body = await this.getTemplateFromStore(moduleTemplate.bodyId);
|
||||
} else {
|
||||
body = this.getTemplateFromFile(module + ".body");
|
||||
}
|
||||
body = this.applyDataToTemplate(body, bodyData);
|
||||
body = this.applyDataToTemplate(body, { title, ...bodyData });
|
||||
|
||||
return {
|
||||
header,
|
||||
|
@ -100,4 +79,55 @@ export abstract class TemplateHelper {
|
|||
footerMargin: moduleTemplate.footerHeight,
|
||||
};
|
||||
}
|
||||
|
||||
static async renderFileForCustom({
|
||||
title = "pdf-export FF Admin",
|
||||
headerData = {},
|
||||
bodyData = {},
|
||||
footerData = {},
|
||||
customTemplate,
|
||||
}: {
|
||||
title?: string;
|
||||
headerData?: any;
|
||||
bodyData?: any;
|
||||
footerData?: any;
|
||||
customTemplate: {
|
||||
headerId?: number;
|
||||
footerId?: number;
|
||||
bodyId?: string | number;
|
||||
headerHeight: number;
|
||||
footerHeight: number;
|
||||
};
|
||||
}): Promise<{ header: string; body: string; footer: string; headerMargin?: number; footerMargin?: number }> {
|
||||
let header = `<h1 style="font-size:10px; text-align:center; width:100%;">${title}</h1>`;
|
||||
let footer = "";
|
||||
let body = "";
|
||||
|
||||
if (customTemplate.headerId) {
|
||||
header = await this.getTemplateFromStore(customTemplate.headerId);
|
||||
header = this.applyDataToTemplate(header, { title, ...headerData });
|
||||
}
|
||||
|
||||
if (customTemplate.footerId) {
|
||||
footer = await this.getTemplateFromStore(customTemplate.footerId);
|
||||
} else {
|
||||
footer = this.getTemplateFromFile(module + ".footer");
|
||||
}
|
||||
footer = this.applyDataToTemplate(footer, { title, ...footerData });
|
||||
|
||||
if (customTemplate.bodyId && typeof customTemplate.bodyId == "number") {
|
||||
body = await this.getTemplateFromStore(customTemplate.bodyId);
|
||||
} else {
|
||||
body = this.getTemplateFromFile(module + ".body");
|
||||
}
|
||||
body = this.applyDataToTemplate(body, { title, ...bodyData });
|
||||
|
||||
return {
|
||||
header,
|
||||
footer,
|
||||
body,
|
||||
headerMargin: customTemplate.headerHeight,
|
||||
footerMargin: customTemplate.footerHeight,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue