Merge remote-tracking branch 'origin/main_design2.0' into main_design2.0

main_design2.0
Sikander Saleem 12 months ago
commit b03f350a2c

@ -1,5 +1,4 @@
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
@ -149,11 +148,12 @@ class AssetTransferProvider extends ChangeNotifier {
}
}
Future<int> updateRequest({
@required AssetTransfer assetTransfer,
}) async {
Future<int> updateRequest({@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);
response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: assetTransfer.toJson());
print(response.body);

@ -2,6 +2,7 @@ import 'package:flutter/src/widgets/framework.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/timer_model.dart';
import 'asset_transfer_attachment.dart';
@ -64,7 +65,8 @@ class AssetTransfer {
this.senderMachineStatusName,
this.senderSiteName,
this.supplierId,
this.supplierName
this.supplierName,
this.timer,
});
AssetTransfer.fromJson(dynamic json) {
@ -104,38 +106,47 @@ class AssetTransfer {
receiverWorkingHours = json['receiverWorkingHours'];
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);
}
} catch (e) {
print(e);
}
if (json['receiverAttachments'] != null) {
receiverAttachments = [];
json['receiverAttachments'].forEach((v) {
receiverAttachments.add(AssetTransferAttachment.fromJson(v));
});
}
assetNumber= json['assetNumber'];
assetName= json['assetName'];
manufacturerName= json['manufacturerName'];
modelName= json['modelName'];
assetSerialNo= json['assetSerialNo'];
destDepartmentName= json['destDepartmentName'];
destBuildingName= json['destBuildingName'];
applied= json['applied'];
createdOn= json['createdOn'];
destFloorName= json['destFloorName'];
destSiteName= json['destSiteName'];
manufacturerId= json['manufacturerId'];
modelId= json['modelId'];
modifiedOn= json['modifiedOn'];
receiverAssignedEmployeeName= json['receiverAssignedEmployeeName'];
receiverEngSignatureUrl= json['receiverEngSignatureUrl'];
receiverMachineStatusName= json['receiverMachineStatusName'];
senderAssignedEmployeeName= json['senderAssignedEmployeeName'];
senderBuildingName= json['senderBuildingName'];
senderDepartmentName= json['senderDepartmentName'];
senderEngSignatureUrl= json['senderEngSignatureUrl'];
senderFloorName= json['senderFloorName'];
senderMachineStatusName= json['senderMachineStatusName'];
senderSiteName= json['senderSiteName'];
supplierId= json['supplierId'];
supplierName= json['supplierName'];
assetNumber = json['assetNumber'];
assetName = json['assetName'];
manufacturerName = json['manufacturerName'];
modelName = json['modelName'];
assetSerialNo = json['assetSerialNo'];
destDepartmentName = json['destDepartmentName'];
destBuildingName = json['destBuildingName'];
applied = json['applied'];
createdOn = json['createdOn'];
destFloorName = json['destFloorName'];
destSiteName = json['destSiteName'];
manufacturerId = json['manufacturerId'];
modelId = json['modelId'];
modifiedOn = json['modifiedOn'];
receiverAssignedEmployeeName = json['receiverAssignedEmployeeName'];
receiverEngSignatureUrl = json['receiverEngSignatureUrl'];
receiverMachineStatusName = json['receiverMachineStatusName'];
senderAssignedEmployeeName = json['senderAssignedEmployeeName'];
senderBuildingName = json['senderBuildingName'];
senderDepartmentName = json['senderDepartmentName'];
senderEngSignatureUrl = json['senderEngSignatureUrl'];
senderFloorName = json['senderFloorName'];
senderMachineStatusName = json['senderMachineStatusName'];
senderSiteName = json['senderSiteName'];
supplierId = json['supplierId'];
supplierName = json['supplierName'];
}
num id;
num transferNo;
@ -195,6 +206,7 @@ class AssetTransfer {
bool applied;
String createdOn;
String modifiedOn;
TimerModel timer = TimerModel();
AssetTransfer copyWith({
num id,
@ -255,7 +267,8 @@ class AssetTransfer {
String modelName,
int manufacturerId,
String manufacturerName,
String destDepartmentName
String destDepartmentName,
TimerModel timer,
}) =>
AssetTransfer(
id: id ?? this.id,
@ -290,33 +303,33 @@ class AssetTransfer {
receiverTravelingHours: receiverTravelingHours ?? this.receiverTravelingHours,
receiverEngSignature: receiverEngSignature ?? this.receiverEngSignature,
receiverAttachments: receiverAttachments ?? this.receiverAttachments,
supplierId : supplierId?? this.supplierId,
supplierName: supplierName??this.supplierName,
destSiteName: destSiteName??this.destSiteName,
destBuildingName: destBuildingName?? this.destBuildingName,
destFloorName: destFloorName??this.destFloorName,
destDepartmentName: destDepartmentName?? this.destDepartmentName,
senderSiteName: senderSiteName??this.senderSiteName,
senderBuildingName: senderBuildingName??this.senderBuildingName,
senderFloorName: senderFloorName??this.senderFloorName,
senderDepartmentName: senderDepartmentName??this.senderDepartmentName,
senderAssignedEmployeeName: senderAssignedEmployeeName??this.senderAssignedEmployeeName,
senderMachineStatusName: senderMachineStatusName??this.senderMachineStatusName,
senderEngSignatureUrl: senderEngSignatureUrl??this.senderEngSignatureUrl,
receiverAssignedEmployeeName: receiverAssignedEmployeeName?? this.receiverAssignedEmployeeName,
receiverMachineStatusName: receiverMachineStatusName??this.receiverMachineStatusName,
receiverEngSignatureUrl: receiverEngSignatureUrl??this.receiverEngSignatureUrl,
applied: applied??this.applied,
createdOn: createdOn?? this.createdOn,
modifiedOn: modifiedOn??this.modifiedOn,
assetSerialNo:assetSerialNo??this.assetSerialNo,
assetNumber:assetNumber??this.assetNumber,
assetName:assetName??this.assetName,
modelId:modelId??this.modelId,
modelName:modelName??this.modelName,
manufacturerId:manufacturerId??this.manufacturerId,
manufacturerName:manufacturerName??this.manufacturerName
);
supplierId: supplierId ?? this.supplierId,
supplierName: supplierName ?? this.supplierName,
destSiteName: destSiteName ?? this.destSiteName,
destBuildingName: destBuildingName ?? this.destBuildingName,
destFloorName: destFloorName ?? this.destFloorName,
destDepartmentName: destDepartmentName ?? this.destDepartmentName,
senderSiteName: senderSiteName ?? this.senderSiteName,
senderBuildingName: senderBuildingName ?? this.senderBuildingName,
senderFloorName: senderFloorName ?? this.senderFloorName,
senderDepartmentName: senderDepartmentName ?? this.senderDepartmentName,
senderAssignedEmployeeName: senderAssignedEmployeeName ?? this.senderAssignedEmployeeName,
senderMachineStatusName: senderMachineStatusName ?? this.senderMachineStatusName,
senderEngSignatureUrl: senderEngSignatureUrl ?? this.senderEngSignatureUrl,
receiverAssignedEmployeeName: receiverAssignedEmployeeName ?? this.receiverAssignedEmployeeName,
receiverMachineStatusName: receiverMachineStatusName ?? this.receiverMachineStatusName,
receiverEngSignatureUrl: receiverEngSignatureUrl ?? this.receiverEngSignatureUrl,
applied: applied ?? this.applied,
createdOn: createdOn ?? this.createdOn,
modifiedOn: modifiedOn ?? this.modifiedOn,
assetSerialNo: assetSerialNo ?? this.assetSerialNo,
assetNumber: assetNumber ?? this.assetNumber,
assetName: assetName ?? this.assetName,
modelId: modelId ?? this.modelId,
modelName: modelName ?? this.modelName,
manufacturerId: manufacturerId ?? this.manufacturerId,
timer: timer ?? this.timer,
manufacturerName: manufacturerName ?? this.manufacturerName);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
@ -356,12 +369,12 @@ class AssetTransfer {
map['receiverAttachments'] = receiverAttachments.map((v) => v.toJson()).toList();
}
map["supplierId"] = supplierId;
map["supplierName"] =supplierName;
map["destSiteName"] =destSiteName;
map["destBuildingName"] =destBuildingName;
map["destFloorName"] =destFloorName;
map["destDepartmentName"] =destDepartmentName;
map["senderSiteName"] =senderSiteName;
map["supplierName"] = supplierName;
map["destSiteName"] = destSiteName;
map["destBuildingName"] = destBuildingName;
map["destFloorName"] = destFloorName;
map["destDepartmentName"] = destDepartmentName;
map["senderSiteName"] = senderSiteName;
map["senderBuildingName"] = senderBuildingName;
map["senderFloorName"] = senderFloorName;
map["senderDepartmentName"] = senderDepartmentName;
@ -374,13 +387,13 @@ class AssetTransfer {
map["applied"] = applied;
map["createdOn"] = createdOn;
map["modifiedOn"] = modifiedOn;
map["assetSerialNo"] =assetSerialNo;
map["assetNumber"] =assetNumber;
map["assetName"] =assetName;
map["modelId"] =modelId;
map["modelName"] =modelName;
map["manufacturerId"] =manufacturerId;
map["manufacturerName"] =manufacturerName;
map["assetSerialNo"] = assetSerialNo;
map["assetNumber"] = assetNumber;
map["assetName"] = assetName;
map["modelId"] = modelId;
map["modelName"] = modelName;
map["manufacturerId"] = manufacturerId;
map["manufacturerName"] = manufacturerName;
return map;
}
@ -425,71 +438,67 @@ class AssetTransfer {
return map;
}
fromDetails(AssetTransfer assetTransfer){
id= assetTransfer.id;
transferNo=assetTransfer.transferNo;
transferCode= assetTransfer.transferCode;
assetId=assetTransfer.assetId;
destSiteId= assetTransfer.destSiteId;
destBuildingId=assetTransfer.destBuildingId;
destFloorId=assetTransfer.destFloorId;
destDepartmentId= assetTransfer.destDepartmentId;
destRoom=assetTransfer.destRoom;
senderSiteId=assetTransfer.senderSiteId;
senderBuildingId=assetTransfer.senderBuildingId;
senderFloorId=assetTransfer.senderFloorId;
senderDepartmentId=assetTransfer.senderDepartmentId;
senderRoom=assetTransfer.senderRoom;
senderAssignedEmployeeId= assetTransfer.senderAssignedEmployeeId;
senderMachineStatusId=assetTransfer.senderMachineStatusId;
senderComment=assetTransfer.senderComment;
senderStartDate= assetTransfer.senderStartDate;
senderEndDate= assetTransfer.senderEndDate;
senderWorkingHours= assetTransfer.senderWorkingHours;
senderTravelingHours= assetTransfer.senderTravelingHours;
senderEngSignature=assetTransfer.senderEngSignature;
senderAttachments=assetTransfer.senderAttachments;
receiverAssignedEmployeeId=assetTransfer.receiverAssignedEmployeeId;
receiverMachineStatusId= assetTransfer.receiverMachineStatusId;
receiverComment= assetTransfer.receiverComment;
receiverStartDate=assetTransfer.receiverStartDate;
receiverEndDate= assetTransfer.receiverEndDate;
receiverWorkingHours= assetTransfer.receiverWorkingHours;
receiverTravelingHours= assetTransfer.receiverTravelingHours;
receiverEngSignature= assetTransfer.receiverEngSignature;
receiverAttachments=assetTransfer.receiverAttachments;
supplierId =assetTransfer.supplierId;
supplierName=assetTransfer.supplierName;
destSiteName=assetTransfer.destSiteName;
destBuildingName=assetTransfer.destBuildingName;
destFloorName=assetTransfer.destFloorName;
destDepartmentName=assetTransfer.destDepartmentName;
senderSiteName=assetTransfer.senderSiteName;
senderBuildingName=assetTransfer.senderBuildingName;
senderFloorName=assetTransfer.senderFloorName;
senderDepartmentName=assetTransfer.senderDepartmentName;
senderAssignedEmployeeName=assetTransfer.senderAssignedEmployeeName;
senderMachineStatusName= assetTransfer.senderMachineStatusName;
senderEngSignatureUrl= assetTransfer.senderEngSignatureUrl;
receiverAssignedEmployeeName=assetTransfer.receiverAssignedEmployeeName;
receiverMachineStatusName=assetTransfer.receiverMachineStatusName;
receiverEngSignatureUrl=assetTransfer.receiverEngSignatureUrl;
applied=assetTransfer.applied;
createdOn= assetTransfer.createdOn;
modifiedOn= assetTransfer.modifiedOn;
assetSerialNo=assetTransfer.assetSerialNo;
assetNumber=assetTransfer.assetNumber;
assetName=assetTransfer.assetName;
modelId=assetTransfer.modelId;
modelName=assetTransfer.modelName;
manufacturerId=assetTransfer.manufacturerId;
manufacturerName=assetTransfer.manufacturerName;
fromDetails(AssetTransfer assetTransfer) {
id = assetTransfer.id;
transferNo = assetTransfer.transferNo;
transferCode = assetTransfer.transferCode;
assetId = assetTransfer.assetId;
destSiteId = assetTransfer.destSiteId;
destBuildingId = assetTransfer.destBuildingId;
destFloorId = assetTransfer.destFloorId;
destDepartmentId = assetTransfer.destDepartmentId;
destRoom = assetTransfer.destRoom;
senderSiteId = assetTransfer.senderSiteId;
senderBuildingId = assetTransfer.senderBuildingId;
senderFloorId = assetTransfer.senderFloorId;
senderDepartmentId = assetTransfer.senderDepartmentId;
senderRoom = assetTransfer.senderRoom;
senderAssignedEmployeeId = assetTransfer.senderAssignedEmployeeId;
senderMachineStatusId = assetTransfer.senderMachineStatusId;
senderComment = assetTransfer.senderComment;
senderStartDate = assetTransfer.senderStartDate;
senderEndDate = assetTransfer.senderEndDate;
senderWorkingHours = assetTransfer.senderWorkingHours;
senderTravelingHours = assetTransfer.senderTravelingHours;
senderEngSignature = assetTransfer.senderEngSignature;
senderAttachments = assetTransfer.senderAttachments;
receiverAssignedEmployeeId = assetTransfer.receiverAssignedEmployeeId;
receiverMachineStatusId = assetTransfer.receiverMachineStatusId;
receiverComment = assetTransfer.receiverComment;
receiverStartDate = assetTransfer.receiverStartDate;
receiverEndDate = assetTransfer.receiverEndDate;
receiverWorkingHours = assetTransfer.receiverWorkingHours;
receiverTravelingHours = assetTransfer.receiverTravelingHours;
receiverEngSignature = assetTransfer.receiverEngSignature;
receiverAttachments = assetTransfer.receiverAttachments;
supplierId = assetTransfer.supplierId;
supplierName = assetTransfer.supplierName;
destSiteName = assetTransfer.destSiteName;
destBuildingName = assetTransfer.destBuildingName;
destFloorName = assetTransfer.destFloorName;
destDepartmentName = assetTransfer.destDepartmentName;
senderSiteName = assetTransfer.senderSiteName;
senderBuildingName = assetTransfer.senderBuildingName;
senderFloorName = assetTransfer.senderFloorName;
senderDepartmentName = assetTransfer.senderDepartmentName;
senderAssignedEmployeeName = assetTransfer.senderAssignedEmployeeName;
senderMachineStatusName = assetTransfer.senderMachineStatusName;
senderEngSignatureUrl = assetTransfer.senderEngSignatureUrl;
receiverAssignedEmployeeName = assetTransfer.receiverAssignedEmployeeName;
receiverMachineStatusName = assetTransfer.receiverMachineStatusName;
receiverEngSignatureUrl = assetTransfer.receiverEngSignatureUrl;
applied = assetTransfer.applied;
createdOn = assetTransfer.createdOn;
modifiedOn = assetTransfer.modifiedOn;
assetSerialNo = assetTransfer.assetSerialNo;
assetNumber = assetTransfer.assetNumber;
assetName = assetTransfer.assetName;
modelId = assetTransfer.modelId;
modelName = assetTransfer.modelName;
manufacturerId = assetTransfer.manufacturerId;
manufacturerName = assetTransfer.manufacturerName;
}
Future<bool> validate(BuildContext context) async {
if (assetId == null) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.device}");

@ -1,4 +1,3 @@
import 'dart:developer';
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
@ -10,6 +9,7 @@ import 'package:test_sa/models/new_models/building.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/new_models/site.dart';
import 'package:test_sa/models/timer_model.dart';
class GasRefillModel {
GasRefillModel({
@ -32,7 +32,8 @@ class GasRefillModel {
this.status,
this.gazRefillDetails,
this.localEngineerSignature,
this.localNurseSignature
this.localNurseSignature,
this.timer,
});
GasRefillModel.fromJson(dynamic json) {
@ -44,6 +45,22 @@ class GasRefillModel {
startTime = json['startTime'];
endDate = json['endDate'];
endTime = json['endTime'];
try {
final sd = DateTime.tryParse(startDate ?? "");
final st = DateTime.tryParse(startTime ?? "");
final ed = DateTime.tryParse(endDate ?? "");
final et = DateTime.tryParse(endTime ?? "");
timer = TimerModel(
startAt: st == null ? sd : sd.add(Duration(hours: st.hour, minutes: st.minute, seconds: st.second)),
endAt: et == null ? ed : ed.add(Duration(hours: et.hour, minutes: et.minute, seconds: et.second)),
);
if (timer.endAt != null && timer.startAt != null) {
timer.durationInSecond = (timer.endAt.difference(timer.startAt))?.inSeconds;
workingHours = (((timer.durationInSecond ?? 0) / 60) / 60);
}
} catch (e) {
print(e);
}
engSignature = json['engSignature'];
nurseSignature = json['nurseSignature'];
workingHours = json['workingHours'];
@ -81,6 +98,7 @@ class GasRefillModel {
List<GasRefillDetails> gazRefillDetails;
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
TimerModel timer = TimerModel();
GasRefillModel copyWith({
num id,
@ -101,6 +119,7 @@ class GasRefillModel {
AssignedEmployee assignedEmployee,
Lookup status,
List<GasRefillDetails> gazRefillDetails,
TimerModel timer,
}) =>
GasRefillModel(
id: id ?? this.id,
@ -121,6 +140,7 @@ class GasRefillModel {
assignedEmployee: assignedEmployee ?? this.assignedEmployee,
status: status ?? this.status,
gazRefillDetails: gazRefillDetails ?? this.gazRefillDetails,
timer: timer ?? this.timer,
);
Map<String, dynamic> toJson() {
@ -200,15 +220,7 @@ class GasRefillModel {
}
class GasRefillDetails {
GasRefillDetails({
this.id,
this.gasType,
this.cylinderType,
this.cylinderSize,
this.requestedQty,
this.deliverdQty,
this.selectedForEditing
});
GasRefillDetails({this.id, this.gasType, this.cylinderType, this.cylinderSize, this.requestedQty, this.deliverdQty, this.selectedForEditing});
GasRefillDetails.fromJson(dynamic json) {
id = json['id'];

@ -9,6 +9,7 @@ import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/models/service_request/wo_call_request.dart';
import 'package:test_sa/models/service_request/wo_parent.dart';
import 'package:test_sa/models/timer_model.dart';
import '../../attachment.dart';
import '../device/asset.dart';
@ -54,6 +55,7 @@ class ServiceReport {
this.woParentDto,
this.loanAvailablity,
this.assetLoan,
this.timer,
});
ServiceReport.fromJson(dynamic json) {
@ -88,6 +90,15 @@ class ServiceReport {
startofWorkTime = json['startofWorkTime'];
endofWorkTime = json['endofWorkTime'];
workingHours = json['workingHours'];
try {
timer = TimerModel(startAt: DateTime.tryParse(startofWorkTime ?? ""), endAt: DateTime.tryParse(endofWorkTime));
if (timer.endAt != null && timer.startAt != null) {
timer.durationInSecond = (timer.endAt.difference(timer.startAt))?.inSeconds;
workingHours = (((timer.durationInSecond ?? 0) / 60) / 60);
}
} catch (e) {
print(e);
}
travelingHours = json['travelingHours'];
travelingExpenses = json['travelingExpenses'];
faultDescription = json['faultDescription'] != null ? FaultDescription.fromJson(json['faultDescription']) : null;
@ -155,6 +166,7 @@ class ServiceReport {
WoParent woParentDto;
Lookup loanAvailablity;
AssetInfo assetLoan;
TimerModel timer = TimerModel();
ServiceReport copyWith({
num id,
num parentWOId,
@ -191,6 +203,7 @@ class ServiceReport {
WoParent woParentDto,
Lookup loanAvailablity,
AssetInfo assetLoan,
TimerModel timer,
}) =>
ServiceReport(
id: id ?? this.id,
@ -228,6 +241,7 @@ class ServiceReport {
woParentDto: woParentDto ?? this.woParentDto,
loanAvailablity: loanAvailablity ?? this.loanAvailablity,
assetLoan: assetLoan ?? this.assetLoan,
timer: timer ?? this.timer,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
@ -306,6 +320,14 @@ class ServiceReport {
}
Future<bool> validate(BuildContext context) async {
if (timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
}
if (timer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
if (calllastSituation == null) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}");
return false;

@ -11,14 +11,10 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../controllers/localization/localization.dart';
import '../../../controllers/validator/validator.dart';
import '../../../extensions/text_extensions.dart';
import '../../../models/lookup.dart';
@ -27,6 +23,7 @@ import '../../../new_views/common_widgets/default_app_bar.dart';
import '../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../providers/gas_request_providers/gas_status_provider.dart';
import '../../widgets/e_signature/e_signature.dart';
import '../../widgets/timer/app_timer.dart';
class UpdateDeviceTransfer extends StatefulWidget {
final AssetTransfer model;
@ -51,14 +48,14 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
_update() async {
// if (_formModel?.timer?.startAt == null) {
// await Fluttertoast.showToast(msg: "Working Hours Required");
// return false;
// }
// if (_formModel?.timer?.endAt == null) {
// await Fluttertoast.showToast(msg: "Please Stop The Timer");
// return false;
// }
if (_formModel?.timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
}
if (_formModel?.timer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
_validate = true;
if (!(_formKey.currentState.validate())) {
setState(() {});
@ -68,8 +65,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_isLoading = true;
setState(() {});
int status = await _deviceTransferProvider.updateRequest(
assetTransfer: _formModel);
int status = await _deviceTransferProvider.updateRequest(assetTransfer: _formModel);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
@ -119,16 +115,15 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
SingleChildScrollView(
padding: EdgeInsets.all(12 * AppStyle.getScaleFactor(context)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_buildCard(),
8.height,
AppTextFormField(
initialValue: widget.isSender? _formModel.senderTravelingHours:_formModel.receiverTravelingHours,
initialValue: widget.isSender ? _formModel.senderTravelingHours : _formModel.receiverTravelingHours,
labelText: context.translation.travelingHours,
onSaved:(value){
widget.isSender? _formModel.senderTravelingHours
: _formModel.receiverTravelingHours= value;
onSaved: (value) {
widget.isSender ? _formModel.senderTravelingHours : _formModel.receiverTravelingHours = value;
//_formModel?.workingHours = double.tryParse(value);
// _formModel.travelingHours = value;
},
@ -136,33 +131,32 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
),
8.height,
AppTextFormField(
labelText: context.translation.workingHours,
initialValue: widget.isSender?_formModel.senderWorkingHours:_formModel.receiverWorkingHours,
onSaved:(value){
widget.isSender?
_formModel?.senderWorkingHours = value:_formModel?.receiverWorkingHours = value;
// _formModel.timer = timer;
// _formModel.workingHours = (((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0";
AppTimer(
label: context.translation.workingHours,
timer: _formModel.timer,
enabled: _formModel.receiverEndDate == null,
onChange: (timer) async {
_formModel.timer = timer;
return true;
},
textInputType: TextInputType.number,
validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
),
8.height,
///TBD
Consumer<GasStatusProvider>(builder: (context, snapshot, _){
return SingleItemDropDownMenu<Lookup,GasStatusProvider >(
Consumer<GasStatusProvider>(builder: (context, snapshot, _) {
return SingleItemDropDownMenu<Lookup, GasStatusProvider>(
context: context,
title: context.translation.reportStatus,
initialValue: snapshot.items?.firstWhere((element) => element.name == (widget.isSender?_formModel.senderMachineStatusName:_formModel.receiverMachineStatusName), orElse: () => null),
initialValue: snapshot.items
?.firstWhere((element) => element.name == (widget.isSender ? _formModel.senderMachineStatusName : _formModel.receiverMachineStatusName), orElse: () => null),
onSelect: (value) {
if(widget.isSender) {
_formModel.senderMachineStatusName=value.name;
_formModel.senderMachineStatusId=value.id;
if (widget.isSender) {
_formModel.senderMachineStatusName = value.name;
_formModel.senderMachineStatusId = value.id;
print("${value.id}");
}else{
_formModel.receiverMachineStatusName=value.name;
_formModel.receiverMachineStatusId=value.id;
} else {
_formModel.receiverMachineStatusName = value.name;
_formModel.receiverMachineStatusId = value.id;
}
setState(() {});
},
@ -170,13 +164,12 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
}),
8.height,
AppTextFormField(
initialValue: widget.isSender?_formModel.senderComment:_formModel.receiverComment,
initialValue: widget.isSender ? _formModel.senderComment : _formModel.receiverComment,
labelText: context.translation.comments,
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
onSaved: (value){
widget.isSender?
_formModel.senderComment = value:_formModel.receiverComment=value;
onSaved: (value) {
widget.isSender ? _formModel.senderComment = value : _formModel.receiverComment = value;
},
),
8.height,
@ -187,8 +180,9 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
onSaved: (signature) {
_signature = signature;
if (signature == null || signature.isEmpty) return;
widget.isSender? _formModel.senderEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}":
_formModel.receiverEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
widget.isSender
? _formModel.senderEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"
: _formModel.receiverEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
base64Encode(signature);
},
@ -211,7 +205,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
);
}
_buildCard(){
_buildCard() {
return Container(
width: MediaQuery.of(context).size.width,
decoration: ShapeDecoration(
@ -230,6 +224,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
'${context.translation.assetName}: ${_formModel.assetName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
///TBD
Text(
'${context.translation.requesterName}: ',

@ -1,4 +1,3 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
@ -15,7 +14,6 @@ import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../controllers/providers/api/hospitals_provider.dart';
import '../../../../extensions/text_extensions.dart';
import '../../../../models/new_models/gas_refill_model.dart';
@ -23,7 +21,7 @@ import '../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../new_views/common_widgets/default_app_bar.dart';
import '../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../../providers/gas_request_providers/gas_status_provider.dart';
import '../../../widgets/timer/app_timer.dart';
class RequestGasRefill extends StatefulWidget {
static const String id = "/request-gas-refill";
@ -67,6 +65,14 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
}
_onSubmit(BuildContext context) async {
if (_formModel.timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
}
if (_formModel.timer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
if (_formModel.gazRefillDetails.isEmpty) {
if (!(await _addNewModel(context))) return;
}
@ -133,7 +139,6 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
@override
Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
if (_gasRefillProvider == null) {
@ -144,8 +149,8 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
String _clientName;
if (widget.gasRefillModel != null) {
//_formModel.status = widget.gasRefillModel?.status ?? Lookup(value: 0);
_gasRefillProvider.expectedDateTime = DateTime.tryParse(_formModel.expectedDate??"");
_gasRefillProvider.timer = TimerModel(startAt: DateTime.tryParse(widget.gasRefillModel?.startDate??""), endAt: DateTime.tryParse(widget.gasRefillModel?.endDate??""));
_gasRefillProvider.expectedDateTime = DateTime.tryParse(_formModel.expectedDate ?? "");
_gasRefillProvider.timer = TimerModel(startAt: DateTime.tryParse(widget.gasRefillModel?.startDate ?? ""), endAt: DateTime.tryParse(widget.gasRefillModel?.endDate ?? ""));
_clientName = _formModel.site.custName;
} else {
_gasRefillProvider.timer = null;
@ -191,6 +196,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
children: [
Text(context.translation.gasRefill, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height,
/// TBD
Text(
'Gas Request:',
@ -212,28 +218,28 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
).paddingAll(16),
),
12.height,
AppTextFormField(
labelText: context.translation.workingHours,
onSaved:(value){
_formModel?.workingHours = double.tryParse(value);
AppTimer(
label: context.translation.workingHours,
timer: _formModel.timer,
enabled: _formModel.endDate == null,
onChange: (timer) async {
_formModel.timer = timer;
return true;
},
textInputType: TextInputType.number,
controller: _workingHoursController,
validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
),
12.height,
SingleItemDropDownMenu<Lookup,GasStatusProvider >(
SingleItemDropDownMenu<Lookup, GasStatusProvider>(
context: context,
title: context.translation.reportStatus,
initialValue: widget.gasRefillModel.status,
onSelect: (value) {
_formModel.status=value;
_formModel.status = value;
},
),
12.height,
AppTextFormField(
labelText: context.translation.deliveredQuantity,
onSaved:(value){
onSaved: (value) {
_currentDetails?.deliverdQty = double.tryParse(value);
},
textInputType: TextInputType.number,
@ -241,25 +247,26 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
),
12.height,
/// TBD
AppTextFormField(
labelText: context.translation.comments,
textInputType: TextInputType.multiline,
alignLabelWithHint: true,
controller: _commentController,
onSaved: (value){
},
onSaved: (value) {},
),
],
).paddingAll(16)
).expanded,
).paddingAll(16))
.expanded,
AppFilledButton(
label: widget.gasRefillModel == null ? context.translation.submit : context.translation.update,
onPressed:()async{_onSubmit.call(context);},
onPressed: () async {
_onSubmit.call(context);
},
).paddingAll(16),
],
)
),
)),
),
),
);

@ -31,6 +31,7 @@ import '../../../../../new_views/common_widgets/default_app_bar.dart';
import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../../widgets/date_and_time/date_picker.dart';
import '../../../../widgets/images/multi_image_picker.dart';
import '../../../../widgets/timer/app_timer.dart';
/// todo : TBD (compare with the design)
class CreateServiceReport extends StatefulWidget {
@ -142,11 +143,13 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
},
),
8.height,
AppTextFormField(
labelText: context.translation.workingHours,
textInputType: TextInputType.number,
onSaved: (text) {
_serviceReport.workingHours = num.tryParse(text ?? "");
AppTimer(
label: context.translation.workingHours,
timer: _serviceReport.timer,
enabled: _serviceReport.endofWorkTime == null,
onChange: (timer) async {
_serviceReport.timer = timer;
return true;
},
),
8.height,

@ -31,6 +31,7 @@ import '../../../../widgets/date_and_time/date_picker.dart';
import '../../../../widgets/e_signature/e_signature.dart';
import '../../../../widgets/images/multi_image_picker.dart';
import '../../../../widgets/status/report/service_report_assistant_employee_menu.dart';
import '../../../../widgets/timer/app_timer.dart';
class EditServiceReport extends StatefulWidget {
static final String id = "/edit-service-report";
@ -108,7 +109,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
children: [
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Card(
child: Column(
@ -131,12 +132,13 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
},
),
8.height,
AppTextFormField(
labelText: context.translation.workingHours,
textInputType: TextInputType.number,
initialValue: _serviceReport.workingHours?.toString(),
onSaved: (text) {
_serviceReport.workingHours = num.tryParse(text ?? "");
AppTimer(
label: context.translation.workingHours,
timer: _serviceReport.timer,
enabled: _serviceReport.endofWorkTime == null,
onChange: (timer) async {
_serviceReport.timer = timer;
return true;
},
),
8.height,

@ -14,9 +14,11 @@ class AppTimer extends StatefulWidget {
final Future<bool> Function(TimerModel) onChange;
final TextStyle style;
final bool enabled;
final String label;
const AppTimer({
Key key,
this.label,
this.timer,
this.onChange,
this.style,
@ -121,7 +123,7 @@ class _AppTimerState extends State<AppTimer> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
"Timer".tinyFont(context),
(widget.label ?? "Timer").tinyFont(context),
value.bodyText(context).custom(color: AppColor.neutral50),
],
);

Loading…
Cancel
Save