Commit ee178d55 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

09-07-2025 By Sai Srinivas

Network and Finance Module issue and Back
parent 2ade5aad
......@@ -24,6 +24,21 @@ class Paymentdetailsprovider extends ChangeNotifier {
TextEditingController altMobController = TextEditingController();
TextEditingController telController = TextEditingController();
TextEditingController emailController = TextEditingController();
String? nameError;
String? designationError;
String? mobError;
String? altMobError;
String? telError;
String? emailError;
String? selectContactError;
String? selectPaymentError;
String? selectAmountError;
String? ReferenceError;
String? imageError;
List<PaymentModeList> _payment_mode_drop_down = [];
List<Contacts> _contacts_drop_down = [];
String _paymentModeID = "";
......@@ -106,6 +121,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
_selectContact = value;
_contact = value?.name;
_contactID = value?.mob1;
selectContactError = null;
notifyListeners();
}
......@@ -113,11 +129,13 @@ class Paymentdetailsprovider extends ChangeNotifier {
_selectPaymentModeList = value;
_PaymentMode = value?.name ?? "";
_paymentModeID = value?.id ?? "";
selectPaymentError = null;
notifyListeners();
}
set paymentModeID(value) {
_paymentModeID = value;
selectPaymentError = null;
notifyListeners();
}
......@@ -133,6 +151,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
set contactID(value) {
_contactID = value;
selectContactError = null;
notifyListeners();
}
......@@ -184,6 +203,12 @@ class Paymentdetailsprovider extends ChangeNotifier {
_paymentModeID = "";
}
Amountcontroller.clear();
Referencecontroller.clear();
_image = null;
_imageName = null;
_image_picked = 0;
notifyListeners();
} else {}
} else {
......@@ -204,6 +229,9 @@ class Paymentdetailsprovider extends ChangeNotifier {
// if(!CheckValidations(context,reference, amount)){
// return;
// }
if(!validateSubmit(context)){
return;
}
print("came here");
var homeProvider = Provider.of<HomescreenNotifier>(
context,
......@@ -228,6 +256,11 @@ class Paymentdetailsprovider extends ChangeNotifier {
print(data.paymentCollectionId);
_CollectionId = data.paymentCollectionId ?? 0;
notifyListeners();
Future.delayed(Duration(microseconds: 200), () {
if (_CollectionId != 0) {
showOTPSheetSheet(context);
}
});
} else {}
} else {
// SharedpreferencesService().clearPreferences();
......@@ -242,6 +275,241 @@ class Paymentdetailsprovider extends ChangeNotifier {
}
}
Future<void> showOTPSheetSheet(BuildContext context) {
return showModalBottomSheet(
useSafeArea: true,
isDismissible: true,
isScrollControlled: true,
showDragHandle: true,
backgroundColor: Colors.white,
enableDrag: true,
context: context,
builder: (context) {
return StatefulBuilder(
builder: (context, setState) {
return SafeArea(
child: Padding(
padding: EdgeInsets.only(
bottom:
MediaQuery.of(
context,
).viewInsets.bottom, // This handles keyboard
),
child: Container(
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 10,
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Align(
alignment: Alignment.center,
child: Text(
"Enter OTP",
style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
),
),
),
SizedBox(height: 15),
Column(
children: [
Container(
alignment: Alignment.center,
height: 50,
margin: EdgeInsets.only(
left: 5.0,
right: 5.0,
),
child: PinCodeTextField(
appContext: context,
pastedTextStyle: TextStyle(
fontWeight: FontWeight.bold,
),
length: 4,
blinkWhenObscuring: true,
animationType: AnimationType.fade,
// validator: (v) {
// if (v!.length < 3) {
// return "I'm from validator";
// } else {
// return null;
// }
// },
pinTheme: PinTheme(
shape: PinCodeFieldShape.underline,
borderRadius: BorderRadius.circular(16),
fieldHeight: 60,
fieldWidth: 60,
activeFillColor:
AppColors.text_field_color,
activeColor: AppColors.app_blue,
selectedColor: AppColors.text_field_color,
selectedFillColor:
AppColors.text_field_color,
inactiveFillColor:
AppColors.text_field_color,
inactiveColor: AppColors.text_field_color,
fieldOuterPadding: EdgeInsets.only(
left: 5,
right: 5,
),
inactiveBorderWidth: 0,
activeBorderWidth: 0.5,
),
enableActiveFill: true,
keyboardType: TextInputType.number,
boxShadows: const [
BoxShadow(
offset: Offset(0, 1),
color: Colors.black12,
blurRadius: 10,
),
],
onCompleted: (String enteredCode) {
enteredOtp = enteredCode;
// clearText = true;
OTPVerifyAPI(context);
debugPrint("Completed");
},
// onTap: () {
// print("Pressed");
// },
onChanged: (String enteredCode) {
debugPrint(enteredCode);
enteredOtp = enteredCode;
},
onSubmitted: (String enteredCode) {
enteredOtp = enteredCode;
// clearText = true;
// Verify_otp();
},
enablePinAutofill: true,
useExternalAutoFillGroup: true,
beforeTextPaste: (text) {
debugPrint("Allowing to paste $text");
//if you return true then it will show the paste confirmation dialog. Otherwise if false, then nothing will happen.
//but you can show anything you want here, like your pop up saying wrong paste format or etc
return true;
},
),
),
SizedBox(height: 15),
Container(
alignment: Alignment.center,
height: 45,
margin: EdgeInsets.only(
left: 5.0,
right: 5.0,
top: 5.0,
bottom: 5.0,
),
child: InkResponse(
onTap: () {
ResendOtpAPI(context);
},
child: Center(
child: Text(
"Resend",
style: TextStyle(
fontWeight: FontWeight.w300,
),
),
),
),
),
InkResponse(
onTap: () {
Navigator.of(context).pop(false);
OTPVerifyAPI(context);
},
child: Container(
alignment: Alignment.center,
height: 45,
margin: EdgeInsets.only(
left: 5.0,
right: 5.0,
top: 5.0,
bottom: 5.0,
),
decoration: BoxDecoration(
color: AppColors.app_blue, //1487C9
borderRadius: BorderRadius.circular(15.0),
),
child: Center(
child: Text(
"Submit",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
),
),
),
],
),
],
),
),
),
),
);
},
);
},
);
}
bool validateSubmit(context){
selectContactError = null;
selectPaymentError = null;
selectAmountError = null;
ReferenceError = null;
imageError = null;
bool isValid = true;
print("clickedw");
if (_selectContact == null || _contactID.isEmpty) {
selectContactError = "Please Select Contact";
isValid = false;
}
if (_selectPaymentModeList==null||_paymentModeID == null) {
selectPaymentError = "Please Select Payment Type";
isValid = false;
}
if(Amountcontroller.text.trim().isEmpty){
selectAmountError = "Please Enter Amount";
isValid = false;
}
if(Referencecontroller.text.trim().isEmpty){
ReferenceError = "Please Enter Reference Number";
isValid = false;
}
if (_image_picked == 0) {
imageError = "Please add attachment";
isValid = false;
}
notifyListeners();
return isValid;
}
Future<void> OTPVerifyAPI(BuildContext context) async {
try {
var homeProvider = Provider.of<HomescreenNotifier>(
......@@ -275,6 +543,11 @@ class Paymentdetailsprovider extends ChangeNotifier {
emailController.clear();
_imageName = null;
_image_picked = 0;
selectContactError = null;
selectPaymentError = null;
selectAmountError = null;
ReferenceError = null;
imageError = null;
notifyListeners();
Navigator.pop(context, true);
Navigator.pop(context, true);
......@@ -340,6 +613,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
_image = File(galleryImage!.path);
_imageName = File(galleryImage!.name);
_image_picked = 1;
imageError = null;
notifyListeners();
} catch (e) {
debugPrint("mmmm: ${e.toString()}");
......@@ -362,6 +636,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
_imageName = File(galleryImage!.name);
_image_picked = 1;
imageError = null;
notifyListeners();
} catch (e) {
debugPrint("mmmm: ${e.toString()}");
......@@ -418,20 +693,22 @@ class Paymentdetailsprovider extends ChangeNotifier {
BuildContext context,
actName,
generatorID,
name,
designation,
mobile,
altMobile,
telephone,
email,
accountName,
referenceID,
genId,
) async {
if (actName == "Generator") {
_saveAgainst = "generator";
_genId = generatorID;
} else {
_saveAgainst = "account";
_accountId = generatorID;
}
notifyListeners();
if(!validAddContact(context)){
return;
}
try {
var homeProvider = Provider.of<HomescreenNotifier>(
context,
......@@ -441,12 +718,12 @@ class Paymentdetailsprovider extends ChangeNotifier {
homeProvider.empId,
homeProvider.session,
_genId,
name,
designation,
mobile,
altMobile,
telephone,
email,
nameController.text,
designationController.text,
mobController.text,
altMobController.text,
telController.text,
emailController.text,
_saveAgainst,
_accountId,
);
......@@ -455,14 +732,13 @@ class Paymentdetailsprovider extends ChangeNotifier {
if (data.sessionExists == 1) {
if (data.error == 0) {
toast(context, "Added Successfully");
Amountcontroller.clear();
Referencecontroller.clear();
nameController.clear();
designationController.clear();
mobController.clear();
altMobController.clear();
telController.clear();
emailController.clear();
resetAddContect();
LoadNumbersAPI(
context,
_saveAgainst,
referenceID,
genId,
);
Navigator.pop(context, true);
} else if (data.error == 1) {
toast(context, data.message);
......@@ -479,4 +755,44 @@ class Paymentdetailsprovider extends ChangeNotifier {
print(e.toString());
}
}
resetAddContect(){
Amountcontroller.clear();
Referencecontroller.clear();
nameController.clear();
designationController.clear();
mobController.clear();
altMobController.clear();
telController.clear();
emailController.clear();
nameError = null;
designationError = null;
mobError = null;
altMobError = null;
telError = null;
emailError = null;
notifyListeners();
}
bool validAddContact(context){
bool isValid = true;
nameError = null;
designationError = null;
mobError = null;
altMobError = null;
telError = null;
emailError = null;
if(nameController.text.trim().toString().isEmpty){
nameError = "Please Enter Name";
isValid = false;
}
if(mobController.text.trim().toString().isEmpty){
mobError = "Please Enter Mobile Number";
isValid = false;
}
notifyListeners();
return isValid;
}
}
String didPushed = "";
String didPopped = "";
var connection;
......@@ -17,8 +17,9 @@ toast(context, text) {
fontSize: 15.0,
);
}
String connection = "Online";
class MyConnectivity {
MyConnectivity._();
static final _instance = MyConnectivity._();
......@@ -28,11 +29,11 @@ class MyConnectivity {
Stream get myStream => _controller.stream;
void initialise() async {
ConnectivityResult result =
(await _connectivity.checkConnectivity()) as ConnectivityResult;
_checkStatus(result);
List<ConnectivityResult> result =
(await _connectivity.checkConnectivity());
_checkStatus(result.first);
_connectivity.onConnectivityChanged.listen((result) {
_checkStatus(result as ConnectivityResult);
_checkStatus(result.first);
});
}
......
......@@ -4,6 +4,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:http/http.dart';
import 'GlobalConstants.dart';
import 'app_colors.dart';
import 'package:app_settings/app_settings.dart';
PreferredSizeWidget appbar(BuildContext context, title) {
return AppBar(
......@@ -207,11 +208,11 @@ NoNetwork(context) {
// Image.asset('assets/images/no_wifi.png', width: 100, height: 100),
SizedBox(height: 10),
Center(
child: Text(
"You are Offline",
style: TextStyle(fontSize: 16, color: AppColors.semi_black),
overflow: TextOverflow.ellipsis,
),
child: Text("You are Offline",
style: TextStyle(
fontSize: 16,
color: AppColors.semi_black
),),
),
SizedBox(height: 10),
Text(
......@@ -220,7 +221,6 @@ NoNetwork(context) {
style: TextStyle(fontSize: 12, color: AppColors.grey_semi),
overflow: TextOverflow.ellipsis,
),
SizedBox(height: 0),
Text(
"Make you sure you’ve\n turn on your internet connection",
textAlign: TextAlign.center,
......@@ -230,14 +230,14 @@ NoNetwork(context) {
SizedBox(height: 40),
TextButton(
onPressed: () async {
// await AppSettings.openAppSettings(type: AppSettingsType.wifi);
await AppSettings.openAppSettings(type: AppSettingsType.wifi);
},
style: TextButton.styleFrom(foregroundColor: Colors.white),
child: Container(
height: 45,
width: 150,
decoration: BoxDecoration(
color: AppColors.thick_navy_blue,
color: AppColors.app_blue,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
child: Center(
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:generp/screens/notifierExports.dart';
......@@ -9,6 +10,8 @@ import 'package:generp/screens/CheckInScreen.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import '../Utils/commonServices.dart';
class AttendanceScreen extends StatefulWidget {
const AttendanceScreen({super.key});
......@@ -19,10 +22,17 @@ class AttendanceScreen extends StatefulWidget {
class _AttendanceScreenState extends State<AttendanceScreen> {
var att_provider;
var homeProvider;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
homeProvider = Provider.of<HomescreenNotifier>(context, listen: false);
WidgetsBinding.instance.addPostFrameCallback((_) {
att_provider = Provider.of<AttendanceNotifier>(context, listen: false);
......@@ -31,22 +41,34 @@ class _AttendanceScreenState extends State<AttendanceScreen> {
});
}
// return Container(
// // onWillPop: _onBackPressed,
// child: (Platform.isAndroid
// ? WillPopScope(
// onWillPop: onBackPressed,
// child: _scaffold(context),
// )
// : _scaffold(context)))
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Platform.isAndroid
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == 'Online')
? Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
)
: _scaffold(context);
: _scaffold(context):NoNetwork(context);
}
Widget _scaffold(BuildContext context) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:generp/Utils/app_colors.dart';
......@@ -9,6 +10,7 @@ import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import '../Notifiers/CheckInProvider.dart';
import '../Utils/commonServices.dart';
import 'FrontCameraCapture.dart';
class CheckInOutScreen extends StatefulWidget {
......@@ -20,10 +22,16 @@ class CheckInOutScreen extends StatefulWidget {
}
class _CheckInOutScreenState extends State<CheckInOutScreen> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
},);
WidgetsBinding.instance.addPostFrameCallback((_) {
var prov = Provider.of<CheckInOutProvider>(context, listen: false);
prov.getLocationPermission(context);
......@@ -35,16 +43,28 @@ class _CheckInOutScreenState extends State<CheckInOutScreen> {
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
Size size = MediaQuery.of(context).size;
double screenWidth = MediaQuery.of(context).size.width;
return Consumer<CheckInOutProvider>(
return (connection=='Online')?Consumer<CheckInOutProvider>(
builder: (context, provider, child) {
return WillPopScope(
onWillPop: () {
......@@ -280,7 +300,7 @@ class _CheckInOutScreenState extends State<CheckInOutScreen> {
),
);
},
);
):NoNetwork(context);
}
}
......
import 'dart:async';
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:generp/Utils/commonWidgets.dart';
import '../Utils/commonServices.dart';
import 'notifierExports.dart';
import 'screensExports.dart';
import 'package:geolocator/geolocator.dart';
......@@ -24,10 +27,17 @@ class MyHomePage extends StatefulWidget {
class _MyHomePageState extends State<MyHomePage> {
Timer? timer;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
var prov = Provider.of<HomescreenNotifier>(context, listen: false);
var prof_prov = Provider.of<ProfileNotifer>(context, listen: false);
Future.microtask(() {
......@@ -104,476 +114,514 @@ class _MyHomePageState extends State<MyHomePage> {
}
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Consumer2<HomescreenNotifier, ProfileNotifer>(
builder: (context, homescreen, profile, child) {
// Define the original data
final names = [
"Attendance",
"Finance",
"CRM",
"Orders",
"ERP",
"Service Engineer",
"Gen Tracker",
// "Nearby",
"Inventory",
"Whizzdom",
// "Common",
];
final icons = [
"assets/svg/home_icons_1.svg",
"assets/svg/home_icons_10.svg",
"assets/svg/home_icons_12.svg",
"assets/svg/home_icons_11.svg",
"assets/svg/home_icons_2.svg",
"assets/svg/home_icons_4.svg",
"assets/svg/home_icons_31.svg",
// "assets/svg/home_icons_5.svg",
"assets/svg/home_icons_6.svg",
"assets/svg/home_icons_81.svg",
// "assets/svg/home_icons_9.svg",
];
final requiredRoles = [
"430",
"430",
"430",
"430",
"431",
"433",
"434",
// "433",
"432",
"431",
// "430",
];
final filteredItems = <Map<String, String>>[];
for (int i = 0; i < names.length; i++) {
if (homescreen.roleStatus.contains(requiredRoles[i])) {
filteredItems.add({'name': names[i], 'icon': icons[i]});
}
}
return WillPopScope(
onWillPop: onBackPressed,
child: RefreshIndicator.adaptive(
color: AppColors.app_blue,
onRefresh: () async {
await Future.delayed(const Duration(milliseconds: 600));
homescreen.DashboardApiFunction(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
body: Container(
child: Column(
children: [
Expanded(
flex: 4,
child: Container(
padding: EdgeInsets.symmetric(vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.vertical(
bottom: Radius.circular(30),
),
),
child: Container(
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 30,
),
padding: EdgeInsets.only(bottom: 15, right: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
gradient: LinearGradient(
colors: [
AppColors.profile_card_gradient1,
AppColors.profile_card_gradient2,
],
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == 'Online')
? Consumer2<HomescreenNotifier, ProfileNotifer>(
builder: (context, homescreen, profile, child) {
// Define the original data
final names = [
"Attendance",
"Finance",
"CRM",
"Orders",
"ERP",
"Service Engineer",
"Gen Tracker",
// "Nearby",
"Inventory",
"Whizzdom",
// "Common",
];
final icons = [
"assets/svg/home_icons_1.svg",
"assets/svg/home_icons_10.svg",
"assets/svg/home_icons_12.svg",
"assets/svg/home_icons_11.svg",
"assets/svg/home_icons_2.svg",
"assets/svg/home_icons_4.svg",
"assets/svg/home_icons_31.svg",
// "assets/svg/home_icons_5.svg",
"assets/svg/home_icons_6.svg",
"assets/svg/home_icons_81.svg",
// "assets/svg/home_icons_9.svg",
];
final requiredRoles = [
"430",
"430",
"430",
"430",
"431",
"433",
"434",
// "433",
"432",
"431",
// "430",
];
final filteredItems = <Map<String, String>>[];
for (int i = 0; i < names.length; i++) {
if (homescreen.roleStatus.contains(requiredRoles[i])) {
filteredItems.add({'name': names[i], 'icon': icons[i]});
}
}
return WillPopScope(
onWillPop: onBackPressed,
child: RefreshIndicator.adaptive(
color: AppColors.app_blue,
onRefresh: () async {
await Future.delayed(const Duration(milliseconds: 600));
homescreen.DashboardApiFunction(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
body: Container(
child: Column(
children: [
Expanded(
flex: 4,
child: Container(
padding: EdgeInsets.symmetric(vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.vertical(
bottom: Radius.circular(30),
),
),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
flex: 2,
child: SizedBox(
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
SizedBox(
width: 66,
height: 66,
child: ClipRRect(
borderRadius: BorderRadius.circular(
50,
child: Container(
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 30,
),
padding: EdgeInsets.only(bottom: 15, right: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(30),
gradient: LinearGradient(
colors: [
AppColors.profile_card_gradient1,
AppColors.profile_card_gradient2,
],
),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
flex: 2,
child: SizedBox(
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
SizedBox(
width: 66,
height: 66,
child: ClipRRect(
borderRadius:
BorderRadius.circular(50),
child: CachedNetworkImage(
cacheKey:
profile.profileImage,
fit: BoxFit.cover,
imageUrl:
"${profile.profileImage}",
useOldImageOnUrlChange: false,
placeholder:
(context, url) =>
CircularProgressIndicator.adaptive(),
errorWidget:
(context, url, error) =>
Icon(Icons.error),
),
),
),
child: CachedNetworkImage(
cacheKey: profile.profileImage,
fit: BoxFit.cover,
imageUrl:
"${profile.profileImage}",
useOldImageOnUrlChange: false,
placeholder:
(context, url) =>
CircularProgressIndicator.adaptive(),
errorWidget:
(context, url, error) =>
Icon(Icons.error),
Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Container(
width: 13,
height: 13,
decoration: BoxDecoration(
shape: BoxShape.circle,
color:
homescreen.onlineStatus ==
"Online"
? Colors.green
: Colors.yellow,
),
),
SizedBox(width: 6),
Text(
"${homescreen.onlineStatus}",
style: TextStyle(
fontSize: 16,
fontFamily: "JakartaMedium",
color: Color(0xFF2D2D2D),
),
),
],
),
),
],
),
Row(
),
),
Expanded(
flex: 3,
child: Container(
padding: EdgeInsets.only(right: 10),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Container(
width: 13,
height: 13,
decoration: BoxDecoration(
shape: BoxShape.circle,
color:
homescreen.onlineStatus ==
"Online"
? Colors.green
: Colors.yellow,
// Text(
// "${profile.employeeName}",
// maxLines: 1,
// style: TextStyle(
// color: AppColors.app_blue,
// fontFamily: "JakartaSemiBold",
// fontSize: 18,
// ),
// ),
AutoSizeText(
'${profile.employeeName}',
maxFontSize: 18,
minFontSize: 12,
style: TextStyle(
fontSize: 18,
color: AppColors.app_blue,
fontFamily: "JakartaRegular",
),
maxLines: 2,
),
SizedBox(width: 6),
Text(
"${homescreen.onlineStatus}",
AutoSizeText(
'(${profile.designation})',
maxFontSize: 14,
minFontSize: 10,
style: TextStyle(
fontSize: 16,
fontFamily: "JakartaMedium",
color: Color(0xFF2D2D2D),
fontSize: 14,
color: AppColors.semi_black,
fontFamily: "JakartaRegular",
),
maxLines: 1,
),
],
),
],
),
),
),
Expanded(
flex: 3,
child: Container(
padding: EdgeInsets.only(right: 10),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.center,
children: [
// Text(
// "${profile.employeeName}",
// maxLines: 1,
// style: TextStyle(
// color: AppColors.app_blue,
// fontFamily: "JakartaSemiBold",
// fontSize: 18,
// ),
// ),
AutoSizeText(
'${profile.employeeName}',
maxFontSize: 18,
minFontSize: 12,
style: TextStyle(
fontSize: 18,
color: AppColors.app_blue,
fontFamily: "JakartaRegular",
),
maxLines: 2,
),
AutoSizeText(
'(${profile.designation})',
maxFontSize: 14,
minFontSize: 10,
style: TextStyle(
fontSize: 14,
color: AppColors.semi_black,
fontFamily: "JakartaRegular",
),
maxLines: 1,
),
// Text(
// "${profile.designation}",
// maxLines: 1,
// style: TextStyle(
// color: AppColors.semi_black,
// fontFamily: "JakartaRegular",
// fontSize: 14,
// ),
// ),
Text(
"${profile.employeeeID}",
style: TextStyle(
color: AppColors.semi_black,
fontFamily: "JakartaRegular",
fontSize: 14,
),
),
InkResponse(
onTap: () {
_showProfileBottomSheet(context);
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
"View Profile",
style: TextStyle(
color: AppColors.app_blue,
fontFamily: "JakartaRegular",
fontSize: 14,
),
// Text(
// "${profile.designation}",
// maxLines: 1,
// style: TextStyle(
// color: AppColors.semi_black,
// fontFamily: "JakartaRegular",
// fontSize: 14,
// ),
// ),
Text(
"${profile.employeeeID}",
style: TextStyle(
color: AppColors.semi_black,
fontFamily: "JakartaRegular",
fontSize: 14,
),
SizedBox(width: 5),
SizedBox(
width: 15,
height: 15,
child: Center(
child: SvgPicture.asset(
"assets/svg/next_button.svg",
),
InkResponse(
onTap: () {
_showProfileBottomSheet(
context,
);
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
"View Profile",
style: TextStyle(
color: AppColors.app_blue,
fontFamily:
"JakartaRegular",
fontSize: 14,
),
),
),
SizedBox(width: 5),
SizedBox(
width: 15,
height: 15,
child: Center(
child: SvgPicture.asset(
"assets/svg/next_button.svg",
),
),
),
],
),
],
),
),
],
),
],
),
),
),
],
),
],
),
),
),
),
),
Expanded(
flex: 10,
child: Container(
padding: EdgeInsets.only(
left: 20,
right: 20,
top: 0,
bottom: 10,
),
margin: EdgeInsets.only(top: 10),
child: GridView.builder(
itemCount: filteredItems.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
),
itemBuilder: (context, index) {
final item = filteredItems[index];
return InkResponse(
onTap: () async {
var res;
switch (item['name']) {
case "Attendance":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => AttendanceScreen(),
settings: RouteSettings(
arguments: 'AttendanceScreen',
),
),
);
break;
case "ERP":
bool isGpsEnabled =
await Geolocator.isLocationServiceEnabled();
if (isGpsEnabled) {
if (Platform.isAndroid) {
Expanded(
flex: 10,
child: Container(
padding: EdgeInsets.only(
left: 20,
right: 20,
top: 0,
bottom: 10,
),
margin: EdgeInsets.only(top: 10),
child: GridView.builder(
itemCount: filteredItems.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
),
itemBuilder: (context, index) {
final item = filteredItems[index];
return InkResponse(
onTap: () async {
var res;
switch (item['name']) {
case "Attendance":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => WebErpScreen(
erp_url:
homescreen.webPageUrl,
),
(context) =>
AttendanceScreen(),
settings: RouteSettings(
arguments: 'AttendanceScreen',
),
),
);
} else {
break;
case "ERP":
bool isGpsEnabled =
await Geolocator.isLocationServiceEnabled();
if (isGpsEnabled) {
if (Platform.isAndroid) {
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => WebErpScreen(
erp_url:
homescreen
.webPageUrl,
),
),
);
} else {
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => WebERPIOS(
url:
homescreen
.webPageUrl,
),
),
);
}
} else {
requestGpsPermission();
}
break;
case "Gen Tracker":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => WebERPIOS(
url: homescreen.webPageUrl,
),
(context) =>
Gentrackerdashboard(),
settings: RouteSettings(
arguments:
'Gentrackerdashboard',
),
),
);
break;
case "Service Engineer":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Serviceengineerdashboard(),
),
);
break;
case "Nearby":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Nearbygenerators(),
),
);
}
} else {
requestGpsPermission();
}
break;
case "Gen Tracker":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Gentrackerdashboard(),
settings: RouteSettings(
arguments: 'Gentrackerdashboard',
),
),
);
break;
case "Service Engineer":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Serviceengineerdashboard(),
),
);
break;
case "Nearby":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Nearbygenerators(),
),
);
break;
case "Inventory":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => InventoryScreen(),
),
);
break;
case "Whizzdom":
bool isGpsEnabled =
await Geolocator.isLocationServiceEnabled();
if (isGpsEnabled) {
res = await Navigator.push(
break;
case "Inventory":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
InventoryScreen(),
),
);
break;
case "Whizzdom":
bool isGpsEnabled =
await Geolocator.isLocationServiceEnabled();
if (isGpsEnabled) {
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => WebWhizzdomScreen(
whizzdom_url:
homescreen
.whizzdomPageUrl,
),
),
);
} else {
requestGpsPermission();
}
break;
case "Common":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Commondashboard(),
),
);
break;
case "Finance":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Financedashboard(),
settings: RouteSettings(
arguments: 'Financedashboard',
),
),
);
break;
case "Orders":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Ordermoduledashboard(),
),
);
case "CRM":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
CrmdashboardScreen(),
settings: RouteSettings(
name: 'CrmdashboardScreen',
),
),
);
default:
print("111");
break;
}
if (res == true) {
homescreen.DashboardApiFunction(
context,
MaterialPageRoute(
builder:
(context) => WebWhizzdomScreen(
whizzdom_url:
homescreen
.whizzdomPageUrl,
),
),
);
} else {
requestGpsPermission();
}
break;
case "Common":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Commondashboard(),
),
);
break;
case "Finance":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Financedashboard(),
settings: RouteSettings(
arguments: 'Financedashboard',
),
),
);
break;
case "Orders":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Ordermoduledashboard(),
),
);
case "CRM":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => CrmdashboardScreen(),
settings: RouteSettings(
name: 'CrmdashboardScreen',
},
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(30),
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment:
MainAxisAlignment.center,
children: [
SvgPicture.asset(
item['icon']!,
height: 45,
),
),
);
default:
print("111");
break;
}
if (res == true) {
homescreen.DashboardApiFunction(context);
}
},
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(30),
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(
item['icon']!,
height: 45,
SizedBox(height: 10),
Text(item['name']!),
],
),
SizedBox(height: 10),
Text(item['name']!),
],
),
),
);
},
),
);
},
),
),
),
),
],
),
],
),
),
),
),
),
),
);
},
);
);
},
)
: NoNetwork(context);
}
Future<void> _showProfileBottomSheet(BuildContext context) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
import '../Notifiers/scanLoginProvider.dart';
import '../Utils/app_colors.dart';
import '../Utils/commonServices.dart';
import '../Utils/commonWidgets.dart';
class Scannerlogin extends StatefulWidget {
......@@ -16,67 +18,100 @@ class Scannerlogin extends StatefulWidget {
}
class _ScannerloginState extends State<Scannerlogin> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
Widget build(BuildContext context) {
return Consumer<Scanloginprovider>(
builder: (context, provider, child) {
return WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: Platform.isIOS?false:true,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar(context, "QR Login"),
body: Container(
decoration: BoxDecoration(color: Colors.black),
child: Column(
children: [
Spacer(),
Container(
height: 250,
void initState() {
// TODO: implement initState
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
child: QRView(
super.initState();
}
key: provider.scannerKey,
onQRViewCreated: (p0) {
provider.onQRViewCreated(p0, context);
},
formatsAllowed: [BarcodeFormat.qrcode],
cameraFacing: CameraFacing.back,
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == 'Online')
? Consumer<Scanloginprovider>(
builder: (context, provider, child) {
return WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar(context, "QR Login"),
body: Container(
decoration: BoxDecoration(color: Colors.black),
child: Column(
children: [
Spacer(),
Container(
height: 250,
overlay: QrScannerOverlayShape(
child: QRView(
key: provider.scannerKey,
onQRViewCreated: (p0) {
provider.onQRViewCreated(p0, context);
},
formatsAllowed: [BarcodeFormat.qrcode],
cameraFacing: CameraFacing.back,
borderColor: AppColors.app_blue,
borderRadius: 20,
borderLength: 60,
borderWidth: 10,
cutOutSize: 250.0,
overlay: QrScannerOverlayShape(
borderColor: AppColors.app_blue,
borderRadius: 20,
borderLength: 60,
borderWidth: 10,
cutOutSize: 250.0,
),
),
),
),
),
SizedBox(height: 25),
Text(
"Scan QR",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 18, color: Colors.white),
),
Text(
"to Login",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14, color: Colors.white),
),
Spacer(),
SizedBox(height: 25),
Text(
"Scan QR",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 18, color: Colors.white),
),
Text(
"to Login",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14, color: Colors.white),
),
Spacer(),
SizedBox(height: 50),
],
SizedBox(height: 50),
],
),
),
),
),
),
),
);
},
);
);
},
)
: NoNetwork(context);
}
}
import 'dart:async';
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
......@@ -13,6 +14,8 @@ import 'package:generp/screens/WebERPScreen.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart';
import '../Utils/commonServices.dart';
const MAX_PROGRESS = 100;
Future main() async {
......@@ -31,6 +34,11 @@ class WebERPIOS extends StatefulWidget {
}
class _WebERPIOSState extends State<WebERPIOS> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
final Completer<InAppWebViewController> _controller =
Completer<InAppWebViewController>();
var empId = "";
......@@ -48,7 +56,10 @@ class _WebERPIOSState extends State<WebERPIOS> {
@override
void initState() {
// loadData();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
pullToRefreshController =
kIsWeb
? null
......@@ -73,16 +84,28 @@ class _WebERPIOSState extends State<WebERPIOS> {
@override
void dispose() {
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Platform.isAndroid
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
)
: _scaffold(context);
: _scaffold(context):NoNetwork(context);
}
Widget _scaffold(BuildContext context) {
......
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:generp/Utils/commonServices.dart';
......@@ -33,6 +34,7 @@ Future runErpScreenApp() async {
class WebErpScreen extends StatefulWidget {
final String erp_url;
const WebErpScreen({super.key, required this.erp_url});
@override
......@@ -40,6 +42,10 @@ class WebErpScreen extends StatefulWidget {
}
class _WebErpScreenState extends State<WebErpScreen> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
final Completer<InAppWebViewController> _controller =
Completer<InAppWebViewController>();
var empId = "";
......@@ -62,6 +68,10 @@ class _WebErpScreenState extends State<WebErpScreen> {
void initState() {
// loadData();
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
pullToRefreshController =
kIsWeb
? null
......@@ -107,10 +117,22 @@ class _WebErpScreenState extends State<WebErpScreen> {
@override
void dispose() {
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return WillPopScope(
onWillPop: () async {
if (await _webViewController!.canGoBack()) {
......@@ -119,7 +141,7 @@ class _WebErpScreenState extends State<WebErpScreen> {
}
return true; // Allow default back button behavior
},
child: SafeArea(
child: connection=="Online"?SafeArea(
top: false,
bottom: Platform.isIOS?false:true,
child: Scaffold(
......@@ -502,7 +524,7 @@ class _WebErpScreenState extends State<WebErpScreen> {
),
),
),
),
):NoNetwork(context),
);
}
// Future<void> saveBase64File(String base64Data, String filename, String mimeType) async {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart';
......@@ -9,6 +10,7 @@ import 'package:provider/provider.dart';
import 'package:generp/screens/screensExports.dart';
import '../../Notifiers/crmProvider/crmDashboardProvider.dart';
import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart';
class CrmdashboardScreen extends StatefulWidget {
......@@ -20,10 +22,16 @@ class CrmdashboardScreen extends StatefulWidget {
class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
FocusNode focusNode = FocusNode();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((event) {
setState(() => _source = event);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var prov = Provider.of<Crmdashboardprovider>(context, listen: false);
prov.accessPagesAPIFunction(context);
......@@ -31,15 +39,37 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
prov.crmPendingTasksAPIFunction(context);
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
)
: _scaffold(context);
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == "Online")
? Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: true,
child: _scaffold(context),
),
)
: _scaffold(context)
: NoNetwork(context);
}
Widget _scaffold(BuildContext context) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
......@@ -10,6 +11,7 @@ import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/finance/FileViewer.dart';
import 'package:provider/provider.dart';
import '../../Utils/commonServices.dart';
import '../commonDateRangeFilter.dart';
import 'PaymentRequestionListDetails.dart';
......@@ -30,11 +32,19 @@ class Allpaymentrequesitionlistsbymodes extends StatefulWidget {
class _AllpaymentrequesitionlistsbymodesState
extends State<Allpaymentrequesitionlistsbymodes> {
late Commondaterangefilter cf;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
late Commondaterangefilter cf;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
cf = Commondaterangefilter();
var provider = Provider.of<Requestionlistprovider>(
......@@ -52,9 +62,27 @@ class _AllpaymentrequesitionlistsbymodesState
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Consumer<Requestionlistprovider>(
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Requestionlistprovider>(
builder: (context, provider, child) {
final requestLists = provider.requisitionList;
return WillPopScope(
......@@ -383,7 +411,7 @@ class _AllpaymentrequesitionlistsbymodesState
),
);
},
);
):NoNetwork(context);
}
Future<void> _showOptionsSheet(BuildContext context) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
......@@ -12,6 +13,7 @@ import 'package:generp/screens/commom/accountsListDetails.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import '../../Utils/commonServices.dart';
import 'FileViewer.dart';
class Paymentrequestionlistdetails extends StatefulWidget {
......@@ -33,6 +35,11 @@ class Paymentrequestionlistdetails extends StatefulWidget {
class _PaymentrequestionlistdetailsState
extends State<Paymentrequestionlistdetails> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode(),);
Dropdowntheme ddtheme = Dropdowntheme();
TextEditingController approvedAmount = TextEditingController();
......@@ -63,6 +70,10 @@ class _PaymentrequestionlistdetailsState
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Requesitionlidtdetailsprovider>(
context,
......@@ -77,12 +88,24 @@ class _PaymentrequestionlistdetailsState
void dispose() {
// TODO: implement dispose
focusNodes.map((e)=>e.dispose());
_connectivity.disposeStream();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Consumer<Requesitionlidtdetailsprovider>(
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Requesitionlidtdetailsprovider>(
builder: (context, provider, child) {
var req_det = provider.requestsDetails;
isLevel1Finalized = [
......@@ -574,7 +597,7 @@ class _PaymentrequestionlistdetailsState
},
);
},
);
):NoNetwork(context);
}
Future<void> _showLevelApprovalSheet(BuildContext context, paymentID) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/cupertino.dart';
......@@ -10,6 +11,7 @@ import 'package:generp/Utils/dropdownTheme.dart';
import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart';
import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart';
class Addpaymentreceiptlist extends StatefulWidget {
......@@ -23,10 +25,18 @@ class Addpaymentreceiptlist extends StatefulWidget {
class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
Dropdowntheme ddtheme = Dropdowntheme();
List<FocusNode> focusNodes = List.generate(12, (index) => FocusNode());
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentreceiptsprovider>(
context,
......@@ -39,6 +49,7 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
@override
void dispose() {
focusNodes.map((e) => e.dispose());
_connectivity.disposeStream();
super.dispose();
}
......@@ -49,7 +60,18 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
@override
Widget build(BuildContext context) {
return Consumer<Paymentreceiptsprovider>(
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) {
return WillPopScope(
child: SafeArea(
......@@ -651,7 +673,7 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
},
);
},
);
):NoNetwork(context);
}
// void _showDialog(Widget child) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
......@@ -13,6 +14,7 @@ import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import '../../Models/financeModels/addDirectPaymentResponse.dart';
import '../../Utils/commonServices.dart';
class Directpaymentrequesitionlist extends StatefulWidget {
final String pageTitleName;
......@@ -29,10 +31,17 @@ class _DirectpaymentrequesitionlistState
Dropdowntheme ddtheme = Dropdowntheme();
List<FocusNode> focusNodes = List.generate(12, (index) => FocusNode());
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Requestionlistprovider>(
context,
......@@ -45,6 +54,7 @@ class _DirectpaymentrequesitionlistState
@override
void dispose() {
focusNodes.map((e) => e.dispose());
_connectivity.disposeStream();
super.dispose();
}
......@@ -55,7 +65,18 @@ class _DirectpaymentrequesitionlistState
@override
Widget build(BuildContext context) {
return Consumer<Requestionlistprovider>(
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Requestionlistprovider>(
builder: (context, provider, child) {
return WillPopScope(
child: SafeArea(
......@@ -653,7 +674,7 @@ class _DirectpaymentrequesitionlistState
},
);
},
);
):NoNetwork(context);
}
// void _showDialog(Widget child) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:generp/Notifiers/financeProvider/DashboardProvider.dart';
......@@ -8,6 +9,8 @@ import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/screensExports.dart';
import 'package:provider/provider.dart';
import '../../Utils/commonServices.dart';
class Financedashboard extends StatefulWidget {
const Financedashboard({super.key});
......@@ -16,25 +19,56 @@ class Financedashboard extends StatefulWidget {
}
class _FinancedashboardState extends State<Financedashboard> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Dashboardprovider>(context, listen: false);
provider.DashboardPagesAPIFunction(context);
provider.addFormfinanceFormAccessPagesAPIFunction(context);
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
)
: _scaffold(context);
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == "Online")
? Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: true,
child: _scaffold(context),
),
)
: _scaffold(context)
: NoNetwork(context);
}
Widget _scaffold(BuildContext context) {
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:generp/Utils/app_colors.dart';
......@@ -7,6 +8,7 @@ import 'package:generp/Utils/commonWidgets.dart';
import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
import '../../Utils/commonServices.dart';
import 'FileViewer.dart';
class Paymentdetailspaymentrequisition extends StatefulWidget {
......@@ -28,10 +30,17 @@ class _PaymentdetailspaymentrequisitionState
extends State<Paymentdetailspaymentrequisition> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentrequisitionpaymentslistprovider>(
context,
......@@ -41,9 +50,27 @@ class _PaymentdetailspaymentrequisitionState
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Consumer<Paymentrequisitionpaymentslistprovider>(
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Paymentrequisitionpaymentslistprovider>(
builder: (context, provider, child) {
var payment_det = provider.paymentDetails;
......@@ -213,7 +240,7 @@ class _PaymentdetailspaymentrequisitionState
},
);
},
);
):NoNetwork(context);
}
}
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
......@@ -7,24 +8,36 @@ import 'package:generp/screens/finance/paymentDetailsPaymentRequisition.dart';
import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart';
import '../commonDateRangeFilter.dart';
import 'FileViewer.dart';
class Paymentlistpaymentrequisition extends StatefulWidget {
final String pageTitleName;
const Paymentlistpaymentrequisition({super.key, required this.pageTitleName});
@override
State<Paymentlistpaymentrequisition> createState() => _PaymentlistpaymentrequisitionState();
State<Paymentlistpaymentrequisition> createState() =>
_PaymentlistpaymentrequisitionState();
}
class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequisition> {
late Commondaterangefilter cf;
class _PaymentlistpaymentrequisitionState
extends State<Paymentlistpaymentrequisition> {
late Commondaterangefilter cf;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
cf = Commondaterangefilter();
var provider = Provider.of<Paymentrequisitionpaymentslistprovider>(
......@@ -36,309 +49,380 @@ late Commondaterangefilter cf;
start: DateTime(now.year, now.month, now.day),
end: DateTime(now.year, now.month, now.day),
);
final dateRange = cf.getFormattedDateRange(range);
provider.paymentsListAPI(context,'','');
final dateRange = cf.getFormattedDateRange(range);
provider.paymentsListAPI(context, '', '');
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Consumer<Paymentrequisitionpaymentslistprovider>(
builder: (context, provider, child) {
final requestLists = provider.paymentsList;
return WillPopScope(
onWillPop: () {
return onBackPressed(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS?false:true,
child: Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar2(
context,
widget.pageTitleName,
provider.resetForm,
Row(
children: [
// InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg",),
// ),
InkResponse(
onTap: () async {
var cf = Commondaterangefilter();
var result = await cf.showFilterBottomSheet(context);
if (result != null) {
var dateRange = result['dateRange'] as DateTimeRange?;
print("dateRange: $dateRange");
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection == "Online"
? Consumer<Paymentrequisitionpaymentslistprovider>(
builder: (context, provider, child) {
final requestLists = provider.paymentsList;
return WillPopScope(
onWillPop: () {
return onBackPressed(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar2(
context,
widget.pageTitleName,
provider.resetForm,
Row(
children: [
// InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg",),
// ),
InkResponse(
onTap: () async {
var cf = Commondaterangefilter();
var result = await cf.showFilterBottomSheet(
context,
);
if (result != null) {
var dateRange =
result['dateRange'] as DateTimeRange?;
print("dateRange: $dateRange");
var formatted = result['formatted'] as List<String>;
print("formatted: $formatted");
var formatted =
result['formatted'] as List<String>;
print("formatted: $formatted");
if (formatted.isNotEmpty) {
var fromDate = formatted[0]; // From date
var toDate = formatted[1]; // To date
print("from_date: $fromDate");
print("to_date: $toDate");
provider.paymentsListAPI(context,fromDate,toDate);
// You can now use fromDate and toDate as needed
// For example, store them or pass to another function
} else {
print("No valid date range selected");
}
} else {
print("Bottom sheet closed without selection");
}
},
child: SvgPicture.asset("assets/svg/filter_ic.svg",height: 25,),
if (formatted.isNotEmpty) {
var fromDate = formatted[0]; // From date
var toDate = formatted[1]; // To date
print("from_date: $fromDate");
print("to_date: $toDate");
provider.paymentsListAPI(
context,
fromDate,
toDate,
);
// You can now use fromDate and toDate as needed
// For example, store them or pass to another function
} else {
print("No valid date range selected");
}
} else {
print("Bottom sheet closed without selection");
}
},
child: SvgPicture.asset(
"assets/svg/filter_ic.svg",
height: 25,
),
),
],
),
],
),
),
backgroundColor: AppColors.scaffold_bg_color,
body: provider.isLoading
? Center(child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue)
))
:requestLists.isNotEmpty?SizedBox(
child: Scrollbar(
thumbVisibility: false,
),
backgroundColor: AppColors.scaffold_bg_color,
body:
provider.isLoading
? Center(
child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue,
),
),
)
: requestLists.isNotEmpty
? SizedBox(
child: Scrollbar(
thumbVisibility: false,
child: ListView.builder(
itemCount: requestLists.length,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
margin: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
child: Column(
children: [
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 50,
width: 35,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color(0xFFFFF3CE),
borderRadius: BorderRadius.circular(8),
child: ListView.builder(
itemCount: requestLists.length,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
margin: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
requestLists[index].receipientAccount!,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 50,
width: 35,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color(0xFFFFF3CE),
borderRadius:
BorderRadius.circular(8),
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
requestLists[index]
.receipientAccount!,
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors
.semi_black,
),
),
Text(
"₹${requestLists[index].amount}",
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors.app_blue,
),
),
],
),
),
),
// Expanded(
// flex: 2,
// child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: 5,
// vertical: 10,
// ),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(8),
// color: Color(0xFFE3FFE0),
// ),
// child: Center(
// child: Text(
// requestLists[index].refType!,
// textAlign: TextAlign.center,
// style: TextStyle(
// fontFamily: "JakartaMedium",
// fontSize: 14,
// color: Color(0xFF0D9C00),
// ),
// ),
// ),
// ),
// ),
],
),
Text(
"₹${requestLists[index].amount}",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
Divider(
thickness: 0.5,
color: Color(0xFFD7D7D7),
),
],
),
),
),
// Expanded(
// flex: 2,
// child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: 5,
// vertical: 10,
// ),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(8),
// color: Color(0xFFE3FFE0),
// ),
// child: Center(
// child: Text(
// requestLists[index].refType!,
// textAlign: TextAlign.center,
// style: TextStyle(
// fontFamily: "JakartaMedium",
// fontSize: 14,
// color: Color(0xFF0D9C00),
// ),
// ),
// ),
// ),
// ),
],
),
Divider(thickness: 0.5, color: Color(0xFFD7D7D7)),
...List.generate(5, (j) {
final headings = [
"To Account",
"Attachment",
"Request Mode",
...List.generate(5, (j) {
final headings = [
"To Account",
"Attachment",
"Request Mode",
"Payment Date",
"Note",
];
"Payment Date",
"Note",
];
final subHeadings = [
requestLists[index].payAccount,
"View",
requestLists[index].requestMode,
final subHeadings = [
requestLists[index].payAccount,
"View",
requestLists[index].requestMode,
// requestLists[index].attachmentDirFilePath
requestLists[index].paymentDate,
requestLists[index].description,
];
if(headings[j]=="Attachment"&&requestLists[index]
.attachmentViewFileName==""){
return SizedBox.shrink();
}
return Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
Expanded(
child: InkResponse(
onTap:
j != 1
? null
: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Fileviewer(
fileName:
requestLists[index]
.attachmentViewFileName!,
fileUrl:
requestLists[index]
.attachmentDirFilePath!,
),
// requestLists[index].attachmentDirFilePath
requestLists[index].paymentDate,
requestLists[index].description,
];
if (headings[j] == "Attachment" &&
requestLists[index]
.attachmentViewFileName ==
"") {
return SizedBox.shrink();
}
return Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors.semi_black,
),
),
),
Expanded(
child: InkResponse(
onTap:
j != 1
? null
: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Fileviewer(
fileName:
requestLists[index].attachmentViewFileName!,
fileUrl:
requestLists[index].attachmentDirFilePath!,
),
),
);
},
child: Text(
subHeadings[j] == ""
? "-"
: subHeadings[j] ??
"-",
style: TextStyle(
fontSize: 14,
color:
j == 1
? AppColors
.app_blue
: Color(
0xFF818181,
),
decoration:
j == 1
? TextDecoration
.underline
: TextDecoration
.none,
decorationColor:
j == 1
? AppColors
.app_blue
: AppColors
.white,
),
),
),
),
],
),
);
},
child: Text(
subHeadings[j]==""?"-": subHeadings[j]??"-",
style: TextStyle(
fontSize: 14,
color:
j == 1
? AppColors.app_blue
: Color(0xFF818181),
decoration:
j == 1
? TextDecoration.underline
: TextDecoration.none,
decorationColor:
j == 1
? AppColors.app_blue
: AppColors.white,
}),
InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Paymentdetailspaymentrequisition(
pageName:
widget.pageTitleName,
paymentRequestId:
requestLists[index]
.id,
),
),
);
if (res == true) {
provider.paymentsListAPI(
context,
'',
'',
);
}
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
"View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
SizedBox(width: 5),
SvgPicture.asset(
"assets/svg/next_button.svg",
),
],
),
),
),
),
),
],
),
);
}),
InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Paymentdetailspaymentrequisition(
pageName: widget.pageTitleName,
paymentRequestId:
requestLists[index].id,
),
),
);
if(res==true){
provider.paymentsListAPI(context,'','');
}
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
SizedBox(width: 5),
SvgPicture.asset(
"assets/svg/next_button.svg",
],
),
],
),
);
},
),
),
],
),
);
},
),
)
: Emptywidget(context),
),
):Emptywidget(context)
),
),
);
},
);
),
);
},
)
: NoNetwork(context);
}
Future<void> _showOptionsSheet(BuildContext context) {
......@@ -362,7 +446,10 @@ late Commondaterangefilter cf;
left: 15,
right: 15,
top: 10,
),padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom,),
),
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView(
child: Column(
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:generp/Utils/app_colors.dart';
import 'package:generp/Utils/commonWidgets.dart';
import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart';
import '../../Utils/commonServices.dart';
import 'FileViewer.dart';
class Paymentreceiptdetails extends StatefulWidget {
......@@ -26,11 +28,18 @@ class Paymentreceiptdetails extends StatefulWidget {
class _PaymentreceiptdetailsState
extends State<Paymentreceiptdetails> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentreceiptsprovider>(
context,
......@@ -39,10 +48,28 @@ class _PaymentreceiptdetailsState
provider.paymentsListDetailsAPI(context, widget.paymentRequestId);
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override
Widget build(BuildContext context) {
return Consumer<Paymentreceiptsprovider>(
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?
Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) {
var payment_det = provider.receiptDetails;
......@@ -190,7 +217,7 @@ class _PaymentreceiptdetailsState
},
);
},
);
):NoNetwork(context);
}
}
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
......@@ -9,12 +10,14 @@ import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart';
import '../commonDateRangeFilter.dart';
import 'FileViewer.dart';
class Paymentreceiptlist extends StatefulWidget {
final String pageTitleName;
const Paymentreceiptlist({super.key, required this.pageTitleName});
@override
......@@ -22,292 +25,363 @@ class Paymentreceiptlist extends StatefulWidget {
}
class _PaymentreceiptlistState extends State<Paymentreceiptlist> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentreceiptsprovider>(
context,
listen: false,
);
provider.paymentsListAPI(context,'','');
provider.paymentsListAPI(context, '', '');
});
}
@override
Widget build(BuildContext context) {
return Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) {
final requestLists = provider.receiptsList;
return WillPopScope(
onWillPop: () {
return onBackPressed(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS?false:true,
child: Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar2(
context,
widget.pageTitleName,
provider.resetForm,
Row(
children: [
// InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg",),
// ),
InkResponse(
onTap: () async {
var cf = Commondaterangefilter();
var result = await cf.showFilterBottomSheet(context);
if (result != null) {
var dateRange = result['dateRange'] as DateTimeRange?;
print("dateRange: $dateRange");
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection == "Online"
? Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) {
final requestLists = provider.receiptsList;
return WillPopScope(
onWillPop: () {
return onBackPressed(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar2(
context,
widget.pageTitleName,
provider.resetForm,
Row(
children: [
// InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg",),
// ),
InkResponse(
onTap: () async {
var cf = Commondaterangefilter();
var result = await cf.showFilterBottomSheet(
context,
);
if (result != null) {
var dateRange =
result['dateRange'] as DateTimeRange?;
print("dateRange: $dateRange");
var formatted = result['formatted'] as List<String>;
print("formatted: $formatted");
var formatted =
result['formatted'] as List<String>;
print("formatted: $formatted");
if (formatted.isNotEmpty) {
var fromDate = formatted[0]; // From date
var toDate = formatted[1]; // To date
print("from_date: $fromDate");
print("to_date: $toDate");
provider.paymentsListAPI(context,fromDate,toDate);
// You can now use fromDate and toDate as needed
// For example, store them or pass to another function
} else {
print("No valid date range selected");
}
} else {
print("Bottom sheet closed without selection");
}
},
child: SvgPicture.asset("assets/svg/filter_ic.svg",height: 25,),
),
],
),
),
backgroundColor: AppColors.scaffold_bg_color,
body: provider.isLoading
? Center(child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue)
)):requestLists.isNotEmpty?SizedBox(
child: Scrollbar(
child: ListView.builder(
itemCount: requestLists.length,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
margin: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
if (formatted.isNotEmpty) {
var fromDate = formatted[0]; // From date
var toDate = formatted[1]; // To date
print("from_date: $fromDate");
print("to_date: $toDate");
provider.paymentsListAPI(
context,
fromDate,
toDate,
);
// You can now use fromDate and toDate as needed
// For example, store them or pass to another function
} else {
print("No valid date range selected");
}
} else {
print("Bottom sheet closed without selection");
}
},
child: SvgPicture.asset(
"assets/svg/filter_ic.svg",
height: 25,
),
),
child: Column(
children: [
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 50,
width: 35,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color(0xFFFFF3CE),
borderRadius: BorderRadius.circular(8),
],
),
),
backgroundColor: AppColors.scaffold_bg_color,
body:
provider.isLoading
? Center(
child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue,
),
),
)
: requestLists.isNotEmpty
? SizedBox(
child: Scrollbar(
child: ListView.builder(
itemCount: requestLists.length,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
margin: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
requestLists[index].receipientAccount!,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 50,
width: 35,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color(0xFFFFF3CE),
borderRadius:
BorderRadius.circular(8),
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
requestLists[index]
.receipientAccount!,
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors
.semi_black,
),
),
Text(
"₹${requestLists[index].amount}",
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors.app_blue,
),
),
],
),
),
),
],
),
Text(
"₹${requestLists[index].amount}",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
Divider(
thickness: 0.5,
color: Color(0xFFD7D7D7),
),
],
),
),
),
...List.generate(5, (j) {
final headings = [
"Receipt Account",
"Attachment",
"Request Mode",
],
),
Divider(thickness: 0.5, color: Color(0xFFD7D7D7)),
...List.generate(5, (j) {
final headings = [
"Receipt Account",
"Attachment",
"Request Mode",
"Receipt Date",
"Note",
];
"Receipt Date",
"Note",
];
final subHeadings = [
requestLists[index].receipientAccount,
"View",
requestLists[index].requestMode,
final subHeadings = [
requestLists[index]
.receipientAccount,
"View",
requestLists[index].requestMode,
// requestLists[index].attachmentDirFilePath
requestLists[index].receiptDate,
requestLists[index].description,
];
if(headings[j]=="Attachment"&&requestLists[index]
.attachmentViewFileName==""){
return SizedBox.shrink();
}
return Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
Expanded(
child: InkResponse(
onTap:
j != 1
? null
: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Fileviewer(
fileName:
requestLists[index]
.attachmentViewFileName!,
fileUrl:
requestLists[index]
.attachmentDirFilePath!,
),
// requestLists[index].attachmentDirFilePath
requestLists[index].receiptDate,
requestLists[index].description,
];
if (headings[j] == "Attachment" &&
requestLists[index]
.attachmentViewFileName ==
"") {
return SizedBox.shrink();
}
return Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors.semi_black,
),
),
),
Expanded(
child: InkResponse(
onTap:
j != 1
? null
: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Fileviewer(
fileName:
requestLists[index].attachmentViewFileName!,
fileUrl:
requestLists[index].attachmentDirFilePath!,
),
),
);
},
child: Text(
subHeadings[j] == ""
? "-"
: subHeadings[j] ??
"-",
style: TextStyle(
fontSize: 14,
color:
j == 1
? AppColors
.app_blue
: Color(
0xFF818181,
),
decoration:
j == 1
? TextDecoration
.underline
: TextDecoration
.none,
decorationColor:
j == 1
? AppColors
.app_blue
: AppColors
.white,
),
),
),
),
],
),
);
},
child: Text(
subHeadings[j]==""?"-":subHeadings[j]??"-",
style: TextStyle(
fontSize: 14,
color:
j == 1
? AppColors.app_blue
: Color(0xFF818181),
decoration:
j == 1
? TextDecoration.underline
: TextDecoration.none,
decorationColor:
j == 1
? AppColors.app_blue
: AppColors.white,
}),
InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Paymentreceiptdetails(
pageName:
widget.pageTitleName,
paymentRequestId:
requestLists[index]
.id,
),
),
);
if (res == true) {
provider.paymentsListAPI(
context,
'',
'',
);
}
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
"View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
SizedBox(width: 5),
SvgPicture.asset(
"assets/svg/next_button.svg",
),
],
),
),
),
),
),
],
),
);
}),
InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Paymentreceiptdetails(
pageName: widget.pageTitleName,
paymentRequestId:
requestLists[index].id,
),
),
);
if(res==true){
provider.paymentsListAPI(context,'','');
}
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
SizedBox(width: 5),
SvgPicture.asset(
"assets/svg/next_button.svg",
],
),
],
),
);
},
),
),
],
),
);
},
),
)
: Emptywidget(context),
),
):Emptywidget(context)
),
),
);
},
);
),
);
},
)
: NoNetwork(context);
}
Future<void> _showOptionsSheet(BuildContext context) {
......@@ -332,7 +406,9 @@ class _PaymentreceiptlistState extends State<Paymentreceiptlist> {
right: 15,
top: 10,
),
padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom,),
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment