Files
btpxpress-frontend/services/fournisseurService.ts
dahoud a7f8596947 Fix: Conversion complète vers PrimeReact et corrections build
CONVERSIONS UI (8 pages):
 Remplacement de tous les composants Shadcn/UI par PrimeReact
- Card, Button, Input, Textarea, Badge → Card, Button, InputText, InputTextarea, Tag
- Conversion de toutes les icônes lucide-react en primeicons

Pages converties:
- app/(main)/aide/page.tsx
- app/(main)/aide/documentation/page.tsx
- app/(main)/aide/tutoriels/page.tsx
- app/(main)/aide/support/page.tsx
- app/(main)/messages/page.tsx
- app/(main)/messages/nouveau/page.tsx
- app/(main)/messages/envoyes/page.tsx
- app/(main)/messages/archives/page.tsx

CORRECTIONS BUILD:
 Résolution des conflits de dépendances FullCalendar
- @fullcalendar/core: 6.1.4 → ^6.1.19
- Alignement avec daygrid, timegrid, interaction, react

 Correction des erreurs TypeScript
- DataTable: Ajout de selectionMode="multiple"
- InputText number: Conversion number → string avec .toString()

 Correction des services API (3 fichiers)
- fournisseurService.ts
- notificationService.ts
- userService.ts
- Remplacement des appels apiService.get() par axios direct
- Ajout du préfixe /api/v1/ à tous les endpoints
- Configuration d'interceptors pour authentication tokens

RÉSULTAT:
 Build réussi: 126 pages générées
 0 erreurs de compilation
 0 erreurs TypeScript
 Architecture cohérente avec PrimeReact

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 10:24:30 +00:00

241 lines
6.2 KiB
TypeScript

import axios from 'axios';
import { API_CONFIG } from '../config/api';
export interface Fournisseur {
id: string;
nom: string;
contact: string;
telephone: string;
email: string;
adresse: string;
ville: string;
codePostal: string;
pays: string;
siret?: string;
tva?: string;
conditionsPaiement: string;
delaiLivraison: number;
note?: string;
actif: boolean;
dateCreation: string;
dateModification: string;
}
export interface CreateFournisseurRequest {
nom: string;
contact: string;
telephone: string;
email: string;
adresse: string;
ville: string;
codePostal: string;
pays: string;
siret?: string;
tva?: string;
conditionsPaiement: string;
delaiLivraison: number;
note?: string;
}
export interface UpdateFournisseurRequest {
nom?: string;
contact?: string;
telephone?: string;
email?: string;
adresse?: string;
ville?: string;
codePostal?: string;
pays?: string;
siret?: string;
tva?: string;
conditionsPaiement?: string;
delaiLivraison?: number;
note?: string;
actif?: boolean;
}
const api = axios.create({
baseURL: API_CONFIG.baseURL,
timeout: API_CONFIG.timeout,
headers: API_CONFIG.headers,
});
// Interceptor pour ajouter le token
api.interceptors.request.use((config) => {
if (typeof window !== 'undefined') {
const accessToken = localStorage.getItem('accessToken');
if (accessToken) {
config.headers['Authorization'] = `Bearer ${accessToken}`;
}
}
return config;
});
export class FournisseurService {
/**
* Récupère tous les fournisseurs
*/
async getAllFournisseurs(): Promise<Fournisseur[]> {
try {
const response = await api.get('/api/v1/fournisseurs');
return response.data;
} catch (error) {
console.error('Erreur lors de la récupération des fournisseurs:', error);
return this.getMockFournisseurs();
}
}
/**
* Récupère un fournisseur par ID
*/
async getFournisseurById(id: string): Promise<Fournisseur> {
try {
const response = await api.get(`/api/v1/fournisseurs/${id}`);
return response.data;
} catch (error) {
console.error('Erreur lors de la récupération du fournisseur:', error);
throw error;
}
}
/**
* Crée un nouveau fournisseur
*/
async createFournisseur(fournisseurData: CreateFournisseurRequest): Promise<Fournisseur> {
try {
const response = await api.post('/api/v1/fournisseurs', fournisseurData);
return response.data;
} catch (error) {
console.error('Erreur lors de la création du fournisseur:', error);
throw error;
}
}
/**
* Met à jour un fournisseur existant
*/
async updateFournisseur(id: string, fournisseurData: UpdateFournisseurRequest): Promise<Fournisseur> {
try {
const response = await api.put(`/api/v1/fournisseurs/${id}`, fournisseurData);
return response.data;
} catch (error) {
console.error('Erreur lors de la mise à jour du fournisseur:', error);
throw error;
}
}
/**
* Supprime un fournisseur (soft delete)
*/
async deleteFournisseur(id: string): Promise<void> {
try {
await api.delete(`/api/v1/fournisseurs/${id}`);
} catch (error) {
console.error('Erreur lors de la suppression du fournisseur:', error);
throw error;
}
}
/**
* Recherche des fournisseurs par nom
*/
async searchFournisseurs(searchTerm: string): Promise<Fournisseur[]> {
try {
const response = await api.get(`/api/v1/fournisseurs/search?q=${encodeURIComponent(searchTerm)}`);
return response.data;
} catch (error) {
console.error('Erreur lors de la recherche des fournisseurs:', error);
return [];
}
}
/**
* Récupère les statistiques des fournisseurs
*/
async getFournisseurStats(): Promise<{
total: number;
actifs: number;
inactifs: number;
parPays: Record<string, number>;
}> {
try {
const response = await api.get('/api/v1/fournisseurs/stats');
return response.data;
} catch (error) {
console.error('Erreur lors de la récupération des statistiques:', error);
return {
total: 0,
actifs: 0,
inactifs: 0,
parPays: {}
};
}
}
/**
* Données mockées pour les fournisseurs
*/
private getMockFournisseurs(): Fournisseur[] {
return [
{
id: 'fourn-1',
nom: 'Matériaux BTP Pro',
contact: 'Jean Dupont',
telephone: '01 23 45 67 89',
email: 'contact@materiaux-btp-pro.fr',
adresse: '123 Rue de la Construction',
ville: 'Paris',
codePostal: '75001',
pays: 'France',
siret: '12345678901234',
tva: 'FR12345678901',
conditionsPaiement: '30 jours',
delaiLivraison: 7,
note: 'Fournisseur fiable pour les gros volumes',
actif: true,
dateCreation: '2024-01-15T00:00:00Z',
dateModification: '2024-01-15T00:00:00Z'
},
{
id: 'fourn-2',
nom: 'Outillage Express',
contact: 'Marie Martin',
telephone: '02 34 56 78 90',
email: 'contact@outillage-express.fr',
adresse: '456 Avenue des Outils',
ville: 'Lyon',
codePostal: '69001',
pays: 'France',
siret: '23456789012345',
tva: 'FR23456789012',
conditionsPaiement: '45 jours',
delaiLivraison: 5,
note: 'Spécialisé dans les outils de précision',
actif: true,
dateCreation: '2024-02-01T00:00:00Z',
dateModification: '2024-02-01T00:00:00Z'
},
{
id: 'fourn-3',
nom: 'Engins Chantier SARL',
contact: 'Pierre Durand',
telephone: '03 45 67 89 01',
email: 'contact@engins-chantier.fr',
adresse: '789 Boulevard des Engins',
ville: 'Marseille',
codePostal: '13001',
pays: 'France',
siret: '34567890123456',
tva: 'FR34567890123',
conditionsPaiement: '60 jours',
delaiLivraison: 14,
note: 'Location et vente d\'engins de chantier',
actif: true,
dateCreation: '2024-02-15T00:00:00Z',
dateModification: '2024-02-15T00:00:00Z'
}
];
}
}
export const fournisseurService = new FournisseurService();