Skip to content
Snippets Groups Projects
Commit 7279fec8 authored by Dominik Hebeler's avatar Dominik Hebeler
Browse files

actually checking refund expiration

parent caa7d8ba
No related branches found
No related tags found
No related merge requests found
......@@ -115,6 +115,14 @@ class Payment {
* @returns {boolean}
*/
isRefundAllowed() {
if (!config.get("app.zammad.refund_enabled")) {
return false;
}
// Check if Payment is older than 30 days
let minDate = dayjs().add(-30, "days");
if (this.created_at.isBefore(minDate)) {
return false;
}
return this.payment_processor.isRefundSupported();
}
......
......@@ -14,7 +14,7 @@ class Zammad {
static async CREATE_NOTIFICATION(token_amount, price, payment_method) {
// Check if notifications are turned on
try {
if (config.get("app.zammad.enabled")) {
if (config.get("app.zammad.notification_enabled")) {
let zammad_url = config.get("app.zammad.url") + "/api/v1/ticket_articles";
let zammad_data = {
......@@ -48,6 +48,55 @@ class Zammad {
return false;
}
}
/**
* Creates a notification in the configured Zammad instance
*
* @param {string} message
*
* @returns {Promise<boolean>}
*/
static async CREATE_REFUND_TICKET(message, payment_reference_id) {
// Check if notifications are turned on
try {
if (config.get("app.zammad.refund_enabled")) {
let zammad_url = config.get("app.zammad.url") + "/api/v1/tickets";
let subject = `Erstattung (${payment_reference_id})`;
let zammad_data = {
"title": subject,
"group": "Tokens",
"customer_id": "guess:noreply@metager.de",
"preferences": { "channel_id": 3 },
"article": {
"type": "note",
"sender": "Customer",
"subject": subject,
"body": message,
"content_type": "text/html",
"internal": false
}
}
return fetch(zammad_url, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Token ${config.get("app.zammad.api_key")}`
},
body: JSON.stringify(zammad_data)
}).then(response => {
return true;
}).catch(e => {
console.error(e);
return false;
})
} else {
return true;
}
} catch (e) {
console.error(e);
return false;
}
}
}
module.exports = Zammad;
\ No newline at end of file
......@@ -23,7 +23,8 @@
"api_key": "<OSTICKET_API_KEY>"
},
"zammad": {
"enabled": false,
"notification_enabled": false,
"refund_enabled": true,
"url": "<ZAMMAD_URL>",
"api_key": "<ZAMMAD_API_KEY>",
"notification_ticket_id": "0"
......
......@@ -3,6 +3,7 @@ var router = express.Router({ mergeParams: true });
const config = require("config");
const Key = require("../../app/Key");
const Zammad = require("../../app/Zammad");
// Base URL: /key/:key/orders/:order/refund
router.use("/", (req, res, next) => {
......@@ -44,36 +45,16 @@ router.post("/", (req, res, next) => {
let message = ejs.render(template, req.data);
// No validation errors. Try to create a new Ticket
return fetch(`${config.get("app.osticket.url")}/api/tickets.json`, {
method: "post",
headers: {
"X-API-Key": config.get("app.osticket.api_key"),
"Content-Type": "application/json",
},
body: JSON.stringify({
alert: true,
autorespond: false,
source: "API",
name: "Metzgermeister Unbekannt",
email: "no-reply@metager.de",
subject: `MetaGer Schlüssel: Erstattung (${req.data.order.payment.public_id})`,
message: `data:text/html;charset=utf-8,${message}`,
topicId: 12, // ToDo change topic for english autoresponder
}),
return Zammad.CREATE_REFUND_TICKET(message, req.data.order.payment.public_id).then(success => {
if (success) {
return Key.GET_KEY(req.data.key.key.get_key(), true);
} else {
return Promise.reject("Fehler beim Erstellen der Benachrichtigung,");
}
}).then((key) => {
key.discharge_key(req.data.order.refund.count, req.data.order.payment_reference.id);
return key.save();
})
.then(async (response) => {
if (response.status != 201) {
console.error(await response.text());
return Promise.reject("Fehler beim Erstellen der Benachrichtigung,");
} else {
return Key.GET_KEY(req.data.key.key.get_key(), true);
}
})
.then((key) => {
key.discharge_key(req.data.order.refund.count, req.data.order.payment_reference.id);
return key.save();
})
.then((new_key) => {
req.data.key.key = new_key;
req.data.order.refund.success = true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment