diff --git a/extensions/directus-extension-skrift-orders/dist/index.js b/extensions/directus-extension-skrift-orders/dist/index.js index 3ca6d56..b983e58 100644 --- a/extensions/directus-extension-skrift-orders/dist/index.js +++ b/extensions/directus-extension-skrift-orders/dist/index.js @@ -211,9 +211,11 @@ const handler = (router, { services, getSchema, logger }) => { if (!meta?.filename_disk) throw new Error(`Motiv-Datei ${fileId} nicht gefunden.`); const base64 = fs.readFileSync(path.join(UPLOAD_ROOT, meta.filename_disk)).toString('base64'); const mime = meta.type || 'image/png'; - // A6 quer randabfallend: Motiv füllt die volle Beschnittfläche (cover), mittig. + // A6 quer: Motiv wird VOLLSTÄNDIG in die Trim-Fläche (148×105) eingepasst + // (mittig, nichts beschnitten) auf weißem A6-Grund inkl. 2 mm Beschnitt. const svg = `` - + `` + + `` + + `` + ``; const files = new FilesService({ schema, accountability: null }); const storage = (process.env.STORAGE_LOCATIONS || 'local').split(',')[0].trim() || 'local'; diff --git a/extensions/directus-extension-skrift-sevdesk/dist/index.js b/extensions/directus-extension-skrift-sevdesk/dist/index.js index 8757c97..a159115 100644 --- a/extensions/directus-extension-skrift-sevdesk/dist/index.js +++ b/extensions/directus-extension-skrift-sevdesk/dist/index.js @@ -138,8 +138,11 @@ export default (register, { services, getSchema, logger }) => { 'customer.company', 'customer.phone', 'customer.sevdesk_contact_id'], }); if (!order) return; - if (order.sevdesk_invoice_id) return; // schon erstellt - if (!SOURCES.includes(String(order.source || ''))) return; // nur Konfigurator + if (order.sevdesk_invoice_id) { logger.info(`[skrift-sevdesk] ${order.order_number}: bereits erstellt (#${order.sevdesk_invoice_id}).`); return; } + if (!SOURCES.includes(String(order.source || ''))) { + logger.info(`[skrift-sevdesk] ${order.order_number}: source="${order.source}" nicht in [${SOURCES.join(',')}] → übersprungen.`); + return; + } const lines = Array.isArray(order.price_lines) ? order.price_lines : []; if (!lines.length || !(Number(order.net_total) > 0)) { logger.info(`[skrift-sevdesk] ${order.order_number}: keine Positionen/Betrag → keine Rechnung.`); @@ -202,9 +205,14 @@ export default (register, { services, getSchema, logger }) => { } } + // Beim Laden einmal protokollieren, damit sichtbar ist, ob die Extension aktiv + // ist und ob der Token gesetzt wurde. + logger.info(`[skrift-sevdesk] geladen – Token ${TOKEN ? 'gesetzt' : 'FEHLT'}, sources=[${SOURCES.join(',')}], base=${BASE}`); + register.action('orders.items.create', async ({ key, keys }) => { - if (!TOKEN) return; // ohne Token nichts tun const ids = keys || (key != null ? [key] : []); + if (!TOKEN) { logger.info(`[skrift-sevdesk] Auftrag ${ids.join(',')} – kein SEVDESK_API_TOKEN gesetzt, übersprungen.`); return; } + logger.info(`[skrift-sevdesk] orders.create → prüfe Auftrag/Aufträge ${ids.join(',')}`); for (const id of ids) { try { await rechnungFuerAuftrag(id); } catch (e) { logger.error(`[skrift-sevdesk] Rechnung für Auftrag ${id} fehlgeschlagen: ${e.message}`); }