FIX_view api

This commit is contained in:
sanjeev.p 2026-04-04 19:05:04 +05:30
parent f1a57d1d8c
commit b3884f32c4
4 changed files with 155 additions and 64 deletions

File diff suppressed because one or more lines are too long

View File

@ -2153,6 +2153,33 @@ class ApiService {
return response;
}
Future<Map<String, dynamic>> getViewInvoiceList(dynamic data) async {
if (_token == null) {
await _initializeToken();
}
final Map<String, dynamic> map =
data is Map ? Map<String, dynamic>.from(data) : <String, dynamic>{};
final invoiceId = map['invoice_id'];
final managerId = map['manager_id'];
final queryParameters = <String, String>{
if (invoiceId != null) 'invoice_id': invoiceId.toString(),
if (managerId != null) 'manager_id': managerId.toString(),
};
final url = Uri.parse('${Env.apiUrl}invoice/view').replace(
queryParameters: queryParameters,
);
final headers = {
'Authorization': 'Bearer $_token',
'app-signature': Env.App_Signature,
};
return _makeGetRequest(url, headers);
}
Future<Map<String, dynamic>> getCreateOrUpdate(data) async {
final url = Uri.parse('${Env.apiUrl}invoice/create-or-update');
// final url = Uri.parse('http://localhost/nhance_partner_be/invoice/create-or-update');

View File

@ -1,3 +1,4 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
@ -76,15 +77,43 @@ class _PayOutDetailsViewState extends ConsumerState<PayOutDetailsView> {
'invoice_id': invoiceId,
'manager_id': managerId,
};
final response = await apiService.getCommissionRateList(jsondata);
final response = await apiService.getViewInvoiceList(jsondata);
if (response['status'] == 'success') {
final totPolicy = (response['total_policies'] ?? 0).toString();
final totalCommiss = response['total_commission'];
final payload = response['data'];
List<Map<String, dynamic>> items = [];
Map<String, dynamic>? invoiceMap;
if (payload is Map) {
final m = Map<String, dynamic>.from(payload);
invoiceMap = m['invoice'] is Map
? Map<String, dynamic>.from(m['invoice'] as Map)
: null;
final rawItems = m['items'];
if (rawItems is List) {
items = rawItems
.map((e) => Map<String, dynamic>.from(e as Map))
.toList();
}
} else if (payload is List) {
items = List<Map<String, dynamic>>.from(payload);
}
num commissionSum = 0;
for (final row in items) {
commissionSum +=
num.tryParse(row['commission_amount']?.toString() ?? '0') ?? 0;
}
final totPolicy = (invoiceMap?['total_policies'] ?? items.length)
.toString();
final totalCommiss =
invoiceMap?['total_commission'] ?? commissionSum;
setState(() {
totalPolicies = totPolicy;
totalCommission = totalCommiss;
masterPolicies = List<Map<String, dynamic>>.from(response['data'] ?? []);
filteredPolicies = List<Map<String, dynamic>>.from(response['data'] ?? []);
masterPolicies = items;
filteredPolicies = List<Map<String, dynamic>>.from(items);
});
} else {
setState(() {
@ -200,13 +229,7 @@ class _PayOutDetailsViewState extends ConsumerState<PayOutDetailsView> {
);
}
Widget _policyTableBody() {
return SizedBox(
height: MediaQuery.of(context).size.height * 0.65,
child: ListView.builder(
itemCount: filteredPolicies.length,
itemBuilder: (context, index) {
final p = filteredPolicies[index];
Widget _policyRow(Map<String, dynamic> p) {
return Container(
height: 38,
padding: const EdgeInsets.symmetric(horizontal: 16),
@ -241,9 +264,6 @@ class _PayOutDetailsViewState extends ConsumerState<PayOutDetailsView> {
],
),
);
},
),
);
}
@override
@ -339,24 +359,68 @@ class _PayOutDetailsViewState extends ConsumerState<PayOutDetailsView> {
],
),
),
Card(
Expanded(
child: Card(
color: Colors.white,
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
elevation: 0,
child: SingleChildScrollView(
child: ScrollConfiguration(
behavior: const MaterialScrollBehavior().copyWith(
dragDevices: {
PointerDeviceKind.mouse,
PointerDeviceKind.touch,
PointerDeviceKind.trackpad,
},
),
child: LayoutBuilder(
builder: (context, constraints) {
// Same pattern as enquiry list: nested axis scroll views
// avoids broken vertical gestures on web/desktop.
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: SizedBox(
width: _tableMinWidth,
primary: false,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
primary: false,
child: ConstrainedBox(
constraints: BoxConstraints(
minWidth: _tableMinWidth,
minHeight: constraints.maxHeight.isFinite
? constraints.maxHeight
: 0,
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_policyTableHeader(),
_policyTableBody(),
if (filteredPolicies.isEmpty)
const Padding(
padding: EdgeInsets.all(24),
child: Center(
child: Text(
'No policies in this payout',
style: TextStyle(
fontSize: 12,
color: Colors.blueGrey,
),
),
),
)
else
...filteredPolicies.map(_policyRow),
],
),
),
),
);
},
),
),
),
),
Container(
padding: const EdgeInsets.all(8),

View File

@ -15,8 +15,8 @@
the `--base-href` argument provided to `flutter build`.
-->
<!-- <base href="$FLUTTER_BASE_HREF"> -->
<!-- <base href="/partner/"> <!- Live build: also check env.dart (line 8) -->
<base href="/nhance/partner/app/">
<!-- <base href="/partner/"> --> <!-- Live build: also check env.dart (line 8) -->
<base href="/nhance/partner/app/">
<!-- <base href="{Env.baseHref}">-->
<meta charset="UTF-8">