diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index a229b07a..36c39c27 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -142,6 +142,19 @@ class GasRefillProvider extends ChangeNotifier { "id": newModel.id, "gazRefillNo": newModel.title ?? "", "status": newModel.status.toMap(), + "startDate": startDate?.toIso8601String(), + "startTime": startDate?.toIso8601String(), + "endDate": endDate?.toIso8601String(), + "endTime": endDate?.toIso8601String(), + // "workingHours": 0, + // "assignedEmployee": { + // "id": "string", + // "name": "string" + // }, + "site": hospital?.toMap(), + "building": building?.toJson(includeFloors: false), + "floor": floor?.toJson(includeDepartments: false), + "department": department?.toJson(), }; body["gazRefillDetails"] = newModel.details diff --git a/lib/models/call_request_for_work_order_model.dart b/lib/models/call_request_for_work_order_model.dart index dd0ac5a3..14572afa 100644 --- a/lib/models/call_request_for_work_order_model.dart +++ b/lib/models/call_request_for_work_order_model.dart @@ -328,7 +328,7 @@ class ModelDefinition { if (json['suppliers'] != null) { suppliers = []; json['suppliers'].forEach((v) { - // suppliers!.add(new Null.fromJson(v)); + // suppliers!.add(new Null.fromJson(v)); }); } } @@ -394,7 +394,7 @@ class Site { if (json['buildings'] != null) { buildings = []; json['buildings'].forEach((v) { - // buildings!.add(new Null.fromJson(v)); + // buildings!.add(new Null.fromJson(v)); }); } } @@ -427,11 +427,11 @@ class Department { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['departmentName'] = this.departmentName; - data['departmentCode'] = this.departmentCode; - data['ntCode'] = this.ntCode; + final Map data = {}; + data['id'] = id; + data['departmentName'] = departmentName; + data['departmentCode'] = departmentCode; + data['ntCode'] = ntCode; return data; } } @@ -520,7 +520,7 @@ class Building { int value; var floor; - Building({this.id, this.name, this.value,this.floor}); + Building({this.id, this.name, this.value, this.floor}); Building.fromJson(Map json) { id = json['id']; @@ -538,4 +538,3 @@ class Building { return data; } } - diff --git a/lib/models/gas_refill/gas_refill_model.dart b/lib/models/gas_refill/gas_refill_model.dart index f15dd4bc..4effc27f 100644 --- a/lib/models/gas_refill/gas_refill_model.dart +++ b/lib/models/gas_refill/gas_refill_model.dart @@ -1,6 +1,8 @@ import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/lookup.dart'; +import '../call_request_for_work_order_model.dart'; + class GasRefillModel { int id; //String userId; @@ -9,8 +11,10 @@ class GasRefillModel { Lookup status; Lookup building; Lookup floor; + Department department; List details; + DateTime startDate, endDate, expectedDate; GasRefillModel({ this.id, //this.userId, @@ -18,13 +22,22 @@ class GasRefillModel { this.title, this.status, this.details, + this.building, + this.floor, + this.startDate, + this.endDate, + this.expectedDate, + this.department, }); bool validate() { if (title == null) return false; if (status == null) return false; - if (building == null) return false; - if (floor == null) return false; + // if (building == null) return false; + // if (floor == null) return false; + // if (department == null) return false; + // if (startDate == null) return false; + // if (endDate == null) return false; if (details == null && details.isEmpty) return false; return true; } @@ -36,6 +49,12 @@ class GasRefillModel { title = model.title; status = Lookup.fromStatus(model.status); details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList(); + building = model.building; + floor = model.floor; + department = model.department; + startDate = model.startDate; + endDate = model.endDate; + expectedDate = model.expectedDate; } factory GasRefillModel.fromJson(Map parsedJson) { @@ -49,8 +68,14 @@ class GasRefillModel { //userId: parsedJson["uid"], title: parsedJson["gazRefillNo"], clientName: parsedJson["site"] == null ? null : parsedJson["site"]["custName"], - status: Lookup.fromJson(parsedJson["status"]), + status: Lookup.fromJson(parsedJson["status"] ?? {}), details: details, + building: Lookup.fromJson(parsedJson["building"] ?? {}), + floor: Lookup.fromJson(parsedJson["floor"] ?? {}), + department: Department.fromJson(parsedJson["department"] ?? {}), + startDate: DateTime.tryParse(parsedJson['startDate'] ?? ""), + endDate: DateTime.tryParse(parsedJson['endDate'] ?? ""), + expectedDate: DateTime.tryParse(parsedJson['expectedDate'] ?? ""), ); } } diff --git a/lib/models/hospital.dart b/lib/models/hospital.dart index d9c5cd34..f076ad6e 100644 --- a/lib/models/hospital.dart +++ b/lib/models/hospital.dart @@ -17,7 +17,7 @@ class Hospital { if (parsedJson['buildings'] != null) { buildings = []; parsedJson['buildings'].forEach((v) { - buildings.add(new Buildings.fromJson(v)); + buildings.add(Buildings.fromJson(v)); }); } @@ -78,20 +78,20 @@ class Buildings { name = json['name']; value = json['value']; if (json['floors'] != null) { - floors = new List(); + floors = List(); json['floors'].forEach((v) { - floors.add(new Floors.fromJson(v)); + floors.add(Floors.fromJson(v)); }); } } - Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; - data['value'] = this.value; - if (this.floors != null) { - data['floors'] = this.floors.map((v) => v.toJson()).toList(); + Map toJson({bool includeFloors = true}) { + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['value'] = value; + if (floors != null && includeFloors) { + data['floors'] = floors.map((v) => v.toJson()).toList(); } return data; } @@ -110,20 +110,20 @@ class Floors { name = json['name']; value = json['value']; if (json['departments'] != null) { - departments = new List(); + departments = List(); json['departments'].forEach((v) { - departments.add(new Departments.fromJson(v)); + departments.add(Departments.fromJson(v)); }); } } - Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; - data['value'] = this.value; - if (this.departments != null) { - data['departments'] = this.departments.map((v) => v.toJson()).toList(); + Map toJson({bool includeDepartments = true}) { + final Map data = {}; + data['id'] = id; + data['name'] = name; + data['value'] = value; + if (departments != null && includeDepartments) { + data['departments'] = departments.map((v) => v.toJson()).toList(); } return data; } @@ -141,9 +141,9 @@ class Departments { } Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['name'] = this.name; + final Map data = {}; + data['id'] = id; + data['name'] = name; return data; } } diff --git a/lib/views/pages/user/gas_refill/gas_refill_details.dart b/lib/views/pages/user/gas_refill/gas_refill_details.dart index 9171aea0..c9d9a65d 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -1,15 +1,16 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_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/enums/user_types.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; +import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; @@ -20,6 +21,7 @@ import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; +import '../../../../models/enums/user_types.dart'; import '../../../app_style/colors.dart'; class GasRefillDetails extends StatefulWidget { @@ -109,14 +111,24 @@ class _GasRefillDetailsState extends State { ), if (_userProvider.user.type == UsersTypes.engineer) AIconButton( - iconData: _enableEdit ? Icons.cancel : Icons.edit, + iconData: /*_enableEdit ? Icons.cancel :*/ Icons.edit, color: Theme.of(context).colorScheme.onPrimary, buttonSize: 42, backgroundColor: AColors.green, onPressed: () async { - _enableEdit = !_enableEdit; + // _enableEdit = !_enableEdit; + print(widget.model.startDate); _model.fromGasRefillModel(widget.model); - setState(() {}); + print(widget.model.startDate); + // setState(() {}); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => RequestGasRefill( + gasRefillModel: widget.model, + ), + ), + ); }, ), const SizedBox( @@ -139,6 +151,22 @@ class _GasRefillDetailsState extends State { title: _subtitle.hospital, info: _model.clientName, ), + RequestInfoRow( + title: "Building", + info: _model.building?.name, + ), + RequestInfoRow( + title: "Floor", + info: _model.floor?.name, + ), + RequestInfoRow( + title: _subtitle.startDate, + info: _model.startDate == null ? null : DateFormat.yMd().format(_model.startDate), + ), + RequestInfoRow( + title: _subtitle.endDate, + info: _model.endDate == null ? null : DateFormat.yMd().format(_model.endDate), + ), _enableEdit ? Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 716a7e62..ec6ab810 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -27,12 +27,13 @@ import 'package:test_sa/views/widgets/status/gas_refill/gas_type.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../../../../controllers/localization/localization.dart'; +import '../../../../controllers/providers/api/hospitals_provider.dart'; import '../../../../models/enums/user_types.dart'; class RequestGasRefill extends StatefulWidget { static const String id = "/request-gas-refill"; - - const RequestGasRefill({Key key}) : super(key: key); + final GasRefillModel gasRefillModel; + const RequestGasRefill({this.gasRefillModel, Key key}) : super(key: key); @override State createState() => _RequestGasRefillState(); @@ -47,10 +48,19 @@ class _RequestGasRefillState extends State { GasRefillProvider _gasRefillProvider; GasRefillDetails _currentDetails = GasRefillDetails(); final TextEditingController _requestedQuantityController = TextEditingController(); - final GasRefillModel _formModel = GasRefillModel(details: []); + GasRefillModel _formModel = GasRefillModel(details: []); final GlobalKey _formKey = GlobalKey(); final GlobalKey _DetailsKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); + bool _firstTime = true; + + @override + void initState() { + super.initState(); + if (widget.gasRefillModel != null) { + _formModel = widget.gasRefillModel; + } + } @override void setState(VoidCallback fn) { @@ -64,12 +74,26 @@ class _RequestGasRefillState extends State { _isLoading = true; setState(() {}); + if (widget.gasRefillModel != null) { + if (!_formModel.validate()) { + _isLoading = false; + setState(() {}); + return; + } + } - int status = await _gasRefillProvider.createModel( - user: _userProvider.user, - host: _settingProvider.host, - model: _formModel, - ); + int status = widget.gasRefillModel == null + ? await _gasRefillProvider.createModel( + user: _userProvider.user, + host: _settingProvider.host, + model: _formModel, + ) + : await _gasRefillProvider.updateModel( + user: _userProvider.user, + host: _settingProvider.host, + oldModel: widget.gasRefillModel, + newModel: _formModel, + ); _isLoading = false; setState(() {}); if (status >= 200 && status < 300) { @@ -121,7 +145,21 @@ class _RequestGasRefillState extends State { _gasRefillProvider = Provider.of(context, listen: false); _gasRefillProvider.reset(); } - + if (widget.gasRefillModel != null && _firstTime) { + _formModel = widget.gasRefillModel; + HospitalsProvider().getHospitalsListByVal(searchVal: widget.gasRefillModel.clientName).then((value) { + _gasRefillProvider.hospital = value?.firstWhere((element) => element.name == widget.gasRefillModel.clientName, orElse: () => null); + print(_gasRefillProvider.hospital?.buildings?.length); + print(widget.gasRefillModel?.building?.name); + _gasRefillProvider.building = _gasRefillProvider.hospital?.buildings?.firstWhere((element) => element.name == widget.gasRefillModel?.building?.name, orElse: () => null); + _gasRefillProvider.floor = _gasRefillProvider.building?.floors?.firstWhere((element) => element.name == widget.gasRefillModel?.floor?.name, orElse: () => null); + _gasRefillProvider.department = _gasRefillProvider.floor?.departments?.firstWhere((element) => element.name == widget.gasRefillModel?.department?.departmentName, orElse: () => null); + _gasRefillProvider.startDate = widget.gasRefillModel?.startDate; + _gasRefillProvider.endDate = widget.gasRefillModel?.endDate; + _firstTime = false; + setState(() {}); + }); + } return Scaffold( key: _scaffoldKey, body: Form( @@ -141,7 +179,7 @@ class _RequestGasRefillState extends State { child: Padding( padding: const EdgeInsets.all(8.0), child: Text( - "Request Gas Refill", + "${widget.gasRefillModel == null ? "Request" : "Update"} Gas Refill", style: Theme.of(context).textTheme.headline5.copyWith(color: Theme.of(context).primaryColor, fontSize: 28, fontWeight: FontWeight.bold), ), ), @@ -408,7 +446,7 @@ class _RequestGasRefillState extends State { }), const SizedBox(height: 16), AButton( - text: _subtitle.submit, + text: widget.gasRefillModel == null ? _subtitle.submit : _subtitle.update, onPressed: _onSubmit, ), const SizedBox( diff --git a/lib/views/widgets/gas_refill/building_type_menu.dart b/lib/views/widgets/gas_refill/building_type_menu.dart index 2cfb901f..2043f157 100644 --- a/lib/views/widgets/gas_refill/building_type_menu.dart +++ b/lib/views/widgets/gas_refill/building_type_menu.dart @@ -1,15 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_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/hospital.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:test_sa/views/widgets/status/single_status_menu.dart'; class BuildingTypeMenu extends StatefulWidget { final Function(Buildings) onSelect; @@ -41,6 +33,9 @@ class _BuildingTypeMenuState extends State { _building = widget.building; _selectedBuilding = null; } + if (oldWidget.initialValue != widget.initialValue && widget.initialValue != null) { + _selectedBuilding = widget.initialValue; + } super.didUpdateWidget(oldWidget); } diff --git a/lib/views/widgets/gas_refill/department_type_menu.dart b/lib/views/widgets/gas_refill/department_type_menu.dart index 4014f570..1b58c200 100644 --- a/lib/views/widgets/gas_refill/department_type_menu.dart +++ b/lib/views/widgets/gas_refill/department_type_menu.dart @@ -1,15 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_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/hospital.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:test_sa/views/widgets/status/single_status_menu.dart'; class DepartmentTypeMenu extends StatefulWidget { final Function(Departments) onSelect; @@ -41,6 +33,9 @@ class _DepartmentTypeMenuState extends State { _departments = widget.departments; _selected = null; } + if (oldWidget.initialValue != widget.initialValue && widget.initialValue != null) { + _selected = widget.initialValue; + } super.didUpdateWidget(oldWidget); } diff --git a/lib/views/widgets/gas_refill/floor_type_menu.dart b/lib/views/widgets/gas_refill/floor_type_menu.dart index 9658b53f..e8fe78f7 100644 --- a/lib/views/widgets/gas_refill/floor_type_menu.dart +++ b/lib/views/widgets/gas_refill/floor_type_menu.dart @@ -1,15 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_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/hospital.dart'; -import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; -import 'package:test_sa/views/widgets/status/single_status_menu.dart'; class FloorTypeMenu extends StatefulWidget { final Function(Floors) onSelect; @@ -41,6 +33,9 @@ class _FloorTypeMenuState extends State { _floors = widget.floors; _selected = null; } + if (oldWidget.initialValue != widget.initialValue && widget.initialValue != null) { + _selected = widget.initialValue; + } super.didUpdateWidget(oldWidget); }