|
|
|
|
@ -9,6 +9,7 @@ import 'package:test_sa/modules/signup/models/group_model.dart';
|
|
|
|
|
import 'package:test_sa/modules/signup/models/signup_request_model.dart';
|
|
|
|
|
import 'package:test_sa/modules/signup/models/site_model.dart';
|
|
|
|
|
import 'package:test_sa/modules/signup/models/department_model.dart';
|
|
|
|
|
import 'package:test_sa/modules/signup/models/employee_erp_model.dart';
|
|
|
|
|
import 'package:test_sa/modules/signup/providers/company_provider.dart';
|
|
|
|
|
import 'package:test_sa/modules/signup/providers/group_provider.dart';
|
|
|
|
|
import 'package:test_sa/modules/signup/providers/signup_provider.dart';
|
|
|
|
|
@ -52,6 +53,7 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
Company? _selectedCompany;
|
|
|
|
|
SiteModel? _selectedSite;
|
|
|
|
|
DepartmentModel? _selectedDepartment;
|
|
|
|
|
EmployeeERPModel? _employeeERPData; // Store the ERP employee data
|
|
|
|
|
bool _isHMGGroup = false;
|
|
|
|
|
bool _employeeFetched = false;
|
|
|
|
|
bool _isSubmitting = false;
|
|
|
|
|
@ -151,10 +153,14 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
_employeeFetched = false;
|
|
|
|
|
_clearForm();
|
|
|
|
|
});
|
|
|
|
|
// Clear sites and departments when company changes
|
|
|
|
|
_signUpProvider.reset();
|
|
|
|
|
// Clear sites and departments when company changes
|
|
|
|
|
_signUpProvider.reset();
|
|
|
|
|
|
|
|
|
|
// Reset and fetch site and department data when company is selected
|
|
|
|
|
if (_selectedAssetGroup?.id != null) {
|
|
|
|
|
_siteProvider.reset();
|
|
|
|
|
_departmentProvider.reset();
|
|
|
|
|
_siteProvider.getData(id: _selectedAssetGroup!.id);
|
|
|
|
|
_departmentProvider.getData(id: _selectedAssetGroup!.id);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
validator: (value) {
|
|
|
|
|
if (value == null) return "Company is required";
|
|
|
|
|
@ -186,8 +192,8 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
];
|
|
|
|
|
} else {
|
|
|
|
|
return [
|
|
|
|
|
_buildReadOnlyEmployeeIdField(),
|
|
|
|
|
16.height,
|
|
|
|
|
// _buildReadOnlyEmployeeIdField(),
|
|
|
|
|
// 16.height,
|
|
|
|
|
_buildFullNameField(),
|
|
|
|
|
16.height,
|
|
|
|
|
_buildEmailField(),
|
|
|
|
|
@ -328,15 +334,12 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
initialValue: _selectedSite,
|
|
|
|
|
showAsFullScreenDialog: false,
|
|
|
|
|
showAsBottomSheet: true,
|
|
|
|
|
requestById: _selectedAssetGroup?.id,
|
|
|
|
|
onSelect: (value) {
|
|
|
|
|
setState(() {
|
|
|
|
|
_selectedSite = value;
|
|
|
|
|
_selectedDepartment = null;
|
|
|
|
|
});
|
|
|
|
|
// Fetch departments when site is selected
|
|
|
|
|
if (_selectedAssetGroup?.id != null) {
|
|
|
|
|
_departmentProvider.getData(id: _selectedAssetGroup!.id);
|
|
|
|
|
}
|
|
|
|
|
// No need to fetch departments when site changes - they are independent
|
|
|
|
|
},
|
|
|
|
|
validator: (value) {
|
|
|
|
|
if (value == null) return "Site is required";
|
|
|
|
|
@ -352,6 +355,7 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
initialValue: _selectedDepartment,
|
|
|
|
|
showAsFullScreenDialog: false,
|
|
|
|
|
showAsBottomSheet: true,
|
|
|
|
|
requestById: _selectedAssetGroup?.id,
|
|
|
|
|
onSelect: (value) {
|
|
|
|
|
setState(() {
|
|
|
|
|
_selectedDepartment = value;
|
|
|
|
|
@ -392,6 +396,7 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
if (employee != null) {
|
|
|
|
|
setState(() {
|
|
|
|
|
_employeeFetched = true;
|
|
|
|
|
_employeeERPData = employee; // Store the ERP data for later use
|
|
|
|
|
_fullNameController.text = employee.employeeName ?? '';
|
|
|
|
|
_emailController.text = employee.employeeEmailAddress ?? '';
|
|
|
|
|
_mobileController.text = employee.employeeMobileNumber ?? '';
|
|
|
|
|
@ -399,6 +404,7 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
} else {
|
|
|
|
|
setState(() {
|
|
|
|
|
_employeeFetched = false;
|
|
|
|
|
_employeeERPData = null;
|
|
|
|
|
});
|
|
|
|
|
Fluttertoast.showToast(
|
|
|
|
|
msg: _signUpProvider.errorMessage ?? "Failed to fetch employee details",
|
|
|
|
|
@ -463,17 +469,22 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Build request with conditional logic based on isHMGGroup
|
|
|
|
|
final request = SignUpRequestModel(
|
|
|
|
|
companyCode: _selectedCompany?.id?.toString(),
|
|
|
|
|
groupCode: _selectedAssetGroup?.id?.toString(),
|
|
|
|
|
assetGroupId: _selectedAssetGroup?.id,
|
|
|
|
|
companyId: _selectedCompany?.id,
|
|
|
|
|
employeeId: _isHMGGroup ? _employeeIdController.text : null,
|
|
|
|
|
fullName: _fullNameController.text,
|
|
|
|
|
email: _emailController.text,
|
|
|
|
|
emailAddress: _emailController.text,
|
|
|
|
|
mobileNumber: _mobileController.text,
|
|
|
|
|
extensionNumber: _extensionController.text.isEmpty ? null : _extensionController.text,
|
|
|
|
|
siteId: _selectedSite?.id,
|
|
|
|
|
departmentId: _selectedDepartment?.id,
|
|
|
|
|
// For HMG: use ERP site/department, For non-HMG: use selected IDs
|
|
|
|
|
siteId: _isHMGGroup ? null : _selectedSite?.id,
|
|
|
|
|
erpSite: _isHMGGroup ? _employeeERPData?.branchCode : null,
|
|
|
|
|
departmentId: _isHMGGroup ? null : _selectedDepartment?.id,
|
|
|
|
|
erpDepartment: _isHMGGroup ? _employeeERPData?.branchName : null,
|
|
|
|
|
role: _roleController.text,
|
|
|
|
|
isFromERP: _isHMGGroup,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final success = await _signUpProvider.submitSignUpRequest(request);
|
|
|
|
|
|