Track Gaz Refill Done

pull/2/head
zaid_daoud 3 years ago
parent ee4498a55e
commit 83bf02e69f

@ -142,6 +142,19 @@ class GasRefillProvider extends ChangeNotifier {
"id": newModel.id, "id": newModel.id,
"gazRefillNo": newModel.title ?? "", "gazRefillNo": newModel.title ?? "",
"status": newModel.status.toMap(), "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 body["gazRefillDetails"] = newModel.details

@ -427,11 +427,11 @@ class Department {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['departmentName'] = this.departmentName; data['departmentName'] = departmentName;
data['departmentCode'] = this.departmentCode; data['departmentCode'] = departmentCode;
data['ntCode'] = this.ntCode; data['ntCode'] = ntCode;
return data; return data;
} }
} }
@ -520,7 +520,7 @@ class Building {
int value; int value;
var floor; var floor;
Building({this.id, this.name, this.value,this.floor}); Building({this.id, this.name, this.value, this.floor});
Building.fromJson(Map<String, dynamic> json) { Building.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -538,4 +538,3 @@ class Building {
return data; return data;
} }
} }

@ -1,6 +1,8 @@
import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import '../call_request_for_work_order_model.dart';
class GasRefillModel { class GasRefillModel {
int id; int id;
//String userId; //String userId;
@ -9,8 +11,10 @@ class GasRefillModel {
Lookup status; Lookup status;
Lookup building; Lookup building;
Lookup floor; Lookup floor;
Department department;
List<GasRefillDetails> details; List<GasRefillDetails> details;
DateTime startDate, endDate, expectedDate;
GasRefillModel({ GasRefillModel({
this.id, this.id,
//this.userId, //this.userId,
@ -18,13 +22,22 @@ class GasRefillModel {
this.title, this.title,
this.status, this.status,
this.details, this.details,
this.building,
this.floor,
this.startDate,
this.endDate,
this.expectedDate,
this.department,
}); });
bool validate() { bool validate() {
if (title == null) return false; if (title == null) return false;
if (status == null) return false; if (status == null) return false;
if (building == null) return false; // if (building == null) return false;
if (floor == 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; if (details == null && details.isEmpty) return false;
return true; return true;
} }
@ -36,6 +49,12 @@ class GasRefillModel {
title = model.title; title = model.title;
status = Lookup.fromStatus(model.status); status = Lookup.fromStatus(model.status);
details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList(); 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<String, dynamic> parsedJson) { factory GasRefillModel.fromJson(Map<String, dynamic> parsedJson) {
@ -49,8 +68,14 @@ class GasRefillModel {
//userId: parsedJson["uid"], //userId: parsedJson["uid"],
title: parsedJson["gazRefillNo"], title: parsedJson["gazRefillNo"],
clientName: parsedJson["site"] == null ? null : parsedJson["site"]["custName"], clientName: parsedJson["site"] == null ? null : parsedJson["site"]["custName"],
status: Lookup.fromJson(parsedJson["status"]), status: Lookup.fromJson(parsedJson["status"] ?? {}),
details: details, 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'] ?? ""),
); );
} }
} }

@ -17,7 +17,7 @@ class Hospital {
if (parsedJson['buildings'] != null) { if (parsedJson['buildings'] != null) {
buildings = []; buildings = [];
parsedJson['buildings'].forEach((v) { parsedJson['buildings'].forEach((v) {
buildings.add(new Buildings.fromJson(v)); buildings.add(Buildings.fromJson(v));
}); });
} }
@ -78,20 +78,20 @@ class Buildings {
name = json['name']; name = json['name'];
value = json['value']; value = json['value'];
if (json['floors'] != null) { if (json['floors'] != null) {
floors = new List<Floors>(); floors = List<Floors>();
json['floors'].forEach((v) { json['floors'].forEach((v) {
floors.add(new Floors.fromJson(v)); floors.add(Floors.fromJson(v));
}); });
} }
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson({bool includeFloors = true}) {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['name'] = this.name; data['name'] = name;
data['value'] = this.value; data['value'] = value;
if (this.floors != null) { if (floors != null && includeFloors) {
data['floors'] = this.floors.map((v) => v.toJson()).toList(); data['floors'] = floors.map((v) => v.toJson()).toList();
} }
return data; return data;
} }
@ -110,20 +110,20 @@ class Floors {
name = json['name']; name = json['name'];
value = json['value']; value = json['value'];
if (json['departments'] != null) { if (json['departments'] != null) {
departments = new List<Departments>(); departments = List<Departments>();
json['departments'].forEach((v) { json['departments'].forEach((v) {
departments.add(new Departments.fromJson(v)); departments.add(Departments.fromJson(v));
}); });
} }
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson({bool includeDepartments = true}) {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['name'] = this.name; data['name'] = name;
data['value'] = this.value; data['value'] = value;
if (this.departments != null) { if (departments != null && includeDepartments) {
data['departments'] = this.departments.map((v) => v.toJson()).toList(); data['departments'] = departments.map((v) => v.toJson()).toList();
} }
return data; return data;
} }
@ -141,9 +141,9 @@ class Departments {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['name'] = this.name; data['name'] = name;
return data; return data;
} }
} }

@ -1,15 +1,16 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.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/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_provider.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/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_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/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/sizing.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_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_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/status/gas_refill/gas_status.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../models/enums/user_types.dart';
import '../../../app_style/colors.dart'; import '../../../app_style/colors.dart';
class GasRefillDetails extends StatefulWidget { class GasRefillDetails extends StatefulWidget {
@ -109,14 +111,24 @@ class _GasRefillDetailsState extends State<GasRefillDetails> {
), ),
if (_userProvider.user.type == UsersTypes.engineer) if (_userProvider.user.type == UsersTypes.engineer)
AIconButton( AIconButton(
iconData: _enableEdit ? Icons.cancel : Icons.edit, iconData: /*_enableEdit ? Icons.cancel :*/ Icons.edit,
color: Theme.of(context).colorScheme.onPrimary, color: Theme.of(context).colorScheme.onPrimary,
buttonSize: 42, buttonSize: 42,
backgroundColor: AColors.green, backgroundColor: AColors.green,
onPressed: () async { onPressed: () async {
_enableEdit = !_enableEdit; // _enableEdit = !_enableEdit;
print(widget.model.startDate);
_model.fromGasRefillModel(widget.model); _model.fromGasRefillModel(widget.model);
setState(() {}); print(widget.model.startDate);
// setState(() {});
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => RequestGasRefill(
gasRefillModel: widget.model,
),
),
);
}, },
), ),
const SizedBox( const SizedBox(
@ -139,6 +151,22 @@ class _GasRefillDetailsState extends State<GasRefillDetails> {
title: _subtitle.hospital, title: _subtitle.hospital,
info: _model.clientName, 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 _enableEdit
? Column( ? Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,

@ -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 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../controllers/localization/localization.dart'; import '../../../../controllers/localization/localization.dart';
import '../../../../controllers/providers/api/hospitals_provider.dart';
import '../../../../models/enums/user_types.dart'; import '../../../../models/enums/user_types.dart';
class RequestGasRefill extends StatefulWidget { class RequestGasRefill extends StatefulWidget {
static const String id = "/request-gas-refill"; static const String id = "/request-gas-refill";
final GasRefillModel gasRefillModel;
const RequestGasRefill({Key key}) : super(key: key); const RequestGasRefill({this.gasRefillModel, Key key}) : super(key: key);
@override @override
State<RequestGasRefill> createState() => _RequestGasRefillState(); State<RequestGasRefill> createState() => _RequestGasRefillState();
@ -47,10 +48,19 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
GasRefillProvider _gasRefillProvider; GasRefillProvider _gasRefillProvider;
GasRefillDetails _currentDetails = GasRefillDetails(); GasRefillDetails _currentDetails = GasRefillDetails();
final TextEditingController _requestedQuantityController = TextEditingController(); final TextEditingController _requestedQuantityController = TextEditingController();
final GasRefillModel _formModel = GasRefillModel(details: []); GasRefillModel _formModel = GasRefillModel(details: []);
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey _DetailsKey = GlobalKey<FormState>(); final GlobalKey _DetailsKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
bool _firstTime = true;
@override
void initState() {
super.initState();
if (widget.gasRefillModel != null) {
_formModel = widget.gasRefillModel;
}
}
@override @override
void setState(VoidCallback fn) { void setState(VoidCallback fn) {
@ -64,11 +74,25 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
_isLoading = true; _isLoading = true;
setState(() {}); setState(() {});
if (widget.gasRefillModel != null) {
if (!_formModel.validate()) {
_isLoading = false;
setState(() {});
return;
}
}
int status = await _gasRefillProvider.createModel( int status = widget.gasRefillModel == null
? await _gasRefillProvider.createModel(
user: _userProvider.user, user: _userProvider.user,
host: _settingProvider.host, host: _settingProvider.host,
model: _formModel, model: _formModel,
)
: await _gasRefillProvider.updateModel(
user: _userProvider.user,
host: _settingProvider.host,
oldModel: widget.gasRefillModel,
newModel: _formModel,
); );
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
@ -121,7 +145,21 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
_gasRefillProvider = Provider.of<GasRefillProvider>(context, listen: false); _gasRefillProvider = Provider.of<GasRefillProvider>(context, listen: false);
_gasRefillProvider.reset(); _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( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
body: Form( body: Form(
@ -141,7 +179,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text( 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), 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<RequestGasRefill> {
}), }),
const SizedBox(height: 16), const SizedBox(height: 16),
AButton( AButton(
text: _subtitle.submit, text: widget.gasRefillModel == null ? _subtitle.submit : _subtitle.update,
onPressed: _onSubmit, onPressed: _onSubmit,
), ),
const SizedBox( const SizedBox(

@ -1,15 +1,7 @@
import 'package:flutter/material.dart'; 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/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/colors.dart';
import 'package:test_sa/views/app_style/sizing.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 { class BuildingTypeMenu extends StatefulWidget {
final Function(Buildings) onSelect; final Function(Buildings) onSelect;
@ -41,6 +33,9 @@ class _BuildingTypeMenuState extends State<BuildingTypeMenu> {
_building = widget.building; _building = widget.building;
_selectedBuilding = null; _selectedBuilding = null;
} }
if (oldWidget.initialValue != widget.initialValue && widget.initialValue != null) {
_selectedBuilding = widget.initialValue;
}
super.didUpdateWidget(oldWidget); super.didUpdateWidget(oldWidget);
} }

@ -1,15 +1,7 @@
import 'package:flutter/material.dart'; 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/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/colors.dart';
import 'package:test_sa/views/app_style/sizing.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 { class DepartmentTypeMenu extends StatefulWidget {
final Function(Departments) onSelect; final Function(Departments) onSelect;
@ -41,6 +33,9 @@ class _DepartmentTypeMenuState extends State<DepartmentTypeMenu> {
_departments = widget.departments; _departments = widget.departments;
_selected = null; _selected = null;
} }
if (oldWidget.initialValue != widget.initialValue && widget.initialValue != null) {
_selected = widget.initialValue;
}
super.didUpdateWidget(oldWidget); super.didUpdateWidget(oldWidget);
} }

@ -1,15 +1,7 @@
import 'package:flutter/material.dart'; 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/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/colors.dart';
import 'package:test_sa/views/app_style/sizing.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 { class FloorTypeMenu extends StatefulWidget {
final Function(Floors) onSelect; final Function(Floors) onSelect;
@ -41,6 +33,9 @@ class _FloorTypeMenuState extends State<FloorTypeMenu> {
_floors = widget.floors; _floors = widget.floors;
_selected = null; _selected = null;
} }
if (oldWidget.initialValue != widget.initialValue && widget.initialValue != null) {
_selected = widget.initialValue;
}
super.didUpdateWidget(oldWidget); super.didUpdateWidget(oldWidget);
} }

Loading…
Cancel
Save