diff --git a/main.js b/main.js index 1da647c..6d98f8d 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,4 @@ -const { app, BrowserWindow, ipcMain, screen, net } = require('electron'); +const { app, BrowserWindow, ipcMain, screen, net, dialog } = require('electron'); const path = require('path'); const fs = require('fs'); @@ -67,8 +67,9 @@ async function getDataAndUpdateFloatingBtn (){ const proximos = JSON.parse(await floatingWin.webContents.executeJavaScript("localStorage.getItem('proximos')")); let count = proximos.length; - //lista a contagem no botão flutuante - floatingWin.webContents.send('update-count', count); + + //lista a contagem no botão flutuante + floatingWin.webContents.send('update-count', count); } @@ -392,72 +393,119 @@ ipcMain.handle('get-count', async () => { // Ouvir pedido para mostrar a janela principal ipcMain.on('chamar-fila', async () => { - if (mainWin) { - if (!mainWin.isVisible()) { - mainWin.show(); - mainWin.focus(); - } else { - mainWin.focus(); - } - } else { - createMainWindow(); // Cria se não existir - mainWin.webContents.on('did-finish-load', () => { - mainWin.show(); - mainWin.focus(); - }); + const countFila = async () => { + const proximos = JSON.parse(await floatingWin.webContents.executeJavaScript("localStorage.getItem('proximos')")); + return proximos.length; } - const colabId = await getSelectedOperatorId(); - const token = await getAuthToken('token'); - const url = apiUrl + 'chama-fila-app-colab/'+colabId; // URL de exemplo para enviar a solicitação + const requestData = async () =>{ - const request = net.request({ - method: 'GET', - url: url, - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ' + token + if (mainWin) { + if (!mainWin.isVisible()) { + mainWin.show(); + mainWin.focus(); + } else { + mainWin.focus(); + } + } else { + createMainWindow(); // Cria se não existir + mainWin.webContents.on('did-finish-load', () => { + mainWin.show(); + mainWin.focus(); + }); } - }); - request.on('response', (response) => { - let rawData = ''; - response.on('data', (chunk) => { - rawData += chunk; - }); + const colabId = await getSelectedOperatorId(); + const token = await getAuthToken('token'); + const url = apiUrl + 'chama-fila-app-colab/'+colabId; // URL de exemplo para enviar a solicitação - response.on('end', () => { - try { - const parsedData = JSON.parse(rawData); - - if (response.statusCode === 200) { - mainWin.webContents.send('select-atend-id', parsedData.data); - console.log(parsedData); - } else { - console.error(`Erro na requisição: Status code ${response.statusCode}`, parsedData); - // Lidar com o erro adequadamente, talvez enviando uma mensagem para a janela principal - mainWin.webContents.send('api-error', { - message: `Erro ao chamar atendimento: ${parsedData.message || 'Erro desconhecido'}` - }); - } - } catch (error) { - console.error("Erro ao analisar a resposta JSON:", error); - mainWin.webContents.send('api-error', { - message: `Erro ao processar resposta do servidor.` - }); + const request = net.request({ + method: 'GET', + url: url, + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + token } }); - }); - request.on('error', (error) => { - console.error("Erro na requisição:", error); - mainWin.webContents.send('api-error', { - message: `Erro ao chamar atendimento: ${error.message}` + request.on('response', (response) => { + let rawData = ''; + + response.on('data', (chunk) => { + rawData += chunk; + }); + + response.on('end', () => { + try { + const parsedData = JSON.parse(rawData); + + if (response.statusCode === 200) { + mainWin.webContents.send('select-atend-id', parsedData.data); + if(parsedData.data.Status === 'Atendendo'){ + let options2 = { + 'title': 'Precisa finalizar antes de chamar o próximo.', + 'message': 'Em andamento', + 'detail': 'Já possui um atendimento em andamento (Chamado/Atendendo), continue e finalize por favor!', + 'type': 'error', + 'noLink': true, + 'buttons': ['Depois','Continuar'], + }; + dialog.showMessageBox(floatingWin, options2).then(result => { + if(result.response){ + mainWin.webContents.send('show-observation'); + }; + }); + } + // console.log(parsedData); + } else { + console.error(`Erro na requisição: Status code ${response.statusCode}`, parsedData); + // Lidar com o erro adequadamente, talvez enviando uma mensagem para a janela principal + mainWin.webContents.send('api-error', { + message: `Erro ao chamar atendimento: ${parsedData.message || 'Erro desconhecido'}` + }); + } + } catch (error) { + console.error("Erro ao analisar a resposta JSON:", error); + mainWin.webContents.send('api-error', { + message: `Erro ao processar resposta do servidor.` + }); + } + }); }); - }); - request.end(); + request.on('error', (error) => { + console.error("Erro na requisição:", error); + mainWin.webContents.send('api-error', { + message: `Erro ao chamar atendimento: ${error.message}` + }); + }); + + request.end(); + }; + + + + let options = { + 'title': 'Incie o atendimento quando o cliente chegar na sala.', + 'message': 'Chamar um cliente da fila?', + 'type': 'warning', + 'noLink': true, + 'buttons': ['Não','Sim'], + }; + + + if(await countFila() > 0){ + dialog.showMessageBox(floatingWin, options).then(result => { + if(result.response){ + requestData(); + }; + }); + } + + else { + requestData(); + } }); diff --git a/package.json b/package.json index d543e75..daeef72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "autoatendcolab", - "version": "1.0.6", + "version": "1.0.7", "main": "main.js", "isBuildNow": true, "scripts": { diff --git a/preload.js b/preload.js index 5912444..7e94212 100644 --- a/preload.js +++ b/preload.js @@ -14,6 +14,7 @@ contextBridge.exposeInMainWorld('electronAPI', { //inicia o atendimento atual iniciaAtendimento: (itemId) => ipcRenderer.send('iniciar-atendimento', itemId), + showObservation: (callback) => ipcRenderer.on('show-observation', (_event) => callback() ), //salva a observação do atendimento saveObservation: (data) => ipcRenderer.send('save-observation', data), diff --git a/renderer.js b/renderer.js index a193217..0a7b493 100644 --- a/renderer.js +++ b/renderer.js @@ -17,6 +17,7 @@ let selectedItemId = null; let selectedItemName = ''; window.electronAPI.onLoadData((data) => { + nextButton.disabled = true; if(!data){ return; } @@ -75,6 +76,7 @@ initializePusher(); //chama o proximo da fila ao abrir a janela de atendimentos window.electronAPI.selectAtendID((data)=>{ + nextButton.disabled = true; if(!data){ queueNumber.innerHTML = 'Ninguem aguardando atendimento, fechando a janela em alguns segundos...'; setTimeout(() => { @@ -83,14 +85,17 @@ window.electronAPI.selectAtendID((data)=>{ return; } // Reseta a view para a lista sempre que os dados são carregados ao clicar no botão para abrir a janela - nextButton.disabled = true; populateList(data); showListView(); selectedItemId = data.id ?? null; //data.senhaGen queueNumber.innerHTML = data ? `NA VEZ: ${data.clientName.toUpperCase()} - ${data.descricaoServico.toUpperCase()}` : 'Ninguem aguardando atendimento'; selectedItemNameSpan.innerHTML = data ? ` ${data.clientName.toUpperCase()} [ ${data.senhaGen} ]` : 'Ninguem aguardando atendimento'; +}); +window.electronAPI.showObservation(()=>{ + window.electronAPI.iniciaAtendimento(selectedItemId); + showObservationView(); // Muda para a tela de observação }); // Função para popular a lista de itens @@ -99,28 +104,28 @@ function populateList(currentData) { // Adiciona os outros itens apenas para visualização (opcional) const proximos = JSON.parse(datastorage); - var count = 8; + // var count = 6; - itemList.innerHTML = ''; // Limpa a lista anterior - if (!proximos || proximos.length === 0 || !currentData) { - itemList.innerHTML = '