const loadCRM = require('./loadCRM') const lookupContactByPhone = require('./lookupCRMContactByPhone') const createContact = require('./createContact') const findProperty = require('./findProperty') const CRM_Contact = require('../models/CRM_Contact') const CRM_Ticket = require('../models/CRM_Ticket') const CRM = require('../models/CRM') const createTicket = require('./createTicket') const lookupCRMTicket = require('./lookupCRMTicket') const sendEventTicketCreatedToSocket = require('./sendEventTicketCreatedToSocket') const journalingRequest = require('./journalingRequest') async function ticketCRM(companyId, crmPhone, crmAgent = "0000", crmFirstName = 'Username') { const crmFiles = await loadCRM(companyId) // const crmContactIds = [] const crmTicketLinks = [] for (const crmConfig of crmFiles) { const { crmRest: rest, authentication } = crmConfig.crm // console.log("ticketCRM crmRest: ", JSON.stringify(rest, null, 6)) // Send the ticket url link to hitphone to open on another browser tab let obj = findProperty(rest, 'lookupTicket') let ticket_id = '' let isCreated = false if (obj) { let { url } = obj.request let contact = await _lookupContact(rest, authentication, crmPhone, companyId, crmFirstName) const crm = await CRM.findOne({ companyId, crmBaseURL: new URL(url.trim()).hostname }) const obj_contact = await CRM_Contact.findOne({ companyId, crmBaseURL: new URL(url).hostname, phone: crmPhone }) const obj_ticket = await CRM_Ticket.findOne( { companyId, crm, contact: obj_contact } ).select('ticketId') if (obj_ticket) { console.log('obj_ticket1: ', obj_ticket) const { ticketId } = obj_ticket if (ticketId) { ticket_id = ticketId } const obj_ticket_status = await lookupCRMTicket( rest, authentication, crmPhone, companyId, test = { testing: false }, obj_ticket.ticketId ) if (obj_ticket_status) console.log("obj_ticket_status: ", JSON.stringify(obj_ticket_status, null, 6)) if (obj_ticket_status) { const { auxTicketStatus, error } = obj_ticket_status // refactor this for production. For now only working with hubspot where status new is equal 1 if ((auxTicketStatus && auxTicketStatus != '1') || (error && error == 404)) { await CRM_Ticket.deleteMany({ contact: obj_contact }) const { ticketUrl, ticketId } = await _createTicket(rest, crmPhone, companyId, authentication, crmFirstName, contact, crmAgent) ticket_id = ticketId isCreated = true // crmTicketLinks.push({ ticketUrl, ticketId }) } } } else { console.log('_createTicket xxxxx ') const { ticketUrl, ticketId } = await _createTicket(rest, crmPhone, companyId, authentication, crmFirstName, contact, crmAgent) ticket_id = ticketId isCreated = true } crmTicketLinks.push({ ticketId: `https://app.hubspot.com/contacts/23636141/ticket/${ticket_id}`, created: isCreated, }) } // } return crmTicketLinks } module.exports = ticketCRM async function _lookupContact(rest, authentication, crmPhone, companyId, crmFirstName) { let contact = await lookupContactByPhone(rest, authentication, crmPhone, companyId) if (contact?.exist) { return { created: false, contactId: contact.contactId } } if (!contact?.exist) { contact = await createContact(companyId, rest, authentication, crmPhone, crmFirstName) } return { created: true, contactId: contact.contactId } } async function _createTicket(rest, crmPhone, companyId, authentication, crmFirstName, contact, crmAgent) { let obj = findProperty(rest, 'createTicketRecord') let ticket_url = '' let ticket_id = '' if (obj) { let { request, response } = obj if (request) { msg = `Tentando criar ticket para o contato ${crmPhone}` // return { exist: true, ticketId: auxTicketId, phone: crmPhone, ticketUrl } // console.log('xxxxxxxxxxxxxxxxxxxxxxxxx1') // return { exist: true, ticketId: auxTicketId, phone: crmPhone, ticketUrl } const { ticketUrl, ticketId, } = await createTicket(companyId, rest, authentication, crmPhone, crmFirstName = 'Username', crmLastName = '', crmEmail = '', test = { testing: false }, crmContactId = contact.contactId, crmAgent ) ticket_id = ticketId ticket_url = ticketUrl } } return { crmFirstName, ticketUrl: ticket_url, ticketId: ticket_id } }