feat: notify complete quotation or work done (#20)
* add message * do not throw error but skip notify * change conditions pull userId * do not throw error but skip --------- Co-authored-by: Methapon2001 <61303214+Methapon2001@users.noreply.github.com>
This commit is contained in:
parent
2b17a7ee34
commit
2db28b14dc
2 changed files with 144 additions and 0 deletions
|
|
@ -30,6 +30,8 @@ import {
|
||||||
import { queryOrNot } from "../utils/relation";
|
import { queryOrNot } from "../utils/relation";
|
||||||
import { notFoundError } from "../utils/error";
|
import { notFoundError } from "../utils/error";
|
||||||
import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio";
|
import { deleteFile, fileLocation, getFile, getPresigned, listFile, setFile } from "../utils/minio";
|
||||||
|
import HttpError from "../interfaces/http-error";
|
||||||
|
import HttpStatus from "../interfaces/http-status";
|
||||||
|
|
||||||
// User in company can edit.
|
// User in company can edit.
|
||||||
const permissionCheck = createPermCheck((_) => true);
|
const permissionCheck = createPermCheck((_) => true);
|
||||||
|
|
@ -534,6 +536,14 @@ export class RequestDataActionController extends Controller {
|
||||||
@Route("/api/v1/request-work")
|
@Route("/api/v1/request-work")
|
||||||
@Tags("Request List")
|
@Tags("Request List")
|
||||||
export class RequestListController extends Controller {
|
export class RequestListController extends Controller {
|
||||||
|
async #getLineToken() {
|
||||||
|
if (!process.env.LINE_MESSAGING_API_TOKEN) {
|
||||||
|
console.warn("Line Webhook Activated but LINE_MESSAGING_API_TOKEN not set.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return process.env.LINE_MESSAGING_API_TOKEN;
|
||||||
|
}
|
||||||
|
|
||||||
@Get()
|
@Get()
|
||||||
@Security("keycloak")
|
@Security("keycloak")
|
||||||
async getRequestWork(
|
async getRequestWork(
|
||||||
|
|
@ -944,6 +954,19 @@ export class RequestListController extends Controller {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data: { quotationStatus: QuotationStatus.ProcessComplete, urgent: false },
|
data: { quotationStatus: QuotationStatus.ProcessComplete, urgent: false },
|
||||||
|
include: {
|
||||||
|
customerBranch: {
|
||||||
|
include: {
|
||||||
|
customer: {
|
||||||
|
include: {
|
||||||
|
branch: {
|
||||||
|
where: { userId: { not: null } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
await tx.notification.createMany({
|
await tx.notification.createMany({
|
||||||
|
|
@ -953,6 +976,55 @@ export class RequestListController extends Controller {
|
||||||
receiverId: v.createdByUserId,
|
receiverId: v.createdByUserId,
|
||||||
})),
|
})),
|
||||||
});
|
});
|
||||||
|
const token = await this.#getLineToken();
|
||||||
|
if (!token) return;
|
||||||
|
|
||||||
|
const textHead = "JWS ALERT:";
|
||||||
|
|
||||||
|
const textAlert = "ขอแจ้งให้ทราบว่าใบเสนอราคา";
|
||||||
|
const textAlert2 = "ได้ดำเนินการเสร็จสิ้นทุกกระบวนการเรียบร้อยแล้ว";
|
||||||
|
const textAlert3 = "หากต้องการข้อมูลเพิ่มเติม กรุณาแจ้งให้ฝ่ายที่เกี่ยวข้องทราบ 🙏";
|
||||||
|
let finalTextWork = "";
|
||||||
|
let textData = "";
|
||||||
|
|
||||||
|
let dataCustomerId: string[] = [];
|
||||||
|
let textWorkList: string[] = [];
|
||||||
|
let dataUserId: string[] = [];
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
res.forEach((data, index) => {
|
||||||
|
data.customerBranch.customer.branch.forEach((item) => {
|
||||||
|
if (!dataCustomerId?.includes(item.id) && item.userId) {
|
||||||
|
dataCustomerId.push(item.id);
|
||||||
|
dataUserId.push(item.userId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
textWorkList.push(`${index + 1}. เลขที่ใบเสนอราคา ${data.code} ${data.workName}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
finalTextWork = textWorkList.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
textData = `${textHead}\n\n${textAlert}\n${finalTextWork}\n${textAlert2}\n\n${textAlert3}`;
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
to: dataUserId,
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
type: "text",
|
||||||
|
text: textData,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
await fetch("https://api.line.me/v2/bot/message/multicast", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(data),
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
|
|
|
||||||
|
|
@ -573,6 +573,14 @@ export class TaskController extends Controller {
|
||||||
@Route("/api/v1/task-order/{taskOrderId}")
|
@Route("/api/v1/task-order/{taskOrderId}")
|
||||||
@Tags("Task Order")
|
@Tags("Task Order")
|
||||||
export class TaskActionController extends Controller {
|
export class TaskActionController extends Controller {
|
||||||
|
async #getLineToken() {
|
||||||
|
if (!process.env.LINE_MESSAGING_API_TOKEN) {
|
||||||
|
console.warn("Line Webhook Activated but LINE_MESSAGING_API_TOKEN not set.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return process.env.LINE_MESSAGING_API_TOKEN;
|
||||||
|
}
|
||||||
|
|
||||||
@Post("set-task-status")
|
@Post("set-task-status")
|
||||||
@Security("keycloak")
|
@Security("keycloak")
|
||||||
async changeTaskOrderTaskListStatus(
|
async changeTaskOrderTaskListStatus(
|
||||||
|
|
@ -820,6 +828,19 @@ export class TaskActionController extends Controller {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
data: { quotationStatus: QuotationStatus.ProcessComplete, urgent: false },
|
data: { quotationStatus: QuotationStatus.ProcessComplete, urgent: false },
|
||||||
|
include: {
|
||||||
|
customerBranch: {
|
||||||
|
include: {
|
||||||
|
customer: {
|
||||||
|
include: {
|
||||||
|
branch: {
|
||||||
|
where: { userId: { not: null } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
await tx.notification.createMany({
|
await tx.notification.createMany({
|
||||||
|
|
@ -829,6 +850,57 @@ export class TaskActionController extends Controller {
|
||||||
receiverId: v.createdByUserId,
|
receiverId: v.createdByUserId,
|
||||||
})),
|
})),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const token = await this.#getLineToken();
|
||||||
|
|
||||||
|
if (!token) return;
|
||||||
|
|
||||||
|
const textHead = "JWS ALERT:";
|
||||||
|
|
||||||
|
const textAlert = "ขอแจ้งให้ทราบว่าใบเสนอราคา";
|
||||||
|
const textAlert2 = "ได้ดำเนินการเสร็จสิ้นทุกกระบวนการเรียบร้อยแล้ว";
|
||||||
|
const textAlert3 = "หากต้องการข้อมูลเพิ่มเติม กรุณาแจ้งให้ฝ่ายที่เกี่ยวข้องทราบ 🙏";
|
||||||
|
let finalTextWork = "";
|
||||||
|
let textData = "";
|
||||||
|
|
||||||
|
let dataCustomerId: string[] = [];
|
||||||
|
let textWorkList: string[] = [];
|
||||||
|
let dataUserId: string[] = [];
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
res.forEach((data, index) => {
|
||||||
|
data.customerBranch.customer.branch.forEach((item) => {
|
||||||
|
if (!dataCustomerId?.includes(item.id) && item.userId) {
|
||||||
|
dataCustomerId.push(item.id);
|
||||||
|
dataUserId.push(item.userId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
textWorkList.push(`${index + 1}. เลขที่ใบเสนอราคา ${data.code} ${data.workName}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
finalTextWork = textWorkList.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
textData = `${textHead}\n\n${textAlert}\n${finalTextWork}\n${textAlert2}\n\n${textAlert3}`;
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
to: dataUserId,
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
type: "text",
|
||||||
|
text: textData,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
await fetch("https://api.line.me/v2/bot/message/multicast", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${token}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(data),
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue