Commit 2c0d16b2 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

23-06-2025 By Sai Srinivas

Prospect details - add/edit, edit order - order module
parent fd66d000
...@@ -39,6 +39,7 @@ export 'package:generp/Notifiers/ordersProvider/tpcAgentsProvider.dart'; ...@@ -39,6 +39,7 @@ export 'package:generp/Notifiers/ordersProvider/tpcAgentsProvider.dart';
export 'package:generp/Notifiers/ordersProvider/addPaymentProvider.dart'; export 'package:generp/Notifiers/ordersProvider/addPaymentProvider.dart';
export 'package:generp/Notifiers/ordersProvider/addOrderProvider.dart'; export 'package:generp/Notifiers/ordersProvider/addOrderProvider.dart';
export 'package:generp/Notifiers/ordersProvider/editPaymentProvider.dart'; export 'package:generp/Notifiers/ordersProvider/editPaymentProvider.dart';
export 'package:generp/Notifiers/ordersProvider/editOrderProvider.dart';
export 'package:generp/Notifiers/crmProvider/crmDashboardProvider.dart'; export 'package:generp/Notifiers/crmProvider/crmDashboardProvider.dart';
export 'package:generp/Notifiers/crmProvider/LeadListProvider.dart'; export 'package:generp/Notifiers/crmProvider/LeadListProvider.dart';
...@@ -49,4 +50,6 @@ export 'package:generp/Notifiers/crmProvider/ProspectListProvider.dart'; ...@@ -49,4 +50,6 @@ export 'package:generp/Notifiers/crmProvider/ProspectListProvider.dart';
export 'package:generp/Notifiers/crmProvider/crmProspectDetailsProvider.dart'; export 'package:generp/Notifiers/crmProvider/crmProspectDetailsProvider.dart';
export 'package:generp/Notifiers/crmProvider/crmNearbyOpenLeadsProvider.dart'; export 'package:generp/Notifiers/crmProvider/crmNearbyOpenLeadsProvider.dart';
export 'package:generp/Notifiers/crmProvider/crmGenerateQuotationProvider.dart'; export 'package:generp/Notifiers/crmProvider/crmGenerateQuotationProvider.dart';
export 'package:generp/Notifiers/crmProvider/crmEditProspectAccountProvider.dart';
export 'package:generp/Notifiers/crmProvider/addProspectLeadsProvider.dart';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart';
import 'package:generp/Models/commonModels/DistrictsResponse.dart';
import 'package:generp/Models/commonModels/SubLocationsResponse.dart';
import 'package:generp/Utils/dropdownTheme.dart';
import 'package:provider/provider.dart';
import 'package:generp/Models/ordersModels/ordersDetailsEditOrderViewResponse.dart';
import '../../Notifiers/ordersProvider/editOrderProvider.dart';
import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart';
class Editorderaccountdetails extends StatefulWidget {
final pageTitleName;
final mode;
final orderID;
const Editorderaccountdetails({super.key,required this.pageTitleName,required this.mode,required this.orderID});
@override
State<Editorderaccountdetails> createState() => _EditorderaccountdetailsState();
}
class _EditorderaccountdetailsState extends State<Editorderaccountdetails> {
FocusNode focusNode = FocusNode();
FocusNode focusNodetpc = FocusNode();
Dropdowntheme ddtheme = Dropdowntheme();
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Editorderprovider>(context, listen: false);
provider.ordersEditOrderAPIViewFunction(context, widget.orderID);
});
}
@override
void dispose() {
super.dispose();
}
Future<bool> _onBackPressed(BuildContext context) async {
Navigator.pop(context, true);
return true;
}
@override
Widget build(BuildContext context) {
return Consumer<Editorderprovider>(
builder: (context, provider, child) {
return WillPopScope(
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.white,
appBar: appbar2(
context,
"${widget.pageTitleName}",
provider.resetForm,
SizedBox(width: 0),
),
body: Container(
padding: EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget(context, "Dispatch State"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<States>(
isExpanded: true,
hint: Text(
"Select State",
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.dispatchStates
.map(
(e) => DropdownMenuItem<States>(
value: e,
child: Text(
e.name!,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selecetdDispatchStates,
onChanged: (States? value) {
if (provider.dispatchStates.isNotEmpty) {
provider.selecetdDispatchStates = value;
provider.selectedDispatchStateID = value!.id!;
provider.selectedDispatchStateName =
value!.name!;
if (provider.dispatchDistricts.isNotEmpty) {
provider.dispatchDistricts.clear();
provider.selectedDispatchDistricts = null;
provider.selectedDispatchDistrictId = null;
provider.selectedDispatchDistrictValue = "";
}
provider.getDispatchDistrictAPI(
context,
provider.selectedDispatchStateID,
);
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
),
),
//dd
TextWidget(context, "Dispatch District"),
//dd
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Districts>(
isExpanded: true,
hint: Text(
"Select District",
style: const TextStyle(fontSize: 14),
),
items:
provider.dispatchDistricts
.map(
(e) => DropdownMenuItem<Districts>(
value: e,
child: Text(
e.district!,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedDispatchDistricts,
onChanged: (Districts? value) {
if (provider.dispatchDistricts.isNotEmpty) {
provider.selectedDispatchDistricts = value;
provider.selectedDispatchDistrictId =
value!.id!;
provider.selectedDispatchDistrictValue =
value!.district!;
if (provider
.dispatchSubLocations
.isNotEmpty) {
provider.dispatchSubLocations.clear();
provider.selectedDispatchSubLocations =
null;
provider.selectedDispatchSubLocID = null;
provider.selectedDispatchSubLocValue = "";
}
provider.getDispatchSubLocationAPI(
context,
provider.selectedDispatchDistrictId,
);
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
),
),
TextWidget(context, "Dispatch Sub Location"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<SubLocations>(
hint: Text(
"Select Sub Locality",
style: const TextStyle(fontSize: 14),
),
items:
provider.dispatchSubLocations
.map(
(e) => DropdownMenuItem<SubLocations>(
value: e,
child: Text(
e.subLocality!,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedDispatchSubLocations,
onChanged: (SubLocations? value) {
if (provider.dispatchSubLocations.isNotEmpty) {
provider.selectedDispatchSubLocations = value;
provider.selectedDispatchSubLocID =
value!.id!;
provider.selectedDispatchSubLocValue =
value!.subLocality!;
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
),
),
//dd
textControllerWidget(
context,
provider.dispatchAddressController,
"Dispatch Address",
provider.onChangedDispatchAddress,
TextInputType.text,
false,
null,
),
errorWidget(context, provider.dispatchAddressError),
textControllerWidget(
context,
provider.dispatchPincodeController,
"Dispatch Pin code",
provider.onChangedDispatchPincode,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
),
errorWidget(context, provider.dispatchPincodeError),
textControllerWidget(
context,
provider.noteController,
"Enter Note",
provider.onChangedNote,
TextInputType.text,
false,
null,
),
errorWidget(context, provider.noteError),
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(
"Upload Purchase Order",
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,
),
),
],
),
),
],
TextWidget(context, "Unloading Scope"),
//dd
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<String>(
hint: Text(
"Select Unloading Scope",
style: const TextStyle(fontSize: 14),
),
items:
provider.unloadingScope
.map(
(e) => DropdownMenuItem<String>(
value: e!,
child: Text(
e,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedUnloadingScope,
onChanged: (String? value) {
if (provider.unloadingScope.isNotEmpty) {
provider.selectedUnloadingScope = value;
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
),
),
TextWidget(context, "Freight Scope"),
//dd
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<String>(
hint: Text(
"Select Freight Scope",
style: const TextStyle(fontSize: 14),
),
items:
provider.freightScope
.map(
(e) => DropdownMenuItem<String>(
value: e!,
child: Text(
e,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedFreightScope,
onChanged: (String? value) {
if (provider.freightScope.isNotEmpty) {
provider.selectedFreightScope = value;
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: IconStyleData(
icon: SvgPicture.asset(
"assets/svg/arrow_dropdown.svg",
height: 25,
width: 20,
),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness: MaterialStateProperty.all<double>(
6,
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
),
),
),
],
),
),
TextWidget(context, "Erection Scope"),
//dd
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<String>(
hint: Text(
"Select Erection Scope",
style: const TextStyle(fontSize: 14),
),
items:
provider.erectionScope
.map(
(e) => DropdownMenuItem<String>(
value: e!,
child: Text(
e,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedErectionScope,
onChanged: (String? value) {
if (provider.erectionScope.isNotEmpty) {
provider.selectedErectionScope = value;
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
),
),
],
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerFloat,
bottomNavigationBar: InkResponse(
onTap:
provider.submitClicked
? null
: () {
provider.submitClicked = true;
provider.ordersEditOrderAPISubmitFunction(context, widget.orderID, provider.selectedDispatchStateID, provider.selectedDispatchDistrictId, provider.selectedDispatchSubLocID,
provider.selectedUnloadingScope, provider.selectedFreightScope, provider.selectedErectionScope);
},
child: Container(
height: 45,
alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 15),
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
decoration: BoxDecoration(
color: AppColors.app_blue,
borderRadius: BorderRadius.circular(15),
),
child:
provider.submitClicked
? CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue,
),
)
: Text(
"Submit",
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
),
),
),
onWillPop: () async {
provider.resetForm();
return _onBackPressed(context);
},
);
},
);
}
Future<void> _showAttachmentSheet(BuildContext context) {
return showModalBottomSheet(
useSafeArea: true,
isDismissible: true,
isScrollControlled: true,
showDragHandle: true,
backgroundColor: Colors.white,
enableDrag: true,
context: context,
builder: (context) {
return StatefulBuilder(
builder: (context, setState) {
return SafeArea(
child: Consumer<Editorderprovider>(
builder: (context, provider, child) {
return Padding(
padding: EdgeInsets.only(
bottom:
MediaQuery.of(
context,
).viewInsets.bottom, // This handles keyboard
),
child: Container(
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 10,
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Align(
alignment: Alignment.center,
child: Text(
"Select Source",
style: TextStyle(
color: AppColors.app_blue,
fontFamily: "JakrtaMedium",
fontSize: 16,
),
),
),
SizedBox(height: 15),
InkWell(
onTap: () {
Navigator.of(context).pop(false);
provider.imgFromGallery(context);
},
child: Container(
height: 35,
child: Text("Select photo from gallery"),
),
),
SizedBox(height: 10),
InkWell(
onTap: () {
Navigator.of(context).pop(false);
provider.imgFromCamera(context);
},
child: Container(
height: 35,
child: Text("Capture photo from camera"),
),
),
],
),
),
),
);
},
),
);
},
);
},
);
}
}
...@@ -14,15 +14,18 @@ class Ordersdetailsbymodes extends StatefulWidget { ...@@ -14,15 +14,18 @@ class Ordersdetailsbymodes extends StatefulWidget {
final orderId; final orderId;
final mode; final mode;
const Ordersdetailsbymodes( const Ordersdetailsbymodes({
{super.key, required this.pageTitleName, required this.orderId, required this.mode}); super.key,
required this.pageTitleName,
required this.orderId,
required this.mode,
});
@override @override
State<Ordersdetailsbymodes> createState() => _OrdersdetailsbymodesState(); State<Ordersdetailsbymodes> createState() => _OrdersdetailsbymodesState();
} }
class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
...@@ -33,11 +36,13 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -33,11 +36,13 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
listen: false, listen: false,
); );
provider.ordersDetailsByModeAPIFunction( provider.ordersDetailsByModeAPIFunction(
context, widget.orderId, widget.mode); context,
widget.orderId,
widget.mode,
);
}); });
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Pagesdashboardprovider>( return Consumer<Pagesdashboardprovider>(
...@@ -47,15 +52,17 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -47,15 +52,17 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
return WillPopScope( return WillPopScope(
child: Scaffold( child: Scaffold(
resizeToAvoidBottomInset: true, resizeToAvoidBottomInset: true,
appBar: appbar2(context, widget.pageTitleName, provider.resetAll, appBar: appbar2(
context,
widget.pageTitleName,
provider.resetAll,
InkResponse( InkResponse(
onTap: () { onTap: () {
_showOptionsSheet( _showOptionsSheet(context);
context
);
}, },
child: SvgPicture.asset("assets/svg/ic_more.svg", height: 30,), child: SvgPicture.asset("assets/svg/ic_more.svg", height: 30),
),), ),
),
backgroundColor: AppColors.scaffold_bg_color, backgroundColor: AppColors.scaffold_bg_color,
body: Container( body: Container(
child: SingleChildScrollView( child: SingleChildScrollView(
...@@ -162,14 +169,13 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -162,14 +169,13 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => (context) => Fileviewer(
Fileviewer(
fileName: fileName:
orderDetails orderDetails
.tpcPaymentAttachementViewFileName!, .tpcPaymentAttachementViewFileName!,
fileUrl: fileUrl:
orderDetails orderDetails
.tpcPaymentAttachmentDirFilePath!, .tpcPaymentAttachmentDirFilePath!,
), ),
), ),
); );
...@@ -182,17 +188,20 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -182,17 +188,20 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
style: TextStyle( style: TextStyle(
fontSize: 14, fontSize: 14,
color: color:
provider.Headings[j] == "Purchase Order" provider.Headings[j] ==
? AppColors.app_blue "Purchase Order"
: Color(0xFF818181), ? AppColors.app_blue
: Color(0xFF818181),
decoration: decoration:
provider.Headings[j] == "Purchase Order" provider.Headings[j] ==
? TextDecoration.underline "Purchase Order"
: TextDecoration.none, ? TextDecoration.underline
: TextDecoration.none,
decorationColor: decorationColor:
provider.Headings[j] == "Purchase Order" provider.Headings[j] ==
? AppColors.app_blue "Purchase Order"
: AppColors.white, ? AppColors.app_blue
: AppColors.white,
), ),
), ),
), ),
...@@ -207,125 +216,127 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -207,125 +216,127 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
bottomNavigationBar: bottomNavigationBar:
["self","pending_approval"].contains(widget.mode) ? ["self", "pending_approval"].contains(widget.mode)
Container(height: 0) : ? Container(height: 0)
Container( : Container(
margin: EdgeInsets.symmetric(horizontal: 10), margin: EdgeInsets.symmetric(horizontal: 10),
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
height: 60, height: 60,
child: Container( child: Container(
margin: EdgeInsets.only(bottom: 10), margin: EdgeInsets.only(bottom: 10),
alignment: Alignment.center, alignment: Alignment.center,
height: 45, height: 45,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
if([ if ([
"level_one_approval", "level_one_approval",
"level_two_approval", "level_two_approval",
"level_two_rejected" "level_two_rejected",
].contains(widget.mode))...[ ].contains(widget.mode)) ...[
Expanded( Expanded(
child: InkResponse( child: InkResponse(
onTap: () { onTap: () {
_showLevelApprovalRejectionSheet(context, "Reject"); _showLevelApprovalRejectionSheet(
}, context,
child: Container( "Reject",
decoration: BoxDecoration( );
borderRadius: BorderRadius.circular(8), },
color: Color(0xFFFFEFEF), child: Container(
border: Border.all( decoration: BoxDecoration(
color: Color(0xFFED3424), borderRadius: BorderRadius.circular(8),
width: 0.5, color: Color(0xFFFFEFEF),
), border: Border.all(
), color: Color(0xFFED3424),
child: Center( width: 0.5,
child: Text( ),
"Reject", ),
style: TextStyle( child: Center(
color: Color(0xFFED3424), child: Text(
"Reject",
style: TextStyle(
color: Color(0xFFED3424),
),
),
),
),
), ),
), ),
), ],
), SizedBox(width: 10),
), if ([
), "level_one_approval",
], "level_two_approval",
SizedBox(width: 10), "level_two_rejected",
if([ "sales_order_registered",
"level_one_approval", ].contains(widget.mode)) ...[
"level_two_approval", Expanded(
"level_two_rejected", child: InkResponse(
"sales_order_registered" onTap: () {
].contains(widget.mode))...[ // provider
Expanded( // .approveRejectPaymentRequestAPIFunction(
child: InkResponse( // context,
onTap: () { // provider.requestsDetails.id,
// provider // );
// .approveRejectPaymentRequestAPIFunction( _showLevelApprovalRejectionSheet(
// context, context,
// provider.requestsDetails.id, "Approve",
// ); );
_showLevelApprovalRejectionSheet( },
context, "Approve"); child: Container(
}, decoration: BoxDecoration(
child: Container( borderRadius: BorderRadius.circular(8),
decoration: BoxDecoration( color: Color(0xFFE7FFE5),
borderRadius: BorderRadius.circular(8), border: Border.all(
color: Color(0xFFE7FFE5), color: Color(0xFF0D9C00),
border: Border.all( width: 0.5,
color: Color(0xFF0D9C00), ),
width: 0.5, ),
), child: Center(
), child: Text(
child: Center( "Approve",
child: Text( style: TextStyle(
"Approve", color: Color(0xFF0D9C00),
style: TextStyle( ),
color: Color(0xFF0D9C00), ),
),
),
), ),
), ),
), ],
),
),
),
],
if(["admin"].contains(widget.mode))...[ if (["admin"].contains(widget.mode)) ...[
Expanded( Expanded(
child: InkResponse( child: InkResponse(
onTap: () { onTap: () {
_showLevelDeletionSheet(context); _showLevelDeletionSheet(context);
}, },
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
color: Color(0xFFFFEFEF), color: Color(0xFFFFEFEF),
border: Border.all( border: Border.all(
color: Color(0xFFED3424), color: Color(0xFFED3424),
width: 0.5, width: 0.5,
), ),
), ),
child: Center( child: Center(
child: Text( child: Text(
"Delete", "Delete",
style: TextStyle( style: TextStyle(
color: Color(0xFFED3424), color: Color(0xFFED3424),
),
),
),
),
), ),
), ),
), ],
), if (widget.mode == "dispatched") ...[],
],
), ),
), ),
], ),
if(widget.mode == "dispatched")...[
]
],
),
),
),
), ),
onWillPop: () { onWillPop: () {
...@@ -336,8 +347,7 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -336,8 +347,7 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
); );
} }
Future<void> _showOptionsSheet(BuildContext context) {
Future<void> _showOptionsSheet(BuildContext context,) {
return showModalBottomSheet( return showModalBottomSheet(
useSafeArea: true, useSafeArea: true,
isDismissible: true, isDismissible: true,
...@@ -359,7 +369,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -359,7 +369,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
right: 15, right: 15,
top: 10, top: 10,
), ),
padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom,), padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
...@@ -371,8 +383,10 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -371,8 +383,10 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
"order_list_svg_1", "order_list_svg_1",
"order_list_svg_2", "order_list_svg_2",
"order_list_svg_3", "order_list_svg_3",
"order_list_svg_3",
]; ];
final Headingnames = [ final Headingnames = [
"Edit Order",
"Payment History", "Payment History",
"Products Details", "Products Details",
"Feedback History", "Feedback History",
...@@ -381,39 +395,46 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -381,39 +395,46 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
onTap: () async { onTap: () async {
switch (index) { switch (index) {
case 0: case 0:
Navigator.pop(context);
// Navigator.push(
// context,
// MaterialPageRoute(
// builder:
// (context) =>
// Orderdetailspaymenthistory(),
// ),
// );
break;
case 1:
Navigator.pop(context); Navigator.pop(context);
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => (context) =>
Orderdetailspaymenthistory( Orderdetailspaymenthistory(),
),
), ),
); );
break; break;
case 1: case 2:
Navigator.pop(context); Navigator.pop(context);
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => (context) =>
Orderdetailsproductshistory( Orderdetailsproductshistory(),
),
), ),
); );
break; break;
case 2: case 3:
Navigator.pop(context); Navigator.pop(context);
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => (context) =>
Orderdetailsfeedbackhistory( Orderdetailsfeedbackhistory(),
),
), ),
); );
break; break;
...@@ -422,9 +443,10 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -422,9 +443,10 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
leading: SvgPicture.asset( leading: SvgPicture.asset(
"assets/svg/${assetnames[index]}.svg", "assets/svg/${assetnames[index]}.svg",
), ),
title: Text(Headingnames[index], style: TextStyle( title: Text(
fontFamily: "JakartaMedium" Headingnames[index],
),), style: TextStyle(fontFamily: "JakartaMedium"),
),
trailing: SvgPicture.asset( trailing: SvgPicture.asset(
"assets/svg/arrow_right_new.svg", "assets/svg/arrow_right_new.svg",
), ),
...@@ -457,7 +479,6 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -457,7 +479,6 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
builder: (context, setState) { builder: (context, setState) {
return SafeArea( return SafeArea(
child: Consumer<Pagesdashboardprovider>( child: Consumer<Pagesdashboardprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
final details = provider.orderDetails; final details = provider.orderDetails;
return Container( return Container(
...@@ -467,7 +488,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -467,7 +488,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
right: 15, right: 15,
top: 10, top: 10,
), ),
padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom,), padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
...@@ -476,19 +499,21 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -476,19 +499,21 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
Align( Align(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
child: Text( child: Text(
type == "Approve" ? "${provider type == "Approve"
.approvalSheetHeading}" : "${provider ? "${provider.approvalSheetHeading}"
.rejecetionSheetHeading}", : "${provider.rejecetionSheetHeading}",
style: TextStyle( style: TextStyle(
color: AppColors.app_blue, color: AppColors.app_blue,
fontSize: 16, fontSize: 16,
), ),
), ),
), ),
if(widget.mode=="sales_order_registered")...[ if (widget.mode == "sales_order_registered") ...[
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
bottom: 5.0, top: 8.0), bottom: 5.0,
top: 8.0,
),
child: Text("Company Name"), child: Text("Company Name"),
), ),
Container( Container(
...@@ -500,16 +525,21 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -500,16 +525,21 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
child: Padding( child: Padding(
padding: const EdgeInsets.fromLTRB( padding: const EdgeInsets.fromLTRB(
10.0, 0.0, 10, 0), 10.0,
0.0,
10,
0,
),
child: TextFormField( child: TextFormField(
controller: provider controller: provider.editCompanyController,
.editCompanyController,
readOnly: true, readOnly: true,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
maxLines: 1, maxLines: 1,
onChanged: provider.onChangeEditCompanyName, onChanged: provider.onChangeEditCompanyName,
style: TextStyle( style: TextStyle(
color: Color(0xFF818181), fontSize: 14), color: Color(0xFF818181),
fontSize: 14,
),
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Enter Company Name", hintText: "Enter Company Name",
hintStyle: TextStyle( hintStyle: TextStyle(
...@@ -524,19 +554,24 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -524,19 +554,24 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
), ),
if(provider.companyNameError!=null)...[ if (provider.companyNameError != null) ...[
Container( Container(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
margin: EdgeInsets.only(top: 2.5, left: 25), margin: EdgeInsets.only(top: 2.5, left: 25),
child: Text( child: Text(
"${provider.companyNameError}", "${provider.companyNameError}",
style: TextStyle(color: Colors.red, fontSize: 10), style: TextStyle(
color: Colors.red,
fontSize: 10,
),
),
), ),
),
], ],
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
bottom: 5.0, top: 8.0), bottom: 5.0,
top: 8.0,
),
child: Text("Sale Order Number"), child: Text("Sale Order Number"),
), ),
Container( Container(
...@@ -548,16 +583,22 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -548,16 +583,22 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
child: Padding( child: Padding(
padding: const EdgeInsets.fromLTRB( padding: const EdgeInsets.fromLTRB(
10.0, 0.0, 10, 0), 10.0,
0.0,
10,
0,
),
child: TextFormField( child: TextFormField(
controller: provider controller:
.saleOrderNumberController, provider.saleOrderNumberController,
readOnly: true, readOnly: true,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
maxLines: 1, maxLines: 1,
onChanged: provider.onChangeSaleOrderNumber, onChanged: provider.onChangeSaleOrderNumber,
style: TextStyle( style: TextStyle(
color: Color(0xFF818181), fontSize: 14), color: Color(0xFF818181),
fontSize: 14,
),
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Enter Order Number", hintText: "Enter Order Number",
hintStyle: TextStyle( hintStyle: TextStyle(
...@@ -572,22 +613,26 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -572,22 +613,26 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
), ),
if(provider.saleOrderNumberError!=null)...[ if (provider.saleOrderNumberError != null) ...[
Container( Container(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
margin: EdgeInsets.only(top: 2.5, left: 25), margin: EdgeInsets.only(top: 2.5, left: 25),
child: Text( child: Text(
"${provider.saleOrderNumberError}", "${provider.saleOrderNumberError}",
style: TextStyle(color: Colors.red, fontSize: 10), style: TextStyle(
color: Colors.red,
fontSize: 10,
),
),
), ),
), ],
]
], ],
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
bottom: 5.0, top: 8.0), bottom: 5.0,
top: 8.0,
),
child: Text("Remarks"), child: Text("Remarks"),
), ),
Container( Container(
...@@ -599,16 +644,22 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -599,16 +644,22 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
child: Padding( child: Padding(
padding: const EdgeInsets.fromLTRB( padding: const EdgeInsets.fromLTRB(
10.0, 0.0, 10, 0), 10.0,
0.0,
10,
0,
),
child: TextFormField( child: TextFormField(
controller: provider controller:
.approveRejectFeedbackController, provider.approveRejectFeedbackController,
readOnly: true, readOnly: true,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
maxLines: 60, maxLines: 60,
onChanged: provider.onChangeApproveRejection, onChanged: provider.onChangeApproveRejection,
style: TextStyle( style: TextStyle(
color: Color(0xFF818181), fontSize: 14), color: Color(0xFF818181),
fontSize: 14,
),
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Write Remarks", hintText: "Write Remarks",
hintStyle: TextStyle( hintStyle: TextStyle(
...@@ -623,32 +674,47 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -623,32 +674,47 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
), ),
if(provider.approveRejectFeedbackError!=null)...[ if (provider.approveRejectFeedbackError != null) ...[
Container( Container(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
margin: EdgeInsets.only(top: 2.5, left: 25), margin: EdgeInsets.only(top: 2.5, left: 25),
child: Text( child: Text(
"${provider.approveRejectFeedbackError}", "${provider.approveRejectFeedbackError}",
style: TextStyle(color: Colors.red, fontSize: 10), style: TextStyle(
color: Colors.red,
fontSize: 10,
),
),
), ),
),
], ],
InkWell( InkWell(
onTap: () { onTap: () {
provider.approvalRejectionAPIFunction( provider.approvalRejectionAPIFunction(
context, context,
details.status, details.status,
details.id, details.id,
type=="Approve"?"Approved":"Rejected", type == "Approve" ? "Approved" : "Rejected",
details.tpcApplicable, details.tpcApplicable,
details.tpcApplicable=="Yes"?(widget.mode=="level_one_approval"?details.level1TpcApprovedAmount:details.level2TpcApprovedAmount):"", details.tpcApplicable == "Yes"
widget.mode=="dispatched"?details.invoiceNumber:"", ? (widget.mode == "level_one_approval"
widget.mode=="dispatched"?details.vehicleNumber:"", ? details.level1TpcApprovedAmount
widget.mode=="dispatched"?details.driverName:"", : details.level2TpcApprovedAmount)
widget.mode=="dispatched"?details.driverMobileNumber:"", : "",
widget.mode=="dispatched"?[]:[], widget.mode == "dispatched"
widget.mode); ? details.invoiceNumber
: "",
widget.mode == "dispatched"
? details.vehicleNumber
: "",
widget.mode == "dispatched"
? details.driverName
: "",
widget.mode == "dispatched"
? details.driverMobileNumber
: "",
widget.mode == "dispatched" ? [] : [],
widget.mode,
);
}, },
child: Container( child: Container(
...@@ -708,7 +774,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -708,7 +774,9 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
right: 15, right: 15,
top: 10, top: 10,
), ),
padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom,), padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
...@@ -725,10 +793,11 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -725,10 +793,11 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
bottom: 5.0, top: 8.0), bottom: 5.0,
top: 8.0,
),
child: Text("Remarks"), child: Text("Remarks"),
), ),
Container( Container(
...@@ -740,16 +809,21 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -740,16 +809,21 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
child: Padding( child: Padding(
padding: const EdgeInsets.fromLTRB( padding: const EdgeInsets.fromLTRB(
10.0, 0.0, 10, 0), 10.0,
0.0,
10,
0,
),
child: TextFormField( child: TextFormField(
controller: provider.deleteFeedbackController, controller: provider.deleteFeedbackController,
readOnly: true, readOnly: true,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
maxLines: 60, maxLines: 60,
onChanged: onChanged: provider.onChangeDeletion,
provider.onChangeDeletion,
style: TextStyle( style: TextStyle(
color: Color(0xFF818181), fontSize: 14), color: Color(0xFF818181),
fontSize: 14,
),
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Write Remarks", hintText: "Write Remarks",
hintStyle: TextStyle( hintStyle: TextStyle(
...@@ -764,20 +838,25 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -764,20 +838,25 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
), ),
if(provider.deleteFeedbackError!=null)...[ if (provider.deleteFeedbackError != null) ...[
Container( Container(
alignment: Alignment.topLeft, alignment: Alignment.topLeft,
margin: EdgeInsets.only(top: 2.5, left: 25), margin: EdgeInsets.only(top: 2.5, left: 25),
child: Text( child: Text(
"${provider.deleteFeedbackError}", "${provider.deleteFeedbackError}",
style: TextStyle(color: Colors.red, fontSize: 10), style: TextStyle(
color: Colors.red,
fontSize: 10,
),
),
), ),
),
], ],
InkWell( InkWell(
onTap: () { onTap: () {
provider.delectionAPIFunction( provider.delectionAPIFunction(
context, provider.orderDetails.id); context,
provider.orderDetails.id,
);
}, },
child: Container( child: Container(
alignment: Alignment.center, alignment: Alignment.center,
......
...@@ -90,6 +90,7 @@ import '../Models/ordersModels/addOrderTpcAgentListResponse.dart'; ...@@ -90,6 +90,7 @@ import '../Models/ordersModels/addOrderTpcAgentListResponse.dart';
import '../Models/ordersModels/commonResponse.dart'; import '../Models/ordersModels/commonResponse.dart';
import '../Models/ordersModels/ordersAccessiblePagesResponse.dart'; import '../Models/ordersModels/ordersAccessiblePagesResponse.dart';
import '../Models/ordersModels/ordersDetailsByModeResponse.dart'; import '../Models/ordersModels/ordersDetailsByModeResponse.dart';
import '../Models/ordersModels/ordersDetailsEditOrderViewResponse.dart';
import '../Models/ordersModels/ordersListByModeFilterResponse.dart'; import '../Models/ordersModels/ordersListByModeFilterResponse.dart';
import '../Models/ordersModels/ordersListByModeResponse.dart'; import '../Models/ordersModels/ordersListByModeResponse.dart';
import '../Models/ordersModels/paymentDetailsByModeFilterResponse.dart'; import '../Models/ordersModels/paymentDetailsByModeFilterResponse.dart';
...@@ -2404,6 +2405,86 @@ class ApiCalling { ...@@ -2404,6 +2405,86 @@ class ApiCalling {
} }
} }
static Future<ordersDetailsEditOrderViewResponse?> ordersDetailsEditOrderViewAPI(
empId,
session,
order_id,
) async {
try {
Map<String, String> data = {
'emp_id': (empId).toString(),
'session_id': (session).toString(),
'order_id': order_id.toString(),
};
var res = await post(data, ordersOrderDetailsEditOrderUrl, {});
if(res!=null){
return ordersDetailsEditOrderViewResponse.fromJson(jsonDecode(res.body));
}else{
debugPrint("Null Response");
}
} catch (e) {
debugPrint('hello bev=bug $e ');
return null;
}
}
static Future<CommonResponse?> ordersDetailsEditOrderSubmitAPI(
empId,
session,
order_id,
attachment_file,
dispatch_state_id,
district,
sub_locality,
dispatch_pincode,
dispatch_address,
unloading,
freight,
erection,
note
) async {
try {
Map<String, String> data = {
'empId,':empId.toString(),
'session,':session.toString(),
'order_id,':order_id.toString(),
'dispatch_state_id,':dispatch_state_id.toString(),
'district,':district.toString(),
'sub_locality,':sub_locality.toString(),
'dispatch_pincode,':dispatch_pincode.toString(),
'dispatch_address,':dispatch_address.toString(),
'unloading,':unloading.toString(),
'freight,':freight.toString(),
'erection,':erection.toString(),
'note':note.toString(),
};
var res;
if (attachment_file != null) {
res = await postImageNew(
data,
{},
ordersOrderDetailsEditOrderSubmitUrl,
attachment_file,
"attachment_file",
);
res = jsonDecode(res);
} else {
res = await post(data, ordersOrderDetailsEditOrderSubmitUrl, {});
res = jsonDecode(res.body);
}
return CommonResponse.fromJson(res);
} catch (e) {
debugPrint('hello bev=bug $e ');
return null;
}
}
static Future<CommonResponse?> ordersDetailsApproveRejectAPI( static Future<CommonResponse?> ordersDetailsApproveRejectAPI(
empId, empId,
session, session,
...@@ -3680,7 +3761,7 @@ class ApiCalling { ...@@ -3680,7 +3761,7 @@ class ApiCalling {
final res = await post(data, crmProspectDetailsEditAccountViewUrl, {}); final res = await post(data, crmProspectDetailsEditAccountViewUrl, {});
if (res != null) { if (res != null) {
print("Filter:${data}"); print("Filter:${data}");
debugPrint(res.body); print("Stetets:${jsonDecode(res.body)['states']}");
return crmProspectDetailsEditAccountViewResponse.fromJson( return crmProspectDetailsEditAccountViewResponse.fromJson(
jsonDecode(res.body), jsonDecode(res.body),
); );
......
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