Commit 55280429 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

20-08-2025 By Sai Srinivas

Test Cases CRM
parent 6ace5c45
......@@ -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,
......
......@@ -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();
......
......@@ -524,7 +524,7 @@ class crmLeadDetailsProvider extends ChangeNotifier {
context: context,
builder:
(BuildContext context) => Container(
height: 216,
height: 250,
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")));
......
......@@ -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: 216,
height: 250,
padding: const EdgeInsets.only(top: 6.0),
margin: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
......
......@@ -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();
......
......@@ -339,7 +339,7 @@ class followUpUpdateProvider extends ChangeNotifier {
context: context,
builder:
(BuildContext context) => Container(
height: 216,
height: 250,
padding: const EdgeInsets.only(top: 6.0),
margin: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
......
......@@ -665,7 +665,7 @@ class Requestionlistprovider extends ChangeNotifier {
context: context,
builder:
(BuildContext context) => Container(
height: 216,
height: 250,
padding: const EdgeInsets.only(top: 6.0),
margin: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
......
......@@ -947,7 +947,7 @@ class Paymentreceiptsprovider extends ChangeNotifier {
context: context,
builder:
(BuildContext context) => Container(
height: 216,
height: 250,
padding: const EdgeInsets.only(top: 6.0),
margin: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
......
......@@ -1874,7 +1874,7 @@ String? productsEmptyError ;
context: context,
builder:
(BuildContext context) => Container(
height: 216,
height: 250,
padding: const EdgeInsets.only(top: 6.0),
margin: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
......
......@@ -596,7 +596,7 @@ class Addpaymentprovider extends ChangeNotifier{
context: context,
builder:
(BuildContext context) => Container(
height: 216,
height: 250,
padding: const EdgeInsets.only(top: 6.0),
margin: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
......
......@@ -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);
},
......
......@@ -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);
......
......@@ -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);
});
});
......
This diff is collapsed.
......@@ -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,
......
This diff is collapsed.
......@@ -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 = {
......
......@@ -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.done,
focusNodes[5],
focusNodes[6],
TextInputAction.next,
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()) {
......
......@@ -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);
......
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment