"lib/screens/old/prospectListold.dart" did not exist on "fd66d000f57cdba70ed15fd2e4dd42f9d4c62c09"
Commit de740138 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

13-06-2025 By Sai Srinivas

Order Modules: Screens, Providers and Models
parent 75c5b679
...@@ -207,6 +207,20 @@ class Generatordetailsprovider extends ChangeNotifier { ...@@ -207,6 +207,20 @@ class Generatordetailsprovider extends ChangeNotifier {
_selectedDescriptionId = value; _selectedDescriptionId = value;
} }
void resetForm(){
_qrViewController!.dispose();
engNoController.clear();
_selectedComplaintType = null;
_selectedCategoryType= null;
_selectedDescriptionType= null;
_selectedType = "";
_selectedTypeId = "";
_selectedCategory = "";
_selectedCategoryId = "";
_selectedDescriptionId = "";
_selectedDescription = "";
}
initialFunction(from) async { initialFunction(from) async {
switch (from) { switch (from) {
case "Generator Details": case "Generator Details":
......
...@@ -82,6 +82,13 @@ set markers(List<Marker> value){ ...@@ -82,6 +82,13 @@ set markers(List<Marker> value){
notifyListeners(); notifyListeners();
} }
void resetAll(){
_currentValue = 1.0;
_selectedItem = "";
_markers= [];
_addresses = [];
}
Future<void> getLocationPermission(context) async { Future<void> getLocationPermission(context) async {
// Check if location services are enabled // Check if location services are enabled
_isLocationEnabled = await Geolocator.isLocationServiceEnabled(); _isLocationEnabled = await Geolocator.isLocationServiceEnabled();
......
...@@ -20,6 +20,11 @@ class Paymentcollectionprovider extends ChangeNotifier { ...@@ -20,6 +20,11 @@ class Paymentcollectionprovider extends ChangeNotifier {
List<AccountList> get accountList => _accountList; List<AccountList> get accountList => _accountList;
bool get isLoading => _isLoading; bool get isLoading => _isLoading;
void resetAll(){
_accountList = [];
_paymentCollectionList = [];
}
Future<void> PaymentCollectionAPI(BuildContext context) async { Future<void> PaymentCollectionAPI(BuildContext context) async {
try { try {
var HomeProvider = Provider.of<HomescreenNotifier>( var HomeProvider = Provider.of<HomescreenNotifier>(
......
...@@ -68,6 +68,12 @@ class Pendingcomplaintsprovider extends ChangeNotifier { ...@@ -68,6 +68,12 @@ class Pendingcomplaintsprovider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
void resetAll(){
_submitLoading = false;
_statusId = "";
_image_picked = 0;
}
Future<void> TechnicianPendingComplaints(BuildContext context) async { Future<void> TechnicianPendingComplaints(BuildContext context) async {
var HomeProvider = Provider.of<HomescreenNotifier>(context, listen: false); var HomeProvider = Provider.of<HomescreenNotifier>(context, listen: false);
try { try {
......
...@@ -57,4 +57,11 @@ class Accountdetailsprovider extends ChangeNotifier{ ...@@ -57,4 +57,11 @@ class Accountdetailsprovider extends ChangeNotifier{
return grouped; return grouped;
} }
void resetValues(){
totalCredit = 0.0;
totalDebit = 0.0;
totalRunningBalance = 0.0;
runningBalances = [];
}
} }
\ No newline at end of file
...@@ -294,4 +294,11 @@ class Paymentrequisitionpaymentslistprovider extends ChangeNotifier{ ...@@ -294,4 +294,11 @@ class Paymentrequisitionpaymentslistprovider extends ChangeNotifier{
print('Error printing data: $e'); print('Error printing data: $e');
} }
} }
void resetForm() {
_paymentsList = [];
_paymentDetails = PaymentDetails();
_headings = [];
_subHeadings = [];
}
} }
\ No newline at end of file
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import '../../Models/ordersModels/ordersAccessiblePagesResponse.dart';
import '../../Models/ordersModels/ordersDetailsByModeResponse.dart';
import '../../Models/ordersModels/ordersListByModeFilterResponse.dart';
import '../../Models/ordersModels/ordersListByModeResponse.dart';
import '../../Utils/commonServices.dart';
import '../../services/api_calling.dart';
import '../HomeScreenNotifier.dart';
class Pagesdashboardprovider extends ChangeNotifier {
TextEditingController feedbackController = TextEditingController();
TextEditingController approveRejectFeedbackController =
TextEditingController();
TextEditingController saleOrderNumberController = TextEditingController();
TextEditingController deleteFeedbackController = TextEditingController();
TextEditingController editCompanyController = TextEditingController();
String? feedbackError;
String? deleteFeedbackError;
String? approveRejectFeedbackError;
String? saleOrderNumberError;
String? companyNameError;
List<PagesAccessible> _ordersAccessiblePagesList = [];
List<Employees> _employeesList = [];
List<String> _leadStatus = [];
List<OrderList> _ordersList = [];
List<Products> _productsHistory = [];
List<FeedbackHistory> _feedbackHistory = [];
List<PaymentHistory> _paymentHistory = [];
bool _isLoading = true;
Employees? _selectedEmployee;
String? _selectedLeadType;
String? _selectedEmpID;
String? _selectedEmpName;
OrderDetails _orderDetails = OrderDetails();
List<String> _headings = [];
List<String> _subHeadings = [];
String _approvalSheetHeading = "";
String _rejecetionSheetHeading = "";
String _deletionSheetHeading = "";
var _image_picked = 0;
final ImagePicker _picker = ImagePicker();
File? _image;
File? _imageName;
String get approvalSheetHeading => _approvalSheetHeading;
String get rejecetionSheetHeading => _rejecetionSheetHeading;
String get deletionSheetHeading => _deletionSheetHeading;
set approvalSheetHeading(String value) {
_approvalSheetHeading = value;
notifyListeners();
}
set rejecetionSheetHeading(String value) {
_rejecetionSheetHeading = value;
notifyListeners();
}
set deletionSheetHeading(String value) {
_deletionSheetHeading = value;
notifyListeners();
}
get image_picked => _image_picked;
File? get imagePath => _imageName;
File? get imageFilePath => _image;
get imagePicked => _image_picked;
List<PagesAccessible> get ordersAccessiblePagesList =>
_ordersAccessiblePagesList;
List<Employees> get employeesList => _employeesList;
List<OrderList> get ordersList => _ordersList;
OrderDetails get orderDetails => _orderDetails;
List<Products> get productsHistory => _productsHistory;
List<FeedbackHistory> get feedbackHistory => _feedbackHistory;
List<PaymentHistory> get paymentHistory => _paymentHistory;
List<String> get leadStatus => _leadStatus;
bool get isLoading => _isLoading;
Employees? get selectedEmployee => _selectedEmployee;
String? get selectedEmpID => _selectedEmpID;
String? get selectedEmpName => _selectedEmpName;
String? get selectedLeadType => _selectedLeadType;
List<String> get Headings => _headings;
List<String> get subHeadings => _subHeadings;
set imagePath(File? value) {
_imageName = value;
notifyListeners();
}
set imageFilePath(File? value) {
_image = value;
notifyListeners();
}
set imagePicked(value) {
_image_picked = value;
notifyListeners();
}
set selectedLeadType(String? value) {
_selectedLeadType = value;
notifyListeners();
}
set selectedEmployee(Employees? value) {
_selectedEmployee = value;
_selectedEmpID = value?.id!;
_selectedEmpName = value!.name!;
notifyListeners();
}
set selectedEmpID(String? value) {
_selectedEmpID = value;
notifyListeners();
}
set selectedEmpName(String? value) {
_selectedEmpName = value;
notifyListeners();
}
void resetAll() {
feedbackController.clear();
approveRejectFeedbackController.clear();
editCompanyController.clear();
saleOrderNumberController.clear();
deleteFeedbackController.clear();
saleOrderNumberError = "";
companyNameError = "";
deleteFeedbackError = "";
approveRejectFeedbackError = "";
_image = null;
_imageName = null;
_image_picked = 0;
_selectedEmployee = null;
_selectedEmpID = "";
_selectedEmpName = "";
_selectedLeadType = "";
notifyListeners();
}
imgFromCamera(context) async {
// Capture a photo
try {
final XFile? galleryImage = await _picker.pickImage(
source: ImageSource.camera,
imageQuality: 50,
);
debugPrint("added");
_image = File(galleryImage!.path);
_imageName = File(galleryImage!.name);
_image_picked = 1;
notifyListeners();
} catch (e) {
debugPrint("mmmm: ${e.toString()}");
}
}
imgFromGallery(context) async {
// Pick an image
try {
final XFile? galleryImage = await _picker.pickImage(
source: ImageSource.gallery,
);
final bytes = (await galleryImage?.readAsBytes())?.lengthInBytes;
final kb = bytes! / 1024;
final mb = kb / 1024;
debugPrint("Jenny: bytes:$bytes, kb:$kb, mb: $mb");
_image = File(galleryImage!.path);
_imageName = File(galleryImage!.name);
_image_picked = 1;
notifyListeners();
// var file = FlutterImageCompress.compressWithFile(galleryImage!.path);
} catch (e) {
debugPrint("mmmm: ${e.toString()}");
}
}
Future<void> ordersAccessiblePagesAPIFunction(context) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDashboardAPI(
provider.empId,
provider.session,
);
if (data != null) {
if (data.error == "0") {
_ordersAccessiblePagesList = data.pagesAccessible!;
notifyListeners();
} else {}
}
} catch (e, s) {}
}
Future<void> ordersListByModeFilterAPIFunction(context, mode) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersListByModeFilterAPI(
provider.empId,
provider.session,
mode,
);
if (data != null) {
if (data.error == "0") {
_employeesList = data.employees!;
_leadStatus = data.leadStatus!;
notifyListeners();
} else {}
}
} catch (e, s) {}
}
Future<void> ordersListByModeAPIFunction(
context,
mode,
teamEmployee,
status,
) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersListByModeAPI(
provider.empId,
provider.session,
mode,
teamEmployee,
status,
);
if (data != null) {
_ordersList.clear();
_isLoading = true;
notifyListeners();
if (data.error == "0") {
_ordersList = data.orderList!;
_isLoading = false;
if (_selectedEmployee != null &&
!_employeesList.contains(_selectedEmployee)) {
_selectedEmployee = null;
_selectedEmpID = "";
_selectedEmpName = "";
}
notifyListeners();
} else {
_isLoading = false;
}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> ordersDetailsByModeAPIFunction(context, orderId, mode) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsByModeAPI(
provider.empId,
provider.session,
orderId,
);
if (data != null) {
_isLoading = true;
notifyListeners();
if (data.error == "0") {
_orderDetails = data.orderDetails!;
_productsHistory = data.products!;
_feedbackHistory = data.feedbackHistory!;
_paymentHistory = data.paymentHistory!;
editCompanyController.text = data.orderDetails!.accountName ?? "";
_headings = [
"Order No",
"Account Name",
"Billing State",
"Billing District",
"Billing Sub Location",
"Billing Pincode",
"Billing Address",
"Sales Person Name",
"Entered By",
"Dispatch State",
"Dispatch District",
"District Sub Location",
"Dispatch Pincode",
"Dispatch Address",
"GST Number",
"Unloading Scope",
"Freight Scope",
"Erection Scope",
"Order Received Date",
"CGST Amount",
"SGST Amount",
"IGST Amount",
"OTP",
"Basic Amount",
"Paid Amount",
"Balance Amount",
"Total Amount",
"TPC Applicable",
"TPC Agent",
"TPC Requested Amount",
"TPC Level 1 Approved Amount",
"TPC Level 2 Approved Amount",
"TPC Payment Mode",
"TPC Payment Reference No",
"TPC Payment Attachment",
"TPC Status",
"Purchase Order",
"Created Datetime",
"Note",
"Status",
];
_subHeadings = [
_orderDetails.orderNumber ?? "-",
_orderDetails.accountName ?? "-",
_orderDetails.billingState ?? "-",
_orderDetails.billingDistrict ?? "-",
_orderDetails.billingSubLocality ?? "-",
_orderDetails.billingPincode ?? "-",
_orderDetails.billingAddress ?? "-",
_orderDetails.salesPersonEmpName ?? "-",
_orderDetails.enteredEmpName ?? "-",
_orderDetails.stateName ?? "-",
_orderDetails.districtName ?? "-",
_orderDetails.subLocationName ?? "-",
_orderDetails.dispatchPincode ?? "-",
_orderDetails.dispatchAddress ?? "-",
_orderDetails.gstNumber ?? "-",
_orderDetails.unloadingScope ?? "-",
_orderDetails.freightScope ?? "-",
_orderDetails.erectionScope ?? "-",
_orderDetails.orderReceivedDate ?? "-",
_orderDetails.cgstAmount ?? "-",
_orderDetails.sgstAmount ?? "-",
_orderDetails.igstAmount ?? "-",
_orderDetails.otp ?? "-",
_orderDetails.basicAmount ?? "-",
_orderDetails.paidAmount ?? "-",
_orderDetails.balanceAmount ?? "-",
_orderDetails.totalAmount ?? "-",
_orderDetails.tpcApplicable ?? "-",
_orderDetails.tpcaAgentName ?? "-",
_orderDetails.requestedTpcAmount ?? "-",
_orderDetails.level1TpcApprovedAmount ?? "-",
_orderDetails.level2TpcApprovedAmount ?? "-",
_orderDetails.tpcPaymentMode ?? "-",
_orderDetails.tpcPaymentReferenceNo ?? "-",
_orderDetails.tpcPaymentAttachementViewFileName ?? "-",
_orderDetails.tpcStatus ?? "-",
_orderDetails.tpcPaymentAttachmentDirFilePath ?? "-",
_orderDetails.createdDatetime ?? "-",
_orderDetails.note ?? "-",
_orderDetails.status ?? "-",
];
_isLoading = false;
switch (mode) {
case "admin":
approvalSheetHeading = "";
rejecetionSheetHeading = "";
deletionSheetHeading = "Delete order";
break;
case "level_one_approval":
approvalSheetHeading = "Level 1 Approval";
rejecetionSheetHeading = "Level 1 Reject";
deletionSheetHeading = "";
break;
case "level_two_approval":
approvalSheetHeading = "Level 2 Approval";
rejecetionSheetHeading = "Level 2 Reject";
deletionSheetHeading = "";
break;
case "level_two_rejected":
approvalSheetHeading = "Level 2 Approval Update";
rejecetionSheetHeading = "Level 2 Final Reject";
deletionSheetHeading = "";
break;
case "sales_order_registered":
approvalSheetHeading = "Sales Order Registered";
rejecetionSheetHeading = "";
deletionSheetHeading = "";
break;
case "dispatched":
approvalSheetHeading = "";
rejecetionSheetHeading = "";
deletionSheetHeading = "";
break;
default:
approvalSheetHeading = "";
rejecetionSheetHeading = "";
deletionSheetHeading = "";
break;
}
} else {
_isLoading = false;
}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> ordersDetailsFeedbackSubmissionAPIFunction(
context,
orderId,
status,
) async {
try {
if (!validateFeedbackForm(context)) {
// _submitClicked = false;
return;
}
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsFeedbackSubmissionAPI(
provider.empId,
provider.session,
orderId,
feedbackController.text,
status,
_image,
);
if (data != null) {
if (data.error == "0") {
toast(context, "Submitted Successfully");
resetForm();
Navigator.pop(context, true);
notifyListeners();
} else {}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> approvalRejectionAPIFunction(
context,
status,
orderId,
type,
tpc_applicable,
tpc_approved_amount,
invoice_number,
vehicle_number,
driver_name,
driver_mobile_no,
crm_order_p_id,
mode,
) async {
try {
if (!validateApproveRejectForm(context, mode)) {
// _submitClicked = false;
return;
}
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsApproveRejectAPI(
provider.empId,
provider.session,
status,
type,
orderId,
approveRejectFeedbackController.text,
tpc_applicable,
tpc_approved_amount,
saleOrderNumberController.text,
editCompanyController.text,
invoice_number,
vehicle_number,
driver_name,
driver_mobile_no,
crm_order_p_id,
);
if (data != null) {
if (data.error == "0") {
toast(context, "${data.message}");
resetForm();
Navigator.pop(context, true);
notifyListeners();
} else {}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> delectionAPIFunction(context, orderId) async {
try {
if (!validateDeleteForm(context)) {
// _submitClicked = false;
return;
}
final provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersDetailsDeleteAPI(
provider.empId,
provider.session,
orderId,
deleteFeedbackController.text,
);
if (data != null) {
if (data.error == "0") {
toast(context, "${data.message}");
resetForm();
Navigator.pop(context, true);
notifyListeners();
} else {}
notifyListeners();
}
} catch (e, s) {}
}
void onChangeFeedback(value) {
feedbackError = "";
notifyListeners();
}
void onChangeDeletion(value) {
deleteFeedbackError = "";
notifyListeners();
}
void onChangeApproveRejection(value) {
approveRejectFeedbackError = "";
notifyListeners();
}
void onChangeSaleOrderNumber(value) {
saleOrderNumberError = "";
notifyListeners();
}
void onChangeEditCompanyName(value) {
companyNameError = "";
notifyListeners();
}
bool validateFeedbackForm(BuildContext context) {
// Reset all errors
feedbackError = null;
bool isValid = true;
if (feedbackController.text.trim().isEmpty) {
feedbackError = "Please enter a description";
isValid = false;
}
//
// buttonEnabled = isValid;
notifyListeners();
return isValid;
}
bool validateDeleteForm(BuildContext context) {
// Reset all errors
deleteFeedbackError = null;
bool isValid = true;
if (deleteFeedbackController.text.trim().isEmpty) {
deleteFeedbackError = "Please enter a description";
isValid = false;
}
//
// buttonEnabled = isValid;
notifyListeners();
return isValid;
}
bool validateApproveRejectForm(BuildContext context, mode) {
// Reset all errors
approveRejectFeedbackError = null;
companyNameError = null;
saleOrderNumberError = null;
bool isValid = true;
if (approveRejectFeedbackController.text.trim().isEmpty) {
approveRejectFeedbackError = "Please enter a description";
isValid = false;
}
if (mode == "dispatched") {
if (editCompanyController.text.trim().isEmpty) {
companyNameError = "Please enter a description";
isValid = false;
}
if (saleOrderNumberController.text.trim().isEmpty) {
saleOrderNumberError = "Please enter a description";
isValid = false;
}
}
//
// buttonEnabled = isValid;
notifyListeners();
return isValid;
}
void resetForm() {
feedbackController.clear();
approveRejectFeedbackController.clear();
editCompanyController.clear();
saleOrderNumberController.clear();
deleteFeedbackController.clear();
saleOrderNumberError = "";
companyNameError = "";
deleteFeedbackError = "";
approveRejectFeedbackError = "";
_image = null;
_imageName = null;
_image_picked = 0;
}
// List<List<String>> prepareExportData() {
// final headers = [
// 'ID',
// 'Payment Account',
// 'Amount',
// 'Branch',
// 'Account Number',
// 'Description',
// 'Mode',
// 'Payment Reference Number',
// 'Created Employee',
// 'Date',
// ];
//
// final rows =
// ordersList
// .map(
// (item) =>
// [
// item.id ?? '',
// item.payAccount ?? '',
// item.amount ?? '',
// item.bankName??"",
// item.bankBranchName ?? '',
// item.bankAccountNumber ?? '',
// item.description ?? '',
// item.requestMode ?? '',
// item.paymentReferenceNumber ?? '',
// item.createdEmployee ?? '',
// item.createdDatetime ?? '',
// ],
// )
// .toList();
//
// return [headers, ...rows];
// }
//
// void copyToClipboard(BuildContext context) async {
// try {
// if (paymentsList.isEmpty) {
// ScaffoldMessenger.of(
// context,
// ).showSnackBar(SnackBar(content: Text("No data to copy")));
// return;
// }
// final data = prepareExportData();
// String raw = data.map((row) => row.join('\t')).join('\n');
// print('Clipboard data: $raw');
// await Clipboard.setData(ClipboardData(text: raw));
// toast(context, "Copied to Clipboard");
// } catch (e) {
// print('Error copying to clipboard: $e');
// }
// }
//
// Future<String> getSaveDirectory() async {
// // Try Downloads directory first
// try {
// if (Platform.isAndroid) {
// // Request storage permission for Android
// if (await Permission.storage
// .request()
// .isGranted ||
// await Permission.manageExternalStorage
// .request()
// .isGranted) {
// final dir = await getApplicationDocumentsDirectory();
// if (dir != null) {
// print('Using Downloads directory: ${dir.path}');
// return dir.path;
// }
// }
// }
// } catch (e) {
// print('Error accessing Downloads directory: $e');
// }
//
// // Fallback to shared Documents directory
// try {
// final dir = await getDownloadsDirectory();
// if (dir != null) {
// final customDir = Directory('${dir.path}/RequisitionData');
// if (!await customDir.exists()) {
// await customDir.create(recursive: true);
// }
// print('Using custom Documents directory: ${customDir.path}');
// return customDir.path;
// }
// } catch (e) {
// print('Error accessing Documents directory: $e');
// }
//
// // Final fallback to app's Documents directory
// final dir = await getApplicationDocumentsDirectory();
// print('Using app Documents directory: ${dir.path}');
// return dir.path;
// }
//
// Future<void> downloadCSV(BuildContext context) async {
// try {
// if (paymentsList.isEmpty) {
// ScaffoldMessenger.of(
// context,
// ).showSnackBar(SnackBar(content: Text("No data to export")));
// return;
// }
// final data = prepareExportData();
// final csvData = const ListToCsvConverter().convert(data);
// final dirPath = await getSaveDirectory();
// final file = File('$dirPath/requisition_data.csv');
// await file.writeAsString(csvData);
// print('CSV saved at: ${file.path}');
// bool exists = await file.exists();
// print('File exists: $exists');
// // await OpenFile.open(file.path); // Open the file
// // await Share.share(file.path); // Share the file
// toast(context, "CSV Downloaded");
// } catch (e) {
// print('Error downloading CSV: $e');
// }
// }
//
// Future<void> downloadXLS(BuildContext context) async {
// try {
// if (paymentsList.isEmpty) {
// toast(context, "No Data to export");
// return;
// }
// final data = prepareExportData();
// var excel = Excel.createExcel();
// Sheet sheet = excel['Sheet1'];
// for (var row in data) {
// sheet.appendRow(row.map((cell) => TextCellValue(cell)).toList());
// }
// final dirPath = await getSaveDirectory();
// final file = File('$dirPath/requisition_data.xlsx');
// final bytes = excel.encode();
// if (bytes == null) throw Exception("Excel encoding failed");
// await file.writeAsBytes(bytes);
// print('XLSX saved at: ${file.path}');
// bool exists = await file.exists();
// print('File exists: $exists');
// // await OpenFile.open(file.path); // Open the file
// // await Share.share([file.path], text: 'Requisition Data XLSX'); // Share the file
// toast(context, ("XLSX Downloaded and opened"));
// } catch (e) {
// print('Error downloading XLSX: $e');
// }
// }
//
// Future<void> downloadPDF(BuildContext context) async {
// try {
// if (paymentsList.isEmpty) {
// toast(context, "No Data to export");
// return;
// }
// final data = prepareExportData();
// final pdf = pw.Document();
// pdf.addPage(
// pw.Page(build: (context) => pw.Table.fromTextArray(data: data)),
// );
// final dirPath = await getSaveDirectory();
// final file = File('$dirPath/requisition_data.pdf');
// await file.writeAsBytes(await pdf.save());
// print('PDF saved at: ${file.path}');
// bool exists = await file.exists();
// print('File exists: $exists');
// // await OpenFile.open(file.path); // Open the file
// // await Share.shareXFiles([file.path], text: 'Requisition Data PDF'); // Share the file
// toast(context, "PDF Downloaded ");
// } catch (e) {
// print('Error downloading PDF: $e');
// }
// }
//
// Future<void> printData(BuildContext context) async {
// try {
// if (paymentsList.isEmpty) {
// toast(context, "No Data to Print");
// return;
// }
// final data = prepareExportData();
// final pdf = pw.Document();
// pdf.addPage(
// pw.Page(build: (context) => pw.Table.fromTextArray(data: data)),
// );
// await Printing.layoutPdf(
// onLayout: (PdfPageFormat format) async => pdf.save(),
// );
// } catch (e) {
// print('Error printing data: $e');
// }
// }
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:generp/Models/ordersModels/paymentListByModeFilterResponse.dart';
import 'package:generp/Models/ordersModels/paymentListByModeResponse.dart';
import 'package:provider/provider.dart';
import '../../Models/ordersModels/paymentDetailsByModeFilterResponse.dart';
import '../../Utils/commonServices.dart';
import '../../services/api_calling.dart';
import '../HomeScreenNotifier.dart';
class Paymentsprovider extends ChangeNotifier {
TextEditingController approvalRejectionController = TextEditingController();
String? approvalRejectionError;
List<Employees> _employeesList = [];
List<OrderList> _paymentsList = [];
Employees? _selectedEmployee;
String? _selectedEmpID;
String? _selectedEmpName;
bool _isLoading = true;
PaymentDetails _paymentsDetails = PaymentDetails();
List<PaidList> _paidLists = [];
List<String> _headings = [];
List<String> _subHeadings = [];
PaymentDetails get paymentDetails => _paymentsDetails;
List<PaidList> get paidLists => _paidLists;
List<String> get Headings => _headings;
List<String> get subHeadings => _subHeadings;
List<Employees> get employeesList => _employeesList;
List<OrderList> get paymentsList => _paymentsList;
Employees? get selectedEmployee => _selectedEmployee;
String? get selectedEmpID => _selectedEmpID;
String? get selectedEmpName => _selectedEmpName;
bool get isLoading => _isLoading;
set selectedEmployee(Employees? value) {
_selectedEmployee = value;
_selectedEmpID = value?.id!;
_selectedEmpName = value!.name!;
notifyListeners();
}
set selectedEmpID(String? value) {
_selectedEmpID = value;
notifyListeners();
}
set selectedEmpName(String? value) {
_selectedEmpName = value;
notifyListeners();
}
Future<void> paymentsListsByModeFilterAPIFunction(context, mode) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.paymentListByModeFilterAPI(
provider.empId,
provider.session,
mode,
);
if (data != null) {
if (data.error == "0") {
_employeesList = data.employees!;
notifyListeners();
} else {}
}
} catch (e, s) {}
}
Future<void> paymentsListsByModeAPIFunction(
context,
mode,
teamEmployee,
) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.paymentListsByModeAPI(
provider.empId,
provider.session,
mode,
teamEmployee,
);
if (data != null) {
_paymentsList.clear();
_isLoading = true;
notifyListeners();
if (data.error == "0") {
_paymentsList = data.orderList!;
print(data.orderList!.length);
_isLoading = false;
if (_selectedEmployee != null &&
!_employeesList.contains(_selectedEmployee)) {
_selectedEmployee = null;
_selectedEmpID = "";
_selectedEmpName = "";
}
notifyListeners();
} else {
_isLoading = false;
}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> paymentsDetailsByModeAPIFunction(context, paymentId, mode) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.paymentsDetailsByModeAPI(
provider.empId,
provider.session,
paymentId,
);
if (data != null) {
_isLoading = true;
notifyListeners();
if (data.error == "0") {
_paymentsDetails = data.paymentDetails!;
_paidLists = data.paidList!;
_headings = ["Account Name",
"Entered By",
"Payment Type",
"Payment Reference Number",
"Payment Date",
"Adjusted Amount",
"Amount",
"Description",
"Approved Employee",
"Approved Remarks",
"Attachment",
"Created Datetime",
"Description",
"Status",];
_subHeadings = [
_paymentsDetails.accountName??"-",
_paymentsDetails.enteredEmpName??"-",
_paymentsDetails.paymentType??"-",
_paymentsDetails.refNo??"-",
_paymentsDetails.paymentDate??"-",
_paymentsDetails.adjustedAmount??"-",
_paymentsDetails.amount??"-",
_paymentsDetails.description??"-",
_paymentsDetails.approvalEmployee??"-",
_paymentsDetails.approvalEmployee??"-",
_paymentsDetails.attachmentViewFileName??"-",
_paymentsDetails.datetime??"-",
_paymentsDetails.status??"-",
];
_isLoading = false;
} else {
_isLoading = false;
}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> paymentApprovalRejectionAPIFunction(context,paymentId,type) async {
try{
if(!validateApprovalRejectionForm(context)){
return;
}
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.paymentOrderApproveRejectAPI(provider.empId, provider.session, paymentId, type, approvalRejectionController.text);
if(data!=null){
if(data.error=="0"){
toast(context, "${data.message}");
resetForm();
Navigator.pop(context, true);
notifyListeners();
}
}
}catch(e,s){
}
}
Future<void> paymentDeletionAPIFunction(context,paymentId) async {
try{
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.paymentOrderDeleteAPI(provider.empId, provider.session, paymentId);
if(data!=null){
if(data.error=="0"){
toast(context, "${data.message}");
resetForm();
Navigator.pop(context, true);
Navigator.pop(context, true);
notifyListeners();
}
}
}catch(e,s){
}
}
bool validateApprovalRejectionForm(BuildContext context){
bool isValid = true;
approvalRejectionError = null;
if(approvalRejectionController.text.trim().isEmpty){
approvalRejectionError = "Please Enter Remarks";
isValid = false;
}
notifyListeners();
return isValid;
}
void onChangeApprovalRejection(value){
approvalRejectionError = "";
notifyListeners();
}
void resetForm(){
approvalRejectionController.clear();
approvalRejectionError = "";
}
void resetAll() {
approvalRejectionController.clear();
approvalRejectionError = "";
_selectedEmployee = null;
_selectedEmpID = "";
_selectedEmpName = "";
notifyListeners();
}
}
import 'dart:io';
import 'package:camera/camera.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:generp/Models/ordersModels/TPCListResponse.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import '../../Models/ordersModels/PendingTPCAgentListResponse.dart';
import '../../Models/ordersModels/TPCAgentDetailsResponse.dart';
import '../../Utils/commonServices.dart';
import '../../services/api_calling.dart';
import '../HomeScreenNotifier.dart';
class Tpcagentsprovider extends ChangeNotifier{
TextEditingController tpcNameController = TextEditingController();
TextEditingController tpcMobileNumberController = TextEditingController();
TextEditingController tpcBankNameController = TextEditingController();
TextEditingController tpcBankBeneficiaryNameController = TextEditingController();
TextEditingController tpcBankAccountNumberController = TextEditingController();
TextEditingController tpcBankIFSCController = TextEditingController();
TextEditingController tpcNoteController = TextEditingController();
TextEditingController tpcPaymentModeController = TextEditingController();
TextEditingController tpcPaymentReferenceNoController = TextEditingController();
TextEditingController orderTpcFeedbackController = TextEditingController();
String? tpcNameError = "";
String? tpcMobileNumberError = "";
String? tpcBankNameError = "";
String? tpcBankBeneficiaryNameError = "";
String? tpcBankAccountNumberError = "";
String? tpcBankIFSCError = "";
String? tpcNoteError = "";
String? tpcPaymentModeError = "";
String? tpcPaymentReferenceNoError = "";
String? orderTpcFeedbackError = "";
List<TpcAgentList> _tpcAgentsList = [];
List<PendingTpcIssueList> _tpcAgentsIssueList = [];
TpcAgentDetails _tpcAgentDetails = TpcAgentDetails();
List<TpcRequestedAmounts> _tpcRequestedAmounts = [];
List<String> _headings = [];
List<String> _subHeadings = [];
bool _isLoading = false;
var _image_picked = 0;
final ImagePicker _picker = ImagePicker();
File? _image;
File? _imageName;
List<String> get Headings => _headings;
List<String> get subHeadings => _subHeadings;
List<TpcAgentList> get tpcAgentsList => _tpcAgentsList;
List<PendingTpcIssueList> get tpcAgentsIssueList => _tpcAgentsIssueList;
TpcAgentDetails get TPCAgentsDetails => _tpcAgentDetails;
List<TpcRequestedAmounts> get TPCRequestedAmounts => _tpcRequestedAmounts;
bool get isLoading => _isLoading;
get image_picked => _image_picked;
File? get imagePath => _imageName;
File? get imageFilePath => _image;
get imagePicked => _image_picked;
set imagePath(File? value) {
_imageName = value;
notifyListeners();
}
set imageFilePath(File? value) {
_image = value;
notifyListeners();
}
set imagePicked(value) {
_image_picked = value;
notifyListeners();
}
Future<void> TPCAgentsListAPIFunction(context, mode,) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.TPCAgentListAPI(
provider.empId,
provider.session,
mode,
);
if (data != null) {
_tpcAgentsList.clear();
_isLoading = true;
notifyListeners();
if (data.error == "0") {
_tpcAgentsList = data.tpcAgentList!;
_isLoading = false;
notifyListeners();
} else {
_isLoading = false;
}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> TPCAgentsIssueListAPIFunction(context,) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.pendingTPCAgentIssueListAPI(
provider.empId,
provider.session,
);
if (data != null) {
_tpcAgentsIssueList.clear();
_isLoading = true;
notifyListeners();
if (data.error == "0") {
_tpcAgentsIssueList = data.pendingTpcIssueList!;
_isLoading = false;
notifyListeners();
} else {
_isLoading = false;
}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> TPCAgentsDetailsAPIFunction(context, tpc_agent_id) async {
try {
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.TPCAgentDetailsAPI(
provider.empId,
provider.session,
tpc_agent_id,
);
if (data != null) {
_tpcRequestedAmounts.clear();
_isLoading = true;
notifyListeners();
if (data.error == "0") {
_tpcAgentDetails = data.tpcAgentDetails!;
_tpcRequestedAmounts = data.tpcRequestedAmounts!;
_isLoading = false;
_headings = ["Agent Name",
"Mobile Number",
"TPC Agent Bank Name",
"Bank Beneficiary Name",
"Bank Account No",
"Bank IFSC Code",
"ID Proof",
"Order Received Date",
"Created Date",
"Note",
];
_subHeadings = [
_tpcAgentDetails.name??"-",
_tpcAgentDetails.mobileNumber??"-",
_tpcAgentDetails.bankName??"-",
_tpcAgentDetails.bankBeneficiaryName??"-",
_tpcAgentDetails.bankAccountNo??"-",
_tpcAgentDetails.bankIfscCode??"-",
_tpcAgentDetails.idProofViewFileName??"-",
_tpcAgentDetails.createdDatetime??"-",
_tpcAgentDetails.note??"-"
];
notifyListeners();
} else {
_isLoading = false;
}
notifyListeners();
}
} catch (e, s) {}
}
Future<void> TPCAgentsIssueApprovalAPIFunction(context, orderID,) async {
try {
if (!validateApproveForm(context)) {
// _submitClicked = false;
return;
}
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.TpcIssueListApprovalAPI(
provider.empId,
provider.session,
tpcPaymentModeController.text,
tpcPaymentReferenceNoController.text,
orderID,
orderTpcFeedbackController.text,
_image
);
if (data != null) {
if (data.error == "0") {
toast(context, "Submitted Successfully");
resetApprovalForm();
Navigator.pop(context, true);
notifyListeners();
}
}
} catch (e, s) {}
}
Future<void> addTPCAgentAPIFunction(context) async {
try {
if (!validateAddTPCAgentForm(context)) {
// _submitClicked = false;
return;
}
var provider = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.ordersAddTPCAgentAPI(
provider.empId,
provider.session,
tpcNameController.text,
tpcMobileNumberController.text,
tpcBankNameController.text,
tpcBankBeneficiaryNameController.text,
tpcBankAccountNumberController.text,
tpcBankIFSCController.text,
tpcNoteController.text,
_image
);
if (data != null) {
if (data.error == "0") {
toast(context, "Submitted Successfully");
resetAddTPCAgentForm();
Navigator.pop(context, true);
notifyListeners();
}
}
} catch (e, s) {}
}
bool validateAddTPCAgentForm(BuildContext context) {
// Reset all errors
tpcNameError = null;
tpcMobileNumberError = null;
tpcBankNameError = null;
tpcBankBeneficiaryNameError = null;
tpcBankAccountNumberError = null;
tpcBankIFSCError = null;
tpcNoteError = null;
bool isValid = true;
if(tpcNameController.text.trim().isEmpty){
tpcNameError = "Please Enter Your Name";
isValid = false;
}
if(tpcMobileNumberController.text.trim().isEmpty){
tpcMobileNumberError = "PLease Enter Your Mobile Number";
isValid = false;
}
if(tpcBankNameController.text.trim().isEmpty){
tpcBankNameError = "Please Enter Bank Name";
isValid = false;
}
if(tpcBankBeneficiaryNameController.text.trim().isEmpty){
tpcBankBeneficiaryNameError = "Please Enter Beneficiery Name";
isValid = false;
}
if(tpcBankAccountNumberController.text.trim().isEmpty){
tpcBankAccountNumberError = "Please Enter Account Number";
isValid = false;
}
if(tpcBankIFSCController.text.trim().isEmpty){
tpcBankIFSCError = "Please Enter IFSC";
isValid = false;
}
notifyListeners();
return isValid;
}
bool validateApproveForm(BuildContext context) {
// Reset all errors
tpcPaymentModeError = null;
tpcPaymentReferenceNoError = null;
orderTpcFeedbackError = null;
bool isValid = true;
if (tpcPaymentModeController.text.trim().isEmpty) {
tpcPaymentModeError = "Please enter a description";
isValid = false;
}
if (tpcPaymentReferenceNoController.text.trim().isEmpty) {
tpcPaymentReferenceNoError = "Please enter a description";
isValid = false;
}
if (orderTpcFeedbackController.text.trim().isEmpty) {
orderTpcFeedbackError = "Please enter a description";
isValid = false;
}
notifyListeners();
return isValid;
}
void onChangeTPCPayment(value){
tpcPaymentModeError = "";
notifyListeners();
}
void onChangeTPCPaymentReference(value){
tpcPaymentReferenceNoError = "";
notifyListeners();
}
void onChangeTpcFeedback(value){
orderTpcFeedbackError = "";
notifyListeners();
}
void onChangetpcName(value){
tpcNameError = "";
notifyListeners();
}
void onChangetpcMobileNumber(value){
tpcMobileNumberError = "";
notifyListeners();
}
void onChangetpcBankName(value){
tpcBankNameError = "";
notifyListeners();
}
void onChangetpcBankBeneficiaryName(value){
tpcBankBeneficiaryNameError = "";
notifyListeners();
}
void onChangetpcBankAccountNumber(value){
tpcBankAccountNumberError = "";
notifyListeners();
}
void onChangetpcBankIFSC(value){
tpcBankIFSCError = "";
notifyListeners();
}
void onChangetpcNote(value){
tpcNoteError = "";
notifyListeners();
}
void resetAddTPCAgentForm() {
tpcNameController.clear();
tpcMobileNumberController.clear();
tpcBankNameController.clear();
tpcBankBeneficiaryNameController.clear();
tpcBankAccountNumberController.clear();
tpcBankIFSCController.clear();
tpcNoteController.clear();
tpcNameError = "";
tpcMobileNumberError = "";
tpcBankNameError = "";
tpcBankBeneficiaryNameError = "";
tpcBankAccountNumberError = "";
tpcBankIFSCError = "";
tpcNoteError = "";
_image = null;
_imageName = null;
_image_picked = 0;
}
void resetApprovalForm() {
tpcPaymentModeController.clear();
tpcPaymentReferenceNoController.clear();
orderTpcFeedbackController.clear();
tpcPaymentModeError = "";
tpcPaymentReferenceNoError = "";
orderTpcFeedbackError = "";
_image = null;
_imageName = null;
_image_picked = 0;
}
void resetAll(){
tpcNameController.clear();
tpcMobileNumberController.clear();
tpcBankNameController.clear();
tpcBankBeneficiaryNameController.clear();
tpcBankAccountNumberController.clear();
tpcBankIFSCController.clear();
tpcNoteController.clear();
tpcPaymentModeController.clear();
tpcPaymentReferenceNoController.clear();
orderTpcFeedbackController.clear();
tpcPaymentModeError = "";
tpcPaymentReferenceNoError = "";
orderTpcFeedbackError = "";
tpcNameError = "";
tpcMobileNumberError = "";
tpcBankNameError = "";
tpcBankBeneficiaryNameError = "";
tpcBankAccountNumberError = "";
tpcBankIFSCError = "";
tpcNoteError = "";
_image = null;
_imageName = null;
_image_picked = 0;
}
imgFromCamera(context) async {
// Capture a photo
try {
final XFile? galleryImage = await _picker.pickImage(
source: ImageSource.camera,
imageQuality: 50,
);
debugPrint("added");
_image = File(galleryImage!.path);
_imageName = File(galleryImage!.name);
_image_picked = 1;
notifyListeners();
} catch (e) {
debugPrint("mmmm: ${e.toString()}");
}
}
imgFromGallery(context) async {
// Pick an image
try {
final XFile? galleryImage = await _picker.pickImage(
source: ImageSource.gallery,
);
final bytes = (await galleryImage?.readAsBytes())?.lengthInBytes;
final kb = bytes! / 1024;
final mb = kb / 1024;
debugPrint("Jenny: bytes:$bytes, kb:$kb, mb: $mb");
_image = File(galleryImage!.path);
_imageName = File(galleryImage!.name);
_image_picked = 1;
notifyListeners();
// var file = FlutterImageCompress.compressWithFile(galleryImage!.path);
} catch (e) {
debugPrint("mmmm: ${e.toString()}");
}
}
}
\ No newline at end of file
...@@ -39,7 +39,7 @@ PreferredSizeWidget appbar(BuildContext context, title) { ...@@ -39,7 +39,7 @@ PreferredSizeWidget appbar(BuildContext context, title) {
); );
} }
PreferredSizeWidget appbar2(BuildContext context, title,widget) { PreferredSizeWidget appbar2(BuildContext context, title,reset,widget) {
return AppBar( return AppBar(
automaticallyImplyLeading: false, automaticallyImplyLeading: false,
elevation: 2.0, elevation: 2.0,
...@@ -49,13 +49,19 @@ PreferredSizeWidget appbar2(BuildContext context, title,widget) { ...@@ -49,13 +49,19 @@ PreferredSizeWidget appbar2(BuildContext context, title,widget) {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
InkResponse( InkResponse(
onTap: () => Navigator.pop(context, true), onTap: (){
reset();
Navigator.pop(context, true);
},
child: SvgPicture.asset("assets/svg/app_bar_back.svg", height: 25), child: SvgPicture.asset("assets/svg/app_bar_back.svg", height: 25),
), ),
Expanded( Expanded(
flex:4, flex:4,
child: InkResponse( child: InkResponse(
onTap: () => Navigator.pop(context, true), onTap: () {
reset();
Navigator.pop(context, true);
},
child: Text( child: Text(
title, title,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
......
...@@ -195,6 +195,9 @@ class MyApp extends StatelessWidget { ...@@ -195,6 +195,9 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => Accountslistprovider(),), ChangeNotifierProvider(create: (_) => Accountslistprovider(),),
ChangeNotifierProvider(create: (_) => Accountdetailsprovider(),), ChangeNotifierProvider(create: (_) => Accountdetailsprovider(),),
ChangeNotifierProvider(create: (_) => Accountledgerprovider(),), ChangeNotifierProvider(create: (_) => Accountledgerprovider(),),
ChangeNotifierProvider(create: (_) => Pagesdashboardprovider(),),
ChangeNotifierProvider(create: (_) => Paymentsprovider(),),
ChangeNotifierProvider(create: (_) => Tpcagentsprovider(),),
], ],
child: Builder( child: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
......
...@@ -5,6 +5,7 @@ import 'package:flutter/cupertino.dart'; ...@@ -5,6 +5,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:generp/screens/order/orderModuleDashboard.dart';
import 'notifierExports.dart'; import 'notifierExports.dart';
import 'screensExports.dart'; import 'screensExports.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
...@@ -119,6 +120,8 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -119,6 +120,8 @@ class _MyHomePageState extends State<MyHomePage> {
"Whizzdom", "Whizzdom",
"Common", "Common",
"Finance", "Finance",
"Orders",
"CRM",
]; ];
final icons = [ final icons = [
"assets/svg/home_icons_1.svg", "assets/svg/home_icons_1.svg",
...@@ -130,6 +133,8 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -130,6 +133,8 @@ class _MyHomePageState extends State<MyHomePage> {
"assets/svg/home_icons_81.svg", "assets/svg/home_icons_81.svg",
"assets/svg/home_icons_9.svg", "assets/svg/home_icons_9.svg",
"assets/svg/home_icons_10.svg", "assets/svg/home_icons_10.svg",
"assets/svg/home_icons_11.svg",
"assets/svg/home_icons_12.svg",
]; ];
final requiredRoles = [ final requiredRoles = [
"430", "430",
...@@ -141,6 +146,8 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -141,6 +146,8 @@ class _MyHomePageState extends State<MyHomePage> {
"431", "431",
"430", "430",
"430", "430",
"430",
"430",
]; ];
final filteredItems = <Map<String, String>>[]; final filteredItems = <Map<String, String>>[];
...@@ -461,6 +468,14 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -461,6 +468,14 @@ class _MyHomePageState extends State<MyHomePage> {
), ),
); );
break; break;
case "Orders":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Ordermoduledashboard(),
),
);
default: default:
print("111"); print("111");
break; break;
......
...@@ -59,6 +59,7 @@ class _AccountledgerState extends State<Accountledger> { ...@@ -59,6 +59,7 @@ class _AccountledgerState extends State<Accountledger> {
appBar: appbar2( appBar: appbar2(
context, context,
"Account Ledger List", "Account Ledger List",
provider.resetAll,
Row( Row(
children: [ children: [
Container( Container(
......
...@@ -41,7 +41,7 @@ class _AccountslistState extends State<Accountslist> { ...@@ -41,7 +41,7 @@ class _AccountslistState extends State<Accountslist> {
return WillPopScope( return WillPopScope(
child: Scaffold( child: Scaffold(
resizeToAvoidBottomInset: true, resizeToAvoidBottomInset: true,
appBar: appbar2(context, "Account List",Container( appBar: appbar2(context, "Account List",provider.resetValues,Container(
padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5), padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5),
child: InkResponse( child: InkResponse(
......
...@@ -48,7 +48,7 @@ class _AccountslistdetailsState extends State<Accountslistdetails> { ...@@ -48,7 +48,7 @@ class _AccountslistdetailsState extends State<Accountslistdetails> {
return WillPopScope( return WillPopScope(
child: Scaffold( child: Scaffold(
appBar: appbar2(context, "Account Details",Container( appBar: appbar2(context, "Account Details",provider.resetValues,Container(
padding: EdgeInsets.symmetric(horizontal: 5,vertical: 5), padding: EdgeInsets.symmetric(horizontal: 5,vertical: 5),
decoration: BoxDecoration( decoration: BoxDecoration(
......
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
...@@ -85,6 +86,169 @@ class Commondaterangefilter { ...@@ -85,6 +86,169 @@ class Commondaterangefilter {
return StatefulBuilder( return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) { builder: (BuildContext context, StateSetter setState) {
// Custom calendar widget // Custom calendar widget
// Widget buildCalendar() {
// final firstDayOfMonth = DateTime(displayedMonth.year, displayedMonth.month, 1);
// final lastDayOfMonth = DateTime(displayedMonth.year, displayedMonth.month + 1, 0);
// final firstDayOfWeek = firstDayOfMonth.weekday;
// final daysInMonth = lastDayOfMonth.day;
// final daysBefore = (firstDayOfWeek - 1) % 7;
//
// List<Widget> dayWidgets = [];
// // Weekday headers
// final weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
// dayWidgets.addAll(weekdays.map((day) => Center(
// child: Text(
// day,
// style: TextStyle(
// fontSize: 14,
// fontWeight: FontWeight.w600,
// color: Colors.grey[700],
// ),
// ),
// )));
//
// // Empty cells before the first day
// for (int i = 0; i < daysBefore; i++) {
// dayWidgets.add(Container());
// }
//
// // Days of the month
// for (int day = 1; day <= daysInMonth; day++) {
// final currentDate = DateTime(displayedMonth.year, displayedMonth.month, day);
// bool isSelected = false;
// bool isInRange = false;
// bool isOutsideRange = currentDate.isBefore(DateTime(2020)) ||
// currentDate.isAfter(DateTime(2100));
//
// if (tempStartDate != null && tempEndDate != null) {
// isSelected = currentDate.isAtSameMomentAs(tempStartDate!) ||
// currentDate.isAtSameMomentAs(tempEndDate!);
// isInRange = currentDate.isAfter(tempStartDate!) &&
// currentDate.isBefore(tempEndDate!) &&
// !isSelected;
// }
//
// dayWidgets.add(
// GestureDetector(
// onTap: isOutsideRange
// ? null
// : () {
// setState(() {
// if (tempStartDate == null) {
// tempStartDate = currentDate;
// } else if (tempEndDate == null) {
// if (currentDate.isBefore(tempStartDate!)) {
// tempEndDate = tempStartDate;
// tempStartDate = currentDate;
// } else {
// tempEndDate = currentDate;
// }
// tempSelectedDateRange = DateTimeRange(
// start: tempStartDate!,
// end: tempEndDate!,
// );
// } else {
// tempStartDate = currentDate;
// tempEndDate = null;
// tempSelectedDateRange = null;
// }
// });
// },
// child: Container(
// margin: EdgeInsets.all(2),
// decoration: BoxDecoration(
// color: isSelected
// ? Colors.blue[600]
// : isInRange
// ? Colors.blue[100]
// : null,
// shape: BoxShape.circle,
// ),
// child: Center(
// child: Text(
// '$day',
// style: TextStyle(
// color: isOutsideRange
// ? Colors.grey[400]
// : isSelected
// ? Colors.white
// : Colors.black,
// fontWeight: isSelected ? FontWeight.bold : FontWeight.normal,
// ),
// ),
// ),
// ),
// ),
// );
// }
//
// return Column(
// children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// GestureDetector(
// onTap: displayedMonth.isAfter(DateTime(2020))
// ? () {
// setState(() {
// displayedMonth = DateTime(displayedMonth.year, displayedMonth.month - 1);
// });
// }
// : null,
// child: SvgPicture.asset(
// "assets/svg/arrow_left.svg",
// ),
// ),
// // IconButton(
// // icon: Icon(Icons.chevron_left, color: Colors.blue[600]),
// // onPressed: displayedMonth.isAfter(DateTime(2020))
// // ? () {
// // setState(() {
// // displayedMonth = DateTime(displayedMonth.year, displayedMonth.month - 1);
// // });
// // }
// // : null,
// // ),
// Text(
// '${_monthName(displayedMonth.month)} ${displayedMonth.year}',
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
// ),
// GestureDetector(
// onTap: displayedMonth.isBefore(DateTime(2100))
// ? () {
// setState(() {
// displayedMonth = DateTime(displayedMonth.year, displayedMonth.month + 1);
// });
// }
// : null,
// child: SvgPicture.asset(
// "assets/svg/arrow_right_new.svg",
// ),
// ),
// // IconButton(
// // icon: Icon(Icons.chevron_right, color: Colors.blue[600]),
// // onPressed: displayedMonth.isBefore(DateTime(2100))
// // ? () {
// // setState(() {
// // displayedMonth = DateTime(displayedMonth.year, displayedMonth.month + 1);
// // });
// // }
// // : null,
// // ),
// ],
// ),
// Container(
// height: 280,
// child: GridView.count(
// crossAxisCount: 7,
// childAspectRatio: 1.2,
// children: dayWidgets,
// physics: NeverScrollableScrollPhysics(),
// ),
// ),
// ],
// );
// }
Widget buildCalendar() { Widget buildCalendar() {
final firstDayOfMonth = DateTime(displayedMonth.year, displayedMonth.month, 1); final firstDayOfMonth = DateTime(displayedMonth.year, displayedMonth.month, 1);
final lastDayOfMonth = DateTime(displayedMonth.year, displayedMonth.month + 1, 0); final lastDayOfMonth = DateTime(displayedMonth.year, displayedMonth.month + 1, 0);
...@@ -100,6 +264,7 @@ class Commondaterangefilter { ...@@ -100,6 +264,7 @@ class Commondaterangefilter {
day, day,
style: TextStyle( style: TextStyle(
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.w600,
color: Colors.grey[700], color: Colors.grey[700],
), ),
), ),
...@@ -124,6 +289,8 @@ class Commondaterangefilter { ...@@ -124,6 +289,8 @@ class Commondaterangefilter {
isInRange = currentDate.isAfter(tempStartDate!) && isInRange = currentDate.isAfter(tempStartDate!) &&
currentDate.isBefore(tempEndDate!) && currentDate.isBefore(tempEndDate!) &&
!isSelected; !isSelected;
} else if (tempStartDate != null) {
isSelected = currentDate.isAtSameMomentAs(tempStartDate!);
} }
dayWidgets.add( dayWidgets.add(
...@@ -133,9 +300,13 @@ class Commondaterangefilter { ...@@ -133,9 +300,13 @@ class Commondaterangefilter {
: () { : () {
setState(() { setState(() {
if (tempStartDate == null) { if (tempStartDate == null) {
// No start date selected, set it
tempStartDate = currentDate; tempStartDate = currentDate;
tempSelectedDateRange = null;
} else if (tempEndDate == null) { } else if (tempEndDate == null) {
// Start date selected, set end date
if (currentDate.isBefore(tempStartDate!)) { if (currentDate.isBefore(tempStartDate!)) {
// If the new date is before start date, swap them
tempEndDate = tempStartDate; tempEndDate = tempStartDate;
tempStartDate = currentDate; tempStartDate = currentDate;
} else { } else {
...@@ -146,6 +317,7 @@ class Commondaterangefilter { ...@@ -146,6 +317,7 @@ class Commondaterangefilter {
end: tempEndDate!, end: tempEndDate!,
); );
} else { } else {
// Both dates selected, reset to start a new range
tempStartDate = currentDate; tempStartDate = currentDate;
tempEndDate = null; tempEndDate = null;
tempSelectedDateRange = null; tempSelectedDateRange = null;
...@@ -153,7 +325,7 @@ class Commondaterangefilter { ...@@ -153,7 +325,7 @@ class Commondaterangefilter {
}); });
}, },
child: Container( child: Container(
margin: EdgeInsets.all(1), margin: EdgeInsets.all(2),
decoration: BoxDecoration( decoration: BoxDecoration(
color: isSelected color: isSelected
? Colors.blue[600] ? Colors.blue[600]
...@@ -197,16 +369,6 @@ class Commondaterangefilter { ...@@ -197,16 +369,6 @@ class Commondaterangefilter {
"assets/svg/arrow_left.svg", "assets/svg/arrow_left.svg",
), ),
), ),
// IconButton(
// icon: Icon(Icons.chevron_left, color: Colors.blue[600]),
// onPressed: displayedMonth.isAfter(DateTime(2020))
// ? () {
// setState(() {
// displayedMonth = DateTime(displayedMonth.year, displayedMonth.month - 1);
// });
// }
// : null,
// ),
Text( Text(
'${_monthName(displayedMonth.month)} ${displayedMonth.year}', '${_monthName(displayedMonth.month)} ${displayedMonth.year}',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600), style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
...@@ -223,16 +385,6 @@ class Commondaterangefilter { ...@@ -223,16 +385,6 @@ class Commondaterangefilter {
"assets/svg/arrow_right_new.svg", "assets/svg/arrow_right_new.svg",
), ),
), ),
// IconButton(
// icon: Icon(Icons.chevron_right, color: Colors.blue[600]),
// onPressed: displayedMonth.isBefore(DateTime(2100))
// ? () {
// setState(() {
// displayedMonth = DateTime(displayedMonth.year, displayedMonth.month + 1);
// });
// }
// : null,
// ),
], ],
), ),
Container( Container(
...@@ -247,7 +399,6 @@ class Commondaterangefilter { ...@@ -247,7 +399,6 @@ class Commondaterangefilter {
], ],
); );
} }
return Padding( return Padding(
padding: EdgeInsets.all(16.0), padding: EdgeInsets.all(16.0),
child: SingleChildScrollView( child: SingleChildScrollView(
...@@ -405,37 +556,37 @@ class Commondaterangefilter { ...@@ -405,37 +556,37 @@ class Commondaterangefilter {
} }
// Widget to demonstrate usage // Widget to demonstrate usage
class MyWidget extends StatelessWidget { // class MyWidget extends StatelessWidget {
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return Scaffold( // return Scaffold(
body: Center( // body: Center(
child: InkResponse( // child: InkResponse(
onTap: () async { // onTap: () async {
var cf = Commondaterangefilter(); // var cf = Commondaterangefilter();
var result = await cf.showFilterBottomSheet(context); // var result = await cf.showFilterBottomSheet(context);
if (result != null) { // if (result != null) {
var dateRange = result['dateRange'] as DateTimeRange?; // var dateRange = result['dateRange'] as DateTimeRange?;
print("dateRange: $dateRange"); // print("dateRange: $dateRange");
//
var formatted = result['formatted'] as List<String>; // var formatted = result['formatted'] as List<String>;
print("formatted: $formatted"); // print("formatted: $formatted");
//
if (formatted.isNotEmpty) { // if (formatted.isNotEmpty) {
var fromDate = formatted[0]; // From date // var fromDate = formatted[0]; // From date
var toDate = formatted[1]; // To date // var toDate = formatted[1]; // To date
print("from_date: $fromDate"); // print("from_date: $fromDate");
print("to_date: $toDate"); // print("to_date: $toDate");
} else { // } else {
print("No valid date range selected"); // print("No valid date range selected");
} // }
} else { // } else {
print("Bottom sheet closed without selection"); // print("Bottom sheet closed without selection");
} // }
}, // },
child: SvgPicture.asset("assets/svg/filter_ic.svg", height: 25), // child: SvgPicture.asset("assets/svg/filter_ic.svg", height: 25),
), // ),
), // ),
); // );
} // }
} // }
\ No newline at end of file \ No newline at end of file
...@@ -55,6 +55,7 @@ class _AllpaymentrequesitionlistsbymodesState ...@@ -55,6 +55,7 @@ class _AllpaymentrequesitionlistsbymodesState
appBar: appbar2( appBar: appbar2(
context, context,
widget.pageTitleName, widget.pageTitleName,
provider.resetForm,
Row( Row(
children: [ children: [
InkResponse( InkResponse(
......
...@@ -46,6 +46,7 @@ class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequis ...@@ -46,6 +46,7 @@ class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequis
appBar: appbar2( appBar: appbar2(
context, context,
widget.pageTitleName, widget.pageTitleName,
provider.resetForm,
Row( Row(
children: [ children: [
InkResponse( InkResponse(
......
...@@ -48,6 +48,7 @@ class _PaymentreceiptlistState extends State<Paymentreceiptlist> { ...@@ -48,6 +48,7 @@ class _PaymentreceiptlistState extends State<Paymentreceiptlist> {
appBar: appbar2( appBar: appbar2(
context, context,
widget.pageTitleName, widget.pageTitleName,
provider.resetForm,
Row( Row(
children: [ children: [
InkResponse( InkResponse(
......
...@@ -95,7 +95,7 @@ class _GeneratordetailsState extends State<Generatordetails> { ...@@ -95,7 +95,7 @@ class _GeneratordetailsState extends State<Generatordetails> {
resizeToAvoidBottomInset: true, resizeToAvoidBottomInset: true,
appBar: appBar:
widget.activityName == "NearByGenerators" widget.activityName == "NearByGenerators"
? appbar2(context, "Generator Details", sendwidget) ? appbar2(context, "Generator Details",provider.resetForm, sendwidget)
: appbar(context, "Generator Details"), : appbar(context, "Generator Details"),
backgroundColor: AppColors.scaffold_bg_color, backgroundColor: AppColors.scaffold_bg_color,
body: Container( body: Container(
......
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