Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sai Srinivas
GEN_ERP_2025
Commits
7210793a
Commit
7210793a
authored
Sep 17, 2025
by
Sai Srinivas
Browse files
17-09
parent
185e0896
Changes
256
Hide whitespace changes
Inline
Side-by-side
Too many changes to show.
To preserve performance only
256 of 256+
files are displayed.
Plain diff
Email patch
lib/screens/crm/NearbyOpenLeads.dart
View file @
7210793a
...
...
@@ -382,22 +382,21 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_buildScreen
(
context
),
),
)
:
_buildScreen
(
context
)
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_buildScreen
(
context
),
),
)
:
_buildScreen
(
context
)
:
NoNetwork
(
context
);
}
Widget
_buildScreen
(
BuildContext
context
)
{
return
Consumer
<
crmNearbyOpenLeadsProvider
>(
builder:
(
context
,
provider
,
child
)
{
// {
// return Scaffold(
// backgroundColor: AppColors.scaffold_bg_color,
...
...
@@ -446,7 +445,7 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
topLeft:
Radius
.
circular
(
30.0
),
topRight:
Radius
.
circular
(
30.0
),
),
child:
Container
(
child:
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
,
child:
Stack
(
children:
[
...
...
@@ -456,19 +455,24 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
zoomControlsEnabled:
true
,
gestureRecognizers:
{
Factory
<
OneSequenceGestureRecognizer
>(
()
=>
EagerGestureRecognizer
(),
()
=>
EagerGestureRecognizer
(),
),
Factory
<
PanGestureRecognizer
>(
()
=>
PanGestureRecognizer
(),
()
=>
PanGestureRecognizer
(),
),
Factory
<
ScaleGestureRecognizer
>(
()
=>
ScaleGestureRecognizer
(),
()
=>
ScaleGestureRecognizer
(),
),
},
initialCameraPosition:
CameraPosition
(
target:
widget
.
latitude
!=
null
&&
widget
.
longitude
!=
null
?
LatLng
(
widget
.
latitude
!,
widget
.
longitude
!)
:
provider
.
startLocation
,
target:
widget
.
latitude
!=
null
&&
widget
.
longitude
!=
null
?
LatLng
(
widget
.
latitude
!,
widget
.
longitude
!,
)
:
provider
.
startLocation
,
zoom:
14.0
,
),
markers:
provider
.
markers
.
toSet
(),
...
...
@@ -480,11 +484,12 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
provider
.
onCameraMove
(
context
,
position
);
},
onTap:
(
position
)
{
provider
.
mapController
?.
hideMarkerInfoWindow
(
provider
.
markers
.
isNotEmpty
?
provider
.
markers
.
first
.
markerId
:
MarkerId
(
''
),
);
provider
.
mapController
?.
hideMarkerInfoWindow
(
provider
.
markers
.
isNotEmpty
?
provider
.
markers
.
first
.
markerId
:
MarkerId
(
''
),
);
},
),
],
...
...
@@ -495,11 +500,11 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
),
),
),
if
(
provider
.
isLoading
||
(
provider
.
markers
.
isEmpty
))...[
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
,
height:
MediaQuery
.
of
(
context
).
size
.
height
,
color:
Colors
.
white38
,
if
(
provider
.
isLoading
||
(
provider
.
markers
.
isEmpty
))
...[
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
,
height:
MediaQuery
.
of
(
context
).
size
.
height
,
color:
Colors
.
white38
,
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
...
...
@@ -507,12 +512,15 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
SizedBox
(
height:
16
),
Text
(
'Loading nearby leads...'
,
style:
TextStyle
(
fontSize:
16
,
color:
AppColors
.
app_blue
),
style:
TextStyle
(
fontSize:
16
,
color:
AppColors
.
app_blue
,
),
),
],
),
)
]
)
,
]
,
],
),
),
...
...
@@ -588,7 +596,7 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
vertical:
0
,
),
iconSize:
0.0
,
initialProgress:
provider
.
currentValue
/
50
,
initialProgress:
provider
.
currentValue
/
50
,
enabled:
true
,
foregroundColor:
AppColors
.
app_blue
,
segmentDividerColor:
Color
(
0xFFF6F6F8
),
...
...
@@ -602,7 +610,10 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
Container
(
child:
InkWell
(
onTap:
()
{
provider
.
applyFilter
(
context
,
provider
.
currentValue
);
provider
.
applyFilter
(
context
,
provider
.
currentValue
,
);
Navigator
.
pop
(
context
);
},
child:
Container
(
...
...
@@ -641,4 +652,4 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
},
);
}
}
\ No newline at end of file
}
lib/screens/crm/ProspectDetailsByMode.dart
View file @
7210793a
...
...
@@ -74,7 +74,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
context
,
widget
.
leadId
,
);
provider
.
showMoreDetails
=
false
;
provider
.
showMoreDetails
=
false
;
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
});
}
...
...
@@ -122,17 +122,15 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
element
.
id
!.
trim
()
==
editProvider
.
accountDetails
.
state
!.
trim
(),
);
if
(
selectedState
!=
null
)
{
editProvider
.
selectedStates
=
selectedState
;
editProvider
.
selectedStateId
=
selectedState
.
id
;
editProvider
.
selectedStateValue
=
selectedState
.
name
;
editProvider
.
selectedStates
=
selectedState
;
editProvider
.
selectedStateId
=
selectedState
.
id
;
editProvider
.
selectedStateValue
=
selectedState
.
name
;
await
editProvider
.
crmLeadListDistrictsOnStateAPIFunction
(
context
,
widget
.
mode
,
editProvider
.
selectedStateId
,
);
}
await
editProvider
.
crmLeadListDistrictsOnStateAPIFunction
(
context
,
widget
.
mode
,
editProvider
.
selectedStateId
,
);
}
// Prefill district
...
...
@@ -142,17 +140,15 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
(
element
)
=>
element
.
id
!.
trim
()
==
editProvider
.
accountDetails
.
district
!.
trim
(),
);
if
(
selectedDistrict
!=
null
)
{
editProvider
.
selectedDistricts
=
selectedDistrict
;
editProvider
.
selectedDistrictId
=
selectedDistrict
.
id
;
editProvider
.
selectedDistrictValue
=
selectedDistrict
.
district
;
editProvider
.
selectedDistricts
=
selectedDistrict
;
editProvider
.
selectedDistrictId
=
selectedDistrict
.
id
;
editProvider
.
selectedDistrictValue
=
selectedDistrict
.
district
;
await
editProvider
.
crmLeadListSubLocOnDistrictAPIFunction
(
context
,
widget
.
mode
,
editProvider
.
selectedDistrictId
,
);
}
await
editProvider
.
crmLeadListSubLocOnDistrictAPIFunction
(
context
,
widget
.
mode
,
editProvider
.
selectedDistrictId
,
);
}
if
(
editProvider
.
subLocationsList
.
isNotEmpty
&&
...
...
@@ -160,11 +156,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
final
selectedSubLocation
=
editProvider
.
subLocationsList
.
firstWhere
(
(
element
)
=>
element
.
id
==
editProvider
.
accountDetails
.
subLocality
,
);
if
(
selectedSubLocation
!=
null
)
{
editProvider
.
selectedSubLocations
=
selectedSubLocation
;
editProvider
.
selectedSubLocationId
=
selectedSubLocation
.
id
;
editProvider
.
selectedSubLocationValue
=
selectedSubLocation
.
subLocality
;
}
editProvider
.
selectedSubLocations
=
selectedSubLocation
;
editProvider
.
selectedSubLocationId
=
selectedSubLocation
.
id
;
editProvider
.
selectedSubLocationValue
=
selectedSubLocation
.
subLocality
;
}
print
(
"Company Name:
${editProvider.editCompanyNameController.text}
"
);
...
...
@@ -240,7 +234,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
"PinCode"
,
];
var
subHeadings2
=
[
leadDetails
!
.
address
??
"-"
,
leadDetails
.
address
??
"-"
,
leadDetails
.
state
??
"-"
,
leadDetails
.
district
??
"-"
,
leadDetails
.
subLocality
??
"-"
,
...
...
@@ -254,7 +248,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
leadDetails
.
segment
??
"-"
,
];
var
headings4
=
[
"Lead Age"
];
var
subHeadings4
=
[
"
${leadDetails
!
.aage ?? "-"}
days old"
];
var
subHeadings4
=
[
"
${leadDetails.aage ?? "-"}
days old"
];
var
leadListNotEmpty
=
leadsList
.
isNotEmpty
;
var
contactNotEmpty
=
provider
.
contactList
.
isNotEmpty
;
...
...
@@ -346,10 +340,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
elevation:
2
,
child:
Column
(
children:
[
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
...
...
@@ -368,7 +361,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
children:
[
Expanded
(
flex:
1
,
child:
Container
(
child:
SizedBox
(
height:
50
,
width:
35
,
child:
SvgPicture
.
asset
(
...
...
@@ -396,7 +389,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
),
if
(
provider
.
showTransferAccount
==
"1"
)
...[
SizedBox
(
width:
5
),
Expanded
(
...
...
@@ -478,7 +471,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
...
List
.
generate
(
subHeadings1
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -537,7 +532,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
...
List
.
generate
(
subHeadings2
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -596,7 +593,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
...
List
.
generate
(
subHeadings3
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -655,7 +654,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
...
List
.
generate
(
subHeadings4
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
padding:
EdgeInsets
.
symmetric
(
vertical:
7
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -671,43 +672,44 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
Expanded
(
child:
subHeadings4
[
j
]
==
"Lead Age"
?
Tooltip
(
triggerMode:
TooltipTriggerMode
.
tap
,
message:
"
${leadDetails.createdDatetime}
"
,
child:
Text
(
subHeadings4
[
j
]
==
""
?
"-"
:
subHeadings4
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
,
child:
subHeadings4
[
j
]
==
"Lead Age"
?
Tooltip
(
triggerMode:
TooltipTriggerMode
.
tap
,
message:
"
${leadDetails.createdDatetime}
"
,
child:
Text
(
subHeadings4
[
j
]
==
""
?
"-"
:
subHeadings4
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
,
),
decorationColor:
AppColors
.
grey_semi
,
decoration:
TextDecoration
.
underline
,
),
),
)
:
Text
(
subHeadings4
[
j
]
==
""
?
"-"
:
subHeadings4
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
,
),
),
decorationColor:
AppColors
.
grey_semi
,
decoration:
TextDecoration
.
underline
,
),
),
)
:
Text
(
subHeadings4
[
j
]
==
""
?
"-"
:
subHeadings4
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
,
),
),
),
),
],
),
...
...
@@ -716,7 +718,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
],
),
),
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
...
...
@@ -741,7 +743,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
Transform
.
flip
(
flipY:
provider
.
showMoreDetails
?
true
:
false
,
provider
.
showMoreDetails
?
true
:
false
,
child:
SvgPicture
.
asset
(
"assets/svg/arrow_dropdown.svg"
,
height:
25
,
...
...
@@ -829,20 +833,15 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
context
,
MaterialPageRoute
(
builder:
(
context
,
)
=>
LeadDetailsByMode
(
mode:
""
,
pageTitleName:
"Lead Details"
,
leadId:
widget
.
leadId
,
),
(
context
)
=>
LeadDetailsByMode
(
mode:
""
,
pageTitleName:
"Lead Details"
,
leadId:
widget
.
leadId
,
),
),
);
if
(
res
==
true
)
{
provider
.
crmProspectDetailsAPIFunction
(
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
,
);
...
...
@@ -927,7 +926,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
child:
Center
(
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${
leadsList[index].status ?? "-"
}
"
,
leadsList
[
index
].
status
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
...
...
@@ -1041,9 +1040,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
...
List
.
generate
(
1
,
(
j
)
{
final
textheads
=
[
"Lead Open / Close"
,
];
final
textheads
=
[
"Lead Open / Close"
];
final
textSubheads
=
[
leadsList
[
index
].
openStatus
??
"-"
,
];
...
...
@@ -1067,19 +1064,18 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
right
,
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
...
...
@@ -1126,7 +1122,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
],
///Contact Details
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
),
...
...
@@ -1146,14 +1142,17 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
if
(
contactNotEmpty
)
...[
Expanded
(
child:
InkResponse
(
onTap:
provider
.
addContactSelected
?
null
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
addContactSelected
=
true
;
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
onTap:
provider
.
addContactSelected
?
null
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
addContactSelected
=
true
;
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
child:
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
Text
(
...
...
@@ -1183,27 +1182,35 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
itemCount:
provider
.
contactList
.
length
,
itemBuilder:
(
context
,
lp
)
{
return
InkResponse
(
onTap:
provider
.
addContactSelected
?
null
:
()
async
{
provider
.
addContactSelected
=
true
;
HapticFeedback
.
selectionClick
();
provider
.
editNameController
.
text
=
provider
.
contactList
[
lp
].
name
??
""
;
provider
.
editDesignationController
.
text
=
provider
.
contactList
[
lp
].
designation
??
""
;
provider
.
editMobileNumberController
.
text
=
provider
.
contactList
[
lp
].
mob1
??
""
;
provider
.
editAlternativeMobileController
.
text
=
provider
.
contactList
[
lp
].
mob2
??
""
;
provider
.
editTelephoneController
.
text
=
provider
.
contactList
[
lp
].
tel
??
""
;
provider
.
editEmailController
.
text
=
provider
.
contactList
[
lp
].
email
??
""
;
_showEditContactSheet
(
context
,
lp
,
provider
.
accountDetails
.
id
!,
);
},
onTap:
provider
.
addContactSelected
?
null
:
()
async
{
provider
.
addContactSelected
=
true
;
HapticFeedback
.
selectionClick
();
provider
.
editNameController
.
text
=
provider
.
contactList
[
lp
].
name
??
""
;
provider
.
editDesignationController
.
text
=
provider
.
contactList
[
lp
]
.
designation
??
""
;
provider
.
editMobileNumberController
.
text
=
provider
.
contactList
[
lp
].
mob1
??
""
;
provider
.
editAlternativeMobileController
.
text
=
provider
.
contactList
[
lp
].
mob2
??
""
;
provider
.
editTelephoneController
.
text
=
provider
.
contactList
[
lp
].
tel
??
""
;
provider
.
editEmailController
.
text
=
provider
.
contactList
[
lp
].
email
??
""
;
_showEditContactSheet
(
context
,
lp
,
provider
.
accountDetails
.
id
!,
);
},
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
...
...
@@ -1214,7 +1221,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -1246,11 +1253,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
.
name
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
color:
AppColors
.
semi_black
,
),
),
),
...
...
@@ -1264,12 +1269,20 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
},
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${provider.contactList[lp].mob1 ?? "-"}
"
,
provider
.
contactList
[
lp
]
.
mob1
??
"-"
,
style:
TextStyle
(
height:
1
,
decorationColor:
AppColors
.
grey_thick
,
decoration:
TextDecoration
.
underline
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
AppColors
.
grey_thick
,
decoration:
TextDecoration
.
underline
,
decorationStyle:
TextDecorationStyle
.
dotted
,
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
...
...
@@ -1282,8 +1295,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
],
),
Text
(
provider
.
contactList
[
lp
].
email
==
""
provider
.
contactList
[
lp
].
email
==
""
?
"-"
:
provider
.
contactList
[
lp
]
...
...
@@ -1307,14 +1319,17 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
]
else
...[
InkResponse
(
onTap:
provider
.
addContactSelected
?
null
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
addContactSelected
=
true
;
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
onTap:
provider
.
addContactSelected
?
null
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
addContactSelected
=
true
;
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
child:
Container
(
height:
50
,
margin:
EdgeInsets
.
symmetric
(
...
...
@@ -1339,15 +1354,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
],
///Order Details
if
(
orderNotEmpty
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
),
child:
Row
(
children:
[
Expanded
(
...
...
@@ -1380,7 +1391,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
return
Container
(
height:
250
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.9
,
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
...
...
@@ -1394,8 +1405,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
...
...
@@ -1424,7 +1434,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
color:
AppColors
.
semi_black
,
),
),
Text
(
"
${orderList[index].id}
"
,
style:
TextStyle
(
...
...
@@ -1442,8 +1452,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
flex:
2
,
child:
Container
(
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
),
borderRadius:
BorderRadius
.
circular
(
8
,
),
color:
Color
(
0xFFF3FFD5
),
),
padding:
EdgeInsets
.
symmetric
(
...
...
@@ -1453,7 +1464,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
child:
Center
(
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${
orderList[index].status ?? "-"
}
"
,
orderList
[
index
].
status
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
...
...
@@ -1466,9 +1477,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
],
),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
),
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Row
(
children:
[
Expanded
(
...
...
@@ -1518,7 +1527,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
),
Expanded
(
child:
Text
(
textAlign:
TextAlign
.
right
,
...
...
@@ -1535,11 +1544,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
);
}),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
4
,
),
padding:
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
Row
(
children:
[
Expanded
(
...
...
@@ -1618,15 +1625,13 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
overflow:
TextOverflow
.
ellipsis
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
decorationColor:
AppColors
.
app_blue
,
decoration:
TextDecoration
.
underline
,
TextDecoration
.
underline
,
),
),
),
...
...
@@ -1642,15 +1647,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
],
///Payment Details
if
(
paymentsNotEmpty
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
left:
10
,
right:
10
,
top:
10
),
child:
Row
(
children:
[
Expanded
(
...
...
@@ -1667,7 +1668,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
],
),
),
SizedBox
(
width:
double
.
infinity
,
height:
200
,
...
...
@@ -1687,21 +1688,15 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
context
,
MaterialPageRoute
(
builder:
(
context
,
)
=>
Paymentdetailsbymode
(
mode:
""
,
pageTitleName:
"Payment Details"
,
paymentId:
paymentList
[
index
]
.
id
,
),
(
context
)
=>
Paymentdetailsbymode
(
mode:
""
,
pageTitleName:
"Payment Details"
,
paymentId:
paymentList
[
index
].
id
,
),
),
);
if
(
res
==
true
)
{
provider
.
crmProspectDetailsAPIFunction
(
provider
.
crmProspectDetailsAPIFunction
(
context
,
paymentList
[
index
].
id
,
);
...
...
@@ -1711,7 +1706,10 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
height:
200
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.9
,
margin:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
7.5
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
7.5
,
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
,
...
...
@@ -1783,7 +1781,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
child:
Center
(
child:
Text
(
textAlign:
TextAlign
.
right
,
"
${paymentList[index].paymentType ?? "-"}
"
,
paymentList
[
index
]
.
paymentType
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
...
...
@@ -1871,9 +1871,6 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
);
}),
],
),
),
...
...
@@ -2099,7 +2096,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
);
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
});
}
,
);
});
}
Future
<
void
>
_showEditContactSheet
(
BuildContext
context
,
index
,
accid
)
{
...
...
@@ -2311,7 +2308,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
);
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
});
}
,
);
});
}
Future
<
void
>
_showTransferAccountSheet
(
BuildContext
context
,
accID
)
{
...
...
@@ -2397,10 +2394,10 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
editProsProvider
.
selectedEmployees
=
value
;
editProsProvider
.
selectedEmployeeId
=
value
!
.
id
!;
value
.
id
!;
editProsProvider
.
selectedEmployeeValue
=
value
!
.
name
!;
value
.
name
!;
}
}
},
...
...
@@ -2526,7 +2523,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
);
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
});
}
,
);
});
}
Future
<
void
>
_showEditAccountSheet
(
BuildContext
context
,
accID
)
{
...
...
@@ -2672,9 +2669,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
if
(
value
!=
null
)
{
if
(
provider
.
statesList
.
isNotEmpty
)
{
provider
.
selectedStates
=
value
;
provider
.
selectedStateId
=
value
!
.
id
!;
provider
.
selectedStateId
=
value
.
id
!;
provider
.
selectedStateValue
=
value
!
.
name
!;
value
.
name
!;
if
(
provider
.
districtsList
.
isNotEmpty
)
{
...
...
@@ -2742,9 +2739,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
if
(
provider
.
districtsList
.
isNotEmpty
)
{
provider
.
selectedDistricts
=
value
;
provider
.
selectedDistrictId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedDistrictValue
=
value
!
.
district
!;
value
.
district
!;
if
(
provider
.
subLocationsList
.
isNotEmpty
)
{
...
...
@@ -2823,9 +2820,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
.
isNotEmpty
)
{
provider
.
selectedSubLocations
=
value
;
provider
.
selectedSubLocationId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedSubLocationValue
=
value
!
.
subLocality
!;
value
.
subLocality
!;
}
}
},
...
...
@@ -2939,7 +2936,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
);
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
});
}
,
);
});
}
Future
<
void
>
_showOptionsSheet
(
BuildContext
context
)
{
...
...
@@ -3250,24 +3247,22 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
items:
addleadProvider
.
leadProductsList
.
map
(
(
ord
,
)
=>
DropdownMenuItem
<
Products
>(
value:
ord
,
child:
Text
(
"
${ord.name}
"
,
style:
const
TextStyle
(
fontSize:
14
,
(
ord
)
=>
DropdownMenuItem
<
Products
>(
value:
ord
,
child:
Text
(
"
${ord.name}
"
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
value:
addleadProvider
.
selectedProducts
!=
null
addleadProvider
.
selectedProducts
!=
null
?
addleadProvider
.
leadProductsList
.
firstWhere
(
(
ord
)
=>
...
...
@@ -3296,12 +3291,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
value
.
id
;
addleadProvider
.
selectedProductsID
=
value
.
name
;
addleadProvider
.
crmSelectedProductDetailsApiFunction
(
context
,
value
.
id
.
toString
(),
);
addleadProvider
.
crmSelectedProductDetailsApiFunction
(
context
,
value
.
id
.
toString
(),
);
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
...
...
lib/screens/crm/ProspectListByMode.dart
View file @
7210793a
...
...
@@ -170,7 +170,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
children:
[
Expanded
(
flex:
1
,
child:
Container
(
child:
SizedBox
(
height:
50
,
width:
35
,
...
...
@@ -353,7 +353,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
if
(
widget
.
mode
!=
"executive"
)
{
headings
.
add
(
"Employee"
);
}
return
Container
(
return
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.3
,
child:
Column
(
mainAxisSize:
MainAxisSize
.
min
,
...
...
@@ -550,7 +550,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
EdgeInsets
.
zero
,
),
);
})
.
toList
()
,
}),
],
],
),
...
...
lib/screens/crm/addLeadProductScreen.dart
View file @
7210793a
...
...
@@ -40,14 +40,14 @@ class _AddleadproductscreenState extends State<Addleadproductscreen> {
context
,
listen:
false
,
);
if
(
widget
.
type
==
"Add"
){
if
(
widget
.
type
==
"Add"
)
{
provider
.
selectedProducts
=
null
;
provider
.
selectedProductsId
=
null
;
provider
.
selectedProductsValue
=
null
;
provider
.
addProductPriceController
.
clear
();
provider
.
addQuantityController
.
clear
();
provider
.
addTotalAmountController
.
clear
();
}
else
{
}
else
{
provider
.
prefillProductForEdit
(
widget
.
editIndex
!);
}
...
...
@@ -165,7 +165,7 @@ class _AddleadproductscreenState extends State<Addleadproductscreen> {
onChanged:
(
Products
?
value
)
{
if
(
value
!=
null
)
{
provider
.
selectedProducts
=
value
;
provider
.
selectedProductsId
=
value
!
.
id
!;
provider
.
selectedProductsId
=
value
.
id
!;
provider
.
selectedProductsValue
=
value
.
name
;
}
...
...
@@ -177,44 +177,34 @@ class _AddleadproductscreenState extends State<Addleadproductscreen> {
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
productSearchController
,
provider
.
productSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
controller:
provider
.
productSearchController
,
provider
.
productSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Product...'
,
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Product...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
...
...
@@ -292,24 +282,21 @@ class _AddleadproductscreenState extends State<Addleadproductscreen> {
floatingActionButton:
InkWell
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
if
(
provider
.
selectedProducts
!=
null
)
{
final
productData
=
{
"product_id"
:
provider
.
selectedProductsId
!,
"price"
:
provider
.
addProductPriceController
.
text
,
"qty"
:
provider
.
addQuantityController
.
text
,
"net_price"
:
provider
.
addTotalAmountController
.
text
,
};
if
(
widget
.
editIndex
!=
null
)
{
provider
.
updateProduct
(
widget
.
editIndex
!,
productData
);
}
else
{
provider
.
addProduct
(
productData
);
}
print
(
provider
.
getJsonEncodedProducts
());
Navigator
.
pop
(
context
,
provider
.
getJsonEncodedProducts
());
if
(
provider
.
selectedProducts
!=
null
)
{
final
productData
=
{
"product_id"
:
provider
.
selectedProductsId
!,
"price"
:
provider
.
addProductPriceController
.
text
,
"qty"
:
provider
.
addQuantityController
.
text
,
"net_price"
:
provider
.
addTotalAmountController
.
text
,
};
if
(
widget
.
editIndex
!=
null
)
{
provider
.
updateProduct
(
widget
.
editIndex
!,
productData
);
}
else
{
provider
.
addProduct
(
productData
);
}
print
(
provider
.
getJsonEncodedProducts
());
Navigator
.
pop
(
context
,
provider
.
getJsonEncodedProducts
());
}
},
child:
Container
(
alignment:
Alignment
.
center
,
...
...
lib/screens/crm/addLeadsProspectsScreen.dart
View file @
7210793a
...
...
@@ -45,7 +45,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
_nameController
.
dispose
();
_emailController
.
dispose
();
_addressController
.
dispose
();
focusNodes
.
map
((
e
)
=>
e
.
dispose
()
,
);
focusNodes
.
map
((
e
)
=>
e
.
dispose
());
super
.
dispose
();
}
...
...
@@ -80,6 +80,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
const
SnackBar
(
content:
Text
(
'Form submitted successfully!'
)),
);
}
Future
<
bool
>
onBackPressed
(
BuildContext
context
)
async
{
if
(
_currentStep
>
0
)
{
_previousStep
();
...
...
@@ -88,6 +89,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
return
true
;
}
}
@override
void
initState
()
{
super
.
initState
();
...
...
@@ -120,15 +122,15 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
...
...
@@ -257,8 +259,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
TextOverflow
.
ellipsis
,
),
),
)
...
...
@@ -292,9 +293,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
name
,
false
,
null
,
focusNodes
[
0
],
focusNodes
[
1
],
TextInputAction
.
next
focusNodes
[
0
],
focusNodes
[
1
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
companynameError
),
...
...
@@ -307,9 +308,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
name
,
false
,
null
,
focusNodes
[
1
],
focusNodes
[
2
],
TextInputAction
.
next
focusNodes
[
1
],
focusNodes
[
2
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
nameError
),
...
...
@@ -337,10 +338,10 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
onChangemailId
,
TextInputType
.
emailAddress
,
false
,
null
,
focusNodes
[
3
],
null
,
focusNodes
[
3
],
focusNodes
[
4
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
mailIdError
),
...
...
@@ -406,7 +407,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
6
],
null
,
null
,
TextInputAction
.
done
,
),
errorWidget
(
context
,
provider
.
TelephoneError
),
...
...
@@ -436,23 +437,37 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
)
.
toList
(),
// value: provider.selectedSources,
value:
provider
.
sourcesList
.
isNotEmpty
?
provider
.
selectedSources
!=
null
?
provider
.
sourcesList
.
firstWhere
((
element
)
=>
element
.
id
==
provider
.
selectedSourcesId
,
orElse:
()
=>
provider
.
sourcesList
[
0
],
):
null
:
null
,
value:
provider
.
sourcesList
.
isNotEmpty
?
provider
.
selectedSources
!=
null
?
provider
.
sourcesList
.
firstWhere
(
(
element
)
=>
element
.
id
==
provider
.
selectedSourcesId
,
orElse:
()
=>
provider
.
sourcesList
[
0
],
)
:
null
:
null
,
onChanged:
(
Sources
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
sourcesList
.
isNotEmpty
)
{
provider
.
selectedSources
=
value
;
provider
.
selectedSourcesId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedSourcesValue
=
value
!
.
name
!;
value
.
name
!;
if
(
provider
.
referencesList
.
isNotEmpty
){
if
(
provider
.
referencesList
.
isNotEmpty
)
{
provider
.
referencesList
.
clear
();
provider
.
selectedReferenceId
=
null
;
provider
.
selectedReferenceValue
=
null
;
provider
.
selectedReferenceValue
=
null
;
}
provider
...
...
@@ -468,44 +483,33 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
sourceSearchController
,
provider
.
sourceSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
controller:
provider
.
sourceSearchController
,
provider
.
sourceSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Source...'
,
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Source...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
BorderRadius
.
circular
(
8
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
...
...
@@ -539,24 +543,34 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
items:
provider
.
referencesList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
References
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
(
slist
)
=>
DropdownMenuItem
<
References
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
),
),
),
),
),
)
.
toList
(),
// value: provider.selectedReference,
value:
provider
.
referencesList
.
isNotEmpty
?
provider
.
selectedReference
!=
null
?
provider
.
referencesList
.
firstWhere
((
element
)
=>
element
.
id
==
provider
.
selectedReferenceId
,
orElse:
()
=>
provider
.
referencesList
[
0
],
):
null
:
null
,
value:
provider
.
referencesList
.
isNotEmpty
?
provider
.
selectedReference
!=
null
?
provider
.
referencesList
.
firstWhere
(
(
element
)
=>
element
.
id
==
provider
.
selectedReferenceId
,
orElse:
()
=>
provider
.
referencesList
[
0
],
)
:
null
:
null
,
onChanged:
(
References
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
...
...
@@ -564,9 +578,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
.
isNotEmpty
)
{
provider
.
selectedReference
=
value
;
provider
.
selectedReferenceId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedReferenceValue
=
value
!
.
name
!;
value
.
name
!;
}
}
},
...
...
@@ -574,50 +588,41 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
referenceSearchController
,
provider
.
referenceSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
controller:
provider
.
referenceSearchController
,
provider
.
referenceSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Reference...'
,
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Reference...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
BorderRadius
.
circular
(
8
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
provider
.
referenceSearchController
.
clear
();
provider
.
referenceSearchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
...
...
@@ -658,23 +663,34 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
)
.
toList
(),
// value: provider.selectedTeams,
value:
provider
.
teamsList
.
isNotEmpty
?
provider
.
selectedTeams
!=
null
?
provider
.
teamsList
.
firstWhere
((
element
)
=>
element
.
id
==
provider
.
selectedTeamsId
,
orElse:
()
=>
provider
.
teamsList
[
0
],
):
null
:
null
,
value:
provider
.
teamsList
.
isNotEmpty
?
provider
.
selectedTeams
!=
null
?
provider
.
teamsList
.
firstWhere
(
(
element
)
=>
element
.
id
==
provider
.
selectedTeamsId
,
orElse:
()
=>
provider
.
teamsList
[
0
],
)
:
null
:
null
,
onChanged:
(
Teams
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
teamsList
.
isNotEmpty
)
{
provider
.
selectedTeams
=
value
;
provider
.
selectedTeamsId
=
value
!.
id
!;
provider
.
selectedTeamsId
=
value
.
id
!;
provider
.
selectedTeamsValue
=
value
!
.
name
!;
value
.
name
!;
if
(
provider
.
segmentsList
.
isNotEmpty
){
if
(
provider
.
segmentsList
.
isNotEmpty
)
{
provider
.
segmentsList
.
clear
();
provider
.
selectedSegmentId
=
null
;
provider
.
selectedSegmentValue
=
null
;
provider
.
selectedSegmentValue
=
null
;
}
provider
.
crmLeadListSegmentOnTeamAPIFunction
(
...
...
@@ -689,44 +705,33 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
teamSearchController
,
provider
.
teamSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
controller:
provider
.
teamSearchController
,
provider
.
teamSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Team...'
,
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Team...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
BorderRadius
.
circular
(
8
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
...
...
@@ -773,20 +778,29 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
)
.
toList
(),
// value: provider.selectedSegment,
value:
provider
.
segmentsList
.
isNotEmpty
?
provider
.
selectedSegment
!=
null
?
provider
.
segmentsList
.
firstWhere
((
element
)
=>
element
.
id
==
provider
.
selectedSegmentId
,
orElse:
()
=>
provider
.
segmentsList
[
0
],
):
null
:
null
,
value:
provider
.
segmentsList
.
isNotEmpty
?
provider
.
selectedSegment
!=
null
?
provider
.
segmentsList
.
firstWhere
(
(
element
)
=>
element
.
id
==
provider
.
selectedSegmentId
,
orElse:
()
=>
provider
.
segmentsList
[
0
],
)
:
null
:
null
,
onChanged:
(
Segments
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
segmentsList
.
isNotEmpty
)
{
if
(
provider
.
segmentsList
.
isNotEmpty
)
{
provider
.
selectedSegment
=
value
;
provider
.
selectedSegmentId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedSegmentValue
=
value
!
.
name
!;
value
.
name
!;
}
}
},
...
...
@@ -794,50 +808,40 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
segmentSearchController
,
provider
.
segmentSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
controller:
provider
.
segmentSearchController
,
provider
.
segmentSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Segment...'
,
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Segment...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
BorderRadius
.
circular
(
8
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
provider
.
segmentSearchController
.
clear
();
provider
.
segmentSearchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
...
...
@@ -882,17 +886,15 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Addleadproductscreen
(
type:
"Add"
,
),
(
context
)
=>
Addleadproductscreen
(
type:
"Add"
),
settings:
RouteSettings
(
name:
'Generatequotationaddeditproduct'
,
name:
'Generatequotationaddeditproduct'
,
),
),
);
if
(
res
!=
null
)
{
print
(
"result
$
{
res
}
"
);
print
(
"result
$res
"
);
}
},
child:
Container
(
...
...
@@ -944,8 +946,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
),
)
.
name
;
final
prodPrice
=
product
[
'price'
]
??
'-'
;
final
prodPrice
=
product
[
'price'
]
??
'-'
;
final
prodQty
=
product
[
'qty'
]
??
'-'
;
final
totalPrice
=
product
[
'net_price'
]
??
'-'
;
...
...
@@ -968,7 +969,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
),
);
if
(
res
!=
null
)
{
print
(
"result
$
{
res
}
"
);
print
(
"result
$res
"
);
}
},
child:
Container
(
...
...
@@ -995,8 +996,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
14
),
borderRadius:
BorderRadius
.
circular
(
14
,
),
),
child:
Row
(
mainAxisAlignment:
...
...
@@ -1015,8 +1017,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
flex:
6
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
...
...
@@ -1025,8 +1026,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
Expanded
(
flex:
4
,
child:
Text
(
productName
??
"-"
,
productName
??
"-"
,
maxLines:
2
,
overflow:
TextOverflow
...
...
@@ -1045,8 +1045,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
flex:
3
,
child:
Text
(
textAlign:
TextAlign
.
right
,
TextAlign
.
right
,
"₹
$prodPrice
"
,
style:
TextStyle
(
fontFamily:
...
...
@@ -1067,8 +1066,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
grey_semi
,
AppColors
.
grey_semi
,
),
),
SizedBox
(
height:
5
),
...
...
@@ -1112,11 +1110,14 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
),
],
if
(
provider
.
productRows
.
isEmpty
)...[
if
(
provider
.
productsEmptyError
!=
null
)...[
errorWidget
(
context
,
provider
.
productsEmptyError
)
]
]
if
(
provider
.
productRows
.
isEmpty
)
...[
if
(
provider
.
productsEmptyError
!=
null
)
...[
errorWidget
(
context
,
provider
.
productsEmptyError
,
),
],
],
],
),
),
...
...
@@ -1147,17 +1148,16 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
items:
provider
.
statesList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
States
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
(
slist
)
=>
DropdownMenuItem
<
States
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
),
),
),
),
),
)
.
toList
(),
...
...
@@ -1166,7 +1166,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
statesList
.
isNotEmpty
?
provider
.
selectedStates
!=
null
?
provider
.
statesList
!
.
firstWhere
(
?
provider
.
statesList
.
firstWhere
(
(
ord
)
=>
ord
.
id
==
provider
...
...
@@ -1174,7 +1174,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
orElse:
()
=>
provider
.
statesList
!
[
0
]
!
,
.
statesList
[
0
],
)
:
null
:
null
,
...
...
@@ -1185,31 +1185,32 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
.
isNotEmpty
)
{
provider
.
selectedStates
=
value
;
provider
.
selectedStatesId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedStatesValue
=
value
!
.
name
!;
value
.
name
!;
provider
.
crmLeadListDistrictsOnStateAPIFunction
(
context
,
""
,
value
!
.
id
!,
);
context
,
""
,
value
.
id
!,
);
if
(
provider
.
districtsList
.
isNotEmpty
)
{
provider
.
districtsList
provider
.
districtsList
.
clear
();
provider
.
subLocationsList
.
clear
();
provider
.
subLocationsList
.
clear
();
// provider.selectedDistricts = null;
provider
.
selectedDistrictId
=
null
;
provider
.
selectedDistrictValue
=
""
;
provider
.
selectedSubLocationId
=
null
;
provider
.
selectedSubLocationValue
=
""
;
provider
.
selectedSubLocationId
=
null
;
provider
.
selectedSubLocationValue
=
""
;
}
}
}
},
...
...
@@ -1259,17 +1260,16 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
districtsList
.
isNotEmpty
?
provider
.
selectedDistricts
!=
null
?
provider
.
districtsList
!
.
firstWhere
(
(
ord
)
=>
ord
.
id
==
?
provider
.
districtsList
.
firstWhere
(
(
ord
)
=>
ord
.
id
==
provider
.
selectedDistrictId
,
orElse:
()
=>
provider
.
selectedDistrictId
,
orElse:
()
=>
provider
.
districtsList
![
0
]!,
)
.
districtsList
[
0
],
)
:
null
:
null
,
onChanged:
(
Districts
?
value
)
{
...
...
@@ -1280,15 +1280,15 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
selectedDistricts
=
value
;
provider
.
selectedDistrictId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedDistrictValue
=
value
!
.
district
!;
value
.
district
!;
provider
.
crmLeadListSubLocOnDistrictAPIFunction
(
context
,
""
,
value
!
.
id
!,
);
context
,
""
,
value
.
id
!,
);
if
(
provider
.
subLocationsList
.
isNotEmpty
)
{
...
...
@@ -1301,7 +1301,6 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
selectedSubLocationValue
=
""
;
}
}
}
},
...
...
@@ -1348,13 +1347,10 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
// value: provider.selectedSubLocations,
value:
provider
.
subLocationsList
.
isNotEmpty
provider
.
subLocationsList
.
isNotEmpty
?
provider
.
selectedSubLocations
!=
null
?
provider
.
subLocationsList
!
?
provider
.
subLocationsList
.
firstWhere
(
(
ord
)
=>
ord
.
id
==
...
...
@@ -1363,7 +1359,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
orElse:
()
=>
provider
.
subLocationsList
!
[
0
]
!
,
.
subLocationsList
[
0
],
)
:
null
:
null
,
...
...
@@ -1375,9 +1371,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
selectedSubLocations
=
value
;
provider
.
selectedSubLocationId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedSubLocationValue
=
value
!
.
subLocality
!;
value
.
subLocality
!;
}
}
},
...
...
@@ -1407,11 +1403,8 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
Expanded
(
child:
Text
(
'Select Lead Status'
,
style:
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
fontSize:
14
),
overflow:
TextOverflow
.
ellipsis
,
),
),
],
...
...
@@ -1419,9 +1412,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
items:
<
String
>[
'Cold'
,
'Hot'
,
'Warm'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
(
value
,
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
...
...
@@ -1429,8 +1422,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
TextOverflow
.
ellipsis
,
),
),
)
...
...
@@ -1521,7 +1513,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
onTap:
()
{
HapticFeedback
.
selectionClick
();
if
(
provider
.
validateStep3
())
{
if
(
provider
.
productRows
.
isNotEmpty
){
if
(
provider
.
productRows
.
isNotEmpty
)
{
provider
.
crmAddNewLeadsAndProspectsAPIFunction
(
context
,
""
,
...
...
@@ -1537,10 +1529,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
selectedLeadStatus
,
provider
.
getJsonEncodedProducts
(),
);
}
else
{
}
else
{
toast
(
context
,
"Add min. 1 product"
);
}
}
details
.
onStepContinue
;
...
...
lib/screens/crm/addProspectLeads.dart
View file @
7210793a
...
...
@@ -114,13 +114,14 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
items:
editProvider
.
employeeList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
LeadEmployees
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
),
),
),
(
slist
)
=>
DropdownMenuItem
<
LeadEmployees
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
),
),
),
)
.
toList
(),
value:
...
...
@@ -135,9 +136,9 @@ class _AddProspectLeadsState extends State<AddProspectLeads> {
if
(
value
!=
null
)
{
if
(
editProvider
.
employeeList
.
isNotEmpty
)
{
editProvider
.
selectedEmployee
=
value
;
editProvider
.
selectedEmployeeId
=
value
!
.
id
!;
editProvider
.
selectedEmployeeId
=
value
.
id
!;
editProvider
.
selectedEmployeeValue
=
value
!
.
name
!;
value
.
name
!;
}
}
},
...
...
lib/screens/crm/appointmentCalendar.dart
View file @
7210793a
...
...
@@ -261,7 +261,7 @@ class _AppointmentcalendarState extends State<Appointmentcalendar> {
children:
[
Expanded
(
flex:
1
,
child:
Container
(
child:
SizedBox
(
height:
50
,
width:
35
,
child:
SvgPicture
.
asset
(
...
...
@@ -341,9 +341,7 @@ class _AppointmentcalendarState extends State<Appointmentcalendar> {
decoration:
BoxDecoration
(
color:
AppColors
.
scaffold_bg_color
,
),
child:
Center
(
child:
Text
(
"No Data Available"
),
),
child:
Center
(
child:
Text
(
"No Data Available"
)),
),
),
],
...
...
@@ -459,7 +457,7 @@ class _AppointmentcalendarState extends State<Appointmentcalendar> {
),
),
const
SizedBox
(
height:
8
),
Container
(
SizedBox
(
height:
70
,
// Increased height to accommodate weekday text
child:
ListView
.
builder
(
controller:
scrollController
,
...
...
lib/screens/crm/crmDashboard.dart
View file @
7210793a
...
...
@@ -192,7 +192,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
physics:
AlwaysScrollableScrollPhysics
(),
child:
Column
(
children:
[
if
(
provider
.
allLeads
.
length
>
0
)
...[
if
(
provider
.
allLeads
.
isNotEmpty
)
...[
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
margin:
EdgeInsets
.
only
(
bottom:
10
),
...
...
@@ -274,7 +274,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
MaterialPageRoute
(
builder:
(
context
)
=>
Leadlistbymode
(
pageTitleName:
"
${
leadTitles[jndex]
}
"
,
pageTitleName:
leadTitles
[
jndex
],
mode:
provider
.
allLeads
[
jndex
]
...
...
@@ -527,8 +527,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
builder:
(
context
)
=>
Leadlistbymode
(
mode:
"executive"
,
pageTitleName:
"Lead List"
,
pageTitleName:
"Lead List"
,
),
),
);
...
...
@@ -948,7 +947,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
),
],
if
(
provider
.
pendingTasksLists
.
length
>
0
)
...[
if
(
provider
.
pendingTasksLists
.
isNotEmpty
)
...[
Align
(
alignment:
Alignment
.
centerLeft
,
child:
Padding
(
...
...
@@ -1003,7 +1002,7 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
),
),
),
Container
(
SizedBox
(
width:
double
.
infinity
,
child:
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
...
...
lib/screens/crm/editAccountDetails.dart
View file @
7210793a
...
...
@@ -17,14 +17,19 @@ class EditAccountDetails extends StatefulWidget {
final
accountID
;
final
companyName
;
const
EditAccountDetails
({
super
.
key
,
required
this
.
leadID
,
required
this
.
mode
,
required
this
.
accountID
,
required
this
.
companyName
});
const
EditAccountDetails
({
super
.
key
,
required
this
.
leadID
,
required
this
.
mode
,
required
this
.
accountID
,
required
this
.
companyName
,
});
@override
State
<
EditAccountDetails
>
createState
()
=>
_EditAccountDetailsState
();
}
class
_EditAccountDetailsState
extends
State
<
EditAccountDetails
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
@override
void
initState
()
{
...
...
@@ -36,7 +41,11 @@ class _EditAccountDetailsState extends State<EditAccountDetails> {
listen:
false
,
);
provider
.
editCompanyNameController
.
text
=
widget
.
companyName
!;
provider
.
crmLeadDetailsEditAccountAPIFunction
(
context
,
widget
.
leadID
,
widget
.
mode
);
provider
.
crmLeadDetailsEditAccountAPIFunction
(
context
,
widget
.
leadID
,
widget
.
mode
,
);
});
}
...
...
@@ -48,25 +57,23 @@ class _EditAccountDetailsState extends State<EditAccountDetails> {
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
Platform
.
isIOS
?
false
:
true
,
bottom:
Platform
.
isIOS
?
false
:
true
,
child:
Scaffold
(
resizeToAvoidBottomInset:
true
,
appBar:
appbar
(
context
,
"Edit Account"
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
12.0
),
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
textControllerWidget
(
context
,
provider
.
editCompanyNameController
,
...
...
@@ -90,30 +97,31 @@ class _EditAccountDetailsState extends State<EditAccountDetails> {
style:
TextStyle
(
fontSize:
14
),
),
items:
provider
.
teamsList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
Teams
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
provider
.
teamsList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
Teams
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
),
),
),
),
),
)
.
toList
(),
)
.
toList
(),
value:
provider
.
selectedTeams
,
onChanged:
(
Teams
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
teamsList
.
isNotEmpty
){
if
(
provider
.
teamsList
.
isNotEmpty
)
{
provider
.
selectedTeams
=
value
;
provider
.
selectedTeamId
=
value
!.
id
!;
provider
.
selectedTeamValue
=
value
!.
name
!;
provider
.
crmLeadListSegmentOnTeamAPIFunction
(
context
,
widget
.
mode
,
provider
.
selectedTeamId
);
provider
.
selectedTeamId
=
value
.
id
!;
provider
.
selectedTeamValue
=
value
.
name
!;
provider
.
crmLeadListSegmentOnTeamAPIFunction
(
context
,
widget
.
mode
,
provider
.
selectedTeamId
,
);
}
}
},
isExpanded:
true
,
...
...
@@ -138,29 +146,26 @@ class _EditAccountDetailsState extends State<EditAccountDetails> {
style:
TextStyle
(
fontSize:
14
),
),
items:
provider
.
segmentsList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
Segments
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
,
provider
.
segmentsList
.
map
(
(
slist
)
=>
DropdownMenuItem
<
Segments
>(
value:
slist
,
child:
Text
(
slist
.
name
!,
style:
TextStyle
(
fontSize:
14
),
),
),
),
),
)
.
toList
(),
)
.
toList
(),
value:
provider
.
selectedSegments
,
onChanged:
(
Segments
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
segmentsList
.
isNotEmpty
){
if
(
provider
.
segmentsList
.
isNotEmpty
)
{
provider
.
selectedSegments
=
value
;
provider
.
selectedSegmentId
=
value
!.
id
!;
provider
.
selectedSegmentValue
=
value
!.
name
!;
provider
.
selectedSegmentId
=
value
.
id
!;
provider
.
selectedSegmentValue
=
value
.
name
!;
}
}
},
isExpanded:
true
,
...
...
@@ -173,12 +178,21 @@ class _EditAccountDetailsState extends State<EditAccountDetails> {
],
),
),
SizedBox
(
height:
25
,
),
SizedBox
(
height:
25
),
InkWell
(
onTap:
provider
.
isLoading
?
null
:(){
provider
.
isLoading
=
true
;
provider
.
crmLeadDetailsEditAccountSubmitAPIFunction
(
context
,
widget
.
accountID
,
provider
.
selectedSegmentId
,
provider
.
selectedTeamId
);
},
onTap:
provider
.
isLoading
?
null
:
()
{
provider
.
isLoading
=
true
;
provider
.
crmLeadDetailsEditAccountSubmitAPIFunction
(
context
,
widget
.
accountID
,
provider
.
selectedSegmentId
,
provider
.
selectedTeamId
,
);
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
45
,
...
...
@@ -193,11 +207,18 @@ class _EditAccountDetailsState extends State<EditAccountDetails> {
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
child:
Center
(
child:
provider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
),):
Text
(
"Submit"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
),
),
child:
provider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
,
),
)
:
Text
(
"Submit"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
),
...
...
@@ -205,13 +226,10 @@ class _EditAccountDetailsState extends State<EditAccountDetails> {
),
),
),
),
),
);
},
);
}
}
lib/screens/crm/followUpListonType.dart
View file @
7210793a
...
...
@@ -16,7 +16,7 @@ import 'followUpUpdateScreen.dart';
class
Followuplistontype
extends
StatefulWidget
{
final
type
;
const
Followuplistontype
({
super
.
key
,
required
this
.
type
});
const
Followuplistontype
({
super
.
key
,
required
this
.
type
});
@override
State
<
Followuplistontype
>
createState
()
=>
_FollowuplistontypeState
();
...
...
@@ -62,22 +62,22 @@ class _FollowuplistontypeState extends State<Followuplistontype> {
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Crmdashboardprovider
>(
builder:
(
context
,
provider
,
child
)
{
var
followUps
=
provider
.
dashboardFollowUps
;
var
followUps
=
provider
.
dashboardFollowUps
;
return
Scaffold
(
resizeToAvoidBottomInset:
true
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
...
...
@@ -114,162 +114,186 @@ class _FollowuplistontypeState extends State<Followuplistontype> {
),
),
body:
(
followUps
.
isNotEmpty
)
?
SingleChildScrollView
(
physics:
AlwaysScrollableScrollPhysics
(),
child:
Column
(
children:
[
Container
(
width:
double
.
infinity
,
child:
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
10
,
),
itemCount:
followUps
.
length
,
itemBuilder:
(
context
,
index
)
{
final
subHeadings
=
[
followUps
[
index
].
aname
??
"-"
,
followUps
[
index
].
appdate
??
"-"
,
followUps
[
index
].
anote
??
"-"
,
];
return
InkResponse
(
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Followupupdatescreen
(
leadID:
followUps
[
index
]
.
leadid
,
mode:
""
,
),
settings:
RouteSettings
(
name:
'Followupupdatescreen'
,
),
(
followUps
.
isNotEmpty
)
?
SingleChildScrollView
(
physics:
AlwaysScrollableScrollPhysics
(),
child:
Column
(
children:
[
SizedBox
(
width:
double
.
infinity
,
child:
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
10
,
),
);
if
(
routeSettingName
==
"Followupupdatescreen"
){
provider
.
crmDashboardFollowUpAPIFunction
(
context
,
widget
.
type
);
}
},
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
3
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
horizontal:
0
,
),
child:
Column
(
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
"
${followUps[index].aname}
"
,
maxLines:
1
,
overflow:
TextOverflow
.
visible
,
style:
TextStyle
(
decoration:
TextDecoration
.
underline
,
height:
1
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
),
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
itemCount:
followUps
.
length
,
itemBuilder:
(
context
,
index
)
{
final
subHeadings
=
[
followUps
[
index
].
aname
??
"-"
,
followUps
[
index
].
appdate
??
"-"
,
followUps
[
index
].
anote
??
"-"
,
];
return
InkResponse
(
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Followupupdatescreen
(
leadID:
followUps
[
index
].
leadid
,
mode:
""
,
),
settings:
RouteSettings
(
name:
'Followupupdatescreen'
,
),
),
);
if
(
routeSettingName
==
"Followupupdatescreen"
)
{
provider
.
crmDashboardFollowUpAPIFunction
(
context
,
widget
.
type
,
);
}
},
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
3
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
horizontal:
0
,
),
Expanded
(
child:
Text
(
"
${followUps[index].appdate}
"
,
textAlign:
TextAlign
.
right
,
maxLines:
1
,
style:
TextStyle
(
color:
AppColors
.
grey_semi
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
child:
Column
(
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
"
${followUps[index].aname}
"
,
maxLines:
1
,
overflow:
TextOverflow
.
visible
,
style:
TextStyle
(
decoration:
TextDecoration
.
underline
,
height:
1
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
,
),
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
Expanded
(
child:
Text
(
"
${followUps[index].appdate}
"
,
textAlign:
TextAlign
.
right
,
maxLines:
1
,
style:
TextStyle
(
color:
AppColors
.
grey_semi
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
],
),
),
),
],
),
SizedBox
(
height:
10
,),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
16
),
gradient:
LinearGradient
(
colors:
[
Color
(
0xFFFFFFFF
),
Color
(
0xFFE8F7FF
)
])
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
"Remarks"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
SizedBox
(
height:
10
),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
,
),
),
),
Expanded
(
child:
Text
(
"
${followUps[index].anote}
"
,
textAlign:
TextAlign
.
right
,
maxLines:
1
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
16
),
gradient:
LinearGradient
(
colors:
[
Color
(
0xFFFFFFFF
),
Color
(
0xFFE8F7FF
),
],
),
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
"Remarks"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
Expanded
(
child:
Text
(
"
${followUps[index].anote}
"
,
textAlign:
TextAlign
.
right
,
maxLines:
1
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
],
),
),
)
,
]
,
]
,
)
,
),
)
,
]
,
]
,
)
,
),
)
,
]
,
)
;
}
,
),
),
);
},
),
),
SizedBox
(
height:
150
),
],
),
)
:
Emptywidget
(
context
),
SizedBox
(
height:
150
),
],
),
)
:
Emptywidget
(
context
),
);
},
);
...
...
lib/screens/crm/followUpUpdateScreen.dart
View file @
7210793a
...
...
@@ -15,7 +15,12 @@ class Followupupdatescreen extends StatefulWidget {
final
leadID
;
final
mode
;
final
from
;
const
Followupupdatescreen
({
super
.
key
,
required
this
.
leadID
,
this
.
mode
,
this
.
from
});
const
Followupupdatescreen
({
super
.
key
,
required
this
.
leadID
,
this
.
mode
,
this
.
from
,
});
@override
State
<
Followupupdatescreen
>
createState
()
=>
_FollowupupdatescreenState
();
...
...
@@ -26,7 +31,6 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
void
initState
()
{
super
.
initState
();
...
...
@@ -35,7 +39,10 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
setState
(()
=>
_source
=
event
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
followUpUpdateProvider
>(
context
,
listen:
false
);
final
provider
=
Provider
.
of
<
followUpUpdateProvider
>(
context
,
listen:
false
,
);
provider
.
getCurrentLocation
(
context
);
});
}
...
...
@@ -62,15 +69,15 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
...
...
@@ -116,7 +123,7 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
child:
Column
(
children:
[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
,
top:
10
),
padding:
EdgeInsets
.
only
(
left:
10
,
top:
10
),
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Follow up Details"
,
...
...
@@ -154,10 +161,7 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
child:
Row
(
children:
[
Text
(
provider
.
selectedTime
.
hour
.
toString
()
+
":"
+
provider
.
selectedTime
.
minute
.
toString
()
??
"
${provider.selectedTime.hour}
:
${provider.selectedTime.minute}
"
??
"Enter in Time"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontWeight:
FontWeight
.
w400
),
...
...
@@ -186,21 +190,20 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
items:
<
String
>[
'Phone'
,
'Visit'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
<
String
>[
'Phone'
,
'Visit'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
)
.
toList
(),
value:
provider
.
selectedFollowupType
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
...
...
@@ -216,8 +219,8 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
),
if
(
provider
.
followupError
!=
null
)...[
errorWidget
(
context
,
provider
.
followupError
)
if
(
provider
.
followupError
!=
null
)
...[
errorWidget
(
context
,
provider
.
followupError
)
,
],
textControllerWidget
(
context
,
...
...
@@ -229,8 +232,8 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
false
,
null
,
),
if
(
provider
.
followupFeedbackError
!=
null
)...[
errorWidget
(
context
,
provider
.
followupFeedbackError
)
if
(
provider
.
followupFeedbackError
!=
null
)
...[
errorWidget
(
context
,
provider
.
followupFeedbackError
)
,
],
TextWidget
(
context
,
"Lead Status"
),
DropdownButtonHideUnderline
(
...
...
@@ -251,21 +254,20 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
items:
<
String
>[
'All'
,
'Cold'
,
'Hot'
,
'Warm'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
<
String
>[
'All'
,
'Cold'
,
'Hot'
,
'Warm'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
)
.
toList
(),
value:
provider
.
selectedLeadStatus
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
...
...
@@ -281,8 +283,8 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
),
if
(
provider
.
leadStatusError
!=
null
)...[
errorWidget
(
context
,
provider
.
leadStatusError
)
if
(
provider
.
leadStatusError
!=
null
)
...[
errorWidget
(
context
,
provider
.
leadStatusError
)
,
],
TextWidget
(
context
,
...
...
@@ -306,24 +308,23 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
items:
<
String
>[
'Next Appointment'
,
'Update Order Status'
,
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
<
String
>[
'Next Appointment'
,
'Update Order Status'
,
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
)
.
toList
(),
value:
provider
.
nextAppointmentStatus
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
...
...
@@ -339,9 +340,9 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
),
if
(
provider
.
appStatusError
!=
null
)...[
errorWidget
(
context
,
provider
.
appStatusError
)
]
if
(
provider
.
appStatusError
!=
null
)
...[
errorWidget
(
context
,
provider
.
appStatusError
)
,
]
,
],
),
),
...
...
@@ -389,25 +390,24 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
items:
<
String
>[
// 'Order Gain',
'Order Lost'
,
'No Requirement'
,
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
<
String
>[
// 'Order Gain',
'Order Lost'
,
'No Requirement'
,
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
)
.
toList
(),
value:
provider
.
selectOrderStatus
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
...
...
@@ -423,301 +423,296 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
],
),
),
if
(
provider
.
orderStatusError
!=
null
)...[
errorWidget
(
context
,
provider
.
orderStatusError
)
if
(
provider
.
orderStatusError
!=
null
)
...[
errorWidget
(
context
,
provider
.
orderStatusError
)
,
],
if
(
provider
.
selectOrderStatus
==
"Order Gain"
)
...[]
else
...[
if
(
provider
.
selectOrderStatus
==
"Order Lost"
)
...[
TextWidget
(
context
,
"Select Competitor"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Competitor'
,
style:
TextStyle
(
fontSize:
14
),
overflow:
TextOverflow
.
ellipsis
,
),
else
...[
if
(
provider
.
selectOrderStatus
==
"Order Lost"
)
...[
TextWidget
(
context
,
"Select Competitor"
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Competitor'
,
style:
TextStyle
(
fontSize:
14
),
overflow:
TextOverflow
.
ellipsis
,
),
],
),
items:
<
String
>[
"Mahindra"
,
"Kirloskar"
,
"Cummins"
,
"Ashok Leyland"
,
"Escorts"
,
"Eicher"
,
"Eicher Volovo"
,
"Ecogen"
,
"Crompton Greaves"
,
"Caterpillar"
,
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
value:
provider
.
selectedCompetitor
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
provider
.
selectedCompetitor
=
newValue
!;
});
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
],
),
items:
<
String
>[
"Mahindra"
,
"Kirloskar"
,
"Cummins"
,
"Ashok Leyland"
,
"Escorts"
,
"Eicher"
,
"Eicher Volovo"
,
"Ecogen"
,
"Crompton Greaves"
,
"Caterpillar"
,
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
value:
provider
.
selectedCompetitor
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
provider
.
selectedCompetitor
=
newValue
!;
});
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
]
,
)
,
)
,
]
,
),
if
(
provider
.
competitorError
!=
null
)...[
errorWidget
(
context
,
provider
.
competitorError
)
]
]
else
if
(
provider
.
selectOrderStatus
==
"No Requirement"
)
...[],
textControllerWidget
(
context
,
provider
.
reasonController
,
"Reason"
,
"Reason (Description)"
,
provider
.
onReasonChanged
,
TextInputType
.
text
,
false
,
null
,
),
if
(
provider
.
reasonError
!=
null
)...[
errorWidget
(
context
,
provider
.
reasonError
)
]
if
(
provider
.
competitorError
!=
null
)
...[
errorWidget
(
context
,
provider
.
competitorError
),
],
]
else
if
(
provider
.
selectOrderStatus
==
"No Requirement"
)
...[],
textControllerWidget
(
context
,
provider
.
reasonController
,
"Reason"
,
"Reason (Description)"
,
provider
.
onReasonChanged
,
TextInputType
.
text
,
false
,
null
,
),
if
(
provider
.
reasonError
!=
null
)
...[
errorWidget
(
context
,
provider
.
reasonError
),
],
],
],
),
),
SizedBox
(
height:
25
),
]
else
if
(
provider
.
nextAppointmentStatus
==
"Next Appointment"
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
),
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Next Appointment"
,
style:
TextStyle
(
color:
AppColors
.
grey_thick
,
fontSize:
16
,
),
]
else
if
(
provider
.
nextAppointmentStatus
==
"Next Appointment"
)
...[
Container
(
padding:
EdgeInsets
.
only
(
left:
10
),
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Next Appointment"
,
style:
TextStyle
(
color:
AppColors
.
grey_thick
,
fontSize:
16
,
),
),
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
TextWidget
(
context
,
"Next Appointment Date"
),
GestureDetector
(
onTap:
()
{
provider
.
showDatePickerDialog
(
context
);
},
child:
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
TextWidget
(
context
,
"Next Appointment Date"
),
GestureDetector
(
onTap:
()
{
provider
.
showDatePickerDialog
(
context
);
},
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
,
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
,
),
child:
TextFormField
(
controller:
provider
.
nextAppointmentDateController
,
keyboardType:
TextInputType
.
text
,
enabled:
false
,
maxLines:
1
,
readOnly:
true
,
onChanged:
(
value
)
{},
decoration:
InputDecoration
(
hintText:
"Enter Date"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
,
),
enabledBorder:
InputBorder
.
none
,
disabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
child:
TextFormField
(
controller:
provider
.
nextAppointmentDateController
,
keyboardType:
TextInputType
.
text
,
enabled:
false
,
maxLines:
1
,
readOnly:
true
,
onChanged:
(
value
)
{},
decoration:
InputDecoration
(
hintText:
"Enter Date"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
,
),
enabledBorder:
InputBorder
.
none
,
disabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
),
),
),
if
(
provider
.
nextAppDateError
!=
null
)...[
errorWidget
(
context
,
provider
.
nextAppDateError
)
]
,
TextWidget
(
context
,
"Appointment Type"
)
,
DropdownButtonHideUnderline
(
child:
Row
(
child
ren:
[
Expanded
(
child:
DropdownButton2
<
String
>
(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Appointment Type'
,
style:
TextStyle
(
fontSize:
14
)
,
overflow:
TextOverflow
.
ellipsis
,
)
,
),
if
(
provider
.
nextAppDateError
!=
null
)
...[
errorWidget
(
context
,
provider
.
nextAppDateError
)
,
]
,
TextWidget
(
context
,
"Appointment Type"
),
DropdownButtonHideUnderline
(
child
:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Appointment Type'
,
style:
TextStyle
(
fontSize:
14
)
,
overflow:
TextOverflow
.
ellipsis
,
),
],
),
items:
<
String
>[
'Phone'
,
'Visit'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
],
),
items:
<
String
>[
'Phone'
,
'Visit'
]
.
map
(
(
value
)
=>
DropdownMenuItem
<
String
>(
value:
value
,
child:
Text
(
value
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
value:
provider
.
selectNextAppointmentType
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
provider
.
selectNextAppointmentType
=
newValue
!;
});
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
)
.
toList
(),
value:
provider
.
selectNextAppointmentType
,
onChanged:
(
String
?
newValue
)
{
setState
(()
{
provider
.
selectNextAppointmentType
=
newValue
!;
});
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
]
,
)
,
)
,
]
,
),
if
(
provider
.
nextAppType
!=
null
)...[
errorWidget
(
context
,
provider
.
nextAppType
)
],
),
if
(
provider
.
nextAppType
!=
null
)
...[
errorWidget
(
context
,
provider
.
nextAppType
),
],
if
(
provider
.
selectNextAppointmentType
==
"Visit"
)
...[
CheckboxListTile
(
activeColor:
AppColors
.
app_blue
,
checkboxShape:
CircleBorder
(),
controlAffinity:
ListTileControlAffinity
.
leading
,
value:
provider
.
checked
,
contentPadding:
EdgeInsets
.
symmetric
(
horizontal:
0
),
title:
Text
(
"Send SMS reminder to Customer"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaRegular"
,
),
if
(
provider
.
selectNextAppointmentType
==
"Visit"
)
...[
CheckboxListTile
(
activeColor:
AppColors
.
app_blue
,
checkboxShape:
CircleBorder
(),
controlAffinity:
ListTileControlAffinity
.
leading
,
value:
provider
.
checked
,
contentPadding:
EdgeInsets
.
symmetric
(
horizontal:
0
),
title:
Text
(
"Send SMS reminder to Customer"
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaRegular"
,
),
onChanged:
(
value
)
{
provider
.
checked
=
!
provider
.
checked
;
if
(
value
==
true
)
{
provider
.
smsSent
=
"1"
;
}
else
{
provider
.
smsSent
=
"0"
;
}
print
(
provider
.
smsSent
+
provider
.
checked
.
toString
());
},
),
],
textControllerWidget
(
context
,
provider
.
noteController
,
"Note"
,
"Write Note"
,
provider
.
onNoteChanged
,
TextInputType
.
text
,
false
,
null
,
onChanged:
(
value
)
{
provider
.
checked
=
!
provider
.
checked
;
if
(
value
==
true
)
{
provider
.
smsSent
=
"1"
;
}
else
{
provider
.
smsSent
=
"0"
;
}
print
(
provider
.
smsSent
+
provider
.
checked
.
toString
(),
);
},
),
if
(
provider
.
noteError
!=
null
)...[
errorWidget
(
context
,
provider
.
noteError
)
],
],
),
textControllerWidget
(
context
,
provider
.
noteController
,
"Note"
,
"Write Note"
,
provider
.
onNoteChanged
,
TextInputType
.
text
,
false
,
null
,
),
if
(
provider
.
noteError
!=
null
)
...[
errorWidget
(
context
,
provider
.
noteError
),
],
],
),
SizedBox
(
height:
25
),
],
),
SizedBox
(
height:
25
),
],
SizedBox
(
height:
150
),
],
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
FloatingActionButtonLocation
.
centerFloat
,
floatingActionButton:
InkResponse
(
onTap:
provider
.
submitLoading
?
null
:
()
{
provider
.
submitLoading
=
true
;
provider
.
crmAddFollowUpAPIFunction
(
context
,
widget
.
from
,
provider
.
nextAppointmentStatus
,
provider
.
selectOrderStatus
,
widget
.
leadID
,
provider
.
selectedFollowupType
,
provider
.
selectedCompetitor
,
provider
.
selectedLeadStatus
,
provider
.
selectNextAppointmentType
,
provider
.
smsSent
,
widget
.
mode
);
},
onTap:
provider
.
submitLoading
?
null
:
()
{
provider
.
submitLoading
=
true
;
provider
.
crmAddFollowUpAPIFunction
(
context
,
widget
.
from
,
provider
.
nextAppointmentStatus
,
provider
.
selectOrderStatus
,
widget
.
leadID
,
provider
.
selectedFollowupType
,
provider
.
selectedCompetitor
,
provider
.
selectedLeadStatus
,
provider
.
selectNextAppointmentType
,
provider
.
smsSent
,
widget
.
mode
,
);
},
child:
Container
(
height:
45
,
alignment:
Alignment
.
center
,
...
...
@@ -727,16 +722,19 @@ class _FollowupupdatescreenState extends State<Followupupdatescreen> {
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
child:
provider
.
submitLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
),
):
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
child:
provider
.
submitLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
),
)
:
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
),
),
);
...
...
lib/screens/crm/generateQuotationAddEditProduct.dart
View file @
7210793a
...
...
@@ -61,11 +61,11 @@ class _GeneratequotationaddeditproductState
if
(
widget
.
type
==
"add"
)
{
// Initialize controllers and dropdowns after API call
provider
.
addEditInitializeForm
(
context
);
}
else
if
(
widget
.
type
==
"edit"
){
}
else
if
(
widget
.
type
==
"edit"
)
{
print
(
widget
.
index
);
print
(
widget
.
product
);
provider
.
preFillFormForEdit
(
widget
.
product
,
widget
.
index
);
provider
.
preFillFormForEdit
(
widget
.
product
,
widget
.
index
);
}
});
}
...
...
@@ -147,9 +147,7 @@ class _GeneratequotationaddeditproductState
items:
provider
.
productsList
.
map
(
(
ord
,
)
=>
DropdownMenuItem
<
Products
>(
(
ord
)
=>
DropdownMenuItem
<
Products
>(
value:
ord
,
child:
Text
(
"
${ord.name}
"
,
...
...
@@ -161,6 +159,7 @@ class _GeneratequotationaddeditproductState
),
)
.
toList
(),
// provider.selectedOrderIds[index] != null?
// provider
// .orderList
...
...
@@ -171,25 +170,27 @@ class _GeneratequotationaddeditproductState
// provider
// .selectedOrderIds[index],
// )
value:
provider
.
selectedProducts
!=
null
?
provider
.
productsList
.
firstWhere
(
(
element
)
=>
element
.
id
==
provider
.
selectedAddEditProductId
,
provider
.
selectedAddEditProductId
,
)
:
null
,
onChanged:
(
Products
?
value
)
{
if
(
value
!=
null
)
{
provider
.
selectedProducts
=
value
;
provider
.
selectedAddEditProductId
=
value
!
.
id
!;
value
.
id
!;
provider
.
selectedAddEditProductName
=
value
.
name
;
print
(
value
.
id
.
toString
());
provider
.
crmSelectedProductDetailsApiFunction
(
context
,
value
.
id
.
toString
());
provider
.
crmSelectedProductDetailsApiFunction
(
context
,
value
.
id
.
toString
(),
);
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
...
...
@@ -261,10 +262,9 @@ class _GeneratequotationaddeditproductState
floatingActionButton:
InkWell
(
onTap:
()
{
if
(
provider
.
selectedProducts
!=
null
)
{
var
newProduct
;
LeadProducts
newProduct
;
if
(
widget
.
type
==
"add"
)
{
newProduct
=
LeadProducts
(
productId:
provider
.
selectedAddEditProductId
,
productName:
provider
.
selectedAddEditProductName
,
price:
provider
.
addEditProductPriceController
.
text
,
...
...
@@ -280,7 +280,7 @@ class _GeneratequotationaddeditproductState
"net_price"
:
provider
.
addEditTotalAmountController
.
text
,
});
Navigator
.
pop
(
context
,
newProduct
);
}
else
if
(
widget
.
type
==
"edit"
){
}
else
if
(
widget
.
type
==
"edit"
)
{
final
updatedProduct
=
LeadProducts
(
productId:
provider
.
selectedAddEditProductId
,
productName:
provider
.
selectedAddEditProductName
,
...
...
lib/screens/crm/generateQuotationScreen.dart
View file @
7210793a
...
...
@@ -176,7 +176,7 @@ class _GeneratequotationscreenState extends State<Generatequotationscreen> {
),
);
if
(
res
!=
null
)
{
print
(
"result
$
{
res
}
"
);
print
(
"result
$res
"
);
// provider
// .crmLeadDetailsGenerateQuoteViewAPIFunction(
...
...
@@ -245,7 +245,7 @@ class _GeneratequotationscreenState extends State<Generatequotationscreen> {
),
);
if
(
res
!=
null
)
{
print
(
"result
$
{
res
}
"
);
print
(
"result
$res
"
);
}
},
child:
Container
(
...
...
lib/screens/crm/generatedQuotesList.dart
View file @
7210793a
...
...
@@ -14,7 +14,6 @@ import 'package:provider/provider.dart';
import
'LeadDetailsByMode.dart'
;
class
Generatedquoteslist
extends
StatefulWidget
{
const
Generatedquoteslist
({
super
.
key
});
@override
...
...
@@ -46,9 +45,8 @@ class _GeneratedquoteslistState extends State<Generatedquoteslist> {
_connectivity
.
disposeStream
();
}
getDecorationColor
(
value
){
switch
(
value
){
getDecorationColor
(
value
)
{
switch
(
value
)
{
case
"Hot"
:
return
AppColors
.
processed_bg_color
;
case
"Warm"
:
...
...
@@ -60,8 +58,8 @@ class _GeneratedquoteslistState extends State<Generatedquoteslist> {
}
}
getTextColor
(
value
){
switch
(
value
){
getTextColor
(
value
)
{
switch
(
value
)
{
case
"Hot"
:
return
AppColors
.
processed_text_color
;
case
"Warm"
:
...
...
@@ -73,7 +71,6 @@ class _GeneratedquoteslistState extends State<Generatedquoteslist> {
}
}
@override
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
...
...
@@ -89,15 +86,15 @@ class _GeneratedquoteslistState extends State<Generatedquoteslist> {
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
...
...
@@ -141,103 +138,113 @@ class _GeneratedquoteslistState extends State<Generatedquoteslist> {
),
),
body:
(
quotess
.
isNotEmpty
)
?
SingleChildScrollView
(
physics:
AlwaysScrollableScrollPhysics
(),
child:
Column
(
children:
[
Container
(
width:
double
.
infinity
,
child:
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
10
,
),
itemCount:
quotess
.
length
,
itemBuilder:
(
context
,
index
)
{
return
InkResponse
(
onTap:
()
async
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
LeadDetailsByMode
(
pageTitleName:
"Lead Details"
,
mode:
""
,
leadId:
quotess
[
index
].
leadid
,
),
(
quotess
.
isNotEmpty
)
?
SingleChildScrollView
(
physics:
AlwaysScrollableScrollPhysics
(),
child:
Column
(
children:
[
SizedBox
(
width:
double
.
infinity
,
child:
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
shrinkWrap:
true
,
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
horizontal:
10
,
),
);
},
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
3
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
child:
Row
(
children:
[
SvgPicture
.
asset
(
"assets/svg/finance/fin_payments_ic.svg"
,),
SizedBox
(
width:
10
,),
Expanded
(
flex:
4
,
child:
Text
(
"
${quotess[index].aname}
"
,
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
decoration:
TextDecoration
.
underline
,
height:
1.5
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
),
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
SizedBox
(
width:
10
,),
Expanded
(
flex:
2
,
itemCount:
quotess
.
length
,
itemBuilder:
(
context
,
index
)
{
return
InkResponse
(
onTap:
()
async
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
LeadDetailsByMode
(
pageTitleName:
"Lead Details"
,
mode:
""
,
leadId:
quotess
[
index
].
leadid
,
),
),
);
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
)
,
color:
getDecorationColor
(
quotess
[
index
].
lstatus
)
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
15
),
),
child:
Text
(
"
${quotess[index].lstatus}
"
,
textAlign:
TextAlign
.
center
,
maxLines:
1
,
style:
TextStyle
(
color:
getTextColor
(
quotess
[
index
].
lstatus
),
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
margin:
EdgeInsets
.
symmetric
(
vertical:
3
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
child:
Row
(
children:
[
SvgPicture
.
asset
(
"assets/svg/finance/fin_payments_ic.svg"
,
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
Text
(
"
${quotess[index].aname}
"
,
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
decoration:
TextDecoration
.
underline
,
height:
1.5
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
),
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
2
,
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
color:
getDecorationColor
(
quotess
[
index
].
lstatus
,
),
),
child:
Text
(
"
${quotess[index].lstatus}
"
,
textAlign:
TextAlign
.
center
,
maxLines:
1
,
style:
TextStyle
(
color:
getTextColor
(
quotess
[
index
].
lstatus
,
),
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
),
],
),
),
)
,
]
,
)
;
}
,
),
),
);
},
),
),
SizedBox
(
height:
150
),
],
),
)
:
Emptywidget
(
context
),
SizedBox
(
height:
150
),
],
),
)
:
Emptywidget
(
context
),
);
},
);
...
...
lib/screens/crm/pendingTasksDetails.dart
View file @
7210793a
...
...
@@ -176,21 +176,26 @@ class _PendingtasksdetailsState extends State<Pendingtasksdetails> {
children:
[
Expanded
(
child:
Text
(
"
${
subHeadings[j]
}
"
,
subHeadings
[
j
],
style:
TextStyle
(
decoration:
j
==
0
?
TextDecoration
.
underline
:
TextDecoration
.
none
,
height:
j
==
0
?
1
:
1.5
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
),
decoration:
j
==
0
?
TextDecoration
.
underline
:
TextDecoration
.
none
,
height:
j
==
0
?
1
:
1.5
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
,
),
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
j
==
0
?
AppColors
.
semi_black
:
AppColors
.
grey_semi
,
),
),
),
...
...
@@ -233,7 +238,7 @@ class _PendingtasksdetailsState extends State<Pendingtasksdetails> {
children:
[
Expanded
(
child:
Text
(
"
${
belowHeads[i]
}
"
,
belowHeads
[
i
],
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
14
,
...
...
@@ -242,24 +247,39 @@ class _PendingtasksdetailsState extends State<Pendingtasksdetails> {
),
Expanded
(
child:
InkResponse
(
onTap:
belowHeads
[
i
]==
"Mobile Number"
?(){
HapticFeedback
.
selectionClick
();
launch
(
'tel://
${belowSubHeads[i]}
'
,
);
}:
null
,
onTap:
belowHeads
[
i
]
==
"Mobile Number"
?
()
{
HapticFeedback
.
selectionClick
();
launch
(
'tel://
${belowSubHeads[i]}
'
,
);
}
:
null
,
child:
Padding
(
padding:
const
EdgeInsets
.
all
(
4.0
),
padding:
const
EdgeInsets
.
all
(
4.0
,
),
child:
Text
(
"
${
belowSubHeads[i]
}
"
,
belowSubHeads
[
i
],
style:
TextStyle
(
decoration:
belowHeads
[
i
]==
"Mobile Number"
?
TextDecoration
.
underline
:
TextDecoration
.
none
,
decoration:
belowHeads
[
i
]
==
"Mobile Number"
?
TextDecoration
.
underline
:
TextDecoration
.
none
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
),
color:
AppColors
.
grey_semi
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
,
),
color:
AppColors
.
grey_semi
,
fontSize:
14
,
),
),
...
...
@@ -289,10 +309,13 @@ class _PendingtasksdetailsState extends State<Pendingtasksdetails> {
HapticFeedback
.
selectionClick
();
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Followupupdatescreen
(
leadID:
task
.
leadid
,
from:
"Pending Tasks"
)),
MaterialPageRoute
(
builder:
(
context
)
=>
Followupupdatescreen
(
leadID:
task
.
leadid
,
from:
"Pending Tasks"
,
),
),
);
},
child:
Container
(
...
...
lib/screens/crm/pendingTasksList.dart
View file @
7210793a
...
...
@@ -122,7 +122,7 @@ class _PendingTasksListState extends State<PendingTasksList> {
physics:
AlwaysScrollableScrollPhysics
(),
child:
Column
(
children:
[
Container
(
SizedBox
(
width:
double
.
infinity
,
child:
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
...
...
@@ -149,7 +149,9 @@ class _PendingTasksListState extends State<PendingTasksList> {
(
context
)
=>
Pendingtasksdetails
(
detailIndex:
index
,
),
settings:
RouteSettings
(
name:
'Pendingtasksdetails'
)
settings:
RouteSettings
(
name:
'Pendingtasksdetails'
,
),
),
);
},
...
...
@@ -176,20 +178,29 @@ class _PendingTasksListState extends State<PendingTasksList> {
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
"
${provider.pendingTasksLists[index].aname}
"
,
maxLines:
1
,
overflow:
TextOverflow
.
visible
,
overflow:
TextOverflow
.
visible
,
style:
TextStyle
(
decoration:
TextDecoration
.
underline
,
decoration:
TextDecoration
.
underline
,
height:
1
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
),
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
decorationStyle:
TextDecorationStyle
.
dotted
,
decorationColor:
Color
(
0xFF676767
,
),
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
...
...
@@ -200,36 +211,47 @@ class _PendingTasksListState extends State<PendingTasksList> {
textAlign:
TextAlign
.
right
,
maxLines:
1
,
style:
TextStyle
(
color:
AppColors
.
grey_semi
,
fontFamily:
"JakartaRegular"
,
color:
AppColors
.
grey_semi
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
),
],
),
SizedBox
(
height:
10
,
),
SizedBox
(
height:
10
),
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
,
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
16
),
gradient:
LinearGradient
(
colors:
[
borderRadius:
BorderRadius
.
circular
(
16
),
gradient:
LinearGradient
(
colors:
[
Color
(
0xFFFFFFFF
),
Color
(
0xFFE8F7FF
)
])
Color
(
0xFFE8F7FF
),
],
),
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
"Remarks"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaRegular"
,
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
...
...
@@ -237,12 +259,17 @@ class _PendingTasksListState extends State<PendingTasksList> {
Expanded
(
child:
Text
(
"
${provider.pendingTasksLists[index].anote}
"
,
textAlign:
TextAlign
.
right
,
textAlign:
TextAlign
.
right
,
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
color:
AppColors
.
semi_black
,
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
),
),
...
...
lib/screens/crm/productDetails.dart
View file @
7210793a
...
...
@@ -2,7 +2,6 @@ import 'dart:io';
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/screens/crm/editProductsList.dart'
;
import
'package:provider/provider.dart'
;
...
...
lib/screens/crm/universalSearchScreen.dart
View file @
7210793a
...
...
@@ -52,15 +52,9 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
child:
Column
(
children:
[
Container
(
// padding: const EdgeInsets.fromLTRB(5.0, 0.0, 10, 0),
// margin: const EdgeInsets.fromLTRB(10.0, 0.0, 10, 10),
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
10
,
),
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
10
),
height:
55
,
decoration:
BoxDecoration
(
color:
AppColors
.
white
,
...
...
@@ -79,8 +73,11 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
Navigator
.
pop
(
context
,
true
);
},
child:
Container
(
child:
SvgPicture
.
asset
(
"assets/svg/appbar_back_button.svg"
,
height:
25
)),
child:
SvgPicture
.
asset
(
"assets/svg/appbar_back_button.svg"
,
height:
25
,
),
),
),
),
Expanded
(
...
...
@@ -128,22 +125,28 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
),
suffixIcon:
Container
(
padding:
EdgeInsets
.
only
(
right:
10
),
child:
provider
.
searchController
.
text
.
isNotEmpty
?
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
provider
.
searchController
.
clear
();
provider
.
crmUniversalSearchFunction
(
context
,
);
},
child:
SvgPicture
.
asset
(
"assets/svg/crm/clear_search.svg"
,
),
):
SvgPicture
.
asset
(
"assets/svg/search_ic.svg"
,
),
child:
provider
.
searchController
.
text
.
isNotEmpty
?
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
provider
.
searchController
.
clear
();
provider
.
crmUniversalSearchFunction
(
context
,
);
},
child:
SvgPicture
.
asset
(
"assets/svg/crm/clear_search.svg"
,
),
)
:
SvgPicture
.
asset
(
"assets/svg/search_ic.svg"
,
),
),
counterText:
""
,
hintText:
"Search By Name/Mobile"
,
...
...
@@ -186,7 +189,7 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
),
),
],
if
(
provider
.
accountsList
.
length
>
0
)
...[
if
(
provider
.
accountsList
.
isNotEmpty
)
...[
Align
(
alignment:
Alignment
.
centerLeft
,
child:
Padding
(
...
...
@@ -209,11 +212,13 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
),
itemCount:
provider
.
accountsList
.
length
,
itemBuilder:
(
context
,
index
)
{
String
accname
=
provider
.
accountsList
[
index
].
aname
??
""
;
RegExp
regex
=
RegExp
(
provider
.
searchController
.
text
,
caseSensitive:
false
);
Iterable
<
Match
>
matches
=
regex
.
allMatches
(
accname
);
String
accname
=
provider
.
accountsList
[
index
].
aname
??
""
;
RegExp
regex
=
RegExp
(
provider
.
searchController
.
text
,
caseSensitive:
false
,
);
Iterable
<
Match
>
matches
=
regex
.
allMatches
(
accname
);
List
<
TextSpan
>
textSpans
=
[];
int
previousMatchEnd
=
0
;
...
...
@@ -224,7 +229,9 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
textSpans
.
add
(
TextSpan
(
text:
accname
.
substring
(
previousMatchEnd
,
match
.
start
),
previousMatchEnd
,
match
.
start
,
),
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
...
...
@@ -237,8 +244,7 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
// Add the matching text with highlighting
textSpans
.
add
(
TextSpan
(
text:
accname
.
substring
(
match
.
start
,
match
.
end
),
text:
accname
.
substring
(
match
.
start
,
match
.
end
),
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
12
,
// Highlight color
...
...
@@ -304,14 +310,16 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
leading:
SvgPicture
.
asset
(
"assets/svg/crm/crm_search_list_ic.svg"
,
),
title:
RichText
(
text:
TextSpan
(
children:
textSpans
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
// Highlight color
fontFamily:
"JakartaMedium"
,
title:
RichText
(
text:
TextSpan
(
children:
textSpans
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
// Highlight color
fontFamily:
"JakartaMedium"
,
),
),
)
),
),
// trailing: SvgPicture.asset(
// "assets/svg/arrow_right_new.svg",
// ),
...
...
@@ -322,7 +330,7 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
),
],
if
(
provider
.
leadsList
.
length
>
0
)
...[
if
(
provider
.
leadsList
.
isNotEmpty
)
...[
Align
(
alignment:
Alignment
.
centerLeft
,
child:
Padding
(
...
...
@@ -345,11 +353,13 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
),
itemCount:
provider
.
leadsList
.
length
,
itemBuilder:
(
context
,
index
)
{
String
accname
=
provider
.
leadsList
[
index
].
aname
??
""
;
RegExp
regex
=
RegExp
(
provider
.
searchController
.
text
,
caseSensitive:
false
);
Iterable
<
Match
>
matches
=
regex
.
allMatches
(
accname
);
String
accname
=
provider
.
leadsList
[
index
].
aname
??
""
;
RegExp
regex
=
RegExp
(
provider
.
searchController
.
text
,
caseSensitive:
false
,
);
Iterable
<
Match
>
matches
=
regex
.
allMatches
(
accname
);
List
<
TextSpan
>
textSpans
=
[];
int
previousMatchEnd
=
0
;
...
...
@@ -360,7 +370,9 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
textSpans
.
add
(
TextSpan
(
text:
accname
.
substring
(
previousMatchEnd
,
match
.
start
),
previousMatchEnd
,
match
.
start
,
),
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
...
...
@@ -373,8 +385,7 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
// Add the matching text with highlighting
textSpans
.
add
(
TextSpan
(
text:
accname
.
substring
(
match
.
start
,
match
.
end
),
text:
accname
.
substring
(
match
.
start
,
match
.
end
),
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
12
,
// Highlight color
...
...
@@ -439,14 +450,16 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
leading:
SvgPicture
.
asset
(
"assets/svg/crm/crm_search_list_ic.svg"
,
),
title:
RichText
(
text:
TextSpan
(
children:
textSpans
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
// Highlight color
fontFamily:
"JakartaMedium"
,
title:
RichText
(
text:
TextSpan
(
children:
textSpans
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
// Highlight color
fontFamily:
"JakartaMedium"
,
),
),
)
),
),
// trailing: SvgPicture.asset(
// "assets/svg/arrow_right_new.svg",
// ),
...
...
@@ -456,7 +469,7 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
},
),
],
if
(
provider
.
enquiresList
.
length
>
0
)
...[
if
(
provider
.
enquiresList
.
isNotEmpty
)
...[
Align
(
alignment:
Alignment
.
centerLeft
,
child:
Padding
(
...
...
@@ -480,17 +493,21 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
itemCount:
provider
.
enquiresList
.
length
,
itemBuilder:
(
context
,
index
)
{
String
accname
=
""
;
if
(
provider
.
enquiresList
[
index
].
companyName
!.
isEmpty
){
if
(
provider
.
enquiresList
[
index
]
.
companyName
!
.
isEmpty
)
{
accname
=
provider
.
enquiresList
[
index
].
name
??
""
;
}
else
{
accname
=
provider
.
enquiresList
[
index
].
companyName
??
""
;
}
else
{
accname
=
provider
.
enquiresList
[
index
].
companyName
??
""
;
}
RegExp
regex
=
RegExp
(
provider
.
searchController
.
text
,
caseSensitive:
false
);
Iterable
<
Match
>
matches
=
regex
.
allMatches
(
accname
);
RegExp
regex
=
RegExp
(
provider
.
searchController
.
text
,
caseSensitive:
false
,
);
Iterable
<
Match
>
matches
=
regex
.
allMatches
(
accname
);
List
<
TextSpan
>
textSpans
=
[];
int
previousMatchEnd
=
0
;
...
...
@@ -501,7 +518,9 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
textSpans
.
add
(
TextSpan
(
text:
accname
.
substring
(
previousMatchEnd
,
match
.
start
),
previousMatchEnd
,
match
.
start
,
),
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
...
...
@@ -514,8 +533,7 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
// Add the matching text with highlighting
textSpans
.
add
(
TextSpan
(
text:
accname
.
substring
(
match
.
start
,
match
.
end
),
text:
accname
.
substring
(
match
.
start
,
match
.
end
),
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
12
,
// Highlight color
...
...
@@ -557,7 +575,7 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
),
child:
ListTile
(
leading:
SvgPicture
.
asset
(
"assets/svg/crm/crm_search_list_ic.svg"
,
"assets/svg/crm/crm_search_list_ic.svg"
,
),
// title: Text(
// provider.enquiresList[index].companyName == ""
...
...
@@ -568,14 +586,16 @@ class _UniversalsearchscreenState extends State<Universalsearchscreen> {
// fontSize: 14,
// ),
// ),
title:
RichText
(
text:
TextSpan
(
children:
textSpans
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
// Highlight color
fontFamily:
"JakartaMedium"
,
title:
RichText
(
text:
TextSpan
(
children:
textSpans
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
12
,
// Highlight color
fontFamily:
"JakartaMedium"
,
),
),
)
),
),
// trailing: SvgPicture.asset(
// "assets/svg/arrow_right_new.svg",
// ),
...
...
lib/screens/finance/AllPaymentRequesitionListsByModes.dart
View file @
7210793a
...
...
@@ -77,7 +77,7 @@ class _AllpaymentrequesitionlistsbymodesState
_scrollController
.
addListener
(()
{
if
(
_scrollController
.
position
.
pixels
>=
_scrollController
.
position
.
maxScrollExtent
-
200
&&
_scrollController
.
position
.
maxScrollExtent
-
200
&&
!
provider
.
isLoadingMore
&&
provider
.
hasMoreData
)
{
provider
.
paymentRequestionListsAPIFunction
(
...
...
@@ -337,316 +337,317 @@ class _AllpaymentrequesitionlistsbymodesState
0xFFFFFFFF
,
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
provider
.
isLoading
&&
requestLists
.
isEmpty
?
Center
(
child:
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
AppColors
.
app_blue
),
),
)
:
requestLists
.
isNotEmpty
?
RefreshIndicator
(
onRefresh:
()
async
{
provider
.
resetPagination
();
await
provider
.
paymentRequestionListsAPIFunction
(
context
,
widget
.
mode
,
""
,
""
,
);
},
child:
Scrollbar
(
controller:
_scrollController
,
// attach here
thumbVisibility:
false
,
child:
ListView
.
builder
(
controller:
_scrollController
,
physics:
const
AlwaysScrollableScrollPhysics
(),
itemCount:
requestLists
.
length
+
(
provider
.
hasMoreData
?
1
:
0
),
itemBuilder:
(
context
,
index
)
{
// loader row for pagination
if
(
index
==
requestLists
.
length
)
{
return
provider
.
isLoadingMore
?
const
Padding
(
padding:
EdgeInsets
.
all
(
16
),
child:
Center
(
child:
CircularProgressIndicator
(),
body:
provider
.
isLoading
&&
requestLists
.
isEmpty
?
Center
(
child:
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
AppColors
.
app_blue
,
),
)
:
const
SizedBox
.
shrink
();
}
// Your swipe logic untouched
final
request
=
requestLists
[
index
];
shouldShowSwipeButtons
(
request
.
status
);
return
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
),
)
:
requestLists
.
isNotEmpty
?
RefreshIndicator
(
onRefresh:
()
async
{
provider
.
resetPagination
();
await
provider
.
paymentRequestionListsAPIFunction
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Paymentrequestionlistdetails
(
pageName:
widget
.
pageTitleName
,
mode:
widget
.
mode
,
paymentRequestId:
requestLists
[
index
].
id
,
),
settings:
RouteSettings
(
name:
"Paymentrequestionlistdetails"
,
),
),
widget
.
mode
,
""
,
""
,
);
if
(
routeSettingName
==
"Paymentrequestionlistdetails"
)
{
print
(
"croos refresh"
);
provider
.
paymentRequestionListsAPIFunction
(
context
,
widget
.
mode
,
""
,
""
,
);
}
},
child:
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
20
),
child:
Slidable
(
startActionPane:
shouldShowButtons
?
ActionPane
(
motion:
const
ScrollMotion
(),
dragDismissible:
false
,
// dismissible: DismissiblePane(onDismissed: () {}),
children:
[
if
(
shouldShowButtons
&&
![
"admin"
,
"self"
,
].
contains
(
widget
.
mode
))
...[
SlidableAction
(
onPressed:
(
context
)
{
_showLevelRejectionSheet
(
context
,
requestLists
[
index
].
id
,
);
},
backgroundColor:
Color
(
0xFFFFE5E5
,
),
foregroundColor:
Color
(
0xFFEF3739
,
child:
Scrollbar
(
controller:
_scrollController
,
// attach here
thumbVisibility:
false
,
child:
ListView
.
builder
(
controller:
_scrollController
,
physics:
const
AlwaysScrollableScrollPhysics
(),
itemCount:
requestLists
.
length
+
(
provider
.
hasMoreData
?
1
:
0
),
itemBuilder:
(
context
,
index
)
{
// loader row for pagination
if
(
index
==
requestLists
.
length
)
{
return
provider
.
isLoadingMore
?
const
Padding
(
padding:
EdgeInsets
.
all
(
16
),
child:
Center
(
child:
CircularProgressIndicator
(),
),
icon:
Icons
.
clear
,
label:
'Reject'
,
),
],
)
:
const
SizedBox
.
shrink
();
}
if
(
widget
.
mode
==
"process"
)
...[
SlidableAction
(
onPressed:
(
context
)
{
detailsProvider
.
approveRejectPaymentRequestAPIFunction
(
context
,
requestLists
[
index
]
.
id
,
);
detailsProvider
.
preValues
();
_showAddPaymentSheet
(
context
,
requestLists
[
index
].
id
,
);
},
backgroundColor:
Color
(
0xFFFFF8E5
,
),
foregroundColor:
Color
(
0xFFFFB600
,
),
icon:
Icons
.
add
,
label:
'Add Payment'
,
),
],
],
)
:
null
,
endActionPane:
shouldShowButtons
?
ActionPane
(
motion:
const
ScrollMotion
(),
key:
ValueKey
(
requestLists
[
index
].
id
,
),
dragDismissible:
false
,
// Your swipe logic untouched
final
request
=
requestLists
[
index
];
shouldShowSwipeButtons
(
request
.
status
);
// dismissible: DismissiblePane(
//
// onDismissed: () {},
// closeOnCancel: true,
// resizeDuration: Duration(milliseconds: 300),),
children:
[
if
([
"apr_lvl1"
,
"apr_lvl2"
,
"self_apr_lvl2"
,
].
contains
(
widget
.
mode
))
...[
SlidableAction
(
onPressed:
(
context
)
{
detailsProvider
.
paymentRequesitionDetails
(
context
,
requestLists
[
index
]
.
id
,
);
detailsProvider
.
preValues
();
detailsProvider
.
approveRejectPaymentRequestAPIFunction
(
context
,
requestLists
[
index
]
.
id
,
);
_showLevelApprovalSheet
(
context
,
requestLists
[
index
].
id
,
);
},
backgroundColor:
Color
(
0xFFE9FFE8
,
),
foregroundColor:
Color
(
0xFF4CB443
,
return
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Paymentrequestionlistdetails
(
pageName:
widget
.
pageTitleName
,
mode:
widget
.
mode
,
paymentRequestId:
requestLists
[
index
].
id
,
),
settings:
RouteSettings
(
name:
"Paymentrequestionlistdetails"
,
),
icon:
Icons
.
check
,
label:
'Approve'
,
),
],
],
)
:
null
,
);
if
(
routeSettingName
==
"Paymentrequestionlistdetails"
)
{
print
(
"croos refresh"
);
provider
.
paymentRequestionListsAPIFunction
(
context
,
widget
.
mode
,
""
,
""
,
);
}
},
child:
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
20
),
child:
Slidable
(
startActionPane:
shouldShowButtons
?
ActionPane
(
motion:
const
ScrollMotion
(),
dragDismissible:
false
,
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
child:
Column
(
children:
[
Row
(
children:
[
Expanded
(
flex:
1
,
child:
Container
(
height:
50
,
width:
50
,
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
getDecorationColor
(
requestLists
[
index
].
status
,
),
shape:
BoxShape
.
circle
,
),
child:
Center
(
child:
Text
(
getText
(
requestLists
[
index
]
.
status
,
),
style:
TextStyle
(
color:
getTextColor
(
requestLists
[
index
]
.
status
,
),
fontSize:
getSize
(
requestLists
[
index
]
.
status
,
),
fontFamily:
"JakartaBold"
,
// dismissible: DismissiblePane(onDismissed: () {}),
children:
[
if
(
shouldShowButtons
&&
![
"admin"
,
"self"
,
].
contains
(
widget
.
mode
))
...[
SlidableAction
(
onPressed:
(
context
)
{
_showLevelRejectionSheet
(
context
,
requestLists
[
index
].
id
,
);
},
backgroundColor:
Color
(
0xFFFFE5E5
,
),
foregroundColor:
Color
(
0xFFEF3739
,
),
icon:
Icons
.
clear
,
label:
'Reject'
,
),
],
if
(
widget
.
mode
==
"process"
)
...[
SlidableAction
(
onPressed:
(
context
)
{
detailsProvider
.
approveRejectPaymentRequestAPIFunction
(
context
,
requestLists
[
index
]
.
id
,
);
detailsProvider
.
preValues
();
_showAddPaymentSheet
(
context
,
requestLists
[
index
].
id
,
);
},
backgroundColor:
Color
(
0xFFFFF8E5
,
),
foregroundColor:
Color
(
0xFFFFB600
,
),
icon:
Icons
.
add
,
label:
'Add Payment'
,
),
],
],
)
:
null
,
endActionPane:
shouldShowButtons
?
ActionPane
(
motion:
const
ScrollMotion
(),
key:
ValueKey
(
requestLists
[
index
].
id
,
),
),
),
),
dragDismissible:
false
,
// dismissible: DismissiblePane(
//
// onDismissed: () {},
// closeOnCancel: true,
// resizeDuration: Duration(milliseconds: 300),),
children:
[
if
([
"apr_lvl1"
,
"apr_lvl2"
,
"self_apr_lvl2"
,
].
contains
(
widget
.
mode
))
...[
SlidableAction
(
onPressed:
(
context
)
{
detailsProvider
.
paymentRequesitionDetails
(
context
,
requestLists
[
index
]
.
id
,
);
detailsProvider
.
preValues
();
detailsProvider
.
approveRejectPaymentRequestAPIFunction
(
context
,
requestLists
[
index
]
.
id
,
);
_showLevelApprovalSheet
(
context
,
requestLists
[
index
].
id
,
);
},
backgroundColor:
Color
(
0xFFE9FFE8
,
),
foregroundColor:
Color
(
0xFF4CB443
,
),
icon:
Icons
.
check
,
label:
'Approve'
,
),
],
],
)
:
null
,
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
child:
Column
(
children:
[
Row
(
children:
[
Text
(
requestLists
[
index
]
.
accountName
!,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
Expanded
(
flex:
1
,
child:
Container
(
height:
50
,
width:
50
,
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
getDecorationColor
(
requestLists
[
index
].
status
,
),
shape:
BoxShape
.
circle
,
),
child:
Center
(
child:
Text
(
getText
(
requestLists
[
index
]
.
status
,
),
style:
TextStyle
(
color:
getTextColor
(
requestLists
[
index
]
.
status
,
),
fontSize:
getSize
(
requestLists
[
index
]
.
status
,
),
fontFamily:
"JakartaBold"
,
),
),
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
requestLists
[
index
]
.
accountName
!,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
Text
(
"
${requestLists[index].date}
"
,
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
],
),
),
),
Text
(
"
${requestLists[index].date}
"
,
style:
TextStyle
(
fontFamily:
"JakartaRegular"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
Expanded
(
flex:
3
,
child:
Text
(
maxLines:
1
,
"₹
${requestLists[index].amount!}
"
,
textAlign:
TextAlign
.
right
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
),
],
),
),
),
Expanded
(
flex:
3
,
child:
Text
(
maxLines:
1
,
"₹
${requestLists[index].amount!}
"
,
textAlign:
TextAlign
.
right
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
],
),
]
,
)
,
),
]
,
)
,
),
)
,
)
,
)
;
}
,
),
),
);
},
),
),
)
:
Emptywidget
(
context
),
)
:
Emptywidget
(
context
),
);
},
);
}
Future
<
void
>
_showLevelApprovalSheet
(
BuildContext
context
,
paymentID
)
{
return
showModalBottomSheet
(
useSafeArea:
true
,
...
...
@@ -791,8 +792,7 @@ class _AllpaymentrequesitionlistsbymodesState
provider
.
selectedID
=
value
.
id
!;
provider
.
selectedValue
=
value
.
name
!;
print
(
"hfjkshfg"
+
provider
.
selectedID
.
toString
(),
"hfjkshfg
${provider.selectedID}
"
,
);
}
}
...
...
@@ -1079,10 +1079,6 @@ class _AllpaymentrequesitionlistsbymodesState
child:
Consumer
<
Requesitionlidtdetailsprovider
>(
builder:
(
context
,
provider
,
child
)
{
// Fallback UI if provider data is not ready
if
(
provider
.
paymentsAccounts
==
null
)
{
return
Center
(
child:
CircularProgressIndicator
());
}
return
Container
(
// Constrain the height to avoid overflow
constraints:
BoxConstraints
(
...
...
@@ -1623,7 +1619,7 @@ class _AllpaymentrequesitionlistsbymodesState
Navigator
.
of
(
context
).
pop
(
false
);
provider
.
imgFromGallery
(
context
);
},
child:
Container
(
child:
SizedBox
(
height:
35
,
child:
Text
(
"Select photo from gallery"
),
),
...
...
@@ -1635,7 +1631,7 @@ class _AllpaymentrequesitionlistsbymodesState
Navigator
.
of
(
context
).
pop
(
false
);
provider
.
imgFromCamera
(
context
);
},
child:
Container
(
child:
SizedBox
(
height:
35
,
child:
Text
(
"Capture photo from camera"
),
),
...
...
lib/screens/finance/FileViewer.dart
View file @
7210793a
...
...
@@ -79,7 +79,7 @@ class _FileviewerState extends State<Fileviewer> {
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
resizeToAvoidBottomInset:
true
,
appBar:
appbarNew
(
context
,
"File Viewer"
,
0xFFFFFFFF
),
appBar:
appbarNew
(
context
,
"File Viewer"
,
0xFFFFFFFF
),
body:
SafeArea
(
child:
Center
(
child:
fileWidget
(
context
))),
);
}
...
...
@@ -172,7 +172,7 @@ class _FileviewerState extends State<Fileviewer> {
},
onConsoleMessage:
(
controller
,
consoleMessage
)
{
if
(
kDebugMode
)
{
debugPrint
(
"consoleMessage
$
{
consoleMessage
}
"
);
debugPrint
(
"consoleMessage
$consoleMessage
"
);
}
debugPrint
(
"JavaScript console message:
${consoleMessage.message}
"
);
},
...
...
@@ -185,11 +185,9 @@ class _FileviewerState extends State<Fileviewer> {
Future
<
Uint8List
?>
_loadPdf
(
String
url
)
async
{
try
{
final
response
=
await
http
.
get
(
Uri
.
parse
(
url
));
if
(
response
!=
null
)
{
if
(
response
.
statusCode
==
200
)
{
print
(
response
.
bodyBytes
);
return
response
.
bodyBytes
;
}
if
(
response
.
statusCode
==
200
)
{
print
(
response
.
bodyBytes
);
return
response
.
bodyBytes
;
}
}
catch
(
e
)
{
print
(
'Error loading PDF:
$e
'
);
...
...
Prev
1
…
7
8
9
10
11
12
13
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment