|
|
|
|
@ -1,9 +1,12 @@
|
|
|
|
|
import 'dart:developer';
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
import 'package:test_sa/controllers/providers/api/user_provider.dart';
|
|
|
|
|
import 'package:test_sa/extensions/int_extensions.dart';
|
|
|
|
|
import 'package:test_sa/extensions/context_extension.dart';
|
|
|
|
|
import 'package:test_sa/extensions/string_extensions.dart';
|
|
|
|
|
import 'package:test_sa/extensions/text_extensions.dart';
|
|
|
|
|
import 'package:test_sa/extensions/widget_extensions.dart';
|
|
|
|
|
import 'package:test_sa/models/new_models/site.dart';
|
|
|
|
|
@ -159,7 +162,7 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
Widget _buildRequestTypeDropdown() {
|
|
|
|
|
return SingleItemDropDownMenu<RequestTypeModel, NullableLoadingProvider>(
|
|
|
|
|
context: context,
|
|
|
|
|
title: "Type of Site Request",
|
|
|
|
|
title: "Type of site request".addTranslation,
|
|
|
|
|
initialValue: _selectedRequestType,
|
|
|
|
|
staticData: _provider.requestTypes,
|
|
|
|
|
showAsFullScreenDialog: true,
|
|
|
|
|
@ -175,7 +178,7 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
|
|
|
|
|
// Fetch user's current sites if Change Site or Remove Site is selected
|
|
|
|
|
if ((_isChangeSiteRequest() || _isRemoveSiteRequest()) && value != null) {
|
|
|
|
|
final userId = _provider.getCurrentUserEmployeeId(_userProvider);
|
|
|
|
|
final userId = _provider.getCurrentUserUserId(_userProvider);
|
|
|
|
|
await _provider.fetchUserCurrentSites(userId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -200,28 +203,34 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
children: [
|
|
|
|
|
InfoHeader16Widget("Requester Information"),
|
|
|
|
|
// 8.height,
|
|
|
|
|
// InfoTextWidget(
|
|
|
|
|
// label: "Employee ID".addTranslation,
|
|
|
|
|
// value: _provider.getCurrentUserEmployeeId(_userProvider),
|
|
|
|
|
// showEmptyValue: true,
|
|
|
|
|
// ),
|
|
|
|
|
InfoTextWidget(
|
|
|
|
|
label: "Full Name",
|
|
|
|
|
label: "Full Name".addTranslation,
|
|
|
|
|
value: _provider.getCurrentUserFullName(_userProvider),
|
|
|
|
|
showEmptyValue: true,
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
InfoTextWidget(
|
|
|
|
|
label: "Email Address",
|
|
|
|
|
label: "Email Address".addTranslation,
|
|
|
|
|
value: _provider.getCurrentUserEmail(_userProvider),
|
|
|
|
|
showEmptyValue: true,
|
|
|
|
|
),
|
|
|
|
|
InfoTextWidget(
|
|
|
|
|
label: "Mobile Number",
|
|
|
|
|
label: "Mobile Number".addTranslation,
|
|
|
|
|
value: _provider.getCurrentUserMobile(_userProvider),
|
|
|
|
|
showEmptyValue: true,
|
|
|
|
|
),
|
|
|
|
|
InfoTextWidget(
|
|
|
|
|
label: "Extension Number",
|
|
|
|
|
label: "Extension Number".addTranslation,
|
|
|
|
|
value: _provider.getCurrentUserExtension(_userProvider),
|
|
|
|
|
showEmptyValue: true,
|
|
|
|
|
),
|
|
|
|
|
InfoTextWidget(
|
|
|
|
|
label: "Role",
|
|
|
|
|
label: "Role".addTranslation,
|
|
|
|
|
value: _provider.getCurrentUserRole(_userProvider),
|
|
|
|
|
showEmptyValue: true,
|
|
|
|
|
),
|
|
|
|
|
@ -311,7 +320,7 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
Widget _buildSiteMultiSelect() {
|
|
|
|
|
return MultipleItemDropDownMenu<Site, SiteProvider>(
|
|
|
|
|
context: context,
|
|
|
|
|
title: context.translation.bySite,
|
|
|
|
|
title: context.translation.site,
|
|
|
|
|
initialValue: _selectedSites,
|
|
|
|
|
showAsBottomSheet: true,
|
|
|
|
|
backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white,
|
|
|
|
|
@ -338,7 +347,7 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
Widget _buildDepartmentMultiSelect() {
|
|
|
|
|
return MultipleItemDropDownMenu<Department, DepartmentBySitesProvider>(
|
|
|
|
|
context: context,
|
|
|
|
|
title: "Departments",
|
|
|
|
|
title: "Department".addTranslation,
|
|
|
|
|
initialValue: _selectedDepartments,
|
|
|
|
|
showAsBottomSheet: true,
|
|
|
|
|
backgroundColor: context.isDark ? AppColor.neutral60 : Colors.white,
|
|
|
|
|
@ -380,16 +389,12 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
builder: (context, siteProvider, child) {
|
|
|
|
|
// Get ALL user's current site IDs to exclude from new site selection
|
|
|
|
|
final allUserCurrentSiteIds = _provider.userCurrentSites.map((s) => s.identifier ?? '').toSet();
|
|
|
|
|
|
|
|
|
|
// Filter out already selected new sites and ALL user's current sites
|
|
|
|
|
final alreadySelectedNewSites = _siteReplacements.values.where((r) => r.newSite != null).map((r) => r.newSite!.identifier).toSet();
|
|
|
|
|
|
|
|
|
|
final filteredSites = siteProvider.items.where((site) {
|
|
|
|
|
final siteId = site.identifier ?? '';
|
|
|
|
|
|
|
|
|
|
// Exclude ALL user's current sites (not just selected old sites)
|
|
|
|
|
if (allUserCurrentSiteIds.contains(siteId)) return false;
|
|
|
|
|
|
|
|
|
|
// Exclude already selected new sites (except current one)
|
|
|
|
|
if (replacement?.newSite?.identifier != siteId && alreadySelectedNewSites.contains(siteId)) {
|
|
|
|
|
return false;
|
|
|
|
|
@ -397,7 +402,6 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}).toList();
|
|
|
|
|
|
|
|
|
|
return Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
@ -502,6 +506,7 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
// Validation for Change Site request
|
|
|
|
|
if (_isChangeSiteRequest()) {
|
|
|
|
|
if (_selectedOldSites.isEmpty) {
|
|
|
|
|
"Please select at least one site".showToast;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -555,7 +560,7 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
|
|
|
|
|
final request = SiteRequestModel(
|
|
|
|
|
requestType: _selectedRequestType!.identifier?.toString() ?? '',
|
|
|
|
|
employeeId: _provider.getCurrentUserEmployeeId(_userProvider),
|
|
|
|
|
employeeId: _provider.getCurrentUserUserId(_userProvider),
|
|
|
|
|
fullName: _provider.getCurrentUserFullName(_userProvider),
|
|
|
|
|
emailAddress: _provider.getCurrentUserEmail(_userProvider),
|
|
|
|
|
mobileNumber: _provider.getCurrentUserMobile(_userProvider),
|
|
|
|
|
@ -582,8 +587,12 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// API will handle success/error toast messages
|
|
|
|
|
|
|
|
|
|
if (success && mounted) {
|
|
|
|
|
Navigator.pushReplacementNamed(context, SiteRequestHistoryScreen.routeName);
|
|
|
|
|
UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
|
|
|
|
|
await _provider.fetchSiteRequests(pageNumber: 1, pageSize: 10, userProvider: userProvider);
|
|
|
|
|
Navigator.pop(context);
|
|
|
|
|
// Navigator.pushReplacementNamed(context, SiteRequestHistoryScreen.routeName);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// For Add Site and Remove Site request types
|
|
|
|
|
@ -605,7 +614,7 @@ class _SiteRequestFormScreenState extends State<SiteRequestFormScreen> {
|
|
|
|
|
|
|
|
|
|
final request = SiteRequestModel(
|
|
|
|
|
requestType: _selectedRequestType!.identifier?.toString() ?? '',
|
|
|
|
|
employeeId: _provider.getCurrentUserEmployeeId(_userProvider),
|
|
|
|
|
employeeId: _provider.getCurrentUserUserId(_userProvider),
|
|
|
|
|
fullName: _provider.getCurrentUserFullName(_userProvider),
|
|
|
|
|
emailAddress: _provider.getCurrentUserEmail(_userProvider),
|
|
|
|
|
mobileNumber: _provider.getCurrentUserMobile(_userProvider),
|
|
|
|
|
|