Revert "V1_GTA"

This reverts commit 881476122c.
This commit is contained in:
2025-12-02 17:50:31 +01:00
parent 0dc7125688
commit 6f75a66906
54 changed files with 5645 additions and 7619 deletions

View File

@@ -96,7 +96,7 @@ const CompteRenduActivites = () => {
setIsLoading(true);
try {
const response = await fetch(`/getCompteRenduActivites?user_id=${userId}&annee=${annee}&mois=${mois}`);
const response = await fetch(`http://localhost:3000/getCompteRenduActivites?user_id=${userId}&annee=${annee}&mois=${mois}`);
const data = await response.json();
if (data.success) {
@@ -106,7 +106,7 @@ const CompteRenduActivites = () => {
console.log('📊 Détail des jours:', data.jours);
}
const congesResponse = await fetch(`/getTeamLeaves?user_id=${userId}&role=${user.role}`);
const congesResponse = await fetch(`http://localhost:3000/getTeamLeaves?user_id=${userId}&role=${user.role}`);
const congesData = await congesResponse.json();
if (congesData.success) {
@@ -125,7 +125,7 @@ const CompteRenduActivites = () => {
if (!userId || !hasAccess()) return;
try {
const response = await fetch(`/getStatsAnnuelles?user_id=${userId}&annee=${annee}`);
const response = await fetch(`http://localhost:3000/getStatsAnnuelles?user_id=${userId}&annee=${annee}`);
const data = await response.json();
if (data.success) {
@@ -163,38 +163,22 @@ const CompteRenduActivites = () => {
return selectedYear === previousYear && selectedMonth === previousMonth;
};
// Générer les jours du mois (lundi-samedi) avec décalage correct
// Générer les jours du mois (lundi-vendredi)
const getDaysInMonth = () => {
const year = currentDate.getFullYear();
const month = currentDate.getMonth();
const firstDay = new Date(year, month, 1);
const lastDay = new Date(year, month + 1, 0);
const daysInMonth = lastDay.getDate();
// Jour de la semaine du 1er (0=dimanche, 1=lundi, ..., 6=samedi)
let firstDayOfWeek = firstDay.getDay();
// Convertir pour que lundi = 0, mardi = 1, ..., samedi = 5, dimanche = 6
firstDayOfWeek = firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1;
const days = [];
// Ajouter des cases vides pour le décalage initial
for (let i = 0; i < firstDayOfWeek; i++) {
days.push(null);
}
// Ajouter tous les jours du mois (lundi-samedi uniquement)
for (let day = 1; day <= daysInMonth; day++) {
const currentDay = new Date(year, month, day);
const dayOfWeek = currentDay.getDay();
// Exclure les dimanches (0)
if (dayOfWeek !== 0) {
if (dayOfWeek >= 1 && dayOfWeek <= 5) {
days.push(currentDay);
}
}
return days;
};
@@ -251,8 +235,6 @@ const CompteRenduActivites = () => {
// Ouvrir le modal de saisie
const handleJourClick = (date) => {
if (!date) return; // Ignorer les cases vides
if (!isMoisAutorise() && !isRH) {
showInfo('Vous ne pouvez saisir que pour le mois en cours ou le mois précédent', 'warning');
return;
@@ -302,7 +284,7 @@ const CompteRenduActivites = () => {
setIsSaving(true);
try {
const response = await fetch('/saveCompteRenduJour', {
const response = await fetch('http://localhost:3000/saveCompteRenduJour', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
@@ -345,7 +327,7 @@ const CompteRenduActivites = () => {
setIsSaving(true);
try {
const response = await fetch('/saveCompteRenduMasse', {
const response = await fetch('http://localhost:3000/saveCompteRenduMasse', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
@@ -505,7 +487,14 @@ const CompteRenduActivites = () => {
<p className="text-sm opacity-90">Jours travaillés</p>
<p className="text-3xl font-bold">{statsAnnuelles.totalJoursTravailles || 0}</p>
</div>
<div className="bg-white bg-opacity-20 rounded-lg p-4">
<p className="text-sm opacity-90">Non-respect repos quotidien</p>
<p className="text-3xl font-bold">{statsAnnuelles.totalNonRespectQuotidien || 0}</p>
</div>
<div className="bg-white bg-opacity-20 rounded-lg p-4">
<p className="text-sm opacity-90">Non-respect repos hebdo</p>
<p className="text-3xl font-bold">{statsAnnuelles.totalNonRespectHebdo || 0}</p>
</div>
</div>
</div>
)}
@@ -563,30 +552,23 @@ const CompteRenduActivites = () => {
<span className="hidden sm:inline">Saisie en masse</span>
</button>
</div>
</div>
</div>
{/* Calendrier */}
<div className="bg-white rounded-lg border overflow-hidden shadow-sm">
<div className="grid grid-cols-6 gap-2 p-4 bg-gray-50">
{['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'].map(day => (
<div className="grid grid-cols-5 gap-2 p-4 bg-gray-50">
{['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi'].map(day => (
<div key={day} className="text-center font-semibold text-gray-700 text-sm">
{day}
</div>
))}
</div>
<div className="grid grid-cols-6 gap-2 p-4">
<div className="grid grid-cols-5 gap-2 p-4">
{days.map((date, index) => {
// Case vide pour le décalage
if (date === null) {
return (
<div key={`empty-${index}`} className="min-h-[100px] p-3"></div>
);
}
const jourData = getJourData(date);
const enConge = isJourEnConge(date);
const ferie = isHoliday(date);
@@ -725,7 +707,17 @@ const CompteRenduActivites = () => {
</h3>
<div className="space-y-4">
<div>
<label className="flex items-center gap-3 cursor-pointer">
<input
type="checkbox"
checked={selectedJour.jourTravaille}
onChange={(e) => setSelectedJour({ ...selectedJour, jourTravaille: e.target.checked })}
className="w-5 h-5 text-blue-600 rounded"
/>
<span className="text-gray-700 font-medium">Jour travaillé</span>
</label>
</div>
{selectedJour.jourTravaille && (
<>
@@ -823,7 +815,7 @@ const CompteRenduActivites = () => {
<SaisieMasseModal
mois={mois}
annee={annee}
days={days.filter(d => d !== null)} // Filtrer les cases vides
days={days}
congesData={congesData}
holidays={holidays}
onClose={() => setShowSaisieMasse(false)}
@@ -902,30 +894,6 @@ const SaisieMasseModal = ({ mois, annee, days, congesData, holidays, onClose, on
onSave(joursTravailles);
};
// Générer les jours avec décalage pour la saisie en masse aussi
const getDaysWithOffset = () => {
const year = annee;
const month = mois - 1;
const firstDay = new Date(year, month, 1);
let firstDayOfWeek = firstDay.getDay();
firstDayOfWeek = firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1;
const daysWithOffset = [];
// Ajouter des cases vides pour le décalage
for (let i = 0; i < firstDayOfWeek; i++) {
daysWithOffset.push(null);
}
// Ajouter les jours réels
daysWithOffset.push(...days);
return daysWithOffset;
};
const daysWithOffset = getDaysWithOffset();
return (
<div className="fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center p-4">
<div className="bg-white rounded-xl shadow-xl max-w-4xl w-full p-6 max-h-[90vh] overflow-y-auto">
@@ -947,15 +915,8 @@ const SaisieMasseModal = ({ mois, annee, days, congesData, holidays, onClose, on
Sélectionner tous les jours ouvrés disponibles
</button>
<div className="grid grid-cols-6 gap-2 p-4">
{daysWithOffset.map((date, index) => {
// Case vide
if (date === null) {
return (
<div key={`empty-${index}`} className="p-3"></div>
);
}
<div className="grid grid-cols-5 gap-2 mb-6">
{days.map((date, index) => {
const dateStr = formatDateToString(date);
const enConge = isJourEnConge(date);
const ferie = isHoliday(date);