"lib/git@183.82.99.133:saisrinivas/gen_erp_2025.git" did not exist on "e2ab261aa67c9b68bf4baf5523925918bbbb8036"
Commit 7959ada6 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

01-08-2025 By Sai Srinivas

Finance Module and CRM issues
parent 14d01f4d
......@@ -883,7 +883,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
Expanded(
flex: 4,
child: Text(
"Find Nearby Generators",
"Find Nearby Leads",
style: TextStyle(
fontSize: 14,
color: AppColors.app_blue,
......@@ -1108,10 +1108,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerFloat,
floatingActionButton:(provider.accessPages
.where((page) => [8, 9].contains(page.id))
.toList()
.contains([8, 9]))? InkResponse(
floatingActionButton:provider.accessPages.any((element) => [8,9].contains(element.id),)? InkResponse(
onTap: () async {
// if (provider.accessPages
// .where((page) => [8, 9].contains(page.id))
......
......@@ -14,7 +14,8 @@ import 'package:provider/provider.dart';
class Followupupdatescreen extends StatefulWidget {
final leadID;
final mode;
const Followupupdatescreen({super.key,required this.leadID, this.mode});
final from;
const Followupupdatescreen({super.key,required this.leadID, this.mode, this.from});
@override
State<Followupupdatescreen> createState() => _FollowupupdatescreenState();
......@@ -34,7 +35,7 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
setState(() => _source = event);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
final provider = Provider.of<followUpUpdateProvider>(context);
final provider = Provider.of<followUpUpdateProvider>(context,listen: false);
provider.getCurrentLocation(context);
});
}
......@@ -115,7 +116,7 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
child: Column(
children: [
Container(
padding: EdgeInsets.only(left: 10),
padding: EdgeInsets.only(left: 10,top: 10),
alignment: Alignment.topLeft,
child: Text(
"Follow up Details",
......@@ -520,6 +521,7 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
),
SizedBox(height: 25),
] else if(provider.nextAppointmentStatus ==
"Next Appointment")
...[
......@@ -692,7 +694,7 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
),
SizedBox(height: 25),
],
SizedBox(height: 150),
],
......@@ -705,6 +707,7 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
provider.submitLoading = true;
provider.crmAddFollowUpAPIFunction(
context,
widget.from,
provider.nextAppointmentStatus,
provider.selectOrderStatus,
widget.leadID,
......
......@@ -676,21 +676,11 @@ class _GeneratequotationscreenState extends State<Generatequotationscreen> {
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children:provider.buttonsLoading?[
CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(AppColors.app_blue),
),
SizedBox(width:25),
SvgPicture.asset("assets/svg/crm/vertical_line_ic.svg"),
SizedBox(width:25),
CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(AppColors.app_blue),
),
SizedBox(width:25),
SvgPicture.asset("assets/svg/crm/vertical_line_ic.svg"),
SizedBox(width:25),
CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(AppColors.app_blue),
)
]: [
Expanded(
child: InkResponse(
......
......@@ -282,6 +282,7 @@ class _PendingtasksdetailsState extends State<Pendingtasksdetails> {
context,
MaterialPageRoute(builder: (context) => Followupupdatescreen(
leadID: task.leadid,
from:"Pending Tasks"
)),
);
},
......
......@@ -121,13 +121,13 @@ class _AllpaymentrequesitionlistsbymodesState
case 'Requested':
return "R";
case 'Level 1 Approved':
return "A";
return "L1A";
case 'Level 1 Rejected':
return "R";
return "L1R";
case 'Level 2 Approved':
return "A";
return "L2A";
case 'Level 2 Rejected':
return "R";
return "L2R";
case 'Processed':
return "P";
case 'Payment Rejected':
......@@ -137,6 +137,28 @@ class _AllpaymentrequesitionlistsbymodesState
return text;
}
double getSize(value){
var text = "A";
switch (value){
case 'Requested':
return 18.0;
case 'Level 1 Approved':
return 14.0;
case 'Level 1 Rejected':
return 14.0;
case 'Level 2 Approved':
return 14.0;
case 'Level 2 Rejected':
return 14.0;
case 'Processed':
return 18.0;
case 'Payment Rejected':
return 18.0;
}
return 18.0;
}
@override
void dispose() {
// TODO: implement dispose
......@@ -315,7 +337,7 @@ class _AllpaymentrequesitionlistsbymodesState
getText(requestLists[index].status),
style: TextStyle(
color: getTextColor(requestLists[index].status),
fontSize: 18,
fontSize: getSize(requestLists[index].status),
fontFamily: "JakartaBold"
),
),
......
......@@ -79,8 +79,8 @@ class _FileviewerState extends State<Fileviewer> {
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar(context, "File Viewer"),
body: SafeArea(child: fileWidget(context)),
appBar: appbarNew(context, "File Viewer",0xFFFFFFFF),
body: SafeArea(child: Center(child: fileWidget(context))),
);
}
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dotted_line/dotted_line.dart';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
......@@ -64,6 +65,7 @@ class _PaymentrequestionlistdetailsState
// Final decision on whether to show buttons
bool shouldShowButtons = false;
final numberFormat = NumberFormat.decimalPattern();
@override
void initState() {
// TODO: implement initState
......@@ -77,7 +79,9 @@ class _PaymentrequestionlistdetailsState
context,
listen: false,
);
provider.showMoreDetails = false;
provider.checkDropDownReset();
print(widget.paymentRequestId);
provider.paymentRequesitionDetails(context, widget.paymentRequestId);
});
}
......@@ -110,13 +114,76 @@ class _PaymentrequestionlistdetailsState
child: SafeArea(
top: false,
bottom: true,
child: _scaffold(context),
child: _scaffold1(context),
),
)
: _scaffold(context)
: _scaffold1(context)
: NoNetwork(context);
}
Color getDecorationColor(value) {
var color = AppColors.approved_bg_color;
switch (value) {
case 'Requested':
return AppColors.requested_bg_color;
case 'Level 1 Approved':
return AppColors.approved_bg_color;
case 'Level 1 Rejected':
return AppColors.rejected_bg_color;
case 'Level 2 Approved':
return AppColors.approved_bg_color;
case 'Level 2 Rejected':
return AppColors.rejected_bg_color;
case 'Processed':
return AppColors.processed_bg_color;
case 'Payment Rejected':
return AppColors.rejected_bg_color;
}
return color;
}
Color getTextColor(value) {
var color = AppColors.approved_text_color;
switch (value) {
case 'Requested':
return AppColors.requested_text_color;
case 'Level 1 Approved':
return AppColors.approved_text_color;
case 'Level 1 Rejected':
return AppColors.rejected_text_color;
case 'Level 2 Approved':
return AppColors.approved_text_color;
case 'Level 2 Rejected':
return AppColors.rejected_text_color;
case 'Processed':
return AppColors.processed_text_color;
case 'Payment Rejected':
return AppColors.rejected_text_color;
}
return color;
}
getText(value) {
switch (value) {
case 'Requested':
return "Requested";
case 'Level 1 Approved':
return "L1 Approved";
case 'Level 1 Rejected':
return "L1 Rejected";
case 'Level 2 Approved':
return "L2 Approved";
case 'Level 2 Rejected':
return "L2 Rejected";
case 'Processed':
return "Processed";
case 'Payment Rejected':
return "Payment Rejected";
default:
return "Requested";
}
}
Widget _scaffold(BuildContext context) {
return Consumer<Requesitionlidtdetailsprovider>(
builder: (context, provider, child) {
......@@ -592,6 +659,584 @@ class _PaymentrequestionlistdetailsState
);
}
Widget _scaffold1(BuildContext context) {
return Consumer<Requesitionlidtdetailsprovider>(
builder: (context, provider, child) {
var req_det = provider.requestsDetails;
var pay_det = provider.paymentsDetails;
isLevel1Finalized = [
"Level 1 Approved",
"Level 1 Rejected",
"Level 1 approved",
"Level 1 rejected",
].contains(req_det.status);
isLevel2Finalized = [
"Level 2 Approved",
"Level 2 Rejected",
"Level 2 approved",
"Level 2 rejected",
].contains(req_det.status);
if (widget.mode == "apr_lvl1") {
shouldShowButtons = !isLevel1Finalized;
} else if (widget.mode == "apr_lvl2") {
shouldShowButtons =
!isLevel2Finalized &&
[
"Requested",
"Level 1 Approved",
"Level 1 approved",
].contains(req_det.status);
} else if (widget.mode == "process") {
shouldShowButtons = [
"Level 2 Approved",
"Level 2 approved",
].contains(req_det.status);
} else if (widget.mode == "self_apr_lvl2") {
shouldShowButtons = ["Requested"].contains(req_det.status);
}
final headings2 = [
"Proposed Payment Account",
"Requesting Purpose",
"Requested Amount",
"Approved Amount",
"Requested Date",
];
final subHeadings2 = [
req_det.proposedAccount ?? "-",
req_det.requestingPurpose ?? "-",
req_det.requestedAmount ?? "-",
req_det.amount ?? "-",
req_det.date ?? "-",
];
final headings3 = [
"Account Name",
"Payment Account",
"Payment Mode",
"Employee",
"Amount",
"Payment Date",
"Attachment"
];
final subHeadings3 = [
pay_det.accountName ?? "-",
pay_det.paymentAccountName ?? "-",
pay_det.mode ?? "-",
pay_det.paymentEmployeeName ?? "-",
req_det.amount ?? "-",
req_det.date ?? "-",
"View",
];
final headings4 = [
"Bank Name",
"Account Holder Name",
"Account Number",
"Branch",
"IFSC",
"UPI ID",
];
final subHeadings4 = [
pay_det.bankName ?? "-",
pay_det.bankAccountHolderName ?? "-",
pay_det.bankAccountNumber ?? "-",
pay_det.bankBranchName ?? "-",
pay_det.bankIfscCode ?? "-",
pay_det.bankUpiId ?? "-",
];
final headings5 = [
"Level 1 Approved By",
"Level 1 Remarks",
"Level 2 Approved By",
"Level 2 Remarks",
];
final subHeadings5 = [
req_det.level1Employee ?? "-",
req_det.level1ApprovalRemarks ?? "-",
req_det.level2Employee ?? "-",
req_det.level2ApprovalRemarks ?? "-",
];
final headings6 = ["Note", "Created Employee", ];
final subHeadings6 = [
req_det.description ?? "-",
req_det.createdEmployee ?? "-",
];
var headings = [...headings2];
var subHeadings = [...subHeadings2];
var titles = ["Account Details"];
if (provider.showMoreDetails) {
headings = [...headings3, ...headings4, ...headings5, ...headings6];
subHeadings = [
...subHeadings2,
...subHeadings3,
...subHeadings4,
...subHeadings5,
...subHeadings6,
];
titles = [
"Account Details",
"Request Details",
"Bank Details",
"Approval Details",
"Other Details",
];
}
final sections = [
{
"title": "Account Details",
"headings": headings2,
"subHeadings": subHeadings2,
},
if (provider.showMoreDetails) ...[
{
"title": "Request Details",
"headings": headings3,
"subHeadings": subHeadings3,
},
{
"title": "Bank Details",
"headings": headings4,
"subHeadings": subHeadings4,
},
{
"title": "Approval Details",
"headings": headings5,
"subHeadings": subHeadings5,
},
{
"title": "Other Details",
"headings": headings6,
"subHeadings": subHeadings6,
},
],
];
return Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar2New(
context,
widget.pageName,
provider.resetAll,
SizedBox(width: 0),
0xFFFFFFFF,
),
backgroundColor: AppColors.scaffold_bg_color,
body: SingleChildScrollView(
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(30),
bottomRight: Radius.circular(30),
),
),
elevation: 2,
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(30),
bottomRight: Radius.circular(30),
),
),
// margin: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
child: Column(
children: [
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 45,
width: 45,
padding: EdgeInsets.all(7.5),
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
shape: BoxShape.circle,
// 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: [
InkResponse(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Accountslistdetails(
accountID:
provider
.requestsDetails
.accountId,
),
),
);
},
child: Padding(
padding: const EdgeInsets.only(
top: 8.0,
bottom: 4,
),
child: Text(
req_det.accountName == ""
? "-"
: req_det.accountName ?? "-",
style: TextStyle(
decoration: TextDecoration.underline,
decorationStyle:
TextDecorationStyle.dotted,
decorationColor: AppColors.grey_thick,
height: 1.2,
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
),
Text(
req_det.amount == ""
? "-"
: "₹${req_det.amount}",
style: TextStyle(
fontFamily: "JakartaRegular",
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: getDecorationColor(req_det.status ?? "-"),
),
child: Center(
child: Text(
getText(req_det.status ?? "-"),
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: getTextColor(req_det.status),
),
),
),
),
),
],
),
SizedBox(height: 10),
Column(
children: List.generate(sections.length, (sectionIndex) {
final section = sections[sectionIndex];
final title = section["title"] as String;
final headings = section["headings"] as List<String>;
final subHeadings =
section["subHeadings"] as List<String>;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.symmetric(vertical: 4),
child: Row(
children: [
Expanded(
flex: 3,
child: Text(
title,
style: TextStyle(
fontSize: 14,
fontFamily: "JakartaSemiBold",
),
),
),
Expanded(
flex: 6,
child: DottedLine(
dashGapLength: 4,
dashGapColor: Colors.white,
dashColor: AppColors.grey_semi,
dashLength: 2,
lineThickness: 0.5,
),
),
],
),
),
Column(
children: List.generate(headings.length, (j) {
return Container(
padding: EdgeInsets.symmetric(vertical: 7),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
Expanded(
child: InkResponse(
onTap:
subHeadings[j] == "View"
? () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Fileviewer(
fileName:
req_det
.attachmentViewFileName ??
"",
fileUrl:
req_det
.attachmentDirFilePath ??
"",
),
),
);
}
: null,
child: Text(
subHeadings[j].isEmpty
? "-"
: subHeadings[j],
style: TextStyle(
fontSize: 14,
decoration:
subHeadings[j] == "View"
? TextDecoration.underline
: TextDecoration.none,
decorationColor:
AppColors.app_blue,
color:
subHeadings[j] == "View"
? AppColors.app_blue
: Color(0xFF818181),
),
),
),
),
],
),
);
}),
),
],
);
}),
),
InkResponse(
onTap: () async {
provider.showMoreDetails = !provider.showMoreDetails;
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
provider.showMoreDetails
? "Hide Details"
: "View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
Transform.flip(
flipY: provider.showMoreDetails ? true : false,
child: SvgPicture.asset(
"assets/svg/arrow_dropdown.svg",
height: 25,
width: 20,
color: AppColors.app_blue,
),
),
],
),
),
),
SizedBox(height: 25),
],
),
),
),
),
bottomNavigationBar:
(["admin", "self"].contains(widget.mode) || !shouldShowButtons)
? SizedBox.shrink()
: Container(
decoration: BoxDecoration(color: Colors.white),
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 10),
alignment: Alignment.bottomCenter,
height: 80,
child: Container(
margin: EdgeInsets.only(bottom: 10),
alignment: Alignment.center,
height: 45,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: InkResponse(
onTap: () {
print(provider.requestsDetails.id);
_showLevelRejectionSheet(
context,
provider.requestsDetails.id,
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color(0xFFFFEFEF),
border: Border.all(
color: Color(0xFFED3424),
width: 0.5,
),
),
child: Center(
child: Text(
"Reject",
style: TextStyle(color: Color(0xFFED3424)),
),
),
),
),
),
SizedBox(width: 10),
if ([
"apr_lvl1",
"apr_lvl2",
"self_apr_lvl2",
].contains(widget.mode)) ...[
SvgPicture.asset(
"assets/svg/crm/vertical_line_ic.svg",
),
SizedBox(width: 10),
Expanded(
child: InkResponse(
onTap: () {
provider
.approveRejectPaymentRequestAPIFunction(
context,
provider.requestsDetails.id,
);
_showLevelApprovalSheet(
context,
provider.requestsDetails.id,
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color(0xFFE7FFE5),
border: Border.all(
color: Color(0xFF0D9C00),
width: 0.5,
),
),
child: Center(
child: Text(
"Approve",
style: TextStyle(
color: Color(0xFF0D9C00),
),
),
),
),
),
),
SizedBox(width: 10),
] else if (widget.mode == "process") ...[
SvgPicture.asset(
"assets/svg/crm/vertical_line_ic.svg",
),
SizedBox(width: 10),
Expanded(
child: InkResponse(
onTap: () {
provider
.approveRejectPaymentRequestAPIFunction(
context,
provider.requestsDetails.id,
);
provider.preValues();
_showAddPaymentSheet(
context,
provider.requestsDetails.id,
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color(0xFFE7FFE5),
border: Border.all(
color: Color(0xFF0D9C00),
width: 0.5,
),
),
child: Center(
child: Text(
"Add Payment",
style: TextStyle(
color: Color(0xFF0D9C00),
),
),
),
),
),
),
],
],
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerFloat,
);
},
);
}
Future<void> _showLevelApprovalSheet(BuildContext context, paymentID) {
return showModalBottomSheet(
useSafeArea: true,
......@@ -955,460 +1600,460 @@ class _PaymentrequestionlistdetailsState
);
}
Future<void> _showAddPaymentSheet1(BuildContext context, paymentID) {
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: Consumer<Requesitionlidtdetailsprovider>(
builder: (context, provider, child) {
return Scaffold(
body: Container(
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 10,
),
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: Column(
children: [
Row(
children: [
Expanded(
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Align(
alignment: Alignment.topLeft,
child: Text(
"Add Approval",
style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
),
),
),
textControllerReadonlyWidget(
context,
provider.proposedPaymentAccount,
"Enter Proposed Payment Account",
(p0) {},
),
TextWidget(context, "Payment Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<
PaymentAccounts
>(
isExpanded: true,
hint: Text(
'Select Account',
style: TextStyle(
fontSize: 14,
),
overflow:
TextOverflow.ellipsis,
),
items:
provider.paymentsAccounts
.map(
(
paymenents,
) => DropdownMenuItem<
PaymentAccounts
>(
value: paymenents,
child: Text(
paymenents.name ??
'',
style:
const TextStyle(
fontSize:
14,
),
overflow:
TextOverflow
.ellipsis,
),
),
)
.toList(),
value:
provider
.selectedPaymentAccounts,
onChanged: (
PaymentAccounts? value,
) {
if (value != null) {
if (provider
.paymentsAccounts
.isNotEmpty) {
provider.selectedPaymentAccounts =
value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.selectedID =
value.id!;
provider.selectedValue =
value.name!;
print(
"hfjkshfg" +
provider.selectedID
.toString(),
);
}
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider
.paymentAccountSearchController,
searchInnerWidget: Padding(
padding:
const EdgeInsets.all(8),
child: TextFormField(
controller:
provider
.paymentAccountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText:
'Search account...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(
8,
),
),
),
),
),
searchMatchFn: (
item,
searchValue,
) {
return item.value?.name
?.toLowerCase()
.contains(
searchValue
.toLowerCase(),
) ??
false;
},
// Optional: clear search text when dropdown closes
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider
.paymentAccountSearchController
.clear();
}
},
buttonStyleData:
ddtheme.buttonStyleData,
iconStyleData:
ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
),
],
),
),
textControllerReadonlyWidget(
context,
provider.approvedAmountReadonly,
"Approved Amount",
(p0) {},
),
textControllerWidget(
context,
provider.approvedAmount,
"Payment Amount",
"Enter Payment Amount",
(p0) {
if (numberFormat.parse(
provider
.approvedAmountReadonly
.text,
) <
numberFormat.parse(
provider.approvedAmount.text,
)) {
provider.proposedAmountError =
"Amount Should not be greater than Approved amount";
} else {
provider.proposedAmountError = "";
}
},
TextInputType.numberWithOptions(),
false,
null,
),
errorWidget(
context,
provider.proposedAmountError,
),
textControllerWidget(
context,
paymentReferenceNumber,
"Payment Reference Number",
"Enter Payment Reference Number",
(p0) {},
TextInputType.text,
false,
null,
focusNodes[3],
focusNodes[4],
TextInputAction.next,
),
textControllerWidget(
context,
remarks,
"Remarks",
"Enter Remarks",
(p0) {},
TextInputType.text,
false,
null,
focusNodes[4],
null,
TextInputAction.done,
),
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(
vertical: 10,
),
height: 45,
width:
MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(
12,
),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text(
"Add Attachment",
style: TextStyle(
fontFamily: "JakartaMedium",
color: AppColors.app_blue,
),
),
),
),
),
if (provider.imagePicked == 1 &&
provider.imagePath != null) ...[
Padding(
padding: const EdgeInsets.symmetric(
vertical: 4.0,
),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
"${provider.imagePath}",
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
),
),
InkResponse(
onTap: () {
provider.imagePicked = 0;
provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
),
),
],
),
),
],
textControllerReadonlyWidget(
context,
provider.accountName,
"Enter Account Name",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.branch,
"Enter Branch Name",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.requestingPurpose,
"Enter Requesting Purpose",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.description,
"Enter Description",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.amount,
"Enter Amount",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.paymentMode,
"Enter Payment Mode",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.bankHolderName,
"Bank Account Holder Name",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.bankAccountNumber,
"Bank Account Number",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.bankName,
"Bank Name",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.bankBranchName,
"Bank Branch Name",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.bankIfscCode,
"Bank IFSC Code",
(p0) {},
),
textControllerReadonlyWidget(
context,
provider.bankUpiID,
"Bank UPI ID",
(p0) {},
),
],
),
),
),
],
),
],
),
),
bottomNavigationBar: Align(
alignment: Alignment.bottomCenter,
child: InkWell(
onTap: () {
provider.paymentrequisitionProcessSubmitAPIFunction(
context,
widget.mode,
paymentReferenceNumber.text,
provider.approvedAmount.text,
paymentID,
provider.selectedID,
remarks.text,
provider.imagePath,
);
},
child: Container(
alignment: Alignment.bottomCenter,
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(14.0),
),
child: Center(
child: Text(
"Submit",
///add payment
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
),
),
),
),
);
},
),
);
},
);
},
);
}
// Future<void> _showAddPaymentSheet1(BuildContext context, paymentID) {
// 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: Consumer<Requesitionlidtdetailsprovider>(
// builder: (context, provider, child) {
// return Scaffold(
// body: Container(
// margin: EdgeInsets.only(
// bottom: 15,
// left: 15,
// right: 15,
// top: 10,
// ),
// padding: EdgeInsets.only(
// bottom: MediaQuery.of(context).viewInsets.bottom,
// ),
//
// child: Column(
// children: [
// Row(
// children: [
// Expanded(
// child: SizedBox(
// child: Column(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// mainAxisSize: MainAxisSize.min,
// children: [
// Align(
// alignment: Alignment.topLeft,
// child: Text(
// "Add Approval",
// style: TextStyle(
// color: AppColors.app_blue,
// fontSize: 16,
// ),
// ),
// ),
//
// textControllerReadonlyWidget(
// context,
// provider.proposedPaymentAccount,
// "Enter Proposed Payment Account",
// (p0) {},
// ),
//
// TextWidget(context, "Payment Account"),
// DropdownButtonHideUnderline(
// child: Row(
// children: [
// Expanded(
// child: DropdownButton2<
// PaymentAccounts
// >(
// isExpanded: true,
// hint: Text(
// 'Select Account',
// style: TextStyle(
// fontSize: 14,
// ),
// overflow:
// TextOverflow.ellipsis,
// ),
// items:
// provider.paymentsAccounts
// .map(
// (
// paymenents,
// ) => DropdownMenuItem<
// PaymentAccounts
// >(
// value: paymenents,
// child: Text(
// paymenents.name ??
// '',
// style:
// const TextStyle(
// fontSize:
// 14,
// ),
// overflow:
// TextOverflow
// .ellipsis,
// ),
// ),
// )
// .toList(),
// value:
// provider
// .selectedPaymentAccounts,
// onChanged: (
// PaymentAccounts? value,
// ) {
// if (value != null) {
// if (provider
// .paymentsAccounts
// .isNotEmpty) {
// provider.selectedPaymentAccounts =
// value;
// print(
// "Selected Complaint Type: ${value.name}, ID: ${value.id}",
// );
// provider.selectedID =
// value.id!;
// provider.selectedValue =
// value.name!;
// print(
// "hfjkshfg" +
// provider.selectedID
// .toString(),
// );
// }
// }
// },
// dropdownSearchData: DropdownSearchData(
// searchInnerWidgetHeight: 50,
// searchController:
// provider
// .paymentAccountSearchController,
// searchInnerWidget: Padding(
// padding:
// const EdgeInsets.all(8),
// child: TextFormField(
// controller:
// provider
// .paymentAccountSearchController,
// decoration: InputDecoration(
// isDense: true,
// contentPadding:
// const EdgeInsets.symmetric(
// horizontal: 10,
// vertical: 8,
// ),
// hintText:
// 'Search account...',
// border: OutlineInputBorder(
// borderRadius:
// BorderRadius.circular(
// 8,
// ),
// ),
// ),
// ),
// ),
// searchMatchFn: (
// item,
// searchValue,
// ) {
// return item.value?.name
// ?.toLowerCase()
// .contains(
// searchValue
// .toLowerCase(),
// ) ??
// false;
// },
//
// // Optional: clear search text when dropdown closes
// ),
// onMenuStateChange: (isOpen) {
// if (!isOpen) {
// provider
// .paymentAccountSearchController
// .clear();
// }
// },
// buttonStyleData:
// ddtheme.buttonStyleData,
// iconStyleData:
// ddtheme.iconStyleData,
// menuItemStyleData:
// ddtheme.menuItemStyleData,
// dropdownStyleData:
// ddtheme.dropdownStyleData,
// ),
// ),
// ],
// ),
// ),
//
// textControllerReadonlyWidget(
// context,
// provider.approvedAmountReadonly,
// "Approved Amount",
// (p0) {},
// ),
//
// textControllerWidget(
// context,
// provider.approvedAmount,
// "Payment Amount",
// "Enter Payment Amount",
// (p0) {
// if (numberFormat.parse(
// provider
// .approvedAmountReadonly
// .text,
// ) <
// numberFormat.parse(
// provider.approvedAmount.text,
// )) {
// provider.proposedAmountError =
// "Amount Should not be greater than Approved amount";
// } else {
// provider.proposedAmountError = "";
// }
// },
// TextInputType.numberWithOptions(),
// false,
// null,
// ),
//
// errorWidget(
// context,
// provider.proposedAmountError,
// ),
//
// textControllerWidget(
// context,
// paymentReferenceNumber,
// "Payment Reference Number",
// "Enter Payment Reference Number",
// (p0) {},
// TextInputType.text,
// false,
// null,
// focusNodes[3],
// focusNodes[4],
// TextInputAction.next,
// ),
//
// textControllerWidget(
// context,
// remarks,
// "Remarks",
// "Enter Remarks",
// (p0) {},
// TextInputType.text,
// false,
// null,
// focusNodes[4],
// null,
// TextInputAction.done,
// ),
//
// InkResponse(
// onTap: () {
// _showAttachmentSheet(context);
// },
// child: Container(
// margin: EdgeInsets.symmetric(
// vertical: 10,
// ),
// height: 45,
// width:
// MediaQuery.of(context).size.width,
// decoration: BoxDecoration(
// color: Color(0xFFE6F6FF),
// borderRadius: BorderRadius.circular(
// 12,
// ),
// border: Border.all(
// color: AppColors.app_blue,
// width: 0.5,
// ),
// ),
// child: Center(
// child: Text(
// "Add Attachment",
// style: TextStyle(
// fontFamily: "JakartaMedium",
// color: AppColors.app_blue,
// ),
// ),
// ),
// ),
// ),
// if (provider.imagePicked == 1 &&
// provider.imagePath != null) ...[
// Padding(
// padding: const EdgeInsets.symmetric(
// vertical: 4.0,
// ),
// child: Row(
// mainAxisAlignment:
// MainAxisAlignment.spaceBetween,
// children: [
// Text(
// "${provider.imagePath}",
// style: TextStyle(
// color: AppColors.semi_black,
// fontSize: 11,
// fontWeight: FontWeight.w600,
// ),
// ),
// InkResponse(
// onTap: () {
// provider.imagePicked = 0;
// provider.imagePath = null;
// provider.imageFilePath = null;
// },
// child: SvgPicture.asset(
// "assets/svg/ic_close.svg",
// width: 15,
// height: 15,
// ),
// ),
// ],
// ),
// ),
// ],
// textControllerReadonlyWidget(
// context,
// provider.accountName,
// "Enter Account Name",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.branch,
// "Enter Branch Name",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.requestingPurpose,
// "Enter Requesting Purpose",
// (p0) {},
// ),
//
// textControllerReadonlyWidget(
// context,
// provider.description,
// "Enter Description",
// (p0) {},
// ),
//
// textControllerReadonlyWidget(
// context,
// provider.amount,
// "Enter Amount",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.paymentMode,
// "Enter Payment Mode",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.bankHolderName,
// "Bank Account Holder Name",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.bankAccountNumber,
// "Bank Account Number",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.bankName,
// "Bank Name",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.bankBranchName,
// "Bank Branch Name",
// (p0) {},
// ),
//
// textControllerReadonlyWidget(
// context,
// provider.bankIfscCode,
// "Bank IFSC Code",
// (p0) {},
// ),
// textControllerReadonlyWidget(
// context,
// provider.bankUpiID,
// "Bank UPI ID",
// (p0) {},
// ),
// ],
// ),
// ),
// ),
// ],
// ),
// ],
// ),
// ),
// bottomNavigationBar: Align(
// alignment: Alignment.bottomCenter,
// child: InkWell(
// onTap: () {
// provider.paymentrequisitionProcessSubmitAPIFunction(
// context,
// widget.mode,
// paymentReferenceNumber.text,
// provider.approvedAmount.text,
// paymentID,
// provider.selectedID,
// remarks.text,
// provider.imagePath,
// );
// },
// child: Container(
// alignment: Alignment.bottomCenter,
// 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(14.0),
// ),
// child: Center(
// child: Text(
// "Submit",
//
// ///add payment
// textAlign: TextAlign.center,
// style: TextStyle(color: Colors.white),
// ),
// ),
// ),
// ),
// ),
// );
// },
// ),
// );
// },
// );
// },
// );
// }
Future<void> _showAddPaymentSheet(BuildContext context, paymentID) {
return showModalBottomSheet(
......@@ -1976,3 +2621,81 @@ class _PaymentrequestionlistdetailsState
);
}
}
///
///
/// List.generate(titles.length, (h){
// return Column(
// children: [
// Container(
// padding: EdgeInsets.symmetric(
// vertical: 4,
// ),
// child: Row(
// children: [
// Expanded(
// flex: 3,
// child: Text(
// titles[h],
// style: TextStyle(
// fontSize: 14,
// fontFamily: "JakartaSemiBold",
// ),
// ),
// ),
// Expanded(
// flex: 6,
// child: DottedLine(
// dashGapLength: 4,
// dashGapColor: Colors.white,
// dashColor: AppColors.grey_semi,
// dashLength: 2,
// lineThickness: 0.5,
// ),
// ),
// ],
// ),
// ),
// ...List.generate(headings.length, (j) {
// return Container(
// padding: EdgeInsets.symmetric(
// vertical: 7,
// ),
// child: Column(
// children: [
//
// Row(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// children: [
// Expanded(
// child: Text(
// headings[j],
// style: TextStyle(
// fontFamily: "JakartaRegular",
// fontSize: 14,
// color: AppColors.semi_black,
// ),
// ),
// ),
// Expanded(
// child: Text(
// subHeadings[j] == ""
// ? "-"
// : subHeadings[j],
// style: TextStyle(
// fontSize: 14,
// color: Color(0xFF818181),
// ),
// ),
// ),
// ],
// ),
// ],
// ),
// );
// }),
// ],
// );
// }),
///
......@@ -90,527 +90,533 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
builder: (context, provider, child) {
return Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.white,
appBar: appbar2(
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar2New(
context,
"${widget.pageTitleName}",
provider.resetForm,
SizedBox(width: 0),
SizedBox.shrink(),
0xFFFFFFFF
),
body: Container(
padding: EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
body: Scrollbar(
thumbVisibility: false,
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget(context, "Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Accounts>(
isExpanded: true,
hint: Text(
'Select Account',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items: [
...provider.receiptAccounts
.map(
(accs) => DropdownMenuItem<Accounts>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(20),
),margin: EdgeInsets.only(top: 10,left: 10,right: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget(context, "Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Accounts>(
isExpanded: true,
hint: Text(
'Select Account',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items: [
...provider.receiptAccounts
.map(
(accs) => DropdownMenuItem<Accounts>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
),
),
)
.toList(),
],
value: provider.selectreceiptAccounts,
onChanged: (Accounts? value) {
if (value != null) {
if (provider.receiptAccounts.isNotEmpty) {
provider.selectreceiptAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.receiptAccountId = value.id!;
provider.receiptAccountValue = value.name!;
print(
"hfjkshfg" +
provider.receiptAccountId.toString(),
);
)
.toList(),
],
value: provider.selectreceiptAccounts,
onChanged: (Accounts? value) {
if (value != null) {
if (provider.receiptAccounts.isNotEmpty) {
provider.selectreceiptAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.receiptAccountId = value.id!;
provider.receiptAccountValue = value.name!;
print(
"hfjkshfg" +
provider.receiptAccountId.toString(),
);
}
}
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.accountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller: provider.accountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.accountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller: provider.accountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
),
),
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
},
// Optional: clear search text when dropdown closes
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.accountSearchController.clear();
}
},
// Optional: clear search text when dropdown closes
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.accountSearchController.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
],
),
),
),
errorWidget(context, provider.selectAccountError),
TextWidget(context, "Payment Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<ReceiptAccounts>(
isExpanded: true,
hint: Text(
'Select Account',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.receiptPaymentAccounts
.map(
(accs) =>
DropdownMenuItem<ReceiptAccounts>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(
fontSize: 14,
errorWidget(context, provider.selectAccountError),
TextWidget(context, "Payment Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<ReceiptAccounts>(
isExpanded: true,
hint: Text(
'Select Account',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.receiptPaymentAccounts
.map(
(accs) =>
DropdownMenuItem<ReceiptAccounts>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectreceiptPaymentAccounts,
onChanged: (ReceiptAccounts? value) {
if (value != null) {
if (provider
.receiptPaymentAccounts
.isNotEmpty) {
provider.selectreceiptPaymentAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.receiptPaymentAccountsID = value.id!;
provider.receiptPaymentAccountsValue =
value.name!;
print(
"hfjkshfg" +
provider.receiptPaymentAccountsID
.toString(),
);
)
.toList(),
value: provider.selectreceiptPaymentAccounts,
onChanged: (ReceiptAccounts? value) {
if (value != null) {
if (provider
.receiptPaymentAccounts
.isNotEmpty) {
provider.selectreceiptPaymentAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.receiptPaymentAccountsID = value.id!;
provider.receiptPaymentAccountsValue =
value.name!;
print(
"hfjkshfg" +
provider.receiptPaymentAccountsID
.toString(),
);
}
}
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.paymentAccountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.paymentAccountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.paymentAccountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.paymentAccountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
),
),
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
},
// Optional: clear search text when dropdown closes
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.paymentAccountSearchController.clear();
}
},
// Optional: clear search text when dropdown closes
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.paymentAccountSearchController.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
],
),
),
),
errorWidget(context, provider.selectPaymentAccountError),
textControllerWidget(
context,
provider.amountController,
"Amount",
"Enter Amount",
provider.updateAmount,
TextInputType.numberWithOptions(),
false,
null,
focusNodes[0],
focusNodes[1],
TextInputAction.next,
),
errorWidget(context, provider.amountError),
///payment date toBE
TextWidget(context, "Receipt Date"),
GestureDetector(
onTap: () {
provider.showDatePickerDialog(context);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Container(
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppColors.text_field_color,
borderRadius: BorderRadius.circular(14),
),
child: Padding(
padding: const EdgeInsets.fromLTRB(
10.0,
0.0,
10,
0,
errorWidget(context, provider.selectPaymentAccountError),
textControllerWidget(
context,
provider.amountController,
"Amount",
"Enter Amount",
provider.updateAmount,
TextInputType.numberWithOptions(),
false,
null,
focusNodes[0],
focusNodes[1],
TextInputAction.next,
),
errorWidget(context, provider.amountError),
///payment date toBE
TextWidget(context, "Receipt Date"),
GestureDetector(
onTap: () {
provider.showDatePickerDialog(context);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Container(
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppColors.text_field_color,
borderRadius: BorderRadius.circular(14),
),
child: TextFormField(
controller: provider.dateController,
keyboardType: TextInputType.text,
enabled: false,
maxLines: 1,
readOnly: true,
onChanged: (value) {},
focusNode: focusNodes[1],
onTapUpOutside: (event) {
if (focusNodes[1].hasFocus) {
child: Padding(
padding: const EdgeInsets.fromLTRB(
10.0,
0.0,
10,
0,
),
child: TextFormField(
controller: provider.dateController,
keyboardType: TextInputType.text,
enabled: false,
maxLines: 1,
readOnly: true,
onChanged: (value) {},
focusNode: focusNodes[1],
onTapUpOutside: (event) {
if (focusNodes[1].hasFocus) {
focusNodes[1].unfocus();
}
},
textInputAction: TextInputAction.done,
onEditingComplete: () {
focusNodes[1].unfocus();
}
},
textInputAction: TextInputAction.done,
onEditingComplete: () {
focusNodes[1].unfocus();
},
decoration: InputDecoration(
hintText: "Enter Date",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
},
decoration: InputDecoration(
hintText: "Enter Date",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
),
enabledBorder: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
),
enabledBorder: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
),
),
),
),
),
],
],
),
),
),
errorWidget(context, provider.dateError),
TextWidget(context, "Select Payment Mode"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<PaymentModes>(
isExpanded: true,
hint: Text(
'Select Payment mode',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.receiptPaymentModes
.map(
(paymenents) =>
DropdownMenuItem<PaymentModes>(
value: paymenents,
child: Text(
paymenents.name ?? '',
style: const TextStyle(
fontSize: 14,
errorWidget(context, provider.dateError),
TextWidget(context, "Select Payment Mode"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<PaymentModes>(
isExpanded: true,
hint: Text(
'Select Payment mode',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.receiptPaymentModes
.map(
(paymenents) =>
DropdownMenuItem<PaymentModes>(
value: paymenents,
child: Text(
paymenents.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectreceiptPaymentModes,
onChanged: (PaymentModes? value) {
if (value != null) {
if (provider.receiptPaymentModes.isNotEmpty) {
provider.selectreceiptPaymentModes = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.receiptPaymentModesID = value.id!;
provider.receiptPaymentModesValues =
value.name!;
print(
"hfjkshfg" +
provider.receiptPaymentModesID
.toString(),
);
)
.toList(),
value: provider.selectreceiptPaymentModes,
onChanged: (PaymentModes? value) {
if (value != null) {
if (provider.receiptPaymentModes.isNotEmpty) {
provider.selectreceiptPaymentModes = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.receiptPaymentModesID = value.id!;
provider.receiptPaymentModesValues =
value.name!;
print(
"hfjkshfg" +
provider.receiptPaymentModesID
.toString(),
);
}
}
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
),
],
),
),
errorWidget(context, provider.paymentModeError),
if ([
"Cheque",
"RTGS",
"IMPS",
"NEFT",
].contains(provider.paymentModeValue)) ...[
textControllerWidget(
context,
provider.bankNameController,
"Bank Name",
"Enter Bank Name",
provider.updateBankName,
TextInputType.text,
false,
null,
focusNodes[2],
focusNodes[3],
TextInputAction.next,
),
errorWidget(context, provider.bankNameError),
textControllerWidget(
context,
provider.bankBranchController,
"Bank Branch",
"Enter Bank Branch",
provider.updateBankBranch,
TextInputType.text,
false,
null,
focusNodes[3],
focusNodes[4],
TextInputAction.next,
),
errorWidget(context, provider.bankBranchError),
textControllerWidget(
context,
provider.bankAccNumberController,
"Account Number",
"Enter Account Number",
provider.updateNumber,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
focusNodes[4],
focusNodes[5],
TextInputAction.next,
),
errorWidget(context, provider.bankNumberError),
textControllerWidget(
context,
provider.bankIfscController,
"Bank IFSC",
"Enter Bank IFSC",
provider.updateIFSC,
TextInputType.text,
false,
null,
focusNodes[5],
focusNodes[6],
TextInputAction.next,
],
),
),
errorWidget(context, provider.bankIFSCError),
errorWidget(context, provider.paymentModeError),
if ([
"Cheque",
"RTGS",
"IMPS",
"NEFT",
].contains(provider.paymentModeValue)) ...[
textControllerWidget(
context,
provider.bankNameController,
"Bank Name",
"Enter Bank Name",
provider.updateBankName,
TextInputType.text,
false,
null,
focusNodes[2],
focusNodes[3],
TextInputAction.next,
),
errorWidget(context, provider.bankNameError),
textControllerWidget(
context,
provider.bankBranchController,
"Bank Branch",
"Enter Bank Branch",
provider.updateBankBranch,
TextInputType.text,
false,
null,
focusNodes[3],
focusNodes[4],
TextInputAction.next,
),
errorWidget(context, provider.bankBranchError),
textControllerWidget(
context,
provider.bankAccNumberController,
"Account Number",
"Enter Account Number",
provider.updateNumber,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
focusNodes[4],
focusNodes[5],
TextInputAction.next,
),
errorWidget(context, provider.bankNumberError),
textControllerWidget(
context,
provider.bankIfscController,
"Bank IFSC",
"Enter Bank IFSC",
provider.updateIFSC,
TextInputType.text,
false,
null,
focusNodes[5],
focusNodes[6],
TextInputAction.next,
),
errorWidget(context, provider.bankIFSCError),
textControllerWidget(
context,
provider.bankAcHolderController,
"Bank Account Holder Name",
"Enter Bank Account Holder Name",
provider.updateHolder,
TextInputType.text,
false,
null,
focusNodes[6],
focusNodes[8],
TextInputAction.next,
),
errorWidget(context, provider.bankHolderError),
] else if (provider.paymentModeValue == "UPI") ...[
textControllerWidget(
context,
provider.bankUpiController,
"UPI ID",
"Enter UPI ID",
provider.updateUPI,
TextInputType.text,
false,
null,
focusNodes[7],
focusNodes[8],
TextInputAction.next,
),
errorWidget(context, provider.UPIError),
],
textControllerWidget(
context,
provider.bankAcHolderController,
"Bank Account Holder Name",
"Enter Bank Account Holder Name",
provider.updateHolder,
provider.paymentReferenceController,
"Payment Reference Number",
"Enter Payment Reference Number",
provider.updatereference,
TextInputType.text,
false,
null,
focusNodes[6],
focusNodes[8],
focusNodes[9],
TextInputAction.next,
),
errorWidget(context, provider.bankHolderError),
] else if (provider.paymentModeValue == "UPI") ...[
errorWidget(context, provider.paymentreferenceError),
textControllerWidget(
context,
provider.bankUpiController,
"UPI ID",
"Enter UPI ID",
provider.updateUPI,
provider.descController,
"Description",
"Enter Description",
provider.updateDescription,
TextInputType.text,
false,
null,
focusNodes[7],
focusNodes[8],
TextInputAction.next,
focusNodes[9],
focusNodes[10],
TextInputAction.done,
),
errorWidget(context, provider.UPIError),
],
textControllerWidget(
context,
provider.paymentReferenceController,
"Payment Reference Number",
"Enter Payment Reference Number",
provider.updatereference,
TextInputType.text,
false,
null,
focusNodes[8],
focusNodes[9],
TextInputAction.next,
),
errorWidget(context, provider.paymentreferenceError),
textControllerWidget(
context,
provider.descController,
"Description",
"Enter Description",
provider.updateDescription,
TextInputType.text,
false,
null,
focusNodes[9],
focusNodes[10],
TextInputAction.done,
),
errorWidget(context, provider.descriptionError),
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text(
"File Attachment",
style: TextStyle(
fontFamily: "JakartaMedium",
errorWidget(context, provider.descriptionError),
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text(
"File Attachment",
style: TextStyle(
fontFamily: "JakartaMedium",
color: AppColors.app_blue,
),
),
),
),
),
),
if (provider.imagePicked == 1 &&
provider.imagePath != null) ...[
Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 5,
child: Text(
"${provider.imagePath}",
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
if (provider.imagePicked == 1 &&
provider.imagePath != null) ...[
Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 5,
child: Text(
"${provider.imagePath}",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
),
),
),
),
Expanded(
flex: 1,
child: InkResponse(
onTap: () {
provider.imagePicked = 0;
provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
Expanded(
flex: 1,
child: InkResponse(
onTap: () {
provider.imagePicked = 0;
provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
),
),
),
),
],
],
),
),
),
],
SizedBox(height: 75),
],
SizedBox(height: 75),
],
),
),
),
),
......@@ -630,7 +636,7 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
child: Container(
height: 45,
alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 10),
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
decoration: BoxDecoration(
color: AppColors.app_blue,
......
......@@ -95,522 +95,529 @@ class _DirectpaymentrequesitionlistState
builder: (context, provider, child) {
return Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.white,
appBar: appbar(context, "${widget.pageTitleName}"),
body: Container(
padding: EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbarNew(context, "${widget.pageTitleName}",0xFFFFFFFF),
body: Scrollbar(
thumbVisibility: false,
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget(context, "Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<DirectAccounts>(
isExpanded: true,
hint: Text(
'Select Account',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.directAccounts
.map(
(accs) =>
DropdownMenuItem<DirectAccounts>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(
fontSize: 14,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10),
margin: EdgeInsets.only(top: 10,left: 10,right: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget(context, "Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<DirectAccounts>(
isExpanded: true,
hint: Text(
'Select Account',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.directAccounts
.map(
(accs) =>
DropdownMenuItem<DirectAccounts>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectDirectAccounts,
onChanged: (DirectAccounts? value) {
if (value != null) {
if (provider.directAccounts.isNotEmpty) {
provider.selectDirectAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.directAccountId = value.id!;
provider.directAccountValue = value.name!;
print(
"hfjkshfg" +
provider.directAccountId.toString(),
);
)
.toList(),
value: provider.selectDirectAccounts,
onChanged: (DirectAccounts? value) {
if (value != null) {
if (provider.directAccounts.isNotEmpty) {
provider.selectDirectAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.directAccountId = value.id!;
provider.directAccountValue = value.name!;
print(
"hfjkshfg" +
provider.directAccountId.toString(),
);
}
}
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.accountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller: provider.accountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.accountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller: provider.accountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
),
),
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
},
// Optional: clear search text when dropdown closes
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.accountSearchController.clear();
}
},
// Optional: clear search text when dropdown closes
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.accountSearchController.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
],
),
),
),
errorWidget(context, provider.selectDirectAccountError),
TextWidget(context, "Payment Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<DirectPaymentAccounts>(
isExpanded: true,
hint: Text(
'Select Account Type',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.directPaymentAccounts
.map(
(accs) => DropdownMenuItem<
DirectPaymentAccounts
>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
errorWidget(context, provider.selectDirectAccountError),
TextWidget(context, "Payment Account"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<DirectPaymentAccounts>(
isExpanded: true,
hint: Text(
'Select Account Type',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.directPaymentAccounts
.map(
(accs) => DropdownMenuItem<
DirectPaymentAccounts
>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
),
),
)
.toList(),
value: provider.selectDirectPaymentAccounts,
onChanged: (DirectPaymentAccounts? value) {
if (value != null) {
if (provider.directPaymentAccounts.isNotEmpty) {
provider.selectDirectPaymentAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.directPaymentAccountsID = value.id!;
provider.directPaymentAccountsValue =
value.name!;
print(
"hfjkshfg" +
provider.directPaymentAccountsID
.toString(),
);
)
.toList(),
value: provider.selectDirectPaymentAccounts,
onChanged: (DirectPaymentAccounts? value) {
if (value != null) {
if (provider.directPaymentAccounts.isNotEmpty) {
provider.selectDirectPaymentAccounts = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.directPaymentAccountsID = value.id!;
provider.directPaymentAccountsValue =
value.name!;
print(
"hfjkshfg" +
provider.directPaymentAccountsID
.toString(),
);
}
}
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.paymentAccountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.paymentAccountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.paymentAccountSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.paymentAccountSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
),
),
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
},
// Optional: clear search text when dropdown closes
),
searchMatchFn: (item, searchValue) {
return item.value?.name?.toLowerCase().contains(
searchValue.toLowerCase(),
) ??
false;
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.paymentAccountSearchController.clear();
}
},
// Optional: clear search text when dropdown closes
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.paymentAccountSearchController.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
],
),
),
errorWidget(
context,
provider.selectDirectPaymentAccountError,
),
textControllerWidget(
context,
provider.amountController,
"Amount",
"Enter Amount",
provider.updateAmount,
TextInputType.numberWithOptions(),
false,
null,
focusNodes[0],
focusNodes[1],
TextInputAction.next,
),
),
errorWidget(
context,
provider.selectDirectPaymentAccountError,
),
textControllerWidget(
context,
provider.amountController,
"Amount",
"Enter Amount",
provider.updateAmount,
TextInputType.numberWithOptions(),
false,
null,
focusNodes[0],
focusNodes[1],
TextInputAction.next,
),
errorWidget(context, provider.amountError),
errorWidget(context, provider.amountError),
///payment date toBE
TextWidget(context, "Enter Date"),
GestureDetector(
onTap: () {
provider.showDatePickerDialog(context);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Container(
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppColors.text_field_color,
borderRadius: BorderRadius.circular(14),
),
child: Padding(
padding: const EdgeInsets.fromLTRB(
10.0,
0.0,
10,
0,
///payment date toBE
TextWidget(context, "Enter Date"),
GestureDetector(
onTap: () {
provider.showDatePickerDialog(context);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Container(
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppColors.text_field_color,
borderRadius: BorderRadius.circular(14),
),
child: TextFormField(
controller: provider.dateController,
keyboardType: TextInputType.text,
enabled: false,
maxLines: 1,
readOnly: true,
onChanged: (value) {},
focusNode: focusNodes[1],
onTapUpOutside: (event) {
if (focusNodes[1].hasFocus) {
child: Padding(
padding: const EdgeInsets.fromLTRB(
10.0,
0.0,
10,
0,
),
child: TextFormField(
controller: provider.dateController,
keyboardType: TextInputType.text,
enabled: false,
maxLines: 1,
readOnly: true,
onChanged: (value) {},
focusNode: focusNodes[1],
onTapUpOutside: (event) {
if (focusNodes[1].hasFocus) {
focusNodes[1].unfocus();
}
},
textInputAction: TextInputAction.done,
onEditingComplete: () {
focusNodes[1].unfocus();
}
},
textInputAction: TextInputAction.done,
onEditingComplete: () {
focusNodes[1].unfocus();
},
decoration: InputDecoration(
hintText: "Enter Date",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
),
},
decoration: InputDecoration(
hintText: "Enter Date",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
),
enabledBorder: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
),
),
),
),
),
),
],
],
),
),
),
errorWidget(context, provider.dateError),
TextWidget(context, "Select Payment Mode"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<DirectPaymentModes>(
isExpanded: true,
hint: Text(
'Select Payment mode',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.directPaymentModes
.map(
(paymenents) =>
DropdownMenuItem<DirectPaymentModes>(
value: paymenents,
child: Text(
paymenents.name ?? '',
style: const TextStyle(
fontSize: 14,
errorWidget(context, provider.dateError),
TextWidget(context, "Select Payment Mode"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<DirectPaymentModes>(
isExpanded: true,
hint: Text(
'Select Payment mode',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.directPaymentModes
.map(
(paymenents) =>
DropdownMenuItem<DirectPaymentModes>(
value: paymenents,
child: Text(
paymenents.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectDirectPaymentModes,
onChanged: (DirectPaymentModes? value) {
if (value != null) {
if (provider.directPaymentModes.isNotEmpty) {
provider.selectDirectPaymentModes = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.directPaymentModesID = value.id!;
provider.directPaymentModesValues =
value.name!;
print(
"hfjkshfg" +
provider.directPaymentModesID
.toString(),
);
)
.toList(),
value: provider.selectDirectPaymentModes,
onChanged: (DirectPaymentModes? value) {
if (value != null) {
if (provider.directPaymentModes.isNotEmpty) {
provider.selectDirectPaymentModes = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.directPaymentModesID = value.id!;
provider.directPaymentModesValues =
value.name!;
print(
"hfjkshfg" +
provider.directPaymentModesID
.toString(),
);
}
}
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
),
],
),
),
errorWidget(context, provider.selectDirectPaymentError),
if ([
"Cheque",
"RTGS",
"IMPS",
"NEFT",
].contains(provider.directPaymentModesValues)) ...[
textControllerWidget(
context,
provider.bankNameController,
"Bank Name",
"Enter Bank Name",
provider.updateBankName,
TextInputType.text,
false,
null,
focusNodes[2],
focusNodes[3],
TextInputAction.next,
),
errorWidget(context, provider.bankNameError),
textControllerWidget(
context,
provider.bankBranchController,
"Bank Branch",
"Enter Bank Branch",
provider.updateBankBranch,
TextInputType.text,
false,
null,
focusNodes[3],
focusNodes[4],
TextInputAction.next,
),
errorWidget(context, provider.bankBranchError),
textControllerWidget(
context,
provider.bankAccNumberController,
"Account Number",
"Enter Account Number",
provider.updateNumber,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
focusNodes[4],
focusNodes[5],
TextInputAction.next,
),
errorWidget(context, provider.bankNumberError),
textControllerWidget(
context,
provider.bankIfscController,
"Bank IFSC",
"Enter Bank IFSC",
provider.updateIFSC,
TextInputType.text,
false,
null,
focusNodes[5],
focusNodes[6],
TextInputAction.next,
],
),
),
errorWidget(context, provider.bankIFSCError),
errorWidget(context, provider.selectDirectPaymentError),
if ([
"Cheque",
"RTGS",
"IMPS",
"NEFT",
].contains(provider.directPaymentModesValues)) ...[
textControllerWidget(
context,
provider.bankNameController,
"Bank Name",
"Enter Bank Name",
provider.updateBankName,
TextInputType.text,
false,
null,
focusNodes[2],
focusNodes[3],
TextInputAction.next,
),
errorWidget(context, provider.bankNameError),
textControllerWidget(
context,
provider.bankBranchController,
"Bank Branch",
"Enter Bank Branch",
provider.updateBankBranch,
TextInputType.text,
false,
null,
focusNodes[3],
focusNodes[4],
TextInputAction.next,
),
errorWidget(context, provider.bankBranchError),
textControllerWidget(
context,
provider.bankAccNumberController,
"Account Number",
"Enter Account Number",
provider.updateNumber,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
focusNodes[4],
focusNodes[5],
TextInputAction.next,
),
errorWidget(context, provider.bankNumberError),
textControllerWidget(
context,
provider.bankIfscController,
"Bank IFSC",
"Enter Bank IFSC",
provider.updateIFSC,
TextInputType.text,
false,
null,
focusNodes[5],
focusNodes[6],
TextInputAction.next,
),
errorWidget(context, provider.bankIFSCError),
textControllerWidget(
context,
provider.bankAcHolderController,
"Bank Account Holder Name",
"Enter Bank Account Holder Name",
provider.updateHolder,
TextInputType.text,
false,
null,
focusNodes[6],
focusNodes[8],
TextInputAction.next,
),
errorWidget(context, provider.bankHolderError),
] else if (provider.directPaymentModesValues == "UPI") ...[
textControllerWidget(
context,
provider.bankUpiController,
"UPI ID",
"Enter UPI ID",
provider.updateUPI,
TextInputType.text,
false,
null,
focusNodes[7],
focusNodes[8],
TextInputAction.next,
),
errorWidget(context, provider.UPIError),
],
textControllerWidget(
context,
provider.bankAcHolderController,
"Bank Account Holder Name",
"Enter Bank Account Holder Name",
provider.updateHolder,
provider.paymentReferenceController,
"Payment Reference Number",
"Enter Payment Reference Number",
provider.updateReference,
TextInputType.text,
false,
null,
focusNodes[6],
focusNodes[8],
focusNodes[9],
TextInputAction.next,
),
errorWidget(context, provider.bankHolderError),
] else if (provider.directPaymentModesValues == "UPI") ...[
errorWidget(context, provider.paymentreferenceerror),
textControllerWidget(
context,
provider.bankUpiController,
"UPI ID",
"Enter UPI ID",
provider.updateUPI,
provider.descController,
"Description",
"Enter Description",
provider.updateDescription,
TextInputType.text,
false,
null,
focusNodes[7],
focusNodes[8],
TextInputAction.next,
focusNodes[9],
focusNodes[10],
TextInputAction.done,
),
errorWidget(context, provider.UPIError),
],
textControllerWidget(
context,
provider.paymentReferenceController,
"Payment Reference Number",
"Enter Payment Reference Number",
provider.updateReference,
TextInputType.text,
false,
null,
focusNodes[8],
focusNodes[9],
TextInputAction.next,
),
errorWidget(context, provider.paymentreferenceerror),
textControllerWidget(
context,
provider.descController,
"Description",
"Enter Description",
provider.updateDescription,
TextInputType.text,
false,
null,
focusNodes[9],
focusNodes[10],
TextInputAction.done,
),
errorWidget(context, provider.descriptionError),
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text(
"File Attachment",
style: TextStyle(
fontFamily: "JakartaMedium",
errorWidget(context, provider.descriptionError),
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text(
"File Attachment",
style: TextStyle(
fontFamily: "JakartaMedium",
color: AppColors.app_blue,
),
),
),
),
),
),
if (provider.imagePicked == 1 &&
provider.imagePath != null) ...[
Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
flex: 4,
child: Text(
"${provider.imagePath}",
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
if (provider.imagePicked == 1 &&
provider.imagePath != null) ...[
Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
flex: 4,
child: Text(
"${provider.imagePath}",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
),
),
),
),
Expanded(
flex: 1,
child: InkResponse(
onTap: () {
provider.imagePicked = 0;
provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
Expanded(
flex: 1,
child: InkResponse(
onTap: () {
provider.imagePicked = 0;
provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
),
),
),
),
],
],
),
),
),
],
SizedBox(height: 20,)
],
],
),
),
),
),
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dotted_line/dotted_line.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:generp/Utils/app_colors.dart';
......@@ -9,6 +10,7 @@ import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
import '../../Utils/commonServices.dart';
import '../commom/accountsListDetails.dart';
import 'FileViewer.dart';
class Paymentdetailspaymentrequisition extends StatefulWidget {
......@@ -45,6 +47,7 @@ class _PaymentdetailspaymentrequisitionState
listen: false,
);
provider.paymentsListDetailsAPI(context, widget.paymentRequestId);
provider.showMoreDetails = false;
});
}
......@@ -83,6 +86,388 @@ class _PaymentdetailspaymentrequisitionState
}
Widget _scaffold(BuildContext context) {
return Consumer<Paymentrequisitionpaymentslistprovider>(
builder: (context, provider, child) {
var payment_det = provider.paymentDetails;
final headings1 = ["From Account", "Created Employee"];
final subHeadings1 = [
payment_det.paymentAccountName ?? "-",
payment_det.paymentEmployeeName ?? "-",
];
final headings2 = [
"Bank Name",
"Account Holder Name",
"Account Number",
"Branch",
"IFSC",
"UPI ID",
];
final subHeadings2 = [
payment_det.bankName ?? "-",
payment_det.bankAccountHolderName ?? "-",
payment_det.bankAccountNumber ?? "-",
payment_det.bankBranchName ?? "-",
payment_det.bankIfscCode ?? "-",
payment_det.bankUpiId ?? "-",
];
final headings3 = [
"Payment Mode",
"Payment Reference",
"Attachment",
"Payment Date",
];
final subHeadings3 = [
payment_det.mode ?? "-",
payment_det.paymentReferenceNumber ?? "-",
"View",
payment_det.paymentDate ?? "-",
];
final sections = [
{
"title": "Account Details",
"headings": headings1,
"subHeadings": subHeadings1,
},
if (provider.showMoreDetails) ...[
{
"title": "Bank Details",
"headings": headings2,
"subHeadings": subHeadings2,
},
{
"title": "Payment Details",
"headings": headings3,
"subHeadings": subHeadings3,
},
],
];
var clickable = sections.any(
(element) => [
"From Account",
"Created Employee",
"Attachment",
].contains(element["headings"]),
);
return Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar(context, widget.pageName),
backgroundColor: AppColors.scaffold_bg_color,
body: SizedBox(
child: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
margin: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
child: Column(
children: [
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 45,
width: 45,
padding: EdgeInsets.all(7.5),
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
shape: BoxShape.circle,
// 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: [
InkResponse(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Accountslistdetails(
accountID: payment_det.accountId,
),
),
);
},
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 6,
),
child: Text(
payment_det.accountName ?? "-",
style: TextStyle(
decoration: TextDecoration.underline,
decorationColor: AppColors.grey_thick,
decorationStyle:
TextDecorationStyle.dotted,
height: 1.5,
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
),
Text(
"₹${payment_det.amount}",
style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.grey_semi,
),
),
],
),
),
),
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(
payment_det.refType ?? "-",
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: Color(0xFF0D9C00),
),
),
),
),
),
],
),
SizedBox(height: 10),
Column(
children: List.generate(sections.length, (sectionIndex) {
final section = sections[sectionIndex];
final title = section["title"] as String;
final headings = section["headings"] as List<String>;
final subHeadings =
section["subHeadings"] as List<String>;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.symmetric(vertical: 4),
child: Row(
children: [
Expanded(
flex: 3,
child: Text(
title,
style: TextStyle(
fontSize: 14,
fontFamily: "JakartaSemiBold",
),
),
),
Expanded(
flex: 6,
child: DottedLine(
dashGapLength: 4,
dashGapColor: Colors.white,
dashColor: AppColors.grey_semi,
dashLength: 2,
lineThickness: 0.5,
),
),
],
),
),
Column(
children: List.generate(headings.length, (j) {
return Container(
padding: EdgeInsets.symmetric(vertical: 7),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
Expanded(
child: InkResponse(
onTap: [
"Attachment",
"From Account",
"Created Employee",
].contains(headings[j]) ? () {
switch(headings[j]){
case "Attachment":
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Fileviewer(
fileName:
payment_det
.attachmentViewFileName!,
fileUrl:
payment_det
.attachmentDirFilePath!,
),
),
);
break;
case "From Account":
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Accountslistdetails(
accountID: payment_det.paymentAccountId,
),
),
);
break;
case "Created Employee":
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Accountslistdetails(
accountID: payment_det.createdEmployeeId,
),
),
);
break;
}
} : null,
child: Padding(
padding: EdgeInsets.only(
top: 2.5,
bottom: 2.5,
),
child: Text(
subHeadings[j].isEmpty
? "-"
: subHeadings[j],
style: TextStyle(
decoration:
[
"Attachment",
"From Account",
"Created Employee",
].contains(headings[j])
? TextDecoration
.underline
: TextDecoration.none,
decorationStyle:
[
"From Account",
"Created Employee",
].contains(headings[j])
? TextDecorationStyle
.dotted
: subHeadings[j] ==
"View"
? TextDecorationStyle
.solid
: TextDecorationStyle
.solid,
decorationColor: [
"From Account",
"Created Employee",
].contains(headings[j])
? AppColors.grey_thick
: subHeadings[j] ==
"View"
? AppColors.app_blue
: AppColors.app_blue,
fontSize: 14,
color:
subHeadings[j] == "View"
? AppColors.app_blue
: Color(0xFF818181),
),
),
),
),
),
],
),
);
}),
),
],
);
}),
),
InkResponse(
onTap: () async {
provider.showMoreDetails = !provider.showMoreDetails;
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
provider.showMoreDetails
? "Hide Details"
: "View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
Transform.flip(
flipY: provider.showMoreDetails ? true : false,
child: SvgPicture.asset(
"assets/svg/arrow_dropdown.svg",
height: 25,
width: 20,
color: AppColors.app_blue,
),
),
],
),
),
),
],
),
),
),
),
);
},
);
}
Widget _scaffold1(BuildContext context) {
return Consumer<Paymentrequisitionpaymentslistprovider>(
builder: (context, provider, child) {
var payment_det = provider.paymentDetails;
......
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dotted_line/dotted_line.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:generp/screens/commom/accountsListDetails.dart';
import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart';
import '../../Utils/commonServices.dart';
......@@ -41,6 +43,7 @@ class _PaymentreceiptdetailsState extends State<Paymentreceiptdetails> {
context,
listen: false,
);
provider.showMoreDetails = false;
provider.paymentsListDetailsAPI(context, widget.paymentRequestId);
});
}
......@@ -80,6 +83,272 @@ class _PaymentreceiptdetailsState extends State<Paymentreceiptdetails> {
}
Widget _scaffold(BuildContext context) {
return Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) {
var payment_det = provider.receiptDetails;
final headings1 = ["Payment Mode", "Receipt Date"];
final subHeadings1 = [
payment_det.requestMode ?? "-",
payment_det.receiptDate ?? "-",
];
final headings2 = [
"Bank Name",
"Account Holder Name",
"Account Number",
"Branch",
"IFSC",
"UPI ID",
];
final subHeadings2 = [
payment_det.bankName ?? "-",
payment_det.bankAccountHolderName ?? "-",
payment_det.bankAccountNumber ?? "-",
payment_det.bankBranchName ?? "-",
payment_det.bankIfscCode ?? "-",
payment_det.bankUpiId ?? "-",
];
final headings3 = ["Note", "Created Employee"];
final subHeadings3 = [
payment_det.description ?? "-",
payment_det.createdEmployee ?? "-",
];
final sections = [
{
"title": "Receipt Details",
"headings": headings1,
"subHeadings": subHeadings1,
},
if (provider.showMoreDetails) ...[
{
"title": "Bank Details",
"headings": headings2,
"subHeadings": subHeadings2,
},
{
"title": "Other Details",
"headings": headings3,
"subHeadings": subHeadings3,
},
],
];
return Scaffold(
resizeToAvoidBottomInset: true,
//widget.pageName
appBar: appbarNew(context, "Payment Receipt Details", 0xFFFFFFFF),
backgroundColor: AppColors.scaffold_bg_color,
body: SingleChildScrollView(
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(30),
bottomRight: Radius.circular(30),
),
),
elevation: 2,
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(30),
bottomRight: Radius.circular(30),
),
),
// margin: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
child: Column(
children: [
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 45,
width: 45,
padding: EdgeInsets.all(7.5),
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
shape: BoxShape.circle,
// borderRadius: BorderRadius.circular(8),
),
child: SvgPicture.asset("assets/svg/fin_ic.svg"),
),
),
SizedBox(width: 10),
Expanded(
flex: 8,
child: SizedBox(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
InkResponse(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Accountslistdetails(
accountID: provider.receiptDetails.accountId,
),
),
);
},
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 6,
),
child: Text(
payment_det.receipientAccount ?? "-",
style: TextStyle(
decoration: TextDecoration.underline,
decorationColor: AppColors.grey_thick,
decorationStyle:
TextDecorationStyle.dotted,
height: 1.5,
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
),
Text(
"₹${payment_det.amount}",
style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.grey_semi,
),
),
],
),
),
),
],
),
Column(
children: List.generate(sections.length, (sectionIndex) {
final section = sections[sectionIndex];
final title = section["title"] as String;
final headings = section["headings"] as List<String>;
final subHeadings =
section["subHeadings"] as List<String>;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.symmetric(vertical: 4),
child: Row(
children: [
Expanded(
flex: 3,
child: Text(
title,
style: TextStyle(
fontSize: 14,
fontFamily: "JakartaSemiBold",
),
),
),
Expanded(
flex: 6,
child: DottedLine(
dashGapLength: 4,
dashGapColor: Colors.white,
dashColor: AppColors.grey_semi,
dashLength: 2,
lineThickness: 0.5,
),
),
],
),
),
Column(
children: List.generate(headings.length, (j) {
return Container(
padding: EdgeInsets.symmetric(vertical: 7),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
Expanded(
child: Text(
subHeadings[j].isEmpty
? "-"
: subHeadings[j],
style: TextStyle(
fontSize: 14,
color: Color(0xFF818181),
),
),
),
],
),
);
}),
),
],
);
}),
),
InkResponse(
onTap: () async {
provider.showMoreDetails = !provider.showMoreDetails;
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
provider.showMoreDetails
? "Hide Details"
: "View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
Transform.flip(
flipY: provider.showMoreDetails ? true : false,
child: SvgPicture.asset(
"assets/svg/arrow_dropdown.svg",
height: 25,
width: 20,
color: AppColors.app_blue,
),
),
],
),
),
),
],
),
),
),
),
);
},
);
}
Widget _scaffold1(BuildContext context) {
return Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) {
var payment_det = provider.receiptDetails;
......
......@@ -175,15 +175,17 @@ class _SubmitpaymentrequestionlistsbymodeState
builder: (context, provider, child) {
return Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.white,
appBar: appbar2(
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar2New(
context,
"${widget.pageTitleName}",
provider.resetForm,
SizedBox(width: 0),
0xFFFFFFFF
),
body: Container(
padding: EdgeInsets.symmetric(horizontal: 10),
margin: EdgeInsets.only(top: 10,left: 10,right: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
......@@ -607,6 +609,8 @@ class _SubmitpaymentrequestionlistsbymodeState
flex: 4,
child: Text(
"${provider.imagePath}",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
......
......@@ -354,13 +354,7 @@ class _SplashState extends State<Splash> {
default:
connection = 'Offline';
}
if (connection == 'Online') {
print("camer here");
Provider.of<SplashVersionNotifier>(
context,
listen: false,
).handleVersionCheck(context);
}
return (connection == 'Online')
? SafeArea(
top: false,
......
......@@ -17,6 +17,7 @@ import 'package:generp/Models/crmModels/ProspectListViewResponse.dart';
import 'package:generp/Models/crmModels/SubmitLeadListFilterResponse.dart';
import 'package:generp/Models/crmModels/crmDownloadGenQuoteResponse.dart';
import 'package:generp/Models/crmModels/crmLeadDetailsGenerateQuotationSubmitResponse.dart';
import 'package:generp/Models/crmModels/crmNewLeadsProspectsSubmitResponse.dart';
import 'package:generp/Models/crmModels/crmNewLeadsProspectsViewResponse.dart';
import 'package:generp/Models/crmModels/crmProspectDetailsAddFollowUpAppointmentResponse.dart';
import 'package:generp/Models/crmModels/crmProspectDetailsAddLeadsResponse.dart';
......@@ -3345,7 +3346,7 @@ class ApiCalling {
}
}
static Future<CommonResponse?> crmNewLeadsProspectsSubmitAPI(
static Future<crmNewLeadsProspectsSubmitResponse?> crmNewLeadsProspectsSubmitAPI(
session_id,
emp_id,
mode,
......@@ -3398,7 +3399,7 @@ class ApiCalling {
if (res != null) {
print(data);
debugPrint("Submit New Leads ${res.body}");
return CommonResponse.fromJson(jsonDecode(res.body));
return crmNewLeadsProspectsSubmitResponse.fromJson(jsonDecode(res.body));
} else {
debugPrint("Null Response");
return null;
......
......@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 1.0.95+99
version: 1.0.95+101
environment:
sdk: ^3.7.2
......
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