import { apiService } from './api'; interface PaymentRecordRequest { factureId: string; montant: number; datePaiement: string; modePaiement: 'VIREMENT' | 'CHEQUE' | 'ESPECES' | 'CARTE'; reference?: string; notes?: string; } interface RelanceRequest { factureId: string; type: 'GENTILLE' | 'FERME' | 'URGENTE'; message?: string; delaiSupplementaire?: number; // en jours } interface PaymentPlanRequest { factureId: string; nbEcheances: number; datePremiereEcheance: string; montantEcheance: number; conditions?: string; } interface MiseEnDemeureRequest { factureId: string; delaiPaiement: number; // en jours mentionsLegales: string; fraisDossier?: number; } interface ClientSuspensionRequest { clientId: string; motif: string; duree?: number; // en jours, si temporaire temporaire: boolean; } interface AvoirCreationRequest { factureOriginaleId: string; motif: string; montant: number; lignesRetournees: string[]; // IDs des lignes concernées notes?: string; } class FactureActionsService { /** * Enregistrer un paiement */ async recordPayment(request: PaymentRecordRequest): Promise { try { await apiService.api.post(`/factures/${request.factureId}/payment`, request); } catch (error) { console.error('Erreur lors de l\'enregistrement du paiement:', error); throw new Error('Impossible d\'enregistrer le paiement. Veuillez réessayer.'); } } /** * Envoyer une relance */ async sendRelance(request: RelanceRequest): Promise { try { await apiService.api.post(`/factures/${request.factureId}/relance`, request); } catch (error) { console.error('Erreur lors de l\'envoi de la relance:', error); throw new Error('Impossible d\'envoyer la relance. Veuillez réessayer.'); } } /** * Planifier un échéancier de paiement */ async createPaymentPlan(request: PaymentPlanRequest): Promise { try { await apiService.api.post(`/factures/${request.factureId}/payment-plan`, request); } catch (error) { console.error('Erreur lors de la création de l\'échéancier:', error); throw new Error('Impossible de créer l\'échéancier. Veuillez réessayer.'); } } /** * Envoyer une mise en demeure */ async sendMiseEnDemeure(request: MiseEnDemeureRequest): Promise { try { await apiService.api.post(`/factures/${request.factureId}/mise-en-demeure`, request); } catch (error) { console.error('Erreur lors de l\'envoi de la mise en demeure:', error); throw new Error('Impossible d\'envoyer la mise en demeure. Veuillez réessayer.'); } } /** * Suspendre un client */ async suspendClient(request: ClientSuspensionRequest): Promise { try { await apiService.api.post(`/clients/${request.clientId}/suspend`, request); } catch (error) { console.error('Erreur lors de la suspension du client:', error); throw new Error('Impossible de suspendre le client. Veuillez réessayer.'); } } /** * Créer un avoir */ async createAvoir(request: AvoirCreationRequest): Promise { try { await apiService.api.post('/factures/avoir', request); } catch (error) { console.error('Erreur lors de la création de l\'avoir:', error); throw new Error('Impossible de créer l\'avoir. Veuillez réessayer.'); } } /** * Envoyer une relance urgente */ async sendUrgentRelance(factureId: string, message: string): Promise { await this.sendRelance({ factureId, type: 'URGENTE', message, delaiSupplementaire: 7 }); } } export default new FactureActionsService();