const fs = require('fs');
const path = require('path');
const { createReport } = require('docx-templates');
// Rechnungsvorlage erstellen
const invoiceTemplate = `
RECHNUNG
Rechnungssteller:
Kunde:
++firma++
++straße++
++plz++ ++stadt++
Tel: ++telefon++
Email: ++email++
++kunde_name++
++kunde_straße++
++kunde_plz++ ++kunde_stadt++
Rechnungsnummer:
++rechnungsnummer++
Rechnungsdatum:
++datum++
Fälligkeitsdatum:
++fälligkeitsdatum++
Rechnungsposten:
Pos.
Artikel/Leistung
Menge
Einzelpreis
Gesamtpreis
++positionen[0].nr++
++positionen[0].artikel++
++positionen[0].menge++
++positionen[0].einzelpreis++
++positionen[0].gesamtpreis++
Nettobetrag:
++nettobetrag++
MwSt. (19%):
++mwst++
Gesamtbetrag:
++gesamtbetrag++
Vielen Dank für Ihr Vertrauen!
Bei Fragen erreichen Sie uns unter: ++email++
`;
// Minimales DOCX erstellen
const minimalDocx = Buffer.from([
'UEsDBAoAAAAAAHJZMlUAAAAAAAAAAAAAAQAAAFsQ=',
'b250ZW50X1R5cGVzXS54bWyLycgsyk1VKMsvyk1VKE5OzStJTVEozk8p0S8pzUlNTi0qSsxLTi2y0lEDAEVKB',
'A9QSwECCgAAAAAAclkyVQAAAAAAAAAAAAABAAoAABgAAAAAAAAAAAA==',
'[Content_Types].xml',
'UEsFBgAAAAEAAQAwAAAAOgAAAAA='
].join(''), 'base64');
// Einfaches Template erstellen mit createReport
async function createInvoiceTemplate() {
try {
const templatePath = path.join(__dirname, 'templates', 'rechnung-template.docx');
// Einfaches Template als Basis verwenden und dann überschreiben
const baseTemplate = fs.readFileSync(path.join(__dirname, 'templates', 'simple-template.docx'));
// Rechnung-Template mit erweiterten Tags erstellen
const invoiceContent = await createReport({
template: baseTemplate,
data: {
// Dummy-Daten um Template-Struktur zu erstellen
firma: '++firma++',
straße: '++straße++',
plz: '++plz++',
stadt: '++stadt++',
telefon: '++telefon++',
email: '++email++',
kunde_name: '++kunde_name++',
kunde_straße: '++kunde_straße++',
kunde_plz: '++kunde_plz++',
kunde_stadt: '++kunde_stadt++',
rechnungsnummer: '++rechnungsnummer++',
datum: '++datum++',
fälligkeitsdatum: '++fälligkeitsdatum++',
positionen: [
{
nr: '++positionen[0].nr++',
artikel: '++positionen[0].artikel++',
menge: '++positionen[0].menge++',
einzelpreis: '++positionen[0].einzelpreis++',
gesamtpreis: '++positionen[0].gesamtpreis++'
}
],
nettobetrag: '++nettobetrag++',
mwst: '++mwst++',
gesamtbetrag: '++gesamtbetrag++'
}
});
fs.writeFileSync(templatePath, invoiceContent);
console.log('✅ Rechnungs-Template erstellt:', templatePath);
} catch (error) {
console.error('❌ Fehler beim Erstellen des Rechnungs-Templates:', error);
}
}
// Da wir das base template brauchen, erstellen wir das Template manuell
const fs2 = require('fs');
const AdmZip = require('adm-zip');
function createInvoiceTemplateManual() {
try {
// Neues ZIP für DOCX erstellen
const zip = new AdmZip();
// [Content_Types].xml
const contentTypes = `
`;
// _rels/.rels
const rels = `
`;
// word/document.xml - Rechnung Template
const document = `
RECHNUNG
Firma: ++firma++
Kunde: ++kunde_name++
++straße++
++kunde_straße++
++plz++ ++stadt++
++kunde_plz++ ++kunde_stadt++
Tel: ++telefon++
Email: ++email++
Rechnungsnummer: ++rechnungsnummer++
Datum: ++datum++
Fällig: ++fälligkeitsdatum++
Rechnungsposten:
Pos.
Artikel
Menge
Preis
Gesamt
++positionen[0].nr++
++positionen[0].artikel++
++positionen[0].menge++
++positionen[0].einzelpreis++
++positionen[0].gesamtpreis++
Nettobetrag: ++nettobetrag++
MwSt. (19%): ++mwst++
Gesamtbetrag: ++gesamtbetrag++
Vielen Dank für Ihr Vertrauen!
`;
// Dateien zum ZIP hinzufügen
zip.addFile('[Content_Types].xml', Buffer.from(contentTypes, 'utf8'));
zip.addFile('_rels/.rels', Buffer.from(rels, 'utf8'));
zip.addFile('word/document.xml', Buffer.from(document, 'utf8'));
// DOCX speichern
const templatePath = path.join(__dirname, 'templates', 'rechnung-template.docx');
fs2.writeFileSync(templatePath, zip.toBuffer());
console.log('✅ Rechnungs-Template erstellt:', templatePath);
} catch (error) {
console.error('❌ Fehler beim Erstellen des Rechnungs-Templates:', error);
}
}
createInvoiceTemplateManual();