From 8ca5b4503a8c875a1c7febfe6ec734c9f5d19175 Mon Sep 17 00:00:00 2001 From: adriano Date: Fri, 1 Mar 2024 17:47:18 -0300 Subject: [PATCH] fix: Correct search queries in the report and fix bugs in WhatsApp template sending --- backend/src/controllers/MessageController.ts | 7 +- backend/src/controllers/ReportController.ts | 2 + .../TicketServices/ShowTicketReport.ts | 77 ++++++++----------- frontend/src/components/MessageInput/index.js | 8 +- .../src/components/ModalTemplate/index.js | 42 +++++++--- frontend/src/pages/Report/index.js | 11 +-- 6 files changed, 83 insertions(+), 64 deletions(-) diff --git a/backend/src/controllers/MessageController.ts b/backend/src/controllers/MessageController.ts index 234d654..2016bca 100644 --- a/backend/src/controllers/MessageController.ts +++ b/backend/src/controllers/MessageController.ts @@ -76,7 +76,7 @@ export const store = async (req: Request, res: Response): Promise => { let payloadComponents = []; - try { + try { for (let i in params) { const { parameters, language, type } = params[i]; if (type == "BODY") { @@ -97,7 +97,7 @@ export const store = async (req: Request, res: Response): Promise => { } const name = params.find((p: any) => p?.template_name); - const { language }: any = params.find((p: any) => p?.language); + const { language }: any = params?.find((p: any) => p?.language) || 'pt_BR' const { template_name } = name; @@ -110,9 +110,10 @@ export const store = async (req: Request, res: Response): Promise => { } }; + console.log("TEMPLATE: ", template); + sendWhatsAppMessageOfficialAPI(ticket, body, null, template); - console.log("TEMPLATE: ", template); return res.send(); } } catch (error: any) { diff --git a/backend/src/controllers/ReportController.ts b/backend/src/controllers/ReportController.ts index 880452d..211c9bc 100644 --- a/backend/src/controllers/ReportController.ts +++ b/backend/src/controllers/ReportController.ts @@ -68,6 +68,8 @@ export const reportUserByDateStartDateEnd = async ( queueId ); + // return res.status(200).json({ tickets:[], count:0, hasMore:false, queues:[] }); + const { tickets, count, hasMore } = await ShowTicketReport({ userId, startDate, diff --git a/backend/src/services/TicketServices/ShowTicketReport.ts b/backend/src/services/TicketServices/ShowTicketReport.ts index 6beeb8a..c60156d 100644 --- a/backend/src/services/TicketServices/ShowTicketReport.ts +++ b/backend/src/services/TicketServices/ShowTicketReport.ts @@ -40,46 +40,37 @@ const ShowTicketReport = async ({ createdOrUpdated = "created", queueId }: Request): Promise => { - let where_clause = {}; + let where_clause: any = {}; + // let where_clause_msg: any = {}; - if (userId == "0") { - if (createdOrUpdated == "updated") { - where_clause = { - updatedAt: { - [Op.gte]: startDate + " 00:00:00.000000", - [Op.lte]: endDate + " 23:59:59.999999" - } - }; - } else if (createdOrUpdated == "created") { - where_clause = { - createdAt: { - [Op.gte]: startDate + " 00:00:00.000000", - [Op.lte]: endDate + " 23:59:59.999999" - } - }; - } + if (userId !== "0") { + where_clause.userid = userId; + } - if (queueId) { - where_clause = { ...where_clause, queueId }; - } - } else { - if (createdOrUpdated == "updated") { - where_clause = { - userid: userId, - updatedAt: { - [Op.gte]: startDate + " 00:00:00.000000", - [Op.lte]: endDate + " 23:59:59.999999" - } - }; - } else if (createdOrUpdated == "created") { - where_clause = { - userid: userId, - createdAt: { - [Op.gte]: startDate + " 00:00:00.000000", - [Op.lte]: endDate + " 23:59:59.999999" - } - }; - } + if (createdOrUpdated === "updated") { + where_clause = { + ...where_clause, + updatedAt: { + [Op.gte]: startDate + " 00:00:00.000000", + [Op.lte]: endDate + " 23:59:59.999999" + } + }; + } + + if (createdOrUpdated === "created") { + where_clause = { + ...where_clause, + createdAt: { + [Op.gte]: startDate + " 00:00:00.000000", + [Op.lte]: endDate + " 23:59:59.999999" + } + }; + } + + let { userid, ...where_clause_msg } = where_clause; + + if (queueId) { + where_clause.queueId = queueId; } const limit = 40; @@ -89,7 +80,6 @@ const ShowTicketReport = async ({ where: where_clause, limit, offset, - //attributes: ['id', 'status', 'createdAt', 'updatedAt'], attributes: [ "id", @@ -118,8 +108,7 @@ const ShowTicketReport = async ({ model: Message, required: true, separate: true, - - // attributes: ['body', 'read', 'mediaType','fromMe', 'mediaUrl','createdAt'], + where: where_clause_msg , attributes: [ "body", @@ -136,7 +125,6 @@ const ShowTicketReport = async ({ "createdAt" ] ], - order: [["createdAt", "ASC"]] }, { @@ -155,11 +143,10 @@ const ShowTicketReport = async ({ model: Whatsapp, attributes: ["name"] } - ], - + ], order: [["updatedAt", "DESC"]] }); - + const hasMore = count > offset + tickets.length; if (!tickets) { diff --git a/frontend/src/components/MessageInput/index.js b/frontend/src/components/MessageInput/index.js index f760ff5..9773517 100644 --- a/frontend/src/components/MessageInput/index.js +++ b/frontend/src/components/MessageInput/index.js @@ -350,6 +350,8 @@ const MessageInput = ({ ticketStatus }) => { try { + console.log('kkkkkkkkkkkkkkkkkkk message: ', message) + const { data } = await api.post(`/messages/${ticketId}`, message) setParams(null) if (data && data?.data && Array.isArray(data.data)) { @@ -371,7 +373,11 @@ const MessageInput = ({ ticketStatus }) => { if (!params) return - const body_params = params.find(p => p?.type === 'BODY') + const body_params = params?.find(p => p?.type === 'BODY') + + console.log('------------> body_params: ', body_params) + + if(!body_params) return let { text } = body_params diff --git a/frontend/src/components/ModalTemplate/index.js b/frontend/src/components/ModalTemplate/index.js index c969403..73a7717 100644 --- a/frontend/src/components/ModalTemplate/index.js +++ b/frontend/src/components/ModalTemplate/index.js @@ -1,13 +1,13 @@ -import React, { useState, useEffect, useRef, } from 'react' +import React, { useState, useEffect, useRef, } from 'react' import Button from '@mui/material/Button' import Dialog from '@mui/material/Dialog' import DialogActions from '@mui/material/DialogActions' import DialogContent from '@mui/material/DialogContent' import DialogContentText from '@mui/material/DialogContentText' -import DialogTitle from '@mui/material/DialogTitle' -import SelectField from "../Report/SelectField" - +import DialogTitle from '@mui/material/DialogTitle' +import SelectField from "../Report/SelectField" + import TextField from '@mui/material/TextField' @@ -16,12 +16,14 @@ const ModalTemplate = ({ templates, modal_header, func }) => { templates = [{}, ...templates] + // console.log('TEMPLATES: ', templates) + const [open, setOpen] = useState(true) const [scroll, /*setScroll*/] = useState('body') const [templateId, setTemplateId] = useState(null) const [templateComponents, setTemplateComponents] = useState(null) const [language, setLanguage] = useState(null) - const [params, setParams] = useState([]) + const [params, setParams] = useState([]) const handleCancel = (event, reason) => { @@ -34,7 +36,25 @@ const ModalTemplate = ({ templates, modal_header, func }) => { const handleChatEnd = () => { console.log('PARAMS TO SEND TO MESSAGE INPUT: ', params) - func(params) + console.log('templateComponents: ', templateComponents) + + if (params && params.length === 1) { + + const bodyObject = templateComponents.find(obj => obj?.type === 'BODY') + + if (bodyObject) { + const { text } = bodyObject + func([...params, { + "type": "BODY", + "text": text, + "language": "pt_BR", + }]) + } + } + else { + func(params) + } + setOpen(false) } @@ -100,11 +120,11 @@ const ModalTemplate = ({ templates, modal_header, func }) => { const handleTextChange = (value, index, type, text, language,) => { - if (!params) return + if (!params) return setParams((params) => { - const _index = params.findIndex(({ type }) => type === 'BODY') + const _index = params.findIndex(({ type }) => type === 'BODY') if (_index !== -1) { @@ -127,7 +147,9 @@ const ModalTemplate = ({ templates, modal_header, func }) => { useEffect(() => { console.log('---------> PARAMS: ', params) - }, [params]) + console.log('---------> templateComponents: ', templateComponents) + + }, [params, templateComponents]) const dinamicTextField = (replicateItems, func, type, text, language) => { @@ -204,7 +226,7 @@ const ModalTemplate = ({ templates, modal_header, func }) => { {text &&

{text}

- {type && (type === 'BODY') && dinamicTextField(body_params.length, handleTextChange, type, text, language)} + {type && (type === 'BODY') && body_params && dinamicTextField(body_params.length, handleTextChange, type, text, language)}
} {buttons &&
{buttons.map((b) => { const { type, text, url } = b diff --git a/frontend/src/pages/Report/index.js b/frontend/src/pages/Report/index.js index 24d8490..75886f5 100644 --- a/frontend/src/pages/Report/index.js +++ b/frontend/src/pages/Report/index.js @@ -419,11 +419,11 @@ const Report = () => { // Get from report option - const reportValue = (data) => { - if(data === '2'){ + const reportValue = (data) => { + if (data === '2') { setChecked(true) } - setReport(data) + setReport(data) } useEffect(() => { @@ -515,6 +515,7 @@ const Report = () => { identifier: 'csv' }, query_params: { + queueId: queueId, userId: userId, startDate: startDate, endDate: endDate @@ -780,7 +781,7 @@ const Report = () => { {reportOption === '1' && - <> + <> { handleScroll={handleScroll} - table_title={i18n.t("reports.listTitles.title1_1")} /> + table_title={i18n.t("reports.listTitles.title1_1")} /> }