diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index d0dd0caf..9fb46d7c 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -23,6 +23,7 @@ class ServiceRequestsProvider extends ChangeNotifier { //reset provider data void reset() { + workOrders = []; serviceRequests = null; nextPage = true; stateCode = null; @@ -52,11 +53,7 @@ class ServiceRequestsProvider extends ChangeNotifier { /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getRequests({ - @required String host, - @required User user, - @required int hospitalId, - }) async { + Future getRequests({@required int hospitalId}) async { if (isLoading == true) return -2; isLoading = true; if (serviceRequests == null) notifyListeners(); @@ -370,11 +367,10 @@ class ServiceRequestsProvider extends ChangeNotifier { }) async { Response response; try { - Map body= workOrder.toJson(); + Map body = workOrder.toJson(); response = await ApiManager.instance.post(URLs.createServiceReport, body: body); print(response.body); - stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { reset(); @@ -641,7 +637,8 @@ class ServiceRequestsProvider extends ChangeNotifier { // client's request was successfully received List workOrdersJson = json.decode(response.body)["data"]; print(workOrdersJson); - workOrders = workOrdersJson.map((request) => SearchWorkOrder.fromJson(request)).toList(); + workOrders ??= []; + workOrders.addAll(workOrdersJson.map((request) => SearchWorkOrder.fromJson(request)).toList()); if (workOrders.length == pageItemNumber) { nextPage = true; } else { diff --git a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart index 8c1d3f4a..d243bf5d 100644 --- a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart @@ -1,4 +1,3 @@ - import 'dart:convert'; import 'dart:developer'; import 'dart:io'; @@ -39,7 +38,7 @@ class CreateSubWorkOrderPage extends StatefulWidget { class _CreateSubWorkOrderPageState extends State { final GlobalKey _formKey = GlobalKey(); - final SearchWorkOrder _subWorkOrders = SearchWorkOrder(); + SearchWorkOrder _subWorkOrders; Lookup _serviceReportReason = const Lookup(); ServiceReport _serviceReport; File _image; @@ -48,9 +47,9 @@ class _CreateSubWorkOrderPageState extends State { @override void initState() { - super.initState(); } + @override Widget build(BuildContext context) { final Subtitle subtitle = AppLocalization.of(context).subtitle; 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 afc41b9a..279f8576 100644 --- a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart @@ -173,6 +173,7 @@ class _SearchSubWorkOrderPageState extends State { if (_formKey.currentState?.validate() ?? false) {} _formKey.currentState?.save(); final serviceRequestsProvider = Provider.of(context, listen: false); + serviceRequestsProvider.reset(); final List woList = await serviceRequestsProvider.searchForWorkOrders( _searchWorkOrders, _callerId, @@ -186,43 +187,17 @@ class _SearchSubWorkOrderPageState extends State { Navigator.push( context, MaterialPageRoute( - builder: (context) => Scaffold( - body: SafeArea( - child: Column( - children: [ - Container( - color: AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), - child: Column( - children: [ - Row( - children: [ - ABackButton(), - Expanded( - child: Center( - child: Text( - "Work Order List", - style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), - ), - ), - ), - const SizedBox( - width: 48, - ) - ], - ), - ], - ), - ), - Expanded( - child: WorkOrderList( - items: woList, - nextPage: true, - onLazyLoad: () {}, - )), - ], - ), - )), + builder: (context) => WorkOrderList( + items: woList, + onLazyLoading: () async { + return await serviceRequestsProvider.searchForWorkOrders( + _searchWorkOrders, + _callerId, + _dateOperator, + _site, + ); + }, + ), ), ); } else { diff --git a/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart b/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart index dec9771b..bf022cc0 100644 --- a/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart +++ b/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart @@ -18,12 +18,12 @@ class SparePartsBottomSheet extends StatefulWidget { class _SparePartsBottomSheetState extends State { final GlobalKey _formKey = GlobalKey(); - SearchWorkOrder _workOrder; + final SearchWorkOrder _workOrder = SearchWorkOrder(); @override void initState() { super.initState(); - _workOrder = widget.subWorkOrder; + _workOrder.copyFrom(widget.subWorkOrder); } @override @@ -68,7 +68,7 @@ class _SparePartsBottomSheetState extends State { return Column( children: [ ATextFormField( - labelText: "Part No.", + labelText: _workOrder?.sparePartsWorkOrders[index]?.sparePart?.partNo ?? "Part No.", onChange: (value) { _workOrder.sparePartsWorkOrders[index].sparePart = SparePart(partNo: value); }, @@ -84,7 +84,7 @@ class _SparePartsBottomSheetState extends State { // ), const SizedBox(height: 8), ATextFormField( - labelText: "Quantity", + labelText: _workOrder?.sparePartsWorkOrders[index]?.qty?.toString() ?? "Quantity", textInputType: TextInputType.number, onSaved: (value) { _workOrder.sparePartsWorkOrders[index].qty = double.tryParse(value ?? ""); diff --git a/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart b/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart index 9f9f185c..1896435c 100644 --- a/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart +++ b/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart @@ -22,12 +22,12 @@ class WorkOrderDetailsBottomSheet extends StatefulWidget { class _WorkOrderDetailsBottomSheetState extends State { final GlobalKey _formKey = GlobalKey(); - SearchWorkOrder _workOrder; + final SearchWorkOrder _workOrder = SearchWorkOrder(); @override void initState() { super.initState(); - _workOrder = widget.subWorkOrder; + _workOrder.copyFrom(widget.subWorkOrder); } @override diff --git a/lib/views/pages/sub_workorder/workorder_list.dart b/lib/views/pages/sub_workorder/workorder_list.dart index 96c7b529..c78054a8 100644 --- a/lib/views/pages/sub_workorder/workorder_list.dart +++ b/lib/views/pages/sub_workorder/workorder_list.dart @@ -1,50 +1,100 @@ import 'dart:developer'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:test_sa/views/pages/sub_workorder/workorder_item.dart'; import '../../../controllers/localization/localization.dart'; +import '../../../controllers/providers/api/service_requests_provider.dart'; import '../../../models/service_request/search_work_order.dart'; import '../../../models/subtitle.dart'; +import '../../app_style/colors.dart'; +import '../../widgets/buttons/app_back_button.dart'; import '../../widgets/loaders/lazy_loading.dart'; import '../../widgets/loaders/no_item_found.dart'; import 'create_sub_workorder_page.dart'; -class WorkOrderList extends StatelessWidget { - final List items; - final bool nextPage; - final Future Function() onLazyLoad; - const WorkOrderList({Key key, this.items, this.nextPage, this.onLazyLoad}) : super(key: key); +class WorkOrderList extends StatefulWidget { + List items; + final Future> Function() onLazyLoading; + WorkOrderList({Key key, this.items, this.onLazyLoading}) : super(key: key); + + @override + State createState() => _WorkOrderListState(); +} + +class _WorkOrderListState extends State { + List _items; + @override + void initState() { + super.initState(); + _items = widget.items; + } @override Widget build(BuildContext context) { - if (items.isEmpty) { - Subtitle subtitle = AppLocalization.of(context).subtitle; - return NoItemFound( - message: subtitle.noServiceRequestFound, - ); - } - return LazyLoading( - nextPage: nextPage, - onLazyLoad: onLazyLoad, - child: ListView.builder( - itemCount: items.length, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - itemBuilder: (context, itemIndex) { - return WorkOrderItem( - index: itemIndex, - onPressed: (model) { - // Navigator.of(context).push(MaterialPageRoute( - // builder: (_) => WorkOrderUpdate(item: model,))); - log(model?.toJson()?.toString()); - Navigator.push( - context, - MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: model)), - ); - }, - item: items[itemIndex], - ); - }, + final serviceRequestsProvider = Provider.of(context, listen: false); + Subtitle subtitle = AppLocalization.of(context).subtitle; + return Scaffold( + body: SafeArea( + child: Column( + children: [ + Container( + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), + child: Column( + children: [ + Row( + children: [ + const ABackButton(), + Expanded( + child: Center( + child: Text( + "Work Order List", + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), + ), + ), + ), + const SizedBox(width: 48), + ], + ), + ], + ), + ), + Expanded( + child: _items?.isEmpty ?? [] + ? NoItemFound( + message: subtitle.noServiceRequestFound, + ) + : LazyLoading( + nextPage: serviceRequestsProvider.nextPage, + onLazyLoad: () async { + _items = await widget.onLazyLoading(); + setState(() {}); + }, + child: ListView.builder( + itemCount: _items.length, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + itemBuilder: (context, itemIndex) { + return WorkOrderItem( + index: itemIndex, + onPressed: (model) { + // Navigator.of(context).push(MaterialPageRoute( + // builder: (_) => WorkOrderUpdate(item: model,))); + log(model?.toJson()?.toString()); + Navigator.push( + context, + MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: model)), + ); + }, + item: _items[itemIndex], + ); + }, + ), + ), + ), + ], + ), ), ); } diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index 70464935..de9cc066 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -408,8 +408,26 @@ class RequestDetailsPage extends StatelessWidget { ), ); } else { - return Center( - child: ASubTitle(_subtitle.noDateFound), + return Column( + children: [ + Expanded( + child: Center( + child: ASubTitle(_subtitle.dataNotFound), + ), + ), + if (_userProvider.user.type == UsersTypes.engineer) + Center( + child: Padding( + padding: const EdgeInsets.all(32), + child: AButton( + text: "Create Report", + onPressed: () { + Navigator.of(context).push(MaterialPageRoute(builder: (_) => CreateServiceReport(request: serviceRequest))); + }, + ), + ), + ), + ], ); } }, diff --git a/lib/views/pages/user/requests/requests_page.dart b/lib/views/pages/user/requests/requests_page.dart index 06160333..a21debef 100644 --- a/lib/views/pages/user/requests/requests_page.dart +++ b/lib/views/pages/user/requests/requests_page.dart @@ -44,11 +44,7 @@ class _ServiceRequestsPageState extends State with TickerPr stateCode: _serviceRequestsProvider.stateCode, onRefresh: () async { _serviceRequestsProvider.reset(); - await _serviceRequestsProvider.getRequests( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.clientId, - ); + await _serviceRequestsProvider.getRequests(hospitalId: _userProvider.user.clientId); }, child: Stack( children: [ @@ -104,11 +100,7 @@ class _ServiceRequestsPageState extends State with TickerPr child: ServiceRequestsList( nextPage: _serviceRequestsProvider.nextPage, onLazyLoad: () async { - await _serviceRequestsProvider.getRequests( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.clientId, - ); + await _serviceRequestsProvider.getRequests(hospitalId: _userProvider.user.clientId); }, requests: _serviceRequestsProvider.serviceRequests, ), diff --git a/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart b/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart index 24b0cb6c..1bf2c491 100644 --- a/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart +++ b/lib/views/widgets/status/report/service_report_assistant_employee_menu.dart @@ -19,7 +19,6 @@ class ServiceReportAssistantEmployeeMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { await menuProvider.getAssistantEmployees(); - print("ccccccccccccccc"); }, child: AssistantEmployeeMenu( initialStatus: initialValue,