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
55280429
Commit
55280429
authored
Aug 20, 2025
by
Sai Srinivas
Browse files
20-08-2025 By Sai Srinivas
Test Cases CRM
parent
6ace5c45
Changes
31
Expand all
Hide whitespace changes
Inline
Side-by-side
lib/Notifiers/LogoutNotifier.dart
View file @
55280429
...
...
@@ -9,10 +9,17 @@ import '../Utils/BackgroundLocationService.dart';
class
LogoutNotifier
extends
ChangeNotifier
{
bool
_logoutButtonClicked
=
true
;
bool
_isLoading
=
false
;
bool
get
isLoading
=>
_isLoading
;
bool
get
logoutButtonClicked
=>
_logoutButtonClicked
;
set
logoutButtonClicked
(
bool
val
){
_logoutButtonClicked
=
val
;
notifyListeners
();
}
Future
<
void
>
LogoutApiFunction
(
HomescreenNotifier
prov
,
BuildContext
context
)
async
{
// print("lohi");
try
{
...
...
@@ -22,6 +29,7 @@ class LogoutNotifier extends ChangeNotifier{
if
(
data
.
error
==
0
)
{
_isLoading
=
false
;
_logoutButtonClicked
=
false
;
await
BackgroundLocationService
.
stopLocationService
();
SharedpreferencesService
().
clearPreferences
();
Navigator
.
push
(
context
,
...
...
lib/Notifiers/crmProvider/addNewLeadsandProspectsProvider.dart
View file @
55280429
...
...
@@ -32,6 +32,12 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
final
GlobalKey
webViewKey
=
GlobalKey
();
var
dl
=
DownloadManager
();
TextEditingController
sourceSearchController
=
TextEditingController
();
TextEditingController
referenceSearchController
=
TextEditingController
();
TextEditingController
teamSearchController
=
TextEditingController
();
TextEditingController
segmentSearchController
=
TextEditingController
();
TextEditingController
productSearchController
=
TextEditingController
();
TextEditingController
addProductPriceController
=
TextEditingController
();
TextEditingController
addQuantityController
=
TextEditingController
();
TextEditingController
addTotalAmountController
=
TextEditingController
();
...
...
@@ -708,6 +714,10 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
void
resetForm
()
{
checkDropdownReset
();
_productRows
.
clear
();
sourceSearchController
.
clear
();
referenceSearchController
.
clear
();
teamSearchController
.
clear
();
segmentSearchController
.
clear
();
addProductPriceController
.
clear
();
addQuantityController
.
clear
();
addTotalAmountController
.
clear
();
...
...
lib/Notifiers/crmProvider/crmLeadDetailsProvider.dart
View file @
55280429
...
...
@@ -524,7 +524,7 @@ class crmLeadDetailsProvider extends ChangeNotifier {
context:
context
,
builder:
(
BuildContext
context
)
=>
Container
(
height:
2
16
,
height:
2
50
,
padding:
const
EdgeInsets
.
only
(
top:
6.0
),
margin:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
...
...
@@ -635,7 +635,7 @@ class crmLeadDetailsProvider extends ChangeNotifier {
// }
String
raw
=
data
.
map
((
row
)
=>
row
.
join
(
'
\t
'
)).
join
(
'
\n
'
);
print
(
'Clipboard data:
$raw
'
);
await
Clipboard
.
setData
(
ClipboardData
(
text:
raw
));
await
Clipboard
.
setData
(
ClipboardData
(
text:
leadDetails
.
copyMessage
!
));
ScaffoldMessenger
.
of
(
context
,
).
showSnackBar
(
SnackBar
(
content:
Text
(
"Copied to Clipboard"
)));
...
...
lib/Notifiers/crmProvider/crmProspectDetailsProvider.dart
View file @
55280429
...
...
@@ -9,6 +9,7 @@ import '../../services/api_calling.dart';
import
'../HomeScreenNotifier.dart'
;
class
crmProspectDetailsProvider
extends
ChangeNotifier
{
bool
_addContactSelected
=
false
;
List
<
Leads
>
_leadsList
=
[];
List
<
Contacts
>
_contactsList
=
[];
List
<
Orders
>
_ordersList
=
[];
...
...
@@ -21,6 +22,13 @@ class crmProspectDetailsProvider extends ChangeNotifier {
bool
_showMoreDetails
=
false
;
bool
get
addContactSelected
=>
_addContactSelected
;
set
addContactSelected
(
bool
value
){
_addContactSelected
=
value
;
notifyListeners
();
}
TextEditingController
nameController
=
TextEditingController
();
TextEditingController
designationController
=
TextEditingController
();
TextEditingController
mobileNumberController
=
TextEditingController
();
...
...
@@ -336,6 +344,7 @@ class crmProspectDetailsProvider extends ChangeNotifier {
if
(
data
!=
null
)
{
if
(
data
.
error
==
"0"
)
{
Navigator
.
pop
(
context
,
true
);
_addContactSelected
=
false
;
resetAll
();
_isLoading
=
false
;
notifyListeners
();
...
...
@@ -381,6 +390,7 @@ class crmProspectDetailsProvider extends ChangeNotifier {
if
(
data
!=
null
)
{
if
(
data
.
error
==
"0"
)
{
_isLoading
=
false
;
_addContactSelected
=
false
;
Navigator
.
pop
(
context
,
true
);
resetAll
();
_isLoading
=
false
;
...
...
@@ -404,7 +414,7 @@ class crmProspectDetailsProvider extends ChangeNotifier {
context:
context
,
builder:
(
BuildContext
context
)
=>
Container
(
height:
2
16
,
height:
2
50
,
padding:
const
EdgeInsets
.
only
(
top:
6.0
),
margin:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
...
...
lib/Notifiers/crmProvider/editProductListProvider.dart
View file @
55280429
...
...
@@ -133,6 +133,11 @@ import '../../screens/LoginScreen.dart';
import
'crmLeadDetailsProvider.dart'
;
class
Editproductlistprovider
extends
ChangeNotifier
{
bool
_editProductDetailsClicked
=
false
;
bool
_editContactDetailsClicked
=
false
;
bool
_followupDetailsClicked
=
false
;
bool
_appointmentDetailsClicked
=
false
;
bool
_quotationDetailsClicked
=
false
;
TextEditingController
addEditProductPriceController
=
TextEditingController
();
TextEditingController
addEditQuantityController
=
TextEditingController
();
TextEditingController
addEditTotalAmountController
=
TextEditingController
();
...
...
@@ -151,6 +156,15 @@ class Editproductlistprovider extends ChangeNotifier {
String
?
qtyError
;
String
?
priceError
;
String
?
productError
;
bool
get
editProductDetailsClicked
=>
_editProductDetailsClicked
;
bool
get
editContactDetailsClicked
=>
_editContactDetailsClicked
;
bool
get
followupDetailsClicked
=>
_followupDetailsClicked
;
bool
get
appointmentDetailsClicked
=>
_appointmentDetailsClicked
;
bool
get
quotationDetailsClicked
=>
_quotationDetailsClicked
;
List
<
Products
>
get
productsList
=>
_productsList
;
List
<
LeadProducts
>
get
leadProductsList
=>
_leadProductsList
;
...
...
@@ -169,6 +183,30 @@ class Editproductlistprovider extends ChangeNotifier {
bool
get
submitLoading
=>
_submitLoading
;
set
editProductDetailsClicked
(
bool
value
){
_editProductDetailsClicked
=
value
;
notifyListeners
();
}
set
editContactDetailsClicked
(
bool
value
){
_editContactDetailsClicked
=
value
;
notifyListeners
();
}
set
followupDetailsClicked
(
bool
value
){
_followupDetailsClicked
=
value
;
notifyListeners
();
}
set
appointmentDetailsClicked
(
bool
value
){
_appointmentDetailsClicked
=
value
;
notifyListeners
();
}
set
quotationDetailsClicked
(
bool
value
){
_quotationDetailsClicked
=
value
;
notifyListeners
();
}
set
selectedProducts
(
Products
?
value
)
{
_selectedProducts
=
value
;
_selectedAddEditProductId
=
value
!.
id
!;
...
...
@@ -438,6 +476,11 @@ class Editproductlistprovider extends ChangeNotifier {
void
resetForm
()
{
checkDropdownReset
();
_editProductDetailsClicked
=
false
;
_editContactDetailsClicked
=
false
;
_followupDetailsClicked
=
false
;
_appointmentDetailsClicked
=
false
;
_quotationDetailsClicked
=
false
;
addEditProductPriceController
.
clear
();
addEditQuantityController
.
clear
();
addEditTotalAmountController
.
clear
();
...
...
lib/Notifiers/crmProvider/followUpUpdateProvider.dart
View file @
55280429
...
...
@@ -339,7 +339,7 @@ class followUpUpdateProvider extends ChangeNotifier {
context:
context
,
builder:
(
BuildContext
context
)
=>
Container
(
height:
2
16
,
height:
2
50
,
padding:
const
EdgeInsets
.
only
(
top:
6.0
),
margin:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
...
...
lib/Notifiers/financeProvider/RequestionListProvider.dart
View file @
55280429
...
...
@@ -665,7 +665,7 @@ class Requestionlistprovider extends ChangeNotifier {
context:
context
,
builder:
(
BuildContext
context
)
=>
Container
(
height:
2
16
,
height:
2
50
,
padding:
const
EdgeInsets
.
only
(
top:
6.0
),
margin:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
...
...
lib/Notifiers/financeProvider/paymentReceiptsProvider.dart
View file @
55280429
...
...
@@ -947,7 +947,7 @@ class Paymentreceiptsprovider extends ChangeNotifier {
context:
context
,
builder:
(
BuildContext
context
)
=>
Container
(
height:
2
16
,
height:
2
50
,
padding:
const
EdgeInsets
.
only
(
top:
6.0
),
margin:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
...
...
lib/Notifiers/ordersProvider/addOrderProvider.dart
View file @
55280429
...
...
@@ -1874,7 +1874,7 @@ String? productsEmptyError ;
context:
context
,
builder:
(
BuildContext
context
)
=>
Container
(
height:
2
16
,
height:
2
50
,
padding:
const
EdgeInsets
.
only
(
top:
6.0
),
margin:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
...
...
lib/Notifiers/ordersProvider/addPaymentProvider.dart
View file @
55280429
...
...
@@ -596,7 +596,7 @@ class Addpaymentprovider extends ChangeNotifier{
context:
context
,
builder:
(
BuildContext
context
)
=>
Container
(
height:
2
16
,
height:
2
50
,
padding:
const
EdgeInsets
.
only
(
top:
6.0
),
margin:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
...
...
lib/Utils/commonWidgets.dart
View file @
55280429
...
...
@@ -140,6 +140,7 @@ PreferredSizeWidget appbar2New(BuildContext context, title, reset, widget,int co
children:
[
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
reset
();
Navigator
.
pop
(
context
,
true
);
},
...
...
@@ -150,6 +151,7 @@ PreferredSizeWidget appbar2New(BuildContext context, title, reset, widget,int co
flex:
4
,
child:
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
reset
();
Navigator
.
pop
(
context
,
true
);
},
...
...
lib/screens/HomeScreen.dart
View file @
55280429
...
...
@@ -229,6 +229,7 @@ class _MyHomePageState extends State<MyHomePage> {
flex:
4
,
child:
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
_showProfileBottomSheet
(
context
,
);
...
...
@@ -585,6 +586,7 @@ class _MyHomePageState extends State<MyHomePage> {
return
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
;
switch
(
filteredItems
[
ic
][
'name'
])
{
case
"Attendance"
:
...
...
@@ -738,6 +740,7 @@ class _MyHomePageState extends State<MyHomePage> {
),
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -848,6 +851,7 @@ class _MyHomePageState extends State<MyHomePage> {
itemBuilder:
(
context
,
ci
)
{
return
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
;
switch
(
filteredItems
[
ci
][
'name'
])
{
case
"Attendance"
:
...
...
@@ -1267,6 +1271,7 @@ class _MyHomePageState extends State<MyHomePage> {
itemBuilder:
(
context
,
ci
)
{
return
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
;
switch
(
coreFilteredItems
[
ci
][
'name'
])
{
case
"Gen Tracker"
:
...
...
@@ -1709,6 +1714,7 @@ class _MyHomePageState extends State<MyHomePage> {
Spacer
(),
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -1867,6 +1873,7 @@ class _MyHomePageState extends State<MyHomePage> {
SizedBox
(
height:
10
),
InkWell
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
// LoginApiFunction();
var
f
=
FocusScope
.
of
(
context
);
...
...
@@ -1969,9 +1976,10 @@ class _MyHomePageState extends State<MyHomePage> {
),
SizedBox
(
height:
20
),
InkWell
(
onTap:
()
{
onTap:
logout
.
logoutButtonClicked
?
null
:
()
{
HapticFeedback
.
selectionClick
();
// LoginApiFunction();
logout
.
logoutButtonClicked
=
true
;
var
f
=
FocusScope
.
of
(
context
);
if
(!
f
.
hasPrimaryFocus
)
{
...
...
@@ -2008,6 +2016,7 @@ class _MyHomePageState extends State<MyHomePage> {
InkWell
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
// LoginApiFunction();
var
f
=
FocusScope
.
of
(
context
);
...
...
lib/screens/crm/LeadDetailsByMode.dart
View file @
55280429
...
...
@@ -174,6 +174,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
children:
[
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
provider
.
resetAll
();
editProvider
.
resetForm
();
Navigator
.
pop
(
context
,
true
);
...
...
@@ -188,6 +189,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
flex:
4
,
child:
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
provider
.
resetAll
();
editProvider
.
resetForm
();
Navigator
.
pop
(
context
,
true
);
...
...
@@ -285,6 +287,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -326,6 +329,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
mediumImpact
();
provider
.
copyToClipboard
(
context
);
},
child:
Container
(
...
...
@@ -677,6 +681,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
provider
.
showMoreDetails
=
!
provider
.
showMoreDetails
;
},
...
...
@@ -747,7 +752,9 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
if
(
productsNotEmpty
)
...[
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
onTap:
editProvider
.
editProductDetailsClicked
?
null
:
()
async
{
HapticFeedback
.
selectionClick
();
editProvider
.
editProductDetailsClicked
=
true
;
editProvider
.
resetForm
();
await
editProvider
.
crmLeadDetailsEditProductsViewAPIFunction
(
...
...
@@ -794,7 +801,12 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
itemCount:
provider
.
leadProducts
.
length
,
itemBuilder:
(
context
,
lp
)
{
return
InkResponse
(
onTap:
()
async
{
onTap:
editProvider
.
editProductDetailsClicked
?
null
:
()
async
{
// var res = await Navigator.push(
// context,
// MaterialPageRoute(
...
...
@@ -804,6 +816,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
// ),
// ),
// );
editProvider
.
editProductDetailsClicked
=
true
;
await
editProvider
.
crmLeadDetailsEditProductsViewAPIFunction
(
context
,
...
...
@@ -978,7 +991,9 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
]
else
...[
InkResponse
(
onTap:
()
async
{
onTap:
editProvider
.
editProductDetailsClicked
?
null
:
()
async
{
HapticFeedback
.
selectionClick
();
editProvider
.
editProductDetailsClicked
=
true
;
editProvider
.
resetForm
();
await
editProvider
.
crmLeadDetailsEditProductsViewAPIFunction
(
...
...
@@ -1040,7 +1055,8 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
if
(
contactsNotEmpty
)
...[
Expanded
(
child:
InkResponse
(
onTap:
()
{
onTap:
editProvider
.
editContactDetailsClicked
?
null
:
()
{
HapticFeedback
.
selectionClick
();
editProvider
.
editContactDetailsClicked
=
true
;
_showAddContactSheet
(
context
);
},
child:
Padding
(
...
...
@@ -1072,7 +1088,8 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
itemCount:
provider
.
contactDetails
.
length
,
itemBuilder:
(
context
,
lp
)
{
return
InkResponse
(
onTap:
()
async
{
onTap:
editProvider
.
editContactDetailsClicked
?
null
:
()
async
{
HapticFeedback
.
selectionClick
();
editProvider
.
editContactDetailsClicked
=
true
;
provider
.
editNameController
.
text
=
provider
.
contactDetails
[
lp
].
name
??
""
;
...
...
@@ -1152,7 +1169,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
Expanded
(
flex:
2
,
child:
InkResponse
(
onTap:
()
{
onTap:
()
{
HapticFeedback
.
selectionClick
();
launch
(
'tel://
${provider.contactDetails[lp].mob1}
'
,
);
...
...
@@ -1206,7 +1223,8 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
]
else
...[
InkResponse
(
onTap:
()
async
{
onTap:
editProvider
.
editContactDetailsClicked
?
null
:
()
async
{
HapticFeedback
.
selectionClick
();
editProvider
.
editContactDetailsClicked
=
true
;
_showAddContactSheet
(
context
);
},
child:
Container
(
...
...
@@ -1257,7 +1275,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
if
(
followupNotEmpty
)
...[
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -1611,7 +1629,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
]
else
...[
InkResponse
(
onTap:
()
async
{
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -1674,7 +1692,8 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
if
(
appointmentNotEmpty
)
...[
Expanded
(
child:
InkResponse
(
onTap:
()
{
onTap:
editProvider
.
appointmentDetailsClicked
?
null
:
()
{
HapticFeedback
.
selectionClick
();
editProvider
.
appointmentDetailsClicked
=
true
;
_showAddAppointmentSheet
(
context
);
},
child:
Padding
(
...
...
@@ -2006,7 +2025,8 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
]
else
...[
InkResponse
(
onTap:
()
{
onTap:
editProvider
.
appointmentDetailsClicked
?
null
:()
{
HapticFeedback
.
selectionClick
();
editProvider
.
appointmentDetailsClicked
=
true
;
_showAddAppointmentSheet
(
context
);
},
child:
Container
(
...
...
@@ -2335,7 +2355,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
]
else
...[
InkResponse
(
onTap:
()
async
{
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -2401,8 +2421,9 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer
<
crmLeadDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
child:
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
editProvider
.
appointmentDetailsClicked
=
false
;
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
...
...
@@ -2431,7 +2452,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
TextWidget
(
context
,
"Appointment Date"
),
GestureDetector
(
onTap:
()
{
onTap:
()
{
HapticFeedback
.
selectionClick
();
provider
.
showDatePickerDialog
(
context
);
},
child:
Row
(
...
...
@@ -2551,7 +2572,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
onTap:
provider
.
isLoading
?
null
:
()
{
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
isLoading
=
true
;
provider
.
crmLeadDetailsAddAppointmentAPIFunction
(
...
...
@@ -2601,7 +2622,11 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
context
,
listen:
false
,
);
final
editProvider
=
Provider
.
of
<
Editproductlistprovider
>(
context
,
listen:
false
,
);
editProvider
.
appointmentDetailsClicked
=
false
;
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadId
,
widget
.
mode
);
});
});
...
...
@@ -2620,8 +2645,9 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer
<
crmLeadDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
child:
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
editProvider
.
editContactDetailsClicked
=
false
;
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
...
...
@@ -2749,7 +2775,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
onTap:
provider
.
isLoading
?
null
:
()
{
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
isLoading
=
true
;
provider
.
crmLeadDetailsAddContactAPIFunction
(
...
...
@@ -2802,7 +2828,11 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
context
,
listen:
false
,
);
final
editProvider
=
Provider
.
of
<
Editproductlistprovider
>(
context
,
listen:
false
,
);
editProvider
.
editContactDetailsClicked
=
false
;
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadId
,
widget
.
mode
);
});
});
...
...
@@ -2820,9 +2850,11 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
builder:
(
context
)
{
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
return
SafeArea
(
child:
Consumer
<
crmLeadDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
child:
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
editProvider
.
editContactDetailsClicked
=
false
;
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
...
...
@@ -2952,7 +2984,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
onTap:
provider
.
isLoading
?
null
:
()
{
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
isLoading
=
true
;
provider
.
crmLeadDetailsEditContactAPIFunction
(
...
...
@@ -3005,6 +3037,11 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
context
,
listen:
false
,
);
final
editprovider
=
Provider
.
of
<
Editproductlistprovider
>(
context
,
listen:
false
,
);
editprovider
.
editContactDetailsClicked
=
false
;
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadId
,
widget
.
mode
);
});
});
...
...
@@ -3060,7 +3097,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
List
.
generate
(
assetnames
.
length
,
(
index
)
{
return
ListTile
(
onTap:
()
{
onTap:
()
{
HapticFeedback
.
selectionClick
();
Navigator
.
pop
(
context
,
true
);
switch
(
index
)
{
case
0
:
...
...
@@ -3166,6 +3203,7 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
child:
Consumer2
<
crmLeadDetailsProvider
,
Editproductlistprovider
>(
builder:
(
context
,
provider
,
editProvider
,
child
)
{
void
updatedAmountfun
(
value
)
{
editProvider
.
editProductDetailsClicked
=
false
;
final
price
=
double
.
tryParse
(
editProvider
.
addEditProductPriceController
.
text
,
...
...
@@ -3411,7 +3449,11 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
context
,
listen:
false
,
);
final
editProvider
=
Provider
.
of
<
Editproductlistprovider
>(
context
,
listen:
false
,
);
editProvider
.
editProductDetailsClicked
=
false
;
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadId
,
widget
.
mode
);
});
});
...
...
lib/screens/crm/LeadListByMode.dart
View file @
55280429
This diff is collapsed.
Click to expand it.
lib/screens/crm/ProspectDetailsByMode.dart
View file @
55280429
...
...
@@ -403,6 +403,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
_showTransferAccountSheet
(
context
,
provider
.
accountDetails
.
id
!,
...
...
@@ -424,6 +425,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
editProvider
.
checkDropDownValues
();
prefill
();
await
_showEditAccountSheet
(
...
...
@@ -669,46 +671,43 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
),
Expanded
(
child:
InkResponse
(
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
,
),
),
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
,
),
),
),
),
],
),
...
...
@@ -720,6 +719,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
provider
.
showMoreDetails
=
!
provider
.
showMoreDetails
;
},
...
...
@@ -786,6 +786,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
Expanded
(
child:
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
await
addleadProvider
.
crmProspectDetailsAddLeadsViewAPIFunction
(
context
,
...
...
@@ -823,6 +824,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
itemBuilder:
(
context
,
index
)
{
return
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -1092,6 +1094,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
]
else
...[
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
await
addleadProvider
.
crmProspectDetailsAddLeadsViewAPIFunction
(
context
,
...
...
@@ -1143,7 +1146,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
if
(
contactNotEmpty
)
...[
Expanded
(
child:
InkResponse
(
onTap:
()
{
onTap:
provider
.
addContactSelected
?
null
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
addContactSelected
=
true
;
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!,
...
...
@@ -1178,7 +1183,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
itemCount:
provider
.
contactList
.
length
,
itemBuilder:
(
context
,
lp
)
{
return
InkResponse
(
onTap:
()
async
{
onTap:
provider
.
addContactSelected
?
null
:
()
async
{
provider
.
addContactSelected
=
true
;
HapticFeedback
.
selectionClick
();
provider
.
editNameController
.
text
=
provider
.
contactList
[
lp
].
name
??
""
;
provider
.
editDesignationController
.
text
=
...
...
@@ -1300,7 +1307,9 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
),
]
else
...[
InkResponse
(
onTap:
()
{
onTap:
provider
.
addContactSelected
?
null
:
()
{
HapticFeedback
.
selectionClick
();
provider
.
addContactSelected
=
true
;
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!,
...
...
@@ -1899,6 +1908,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
return
SafeArea
(
child:
Consumer
<
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
provider
.
addContactSelected
=
false
;
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
...
...
@@ -2082,7 +2092,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
listen:
false
,
);
editProvider
.
crmLeadListViewAPIFunction
(
context
,
widget
.
mode
);
provider
.
addContactSelected
=
false
;
editProvider
.
crmProspectDetailsEditAccountViewAPIFunction
(
context
,
widget
.
leadId
,
...
...
@@ -2107,6 +2117,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
return
SafeArea
(
child:
Consumer
<
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
provider
.
addContactSelected
=
false
;
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
...
...
@@ -2293,7 +2304,7 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
listen:
false
,
);
editProvider
.
crmLeadListViewAPIFunction
(
context
,
widget
.
mode
);
provider
.
addContactSelected
=
false
;
editProvider
.
crmProspectDetailsEditAccountViewAPIFunction
(
context
,
widget
.
leadId
,
...
...
lib/screens/crm/ProspectListByMode.dart
View file @
55280429
This diff is collapsed.
Click to expand it.
lib/screens/crm/addLeadProductScreen.dart
View file @
55280429
...
...
@@ -174,6 +174,55 @@ class _AddleadproductscreenState extends State<Addleadproductscreen> {
value
!.
id
.
toString
(),
);
},
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
productSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
child:
TextFormField
(
controller:
provider
.
productSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Product...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
provider
.
productSearchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
...
...
@@ -242,7 +291,7 @@ class _AddleadproductscreenState extends State<Addleadproductscreen> {
FloatingActionButtonLocation
.
centerFloat
,
floatingActionButton:
InkWell
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
if
(
provider
.
selectedProducts
!=
null
)
{
final
productData
=
{
...
...
lib/screens/crm/addLeadsProspectsScreen.dart
View file @
55280429
...
...
@@ -30,6 +30,7 @@ class Addleadsprospectsscreen extends StatefulWidget {
class
_AddleadsprospectsscreenState
extends
State
<
Addleadsprospectsscreen
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
List
<
FocusNode
>
focusNodes
=
List
.
generate
(
20
,
(
index
)
=>
FocusNode
());
int
_currentStep
=
0
;
final
_formKey
=
GlobalKey
<
FormState
>();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
...
...
@@ -44,6 +45,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
_nameController
.
dispose
();
_emailController
.
dispose
();
_addressController
.
dispose
();
focusNodes
.
map
((
e
)
=>
e
.
dispose
(),);
super
.
dispose
();
}
...
...
@@ -290,6 +292,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
name
,
false
,
null
,
focusNodes
[
0
],
focusNodes
[
1
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
companynameError
),
...
...
@@ -302,6 +307,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
name
,
false
,
null
,
focusNodes
[
1
],
focusNodes
[
2
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
nameError
),
...
...
@@ -314,8 +322,8 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
phone
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
null
,
null
,
focusNodes
[
2
]
,
focusNodes
[
3
]
,
TextInputAction
.
done
,
10
,
),
...
...
@@ -329,7 +337,10 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
provider
.
onChangemailId
,
TextInputType
.
emailAddress
,
false
,
null
,
null
,
focusNodes
[
3
],
focusNodes
[
4
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
mailIdError
),
...
...
@@ -342,6 +353,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
text
,
false
,
null
,
focusNodes
[
4
],
null
,
TextInputAction
.
done
,
),
errorWidget
(
context
,
provider
.
designationError
),
],
...
...
@@ -374,9 +388,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
phone
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
null
,
null
,
TextInputAction
.
do
ne
,
focusNodes
[
5
]
,
focusNodes
[
6
]
,
TextInputAction
.
ne
xt
,
10
,
),
...
...
@@ -391,6 +405,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
phone
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
6
],
null
,
TextInputAction
.
done
,
),
errorWidget
(
context
,
provider
.
TelephoneError
),
TextWidget
(
context
,
"Source"
),
...
...
@@ -448,6 +465,55 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
}
},
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
sourceSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
child:
TextFormField
(
controller:
provider
.
sourceSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Source...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
provider
.
sourceSearchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
...
...
@@ -505,6 +571,55 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
}
},
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
referenceSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
child:
TextFormField
(
controller:
provider
.
referenceSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Reference...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
provider
.
referenceSearchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
...
...
@@ -571,6 +686,55 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
}
},
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
teamSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
child:
TextFormField
(
controller:
provider
.
teamSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Team...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
provider
.
teamSearchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
...
...
@@ -627,6 +791,55 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
}
},
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchController:
provider
.
segmentSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
child:
TextFormField
(
controller:
provider
.
segmentSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
8
,
),
hintText:
'Search Segment...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
provider
.
segmentSearchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
...
...
@@ -1251,6 +1464,9 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
TextInputType
.
streetAddress
,
false
,
null
,
focusNodes
[
7
],
null
,
TextInputAction
.
done
,
),
errorWidget
(
context
,
provider
.
addressError
),
...
...
@@ -1303,6 +1519,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
if
(
_currentStep
==
2
)
...[
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
if
(
provider
.
validateStep3
())
{
if
(
provider
.
productRows
.
isNotEmpty
){
provider
.
crmAddNewLeadsAndProspectsAPIFunction
(
...
...
@@ -1356,6 +1573,7 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
]
else
...[
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
setState
(()
{
if
(
_currentStep
==
0
)
{
if
(
provider
.
validateStep1
())
{
...
...
lib/screens/crm/appointmentCalendar.dart
View file @
55280429
...
...
@@ -4,6 +4,7 @@ import 'package:connectivity_plus/connectivity_plus.dart';
import
'package:dotted_line/dotted_line.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_svg/flutter_svg.dart'
;
import
'package:generp/Notifiers/crmProvider/appointmentCalendarProvider.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
...
...
@@ -222,6 +223,7 @@ class _AppointmentcalendarState extends State<Appointmentcalendar> {
itemBuilder:
(
context
,
index
)
{
return
InkResponse
(
onTap:
()
async
{
HapticFeedback
.
selectionClick
();
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
@@ -309,6 +311,7 @@ class _AppointmentcalendarState extends State<Appointmentcalendar> {
flex:
1
,
child:
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
launch
(
'tel://
${provider.appointmentList[index].mob1}
'
,
);
...
...
@@ -474,6 +477,7 @@ class _AppointmentcalendarState extends State<Appointmentcalendar> {
return
InkResponse
(
onTap:
()
{
HapticFeedback
.
selectionClick
();
final
formattedDate
=
DateFormat
(
'yyyy-MM-dd'
).
format
(
date
);
print
(
formattedDate
);
provider
.
setSelectedDate
(
date
);
...
...
lib/screens/crm/crmDashboard.dart
View file @
55280429
This diff is collapsed.
Click to expand it.
Prev
1
2
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