traf request creation completed.

design_3.0_internal_audit_module
Sikander Saleem 2 weeks ago
parent dd19507fa1
commit 144951caec

@ -258,7 +258,7 @@ class URLs {
//Traf
static get addTRAF => "$_baseUrl/TRAF/AddTRAF"; // get
static get getTRAFById => "$_baseUrl/TRAF/GetTRAFById"; // get
static get getAssetNDAutoCompleteByDynamicCodes => "$_baseUrl/AssetNameDefinition/GetAssetNDAutoCompleteByDynamicCodes"; // get
static get getAssetNDAutoCompleteByDynamicCodes => "$_baseUrl/AssetNameDefinition/GetAssetNDAutoCompleteByDynamicCodes"; // get// get
//gas refill
static get getGasTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=606"; // get
@ -294,6 +294,7 @@ class URLs {
static get getTaskEvaluatorUser => "$_baseUrl/Account/GetUserByRoleValue?value=R-2"; // get
static get getNurses => "$_baseUrl/Account/GetUserByRoleValue?value=R-7"; // get
static get getNursesBySiteId => "$_baseUrl/Account/GetUserByRoleValueSiteAndAssetGroupBySiteId?value=R-7"; // get
static get getUsersBasedOnSearch => "$_baseUrl/Account/GetUsersBasedOnSearch"; // get
// pentry
static get getPentry => "$_baseUrl/return/pentry/details"; // get

@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/ppm/recurrent_wo.dart';
@ -130,6 +131,28 @@ class AllRequestsProvider extends ChangeNotifier {
SearchAllRequestsModel? searchedModel;
List<int> getStatues(BuildContext context) {
List<int> list = [1, 2, 3, 4];
if (context.userProvider.user!.type != UsersTypes.normal_user) {
list.add(5);
}
list.add(6); // task module
if (context.settingProvider.isUserFlowMedical && context.userProvider.user!.type != UsersTypes.normal_user) {
list.add(7); // task mod
}
if (context.userProvider.user!.type != UsersTypes.normal_user) {
list.add(8); //
}
if (context.userProvider.user!.type == UsersTypes.normal_user) {
list.add(9); //
}
return list;
}
Future<int> getAllRequests(BuildContext context, {int? typeTransaction, SearchAllRequestsModel? search}) async {
if (isAllLoading == true) return -2;
isAllLoading = true;
@ -143,7 +166,7 @@ class AllRequestsProvider extends ChangeNotifier {
}
final type = typeTransaction == null
? search?.typeTransaction == null || (search?.typeTransaction?.isEmpty ?? false)
? [1, 2, 3, 4, 5, 6,7]
? [1, 2, 3, 4, 5, 6, 7]
: search!.typeTransaction
: [typeTransaction];
List<int> status = (search?.statuses == null || (search?.statuses?.isEmpty ?? false)) ? (((search?.isArchived ?? false) ? [3] : [1, 2, 4])) : search!.statuses!;

@ -0,0 +1,64 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/new_models/asset_nd_auto_complete_by_dynamic_codes_model.dart';
import 'package:test_sa/models/new_models/users_based_on_search_model.dart';
import 'package:test_sa/models/service_request/spare_parts.dart';
class UserSearchProvider extends ChangeNotifier {
// number of items call in each request
final pageItemNumber = 20;
//reset provider data
void reset() {
_parts = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int? _stateCode;
int? get stateCode => _stateCode;
// true if there is next pagein product list and false if not
bool _nextPage = true;
bool get nextPage => _nextPage;
// contain user data
// when user not login or register _user = null
List<SparePartsWorkOrders>? _parts;
List<SparePartsWorkOrders>? get parts => _parts;
bool _loading = false;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
Future<List<UsersBasedOnSearchModel>> getUsersBasedOnSearch(String query) async {
late Response response;
try {
response = await ApiManager.instance.get(URLs.getUsersBasedOnSearch + "?searchText=$query");
List<UsersBasedOnSearchModel> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body);
page = categoriesListJson.map((part) => UsersBasedOnSearchModel.fromJson(part)).toList();
}
return page;
} catch (error) {
return [];
}
}
}

@ -19,6 +19,7 @@ import 'package:test_sa/controllers/providers/api/notifications_provider.dart';
import 'package:test_sa/controllers/providers/api/oracle_code_provider.dart';
import 'package:test_sa/controllers/providers/api/parts_provider.dart';
import 'package:test_sa/controllers/providers/api/ppm_provider.dart';
import 'package:test_sa/controllers/providers/api/search_user_provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/nurse_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart';
@ -211,6 +212,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => TrafRequestProvider()),
ChangeNotifierProvider(create: (_) => DepartmentLookupProvider()),
ChangeNotifierProvider(create: (_) => UserSearchProvider()),
///todo deleted
//ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()),

@ -0,0 +1,44 @@
class UsersBasedOnSearchModel {
String? userId;
String? userName;
String? email;
String? employeeId;
int? languageId;
String? extensionNo;
String? phoneNumber;
bool? isActive;
UsersBasedOnSearchModel(
{this.userId,
this.userName,
this.email,
this.employeeId,
this.languageId,
this.extensionNo,
this.phoneNumber,
this.isActive});
UsersBasedOnSearchModel.fromJson(Map<String, dynamic> json) {
userId = json['userId'];
userName = json['userName'];
email = json['email'];
employeeId = json['employeeId'];
languageId = json['languageId'];
extensionNo = json['extensionNo'];
phoneNumber = json['phoneNumber'];
isActive = json['isActive'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['userId'] = this.userId;
data['userName'] = this.userName;
data['email'] = this.email;
data['employeeId'] = this.employeeId;
data['languageId'] = this.languageId;
data['extensionNo'] = this.extensionNo;
data['phoneNumber'] = this.phoneNumber;
data['isActive'] = this.isActive;
return data;
}
}

@ -9,10 +9,12 @@ import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/traf_department.dart';
import 'package:test_sa/models/new_models/users_based_on_search_model.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/modules/traf_module/asset_auto_complete_field.dart';
import 'package:test_sa/modules/traf_module/traf_request_detail_page.dart';
import 'package:test_sa/modules/traf_module/update_traf_request_page.dart';
import 'package:test_sa/modules/traf_module/users_auto_complete_field.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
@ -43,7 +45,6 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
bool _acknowledgement = false;
Asset? asset;
Lookup? requestType;
@ -54,18 +55,24 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
TrafRequestDataModel? trafRequest;
List<Lookup> abc = [];
List<TrafDepartment> departments = [];
List<UsersBasedOnSearchModel> userBasedOnSearch = [];
FocusNode otherServicesEffectsNode = FocusNode();
FocusNode useInCombinationNode = FocusNode();
FocusNode departmentNode = FocusNode();
@override
void initState() {
super.initState();
trafRequest = TrafRequestDataModel(id: 0);
trafRequest = TrafRequestDataModel(id: 0, attachments: [], departments: [], qty: 1);
resetProviders();
}
void resetProviders() {
Provider.of<RequestTypeLookupProvider>(context, listen: false).reset();
Provider.of<YesNoLookupProvider>(context, listen: false).reset();
// Provider.of<YesNoLookupProvider>(context, listen: false).reset();
}
@override
@ -107,7 +114,7 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
trafRequest?.requestTypeId = value?.id;
if (requestType?.value == 1) {
trafRequest?.assetId = null;
trafRequest?.qty = null;
// trafRequest?.qty = 0;
} else if (requestType?.value == 2) {
trafRequest?.assetNDId = null;
}
@ -138,7 +145,7 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
onPick: (asset) async {
this.asset = asset;
trafRequest?.assetId = asset.id?.toInt();
trafRequest?.qty = 1;
// trafRequest?.qty = 1;
setState(() {});
// pendingAssetServiceRequest = null;
// _serviceRequest.device = asset;
@ -232,19 +239,42 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
},
),
12.height,
SingleItemDropDownMenu<Lookup, YesNoLookupProvider>(
context: context,
showAsBottomSheet: true,
backgroundColor: AppColor.neutral100,
showShadow: false,
height: 80,
title: "List down names & contact information of users going to use the technology & specify if they are part-time or full time?",
initialValue: isUsedSolelyOrShared,
onSelect: (value) {
// isUsedSolelyOrShared = value;
SearchUserAutoCompleteField(
clearAfterPick: true,
byName: true,
initialValue: "",
onPick: (user) {
userBasedOnSearch.add(user);
FocusScope.of(context).unfocus();
// model.partCatalogItem = PartCatalogItem(id: part.sparePart?.id, partNumber: part.sparePart?.partNo, partName: part.sparePart?.partName, oracleCode: part.sparePart?.oracleCode);
setState(() {});
},
),
if (userBasedOnSearch.isNotEmpty) ...[
// 12.height,
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
padding: const EdgeInsets.only(left: 12, right: 12),
itemBuilder: (cxt, index) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
dense: true,
contentPadding: EdgeInsets.zero,
title: Text("Name: ${userBasedOnSearch[index].userName ?? ""}"),
subtitle: Text("Email: ${userBasedOnSearch[index].email ?? ""}\nPhone: ${userBasedOnSearch[index].phoneNumber ?? ""}"),
trailing: const Icon(Icons.delete_rounded, color: Color(0xffF63939), size: 20).onPress(() {
userBasedOnSearch.removeAt(index);
setState(() {});
}),
),
],
),
separatorBuilder: (cxt, index) => Divider(thickness: 1, height: 1, color: context.isDark ? AppColor.neutral20 : AppColor.neutral30),
itemCount: userBasedOnSearch.length)
],
12.height,
SingleItemDropDownMenu<Lookup, YesNoLookupProvider>(
context: context,
@ -259,34 +289,33 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
trafRequest?.usingSolelyOrSharedId = value?.value;
if (isUsedSolelyOrShared?.value != 1) {
departments = [];
trafRequest?.departments = [];
trafRequest?.trafDepartments = [];
Provider.of<DepartmentLookupProvider>(context, listen: false).reset();
FocusScope.of(context).unfocus();
} else {
departmentNode.requestFocus();
}
setState(() {});
},
),
if (isUsedSolelyOrShared?.value == 1) ...[
12.height,
MultipleItemDropDownMenu<TrafDepartment, DepartmentLookupProvider>(
context: context,
showAsBottomSheet: true,
backgroundColor: AppColor.neutral100,
showShadow: false,
showCancel: true,
requestById: context.userProvider.user?.clientId,
title: "Please specify departments and relations",
initialValue: departments,
onSelect: (value) {
departments = value ?? [];
trafRequest?.departments = departments
.map((element) => Departments(
id: element.id!.toInt(),
trafId: element.id!.toInt(),
departmentId: element.id!.toInt(),
))
.toList();
// setState(() {});
},
Focus(
focusNode: departmentNode,
child: MultipleItemDropDownMenu<TrafDepartment, DepartmentLookupProvider>(
context: context,
showAsBottomSheet: true,
backgroundColor: AppColor.neutral100,
showShadow: false,
showCancel: true,
requestById: context.userProvider.user?.clientId,
title: "Please specify departments and relations",
initialValue: departments,
onSelect: (value) {
departments = value ?? [];
trafRequest?.trafDepartments = departments.map((element) => Departments(id: 0, trafId: 0, departmentId: element.id!.toInt())).toList();
},
),
),
],
12.height,
@ -303,8 +332,10 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
trafRequest?.isEffectedId = value?.value;
if (otherServicesEffects?.value != 1) {
trafRequest?.effectedServices = null;
FocusScope.of(context).unfocus();
} else {
otherServicesEffectsNode.requestFocus();
}
setState(() {});
},
),
@ -315,6 +346,7 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
// makeMultiLinesNull: true,
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
node: otherServicesEffectsNode,
labelText: "List down these services and stat how would it be effected",
backgroundColor: AppColor.fieldBgColor(context),
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
@ -338,6 +370,9 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
trafRequest?.isCombinationId = value?.value;
if (useInCombination?.value != 1) {
trafRequest?.usedWithCombination = null;
FocusScope.of(context).unfocus();
} else {
useInCombinationNode.requestFocus();
}
setState(() {});
},
@ -348,6 +383,7 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
initialValue: "",
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
node: useInCombinationNode,
labelText: "kindly describe in detail",
backgroundColor: AppColor.fieldBgColor(context),
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
@ -396,9 +432,13 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
void _verifyAndSubmit() async {
trafRequest?.employeeId = context.userProvider.user?.userID;
trafRequest?.siteId = context.userProvider.user?.clientId;
// Utils.showLoading(context);
// await Provider.of<TrafRequestProvider>(context, listen: false).addTraf(trafRequest!.toJson());
// Utils.hideLoading(context);
trafRequest?.trafContacts = [];
trafRequest?.trafContacts = userBasedOnSearch.map((item) => TrafContacts(id: 0, trafId: 0, name: item.userName)).toList();
Utils.showLoading(context);
await Provider.of<TrafRequestProvider>(context, listen: false).addTraf(trafRequest!.toJson());
Utils.hideLoading(context);
Navigator.pop(context);
Navigator.push(context, MaterialPageRoute(builder: (context) => TrafRequestDetailPage(trafId: 27)));
}
}

@ -51,7 +51,6 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
builder: (_, isLoading, __) {
if (isLoading) return const ALoading();
TrafRequestProvider trafProvider = Provider.of<TrafRequestProvider>(context, listen: false);
return Column(
children: [
ListView(
@ -66,16 +65,16 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
]
],
).expanded,
// if (isEngineer)
FooterActionButton.footerContainer(
context: context,
child: AppFilledButton(
buttonColor: AppColor.primary10,
label: "Update",
onPressed: () {
Navigator.pushNamed(context, UpdateTrafRequestPage.id);
}),
),
// // if (isEngineer)
// FooterActionButton.footerContainer(
// context: context,
// child: AppFilledButton(
// buttonColor: AppColor.primary10,
// label: "Update",
// onPressed: () {
// Navigator.pushNamed(context, UpdateTrafRequestPage.id);
// }),
// ),
],
);
},

@ -51,6 +51,7 @@ class TrafRequestDataModel {
int? positionId;
String? positionName;
List<Departments>? departments;
List<Departments>? trafDepartments;
int? siteId;
String? siteName;
String? requesterExtensionNumber;
@ -144,6 +145,7 @@ class TrafRequestDataModel {
this.positionId,
this.positionName,
this.departments,
this.trafDepartments,
this.siteId,
this.siteName,
this.requesterExtensionNumber,
@ -242,6 +244,12 @@ class TrafRequestDataModel {
departments!.add(new Departments.fromJson(v));
});
}
if (json['trafDepartments'] != null) {
trafDepartments = <Departments>[];
json['trafDepartments'].forEach((v) {
trafDepartments!.add(new Departments.fromJson(v));
});
}
siteId = json['siteId'];
siteName = json['siteName'];
requesterExtensionNumber = json['requesterExtensionNumber'];
@ -354,6 +362,9 @@ class TrafRequestDataModel {
if (this.departments != null) {
data['departments'] = this.departments!.map((v) => v.toJson()).toList();
}
if (this.trafDepartments != null) {
data['trafDepartments'] = this.trafDepartments!.map((v) => v.toJson()).toList();
}
data['siteId'] = this.siteId;
data['siteName'] = this.siteName;
data['requesterExtensionNumber'] = this.requesterExtensionNumber;
@ -452,15 +463,17 @@ class TrafRequestDataModel {
class TrafContacts {
int? id;
int? trafId;
String? userId;
String? name;
String? telephone;
String? notes;
TrafContacts({this.id, this.trafId, this.name, this.telephone, this.notes});
TrafContacts({this.id, this.trafId, this.userId, this.name, this.telephone, this.notes});
TrafContacts.fromJson(Map<String, dynamic> json) {
id = json['id'];
trafId = json['trafId'];
userId = json['userId'];
name = json['name'];
telephone = json['telephone'];
notes = json['notes'];
@ -470,6 +483,7 @@ class TrafContacts {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['trafId'] = this.trafId;
data['userId'] = this.userId;
data['name'] = this.name;
data['telephone'] = this.telephone;
data['notes'] = this.notes;

@ -87,7 +87,7 @@ class _UpdateTrafRequestPageState extends State<UpdateTrafRequestPage> {
initialValue: classificationType,
onSelect: (value) {
classificationType = value;
trafRequest?.cla = value?.value;
// trafRequest?.cla = value?.value;
// setState(() {});
},
),

@ -0,0 +1,134 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/oracle_code_provider.dart';
import 'package:test_sa/controllers/providers/api/parts_provider.dart';
import 'package:test_sa/controllers/providers/api/search_user_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/new_models/asset_nd_auto_complete_by_dynamic_codes_model.dart';
import 'package:test_sa/models/new_models/users_based_on_search_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import '../../../extensions/text_extensions.dart';
import '../../../models/service_request/spare_parts.dart';
import '../../../new_views/app_style/app_text_style.dart';
class SearchUserAutoCompleteField extends StatefulWidget {
final String initialValue;
final num? assetId;
final bool clearAfterPick, byName;
final Function(UsersBasedOnSearchModel) onPick;
const SearchUserAutoCompleteField({Key? key, required this.byName, required this.initialValue, this.assetId, required this.onPick, this.clearAfterPick = true}) : super(key: key);
@override
_UsersAutoCompleteFieldState createState() => _UsersAutoCompleteFieldState();
}
class _UsersAutoCompleteFieldState extends State<SearchUserAutoCompleteField> {
late UserSearchProvider _TechnologyUsersProvider;
late TextEditingController _controller;
bool loading = false;
@override
void initState() {
_controller = TextEditingController(text: widget.initialValue);
super.initState();
_TechnologyUsersProvider = Provider.of<UserSearchProvider>(context, listen: false);
}
@override
void didUpdateWidget(covariant SearchUserAutoCompleteField oldWidget) {
if (widget.initialValue != oldWidget.initialValue) {
_controller = TextEditingController(text: widget.initialValue);
}
super.didUpdateWidget(oldWidget);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(10));
return Container(
decoration: BoxDecoration(
color: AppColor.background(context),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: Autocomplete<UsersBasedOnSearchModel>(
optionsBuilder: (TextEditingValue textEditingValue) async {
if (textEditingValue.text.isEmpty) {
if (loading) {
setState(() {
loading = false;
});
}
return const Iterable<UsersBasedOnSearchModel>.empty();
}
if (!loading) {
setState(() {
loading = true;
});
}
List<UsersBasedOnSearchModel> workOrders = (await _TechnologyUsersProvider.getUsersBasedOnSearch(textEditingValue.text));
setState(() {
loading = false;
});
return workOrders;
},
displayStringForOption: (UsersBasedOnSearchModel option) => widget.byName ? option.userName ?? "" : option.employeeId ?? "",
fieldViewBuilder: (BuildContext context, TextEditingController fieldTextEditingController, FocusNode fieldFocusNode, VoidCallback onFieldSubmitted) {
return TextField(
controller: _controller,
focusNode: fieldFocusNode,
style: AppTextStyles.bodyText.copyWith(color: AppColor.black10),
textAlign: TextAlign.start,
decoration: InputDecoration(
border: border,
disabledBorder: border,
focusedBorder: border,
enabledBorder: border,
errorBorder: border,
contentPadding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: 16.toScreenWidth),
constraints: const BoxConstraints(),
suffixIconConstraints: const BoxConstraints(maxHeight: 24, maxWidth: 24 + 8),
filled: true,
fillColor: AppColor.fieldBgColor(context),
errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60),
floatingLabelStyle: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20),
labelText: "Users going to use technology",
labelStyle: AppTextStyles.tinyFont.copyWith(color: AppColor.textColor(context)),
suffixIcon: loading ? const CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 3.0).paddingOnly(end: 8) : null,
),
textInputAction: TextInputAction.search,
onChanged: (text) {
fieldTextEditingController.text = text;
},
onSubmitted: (String value) {
onFieldSubmitted();
},
);
},
onSelected: (UsersBasedOnSearchModel selection) {
if (widget.clearAfterPick) {
_controller.clear();
} else {
_controller.text = widget.byName ? (selection.userName ?? "") : (selection.employeeId ?? "");
}
widget.onPick(selection);
},
),
);
}
}

@ -103,7 +103,7 @@ class CreateRequestModel {
list.add(CreateRequestModel(context.translation.transferAsset, "add_icon", CreateDeviceTransferRequest.id));
//TODO uncommit this to enable task.
list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id));
list.add(CreateRequestModel("Traf".addTranslation, "add_icon", CreateTRAFRequestPage.id));
list.add(CreateRequestModel("TRAF".addTranslation, "add_icon", CreateTRAFRequestPage.id));
}
return list;
}

@ -75,6 +75,10 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
if (context.settingProvider.isUserFlowMedical) {
types['Recall and Alert'] = 7;
}
if (!isEngineer) {
types['TRAF'] = 9;
}
final statuses = {
"All WO": 0,
context.translation.open: 1,

@ -50,6 +50,9 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
if (context.settingProvider.isUserFlowMedical) {
requestsList.add(Request(7, 'Recall and Alert'));
}
if (context.userProvider.user!.type == UsersTypes.normal_user) {
requestsList.add(Request(9, 'TRAF'));
}
_provider = Provider.of<AllRequestsProvider>(context, listen: false);
_provider!.reset();

Loading…
Cancel
Save