Skip to content

Commit

Permalink
Resgate do voucher
Browse files Browse the repository at this point in the history
  • Loading branch information
BiancaFSilva authored Sep 14, 2024
1 parent b9a0945 commit 9bebdd9
Show file tree
Hide file tree
Showing 4 changed files with 227 additions and 67 deletions.
6 changes: 3 additions & 3 deletions fj-tech/dist/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -490,9 +490,9 @@ <h5 class="offcanvas-title" id="offcanvasRightLabel">Gerenciar Recursos do
<div class="mb-3 hstack gap-3 mt-2">
<select id="tipoVoucher" class="form-select" required>
<option selected hidden>Tipo de voucher resgatado</option>
<option value="1">Almoço</option>
<option value="2">Jantar</option>
<option value="3">Kit lanche</option>
<option value="Almoco">Almoço</option>
<option value="Jantar">Jantar</option>
<option value="Lanche">Kit lanche</option>
</select>
<button type="button" class="btn btn-danger"
id="cadastraResgateVoucher">
Expand Down
170 changes: 159 additions & 11 deletions fj-tech/src/js/voluntarios/festival/cadastra_intervalo.mjs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
// Initializa a integração com o Firebase
import { db } from "../../firebaseConfig.mjs";
import { doc, getDoc, updateDoc } from "firebase/firestore";
import { doc, getDoc, Timestamp, setDoc, updateDoc } from "firebase/firestore";

import '../lista.mjs';

// Obtém o ano da edição atual do festival
import { edicaoAtualFestival } from "../lista.mjs";
import { bloquearResgateVoucher, desbloquearResgateVoucher } from "./resgate_voucher.mjs";
import { bloquearInicioIntervalo, bloquearTerminoIntervalo, desbloquearInicioIntervalo, desbloquearTerminoIntervalo } from "./turno.mjs";

// Lista de voluntários
const listaDeVoluntarios = document.getElementById("corpoTabelaDeListagemDeVoluntarios");
Expand All @@ -14,34 +15,181 @@ const listaDeVoluntarios = document.getElementById("corpoTabelaDeListagemDeVolun
const btnInicioIntervalo = document.getElementById("cadastraInicioIntervalo");
const btnTerminoIntervalo = document.getElementById("cadastraTerminoIntervalo");
// Obtém a div para exibição dos horários de intervalo
const txtInicioIntervalo = document.getElementById("horarioInicioIntervalo");
const badgeHorariosIntervalo = document.getElementById("horariosDeIntervalo");

/**
*TODO: Associa um horário de início de intervalo ao voluntário
*/
listaDeVoluntarios.addEventListener("click", async (event) => {});

/**
* TODO: Associa um horário de término de intervalo ao voluntário
*/
listaDeVoluntarios.addEventListener("click", async (event) => {
// Limpa a exibição dos horários de intervalo
badgeHorariosIntervalo.textContent = "";

// Acessa as informações do voluntário
const idVoluntario = event.target.closest("tr").id;
const docVoluntarioRef = doc(db, "voluntario", idVoluntario);
const docFestivalRef = doc(docVoluntarioRef, 'festival', edicaoAtualFestival);
const festival = await getDoc(docFestivalRef);

// Obtém o horário já existente no banco
const horariosIntervalo = festival.data().expediente.horarios_sexta.intervalo;
const inicioIntervalo = horariosIntervalo.intervalo_1.inicio_intervalo;
const terminoIntervalo = horariosIntervalo.intervalo_1.termino_intervalo;

if (inicioIntervalo === null && terminoIntervalo === null) {
bloquearResgateVoucher();

console.log("Sem intervalo");

btnInicioIntervalo.addEventListener("click", async () => {
cadastraInicioIntervalo(docFestivalRef, horariosIntervalo);
});
}

if (inicioIntervalo !== null && terminoIntervalo === null) {
exibeHorarioIntervalo(inicioIntervalo, terminoIntervalo);
desbloquearResgateVoucher();

console.log("Intervalo iniciado");
}

if (inicioIntervalo !== null && terminoIntervalo !== null) {
exibeHorarioIntervalo(inicioIntervalo, terminoIntervalo);
bloquearResgateVoucher();

console.log("Intervalo finalizado");
}



btnTerminoIntervalo.addEventListener("click", async () => {
cadastraTerminoIntervalo(docFestivalRef, horariosIntervalo);
});
});

/**
* TODO: Exibe os horários de início e término de intervalo
*/
btnInicioIntervalo.addEventListener("click", async () => {
console.log("Início de intervalo");
});
btnTerminoIntervalo.addEventListener("click", async () => {
console.log("Término de intervalo");
});


/**
* Exibe as informações referentes ao(s) intervalo(s) realizado pelo voluntário
* @param {Timestamp} inicioIntervalo - Horário de início do intervalo
* @param {Timestamp} terminoIntervalo - Horário de término do intervalo
*/
function exibeHorarioIntervalo(inicioIntervalo, terminoIntervalo) {
let inicio = new Date(inicioIntervalo.toDate()).toLocaleTimeString("pt-BR", { hour12: false });

// Exibe apenas o horário de início do intervalo
if (inicio !== null && terminoIntervalo === null) {
badgeHorariosIntervalo.innerHTML = `
<div class="px-3">
<small class="row mb-1 px-1 py-2 badge rounded-pill bg-danger bg-opacity-25 text-dark">
<span> ${inicio} </span>
</small>
</div>
`;

return;
}

// Exibe o horário de início e término do intervalo
if (inicio !== null && terminoIntervalo !== null) {
let termino = new Date(terminoIntervalo.toDate()).toLocaleTimeString("pt-BR", { hour12: false });

badgeHorariosIntervalo.innerHTML = `
<div class="px-3">
<small class="row mb-1 px-1 py-2 badge rounded-pill bg-danger bg-opacity-25 text-dark">
<span> ${inicio} </span> • <span> ${termino} </span>
</small>
</div>
`;

return;
}
}

/**
* Cadastra o início de um novo intervalo para o voluntário
* @param {*} docFestivalRef
* @param {*} horariosIntervalo
*/
async function cadastraInicioIntervalo(docFestivalRef, horariosIntervalo) {
let ultimoIntervalo = Object.keys(horariosIntervalo).pop();
let identificaIntervalo = ultimoIntervalo.charAt(ultimoIntervalo.length - 1);
let incrementaIntervalo = String.fromCharCode(identificaIntervalo.charCodeAt(0) + 1);
let novoIntervalo = `intervalo_${incrementaIntervalo}`;

if (identificaIntervalo === "1") {
await setDoc(docFestivalRef, {
expediente: {
horarios_sexta: {
intervalo: {
[ultimoIntervalo]: {
inicio_intervalo: new Date(),
}
}
}
}
}, { merge: true }).then(() => {
console.log("Início do intervalo " + ultimoIntervalo + " cadastrado com sucesso");

bloquearInicioIntervalo();
desbloquearTerminoIntervalo();
desbloquearResgateVoucher();
}).catch((erro) => {
console.error("Erro ao cadastrar início de intervalo: ", erro);
});

return;
}

await updateDoc(docFestivalRef, {
"expediente.horarios_sexta.intervalo": {
...horariosIntervalo,
[novoIntervalo]: {
"inicio_intervalo": new Date(),
"termino_intervalo": null,
"resgate_voucher": null,
"devolucao_hapi": null
}
}
}).then(() => {
console.log("Início do intervalo " + incrementaIntervalo + " cadastrado com sucesso");

bloquearInicioIntervalo();
desbloquearTerminoIntervalo();
desbloquearResgateVoucher();
}).catch((erro) => {
console.error("Erro ao cadastrar início de intervalo: ", erro);
});
}

function cadastraTerminoIntervalo(docFestivalRef, horariosIntervalo) {
let ultimoIntervalo = Object.keys(horariosIntervalo).pop();
let identificaIntervalo = ultimoIntervalo.charAt(ultimoIntervalo.length - 1);


setDoc(docFestivalRef, {
expediente: {
horarios_sexta: {
intervalo: {
[ultimoIntervalo]: {
termino_intervalo: new Date(),
}
}
}
}
}, { merge: true }).then(() => {
console.log("Término do intervalo " + ultimoIntervalo + " cadastrado com sucesso");

desbloquearInicioIntervalo();
bloquearTerminoIntervalo();
bloquearResgateVoucher();
}).catch((erro) => {
console.error("Erro ao cadastrar término de intervalo: ", erro);
});

}
86 changes: 62 additions & 24 deletions fj-tech/src/js/voluntarios/festival/resgate_voucher.mjs
Original file line number Diff line number Diff line change
@@ -1,44 +1,82 @@
// Initializa a integração com o Firebase
import { db } from "../../firebaseConfig.mjs";
import { doc, getDoc, updateDoc } from "firebase/firestore";
import { doc, getDoc, setDoc } from "firebase/firestore";

import '../lista.mjs';

// Obtém o ano da edição atual do festival
import { edicaoAtualFestival } from "../lista.mjs";

/**
* TODO: Valida o resgate de voucher baseado no turno do voluntário
*/
// Obtém os elementos referentes ao resgate de voucher do voluntário
const btnResgateVoucher = document.getElementById("cadastraResgateVoucher");
const optResgateVoucher = document.getElementById("tipoVoucher");
const txtResgateVoucher = document.getElementById("informacoesResgateVoucher");

/**
* Cadastra o resgate de voucher do voluntário em um novo intervalo de trabalho
* Exibe as informações refentes à edição atual do festival relacionadas ao voluntário
* no offcanvas de gestão de recursos do voluntário no festival
*/
document.getElementById("corpoTabelaDeListagemDeVoluntarios").addEventListener("click", async (event) => {
const idVoluntario = event.target.closest("tr").id;
// Limpa o campo de informações de resgate de voucher
txtResgateVoucher.textContent = "";

// Acessa as informações do voluntário
const idVoluntario = event.target.closest("tr").id;
const docVoluntarioRef = doc(db, "voluntario", idVoluntario);
const docFestivalRef = doc(docVoluntarioRef, 'festival', edicaoAtualFestival);
const festival = await getDoc(docFestivalRef);

// Identifica o último intervalo cadastrado para obter a retirada de voucher
const horariosSexta = festival.data().expediente.horarios_sexta.intervalo;
console.log(horariosSexta);

const ultimoIntervalo = Object.keys(horariosSexta).pop();
const ultimoCaracter = ultimoIntervalo.charAt(ultimoIntervalo.length - 1);
const novoCaracter = String.fromCharCode(ultimoCaracter.charCodeAt(0) + 1);
const novoIntervalo = `intervalo_${novoCaracter}`;

await updateDoc(docFestivalRef, {
"expediente.horarios_sexta.intervalo": {
...horariosSexta,
[novoIntervalo]: {
"inicio_intervalo": new Date(),
"termino_intervalo": null,
"resgate_voucher": true,
"devolucao_hapi": false
let ultimoIntervalo = Object.keys(horariosSexta).pop();

/**
* Associa o tipo de voucher selecionado ao voluntário
*/
btnResgateVoucher.addEventListener("click", async (event) => {
let tipoVoucherDoVoluntario = optResgateVoucher.value;

await setDoc(docFestivalRef, {
expediente: {
horarios_sexta: {
intervalo: {
[ultimoIntervalo]: {
resgate_voucher: tipoVoucherDoVoluntario,
}
}
}
}
}
}, { merge: true }).then(() => {
console.log("Voucher resgatado com sucesso");

// Exibe o tipo de voucher resgatado pelo voluntário
txtResgateVoucher.innerHTML = `<small class="opacity-50 m-0 px-4">Voucher resgatado: ${tipoVoucherDoVoluntario}</small>`;
bloquearResgateVoucher();
}).catch((erro) => {
console.error("Erro ao resgatar voucher: ", erro);
});
});
console.log("Intervalo atualizado para corresponder ao resgate de voucher do voluntário");
});
});

/**
* TODO: Valida o resgate de voucher baseado no turno do voluntário
*/

export function bloquearResgateVoucher() {
// Desabilita o campo de seleção de voucher
optResgateVoucher.disabled = true;
optResgateVoucher.classList.remove("is-invalid");

// Desabilita o botão de resgate de voucher
btnResgateVoucher.disabled = true;
btnResgateVoucher.style.cursor = "not-allowed";
}

export function desbloquearResgateVoucher() {
// Habilita o campo de seleção de voucher
optResgateVoucher.disabled = false;

// Habilita o botão de resgate de voucher
btnResgateVoucher.disabled = false;
btnResgateVoucher.style.cursor = "pointer";
}
Loading

0 comments on commit 9bebdd9

Please sign in to comment.