|
|
|
|
@ -27,6 +27,7 @@ import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
|
|
|
|
|
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
|
|
|
|
|
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
|
|
|
|
|
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
|
|
|
|
|
import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart';
|
|
|
|
|
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
|
|
|
|
|
import 'package:test_sa/new_views/swipe_module/dialoge/single_btn_dialog.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/dialogs/dialog.dart';
|
|
|
|
|
@ -62,8 +63,8 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
// Selected values
|
|
|
|
|
AssetGroup? _selectedAssetGroup;
|
|
|
|
|
Company? _selectedCompany;
|
|
|
|
|
SiteModel? _selectedSite;
|
|
|
|
|
DepartmentModel? _selectedDepartment;
|
|
|
|
|
List<SiteModel> _selectedSite=[];
|
|
|
|
|
List<DepartmentModel> _selectedDepartment=[];
|
|
|
|
|
EmployeeERPModel? _employeeERPData; // Store the ERP employee data
|
|
|
|
|
bool _isHMGGroup = false;
|
|
|
|
|
bool _employeeFetched = false;
|
|
|
|
|
@ -352,43 +353,92 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget _buildSiteDropdown() {
|
|
|
|
|
return SingleItemDropDownMenu<SiteModel, SignupSiteProvider>(
|
|
|
|
|
|
|
|
|
|
return MultipleItemDropDownMenu<SiteModel, SignupSiteProvider>(
|
|
|
|
|
context: context,
|
|
|
|
|
title: "Site",
|
|
|
|
|
initialValue: _selectedSite,
|
|
|
|
|
showAsFullScreenDialog: true,
|
|
|
|
|
requestById: _selectedAssetGroup?.id,
|
|
|
|
|
onSelect: (value) {
|
|
|
|
|
// staticData: provider.roles,
|
|
|
|
|
// loading: provider.roleLoading,
|
|
|
|
|
showAsFullScreenDialog: true,
|
|
|
|
|
onSelect: (selectedSites) {
|
|
|
|
|
setState(() {
|
|
|
|
|
_selectedSite = value;
|
|
|
|
|
_selectedSite = selectedSites ?? [];
|
|
|
|
|
// Clear departments when sites change
|
|
|
|
|
_selectedDepartment = [];
|
|
|
|
|
// _rolesValidationError = null; // Clear error when roles are selected
|
|
|
|
|
});
|
|
|
|
|
// No need to fetch departments when site changes - they are independent
|
|
|
|
|
},
|
|
|
|
|
validator: (value) {
|
|
|
|
|
if (value == null) return "Site is required";
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
// Fetch departments based on selected sites
|
|
|
|
|
if (_selectedSite.isNotEmpty && _selectedAssetGroup?.id != null) {
|
|
|
|
|
final siteIds = _selectedSite.map((site) => site.id ?? 0).where((id) => id != 0).toList();
|
|
|
|
|
if (siteIds.isNotEmpty) {
|
|
|
|
|
_departmentProvider.getDepartmentsBySites(
|
|
|
|
|
siteIds: siteIds,
|
|
|
|
|
assetGroupId: _selectedAssetGroup!.id!,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// If no sites selected, clear departments
|
|
|
|
|
_departmentProvider.items = [];
|
|
|
|
|
_departmentProvider.notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
// return SingleItemDropDownMenu<SiteModel, SignupSiteProvider>(
|
|
|
|
|
// context: context,
|
|
|
|
|
// title: "Site",
|
|
|
|
|
// initialValue: _selectedSite,
|
|
|
|
|
// showAsFullScreenDialog: true,
|
|
|
|
|
// requestById: _selectedAssetGroup?.id,
|
|
|
|
|
// onSelect: (value) {
|
|
|
|
|
// setState(() {
|
|
|
|
|
// _selectedSite = value;
|
|
|
|
|
// });
|
|
|
|
|
// // No need to fetch departments when site changes - they are independent
|
|
|
|
|
// },
|
|
|
|
|
// validator: (value) {
|
|
|
|
|
// if (value == null) return "Site is required";
|
|
|
|
|
// return null;
|
|
|
|
|
// },
|
|
|
|
|
// );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget _buildDepartmentDropdown() {
|
|
|
|
|
return SingleItemDropDownMenu<DepartmentModel, SignupDepartmentProvider>(
|
|
|
|
|
|
|
|
|
|
return MultipleItemDropDownMenu<DepartmentModel, SignupDepartmentProvider>(
|
|
|
|
|
context: context,
|
|
|
|
|
title: "Department",
|
|
|
|
|
initialValue: _selectedDepartment,
|
|
|
|
|
showAsFullScreenDialog: true,
|
|
|
|
|
// showAsBottomSheet: true,
|
|
|
|
|
requestById: _selectedAssetGroup?.id,
|
|
|
|
|
onSelect: (value) {
|
|
|
|
|
// staticData: provider.roles,
|
|
|
|
|
// loading: provider.roleLoading,
|
|
|
|
|
showAsFullScreenDialog: true,
|
|
|
|
|
onSelect: (selectedDepartments) {
|
|
|
|
|
setState(() {
|
|
|
|
|
_selectedDepartment = value;
|
|
|
|
|
_selectedDepartment = selectedDepartments ?? [];
|
|
|
|
|
// _rolesValidationError = null; // Clear error when roles are selected
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
validator: (value) {
|
|
|
|
|
if (value == null) return "Department is required";
|
|
|
|
|
return null;
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
// return SingleItemDropDownMenu<DepartmentModel, SignupDepartmentProvider>(
|
|
|
|
|
// context: context,
|
|
|
|
|
// title: "Department",
|
|
|
|
|
// initialValue: _selectedDepartment,
|
|
|
|
|
// showAsFullScreenDialog: true,
|
|
|
|
|
// // showAsBottomSheet: true,
|
|
|
|
|
// requestById: _selectedAssetGroup?.id,
|
|
|
|
|
// onSelect: (value) {
|
|
|
|
|
// setState(() {
|
|
|
|
|
// _selectedDepartment = value;
|
|
|
|
|
// });
|
|
|
|
|
// },
|
|
|
|
|
// validator: (value) {
|
|
|
|
|
// if (value == null) return "Department is required";
|
|
|
|
|
// return null;
|
|
|
|
|
// },
|
|
|
|
|
// );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget _buildRoleField() {
|
|
|
|
|
@ -482,8 +532,8 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
_mobileController.clear();
|
|
|
|
|
_extensionController.clear();
|
|
|
|
|
_roleController.clear();
|
|
|
|
|
_selectedSite = null;
|
|
|
|
|
_selectedDepartment = null;
|
|
|
|
|
_selectedSite = [];
|
|
|
|
|
_selectedDepartment = [];
|
|
|
|
|
_employeeFetched = false;
|
|
|
|
|
_employeeERPData = null;
|
|
|
|
|
}
|
|
|
|
|
@ -520,13 +570,13 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Site is mandatory for HMG
|
|
|
|
|
if (_selectedSite == null) {
|
|
|
|
|
if (_selectedSite.isEmpty) {
|
|
|
|
|
Fluttertoast.showToast(msg: "Site is required");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
// // Department is mandatory for HMG
|
|
|
|
|
if (_selectedDepartment == null) {
|
|
|
|
|
if (_selectedDepartment.isEmpty) {
|
|
|
|
|
Fluttertoast.showToast(msg: "Department is required");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
@ -560,13 +610,13 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Site is mandatory for Non-HMG
|
|
|
|
|
if (_selectedSite == null) {
|
|
|
|
|
if (_selectedSite.isEmpty) {
|
|
|
|
|
Fluttertoast.showToast(msg: "Site is required");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Department is mandatory for Non-HMG
|
|
|
|
|
if (_selectedDepartment == null) {
|
|
|
|
|
if (_selectedDepartment.isEmpty) {
|
|
|
|
|
Fluttertoast.showToast(msg: "Department is required");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
@ -620,9 +670,11 @@ class _SignUpScreenState extends State<SignUpScreen> {
|
|
|
|
|
mobileNumber: _mobileController.text,
|
|
|
|
|
extensionNumber: _extensionController.text.isEmpty ? null : _extensionController.text,
|
|
|
|
|
// For HMG: send both selected IDs and ERP data
|
|
|
|
|
siteId: _selectedSite?.id,
|
|
|
|
|
// siteId: _selectedSite?.id,
|
|
|
|
|
siteIds: _selectedSite.map((site) => site.id??0).toList(),
|
|
|
|
|
// erpSite: _isHMGGroup ? _employeeERPData?.branchCode : null,
|
|
|
|
|
departmentId: _selectedDepartment?.id,
|
|
|
|
|
departmentIds: _selectedDepartment.map((department) => department.id??0).toList(),
|
|
|
|
|
// departmentIds: _selectedDepartment?.id,
|
|
|
|
|
// erpDepartment: _isHMGGroup ? _employeeERPData?.branchName : null,
|
|
|
|
|
role: _roleController.text,
|
|
|
|
|
isFromERP: _isHMGGroup,
|
|
|
|
|
|