const smtp = require('vn-print/core/smtp'); const config = require('vn-print/core/config'); module.exports = Self => { Self.remoteMethodCtx('sendToSupport', { description: 'Send mail to support', accessType: 'WRITE', accepts: [ { arg: 'reason', type: 'string', description: 'The reason' }, { arg: 'additionalData', type: 'object', required: true, description: 'The additional data' } ], returns: { type: 'object', root: true }, http: { path: `/send-to-support`, verb: 'POST' } }); Self.sendToSupport = async(ctx, reason, additionalData) => { const userId = ctx.req.accessToken.userId; const emailUser = await Self.app.models.EmailUser.findById(userId, {fields: ['email']}); const tableStyle = 'width:100%; border-collapse: collapse; text-align: left;'; const thStyle = 'padding: 8px; border: 1px solid #ddd; background-color: #f4f4f4;'; const tdStyle = 'padding: 8px; border: 1px solid #ddd;'; const tdBoldStyle = 'padding: 8px; border: 1px solid #ddd; font-weight: bold;'; const subTdStyle = 'padding: 6px; border: 1px solid #ddd;'; const subTdBoldStyle = 'padding: 6px; border: 1px solid #ddd; font-weight: bold;'; let html = `

Motivo: ${reason}

Usuario: ${userId} ${emailUser.email}

Additional Data:

`; for (const [key, val] of Object.entries(additionalData)) { if (key !== 'config') { html += ``; } else { html += ``; } } html += `
ClaveValor
${key} ${parse(val)}
${key} `; for (const [confKey, confVal] of Object.entries(val)) { html += ``; } html += `
${confKey} ${parse(confVal)}
`; const {message, path, name} = additionalData; const err = name && message ? `${name}: ${message}` : name || message || ''; await smtp.send({ to: `${config.app.reportEmail}, ${emailUser.email}`, subject: `[Support-Salix] ${path.split('?')[0]} ${err}`, html }); }; function parse(value) { try { try { value = JSON.parse(value); } catch {} return JSON.stringify(value, null, ' ').split('\n').join('
'); } catch { return value; } } };