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

local fix

parents ebb11608 2a087139
...@@ -757,14 +757,17 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier { ...@@ -757,14 +757,17 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
onChangeCompanyName(value) { // onChangeCompanyName(value) {
companynameError = ""; // companynameError = "";
// notifyListeners();
// }
onChangeContactPersonName(value) {
nameError = "";
notifyListeners(); notifyListeners();
} }
onChangeAlternatemobile(value) { onChangeAlternatemobile(value) {
AlternatemobileError = ""; AlternatemobileError = "";
notifyListeners(); notifyListeners();
...@@ -775,22 +778,22 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier { ...@@ -775,22 +778,22 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
Future<void> onChangeContactPersonName(BuildContext context, String value) async { Future<void> onChangeCompanyName(BuildContext context, String value) async {
nameError = ""; companynameError = "";
if (value.isEmpty) { if (value.isEmpty) {
nameError = "Name cannot be empty"; companynameError = "Company Name cannot be empty";
} else if (value.length < 3) { } else if (value.length < 3) {
nameError = "Name must be at least 3 characters"; companynameError = "Company Name must be at least 3 characters";
} else { } else {
final exists = await checkAccountFieldExistence( final exists = await checkAccountFieldExistence(
context, context,
type: "name", type: "company",
typeValue: value, typeValue: value,
); );
if (!exists) { if (!exists) {
nameError = "Name already exists"; companynameError = "Company Name already exists";
} else { } else {
nameError = null; companynameError = null;
} }
} }
notifyListeners(); notifyListeners();
...@@ -997,7 +1000,7 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier { ...@@ -997,7 +1000,7 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
isValid = false; isValid = false;
} }
if(nameError == "Name already exists"){ if(companynameError == "Company Name already exists"){
isValid = false; isValid = false;
} }
......
...@@ -34,16 +34,26 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -34,16 +34,26 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
List<Teams> get teamsList => _teamsList; List<Teams> get teamsList => _teamsList;
List<Segments> get segmentsList => _segmentsList; List<Segments> get segmentsList => _segmentsList;
Teams? get selectedTeams => _selectedTeams;
Segments? get selectedSegments => _selectedSegments; // IMPORTANT: Return null if the selected object is not present in the current list.
// This prevents DropdownButton2 from receiving a value that is not part of items.
Teams? get selectedTeams {
if (_selectedTeams == null) return null;
if (!_teamsList.contains(_selectedTeams)) return null;
return _selectedTeams;
}
Segments? get selectedSegments {
if (_selectedSegments == null) return null;
if (!_segmentsList.contains(_selectedSegments)) return null;
return _selectedSegments;
}
AccountDetails get accountsDetails => _accountDetails; AccountDetails get accountsDetails => _accountDetails;
String? get selectedTeamId => _selectedTeamId; String? get selectedTeamId => _selectedTeamId;
String? get selectedTeamValue => _selectedTeamValue; String? get selectedTeamValue => _selectedTeamValue;
String? get selectedSegmentId => _selectedSegmentId; String? get selectedSegmentId => _selectedSegmentId;
String? get selectedSegmentValue => _selectedSegmentValue; String? get selectedSegmentValue => _selectedSegmentValue;
set isLoading(bool value) { set isLoading(bool value) {
...@@ -68,15 +78,25 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -68,15 +78,25 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
set selectedTeams(Teams? value) { set selectedTeams(Teams? value) {
_selectedTeams = value; _selectedTeams = value;
_selectedTeamId = value!.id!; if (value != null) {
_selectedTeamId = value.id;
_selectedTeamValue = value.name; _selectedTeamValue = value.name;
} else {
_selectedTeamId = null;
_selectedTeamValue = null;
}
notifyListeners(); notifyListeners();
} }
set selectedSegments(Segments? value) { set selectedSegments(Segments? value) {
_selectedSegments = value; _selectedSegments = value;
_selectedSegmentId = value!.id!; if (value != null) {
_selectedSegmentId = value.id;
_selectedSegmentValue = value.name; _selectedSegmentValue = value.name;
} else {
_selectedSegmentId = null;
_selectedSegmentValue = null;
}
notifyListeners(); notifyListeners();
} }
...@@ -117,8 +137,21 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -117,8 +137,21 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
notifyListeners(); notifyListeners();
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
_teamsList = data.teams!; _teamsList = data.teams ?? [];
_accountDetails = data.accountDetails!; _accountDetails = data.accountDetails ?? AccountDetails();
// If current selected team/segment are not in the new lists, clear them
if (_selectedTeams != null && !_teamsList.contains(_selectedTeams)) {
_selectedTeams = null;
_selectedTeamId = null;
_selectedTeamValue = null;
}
if (_selectedSegments != null && !_segmentsList.contains(_selectedSegments)) {
_selectedSegments = null;
_selectedSegmentId = null;
_selectedSegmentValue = null;
}
_isLoading = false; _isLoading = false;
notifyListeners(); notifyListeners();
} else { } else {
...@@ -149,13 +182,29 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -149,13 +182,29 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
); );
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
_segmentsList = data.segments!; _segmentsList = data.segments ?? [];
// clear selectedSegments if it's not part of new list
if (_selectedSegments != null && !_segmentsList.contains(_selectedSegments)) {
_selectedSegments = null;
_selectedSegmentId = null;
_selectedSegmentValue = null;
}
notifyListeners(); notifyListeners();
} }
} }
} catch (e) {} } catch (e) {}
} }
// Fixed: check string emptiness properly (IDs are strings in your model)
bool get isFormValid {
final nameOk = editCompanyNameController.text.trim().isNotEmpty;
final teamOk = _selectedTeamId != null && _selectedTeamId!.isNotEmpty;
final segmentOk = _selectedSegmentId != null && _selectedSegmentId!.isNotEmpty;
return nameOk && teamOk && segmentOk;
}
Future<void> crmLeadDetailsEditAccountSubmitAPIFunction( Future<void> crmLeadDetailsEditAccountSubmitAPIFunction(
context, context,
accountId, accountId,
...@@ -166,6 +215,10 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -166,6 +215,10 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
if (!validateForm(context)) { if (!validateForm(context)) {
return; return;
} }
_isLoading = true;
notifyListeners();
var HomeProv = Provider.of<HomescreenNotifier>(context, listen: false); var HomeProv = Provider.of<HomescreenNotifier>(context, listen: false);
final data = await ApiCalling.crmLeadDetailsEditAccountSubmitAPI( final data = await ApiCalling.crmLeadDetailsEditAccountSubmitAPI(
HomeProv.empId, HomeProv.empId,
...@@ -175,8 +228,7 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -175,8 +228,7 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
teamId, teamId,
editCompanyNameController.text, editCompanyNameController.text,
); );
_isLoading = true;
notifyListeners();
if (data != null) { if (data != null) {
if (data.error == "0") { if (data.error == "0") {
Navigator.pop(context, true); Navigator.pop(context, true);
...@@ -200,19 +252,24 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -200,19 +252,24 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
bool validateForm(BuildContext context) { bool validateForm(BuildContext context) {
// Reset all errors // Reset all errors
_companyNameError = null; _companyNameError = null;
_selectedTeamError = null;
_selectedSegmentError = null;
bool isValid = true; bool isValid = true;
if (_selectedTeams == null || _selectedTeamId!.isEmpty) { // Team checks
_selectedTeamError = "Please select an account"; if (_selectedTeams == null || _selectedTeamId == null || _selectedTeamId!.isEmpty) {
_selectedTeamError = "Please select a team";
isValid = false; isValid = false;
} }
if (_selectedSegments == null || _selectedSegmentId!.isEmpty) { // Segment checks
_selectedSegmentError = "Please select an account"; if (_selectedSegments == null || _selectedSegmentId == null || _selectedSegmentId!.isEmpty) {
_selectedSegmentError = "Please select a segment";
isValid = false; isValid = false;
} }
// Company name check
if (editCompanyNameController.text.trim().isEmpty) { if (editCompanyNameController.text.trim().isEmpty) {
_companyNameError = "Please enter Company name"; _companyNameError = "Please enter Company name";
isValid = false; isValid = false;
...@@ -223,7 +280,12 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -223,7 +280,12 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
} }
onChangedCompanyName(value) { onChangedCompanyName(value) {
_companyNameError = ""; // Clear the company name error when user types
if (value != null && value.toString().trim().isNotEmpty) {
_companyNameError = null;
} else {
_companyNameError = "Name is required";
}
notifyListeners(); notifyListeners();
} }
...@@ -236,11 +298,13 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier { ...@@ -236,11 +298,13 @@ class Editcrmaccountdetailsprovider extends ChangeNotifier {
_selectedSegmentId = null; _selectedSegmentId = null;
_selectedTeamValue = null; _selectedTeamValue = null;
_selectedSegmentValue = null; _selectedSegmentValue = null;
_selectedTeamError = null;
_selectedSegmentError = null;
_companyNameError = null;
} }
void checkDropDownValues() { void checkDropDownValues() {
if (!_segmentsList.contains(_selectedSegments) && if (!_segmentsList.contains(_selectedSegments) && _selectedSegments != null) {
_selectedSegments != null) {
_selectedTeamId = null; _selectedTeamId = null;
_selectedTeamValue = null; _selectedTeamValue = null;
} }
......
...@@ -302,27 +302,45 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -302,27 +302,45 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
} catch (e) {} } catch (e) {}
} }
preValues() { preValues() {// safeNormalizeAmount()
print("here 212ssass1"); print("here 212ssass1");
requestedAmount.text = _requestDetails.requestedAmount ?? "-"; requestedAmount.text = safeNormalizeAmount(_requestDetails.requestedAmount);
proposedPaymentAccount.text = _requestDetails.proposedAccount ?? "-"; proposedPaymentAccount.text = _requestDetails.proposedAccount ?? "-";
approvedAmountReadonly.text = _requestDetails.formattedAmount ?? "-"; approvedAmountReadonly.text = safeNormalizeAmount(_requestDetails.amount);
approvedAmount.text = _requestDetails.amount ?? "-"; approvedAmount.text = safeNormalizeAmount(_requestDetails.amount);
accountName.text = _requestDetails.accountName ?? "-"; accountName.text = _requestDetails.accountName ?? "";
branch.text = _requestDetails.branch ?? "-"; branch.text = _requestDetails.branch ?? "";
requestingPurpose.text = _requestDetails.requestingPurpose ?? "-"; requestingPurpose.text = _requestDetails.requestingPurpose ?? "";
description.text = _requestDetails.description ?? "-"; description.text = _requestDetails.description ?? "";
amount.text = _requestDetails.amount ?? "-"; amount.text = safeNormalizeAmount(_requestDetails.amount);
paymentMode.text = _requestDetails.requestMode ?? "-"; paymentMode.text = _requestDetails.requestMode ?? "";
bankUpiID.text = _requestDetails.bankUpiId ?? "-"; bankUpiID.text = _requestDetails.bankUpiId ?? "";
bankName.text = _requestDetails.bankName ?? "-"; bankName.text = _requestDetails.bankName ?? "";
bankBranchName.text = _requestDetails.bankBranchname ?? "-"; bankBranchName.text = _requestDetails.bankBranchname ?? "";
bankAccountNumber.text = _requestDetails.bankAccountNumber ?? "-"; bankAccountNumber.text = _requestDetails.bankAccountNumber ?? "";
bankIfscCode.text = _requestDetails.bankIfscCode ?? "-"; bankIfscCode.text = _requestDetails.bankIfscCode ?? "";
bankHolderName.text = _requestDetails.bankAccountHolderName ?? "-"; bankHolderName.text = _requestDetails.bankAccountHolderName ?? "";
notifyListeners(); notifyListeners();
} }
String safeNormalizeAmount(String? input) {
if (input == null || input.trim().isEmpty) return "0";
// Remove currency symbols, commas and spaces - keep digits and dots
String cleaned = input.replaceAll(RegExp(r'[^0-9.]'), '');
// Handle multiple decimal points: keep only first dot
int firstDot = cleaned.indexOf('.');
if (firstDot != -1) {
String before = cleaned.substring(0, firstDot + 1);
String after = cleaned.substring(firstDot + 1).replaceAll('.', '');
cleaned = before + after;
}
return cleaned.isEmpty ? "0" : cleaned;
}
Future<void> approveRejectPaymentRequestAPIFunction( Future<void> approveRejectPaymentRequestAPIFunction(
context, context,
paymentRequestId, paymentRequestId,
...@@ -363,31 +381,31 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -363,31 +381,31 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
paymentRequestId, paymentRequestId,
approveRemarks, approveRemarks,
) async { ) async {
print("🎯 === REJECT PROVIDER METHOD STARTED ==="); print(" === REJECT PROVIDER METHOD STARTED ===");
// Set loading to true at the start // Set loading to true at the start
_isLoading = true; _isLoading = true;
notifyListeners(); notifyListeners();
print("🔄 Loading set to TRUE in reject method"); print(" Loading set to TRUE in reject method");
bool success = false; bool success = false;
try { try {
print("🔍 Starting validation for rejection..."); print(" Starting validation for rejection...");
if (approveRemarks.toString().trim().isEmpty) { // if (approveRemarks.toString().trim().isEmpty) {
print(" Remarks validation failed"); // print(" Remarks validation failed");
remarksError = "Please Enter Remarks"; // remarksError = "Please Enter Remarks";
_isLoading = false; // _isLoading = false;
notifyListeners(); // notifyListeners();
return false; // return false;
} // }
print(" Validation passed"); print(" Validation passed");
var provider = Provider.of<HomescreenNotifier>(context, listen: false); var provider = Provider.of<HomescreenNotifier>(context, listen: false);
print("🌐 Calling reject API..."); print(" Calling reject API...");
final data = await ApiCalling.RejectPaymentRequestSubmitAPI( final data = await ApiCalling.RejectPaymentRequestSubmitAPI(
provider.empId, provider.empId,
provider.session, provider.session,
...@@ -395,36 +413,36 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -395,36 +413,36 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
paymentRequestId, paymentRequestId,
approveRemarks, approveRemarks,
); );
print("🌐 Reject API call completed"); print(" Reject API call completed");
if (data != null) { if (data != null) {
print("📡 Reject API Response: error=${data.error}, message=${data.message}"); print(" Reject API Response: error=${data.error}, message=${data.message}");
if (data.error == "0") { if (data.error == "0") {
print(" Reject API SUCCESS"); print(" Reject API SUCCESS");
success = true; success = true;
if (context.mounted) { if (context.mounted) {
print("🎯 Context mounted - performing UI operations"); print(" Context mounted - performing UI operations");
paymentRequesitionDetails(context, paymentRequestId); paymentRequesitionDetails(context, paymentRequestId);
resetAll(); resetAll();
toast(context, data.message); toast(context, data.message);
Navigator.pop(context, true); // Pass true to indicate success Navigator.pop(context, true); // Pass true to indicate success
} }
} else { } else {
print(" Reject API returned error: ${data.message}"); print(" Reject API returned error: ${data.message}");
if (context.mounted) { if (context.mounted) {
toast(context, data.message ?? "Rejection failed"); toast(context, data.message ?? "Rejection failed");
} }
} }
} else { } else {
print(" NULL response from reject API"); print(" NULL response from reject API");
if (context.mounted) { if (context.mounted) {
toast(context, "No response from server"); toast(context, "No response from server");
} }
} }
} catch (e) { } catch (e) {
print("💥 EXCEPTION in reject provider method: $e"); print(" EXCEPTION in reject provider method: $e");
if (context.mounted) { if (context.mounted) {
toast(context, "Error: ${e.toString()}"); toast(context, "Error: ${e.toString()}");
} }
...@@ -433,10 +451,10 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -433,10 +451,10 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
_isLoading = false; _isLoading = false;
notifyListeners(); notifyListeners();
print("🔄 Loading set to FALSE in reject method finally block"); print(" Loading set to FALSE in reject method finally block");
} }
print("🎯 === REJECT PROVIDER METHOD COMPLETED ==="); print(" === REJECT PROVIDER METHOD COMPLETED ===");
return success; return success;
} }
...@@ -457,27 +475,27 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -457,27 +475,27 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
String approve_remarks, String approve_remarks,
String proposed_payment_account_id, String proposed_payment_account_id,
) async { ) async {
print("🎯 === PROVIDER METHOD STARTED ==="); print(" === PROVIDER METHOD STARTED ===");
// Set loading to true at the start // Set loading to true at the start
_isLoading = true; _isLoading = true;
notifyListeners(); notifyListeners();
try { try {
print("🔍 Starting validation..."); print(" Starting validation...");
if (!validateApproval(approved_amount, approve_remarks, proposed_payment_account_id)) { if (!validateApproval(approved_amount, approve_remarks, proposed_payment_account_id)) {
print(" VALIDATION FAILED - Stopping execution"); print(" VALIDATION FAILED - Stopping execution");
_isLoading = false; _isLoading = false;
notifyListeners(); notifyListeners();
return; return;
} }
print(" Validation passed"); print(" Validation passed");
print("👤 Getting home provider..."); print(" Getting home provider...");
var homeProvider = Provider.of<HomescreenNotifier>(context, listen: false); var homeProvider = Provider.of<HomescreenNotifier>(context, listen: false);
print("👤 Emp ID: ${homeProvider.empId}, Session: ${homeProvider.session}"); print(" Emp ID: ${homeProvider.empId}, Session: ${homeProvider.session}");
print("🌐 Calling API..."); print(" Calling API...");
final data = await ApiCalling.ApprovePaymentRequestSubmitAPI( final data = await ApiCalling.ApprovePaymentRequestSubmitAPI(
homeProvider.empId, homeProvider.empId,
homeProvider.session, homeProvider.session,
...@@ -487,43 +505,43 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -487,43 +505,43 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
approve_remarks, approve_remarks,
proposed_payment_account_id, proposed_payment_account_id,
); );
print("🌐 API call completed"); print(" API call completed");
if (data != null) { if (data != null) {
print("📡 API Response: error=${data.error}, message=${data.message}"); print(" API Response: error=${data.error}, message=${data.message}");
if (data.error == "0") { if (data.error == "0") {
print(" API SUCCESS - Processing..."); print(" API SUCCESS - Processing...");
// Check if context is still valid before UI operations // Check if context is still valid before UI operations
if (context.mounted) { if (context.mounted) {
print("🎯 Context mounted - performing UI operations"); print(" Context mounted - performing UI operations");
paymentRequesitionDetails(context, payment_request_id); paymentRequesitionDetails(context, payment_request_id);
resetAll(); resetAll();
toast(context, data.message); toast(context, data.message);
Navigator.pop(context, true); Navigator.pop(context, true);
print(" UI operations completed"); print(" UI operations completed");
} else { } else {
print("️ Context not mounted - skipping UI operations"); print("️ Context not mounted - skipping UI operations");
} }
notifyListeners(); notifyListeners();
print(" Notify listeners called"); print(" Notify listeners called");
} else { } else {
print(" API returned error: ${data.message}"); print(" API returned error: ${data.message}");
if (context.mounted) { if (context.mounted) {
toast(context, data.message ?? "Submission failed"); toast(context, data.message ?? "Submission failed");
} }
} }
} else { } else {
print(" NULL response from API"); print(" NULL response from API");
if (context.mounted) { if (context.mounted) {
toast(context, "No response from server"); toast(context, "No response from server");
} }
} }
} catch (e, s) { } catch (e, s) {
print("💥 EXCEPTION in provider method: $e"); print(" EXCEPTION in provider method: $e");
print("📋 Stack trace: $s"); print(" Stack trace: $s");
// Show error to user // Show error to user
if (context.mounted) { if (context.mounted) {
toast(context, "Error: ${e.toString()}"); toast(context, "Error: ${e.toString()}");
...@@ -532,10 +550,10 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -532,10 +550,10 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
// Set loading to false when everything is done (success or error) // Set loading to false when everything is done (success or error)
_isLoading = false; _isLoading = false;
notifyListeners(); notifyListeners();
print("🔄 Loading state set to false"); print(" Loading state set to false");
} }
print("🎯 === PROVIDER METHOD COMPLETED ==="); print(" === PROVIDER METHOD COMPLETED ===");
} }
...@@ -640,11 +658,11 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -640,11 +658,11 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
} }
bool validateApproval( bool validateApproval(
String approvedAmount, // Add type for clarity String approvedAmount, //
String approveRemarks, // Add type for clarity String approveRemarks, //
String proposedPaymentAccountId, // Add type for clarity String proposedPaymentAccountId, //
) { ) {
print("🔍 === VALIDATION STARTED ==="); print(" === VALIDATION STARTED ===");
print(" Approved Amount: '$approvedAmount'"); print(" Approved Amount: '$approvedAmount'");
print(" Requested Amount: '${requestedAmount.text}'"); print(" Requested Amount: '${requestedAmount.text}'");
print(" Remarks: '$approveRemarks'"); print(" Remarks: '$approveRemarks'");
...@@ -664,11 +682,11 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -664,11 +682,11 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
} }
// Fix 2: Use the String parameter directly (no .text) // Fix 2: Use the String parameter directly (no .text)
if (approveRemarks.trim().isEmpty) { // if (approveRemarks.trim().isEmpty) {
remarksError = "Please Enter Remarks"; // remarksError = "Please Enter Remarks";
isValid = false; // isValid = false;
print("❌ Remarks are empty"); // print("❌ Remarks are empty");
} // }
// Fix 3: Parse the String parameters, not .text // Fix 3: Parse the String parameters, not .text
if (approvedAmount.trim().isNotEmpty && requestedAmount.text.trim().isNotEmpty) { if (approvedAmount.trim().isNotEmpty && requestedAmount.text.trim().isNotEmpty) {
...@@ -677,35 +695,35 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -677,35 +695,35 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
double approved = numberFormat.parse(approvedAmount.trim()).toDouble(); double approved = numberFormat.parse(approvedAmount.trim()).toDouble();
double requested = numberFormat.parse(requestedAmount.text.trim()).toDouble(); double requested = numberFormat.parse(requestedAmount.text.trim()).toDouble();
print("💰 Amount Comparison: Approved: $approved, Requested: $requested"); print(" Amount Comparison: Approved: $approved, Requested: $requested");
if (approved > requested) { if (approved > requested) {
ApprovedAmountError = "Approved Amount should not be greater than requested amount"; ApprovedAmountError = "Approved Amount should not be greater than requested amount";
isValid = false; isValid = false;
print(" Approved amount exceeds requested amount"); print(" Approved amount exceeds requested amount");
} }
} catch (e) { } catch (e) {
print("💥 Error parsing amounts: $e"); print(" Error parsing amounts: $e");
ApprovedAmountError = "Invalid amount format"; ApprovedAmountError = "Invalid amount format";
isValid = false; isValid = false;
} }
} }
// Fix 4: Use the parameter OR check both for consistency // Fix 4: Use the parameter OR check both for consistency
if (proposedPaymentAccountId.isEmpty && _selectedID.isEmpty) { // if (proposedPaymentAccountId.isEmpty && _selectedID.isEmpty) {
selectpaymentAccountError = "Please select an account"; // selectpaymentAccountError = "Please select an account";
isValid = false; // isValid = false;
print(" No payment account selected"); // // print(" No payment account selected");
} else if (proposedPaymentAccountId.isNotEmpty && _selectedID.isEmpty) { // } else if (proposedPaymentAccountId.isNotEmpty && _selectedID.isEmpty) {
// If parameter has value but _selectedID doesn't, sync them // // If parameter has value but _selectedID doesn't, sync them
_selectedID = proposedPaymentAccountId; // _selectedID = proposedPaymentAccountId;
print("🔄 Synced selected ID from parameter: $_selectedID"); // // print(" Synced selected ID from parameter: $_selectedID");
} // }
_submitClicked = false; _submitClicked = false;
notifyListeners(); notifyListeners();
print("🔍 === VALIDATION RESULT: $isValid ==="); // print(" === VALIDATION RESULT: $isValid ===");
return isValid; return isValid;
} }
...@@ -779,6 +797,12 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier { ...@@ -779,6 +797,12 @@ class Requesitionlidtdetailsprovider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
resetRequired() {
remarksError = null;
selectpaymentAccountError = null;
notifyListeners();
}
onChangeApprov(value) { onChangeApprov(value) {
final numberFormat = NumberFormat.decimalPattern(); final numberFormat = NumberFormat.decimalPattern();
if (numberFormat.parse(approvedAmount.text) > if (numberFormat.parse(approvedAmount.text) >
......
...@@ -184,6 +184,12 @@ class Loginnotifier extends ChangeNotifier { ...@@ -184,6 +184,12 @@ class Loginnotifier extends ChangeNotifier {
SharedpreferencesService().saveString("UserName", data.name!); SharedpreferencesService().saveString("UserName", data.name!);
SharedpreferencesService().saveString("UserEmail", data.emailId!); SharedpreferencesService().saveString("UserEmail", data.emailId!);
SharedpreferencesService().saveString("Session_id", data.sessionId!); SharedpreferencesService().saveString("Session_id", data.sessionId!);
SharedpreferencesService().saveString("user", data.userId!);
SharedpreferencesService().saveString("session", data.sessionId!);
print("USER ID : ${data.userId}");
print("SESSISON ID: ${data.sessionId}");
var roles = data.permissions!.toString(); var roles = data.permissions!.toString();
SharedpreferencesService().saveString("roles", roles); SharedpreferencesService().saveString("roles", roles);
......
This diff is collapsed.
...@@ -10,6 +10,7 @@ import 'package:flutter/services.dart'; ...@@ -10,6 +10,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_ringtone_player/flutter_ringtone_player.dart'; import 'package:flutter_ringtone_player/flutter_ringtone_player.dart';
import 'package:generp/Models/hrmModels/leaveApplicationLIstResponse.dart'; import 'package:generp/Models/hrmModels/leaveApplicationLIstResponse.dart';
import 'package:generp/Notifiers/QrProvider.dart';
import 'package:generp/Utils/app_colors.dart'; import 'package:generp/Utils/app_colors.dart';
import 'package:generp/screens/AttendanceScreen.dart'; import 'package:generp/screens/AttendanceScreen.dart';
import 'package:generp/screens/HomeScreen.dart'; import 'package:generp/screens/HomeScreen.dart';
...@@ -426,7 +427,9 @@ class MyApp extends StatelessWidget { ...@@ -426,7 +427,9 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => AdvanceListProvider()), ChangeNotifierProvider(create: (_) => AdvanceListProvider()),
ChangeNotifierProvider(create: (_) => CasualLeaveHistoryProvider()), ChangeNotifierProvider(create: (_) => CasualLeaveHistoryProvider()),
ChangeNotifierProvider(create: (_) => ContactProvider()), ChangeNotifierProvider(create: (_) => ContactProvider()),
ChangeNotifierProvider(create: (_) => QrProvider()),
ChangeNotifierProvider(create: (_) => CrmNearByGeneratorsProvider()),
ChangeNotifierProvider(create: (_) => EditCommonAccountProvider()),
], ],
child: Builder( child: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
......
...@@ -117,7 +117,17 @@ class _AccountslistState extends State<Accountslist> { ...@@ -117,7 +117,17 @@ class _AccountslistState extends State<Accountslist> {
return (connection == "Online") return (connection == "Online")
? Platform.isAndroid ? Platform.isAndroid
? WillPopScope( ? WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () async {
onBackPressed(context);
_refreshList(context);
final provider = Provider.of<Accountslistprovider>(context, listen: false);
provider.resetValues();
provider.commonAccountListAPIFunction(context);
// Return true or false depending on whether you want to allow the pop
return true; // allow the back navigation
// return false; // prevent back navigation
},
child: SafeArea( child: SafeArea(
top: false, top: false,
bottom: true, bottom: true,
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -103,7 +103,7 @@ class _TransactiondetailsState extends State<Transactiondetails> { ...@@ -103,7 +103,7 @@ class _TransactiondetailsState extends State<Transactiondetails> {
), ),
), ),
), ),
SizedBox(width: 10), SizedBox(width: 8),
Expanded( Expanded(
flex: 3, flex: 3,
child: Container( child: Container(
...@@ -117,15 +117,15 @@ class _TransactiondetailsState extends State<Transactiondetails> { ...@@ -117,15 +117,15 @@ class _TransactiondetailsState extends State<Transactiondetails> {
), ),
child: Center( child: Center(
child: Text( child: Text(
"₹ ${details.amount ?? "-"}", " ${details.amount ?? "-"}",
maxLines: 2, maxLines: 2,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
fontFamily: "JakartaRegular", fontFamily: "JakartaRegular",
fontSize: 14, fontSize: 12.8,
color: color:
widget.type == "Credited" widget.type == "Credit"
? Color(0xFFEF3739) ? Color(0xFFEF3739)
: Color(0xFF0D9C00), : Color(0xFF0D9C00),
), ),
...@@ -359,6 +359,7 @@ class _TransactiondetailsState extends State<Transactiondetails> { ...@@ -359,6 +359,7 @@ class _TransactiondetailsState extends State<Transactiondetails> {
details details
.attachmentDirFilePath ?? .attachmentDirFilePath ??
"", "",
downloadEnable: false,
), ),
), ),
); );
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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