Skip to content

Commit

Permalink
Ajout fiche de présence (#21)
Browse files Browse the repository at this point in the history
* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

* maj

* maj espace perso

* maj espace perso

* Espace perso (#17)

* Maj questionnaire (#8)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

---------

Co-authored-by: lollybet_antony <[email protected]>

* Maj espace perso (#9)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

---------

Co-authored-by: lollybet_antony <[email protected]>

* Maj espace perso (#10)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

---------

Co-authored-by: lollybet_antony <[email protected]>

* Update espace perso (#12)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

---------

Co-authored-by: lollybet_antony <[email protected]>

* Update from repo a (#13)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

* maj

---------

Co-authored-by: lollybet_antony <[email protected]>

* Maj test espace perso (#14)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

* maj

* maj espace perso

---------

Co-authored-by: lollybet_antony <[email protected]>

* MAJ ESPACE PERSO (#15)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

* maj

* maj espace perso

* maj espace perso

---------

Co-authored-by: lollybet_antony <[email protected]>

* Update from repo a (#16)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

* maj emails

* Update 3/06 - 14h14 (#4) (#5)

* maj comptes admin + dr

* mise à jour 29/05

* maj

* maj 29/05

* maj email style

* mise à jour 29/05

* maj comptes admin + dr (#1)

* maj 03/06 >> besoins + ajout titre par jour

* maj visuel session

* maj comptes DR

* maj session programme + dr

---------

Co-authored-by: lollybet_antony <[email protected]>

* last maj 17/06

* maj questionnaire

* maj espace perso

* maj

* maj espace perso

* maj espace perso

---------

Co-authored-by: lollybet_antony <[email protected]>

---------

Co-authored-by: lollybet_antony <[email protected]>

* update perso

* Ajout de console.log pour debug

* maj admin + questionnaire

* maj presence

---------

Co-authored-by: lollybet_antony <[email protected]>
  • Loading branch information
AntonyKLINGER and lollybet_antony authored Jun 27, 2024
1 parent d8a7fee commit 8433e3b
Show file tree
Hide file tree
Showing 7 changed files with 365 additions and 7 deletions.
15 changes: 9 additions & 6 deletions pages/_app.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Router from 'next/router';
import Router, { useRouter } from 'next/router';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import Head from 'next/head'
Expand All @@ -15,18 +15,21 @@ export default function App({ Component, pageProps }) {
Router.events.on('routeChangeComplete', () => NProgress.done());
Router.events.on('routeChangeError', () => NProgress.done());

const router = useRouter();
const isPresencePage = router.pathname === '/presence';

return (
<>
<Head>
<link rel="icon" href="favicon.ico" />
</Head>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet" />
<Header />
<div className="page">
<Component {...pageProps} />
</div>
<Footer />
{!isPresencePage && <Header />}
<div className="page">
<Component {...pageProps} />
</div>
{!isPresencePage && <Footer />}
</>
)
}
32 changes: 32 additions & 0 deletions pages/api/registrations/updatePresence.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// pages/api/registrations/updatePresence.js
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

export default async function handler(req, res) {
if (req.method === 'PUT') {
const { userId, sessionId, presence } = req.body;

try {
const updatedRegistration = await prisma.registration.updateMany({
where: {
userId: userId,
sessionId: sessionId,
},
data: {
presence: presence,
},
});

if (updatedRegistration.count === 0) {
return res.status(404).json({ message: 'Registration not found' });
}

res.status(200).json(updatedRegistration);
} catch (error) {
res.status(500).json({ message: 'Failed to update presence', error: error.message });
}
} else {
res.status(405).json({ message: 'Method not allowed' });
}
}
5 changes: 4 additions & 1 deletion pages/connexion.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,12 @@ export default function Login(){
});

const jwtJson = await jwtResponse.json();
if(jwtJson){
if(jwtJson && json.user.id != 115){
router.push('/espace-personnel');
}
else{
router.push('/presence');
}

} else {
setNotif({
Expand Down
168 changes: 168 additions & 0 deletions pages/presence.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
import { useState, useEffect } from 'react';
import nextCookies from 'next-cookies';
import { verifyToken } from '@/utils/auth';
import styles from '@/styles/Presence.module.css';

export async function getServerSideProps(context) {
const { auth: token } = nextCookies(context);
const user = verifyToken(token);

if (!user && user != 115) {
return {
redirect: {
destination: '/connexion',
permanent: false,
},
};
}

return { props: { user } };
}

export default function Presence() {
const [sessions, setSessions] = useState([]);
const [fiche, setFiche] = useState(0);
const [users, setUsers] = useState([]);
const [searchTerm, setSearchTerm] = useState('');

function formatDate(dateString) {
const date = new Date(dateString);
const day = date.getDate().toString().padStart(2, '0');
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const year = date.getFullYear();
return `${day}/${month}/${year}`;
}

const openFiche = async (id_session) => {
const geter = await fetch(`/api/registrations/bySession?sessionId=${id_session}`);
const json = await geter.json();
setUsers(json.sort((a, b) => a.nom.localeCompare(b.nom)));
setFiche(id_session);
};

const back = () => {
setUsers([]);
setFiche(0);
};

const updatePresence = async (userId, sessionId, isPresent) => {
const response = await fetch(`/api/registrations/updatePresence`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
userId,
sessionId,
presence: isPresent,
}),
});

if (!response.ok) {
console.error('Failed to update presence');
}
};

const handleCheckboxChange = (userId, sessionId, event) => {
const isPresent = event.target.checked;
updatePresence(userId, sessionId, isPresent);
};

useEffect(() => {
const getSessions = async () => {
const geter = await fetch(`/api/sessions`);
const json = await geter.json();

// Filter sessions
const today = new Date();
const minDate = new Date(today);
minDate.setDate(today.getDate() - 2);
const maxDate = new Date(today);
maxDate.setDate(today.getDate() + 2);

const filteredSessions = json.filter(session => {
const sessionDate = new Date(session.dateDebut);
return sessionDate >= minDate && sessionDate <= maxDate;
});

setSessions(filteredSessions);
};
getSessions();
}, []);

const handleSearchChange = (event) => {
setSearchTerm(event.target.value);
};

const filteredUsers = users.filter((user) =>
user.nom.toLowerCase().includes(searchTerm.toLowerCase()) ||
user.prenom.toLowerCase().includes(searchTerm.toLowerCase())
);

return (
<div className={styles.all}>
<div className={styles.pres}>
<h1>Sélectionnez une session</h1>
{fiche == 0 && (
<div className="mTop20">
{sessions.length > 0 ? (
<>
{sessions.map((session, i) => (
<div key={i} className={styles.session}>
<div className="flex toColumn aligncenter space-between">
<span className={styles.date}>{formatDate(session.dateDebut)}</span>
<span className={styles.region}>{session.departement} {session.region}</span>
</div>
<div className="flex align-end toColumn space-between mCenter">
<div className="w60 wm100">
<span className={styles.module}>Module :</span>
<span className={styles.nom}>{session.module.nom}</span>
</div>
<button className="mTop15" onClick={() => openFiche(session.id)}>Accéder à la fiche de présence</button>
</div>
</div>
))}
</>
) : (
<span>Pas de sessions en cours.</span>
)}
</div>
)}
{fiche != 0 && (
<div className="mTop20">
<button onClick={back} className={styles.back}>Revenir aux sessions</button>
<input
type="text"
placeholder="Rechercher une personne"
value={searchTerm}
onChange={handleSearchChange}
className={styles.search}
/>
{filteredUsers.length > 0 ? (
<>
{filteredUsers.map((u, i) => {
return (
<div key={i} className={styles.user}>
<div className="w80 flex aligncenter">
<span className={styles.nom}>{u.nom}</span>
<span className={styles.nom}>{u.prenom}</span>
</div>
<input
type="checkbox"
name="participe"
defaultChecked={u.presence}
onChange={(e) => handleCheckboxChange(u.userId, fiche, e)}
/>
</div>
)
})}
</>
) : (
<span>Pas de participants.</span>
)}
</div>
)}
</div>
</div>
);
}
1 change: 1 addition & 0 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ model Registration {
regime String?
deleted Boolean?
hebergement String?
presence Boolean?
session Session @relation(fields: [sessionId], references: [id])
user User @relation(fields: [userId], references: [id])
}
Expand Down
Loading

0 comments on commit 8433e3b

Please sign in to comment.