Added market place specific feature
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import '../../../core/network/dio_client.dart';
|
||||
import '../domain/credit_note.dart';
|
||||
import 'invoices_provider.dart';
|
||||
|
||||
class CreditNotesNotifier extends AsyncNotifier<List<CreditNote>> {
|
||||
@override
|
||||
FutureOr<List<CreditNote>> build() async {
|
||||
return _fetchCreditNotes();
|
||||
}
|
||||
|
||||
Future<List<CreditNote>> _fetchCreditNotes() async {
|
||||
try {
|
||||
final response = await DioClient().dio.get('/credit-notes');
|
||||
if (response.statusCode == 200) {
|
||||
final List<dynamic> data = response.data;
|
||||
return data.map((e) => CreditNote.fromJson(e)).toList();
|
||||
}
|
||||
return [];
|
||||
} catch (e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> refresh() async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final creditNotes = await _fetchCreditNotes();
|
||||
state = AsyncValue.data(creditNotes);
|
||||
} catch (e, stack) {
|
||||
state = AsyncValue.error(e, stack);
|
||||
}
|
||||
}
|
||||
|
||||
Future<CreditNote?> createCreditNote(int invoiceId, CreditNote creditNote) async {
|
||||
try {
|
||||
final response = await DioClient().dio.post(
|
||||
'/invoices/$invoiceId/credit-notes',
|
||||
data: creditNote.toJson(),
|
||||
);
|
||||
await refresh();
|
||||
ref.refresh(invoicesProvider);
|
||||
if (response.data != null) {
|
||||
return CreditNote.fromJson(response.data);
|
||||
}
|
||||
return null;
|
||||
} catch (e) {
|
||||
if (e is DioException) {
|
||||
throw Exception(
|
||||
'Failed to process return: ${e.response?.statusCode} - ${e.response?.data}',
|
||||
);
|
||||
}
|
||||
throw Exception('Failed to process return: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final creditNotesProvider =
|
||||
AsyncNotifierProvider<CreditNotesNotifier, List<CreditNote>>(CreditNotesNotifier.new);
|
||||
|
||||
final invoiceCreditNotesProvider =
|
||||
FutureProvider.family<List<CreditNote>, int>((ref, invoiceId) async {
|
||||
try {
|
||||
final response = await DioClient().dio.get('/invoices/$invoiceId/credit-notes');
|
||||
if (response.statusCode == 200) {
|
||||
final List<dynamic> data = response.data;
|
||||
return data.map((e) => CreditNote.fromJson(e)).toList();
|
||||
}
|
||||
return [];
|
||||
} catch (e) {
|
||||
return [];
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user