|
@@ -185,7 +185,7 @@
|
|
|
trip.registrationClosed ? 'text-gray-400' : 'text-gray-500'
|
|
trip.registrationClosed ? 'text-gray-400' : 'text-gray-500'
|
|
|
]"
|
|
]"
|
|
|
>
|
|
>
|
|
|
- {{ formatTime(trip.departureTime) }} - {{ formatTime(trip.arrivalTime) }}
|
|
|
|
|
|
|
+ {{ formatDateTime(trip.departureDateTime) }} - {{ formatDateTime(trip.arrivalDateTime) }}
|
|
|
</p>
|
|
</p>
|
|
|
<p v-if="trip.vehicule"
|
|
<p v-if="trip.vehicule"
|
|
|
:class="[
|
|
:class="[
|
|
@@ -290,6 +290,7 @@ import EmployeeService, { type AssignedTrip } from '@/services/EmployeeService'
|
|
|
import TripService from '@/services/TripService'
|
|
import TripService from '@/services/TripService'
|
|
|
import { useCompanies } from '@/composables/useCompanies'
|
|
import { useCompanies } from '@/composables/useCompanies'
|
|
|
import { useUserCompanyStore } from '@/stores/useCompanyStore'
|
|
import { useUserCompanyStore } from '@/stores/useCompanyStore'
|
|
|
|
|
+import { formatDate } from '@vueuse/core'
|
|
|
|
|
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
|
const userStore = useUserStore()
|
|
const userStore = useUserStore()
|
|
@@ -333,6 +334,7 @@ const tabs = computed(() => [
|
|
|
|
|
|
|
|
// Computed
|
|
// Computed
|
|
|
const nextTripTime = computed(() => {
|
|
const nextTripTime = computed(() => {
|
|
|
|
|
+ console.log('nextTripTime =>', todayTrips.value)
|
|
|
if (todayTrips.value.length > 0) {
|
|
if (todayTrips.value.length > 0) {
|
|
|
return todayTrips.value[0].departureTime
|
|
return todayTrips.value[0].departureTime
|
|
|
}
|
|
}
|
|
@@ -417,6 +419,8 @@ const loadCompanyTrips = async () => {
|
|
|
hour: '2-digit',
|
|
hour: '2-digit',
|
|
|
minute: '2-digit'
|
|
minute: '2-digit'
|
|
|
}),
|
|
}),
|
|
|
|
|
+ departureDateTime: trip.departAt, // Date complète de départ
|
|
|
|
|
+ arrivalDateTime: trip.arriveAt, // Date complète d'arrivée
|
|
|
passengers: actualPassengers, // Nombre réel de réservations
|
|
passengers: actualPassengers, // Nombre réel de réservations
|
|
|
capacity: trip.vehicule?.number_places || 0,
|
|
capacity: trip.vehicule?.number_places || 0,
|
|
|
vehicule: trip.vehicule, // Ajouter l'objet véhicule complet
|
|
vehicule: trip.vehicule, // Ajouter l'objet véhicule complet
|
|
@@ -440,6 +444,8 @@ const loadCompanyTrips = async () => {
|
|
|
hour: '2-digit',
|
|
hour: '2-digit',
|
|
|
minute: '2-digit'
|
|
minute: '2-digit'
|
|
|
}),
|
|
}),
|
|
|
|
|
+ departureDateTime: trip.departAt, // Date complète de départ
|
|
|
|
|
+ arrivalDateTime: trip.arriveAt, // Date complète d'arrivée
|
|
|
passengers: Math.max(0, (trip.vehicule?.number_places || 0) - trip.availableSeats),
|
|
passengers: Math.max(0, (trip.vehicule?.number_places || 0) - trip.availableSeats),
|
|
|
capacity: trip.vehicule?.number_places || 0,
|
|
capacity: trip.vehicule?.number_places || 0,
|
|
|
vehicule: trip.vehicule, // Ajouter l'objet véhicule complet
|
|
vehicule: trip.vehicule, // Ajouter l'objet véhicule complet
|
|
@@ -508,14 +514,18 @@ const loadTrips = async () => {
|
|
|
return {
|
|
return {
|
|
|
...trip,
|
|
...trip,
|
|
|
passengers: actualPassengers, // Remplacer par le nombre réel de réservations
|
|
passengers: actualPassengers, // Remplacer par le nombre réel de réservations
|
|
|
- registrationClosed: trip.registrationClosed || false // S'assurer que registrationClosed est présent
|
|
|
|
|
|
|
+ registrationClosed: trip.registrationClosed || false, // S'assurer que registrationClosed est présent
|
|
|
|
|
+ departureDateTime: trip.date + 'T' + trip.departureTime + ':00', // Construire la date complète de départ
|
|
|
|
|
+ arrivalDateTime: trip.date + 'T' + trip.arrivalTime + ':00' // Construire la date complète d'arrivée
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error(`Erreur lors de la récupération des passagers pour le trajet ${trip.id}:`, error)
|
|
console.error(`Erreur lors de la récupération des passagers pour le trajet ${trip.id}:`, error)
|
|
|
// Garder les données originales en cas d'erreur avec registrationClosed
|
|
// Garder les données originales en cas d'erreur avec registrationClosed
|
|
|
return {
|
|
return {
|
|
|
...trip,
|
|
...trip,
|
|
|
- registrationClosed: trip.registrationClosed || false
|
|
|
|
|
|
|
+ registrationClosed: trip.registrationClosed || false,
|
|
|
|
|
+ departureDateTime: trip.date + 'T' + trip.departureTime + ':00', // Construire la date complète de départ
|
|
|
|
|
+ arrivalDateTime: trip.date + 'T' + trip.arrivalTime + ':00' // Construire la date complète d'arrivée
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
@@ -526,7 +536,7 @@ const loadTrips = async () => {
|
|
|
// Mettre à jour aussi allTrips pour la cohérence
|
|
// Mettre à jour aussi allTrips pour la cohérence
|
|
|
allTrips.value = [...tripsWithPassengers]
|
|
allTrips.value = [...tripsWithPassengers]
|
|
|
|
|
|
|
|
- console.log('✅ Trajets assignés chargés:', tripsWithPassengers.length)
|
|
|
|
|
|
|
+ console.log('✅ Trajets assignés chargés:', tripsWithPassengers)
|
|
|
console.log('📋 todayTrips.value:', todayTrips.value)
|
|
console.log('📋 todayTrips.value:', todayTrips.value)
|
|
|
|
|
|
|
|
// Si aucun trajet assigné, utiliser les trajets de l'entreprise comme fallback
|
|
// Si aucun trajet assigné, utiliser les trajets de l'entreprise comme fallback
|
|
@@ -535,71 +545,7 @@ const loadTrips = async () => {
|
|
|
todayTrips.value = companyTrips.value
|
|
todayTrips.value = companyTrips.value
|
|
|
allTrips.value = [...companyTrips.value]
|
|
allTrips.value = [...companyTrips.value]
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // Ajouter temporairement des données de test avec registrationClosed pour démonstration
|
|
|
|
|
- if (todayTrips.value.length === 0) {
|
|
|
|
|
- console.log('🧪 Ajout de données de test avec registrationClosed')
|
|
|
|
|
- todayTrips.value = [
|
|
|
|
|
- {
|
|
|
|
|
- id: 1,
|
|
|
|
|
- departure: 'Abidjan',
|
|
|
|
|
- arrival: 'Yamoussoukro',
|
|
|
|
|
- departureTime: '08:00',
|
|
|
|
|
- arrivalTime: '10:30',
|
|
|
|
|
- passengers: 25,
|
|
|
|
|
- capacity: 30,
|
|
|
|
|
- registrationClosed: false,
|
|
|
|
|
- vehicule: { type: 'Bus', immatriculation: 'AB-123-CI', number_places: 30 },
|
|
|
|
|
- status: 'scheduled',
|
|
|
|
|
- vehicle: { id: 1, licensePlate: 'AB-123-CI', model: 'Mercedes', capacity: 30 },
|
|
|
|
|
- company: { id: 1, name: 'Transport Express' },
|
|
|
|
|
- route: {
|
|
|
|
|
- id: 1,
|
|
|
|
|
- departureStation: { id: 1, name: 'Abidjan', city: 'Abidjan' },
|
|
|
|
|
- arrivalStation: { id: 2, name: 'Yamoussoukro', city: 'Yamoussoukro' }
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 2,
|
|
|
|
|
- departure: 'Bouaké',
|
|
|
|
|
- arrival: 'Korhogo',
|
|
|
|
|
- departureTime: '14:00',
|
|
|
|
|
- arrivalTime: '17:00',
|
|
|
|
|
- passengers: 18,
|
|
|
|
|
- capacity: 25,
|
|
|
|
|
- registrationClosed: true, // Trajet avec enregistrement fermé
|
|
|
|
|
- vehicule: { type: 'Minibus', immatriculation: 'BK-456-CI', number_places: 25 },
|
|
|
|
|
- status: 'scheduled',
|
|
|
|
|
- vehicle: { id: 2, licensePlate: 'BK-456-CI', model: 'Toyota', capacity: 25 },
|
|
|
|
|
- company: { id: 1, name: 'Transport Express' },
|
|
|
|
|
- route: {
|
|
|
|
|
- id: 2,
|
|
|
|
|
- departureStation: { id: 3, name: 'Bouaké', city: 'Bouaké' },
|
|
|
|
|
- arrivalStation: { id: 4, name: 'Korhogo', city: 'Korhogo' }
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 3,
|
|
|
|
|
- departure: 'San Pedro',
|
|
|
|
|
- arrival: 'Abidjan',
|
|
|
|
|
- departureTime: '16:30',
|
|
|
|
|
- arrivalTime: '19:45',
|
|
|
|
|
- passengers: 12,
|
|
|
|
|
- capacity: 20,
|
|
|
|
|
- registrationClosed: true, // Autre trajet avec enregistrement fermé
|
|
|
|
|
- vehicule: { type: 'Bus', immatriculation: 'SP-789-CI', number_places: 20 },
|
|
|
|
|
- status: 'scheduled',
|
|
|
|
|
- vehicle: { id: 3, licensePlate: 'SP-789-CI', model: 'Iveco', capacity: 20 },
|
|
|
|
|
- company: { id: 1, name: 'Transport Express' },
|
|
|
|
|
- route: {
|
|
|
|
|
- id: 3,
|
|
|
|
|
- departureStation: { id: 5, name: 'San Pedro', city: 'San Pedro' },
|
|
|
|
|
- arrivalStation: { id: 1, name: 'Abidjan', city: 'Abidjan' }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- ]
|
|
|
|
|
- allTrips.value = [...todayTrips.value]
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error('❌ Erreur lors du chargement des trajets:', error)
|
|
console.error('❌ Erreur lors du chargement des trajets:', error)
|
|
|
}
|
|
}
|
|
@@ -660,6 +606,15 @@ const onTicketValidated = async (ticketData: any) => {
|
|
|
const formatTime = (time: string) => {
|
|
const formatTime = (time: string) => {
|
|
|
return time
|
|
return time
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+const formatDateTime = (dateTime: string) => {
|
|
|
|
|
+ return new Date(dateTime).toLocaleString('fr-FR', {
|
|
|
|
|
+ hour: '2-digit',
|
|
|
|
|
+ minute: '2-digit',
|
|
|
|
|
+ day: '2-digit',
|
|
|
|
|
+ month: '2-digit',
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
// Lifecycle
|
|
// Lifecycle
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
// Charger les données depuis l'API
|
|
// Charger les données depuis l'API
|