Compare commits
3 Commits
b05cd7d1d6
...
76929c41ec
Author | SHA1 | Date |
---|---|---|
adriano | 76929c41ec | |
adriano | 5e81f02116 | |
adriano | c27770ef02 |
|
@ -262,9 +262,7 @@ export const reportMessagesUserByDateStartDateEnd = async (
|
|||
data_query_messages[i].fromMe = "Cliente";
|
||||
}
|
||||
|
||||
data_query_messages[i].id = i + 1;
|
||||
|
||||
console.log("data_query_messages: ", data_query_messages[i]);
|
||||
data_query_messages[i].id = i + 1;
|
||||
}
|
||||
|
||||
return res.status(200).json(data_query_messages);
|
||||
|
|
|
@ -18,6 +18,7 @@ import { startOfDay, endOfDay, parseISO, getDate } from "date-fns";
|
|||
import { string } from "yup/lib/locale";
|
||||
import Whatsapp from "../../models/Whatsapp";
|
||||
import Query from "mysql2/typings/mysql/lib/protocol/sequences/Query";
|
||||
import { te } from "date-fns/locale";
|
||||
|
||||
interface Request {
|
||||
userId: string | number;
|
||||
|
@ -43,43 +44,56 @@ const ShowTicketReport = async ({
|
|||
createdOrUpdated = "created",
|
||||
queueId
|
||||
}: Request): Promise<Response> => {
|
||||
let where_clause: any = {};
|
||||
let query = "";
|
||||
// let where_clause: any = {};
|
||||
// let query = "";
|
||||
|
||||
if (userId !== "0") {
|
||||
where_clause.userid = userId;
|
||||
query = `AND t.userId = ${userId}`;
|
||||
}
|
||||
// if (userId !== "0") {
|
||||
// where_clause.userid = userId;
|
||||
// query = `AND t.userId = ${userId}`;
|
||||
// }
|
||||
|
||||
// if (queueId) {
|
||||
// where_clause.queueId = queueId;
|
||||
// query = `AND t.queueId = ${queueId}`;
|
||||
// }
|
||||
|
||||
const createdAtOrUpdatedAt =
|
||||
createdOrUpdated == "created" ? "createdAt" : "updatedAt";
|
||||
|
||||
let where_clause = {};
|
||||
|
||||
if (queueId) {
|
||||
where_clause.queueId = queueId;
|
||||
query = `AND t.queueId = ${queueId}`;
|
||||
where_clause = {
|
||||
queueId: queueId,
|
||||
[createdAtOrUpdatedAt]: {
|
||||
[Op.gte]: startDate + " 00:00:00.000000",
|
||||
[Op.lte]: endDate + " 23:59:59.999999"
|
||||
}
|
||||
};
|
||||
} else if (userId == "0") {
|
||||
where_clause = {
|
||||
[createdAtOrUpdatedAt]: {
|
||||
[Op.gte]: startDate + " 00:00:00.000000",
|
||||
[Op.lte]: endDate + " 23:59:59.999999"
|
||||
}
|
||||
};
|
||||
} else if (userId != "0") {
|
||||
where_clause = {
|
||||
userid: userId,
|
||||
[createdAtOrUpdatedAt]: {
|
||||
[Op.gte]: startDate + " 00:00:00.000000",
|
||||
[Op.lte]: endDate + " 23:59:59.999999"
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const limit = 40;
|
||||
const offset = limit * (+pageNumber - 1);
|
||||
|
||||
const createdAtOrUpdatedAt =
|
||||
createdOrUpdated == "created" ? "createdAt" : "updatedAt";
|
||||
|
||||
const _ticketsId = await sequelize.query(
|
||||
`SELECT t.id
|
||||
FROM Tickets t
|
||||
INNER JOIN (
|
||||
SELECT DISTINCT ticketId
|
||||
FROM Messages
|
||||
WHERE ${createdAtOrUpdatedAt} >= '${startDate} 00:00:00' AND ${createdAtOrUpdatedAt} <= '${endDate} 23:59:59'
|
||||
) AS m ON m.ticketId = t.id ${query};`,
|
||||
{ type: QueryTypes.SELECT }
|
||||
);
|
||||
|
||||
let { count, rows: tickets }: any = await Ticket.findAndCountAll({
|
||||
where: {
|
||||
id: { [Op.in]: _ticketsId.map((t: any) => t.id) }
|
||||
},
|
||||
where: where_clause,
|
||||
limit,
|
||||
offset,
|
||||
|
||||
attributes: [
|
||||
"id",
|
||||
"status",
|
||||
|
@ -151,43 +165,41 @@ const ShowTicketReport = async ({
|
|||
throw new AppError("ERR_NO_TICKET_FOUND", 404);
|
||||
}
|
||||
|
||||
const ticketIds = tickets.map((t: any) => t.id);
|
||||
|
||||
if (ticketIds.length > 0) {
|
||||
if (tickets.length > 0) {
|
||||
const waiting_time: any = await sequelize.query(
|
||||
`SELECT t.id as ticketId, t.status, TIME_FORMAT(
|
||||
SEC_TO_TIME(
|
||||
SEC_TO_TIME(
|
||||
TIMESTAMPDIFF(
|
||||
SECOND,
|
||||
(
|
||||
SELECT createdAt
|
||||
FROM Messages
|
||||
WHERE ticketId = m.ticketId
|
||||
AND fromMe = 0
|
||||
ORDER BY createdAt ASC
|
||||
SELECT createdAt
|
||||
FROM Messages
|
||||
WHERE ticketId = m.ticketId
|
||||
AND fromMe = 0
|
||||
ORDER BY createdAt ASC
|
||||
LIMIT 1
|
||||
),
|
||||
),
|
||||
(
|
||||
SELECT createdAt
|
||||
FROM Messages
|
||||
WHERE ticketId = m.ticketId
|
||||
AND fromAgent = 1
|
||||
ORDER BY createdAt ASC
|
||||
SELECT createdAt
|
||||
FROM Messages
|
||||
WHERE ticketId = m.ticketId
|
||||
AND fromAgent = 1
|
||||
ORDER BY createdAt ASC
|
||||
LIMIT 1
|
||||
)
|
||||
)
|
||||
), '%H:%i:%s') AS WAITING_TIME
|
||||
FROM Tickets t
|
||||
)
|
||||
), '%H:%i:%s') AS WAITING_TIME
|
||||
FROM Tickets t
|
||||
JOIN Messages m ON t.id = m.ticketId
|
||||
JOIN Whatsapps w ON t.whatsappId = w.id
|
||||
JOIN Queues q ON q.id = t.queueId
|
||||
WHERE DATE(m.createdAt) BETWEEN '${startDate} 00:00:00.000000' AND '${endDate} 23:59:59.999999'
|
||||
AND t.id IN (${ticketIds.join()})
|
||||
AND m.createdAt = (SELECT MIN(createdAt) FROM Messages WHERE ticketId = t.id)
|
||||
AND m.fromMe = 0
|
||||
WHERE DATE(m.createdAt) BETWEEN '${startDate} 00:00:00.000000' AND '${endDate} 23:59:59.999999'
|
||||
AND t.id IN (${tickets.map((t: any) => t.id).join()})
|
||||
AND m.createdAt = (SELECT MIN(createdAt) FROM Messages WHERE ticketId = t.id)
|
||||
AND m.fromMe = 0
|
||||
AND t.status IN ('open', 'closed')
|
||||
HAVING WAITING_TIME IS NOT NULL
|
||||
ORDER BY
|
||||
ORDER BY
|
||||
WAITING_TIME;`,
|
||||
{ type: QueryTypes.SELECT }
|
||||
);
|
||||
|
|
|
@ -72,7 +72,7 @@ const PieChart = ({ data = dataExample }) => {
|
|||
return (
|
||||
<Box width="100%" height="100%" position="relative" display="flex">
|
||||
<Box sx={{ position: "absolute" }}>
|
||||
<Title>Tickets Status</Title>
|
||||
<Title>Tickets status de encerramento</Title>
|
||||
</Box>
|
||||
<Box
|
||||
component="ul"
|
||||
|
|
|
@ -258,7 +258,7 @@ const Dashboard = () => {
|
|||
const [usersOnlineInfo, dispatch] = useReducer(reducer, [])
|
||||
const [ticketStatusChange, setStatus] = useState()
|
||||
const [ticketsStatus, setTicktsStatus] = useState({ open: 0, openAll: 0, pending: 0, closed: 0 })
|
||||
|
||||
const [ticketStatusChatEnd, setTicketStatusChatEnd] = useState([])
|
||||
const { user } = useContext(AuthContext)
|
||||
|
||||
useEffect(() => {
|
||||
|
@ -287,12 +287,17 @@ const Dashboard = () => {
|
|||
|
||||
const { data } = await api.get("/reports/user/services", {
|
||||
params: { userId: null, startDate: dateToday, endDate: dateToday },
|
||||
})
|
||||
|
||||
// console.log('data.data: ', data.usersProfile)
|
||||
})
|
||||
|
||||
dispatch({ type: "RESET" })
|
||||
dispatch({ type: "LOAD_QUERY", payload: data.usersProfile })
|
||||
|
||||
const { data: ticketStatusChatEndData } = await api.get("/reports/count/statusChatEnd", {
|
||||
params: { startDate: '2024-03-21', endDate: '2024-03-28' },
|
||||
})
|
||||
|
||||
setTicketStatusChatEnd(ticketStatusChatEndData.reportStatusChatEnd)
|
||||
|
||||
} catch (err) {
|
||||
|
||||
}
|
||||
|
@ -506,7 +511,7 @@ const Dashboard = () => {
|
|||
</Grid>
|
||||
<Grid item xs={12} sm={12} md={6} lg={6}>
|
||||
<Paper className={classes.fixedHeightPaper} variant="outlined">
|
||||
<PieChart data={[]} />
|
||||
<PieChart data={ticketStatusChatEnd} />
|
||||
</Paper>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
|
|
@ -363,7 +363,7 @@ const Report = () => {
|
|||
if (reportOption === '1') {
|
||||
|
||||
const { data } = await api.get("/reports/", { params: { userId, startDate, endDate, pageNumber: pageNumberTickets, createdOrUpdated: selectedValue, queueId }, userQueues: userA.queues })
|
||||
|
||||
|
||||
let ticketsQueue = data.tickets
|
||||
let userQueues = userA.queues
|
||||
let filterQueuesTickets = []
|
||||
|
|
Loading…
Reference in New Issue