Files
btpxpress-frontend/services/factureActionsService.ts

135 lines
4.0 KiB
TypeScript
Executable File

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<void> {
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<void> {
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<void> {
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<void> {
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<void> {
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<void> {
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<void> {
await this.sendRelance({
factureId,
type: 'URGENTE',
message,
delaiSupplementaire: 7
});
}
}
export default new FactureActionsService();