first commit
This commit is contained in:
132
lib/Screens/Due Calculation/Repo/due_repo.dart
Normal file
132
lib/Screens/Due Calculation/Repo/due_repo.dart
Normal file
@@ -0,0 +1,132 @@
|
||||
// ignore_for_file: unused_local_variable
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import '../../../Const/api_config.dart';
|
||||
import '../../../Provider/profile_provider.dart';
|
||||
import '../../../Provider/transactions_provider.dart';
|
||||
import '../../../Repository/constant_functions.dart';
|
||||
import '../../../http_client/custome_http_client.dart';
|
||||
import '../../../http_client/customer_http_client_get.dart';
|
||||
import '../../Customers/Provider/customer_provider.dart';
|
||||
import '../Model/due_collection_invoice_model.dart';
|
||||
import '../Model/due_collection_model.dart';
|
||||
import '../Providers/due_provider.dart';
|
||||
|
||||
class DueRepo {
|
||||
Future<List<DueCollection>> fetchDueCollectionList({
|
||||
String? type,
|
||||
String? fromDate,
|
||||
String? toDate,
|
||||
}) async {
|
||||
final client = CustomHttpClientGet(client: http.Client());
|
||||
|
||||
// Manually build query string to preserve order
|
||||
final List<String> queryList = [];
|
||||
|
||||
if (type != null && type.isNotEmpty) {
|
||||
queryList.add('duration=$type');
|
||||
}
|
||||
|
||||
if (type == 'custom_date' && fromDate != null && toDate != null && fromDate.isNotEmpty && toDate.isNotEmpty) {
|
||||
queryList.add('from_date=$fromDate');
|
||||
queryList.add('to_date=$toDate');
|
||||
}
|
||||
|
||||
final String queryString = queryList.join('&');
|
||||
final Uri uri = Uri.parse('${APIConfig.url}/dues${queryString.isNotEmpty ? '?$queryString' : ''}');
|
||||
|
||||
print(uri);
|
||||
|
||||
final response = await client.get(url: uri);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final parsed = jsonDecode(response.body) as Map<String, dynamic>;
|
||||
final list = parsed['data'] as List<dynamic>;
|
||||
return list.map((json) => DueCollection.fromJson(json)).toList();
|
||||
} else {
|
||||
throw Exception('Failed to fetch Due List. Status code: ${response.statusCode}');
|
||||
}
|
||||
}
|
||||
|
||||
Future<DueCollectionInvoice> fetchDueInvoiceList({required int id}) async {
|
||||
CustomHttpClientGet clientGet = CustomHttpClientGet(client: http.Client());
|
||||
final uri = Uri.parse('${APIConfig.url}/invoices?party_id=$id');
|
||||
|
||||
final response = await clientGet.get(url: uri);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final parsedData = jsonDecode(response.body);
|
||||
return DueCollectionInvoice.fromJson(parsedData['data']);
|
||||
} else {
|
||||
throw Exception('Failed to fetch Sales List');
|
||||
}
|
||||
}
|
||||
|
||||
Future<DueCollection?> dueCollect({
|
||||
required WidgetRef ref,
|
||||
required BuildContext context,
|
||||
required num partyId,
|
||||
required String? invoiceNumber,
|
||||
required String paymentDate,
|
||||
required List<Map<String, dynamic>> payments,
|
||||
required num payDueAmount,
|
||||
}) async {
|
||||
final uri = Uri.parse('${APIConfig.url}/dues');
|
||||
final requestBody = jsonEncode({
|
||||
'party_id': partyId,
|
||||
'invoiceNumber': invoiceNumber,
|
||||
'paymentDate': paymentDate,
|
||||
'payments': payments,
|
||||
'payDueAmount': payDueAmount,
|
||||
});
|
||||
|
||||
try {
|
||||
CustomHttpClient customHttpClient = CustomHttpClient(client: http.Client(), context: context, ref: ref);
|
||||
var responseData = await customHttpClient.post(
|
||||
url: uri,
|
||||
headers: {
|
||||
"Accept": 'application/json',
|
||||
'Authorization': await getAuthToken(),
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: requestBody);
|
||||
final parsedData = jsonDecode(responseData.body);
|
||||
print("Print Due data: $parsedData");
|
||||
|
||||
if (responseData.statusCode == 200) {
|
||||
EasyLoading.showSuccess('Collected successful!');
|
||||
|
||||
ref.refresh(partiesProvider);
|
||||
|
||||
ref.refresh(purchaseTransactionProvider);
|
||||
ref.refresh(salesTransactionProvider);
|
||||
ref.refresh(businessInfoProvider);
|
||||
ref.refresh(getExpireDateProvider(ref));
|
||||
|
||||
// ref.refresh(dueInvoiceListProvider(partyId.round()));
|
||||
ref.refresh(dueCollectionListProvider);
|
||||
ref.refresh(summaryInfoProvider);
|
||||
|
||||
return DueCollection.fromJson(parsedData['data']);
|
||||
// Navigator.pop(context);
|
||||
// return PurchaseTransaction.fromJson(parsedData);
|
||||
} else {
|
||||
EasyLoading.dismiss().then(
|
||||
(value) => ScaffoldMessenger.of(context)
|
||||
.showSnackBar(SnackBar(content: Text('Due creation failed: ${parsedData['message']}'))),
|
||||
);
|
||||
return null;
|
||||
}
|
||||
} catch (error) {
|
||||
EasyLoading.dismiss().then(
|
||||
(value) => ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('An error occurred: $error'))),
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user