receiver name added on new transfer request & improvements
parent
5d706d89b4
commit
a6dd802321
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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;
|
||||||
@ -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(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue