FIX_new lib merge

This commit is contained in:
sanjeev.p 2026-01-07 14:36:55 +05:30
commit 6e4e36fcb1
3 changed files with 191 additions and 11 deletions

File diff suppressed because one or more lines are too long

View File

@ -3,6 +3,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
import 'package:nhance_partner/data/services/auth_service.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
@ -783,14 +784,33 @@ class ApiService {
return response;
}
Future<Map<String, dynamic>> findPartnerDashboardData(id, broker) async {
Future<Map<String, dynamic>> findPartnerDashboardData(id, fromDate,toDate) async {
// print(_token);
if (_token == null) {
await _initializeToken();
}
final url = Uri.parse(
'${Env.apiUrl}dashboard/partnerDashboard?manager_id=$id',
);
late Uri url;
/// CASE 1: fromDate OR toDate is null normal API
if (fromDate == null || toDate == null) {
url = Uri.parse(
'${Env.apiUrl}dashboard/partnerDashboard?manager_id=$id',
);
}
/// CASE 2: both dates present filtered API
else {
final from = DateFormat('dd-MM-yyyy').format(fromDate);
final to = DateFormat('dd-MM-yyyy').format(toDate);
url = Uri.parse(
'${Env.apiUrl}dashboard/partnerDashboard'
'?manager_id=$id'
'&from_date=$from'
'&to_date=$to',
);
}
// final url = Uri.parse(
// 'http://localhost/nhance_partner_be/dashboard/partnerDashboard?manager_id=$id',

View File

@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:intl/intl.dart';
import 'package:nhance_partner/data/utils/toastNotification.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../../../core/responsive/responsive_builder.dart';
@ -14,14 +15,18 @@ import '../../../providers/userRoleProvider.dart';
import '../../staff/Enquiry/tabs/tab.dart';
import '../../staff/assignStaff.dart';
class PartnerDashboard extends ConsumerStatefulWidget {
const PartnerDashboard({super.key});
@override
ConsumerState<PartnerDashboard> createState() => _DashboardState();
ConsumerState<PartnerDashboard> createState() => _PartnerDashboardState();
}
class _DashboardState extends ConsumerState<PartnerDashboard> {
class _PartnerDashboardState extends ConsumerState<PartnerDashboard> {
/// DATE STATE (ONLY FOR PARTNER TAB)
DateTime? fromDate;
DateTime? toDate;
int selectedIndex = 1;
int switcherStatus = 1;
late ApiService apiService;
@ -112,6 +117,65 @@ class _DashboardState extends ConsumerState<PartnerDashboard> {
// }
}
/// 🔹 DATE PICKER
Future<void> pickDate(bool isFrom) async {
final picked = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2022),
lastDate: DateTime.now(),
);
if (picked != null) {
setState(() {
if (isFrom) {
fromDate = picked;
} else {
toDate = picked;
}
});
// OPTIONAL: reload API with date range
// final managerId = ref.read(managerIdProvider);
// if (managerId != null) {
// getParnterDashBrdList(managerId);
// }
}
}
/// 🔹 DATE PICKER UI
Widget headerDatePicker({
required String label,
DateTime? date,
required VoidCallback onTap,
}) {
return InkWell(
onTap: onTap,
child: Container(
height: 32,
padding: const EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(6),
border: Border.all(color: Colors.grey.shade300),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.calendar_today, size: 14, color: Colors.grey),
const SizedBox(width: 6),
Text(
date == null
? label
: DateFormat('dd-MM-yyyy').format(date),
style: GoogleFonts.inter(fontSize: 11),
),
],
),
),
);
}
Future<void> getParnterDashBrdList(id) async {
// print('getClaimList called MagId - $managerId - $role');
setState(() {
@ -120,10 +184,7 @@ class _DashboardState extends ConsumerState<PartnerDashboard> {
// dynamic id = widget.policyNumber;
print('getBusinessDshID - $id');
try {
final response = await apiService.findPartnerDashboardData(
id,
SelctdPartnerbroker,
);
final response = await apiService.findPartnerDashboardData(id,fromDate,toDate);
if (response['status'] == 'success') {
final data = response['data'];
@ -284,6 +345,38 @@ class _DashboardState extends ConsumerState<PartnerDashboard> {
refresh();
}
void onSearch() {
final managerId = ref.read(managerIdProvider);
if (managerId == null) return;
// OPTIONAL: validation
if (fromDate != null && toDate != null && fromDate!.isAfter(toDate!)) {
ToastHelper.showWarningToast(context, 'From date cannot be after To date');
// ScaffoldMessenger.of(context).showSnackBar(
// const SnackBar(content: Text('From date cannot be after To date')),
// );
return;
}
// 🔍 Call API with date filter
getParnterDashBrdList(managerId);
}
void onReset() {
setState(() {
fromDate = null;
toDate = null;
});
final managerId = ref.read(managerIdProvider);
if (managerId != null) {
// Reload without date filter
getParnterDashBrdList(managerId);
}
}
@override
Widget build(BuildContext context) {
// final enquiries = ref.watch(enquiriesProvider);
@ -294,13 +387,53 @@ class _DashboardState extends ConsumerState<PartnerDashboard> {
return Column(
children: [
Container(
margin: EdgeInsets.all(10),
margin: EdgeInsets.all(0),
// color: Colors.red.shade100,
// height: MediaQuery.of(context).size.height * 0.75,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(
children: [
const Spacer(),
headerDatePicker(
label: 'From',
date: fromDate,
onTap: () => pickDate(true),
),
const SizedBox(width: 8),
headerDatePicker(
label: 'To',
date: toDate,
onTap: () => pickDate(false),
),
const SizedBox(width: 8),
/// RESET
actionIcon(
icon: Icons.refresh,
tooltip: 'Reset',
onTap: onReset,
),
const SizedBox(width: 6),
/// 🔍 SEARCH
actionIcon(
icon: Icons.search,
tooltip: 'Search',
onTap: onSearch,
),
],
),
),
if (role == 'manager' || role == 'handler' || role == 'agent')
SizedBox(
height: MediaQuery.of(context).size.height * 0.78,
@ -543,6 +676,30 @@ class _DashboardState extends ConsumerState<PartnerDashboard> {
],
);
}
Widget actionIcon({
required IconData icon,
required String tooltip,
required VoidCallback onTap,
}) {
return Tooltip(
message: tooltip,
child: InkWell(
onTap: onTap,
borderRadius: BorderRadius.circular(6),
child: Container(
height: 32,
width: 32,
decoration: BoxDecoration(
color: const Color(0xFF2E7D6E),
borderRadius: BorderRadius.circular(6),
),
child: Icon(icon, size: 16, color: Colors.white),
),
),
);
}
}
class Performance extends StatefulWidget {
@ -1028,3 +1185,5 @@ final _chartHeader = GoogleFonts.poppins(
color: Colors.black,
fontWeight: FontWeight.w500,
);