diff --git a/lib/controllers/providers/api/asset_transfer_provider.dart b/lib/controllers/providers/api/asset_transfer_provider.dart index e55b2829..bab4ce25 100644 --- a/lib/controllers/providers/api/asset_transfer_provider.dart +++ b/lib/controllers/providers/api/asset_transfer_provider.dart @@ -148,12 +148,16 @@ class AssetTransferProvider extends ChangeNotifier { } } - Future updateRequest({@required AssetTransfer assetTransfer}) async { + Future updateRequest(BuildContext context, {@required AssetTransfer assetTransfer}) async { Response response; try { - assetTransfer.receiverStartDate = assetTransfer.timer?.startAt?.toIso8601String(); - assetTransfer.receiverEndDate = assetTransfer.timer?.endAt?.toIso8601String(); - assetTransfer.receiverWorkingHours = (((assetTransfer.timer?.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + assetTransfer.receiverStartDate = assetTransfer.receiverTimer?.startAt?.toIso8601String(); + assetTransfer.receiverEndDate = assetTransfer.receiverTimer?.endAt?.toIso8601String(); + assetTransfer.receiverWorkingHours = (((assetTransfer.receiverTimer?.durationInSecond ?? 0) * 60) * 60).toStringAsFixed(2); + assetTransfer.senderStartDate = assetTransfer.senderTimer?.startAt?.toIso8601String(); + assetTransfer.senderEndDate = assetTransfer.senderTimer?.endAt?.toIso8601String(); + assetTransfer.senderWorkingHours = (((assetTransfer.senderTimer?.durationInSecond ?? 0) * 60) * 60).toStringAsFixed(2); response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: assetTransfer.toJson()); print(response.body); @@ -166,15 +170,21 @@ class AssetTransferProvider extends ChangeNotifier { stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { reset(); + Fluttertoast.showToast(msg: context.translation.successfulRequestMessage); + Navigator.of(context).pop(); // oldModel.fromDeviceTransfer( // DeviceTransfer.fromJson( // json.decode(utf8.decode(response.bodyBytes))[0] // ) // ); notifyListeners(); + } else { + Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest} :${json.decode(response.body)['message']}"); } + Navigator.pop(context); return response.statusCode; } catch (error) { + Navigator.pop(context); return -1; } } diff --git a/lib/models/device/asset_transfer.dart b/lib/models/device/asset_transfer.dart index 146bb602..26e27476 100644 --- a/lib/models/device/asset_transfer.dart +++ b/lib/models/device/asset_transfer.dart @@ -66,7 +66,8 @@ class AssetTransfer { this.senderSiteName, this.supplierId, this.supplierName, - this.timer, + this.senderTimer, + this.receiverTimer, }); AssetTransfer.fromJson(dynamic json) { @@ -107,10 +108,15 @@ class AssetTransfer { receiverTravelingHours = json['receiverTravelingHours']; receiverEngSignature = json['receiverEngSignature']; try { - timer = TimerModel(startAt: DateTime.tryParse(receiverStartDate ?? ""), endAt: DateTime.tryParse(receiverEndDate)); - if (timer.endAt != null && timer.startAt != null) { - timer.durationInSecond = (timer.endAt.difference(timer.startAt))?.inSeconds; - receiverWorkingHours = (((timer.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2); + receiverTimer = TimerModel(startAt: DateTime.tryParse(receiverStartDate ?? ""), endAt: DateTime.tryParse(receiverEndDate)); + senderTimer = TimerModel(startAt: DateTime.tryParse(senderStartDate ?? ""), endAt: DateTime.tryParse(senderEndDate)); + if (receiverTimer.endAt != null && receiverTimer.startAt != null) { + receiverTimer.durationInSecond = (receiverTimer.endAt.difference(receiverTimer.startAt))?.inSeconds; + receiverWorkingHours = (((receiverTimer.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2); + } + if (senderTimer.endAt != null && senderTimer.startAt != null) { + senderTimer.durationInSecond = (senderTimer.endAt.difference(senderTimer.startAt))?.inSeconds; + senderWorkingHours = (((senderTimer.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2); } } catch (e) { print(e); @@ -206,7 +212,8 @@ class AssetTransfer { bool applied; String createdOn; String modifiedOn; - TimerModel timer = TimerModel(); + TimerModel senderTimer = TimerModel(); + TimerModel receiverTimer = TimerModel(); AssetTransfer copyWith({ num id, @@ -268,7 +275,8 @@ class AssetTransfer { int manufacturerId, String manufacturerName, String destDepartmentName, - TimerModel timer, + TimerModel senderTimer, + TimerModel receiverTimer, }) => AssetTransfer( id: id ?? this.id, @@ -328,7 +336,8 @@ class AssetTransfer { modelId: modelId ?? this.modelId, modelName: modelName ?? this.modelName, manufacturerId: manufacturerId ?? this.manufacturerId, - timer: timer ?? this.timer, + senderTimer: senderTimer ?? this.senderTimer, + receiverTimer: receiverTimer ?? this.receiverTimer, manufacturerName: manufacturerName ?? this.manufacturerName); Map toJson() { final map = {}; @@ -439,6 +448,7 @@ class AssetTransfer { } fromDetails(AssetTransfer assetTransfer) { + if (assetTransfer == null) return; id = assetTransfer.id; transferNo = assetTransfer.transferNo; transferCode = assetTransfer.transferCode; @@ -497,6 +507,8 @@ class AssetTransfer { modelName = assetTransfer.modelName; manufacturerId = assetTransfer.manufacturerId; manufacturerName = assetTransfer.manufacturerName; + senderTimer = assetTransfer.senderTimer; + receiverTimer = assetTransfer.receiverTimer; } Future validate(BuildContext context) async { diff --git a/lib/views/app_style/colors.dart b/lib/views/app_style/colors.dart index a3752f35..7620de95 100644 --- a/lib/views/app_style/colors.dart +++ b/lib/views/app_style/colors.dart @@ -45,6 +45,8 @@ class AColors { static Color getRequestStatusColorByName(String status) { switch ((status ?? "").toLowerCase()) { + case "medium": + return AColors.statusBlue; case "in progress": return AColors.statusYellowLight; case "complete": diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 9290e58f..1d6ab135 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; @@ -9,7 +8,6 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/device/asset_transfer.dart'; import 'package:test_sa/views/app_style/colors.dart'; -import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; @@ -124,8 +122,8 @@ class _DeviceTransferDetailsState extends State { ? StatusLabel( label: _model?.senderMachineStatusName, id: _model?.senderMachineStatusId, - textColor: AColors.getRequestStatusTextColor(getIdstatus(_model.senderMachineStatusName)), - backgroundColor: AColors.getRequestStatusColor(getIdstatus(_model.senderMachineStatusName))) + textColor: AColors.getRequestStatusTextColorByName(_model.senderMachineStatusName), + backgroundColor: AColors.getRequestStatusColorByName(_model.senderMachineStatusName)) : null, ), 8.height, @@ -143,8 +141,8 @@ class _DeviceTransferDetailsState extends State { ? StatusLabel( label: _model?.receiverMachineStatusName ?? "", id: _model?.receiverMachineStatusId, - textColor: AColors.getRequestStatusTextColor(getIdstatus(_model.receiverMachineStatusName)), - backgroundColor: AColors.getRequestStatusColor(getIdstatus(_model.receiverMachineStatusName))) + textColor: AColors.getRequestStatusTextColorByName(_model.receiverMachineStatusName), + backgroundColor: AColors.getRequestStatusColorByName(_model.receiverMachineStatusName)) : null, ), ], @@ -185,18 +183,7 @@ class _DeviceTransferDetailsState extends State { if (isSender ? (_model?.senderMachineStatusName?.toLowerCase() != "closed" && _model?.senderMachineStatusName?.toLowerCase() != "completed") : (_model?.receiverMachineStatusName?.toLowerCase() != "closed" && _model?.receiverMachineStatusName?.toLowerCase() != "completed")) - CircleAvatar( - radius: 25, - backgroundColor: AppColor.neutral30, - child: CircleAvatar( - radius: 24, - backgroundColor: Colors.white, - child: Padding( - padding: const EdgeInsets.only(left: 3.0), - child: SvgPicture.asset('assets/images/update.svg'), - ), - ), - ).onPress(isSender + "edit".toSvgAsset(height: 48, width: 48).onPress(isSender ? () { Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender))); } @@ -216,18 +203,4 @@ class _DeviceTransferDetailsState extends State { ], ).toShadowContainer(context); } - - int getIdstatus(String status) { - switch (status) { - case "Closed": - return 3; - break; - case "Open": - return 1; - break; - case "In Progress": - return 2; - break; - } - } } diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index a5aa5e2d..2f8c172d 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -48,11 +49,11 @@ class _UpdateDeviceTransferState extends State { final GlobalKey _scaffoldKey = GlobalKey(); _update() async { - if (_formModel?.timer?.startAt == null) { + if ((widget.isSender && _formModel?.senderTimer?.startAt == null) || (!widget.isSender && _formModel?.receiverTimer?.startAt == null)) { await Fluttertoast.showToast(msg: "Working Hours Required"); return false; } - if (_formModel?.timer?.endAt == null) { + if ((widget.isSender && _formModel?.senderTimer?.endAt == null) || (!widget.isSender && _formModel?.receiverTimer?.startAt == null)) { await Fluttertoast.showToast(msg: "Please Stop The Timer"); return false; } @@ -62,19 +63,7 @@ class _UpdateDeviceTransferState extends State { return false; } _formKey.currentState.save(); - - _isLoading = true; - setState(() {}); - int status = await _deviceTransferProvider.updateRequest(assetTransfer: _formModel); - _isLoading = false; - setState(() {}); - if (status >= 200 && status < 300) { - Fluttertoast.showToast( - msg: context.translation.successfulRequestMessage, - ); - _validate = false; - Navigator.of(context).pop(); - } + await _deviceTransferProvider.updateRequest(context, assetTransfer: _formModel); } // @override @@ -122,6 +111,10 @@ class _UpdateDeviceTransferState extends State { AppTextFormField( initialValue: widget.isSender ? _formModel.senderTravelingHours : _formModel.receiverTravelingHours, labelText: context.translation.travelingHours, + onChange: (text) { + log(widget.isSender ? _formModel.senderStartDate : _formModel.receiverStartDate); + log(widget.isSender ? _formModel.senderEndDate : _formModel.receiverEndDate); + }, onSaved: (value) { widget.isSender ? _formModel.senderTravelingHours : _formModel.receiverTravelingHours = value; //_formModel?.workingHours = double.tryParse(value); @@ -133,10 +126,14 @@ class _UpdateDeviceTransferState extends State { 8.height, AppTimer( label: context.translation.workingHours, - timer: _formModel.timer, - enabled: _formModel.receiverEndDate == null, + timer: widget.isSender ? _formModel.senderTimer : _formModel.receiverTimer, + enabled: widget.isSender ? _formModel.senderEndDate == null : _formModel.receiverEndDate == null, onChange: (timer) async { - _formModel.timer = timer; + if (widget.isSender) { + _formModel.senderTimer = timer; + } else { + _formModel.receiverTimer = timer; + } return true; }, ), @@ -175,7 +172,7 @@ class _UpdateDeviceTransferState extends State { 8.height, ESignature( title: "Signature", - oldSignature: widget.isSender ? widget.model.senderEngSignature : widget.model.receiverEngSignature, + oldSignature: widget.isSender ? widget.model?.senderEngSignature : widget.model?.receiverEngSignature, newSignature: _signature, onSaved: (signature) { _signature = signature;