diff --git a/lib/models/service_request/search_work_order.dart b/lib/models/service_request/search_work_order.dart index 713e9125..0fc6907b 100644 --- a/lib/models/service_request/search_work_order.dart +++ b/lib/models/service_request/search_work_order.dart @@ -10,6 +10,8 @@ class SearchWorkOrders { String assetType; AssignedEmployee assignedEmployee; String visitDate; + String startDate; + String endDate; List assistantEmployees; String supplier; String vendorTicketNumber; @@ -44,6 +46,8 @@ class SearchWorkOrders { this.assetType, this.assignedEmployee, this.visitDate, + this.startDate, + this.endDate, this.assistantEmployees, this.supplier, this.vendorTicketNumber, @@ -79,6 +83,8 @@ class SearchWorkOrders { assetType = json['assetType']; assignedEmployee = json['assignedEmployee'] != null ? new AssignedEmployee.fromJson(json['assignedEmployee']) : AssignedEmployee(); visitDate = json['visitDate']; + startDate = json['startDate']; + endDate = json['endDate']; if (json['assistantEmployees'] != null) { assistantEmployees = json['assistantEmployees']; } @@ -127,6 +133,8 @@ class SearchWorkOrders { data['assignedEmployee'] = this.assignedEmployee.toJson(); } data['visitDate'] = this.visitDate; + data['startDate'] = this.startDate; + data['endDate'] = this.endDate; if (this.assistantEmployees != null) { data['assistantEmployees'] = this.assistantEmployees.map((v) => v.toJson()).toList(); } 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 203852b9..1619e536 100644 --- a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; +import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart'; import 'package:test_sa/views/pages/sub_workorder/work_order_details_bottom_sheet.dart'; @@ -14,7 +15,8 @@ import '../../widgets/buttons/app_button.dart'; class CreateSubWorkOrderPage extends StatefulWidget { static const id = "/CreateSubWorkOrder"; - const CreateSubWorkOrderPage({Key key}) : super(key: key); + final SearchWorkOrders workOrder; + const CreateSubWorkOrderPage({this.workOrder, Key key}) : super(key: key); @override State createState() => _CreateSubWorkOrderPageState(); @@ -66,7 +68,7 @@ class _CreateSubWorkOrderPageState extends State { useSafeArea: true, isScrollControlled: true, backgroundColor: Colors.transparent, - builder: (context) => const WorkOrderDetailsBottomSheet(), + builder: (context) => WorkOrderDetailsBottomSheet(workOrder: widget.workOrder), ); }, child: Card( @@ -92,7 +94,7 @@ class _CreateSubWorkOrderPageState extends State { useSafeArea: true, isScrollControlled: true, backgroundColor: Colors.transparent, - builder: (context) => const SparePartsBottomSheet(), + builder: (context) => SparePartsBottomSheet(workOrder: widget.workOrder), ); }, child: Card( 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 e7747ace..6e9ae74a 100644 --- a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart @@ -5,6 +5,7 @@ import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/models/subtitle.dart'; +import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; @@ -14,7 +15,6 @@ import '../../../controllers/providers/api/service_requests_provider.dart'; import '../../app_style/colors.dart'; import '../../widgets/buttons/app_back_button.dart'; import '../../widgets/buttons/app_button.dart'; -import '../../widgets/loaders/app_loading.dart'; import '../../widgets/status/report/service_report_all_users.dart'; import '../../widgets/status/report/service_report_maintenance_situation.dart'; import '../../widgets/status/report/service_report_visit_date_operator.dart'; @@ -160,7 +160,7 @@ class _SearchSubWorkOrderPageState extends State { ), floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, floatingActionButton: _isLoading - ? const ALoading() + ? const CircularProgressIndicator() : Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: AButton( @@ -188,8 +188,16 @@ class _SearchSubWorkOrderPageState extends State { body: ListView.builder( itemCount: woList.length, shrinkWrap: true, - itemBuilder: (context, index) => Text( - woList[index].id?.toString(), + itemBuilder: (context, index) => InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: woList[index])), + ); + }, + child: Text( + woList[index].id?.toString(), + ), ), ), ), 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 a1a7887a..048a6158 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 @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/views/app_style/colors.dart'; import '../../../controllers/api_routes/http_status_manger.dart'; @@ -13,7 +14,8 @@ import '../../widgets/buttons/app_button.dart'; import '../../widgets/titles/app_sub_title.dart'; class SparePartsBottomSheet extends StatefulWidget { - const SparePartsBottomSheet({Key key}) : super(key: key); + final SearchWorkOrders workOrder; + const SparePartsBottomSheet({this.workOrder, Key key}) : super(key: key); @override State createState() => _SparePartsBottomSheetState(); @@ -21,6 +23,14 @@ class SparePartsBottomSheet extends StatefulWidget { class _SparePartsBottomSheetState extends State { final GlobalKey _formKey = GlobalKey(); + SearchWorkOrders _workOrder; + bool _isLoading = false; + @override + void initState() { + super.initState(); + _workOrder = widget.workOrder; + } + @override Widget build(BuildContext context) { final size = MediaQuery.of(context).size; @@ -53,42 +63,46 @@ class _SparePartsBottomSheetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 8), - ListView.builder( - itemCount: 1, - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) => Column( - children: [ - const ATextFormField(labelText: "Part No."), - const SizedBox(height: 8), - const ATextFormField( - labelText: "Description", - hintText: "Add Some Text", - textInputType: TextInputType.multiline, - ), - const SizedBox(height: 8), - const ATextFormField( - labelText: "Quantity", - textInputType: TextInputType.number, - ), - const SizedBox(height: 8), - InkWell( - onTap: () {}, - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - const Icon(Icons.delete, color: Colors.red), - Text( - "Remove this part", - style: Theme.of(context).textTheme.bodySmall, + if (_workOrder.sparePartsWorkOrders?.length != null) + ListView.builder( + itemCount: _workOrder.sparePartsWorkOrders?.length, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + final wo = _workOrder.sparePartsWorkOrders[index]; + return Column( + children: [ + const ATextFormField(labelText: "Part No."), + const SizedBox(height: 8), + const ATextFormField( + labelText: "Description", + hintText: "Add Some Text", + textInputType: TextInputType.multiline, + ), + const SizedBox(height: 8), + const ATextFormField( + labelText: "Quantity", + textInputType: TextInputType.number, + ), + const SizedBox(height: 8), + InkWell( + onTap: () {}, + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + const Icon(Icons.delete, color: Colors.red), + Text( + "Remove this part", + style: Theme.of(context).textTheme.bodySmall, + ), + ], ), - ], - ), - ), - const SizedBox(height: 8), - ], + ), + const SizedBox(height: 8), + ], + ); + }, ), - ), const Divider(), const SizedBox(height: 8), InkWell( @@ -135,11 +149,11 @@ class _SparePartsBottomSheetState extends State { // } _formKey.currentState.save(); - // _isLoading = true; + _isLoading = true; setState(() {}); int status = await Provider.of(context).updateServiceReport(report: ServiceReport()); - // _isLoading = false; + _isLoading = false; setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully); 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 1efa95ba..12df4c57 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 @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; +import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; @@ -10,6 +12,7 @@ import 'package:test_sa/views/widgets/status/report/service_report_repair_locati import '../../../controllers/api_routes/http_status_manger.dart'; import '../../../controllers/localization/localization.dart'; +import '../../../models/engineer.dart'; import '../../../models/service_report.dart'; import '../../app_style/sizing.dart'; import '../../widgets/date_and_time/time_picker.dart'; @@ -17,7 +20,8 @@ import '../../widgets/status/report/service_report_all_users.dart'; import '../../widgets/titles/app_sub_title.dart'; class WorkOrderDetailsBottomSheet extends StatefulWidget { - const WorkOrderDetailsBottomSheet({Key key}) : super(key: key); + final SearchWorkOrders workOrder; + const WorkOrderDetailsBottomSheet({this.workOrder, Key key}) : super(key: key); @override State createState() => _WorkOrderDetailsBottomSheetState(); @@ -25,6 +29,15 @@ class WorkOrderDetailsBottomSheet extends StatefulWidget { class _WorkOrderDetailsBottomSheetState extends State { final GlobalKey _formKey = GlobalKey(); + SearchWorkOrders _workOrder; + bool _isLoading = false; + + @override + void initState() { + super.initState(); + _workOrder = widget.workOrder; + } + @override Widget build(BuildContext context) { final size = MediaQuery.of(context).size; @@ -56,14 +69,16 @@ class _WorkOrderDetailsBottomSheetState extends State Validator.isNumeric(value) ? null : _subtitle.requiredWord, textInputType: TextInputType.number, onSaved: (value) { - // _serviceReport.workHours = value; + _workOrder.workingHours = double.tryParse(value); }, ), const SizedBox(height: 8), - const ATextFormField( + ATextFormField( labelText: "Travel Hours", + initialValue: _workOrder.travelingHours?.toString(), + textInputType: TextInputType.number, + onSaved: (value) { + _workOrder.travelingHours = num.tryParse(value); + }, ), const SizedBox(height: 8), - const ATextFormField( + ATextFormField( labelText: "Travel Expense", + initialValue: _workOrder.travelingExpenses?.toString(), + textInputType: TextInputType.number, + onSaved: (value) { + _workOrder.travelingExpenses = num.tryParse(value); + }, ), const SizedBox(height: 8), ASubTitle(subtitle.callLastSituation), const SizedBox(height: 4), ServiceReportMaintenanceSituation( - initialValue: null /*_searchWorkOrders.calllastSituation*/, + initialValue: _workOrder.calllastSituation, onSelect: (status) { - // if (status?.value == 12 || _searchWorkOrders.calllastSituation?.value == 12) { - // _searchWorkOrders.calllastSituation = status; - // setState(() {}); - // } else { - // _searchWorkOrders.calllastSituation = status; - // } + if (status?.value == 12 || _workOrder.calllastSituation?.value == 12) { + _workOrder.calllastSituation = status; + setState(() {}); + } else { + _workOrder.calllastSituation = status; + } }, ), const SizedBox(height: 8), const ASubTitle("Repair Location"), const SizedBox(height: 4), ServiceReportRepairLocation( - // initialValue: _serviceReport.repairLocation, + initialValue: _workOrder.repairLocation != null ? Lookup(name: _workOrder.repairLocation) : null, onSelect: (status) { - // _serviceReport.repairLocation = status; + _workOrder.repairLocation = status.name; }, ), const SizedBox(height: 8), - const ATextFormField( + ATextFormField( labelText: "Technical Comments", - hintText: "Add Some Text", + initialValue: _workOrder.reviewComment, textInputType: TextInputType.multiline, + onSaved: (value) { + _workOrder.reviewComment = value; + }, ), const SizedBox(height: 24), ], @@ -186,11 +214,11 @@ class _WorkOrderDetailsBottomSheetState extends State(context).updateServiceReport(report: ServiceReport()); - // _isLoading = false; + _isLoading = false; setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully);