2022-01-06 01:26:15 +00:00
|
|
|
import { Request, Response } from "express";
|
|
|
|
import { getIO } from "../libs/socket";
|
|
|
|
|
|
|
|
import CreateTicketService from "../services/TicketServices/CreateTicketService";
|
|
|
|
import DeleteTicketService from "../services/TicketServices/DeleteTicketService";
|
2022-05-19 21:29:38 +00:00
|
|
|
import ListTicketsService from "../services/TicketServices/ListTicketsService";
|
2022-01-06 01:26:15 +00:00
|
|
|
import ShowTicketService from "../services/TicketServices/ShowTicketService";
|
|
|
|
import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
|
|
|
|
import SendWhatsAppMessage from "../services/WbotServices/SendWhatsAppMessage";
|
|
|
|
import ShowWhatsAppService from "../services/WhatsappService/ShowWhatsAppService";
|
2023-07-26 20:24:10 +00:00
|
|
|
import ShowStatusChatEndService from "../services/StatusChatEndService/ShowStatusChatEndService";
|
2022-01-06 01:26:15 +00:00
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
import CreateSchedulingNotifyService from "../services/SchedulingNotifyServices/CreateSchedulingNotifyService";
|
|
|
|
import ListSchedulingNotifyContactService from "../services/SchedulingNotifyServices/ListSchedulingNotifyContactService";
|
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
import { isScheduling } from "../helpers/CheckSchedulingReminderNotify";
|
2022-05-16 02:48:06 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
import ptBR from "date-fns/locale/pt-BR";
|
2022-05-16 02:48:06 +00:00
|
|
|
import { splitDateTime } from "../helpers/SplitDateTime";
|
2023-07-26 20:24:10 +00:00
|
|
|
import format from "date-fns/format";
|
2022-05-16 02:48:06 +00:00
|
|
|
|
2023-07-12 14:54:29 +00:00
|
|
|
import ListTicketsServiceCache from "../services/TicketServices/ListTicketServiceCache";
|
2022-05-19 21:29:38 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
import { searchTicketCache, loadTicketsCache } from "../helpers/TicketCache";
|
2023-07-12 14:54:29 +00:00
|
|
|
import { Op } from "sequelize";
|
2022-01-10 20:10:20 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
type IndexQuery = {
|
|
|
|
searchParam: string;
|
|
|
|
pageNumber: string;
|
|
|
|
status: string;
|
|
|
|
date: string;
|
|
|
|
showAll: string;
|
|
|
|
withUnreadMessages: string;
|
|
|
|
queueIds: string;
|
2022-04-18 18:21:28 +00:00
|
|
|
unlimited?: string;
|
2023-07-26 20:24:10 +00:00
|
|
|
searchParamContent?: string;
|
2022-01-06 01:26:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
interface TicketData {
|
|
|
|
contactId: number;
|
|
|
|
status: string;
|
|
|
|
queueId: number;
|
|
|
|
userId: number;
|
2023-07-26 20:24:10 +00:00
|
|
|
whatsappId?: string | number;
|
|
|
|
msg?: string;
|
|
|
|
transfer?: boolean | undefined;
|
|
|
|
fromMe?: boolean;
|
2022-05-19 21:29:38 +00:00
|
|
|
}
|
2022-01-10 20:10:20 +00:00
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
import ListStatusChatEndService from "../services/StatusChatEndService/ListStatusChatEndService";
|
2022-05-03 21:20:58 +00:00
|
|
|
import Ticket from "../models/Ticket";
|
2022-05-16 02:48:06 +00:00
|
|
|
import ShowUserServiceReport from "../services/UserServices/ShowUserServiceReport";
|
|
|
|
import TicketEmiterSumOpenClosedByUser from "../helpers/OnlineReporEmiterInfoByUser";
|
2022-08-08 16:47:28 +00:00
|
|
|
import CountTicketService from "../services/TicketServices/CountTicketService";
|
|
|
|
import CountTicketsByUserQueue from "../services/UserServices/CountTicketsByUserQueue";
|
|
|
|
import ShowUserService from "../services/UserServices/ShowUserService";
|
2023-07-12 14:54:29 +00:00
|
|
|
import axios from "axios";
|
|
|
|
import User from "../models/User";
|
|
|
|
import CheckContactOpenTickets from "../helpers/CheckContactOpenTickets";
|
|
|
|
import GetDefaultWhatsApp from "../helpers/GetDefaultWhatsApp";
|
|
|
|
import { getWbot } from "../libs/wbot";
|
|
|
|
import endPointQuery from "../helpers/old_EndPointQuery";
|
|
|
|
import Contact from "../models/Contact";
|
|
|
|
import BotIsOnQueue from "../helpers/BotIsOnQueue";
|
|
|
|
import { setMessageAsRead } from "../helpers/SetMessageAsRead";
|
2023-07-28 12:25:13 +00:00
|
|
|
import { getSettingValue } from "../helpers/WhaticketSettings";
|
2024-01-29 11:48:20 +00:00
|
|
|
import ListWhatsAppsForQueueService from "../services/WhatsappService/ListWhatsAppsForQueueService";
|
|
|
|
import ListWhatsAppsNumber from "../services/WhatsappService/ListWhatsAppsNumber";
|
|
|
|
import Whatsapp from "../models/Whatsapp";
|
|
|
|
import AppError from "../errors/AppError";
|
2024-02-21 20:47:23 +00:00
|
|
|
import CreateOrUpdateContactService from "../services/ContactServices/CreateOrUpdateContactService";
|
|
|
|
import FindOrCreateTicketService from "../services/TicketServices/FindOrCreateTicketService";
|
|
|
|
import CheckIsValidContact from "../services/WbotServices/CheckIsValidContact";
|
|
|
|
import GetProfilePicUrl from "../services/WbotServices/GetProfilePicUrl";
|
|
|
|
import CreateContactService from "../services/ContactServices/CreateContactService";
|
|
|
|
import { botSendMessage } from "../services/WbotServices/wbotMessageListener";
|
|
|
|
import WhatsappQueue from "../models/WhatsappQueue";
|
2022-08-08 16:47:28 +00:00
|
|
|
|
2022-09-05 16:36:42 +00:00
|
|
|
export const index = async (req: Request, res: Response): Promise<Response> => {
|
2022-01-06 01:26:15 +00:00
|
|
|
const {
|
|
|
|
pageNumber,
|
|
|
|
status,
|
|
|
|
date,
|
|
|
|
searchParam,
|
|
|
|
showAll,
|
|
|
|
queueIds: queueIdsStringified,
|
2022-04-18 18:21:28 +00:00
|
|
|
withUnreadMessages,
|
2023-07-12 14:54:29 +00:00
|
|
|
unlimited,
|
|
|
|
searchParamContent
|
2022-09-05 16:36:42 +00:00
|
|
|
} = req.query as IndexQuery;
|
2022-04-18 18:21:28 +00:00
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
const userId = req.user.id;
|
2022-01-06 01:26:15 +00:00
|
|
|
|
|
|
|
let queueIds: number[] = [];
|
|
|
|
|
|
|
|
if (queueIdsStringified) {
|
|
|
|
queueIds = JSON.parse(queueIdsStringified);
|
2024-02-26 19:58:39 +00:00
|
|
|
}
|
2022-01-06 01:26:15 +00:00
|
|
|
|
|
|
|
const { tickets, count, hasMore } = await ListTicketsService({
|
|
|
|
searchParam,
|
|
|
|
pageNumber,
|
|
|
|
status,
|
|
|
|
date,
|
|
|
|
showAll,
|
|
|
|
userId,
|
|
|
|
queueIds,
|
2022-04-18 18:21:28 +00:00
|
|
|
withUnreadMessages,
|
2023-07-12 14:54:29 +00:00
|
|
|
unlimited,
|
|
|
|
searchParamContent
|
2022-01-06 01:26:15 +00:00
|
|
|
});
|
2024-02-26 19:58:39 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
return res.status(200).json({ tickets, count, hasMore });
|
|
|
|
};
|
|
|
|
|
2024-02-21 20:47:23 +00:00
|
|
|
export const remoteTicketCreation = async (
|
|
|
|
req: Request,
|
|
|
|
res: Response
|
|
|
|
): Promise<Response> => {
|
|
|
|
const { contact_from, contact_to, msg, contact_name }: any = req.body;
|
|
|
|
|
|
|
|
const validate = ["contact_from", "contact_to", "msg"];
|
2024-02-23 17:36:52 +00:00
|
|
|
const validateOnlyNumber = ["contact_from", "contact_to"];
|
2024-02-21 20:47:23 +00:00
|
|
|
|
|
|
|
for (let prop of validate) {
|
|
|
|
if (!req.body[prop])
|
|
|
|
return res
|
|
|
|
.status(400)
|
|
|
|
.json({ error: `Property '${prop}' is undefined.` });
|
2024-02-26 19:58:39 +00:00
|
|
|
|
|
|
|
if (validateOnlyNumber.includes(prop)) {
|
|
|
|
if (!/^\d+$/.test(req.body[prop])) {
|
2024-02-23 17:36:52 +00:00
|
|
|
return res
|
|
|
|
.status(400)
|
|
|
|
.json({ error: `The property '${prop}' must be a number` });
|
|
|
|
}
|
|
|
|
}
|
2024-02-21 20:47:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const whatsapp = await Whatsapp.findOne({
|
|
|
|
where: { number: contact_from, status: "CONNECTED" }
|
|
|
|
});
|
|
|
|
|
|
|
|
if (whatsapp) {
|
|
|
|
const { id: whatsappId, number, status } = whatsapp;
|
|
|
|
|
|
|
|
const queue: any = await WhatsappQueue.findOne({
|
|
|
|
where: { whatsappId },
|
|
|
|
attributes: ["queueId"]
|
|
|
|
});
|
|
|
|
|
|
|
|
const { queueId } = queue;
|
|
|
|
|
|
|
|
// const validNumber = await CheckIsValidContact(contact_to, true);
|
|
|
|
const validNumber = contact_to;
|
|
|
|
|
|
|
|
if (validNumber) {
|
|
|
|
let contact = await Contact.findOne({ where: { number: validNumber } });
|
|
|
|
|
|
|
|
if (!contact) {
|
|
|
|
// const profilePicUrl = await GetProfilePicUrl(validNumber);
|
|
|
|
|
|
|
|
contact = await CreateContactService({
|
|
|
|
name: contact_name ? contact_name : contact_to,
|
|
|
|
number: validNumber
|
|
|
|
// profilePicUrl
|
|
|
|
});
|
|
|
|
|
|
|
|
const io = getIO();
|
|
|
|
io.emit("contact", {
|
|
|
|
action: "create",
|
|
|
|
contact
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const { id: contactId } = contact;
|
|
|
|
|
|
|
|
const botInfo = await BotIsOnQueue("botqueue");
|
|
|
|
|
|
|
|
let ticket = await Ticket.findOne({
|
|
|
|
where: {
|
|
|
|
[Op.or]: [
|
|
|
|
{ contactId, status: "queueChoice" },
|
|
|
|
{ contactId, status: "open", userId: botInfo.userIdBot }
|
|
|
|
]
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (getSettingValue("whatsaAppCloudApi")?.value == "enabled") {
|
|
|
|
if (ticket) {
|
|
|
|
await UpdateTicketService({
|
|
|
|
ticketData: { status: "closed" },
|
|
|
|
ticketId: ticket.id
|
|
|
|
});
|
|
|
|
ticket = null;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (ticket) {
|
|
|
|
await UpdateTicketService({
|
|
|
|
ticketData: { status: "closed" },
|
|
|
|
ticketId: ticket.id
|
|
|
|
});
|
|
|
|
}
|
2024-02-21 21:10:30 +00:00
|
|
|
}
|
2024-02-21 20:47:23 +00:00
|
|
|
|
|
|
|
if (!ticket) {
|
|
|
|
ticket = await FindOrCreateTicketService(
|
|
|
|
contact,
|
|
|
|
whatsappId,
|
|
|
|
0,
|
|
|
|
undefined,
|
|
|
|
queueId
|
|
|
|
);
|
|
|
|
botSendMessage(ticket, msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
const io = getIO();
|
|
|
|
io.to(ticket.status).emit("ticket", {
|
|
|
|
action: "update",
|
|
|
|
ticket
|
|
|
|
});
|
|
|
|
|
|
|
|
console.log(
|
|
|
|
`REMOTE TICKET CREATION FROM ENDPOINT | STATUS: 200 | MSG: success`
|
|
|
|
);
|
|
|
|
return res.status(200).json({ msg: "success" });
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log(
|
|
|
|
`REMOTE TICKET CREATION FROM ENDPOINT | STATUS: 500 | MSG: The number ${contact_to} does not exist on WhatsApp`
|
|
|
|
);
|
|
|
|
return res
|
|
|
|
.status(500)
|
|
|
|
.json({ msg: `The number ${contact_to} does not exist on WhatsApp` });
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log(
|
2024-02-21 21:10:30 +00:00
|
|
|
`REMOTE TICKET CREATION FROM ENDPOINT | STATUS: 500 | MSG: Whatsapp number ${contact_from} disconnected or it doesn't exist in omnihit`
|
2024-02-21 20:47:23 +00:00
|
|
|
);
|
2024-02-26 19:58:39 +00:00
|
|
|
return res.status(500).json({
|
|
|
|
msg: `Whatsapp number ${contact_from} disconnected or it doesn't exist in omnihit`
|
|
|
|
});
|
2024-02-21 20:47:23 +00:00
|
|
|
};
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
export const store = async (req: Request, res: Response): Promise<Response> => {
|
2023-09-08 19:50:51 +00:00
|
|
|
const { contactId, status, userId, msg, queueId, whatsappId }: TicketData =
|
|
|
|
req.body;
|
2023-07-12 14:54:29 +00:00
|
|
|
|
2024-02-05 15:29:49 +00:00
|
|
|
const botInfo = await BotIsOnQueue("botqueue");
|
|
|
|
|
2023-07-12 14:54:29 +00:00
|
|
|
let ticket = await Ticket.findOne({
|
|
|
|
where: {
|
|
|
|
[Op.or]: [
|
2024-02-05 15:29:49 +00:00
|
|
|
{ contactId, status: "queueChoice" },
|
|
|
|
{ contactId, status: "open", userId: botInfo.userIdBot }
|
2023-07-12 14:54:29 +00:00
|
|
|
]
|
|
|
|
}
|
|
|
|
});
|
2022-05-03 21:20:58 +00:00
|
|
|
|
2023-09-16 14:45:44 +00:00
|
|
|
if (getSettingValue("whatsaAppCloudApi")?.value == "enabled") {
|
|
|
|
if (ticket) {
|
|
|
|
await UpdateTicketService({
|
|
|
|
ticketData: { status: "closed" },
|
|
|
|
ticketId: ticket.id
|
|
|
|
});
|
|
|
|
ticket = null;
|
|
|
|
}
|
2023-07-26 20:24:10 +00:00
|
|
|
} else {
|
2023-09-16 14:45:44 +00:00
|
|
|
if (ticket) {
|
|
|
|
await UpdateTicketService({
|
|
|
|
ticketData: { status: "open", userId: userId, queueId },
|
|
|
|
ticketId: ticket.id
|
|
|
|
});
|
2024-01-29 11:48:20 +00:00
|
|
|
}
|
2023-09-16 14:45:44 +00:00
|
|
|
}
|
|
|
|
|
2024-01-29 11:48:20 +00:00
|
|
|
if (!ticket) {
|
|
|
|
ticket = await CreateTicketService({
|
|
|
|
contactId,
|
|
|
|
status,
|
|
|
|
userId,
|
|
|
|
queueId,
|
|
|
|
whatsappId
|
|
|
|
});
|
2022-05-19 21:29:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const io = getIO();
|
|
|
|
io.to(ticket.status).emit("ticket", {
|
|
|
|
action: "update",
|
|
|
|
ticket
|
|
|
|
});
|
2022-01-06 01:26:15 +00:00
|
|
|
|
|
|
|
return res.status(200).json(ticket);
|
|
|
|
};
|
2022-05-19 21:29:38 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
export const show = async (req: Request, res: Response): Promise<Response> => {
|
|
|
|
const { ticketId } = req.params;
|
|
|
|
|
|
|
|
const contact = await ShowTicketService(ticketId);
|
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
const { statusChatEnd, count, hasMore } = await ListStatusChatEndService({
|
|
|
|
searchParam: "",
|
|
|
|
pageNumber: "1"
|
|
|
|
});
|
2022-05-19 21:29:38 +00:00
|
|
|
|
2022-03-10 11:24:10 +00:00
|
|
|
//////////////////
|
2023-07-26 20:24:10 +00:00
|
|
|
const schedulesContact = await ListSchedulingNotifyContactService(
|
|
|
|
contact.contact.number
|
|
|
|
);
|
2022-03-10 11:24:10 +00:00
|
|
|
/////////////////
|
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
return res.status(200).json({ contact, statusChatEnd, schedulesContact });
|
2022-01-06 01:26:15 +00:00
|
|
|
};
|
|
|
|
|
2022-09-05 16:36:42 +00:00
|
|
|
export const count = async (req: Request, res: Response): Promise<Response> => {
|
2022-10-25 14:16:36 +00:00
|
|
|
// type indexQ = { status: string; date?: string; };
|
2023-07-26 20:24:10 +00:00
|
|
|
const { status, date } = req.query as IndexQuery;
|
2022-08-08 16:47:28 +00:00
|
|
|
|
2022-09-05 16:36:42 +00:00
|
|
|
const ticketCount = await CountTicketService(status, date);
|
2022-08-08 16:47:28 +00:00
|
|
|
|
2022-09-05 16:36:42 +00:00
|
|
|
return res.status(200).json(ticketCount);
|
2022-08-08 16:47:28 +00:00
|
|
|
};
|
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
export const update = async (
|
|
|
|
req: Request,
|
|
|
|
res: Response
|
|
|
|
): Promise<Response> => {
|
|
|
|
console.log("ENTROU NO UPDATE TICKET CONTROLLER");
|
2023-07-12 14:54:29 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
const { ticketId } = req.params;
|
2022-02-28 13:51:11 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
const userOldInfo = await Ticket.findByPk(ticketId);
|
2022-05-16 02:48:06 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
let ticket2 = {};
|
2022-05-19 21:29:38 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
if (req.body["status"] === "closed") {
|
2022-05-19 21:29:38 +00:00
|
|
|
const { status, userId, schedulingNotifyData } = req.body;
|
|
|
|
|
|
|
|
// lembrete
|
2023-07-26 20:24:10 +00:00
|
|
|
const scheduleData = JSON.parse(schedulingNotifyData);
|
2022-05-19 21:29:38 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
const statusChatEndName = await ShowStatusChatEndService(
|
|
|
|
scheduleData.statusChatEndId
|
|
|
|
);
|
2022-02-28 13:51:11 +00:00
|
|
|
|
2022-02-28 18:17:36 +00:00
|
|
|
const { ticket } = await UpdateTicketService({
|
2023-07-26 20:24:10 +00:00
|
|
|
ticketData: {
|
|
|
|
status: status,
|
|
|
|
userId: userId,
|
|
|
|
statusChatEnd: statusChatEndName.name
|
|
|
|
},
|
2022-02-28 18:17:36 +00:00
|
|
|
ticketId
|
|
|
|
});
|
2022-01-06 01:26:15 +00:00
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
if (scheduleData.farewellMessage) {
|
|
|
|
const whatsapp = await ShowWhatsAppService(ticket.whatsappId);
|
2022-02-28 18:17:36 +00:00
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
const { farewellMessage } = whatsapp;
|
|
|
|
|
|
|
|
if (farewellMessage) {
|
|
|
|
await SendWhatsAppMessage({ body: farewellMessage, ticket });
|
|
|
|
}
|
|
|
|
}
|
2023-07-12 14:54:29 +00:00
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
// lembrete // agendamento
|
2023-07-26 20:24:10 +00:00
|
|
|
if (
|
|
|
|
scheduleData.statusChatEndId === "2" ||
|
|
|
|
scheduleData.statusChatEndId === "3"
|
|
|
|
) {
|
|
|
|
if (
|
|
|
|
isScheduling(scheduleData.schedulingDate, scheduleData.schedulingTime)
|
|
|
|
) {
|
|
|
|
console.log("*** É AGENDAMENTO!");
|
|
|
|
} else {
|
|
|
|
console.log("*** É LEMBRETE!");
|
2022-03-28 19:28:35 +00:00
|
|
|
}
|
2022-02-28 18:17:36 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
const schedulingNotifyCreate = await CreateSchedulingNotifyService({
|
|
|
|
ticketId: scheduleData.ticketId,
|
|
|
|
statusChatEndId: scheduleData.statusChatEndId,
|
|
|
|
schedulingDate: scheduleData.schedulingDate,
|
|
|
|
schedulingTime: scheduleData.schedulingTime,
|
|
|
|
message: scheduleData.message
|
|
|
|
});
|
2022-03-06 19:37:09 +00:00
|
|
|
}
|
2022-05-19 21:29:38 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
ticket2 = ticket;
|
|
|
|
} else {
|
2023-07-12 14:54:29 +00:00
|
|
|
// Para aparecer pendente para todos usuarios que estao na fila
|
|
|
|
if (req.body.transfer) {
|
2023-07-26 20:24:10 +00:00
|
|
|
req.body.userId = null;
|
2024-02-05 15:29:49 +00:00
|
|
|
}
|
2024-01-29 11:48:20 +00:00
|
|
|
|
2023-07-12 14:54:29 +00:00
|
|
|
let ticketData: TicketData = req.body;
|
|
|
|
|
2023-07-28 12:25:13 +00:00
|
|
|
if (getSettingValue("oneContactChatWithManyWhats")?.value == "enabled") {
|
2023-07-26 20:24:10 +00:00
|
|
|
if (ticketData.transfer) {
|
2024-01-29 11:48:20 +00:00
|
|
|
const whatsappsByqueue = await ListWhatsAppsForQueueService(
|
|
|
|
ticketData.queueId
|
|
|
|
);
|
|
|
|
|
|
|
|
if (userOldInfo) {
|
|
|
|
let listTicketOpenPending: any = [];
|
|
|
|
|
|
|
|
for (const w of whatsappsByqueue) {
|
|
|
|
let whats = await ListWhatsAppsNumber(w.id);
|
|
|
|
|
|
|
|
console.log("-------> WHATS: ", JSON.stringify(whats, null, 6));
|
|
|
|
const ticket = await Ticket.findOne({
|
|
|
|
where: {
|
|
|
|
[Op.and]: [
|
|
|
|
{ contactId: userOldInfo.contactId },
|
|
|
|
{
|
|
|
|
whatsappId: {
|
|
|
|
[Op.in]: whats.whatsapps.map((w: any) => w.id)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{ status: { [Op.or]: ["open", "pending"] } }
|
|
|
|
]
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
if (ticket) {
|
|
|
|
listTicketOpenPending.push({
|
|
|
|
ticketId: ticket.id,
|
|
|
|
status: ticket.status,
|
|
|
|
userId: ticket.userId,
|
|
|
|
contactId: ticket.contactId,
|
|
|
|
whatsappId: ticket.whatsappId,
|
|
|
|
queueId: ticket.queueId
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// console.log("userOldInfo: ", JSON.stringify(userOldInfo, null, 6));
|
|
|
|
// console.log("##########")
|
|
|
|
// console.log(
|
|
|
|
// "listTicketOpenPending: ",
|
|
|
|
// JSON.stringify(listTicketOpenPending)
|
|
|
|
// );
|
|
|
|
|
|
|
|
if (
|
|
|
|
listTicketOpenPending.filter(
|
|
|
|
(ob: any) => userOldInfo.whatsappId != ob.whatsappId
|
|
|
|
)?.length > 0
|
|
|
|
) {
|
|
|
|
throw new AppError("ERR_OTHER_OPEN_TICKET");
|
|
|
|
}
|
|
|
|
}
|
2023-07-12 14:54:29 +00:00
|
|
|
|
2024-01-29 11:48:20 +00:00
|
|
|
//////////////////////////////////////////////
|
2023-07-12 14:54:29 +00:00
|
|
|
|
2024-01-29 11:48:20 +00:00
|
|
|
// const defaultWhatsapp: any = await GetDefaultWhatsApp({
|
|
|
|
// userId: ticketData.userId
|
|
|
|
// });
|
|
|
|
|
|
|
|
// console.log(
|
|
|
|
// "ticketData.userId: ",
|
|
|
|
// ticketData.userId,
|
|
|
|
// " | defaultWhatsapp: ",
|
|
|
|
// JSON.stringify(defaultWhatsapp, null, 6)
|
|
|
|
// );
|
|
|
|
|
|
|
|
// const _ticket: any = await Ticket.findByPk(ticketId);
|
|
|
|
|
|
|
|
// if (defaultWhatsapp && ticketData.status != "open") {
|
|
|
|
// await CheckContactOpenTickets(
|
|
|
|
// _ticket.dataValues.contactId,
|
|
|
|
// defaultWhatsapp.dataValues.id
|
|
|
|
// );
|
|
|
|
// }
|
2023-07-12 14:54:29 +00:00
|
|
|
|
2024-01-29 11:48:20 +00:00
|
|
|
// ticketData.whatsappId = defaultWhatsapp.dataValues.id;
|
2023-07-26 20:24:10 +00:00
|
|
|
}
|
|
|
|
}
|
2022-02-28 18:17:36 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
console.log(
|
|
|
|
"--------> ticketData.status: ",
|
|
|
|
ticketData.status,
|
|
|
|
" | ticketData.fromMe: ",
|
|
|
|
ticketData.fromMe
|
|
|
|
);
|
2022-04-18 18:21:28 +00:00
|
|
|
|
2022-02-28 18:17:36 +00:00
|
|
|
const { ticket } = await UpdateTicketService({
|
|
|
|
ticketData,
|
2023-07-26 20:24:10 +00:00
|
|
|
ticketId
|
2022-02-28 18:17:36 +00:00
|
|
|
});
|
2022-01-06 01:26:15 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
if (ticketData.status == "open" && !ticketData.fromMe) {
|
2023-07-12 14:54:29 +00:00
|
|
|
await setMessageAsRead(ticket);
|
|
|
|
}
|
|
|
|
|
2022-09-05 16:36:42 +00:00
|
|
|
if (ticketData.userId) {
|
2023-07-26 20:24:10 +00:00
|
|
|
const dateToday = splitDateTime(
|
|
|
|
new Date(format(new Date(), "yyyy-MM-dd HH:mm:ss", { locale: ptBR }))
|
|
|
|
);
|
|
|
|
TicketEmiterSumOpenClosedByUser(
|
|
|
|
ticketData.userId.toString(),
|
|
|
|
dateToday.fullDate,
|
|
|
|
dateToday.fullDate
|
|
|
|
);
|
2022-09-05 16:36:42 +00:00
|
|
|
}
|
2022-08-08 16:47:28 +00:00
|
|
|
|
2023-07-26 20:24:10 +00:00
|
|
|
ticket2 = ticket;
|
2022-05-19 21:29:38 +00:00
|
|
|
}
|
2022-02-28 18:17:36 +00:00
|
|
|
|
2022-05-19 21:29:38 +00:00
|
|
|
if (userOldInfo) {
|
2023-07-26 20:24:10 +00:00
|
|
|
const dateToday = splitDateTime(
|
|
|
|
new Date(format(new Date(), "yyyy-MM-dd HH:mm:ss", { locale: ptBR }))
|
|
|
|
);
|
2022-05-16 02:48:06 +00:00
|
|
|
|
2023-07-12 14:54:29 +00:00
|
|
|
if (userOldInfo.userId) {
|
2023-07-26 20:24:10 +00:00
|
|
|
TicketEmiterSumOpenClosedByUser(
|
|
|
|
userOldInfo.userId.toString(),
|
|
|
|
dateToday.fullDate,
|
|
|
|
dateToday.fullDate
|
|
|
|
);
|
2022-05-19 21:29:38 +00:00
|
|
|
}
|
|
|
|
}
|
2022-05-16 02:48:06 +00:00
|
|
|
|
2022-02-28 18:17:36 +00:00
|
|
|
return res.status(200).json(ticket2);
|
2022-01-06 01:26:15 +00:00
|
|
|
};
|
|
|
|
|
2022-02-28 18:17:36 +00:00
|
|
|
// export const update = async (
|
|
|
|
// req: Request,
|
|
|
|
// res: Response
|
|
|
|
// ): Promise<Response> => {
|
|
|
|
// const { ticketId } = req.params;
|
|
|
|
// const ticketData: TicketData = req.body;
|
|
|
|
|
|
|
|
// const { ticket } = await UpdateTicketService({
|
|
|
|
// ticketData,
|
|
|
|
// ticketId
|
|
|
|
// });
|
|
|
|
|
|
|
|
// if (ticket.status === "closed") {
|
|
|
|
// const whatsapp = await ShowWhatsAppService(ticket.whatsappId);
|
|
|
|
|
|
|
|
// const { farewellMessage } = whatsapp;
|
|
|
|
|
|
|
|
// if (farewellMessage) {
|
|
|
|
// await SendWhatsAppMessage({ body: farewellMessage, ticket });
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return res.status(200).json(ticket);
|
|
|
|
// };
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
export const remove = async (
|
|
|
|
req: Request,
|
|
|
|
res: Response
|
|
|
|
): Promise<Response> => {
|
|
|
|
const { ticketId } = req.params;
|
2022-05-19 21:29:38 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
const ticket = await DeleteTicketService(ticketId);
|
|
|
|
|
|
|
|
const io = getIO();
|
2023-07-26 20:24:10 +00:00
|
|
|
io.to(ticket.status).to(ticketId).to("notification").emit("ticket", {
|
|
|
|
action: "delete",
|
|
|
|
ticketId: +ticketId
|
|
|
|
});
|
2022-01-06 01:26:15 +00:00
|
|
|
|
|
|
|
return res.status(200).json({ message: "ticket deleted" });
|
|
|
|
};
|