receiver name added on new transfer request & improvements

main_design2.0
Sikander Saleem 2 years ago
parent 5d706d89b4
commit a6dd802321

@ -111,7 +111,8 @@ class URLs {
// employee // employee
static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get
static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get /// TODO : we also need to send the asset id static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get
static get getNurses => "$_baseUrl/Account/GetUserByRoleValue?value=R-7"; // get
// pentry // pentry
static get getPentry => "$_baseUrl/return/pentry/details"; // get static get getPentry => "$_baseUrl/return/pentry/details"; // get

@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/employee.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class EngineersProvider extends ChangeNotifier { class EngineersProvider extends ChangeNotifier {
@ -24,9 +24,9 @@ class EngineersProvider extends ChangeNotifier {
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Engineer> _items; List<Employee> _items;
List<Engineer> get items => _items; List<Employee> get items => _items;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
@ -58,7 +58,7 @@ class EngineersProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(response.body); List categoriesListJson = json.decode(response.body);
_items = categoriesListJson.map((type) => Engineer.fromJson(type)).toList(); _items = categoriesListJson.map((type) => Employee.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();

@ -0,0 +1,57 @@
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/employee.dart';
import 'package:test_sa/models/user.dart';
class NurseProvider extends ChangeNotifier {
//reset provider data
void reset() {
_items = null;
_stateCode = null;
}
int _stateCode;
int get stateCode => _stateCode;
List<Employee> _items;
List<Employee> get nursesList => _items;
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
Future<int> getData() async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(URLs.getNurses);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body);
_items = categoriesListJson.map((type) => Employee.fromJson(type)).toList();
_items.sort((a, b) => a.name.compareTo(b.name));
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/employee.dart';
import '../../../../../models/new_models/assigned_employee.dart'; import '../../../../../models/new_models/assigned_employee.dart';
import '../../../../../models/new_models/assistant_employee.dart'; import '../../../../../models/new_models/assistant_employee.dart';
@ -68,7 +68,7 @@ class ServiceReportAssistantsEmployeeProvider extends ChangeNotifier {
// client's request was successfully received // client's request was successfully received
List usersListJson = json.decode(response.body); List usersListJson = json.decode(response.body);
_assistantEmployees = []; _assistantEmployees = [];
_assistantEmployees = usersListJson.map((type) => Engineer.fromJson(type ?? {})).map((e) => AssistantEmployees(user: AssignedEmployee(id: e.id, name: e.name))).toList(); _assistantEmployees = usersListJson.map((type) => Employee.fromJson(type ?? {})).map((e) => AssistantEmployees(user: AssignedEmployee(id: e.id, name: e.name))).toList();
_assistantEmployees.insert(0, AssistantEmployees(id: -1, user: AssignedEmployee(id: "-1", name: "-- Select --"))); _assistantEmployees.insert(0, AssistantEmployees(id: -1, user: AssignedEmployee(id: "-1", name: "-- Select --")));
} }
_loading = false; _loading = false;

@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/employee.dart';
class ServiceReportUsersProvider extends ChangeNotifier { class ServiceReportUsersProvider extends ChangeNotifier {
//reset provider data //reset provider data
@ -24,9 +24,9 @@ class ServiceReportUsersProvider extends ChangeNotifier {
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Engineer> _engineers; List<Employee> _engineers;
List<Engineer> get engineers => _engineers; List<Employee> get engineers => _engineers;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
@ -62,7 +62,7 @@ class ServiceReportUsersProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List usersListJson = json.decode(response.body); List usersListJson = json.decode(response.body);
_engineers = usersListJson.map((type) => Engineer.fromJson(type)).toList(); _engineers = usersListJson.map((type) => Employee.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();

@ -19,6 +19,7 @@ import 'package:test_sa/controllers/providers/api/ppm_provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_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/gas_refill/gas_cylinder_size_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart';
@ -141,6 +142,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => CylinderSizeProvider()), ChangeNotifierProvider(create: (_) => CylinderSizeProvider()),
ChangeNotifierProvider(create: (_) => DepartmentProvider()), ChangeNotifierProvider(create: (_) => DepartmentProvider()),
ChangeNotifierProvider(create: (_) => SiteProvider()), ChangeNotifierProvider(create: (_) => SiteProvider()),
ChangeNotifierProvider(create: (_) => NurseProvider()),
ChangeNotifierProvider(create: (_) => HospitalsProvider()), ChangeNotifierProvider(create: (_) => HospitalsProvider()),
ChangeNotifierProvider(create: (_) => AssetProvider()), ChangeNotifierProvider(create: (_) => AssetProvider()),
ChangeNotifierProvider(create: (_) => AllRequestsProvider()), ChangeNotifierProvider(create: (_) => AllRequestsProvider()),

@ -26,6 +26,7 @@ class AssetTransfer {
this.senderMachineStatusId, this.senderMachineStatusId,
this.senderComment, this.senderComment,
this.comment, this.comment,
this.receiverEndUserId,
this.senderStartDate, this.senderStartDate,
this.senderEndDate, this.senderEndDate,
this.senderWorkingHours, this.senderWorkingHours,
@ -90,6 +91,7 @@ class AssetTransfer {
senderMachineStatusId = json['senderMachineStatusId']; senderMachineStatusId = json['senderMachineStatusId'];
senderComment = json['senderComment']; senderComment = json['senderComment'];
comment = json['comment']; comment = json['comment'];
receiverEndUserId = json['receiverEndUserId'];
senderStartDate = json['senderStartDate']; senderStartDate = json['senderStartDate'];
senderEndDate = json['senderEndDate']; senderEndDate = json['senderEndDate'];
senderWorkingHours = json['senderWorkingHours']; senderWorkingHours = json['senderWorkingHours'];
@ -182,6 +184,7 @@ class AssetTransfer {
num senderMachineStatusId; num senderMachineStatusId;
String senderComment; String senderComment;
String comment; String comment;
String receiverEndUserId;
String senderStartDate; String senderStartDate;
String senderEndDate; String senderEndDate;
String senderWorkingHours; String senderWorkingHours;
@ -238,6 +241,7 @@ class AssetTransfer {
num senderMachineStatusId, num senderMachineStatusId,
String senderComment, String senderComment,
String comment, String comment,
String receiverEndUserId,
String senderStartDate, String senderStartDate,
String senderEndDate, String senderEndDate,
String senderWorkingHours, String senderWorkingHours,
@ -302,6 +306,7 @@ class AssetTransfer {
senderMachineStatusId: senderMachineStatusId ?? this.senderMachineStatusId, senderMachineStatusId: senderMachineStatusId ?? this.senderMachineStatusId,
senderComment: senderComment ?? this.senderComment, senderComment: senderComment ?? this.senderComment,
comment: comment ?? this.comment, comment: comment ?? this.comment,
receiverEndUserId: receiverEndUserId ?? this.receiverEndUserId,
senderStartDate: senderStartDate ?? this.senderStartDate, senderStartDate: senderStartDate ?? this.senderStartDate,
senderEndDate: senderEndDate ?? this.senderEndDate, senderEndDate: senderEndDate ?? this.senderEndDate,
senderWorkingHours: senderWorkingHours ?? this.senderWorkingHours, senderWorkingHours: senderWorkingHours ?? this.senderWorkingHours,
@ -366,6 +371,7 @@ class AssetTransfer {
map['senderMachineStatusId'] = senderMachineStatusId; map['senderMachineStatusId'] = senderMachineStatusId;
map['senderComment'] = senderComment; map['senderComment'] = senderComment;
map['comment'] = comment; map['comment'] = comment;
map['receiverEndUserId'] = receiverEndUserId;
map['senderStartDate'] = senderStartDate; map['senderStartDate'] = senderStartDate;
map['senderEndDate'] = senderEndDate; map['senderEndDate'] = senderEndDate;
map['senderWorkingHours'] = senderWorkingHours; map['senderWorkingHours'] = senderWorkingHours;
@ -434,6 +440,7 @@ class AssetTransfer {
map['senderMachineStatusId'] = senderMachineStatusId; map['senderMachineStatusId'] = senderMachineStatusId;
map['senderComment'] = senderComment; map['senderComment'] = senderComment;
map['comment'] = comment; map['comment'] = comment;
map['receiverEndUserId'] = receiverEndUserId;
map['senderStartDate'] = senderStartDate; map['senderStartDate'] = senderStartDate;
map['senderEndDate'] = senderEndDate; map['senderEndDate'] = senderEndDate;
map['senderWorkingHours'] = senderWorkingHours; map['senderWorkingHours'] = senderWorkingHours;
@ -476,6 +483,7 @@ class AssetTransfer {
senderMachineStatusId = assetTransfer.senderMachineStatusId; senderMachineStatusId = assetTransfer.senderMachineStatusId;
senderComment = assetTransfer.senderComment; senderComment = assetTransfer.senderComment;
comment = assetTransfer.comment; comment = assetTransfer.comment;
receiverEndUserId = assetTransfer.receiverEndUserId;
senderStartDate = assetTransfer.senderStartDate; senderStartDate = assetTransfer.senderStartDate;
senderEndDate = assetTransfer.senderEndDate; senderEndDate = assetTransfer.senderEndDate;
senderWorkingHours = assetTransfer.senderWorkingHours; senderWorkingHours = assetTransfer.senderWorkingHours;

@ -1,29 +1,29 @@
class Engineer { class Employee {
String id; String id;
String name; String name;
Engineer({ Employee({
this.id, this.id,
this.name, this.name,
}); });
factory Engineer.fromJson(Map<String, dynamic> parsedJson) { factory Employee.fromJson(Map<String, dynamic> parsedJson) {
if (parsedJson == null) return Engineer(); if (parsedJson == null) return Employee();
return Engineer( return Employee(
id: parsedJson["userId"] ?? parsedJson["id"], id: parsedJson["userId"] ?? parsedJson["id"],
name: parsedJson["userName"] ?? parsedJson["name"], name: parsedJson["userName"] ?? parsedJson["name"],
); );
} }
factory Engineer.fromEngineer(Engineer department) { factory Employee.fromEngineer(Employee department) {
return Engineer( return Employee(
id: department?.id, id: department?.id,
name: department?.name, name: department?.name,
); );
} }
@override @override
bool operator ==(Object other) => identical(this, other) || other is Engineer && id == other.id; bool operator ==(Object other) => identical(this, other) || other is Employee && id == other.id;
@override @override
int get hashCode => id.hashCode; int get hashCode => id.hashCode;

@ -10,10 +10,13 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/device/asset_transfer.dart'; import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/employee.dart';
import 'package:test_sa/models/new_models/department.dart'; import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/floor.dart'; import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/new_models/room_model.dart'; import 'package:test_sa/models/new_models/room_model.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/status/employee/nurse_menu.dart';
import 'package:test_sa/views/widgets/status/nurse_employee_menu.dart';
import '../../../models/new_models/building.dart'; import '../../../models/new_models/building.dart';
import '../../../models/new_models/site.dart'; import '../../../models/new_models/site.dart';
@ -44,6 +47,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
final TextEditingController _receiverNameController = TextEditingController(), _commentsController = TextEditingController(); final TextEditingController _receiverNameController = TextEditingController(), _commentsController = TextEditingController();
final Asset _assetDestination = Asset(); final Asset _assetDestination = Asset();
Asset _pickedAsset; Asset _pickedAsset;
Employee receiverEndUser;
@override @override
void setState(VoidCallback fn) { void setState(VoidCallback fn) {
@ -57,6 +61,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
_transferModel.destFloorId = _assetDestination.floor?.id; _transferModel.destFloorId = _assetDestination.floor?.id;
_transferModel.destDepartmentId = _assetDestination.department?.id; _transferModel.destDepartmentId = _assetDestination.department?.id;
_transferModel.destRoomId = _assetDestination.room?.id; _transferModel.destRoomId = _assetDestination.room?.id;
_transferModel.receiverEndUserId = _selectedNurse.id;
if (!_formKey.currentState.validate() || !(await _transferModel.validate(context))) { if (!_formKey.currentState.validate() || !(await _transferModel.validate(context))) {
return; return;
} }
@ -73,11 +78,16 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
super.dispose(); super.dispose();
} }
Employee _selectedNurse;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context, listen: false); _userProvider = Provider.of<UserProvider>(context, listen: false);
_settingProvider = Provider.of<SettingProvider>(context, listen: false); _settingProvider = Provider.of<SettingProvider>(context, listen: false);
_deviceTransferProvider = Provider.of<AssetTransferProvider>(context, listen: false); _deviceTransferProvider = Provider.of<AssetTransferProvider>(context, listen: false);
_selectedNurse ??= Employee(id: _userProvider.user.userID, name: _userProvider.user.username);
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: DefaultAppBar(title: context.translation.newTransferRequest), appBar: DefaultAppBar(title: context.translation.newTransferRequest),
@ -101,13 +111,15 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
16.height, 16.height,
context.translation.receiverDetails.heading5(context), context.translation.receiverDetails.heading5(context),
8.height, 8.height,
NurseMenu(
/// todo [TBD] : receiverName title: context.translation.receiverName,
AppTextFormField( initialValue: _selectedNurse,
controller: _receiverNameController, onSelect: (employee) {
labelText: context.translation.receiverName, if (employee != null) {
//validator: (text) => Validator.hasValue(text) ? null : context.translation.requiredField, _selectedNurse = employee;
onSaved: (text) {}, setState(() {});
}
},
), ),
8.height, 8.height,
SingleItemDropDownMenu<Site, SiteProvider>( SingleItemDropDownMenu<Site, SiteProvider>(

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/employee.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/views/pages/sub_workorder/workorder_list.dart'; import 'package:test_sa/views/pages/sub_workorder/workorder_list.dart';
@ -111,7 +111,7 @@ class _SearchSubWorkOrderPageState extends State<SearchSubWorkOrderPage> {
ASubTitle(context.translation.assignedEmployee), ASubTitle(context.translation.assignedEmployee),
const SizedBox(height: 4), const SizedBox(height: 4),
ServiceReportAllUsers( ServiceReportAllUsers(
initialValue: _searchWorkOrders.assignedEmployee == null ? null : Engineer(id: _searchWorkOrders.assignedEmployee.id, name: _searchWorkOrders.assignedEmployee.name), initialValue: _searchWorkOrders.assignedEmployee == null ? null : Employee(id: _searchWorkOrders.assignedEmployee.id, name: _searchWorkOrders.assignedEmployee.name),
onSelect: (engineer) { onSelect: (engineer) {
_searchWorkOrders.assignedEmployee = AssignedEmployee(id: engineer.id, name: engineer.name); _searchWorkOrders.assignedEmployee = AssignedEmployee(id: engineer.id, name: engineer.name);
}, },

@ -12,7 +12,7 @@ import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/status/employee/assigned_to_mune.dart'; import 'package:test_sa/views/widgets/status/employee/assigned_to_menu.dart';
class ServiceRequestsUpdateDialog extends StatefulWidget { class ServiceRequestsUpdateDialog extends StatefulWidget {
final ServiceRequest request; final ServiceRequest request;

@ -10,7 +10,7 @@ import 'package:test_sa/views/widgets/status/service_request/service_request_sta
import 'package:test_sa/views/widgets/switch_button.dart'; import 'package:test_sa/views/widgets/switch_button.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../models/engineer.dart'; import '../../../models/employee.dart';
import '../../../models/new_models/assigned_employee.dart'; import '../../../models/new_models/assigned_employee.dart';
import '../app_text_form_field.dart'; import '../app_text_form_field.dart';
import '../date_and_time/date_picker.dart'; import '../date_and_time/date_picker.dart';
@ -220,7 +220,7 @@ class _ServiceRequestsSearchDialogState extends State<ServiceRequestsSearchDialo
ASubTitle(context.translation.assignedEmployee), ASubTitle(context.translation.assignedEmployee),
const SizedBox(height: 4), const SizedBox(height: 4),
ServiceReportAllUsers( ServiceReportAllUsers(
initialValue: _search.assignedEmployee == null ? null : Engineer(id: _search.assignedEmployee.id, name: _search.assignedEmployee.name), initialValue: _search.assignedEmployee == null ? null : Employee(id: _search.assignedEmployee.id, name: _search.assignedEmployee.name),
onSelect: (engineer) { onSelect: (engineer) {
_search.assignedEmployee = AssignedEmployee(id: engineer.id, name: engineer.name); _search.assignedEmployee = AssignedEmployee(id: engineer.id, name: engineer.name);
}, },

@ -0,0 +1,35 @@
// import 'package:flutter/material.dart';
// import 'package:provider/provider.dart';
// import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_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/models/employee.dart';
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
// import 'package:test_sa/views/widgets/status/employee/single_type_menu.dart';
//
// class EngineersMenu extends StatelessWidget {
// final Function(Employee) onSelect;
// final Employee initialValue;
//
// const EngineersMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
//
// @override
// Widget build(BuildContext context) {
// final settingProvider = Provider.of<SettingProvider>(context);
// final userProvider = Provider.of<UserProvider>(context);
// final menuProvider = Provider.of<EngineersProvider>(context);
// return LoadingManager(
// isLoading: menuProvider.isLoading,
// isFailedLoading: menuProvider.items == null,
// stateCode: menuProvider.stateCode,
// onRefresh: () async {
// menuProvider.reset();
// await menuProvider.getData(user: userProvider.user, host: settingProvider.host);
// },
// child: SingleEngineerMenu(
// initialStatus: initialValue,
// engineers: menuProvider.items,
// onSelect: onSelect,
// ));
// }
// }

@ -1,35 +0,0 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_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/models/engineer.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/employee/single_type_menu.dart';
class EngineersMenu extends StatelessWidget {
final Function(Engineer) onSelect;
final Engineer initialValue;
const EngineersMenu({Key key, this.onSelect, this.initialValue}) : super(key: key);
@override
Widget build(BuildContext context) {
final settingProvider = Provider.of<SettingProvider>(context);
final userProvider = Provider.of<UserProvider>(context);
final menuProvider = Provider.of<EngineersProvider>(context);
return LoadingManager(
isLoading: menuProvider.isLoading,
isFailedLoading: menuProvider.items == null,
stateCode: menuProvider.stateCode,
onRefresh: () async {
menuProvider.reset();
await menuProvider.getData(user: userProvider.user, host: settingProvider.host);
},
child: SingleEngineerMenu(
initialStatus: initialValue,
engineers: menuProvider.items,
onSelect: onSelect,
));
}
}

@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/nurse_provider.dart';
import 'package:test_sa/models/employee.dart';
import 'package:test_sa/models/new_models/assistant_employee.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/assistant_employee_menu.dart';
import 'package:test_sa/views/widgets/status/nurse_employee_menu.dart';
import '../../../../controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart';
class NurseMenu extends StatelessWidget {
final Function(Employee) onSelect;
final Employee initialValue;
final String title;
final bool enable;
const NurseMenu({Key key, @required this.onSelect, this.title, this.initialValue, this.enable = true}) : super(key: key);
@override
Widget build(BuildContext context) {
NurseProvider menuProvider = Provider.of<NurseProvider>(context);
return LoadingManager(
isLoading: menuProvider.isLoading,
isFailedLoading: menuProvider.nursesList == null,
stateCode: menuProvider.stateCode,
onRefresh: () async {
await menuProvider.getData();
// menuProvider.setStateCode = null;
},
child: NurseEmployeeMenu(
initialValue: initialValue,
title: title,
list: menuProvider.nursesList,
onSelect: (employee) {
onSelect(employee);
},
enable: enable,
),
);
}
}

@ -1,86 +1,86 @@
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:test_sa/models/engineer.dart'; // import 'package:test_sa/models/employee.dart';
import 'package:test_sa/views/app_style/sizing.dart'; // import 'package:test_sa/views/app_style/sizing.dart';
//
class SingleEngineerMenu extends StatefulWidget { // class SingleEngineerMenu extends StatefulWidget {
final List<Engineer> engineers; // final List<Employee> engineers;
final Engineer initialStatus; // final Employee initialStatus;
final Function(Engineer) onSelect; // final Function(Employee) onSelect;
//
const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key); // const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key);
//
@override // @override
_SingleEngineerMenuState createState() => _SingleEngineerMenuState(); // _SingleEngineerMenuState createState() => _SingleEngineerMenuState();
} // }
//
class _SingleEngineerMenuState extends State<SingleEngineerMenu> { // class _SingleEngineerMenuState extends State<SingleEngineerMenu> {
Engineer _selectedStatus; // Employee _selectedStatus;
//
@override // @override
void didUpdateWidget(covariant SingleEngineerMenu oldWidget) { // void didUpdateWidget(covariant SingleEngineerMenu oldWidget) {
if (widget.initialStatus != null && widget.initialStatus.id != null) { // if (widget.initialStatus != null && widget.initialStatus.id != null) {
_selectedStatus = widget.engineers?.firstWhere((element) { // _selectedStatus = widget.engineers?.firstWhere((element) {
return element == widget.initialStatus; // return element == widget.initialStatus;
}); // });
widget.onSelect(_selectedStatus); // widget.onSelect(_selectedStatus);
} else { // } else {
_selectedStatus = null; // _selectedStatus = null;
} // }
super.didUpdateWidget(oldWidget); // super.didUpdateWidget(oldWidget);
} // }
//
@override // @override
void initState() { // void initState() {
if (widget.initialStatus != null && widget.initialStatus.id != null) { // if (widget.initialStatus != null && widget.initialStatus.id != null) {
_selectedStatus = widget.engineers?.firstWhere((element) { // _selectedStatus = widget.engineers?.firstWhere((element) {
return element == widget.initialStatus; // return element == widget.initialStatus;
}); // });
widget.onSelect(_selectedStatus); // widget.onSelect(_selectedStatus);
} // }
//
super.initState(); // super.initState();
} // }
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return Container( // return Container(
padding: const EdgeInsets.symmetric(horizontal: 16), // padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration( // decoration: BoxDecoration(
color: Colors.white, // color: Colors.white,
// border: Border.all(color: AColors.black), // // border: Border.all(color: AColors.black),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), // borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
boxShadow: const [AppStyle.boxShadow]), // boxShadow: const [AppStyle.boxShadow]),
child: DropdownButton<Engineer>( // child: DropdownButton<Employee>(
value: _selectedStatus, // value: _selectedStatus,
iconSize: 24, // iconSize: 24,
elevation: 16, // elevation: 16,
isExpanded: true, // isExpanded: true,
hint: Text( // hint: Text(
"Select", // "Select",
style: Theme.of(context).textTheme.subtitle1, // style: Theme.of(context).textTheme.subtitle1,
), // ),
style: TextStyle(color: Theme.of(context).primaryColor), // style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(), // underline: SizedBox.shrink(),
onChanged: (Engineer newValue) { // onChanged: (Employee newValue) {
setState(() { // setState(() {
_selectedStatus = newValue; // _selectedStatus = newValue;
}); // });
widget.onSelect(newValue); // widget.onSelect(newValue);
}, // },
items: widget.engineers.map<DropdownMenuItem<Engineer>>((Engineer value) { // items: widget.engineers.map<DropdownMenuItem<Employee>>((Employee value) {
return DropdownMenuItem<Engineer>( // return DropdownMenuItem<Employee>(
value: value, // value: value,
child: Text( // child: Text(
value.name, // value.name,
style: Theme.of(context).textTheme.subtitle1.copyWith( // style: Theme.of(context).textTheme.subtitle1.copyWith(
color: Theme.of(context).primaryColor, // color: Theme.of(context).primaryColor,
fontSize: 11, // fontSize: 11,
//fontWeight: FontWeight.bold // //fontWeight: FontWeight.bold
), // ),
), // ),
); // );
}).toList(), // }).toList(),
), // ),
); // );
} // }
} // }

@ -0,0 +1,130 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/employee.dart';
import '../../../models/new_models/assistant_employee.dart';
import '../../../new_views/app_style/app_color.dart';
class NurseEmployeeMenu extends StatefulWidget {
final List<Employee> list;
final Employee initialValue;
final Function(Employee) onSelect;
final String title;
final bool enable;
const NurseEmployeeMenu({Key key, this.list, this.title, this.onSelect, this.initialValue, this.enable = true}) : super(key: key);
@override
_SingleNurseEmployeeMenuState createState() => _SingleNurseEmployeeMenuState();
}
class _SingleNurseEmployeeMenuState extends State<NurseEmployeeMenu> {
Employee _selectedStatus;
@override
void setState(VoidCallback fn) {
if (mounted) super.setState(fn);
}
@override
void didUpdateWidget(covariant NurseEmployeeMenu oldWidget) {
if (widget.initialValue != null) {
final result = widget.list?.where((element) {
return element?.id == widget.initialValue?.id;
});
if (result.isNotEmpty) {
_selectedStatus = result.first;
} else {
_selectedStatus = null;
}
if ((widget.initialValue?.id ?? "") != (_selectedStatus?.id ?? "")) {
widget.onSelect(_selectedStatus);
}
} else {
_selectedStatus = null;
}
super.didUpdateWidget(oldWidget);
}
@override
void initState() {
if (widget.initialValue != null) {
final result = widget.list?.where((element) {
return element?.id == widget.initialValue?.id;
});
if (result.isNotEmpty) _selectedStatus = result.first;
if (widget.initialValue?.id != _selectedStatus?.id) {
widget.onSelect(_selectedStatus);
}
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Container(
height: 60.toScreenHeight,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
decoration: BoxDecoration(
color: context.isDark ? AppColor.neutral50 : Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: Stack(
alignment: Alignment.center,
children: [
PositionedDirectional(
end: 0,
child: Icon(
Icons.keyboard_arrow_down_rounded,
color: widget.enable ? null : Colors.grey,
)),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (widget.title != null)
Text(
widget.title,
style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
),
DropdownButton<Employee>(
value: _selectedStatus,
iconSize: 24,
isDense: true,
icon: const SizedBox.shrink(),
elevation: 0,
isExpanded: true,
hint: Text(
context.translation.select,
style: Theme.of(context).textTheme.bodyLarge,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: const SizedBox.shrink(),
onChanged: widget.enable
? (Employee newValue) {
setState(() {
_selectedStatus = newValue;
});
widget.onSelect(newValue);
}
: null,
items: widget.list.map<DropdownMenuItem<Employee>>((Employee value) {
return DropdownMenuItem<Employee>(
value: value,
child: Text(
value.name ?? "NULL",
style: Theme.of(context).textTheme.bodyLarge,
),
);
}).toList(),
),
],
),
],
),
);
}
}

@ -1,13 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart';
import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/employee.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/users_menu.dart'; import 'package:test_sa/views/widgets/status/users_menu.dart';
class ServiceReportAllUsers extends StatelessWidget { class ServiceReportAllUsers extends StatelessWidget {
final Function(Engineer) onSelect; final Function(Employee) onSelect;
final Engineer initialValue; final Employee initialValue;
const ServiceReportAllUsers({Key key, @required this.onSelect, this.initialValue}) : super(key: key); const ServiceReportAllUsers({Key key, @required this.onSelect, this.initialValue}) : super(key: key);

@ -1,12 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import '../../../models/engineer.dart'; import '../../../models/employee.dart';
class UsersMenu extends StatefulWidget { class UsersMenu extends StatefulWidget {
final List<Engineer> statuses; final List<Employee> statuses;
final Engineer initialStatus; final Employee initialStatus;
final Function(Engineer) onSelect; final Function(Employee) onSelect;
const UsersMenu({Key key, this.statuses, this.onSelect, this.initialStatus}) : super(key: key); const UsersMenu({Key key, this.statuses, this.onSelect, this.initialStatus}) : super(key: key);
@ -15,7 +15,7 @@ class UsersMenu extends StatefulWidget {
} }
class _SingleUsersMenuState extends State<UsersMenu> { class _SingleUsersMenuState extends State<UsersMenu> {
Engineer _selectedStatus; Employee _selectedStatus;
@override @override
void setState(VoidCallback fn) { void setState(VoidCallback fn) {
@ -71,7 +71,7 @@ class _SingleUsersMenuState extends State<UsersMenu> {
// AppStyle.boxShadow // AppStyle.boxShadow
// ] // ]
), ),
child: DropdownButton<Engineer>( child: DropdownButton<Employee>(
value: _selectedStatus, value: _selectedStatus,
iconSize: 24, iconSize: 24,
icon: const Icon(Icons.keyboard_arrow_down_rounded), icon: const Icon(Icons.keyboard_arrow_down_rounded),
@ -83,14 +83,14 @@ class _SingleUsersMenuState extends State<UsersMenu> {
), ),
style: TextStyle(color: Theme.of(context).primaryColor), style: TextStyle(color: Theme.of(context).primaryColor),
underline: SizedBox.shrink(), underline: SizedBox.shrink(),
onChanged: (Engineer newValue) { onChanged: (Employee newValue) {
setState(() { setState(() {
_selectedStatus = newValue; _selectedStatus = newValue;
}); });
widget.onSelect(newValue); widget.onSelect(newValue);
}, },
items: widget.statuses.map<DropdownMenuItem<Engineer>>((Engineer value) { items: widget.statuses.map<DropdownMenuItem<Employee>>((Employee value) {
return DropdownMenuItem<Engineer>( return DropdownMenuItem<Employee>(
value: value, value: value,
child: Text( child: Text(
value.name, value.name,

Loading…
Cancel
Save