import '../core/api_client.dart'; import 'package:dio/dio.dart'; class TransferService { final ApiClient _apiClient; TransferService(this._apiClient); Future> create({ required int businessId, required DateTime documentDate, required int currencyId, required Map source, required Map destination, required double amount, double? commission, String? description, Map? extraInfo, }) async { final body = { 'document_date': documentDate.toIso8601String(), 'currency_id': currencyId, 'source': source, 'destination': destination, 'amount': amount, if (commission != null) 'commission': commission, if (description != null && description.isNotEmpty) 'description': description, if (extraInfo != null) 'extra_info': extraInfo, }; final res = await _apiClient.post('/businesses/$businessId/transfers/create', data: body); return (res.data as Map)['data'] as Map; } Future> list({ required int businessId, int skip = 0, int take = 20, String? search, DateTime? fromDate, DateTime? toDate, String? sortBy, bool sortDesc = true, }) async { final body = { 'skip': skip, 'take': take, 'sort_desc': sortDesc, if (sortBy != null) 'sort_by': sortBy, if (search != null && search.isNotEmpty) 'search': search, if (fromDate != null) 'from_date': fromDate.toUtc().toIso8601String(), if (toDate != null) 'to_date': toDate.toUtc().toIso8601String(), }; final res = await _apiClient.post('/businesses/$businessId/transfers', data: body); return (res.data as Map)['data'] as Map; } Future> exportExcel({ required int businessId, int skip = 0, int take = 1000, String? search, DateTime? fromDate, DateTime? toDate, String? sortBy, bool sortDesc = true, }) async { final body = { 'skip': skip, 'take': take, 'sort_desc': sortDesc, if (sortBy != null) 'sort_by': sortBy, if (search != null && search.isNotEmpty) 'search': search, if (fromDate != null) 'from_date': fromDate.toUtc().toIso8601String(), if (toDate != null) 'to_date': toDate.toUtc().toIso8601String(), }; final res = await _apiClient.post>( '/businesses/$businessId/transfers/export/excel', data: body, responseType: ResponseType.bytes, ); return res.data ?? []; } Future> exportPdf({ required int businessId, int skip = 0, int take = 1000, String? search, DateTime? fromDate, DateTime? toDate, String? sortBy, bool sortDesc = true, }) async { final body = { 'skip': skip, 'take': take, 'sort_desc': sortDesc, if (sortBy != null) 'sort_by': sortBy, if (search != null && search.isNotEmpty) 'search': search, if (fromDate != null) 'from_date': fromDate.toUtc().toIso8601String(), if (toDate != null) 'to_date': toDate.toUtc().toIso8601String(), }; final res = await _apiClient.post>( '/businesses/$businessId/transfers/export/pdf', data: body, responseType: ResponseType.bytes, ); return res.data ?? []; } Future> getById(int documentId) async { final res = await _apiClient.get('/transfers/$documentId'); return (res.data as Map)['data'] as Map; } Future> update({ required int documentId, required DateTime documentDate, required int currencyId, required Map source, required Map destination, required double amount, double? commission, String? description, Map? extraInfo, }) async { final body = { 'document_date': documentDate.toIso8601String(), 'currency_id': currencyId, 'source': source, 'destination': destination, 'amount': amount, if (commission != null) 'commission': commission, if (description != null && description.isNotEmpty) 'description': description, if (extraInfo != null) 'extra_info': extraInfo, }; final res = await _apiClient.put('/transfers/$documentId', data: body); return (res.data as Map)['data'] as Map; } Future deleteById(int documentId) async { await _apiClient.delete('/transfers/$documentId'); } }