adicionado funcionalidade para checar se já possui um atendimento em andamento

This commit is contained in:
Eder Moraes 2025-06-17 03:29:53 -03:00
parent 69ad98af95
commit 8eed72c15b
4 changed files with 130 additions and 87 deletions

52
main.js
View File

@ -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,6 +67,7 @@ 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);
@ -392,6 +393,13 @@ ipcMain.handle('get-count', async () => {
// Ouvir pedido para mostrar a janela principal
ipcMain.on('chamar-fila', async () => {
const countFila = async () => {
const proximos = JSON.parse(await floatingWin.webContents.executeJavaScript("localStorage.getItem('proximos')"));
return proximos.length;
}
const requestData = async () =>{
if (mainWin) {
if (!mainWin.isVisible()) {
mainWin.show();
@ -407,6 +415,7 @@ ipcMain.on('chamar-fila', async () => {
});
}
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
@ -433,7 +442,22 @@ ipcMain.on('chamar-fila', async () => {
if (response.statusCode === 200) {
mainWin.webContents.send('select-atend-id', parsedData.data);
console.log(parsedData);
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
@ -458,6 +482,30 @@ ipcMain.on('chamar-fila', async () => {
});
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();
}
});

View File

@ -1,6 +1,6 @@
{
"name": "autoatendcolab",
"version": "1.0.6",
"version": "1.0.7",
"main": "main.js",
"isBuildNow": true,
"scripts": {

View File

@ -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),

View File

@ -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: <u>${data.clientName.toUpperCase()}</u> - ${data.descricaoServico.toUpperCase()}` : 'Ninguem aguardando atendimento';
selectedItemNameSpan.innerHTML = data ? `<u> ${data.clientName.toUpperCase()} </u> <i style="float:right;">[ ${data.senhaGen} ]</i>` : '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 = '<li>Fila vazia!</li>';
const dec_counter = setInterval(() => {
count = count -1;
counterStart.innerHTML = `[ ${count} ]`;
if (count <= 0 || !currentData) {
counterStart.innerHTML = '';
nextButton.disabled = false;
clearInterval(dec_counter);
}
},1000);
return;
}
// itemList.innerHTML = ''; // Limpa a lista anterior
// const dec_counter = setInterval(() => {
// --count;
// counterStart.innerHTML = `[ ${count} ]`;
// if (count <= 0) {
// counterStart.innerHTML = '';
// nextButton.disabled = !currentData;
// clearInterval(dec_counter);
// }
// },1000);
setTimeout(()=>{
nextButton.disabled = !currentData;
},5000);
// Seleciona o primeiro item por padrão (ou o próximo disponível)
// Aqui, vamos apenas pegar o primeiro da lista atual
const itemToProcess = proximos[0]; // Pega o primeiro item
if (itemToProcess) {
selectedItemId = itemToProcess.id;
selectedItemName = itemToProcess.clientName;
const li = document.createElement('li');
@ -128,20 +133,9 @@ function populateList(currentData) {
li.dataset.id = itemToProcess.id; // Armazena o ID no elemento
li.classList.add('selected'); // Marca como selecionado visualmente (precisa de CSS)
itemList.appendChild(li);
const dec_counter = setInterval(() => {
count = count -1;
counterStart.innerHTML = `[ ${count} ]`;
if (count <= 0 && currentData) {
counterStart.innerHTML = '';
nextButton.disabled = false;
clearInterval(dec_counter);
}
},1000);
} else {
itemList.innerHTML = '<li>Fila vazia!</li>';
nextButton.disabled = !currentData;
nextButton.disabled = true;
selectedItemId = null;
selectedItemName = '';
}