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 { notFoundError } from "../utils/error";
|
||||
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.
|
||||
const permissionCheck = createPermCheck((_) => true);
|
||||
|
|
@ -534,6 +536,14 @@ export class RequestDataActionController extends Controller {
|
|||
@Route("/api/v1/request-work")
|
||||
@Tags("Request List")
|
||||
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()
|
||||
@Security("keycloak")
|
||||
async getRequestWork(
|
||||
|
|
@ -944,6 +954,19 @@ export class RequestListController extends Controller {
|
|||
},
|
||||
},
|
||||
data: { quotationStatus: QuotationStatus.ProcessComplete, urgent: false },
|
||||
include: {
|
||||
customerBranch: {
|
||||
include: {
|
||||
customer: {
|
||||
include: {
|
||||
branch: {
|
||||
where: { userId: { not: null } },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
.then(async (res) => {
|
||||
await tx.notification.createMany({
|
||||
|
|
@ -953,6 +976,55 @@ export class RequestListController extends Controller {
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -573,6 +573,14 @@ export class TaskController extends Controller {
|
|||
@Route("/api/v1/task-order/{taskOrderId}")
|
||||
@Tags("Task Order")
|
||||
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")
|
||||
@Security("keycloak")
|
||||
async changeTaskOrderTaskListStatus(
|
||||
|
|
@ -820,6 +828,19 @@ export class TaskActionController extends Controller {
|
|||
},
|
||||
},
|
||||
data: { quotationStatus: QuotationStatus.ProcessComplete, urgent: false },
|
||||
include: {
|
||||
customerBranch: {
|
||||
include: {
|
||||
customer: {
|
||||
include: {
|
||||
branch: {
|
||||
where: { userId: { not: null } },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
.then(async (res) => {
|
||||
await tx.notification.createMany({
|
||||
|
|
@ -829,6 +850,57 @@ export class TaskActionController extends Controller {
|
|||
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