diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index b8199481..fefd7a70 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -111,7 +111,8 @@ class URLs { // employee 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 static get getPentry => "$_baseUrl/return/pentry/details"; // get diff --git a/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart index 136a5f5f..84cf9406 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart @@ -5,7 +5,7 @@ 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/engineer.dart'; +import 'package:test_sa/models/employee.dart'; import 'package:test_sa/models/user.dart'; class EngineersProvider extends ChangeNotifier { @@ -24,9 +24,9 @@ class EngineersProvider extends ChangeNotifier { // contain user data // when user not login or register _user = null - List _items; + List _items; - List get items => _items; + List get items => _items; // when categories in-process _loading = true // done _loading = true @@ -58,7 +58,7 @@ class EngineersProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body); - _items = categoriesListJson.map((type) => Engineer.fromJson(type)).toList(); + _items = categoriesListJson.map((type) => Employee.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/employee/nurse_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/nurse_provider.dart new file mode 100644 index 00000000..57ccfead --- /dev/null +++ b/lib/controllers/providers/api/status_drop_down/employee/nurse_provider.dart @@ -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 _items; + + List get nursesList => _items; + bool _loading; + + bool get isLoading => _loading; + + set isLoading(bool isLoading) { + _loading = isLoading; + notifyListeners(); + } + + Future 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; + } + } +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart index fb9767f9..510ab11f 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart @@ -5,7 +5,7 @@ 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/engineer.dart'; +import 'package:test_sa/models/employee.dart'; import '../../../../../models/new_models/assigned_employee.dart'; import '../../../../../models/new_models/assistant_employee.dart'; @@ -68,7 +68,7 @@ class ServiceReportAssistantsEmployeeProvider extends ChangeNotifier { // client's request was successfully received List usersListJson = json.decode(response.body); _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 --"))); } _loading = false; diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart index c05295fa..44769691 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart @@ -5,7 +5,7 @@ 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/engineer.dart'; +import 'package:test_sa/models/employee.dart'; class ServiceReportUsersProvider extends ChangeNotifier { //reset provider data @@ -24,9 +24,9 @@ class ServiceReportUsersProvider extends ChangeNotifier { // contain user data // when user not login or register _user = null - List _engineers; + List _engineers; - List get engineers => _engineers; + List get engineers => _engineers; // when categories in-process _loading = true // done _loading = true @@ -62,7 +62,7 @@ class ServiceReportUsersProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List usersListJson = json.decode(response.body); - _engineers = usersListJson.map((type) => Engineer.fromJson(type)).toList(); + _engineers = usersListJson.map((type) => Employee.fromJson(type)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/main.dart b/lib/main.dart index 99aa5e13..785d2718 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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/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/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_type_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: (_) => DepartmentProvider()), ChangeNotifierProvider(create: (_) => SiteProvider()), + ChangeNotifierProvider(create: (_) => NurseProvider()), ChangeNotifierProvider(create: (_) => HospitalsProvider()), ChangeNotifierProvider(create: (_) => AssetProvider()), ChangeNotifierProvider(create: (_) => AllRequestsProvider()), diff --git a/lib/models/device/asset_transfer.dart b/lib/models/device/asset_transfer.dart index de4a52e0..969d77eb 100644 --- a/lib/models/device/asset_transfer.dart +++ b/lib/models/device/asset_transfer.dart @@ -26,6 +26,7 @@ class AssetTransfer { this.senderMachineStatusId, this.senderComment, this.comment, + this.receiverEndUserId, this.senderStartDate, this.senderEndDate, this.senderWorkingHours, @@ -90,6 +91,7 @@ class AssetTransfer { senderMachineStatusId = json['senderMachineStatusId']; senderComment = json['senderComment']; comment = json['comment']; + receiverEndUserId = json['receiverEndUserId']; senderStartDate = json['senderStartDate']; senderEndDate = json['senderEndDate']; senderWorkingHours = json['senderWorkingHours']; @@ -182,6 +184,7 @@ class AssetTransfer { num senderMachineStatusId; String senderComment; String comment; + String receiverEndUserId; String senderStartDate; String senderEndDate; String senderWorkingHours; @@ -238,6 +241,7 @@ class AssetTransfer { num senderMachineStatusId, String senderComment, String comment, + String receiverEndUserId, String senderStartDate, String senderEndDate, String senderWorkingHours, @@ -302,6 +306,7 @@ class AssetTransfer { senderMachineStatusId: senderMachineStatusId ?? this.senderMachineStatusId, senderComment: senderComment ?? this.senderComment, comment: comment ?? this.comment, + receiverEndUserId: receiverEndUserId ?? this.receiverEndUserId, senderStartDate: senderStartDate ?? this.senderStartDate, senderEndDate: senderEndDate ?? this.senderEndDate, senderWorkingHours: senderWorkingHours ?? this.senderWorkingHours, @@ -366,6 +371,7 @@ class AssetTransfer { map['senderMachineStatusId'] = senderMachineStatusId; map['senderComment'] = senderComment; map['comment'] = comment; + map['receiverEndUserId'] = receiverEndUserId; map['senderStartDate'] = senderStartDate; map['senderEndDate'] = senderEndDate; map['senderWorkingHours'] = senderWorkingHours; @@ -434,6 +440,7 @@ class AssetTransfer { map['senderMachineStatusId'] = senderMachineStatusId; map['senderComment'] = senderComment; map['comment'] = comment; + map['receiverEndUserId'] = receiverEndUserId; map['senderStartDate'] = senderStartDate; map['senderEndDate'] = senderEndDate; map['senderWorkingHours'] = senderWorkingHours; @@ -476,6 +483,7 @@ class AssetTransfer { senderMachineStatusId = assetTransfer.senderMachineStatusId; senderComment = assetTransfer.senderComment; comment = assetTransfer.comment; + receiverEndUserId = assetTransfer.receiverEndUserId; senderStartDate = assetTransfer.senderStartDate; senderEndDate = assetTransfer.senderEndDate; senderWorkingHours = assetTransfer.senderWorkingHours; diff --git a/lib/models/engineer.dart b/lib/models/employee.dart similarity index 66% rename from lib/models/engineer.dart rename to lib/models/employee.dart index 82fa505e..6b9ba15b 100644 --- a/lib/models/engineer.dart +++ b/lib/models/employee.dart @@ -1,29 +1,29 @@ -class Engineer { +class Employee { String id; String name; - Engineer({ + Employee({ this.id, this.name, }); - factory Engineer.fromJson(Map parsedJson) { - if (parsedJson == null) return Engineer(); - return Engineer( + factory Employee.fromJson(Map parsedJson) { + if (parsedJson == null) return Employee(); + return Employee( id: parsedJson["userId"] ?? parsedJson["id"], name: parsedJson["userName"] ?? parsedJson["name"], ); } - factory Engineer.fromEngineer(Engineer department) { - return Engineer( + factory Employee.fromEngineer(Employee department) { + return Employee( id: department?.id, name: department?.name, ); } @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 int get hashCode => id.hashCode; diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index ee5c0bf9..ed74aa82 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -10,10 +10,13 @@ import 'package:test_sa/extensions/text_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_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/floor.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/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/site.dart'; @@ -44,6 +47,7 @@ class _RequestDeviceTransferState extends State { final TextEditingController _receiverNameController = TextEditingController(), _commentsController = TextEditingController(); final Asset _assetDestination = Asset(); Asset _pickedAsset; + Employee receiverEndUser; @override void setState(VoidCallback fn) { @@ -57,6 +61,7 @@ class _RequestDeviceTransferState extends State { _transferModel.destFloorId = _assetDestination.floor?.id; _transferModel.destDepartmentId = _assetDestination.department?.id; _transferModel.destRoomId = _assetDestination.room?.id; + _transferModel.receiverEndUserId = _selectedNurse.id; if (!_formKey.currentState.validate() || !(await _transferModel.validate(context))) { return; } @@ -73,11 +78,16 @@ class _RequestDeviceTransferState extends State { super.dispose(); } + Employee _selectedNurse; + @override Widget build(BuildContext context) { _userProvider = Provider.of(context, listen: false); _settingProvider = Provider.of(context, listen: false); _deviceTransferProvider = Provider.of(context, listen: false); + _selectedNurse ??= Employee(id: _userProvider.user.userID, name: _userProvider.user.username); + + return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar(title: context.translation.newTransferRequest), @@ -101,13 +111,15 @@ class _RequestDeviceTransferState extends State { 16.height, context.translation.receiverDetails.heading5(context), 8.height, - - /// todo [TBD] : receiverName - AppTextFormField( - controller: _receiverNameController, - labelText: context.translation.receiverName, - //validator: (text) => Validator.hasValue(text) ? null : context.translation.requiredField, - onSaved: (text) {}, + NurseMenu( + title: context.translation.receiverName, + initialValue: _selectedNurse, + onSelect: (employee) { + if (employee != null) { + _selectedNurse = employee; + setState(() {}); + } + }, ), 8.height, SingleItemDropDownMenu( diff --git a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart index c3eba371..39992c12 100644 --- a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/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/models/engineer.dart'; +import 'package:test_sa/models/employee.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/views/pages/sub_workorder/workorder_list.dart'; @@ -111,7 +111,7 @@ class _SearchSubWorkOrderPageState extends State { ASubTitle(context.translation.assignedEmployee), const SizedBox(height: 4), 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) { _searchWorkOrders.assignedEmployee = AssignedEmployee(id: engineer.id, name: engineer.name); }, diff --git a/lib/views/widgets/requests/service_request_update_dialog.dart b/lib/views/widgets/requests/service_request_update_dialog.dart index 4ce99376..050c5b8c 100644 --- a/lib/views/widgets/requests/service_request_update_dialog.dart +++ b/lib/views/widgets/requests/service_request_update_dialog.dart @@ -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/widgets/buttons/app_small_button.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 { final ServiceRequest request; diff --git a/lib/views/widgets/search/service_request_search_bar.dart b/lib/views/widgets/search/service_request_search_bar.dart index 056d25f5..9da02275 100644 --- a/lib/views/widgets/search/service_request_search_bar.dart +++ b/lib/views/widgets/search/service_request_search_bar.dart @@ -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/titles/app_sub_title.dart'; -import '../../../models/engineer.dart'; +import '../../../models/employee.dart'; import '../../../models/new_models/assigned_employee.dart'; import '../app_text_form_field.dart'; import '../date_and_time/date_picker.dart'; @@ -220,7 +220,7 @@ class _ServiceRequestsSearchDialogState extends State(context); +// final userProvider = Provider.of(context); +// final menuProvider = Provider.of(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, +// )); +// } +// } diff --git a/lib/views/widgets/status/employee/engineers_mune.dart b/lib/views/widgets/status/employee/engineers_mune.dart deleted file mode 100644 index bcd3068f..00000000 --- a/lib/views/widgets/status/employee/engineers_mune.dart +++ /dev/null @@ -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(context); - final userProvider = Provider.of(context); - final menuProvider = Provider.of(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, - )); - } -} diff --git a/lib/views/widgets/status/employee/nurse_menu.dart b/lib/views/widgets/status/employee/nurse_menu.dart new file mode 100644 index 00000000..8d9ebc9e --- /dev/null +++ b/lib/views/widgets/status/employee/nurse_menu.dart @@ -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(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, + ), + ); + } +} diff --git a/lib/views/widgets/status/employee/single_type_menu.dart b/lib/views/widgets/status/employee/single_type_menu.dart index 6056d259..479ef3c7 100644 --- a/lib/views/widgets/status/employee/single_type_menu.dart +++ b/lib/views/widgets/status/employee/single_type_menu.dart @@ -1,86 +1,86 @@ -import 'package:flutter/material.dart'; -import 'package:test_sa/models/engineer.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; - -class SingleEngineerMenu extends StatefulWidget { - final List engineers; - final Engineer initialStatus; - final Function(Engineer) onSelect; - - const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key); - - @override - _SingleEngineerMenuState createState() => _SingleEngineerMenuState(); -} - -class _SingleEngineerMenuState extends State { - Engineer _selectedStatus; - - @override - void didUpdateWidget(covariant SingleEngineerMenu oldWidget) { - if (widget.initialStatus != null && widget.initialStatus.id != null) { - _selectedStatus = widget.engineers?.firstWhere((element) { - return element == widget.initialStatus; - }); - widget.onSelect(_selectedStatus); - } else { - _selectedStatus = null; - } - super.didUpdateWidget(oldWidget); - } - - @override - void initState() { - if (widget.initialStatus != null && widget.initialStatus.id != null) { - _selectedStatus = widget.engineers?.firstWhere((element) { - return element == widget.initialStatus; - }); - widget.onSelect(_selectedStatus); - } - - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 16), - decoration: BoxDecoration( - color: Colors.white, - // border: Border.all(color: AColors.black), - borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), - boxShadow: const [AppStyle.boxShadow]), - child: DropdownButton( - value: _selectedStatus, - iconSize: 24, - elevation: 16, - isExpanded: true, - hint: Text( - "Select", - style: Theme.of(context).textTheme.subtitle1, - ), - style: TextStyle(color: Theme.of(context).primaryColor), - underline: SizedBox.shrink(), - onChanged: (Engineer newValue) { - setState(() { - _selectedStatus = newValue; - }); - widget.onSelect(newValue); - }, - items: widget.engineers.map>((Engineer value) { - return DropdownMenuItem( - value: value, - child: Text( - value.name, - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: Theme.of(context).primaryColor, - fontSize: 11, - //fontWeight: FontWeight.bold - ), - ), - ); - }).toList(), - ), - ); - } -} +// import 'package:flutter/material.dart'; +// import 'package:test_sa/models/employee.dart'; +// import 'package:test_sa/views/app_style/sizing.dart'; +// +// class SingleEngineerMenu extends StatefulWidget { +// final List engineers; +// final Employee initialStatus; +// final Function(Employee) onSelect; +// +// const SingleEngineerMenu({Key key, this.engineers, this.onSelect, this.initialStatus}) : super(key: key); +// +// @override +// _SingleEngineerMenuState createState() => _SingleEngineerMenuState(); +// } +// +// class _SingleEngineerMenuState extends State { +// Employee _selectedStatus; +// +// @override +// void didUpdateWidget(covariant SingleEngineerMenu oldWidget) { +// if (widget.initialStatus != null && widget.initialStatus.id != null) { +// _selectedStatus = widget.engineers?.firstWhere((element) { +// return element == widget.initialStatus; +// }); +// widget.onSelect(_selectedStatus); +// } else { +// _selectedStatus = null; +// } +// super.didUpdateWidget(oldWidget); +// } +// +// @override +// void initState() { +// if (widget.initialStatus != null && widget.initialStatus.id != null) { +// _selectedStatus = widget.engineers?.firstWhere((element) { +// return element == widget.initialStatus; +// }); +// widget.onSelect(_selectedStatus); +// } +// +// super.initState(); +// } +// +// @override +// Widget build(BuildContext context) { +// return Container( +// padding: const EdgeInsets.symmetric(horizontal: 16), +// decoration: BoxDecoration( +// color: Colors.white, +// // border: Border.all(color: AColors.black), +// borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), +// boxShadow: const [AppStyle.boxShadow]), +// child: DropdownButton( +// value: _selectedStatus, +// iconSize: 24, +// elevation: 16, +// isExpanded: true, +// hint: Text( +// "Select", +// style: Theme.of(context).textTheme.subtitle1, +// ), +// style: TextStyle(color: Theme.of(context).primaryColor), +// underline: SizedBox.shrink(), +// onChanged: (Employee newValue) { +// setState(() { +// _selectedStatus = newValue; +// }); +// widget.onSelect(newValue); +// }, +// items: widget.engineers.map>((Employee value) { +// return DropdownMenuItem( +// value: value, +// child: Text( +// value.name, +// style: Theme.of(context).textTheme.subtitle1.copyWith( +// color: Theme.of(context).primaryColor, +// fontSize: 11, +// //fontWeight: FontWeight.bold +// ), +// ), +// ); +// }).toList(), +// ), +// ); +// } +// } diff --git a/lib/views/widgets/status/nurse_employee_menu.dart b/lib/views/widgets/status/nurse_employee_menu.dart new file mode 100644 index 00000000..9b6dc187 --- /dev/null +++ b/lib/views/widgets/status/nurse_employee_menu.dart @@ -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 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 { + 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( + 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>((Employee value) { + return DropdownMenuItem( + value: value, + child: Text( + value.name ?? "NULL", + style: Theme.of(context).textTheme.bodyLarge, + ), + ); + }).toList(), + ), + ], + ), + ], + ), + ); + } +} diff --git a/lib/views/widgets/status/report/service_report_all_users.dart b/lib/views/widgets/status/report/service_report_all_users.dart index f1c050a8..e7135851 100644 --- a/lib/views/widgets/status/report/service_report_all_users.dart +++ b/lib/views/widgets/status/report/service_report_all_users.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.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/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/status/users_menu.dart'; class ServiceReportAllUsers extends StatelessWidget { - final Function(Engineer) onSelect; - final Engineer initialValue; + final Function(Employee) onSelect; + final Employee initialValue; const ServiceReportAllUsers({Key key, @required this.onSelect, this.initialValue}) : super(key: key); diff --git a/lib/views/widgets/status/users_menu.dart b/lib/views/widgets/status/users_menu.dart index b6586605..1568c683 100644 --- a/lib/views/widgets/status/users_menu.dart +++ b/lib/views/widgets/status/users_menu.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import '../../../models/engineer.dart'; +import '../../../models/employee.dart'; class UsersMenu extends StatefulWidget { - final List statuses; - final Engineer initialStatus; - final Function(Engineer) onSelect; + final List statuses; + final Employee initialStatus; + final Function(Employee) onSelect; 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 { - Engineer _selectedStatus; + Employee _selectedStatus; @override void setState(VoidCallback fn) { @@ -71,7 +71,7 @@ class _SingleUsersMenuState extends State { // AppStyle.boxShadow // ] ), - child: DropdownButton( + child: DropdownButton( value: _selectedStatus, iconSize: 24, icon: const Icon(Icons.keyboard_arrow_down_rounded), @@ -83,14 +83,14 @@ class _SingleUsersMenuState extends State { ), style: TextStyle(color: Theme.of(context).primaryColor), underline: SizedBox.shrink(), - onChanged: (Engineer newValue) { + onChanged: (Employee newValue) { setState(() { _selectedStatus = newValue; }); widget.onSelect(newValue); }, - items: widget.statuses.map>((Engineer value) { - return DropdownMenuItem( + items: widget.statuses.map>((Employee value) { + return DropdownMenuItem( value: value, child: Text( value.name,