Merge branch 'refs/heads/design_3.0_cx_module' into design_3.0_loan_module

# Conflicts:
#	lib/modules/tm_module/device_transfer/device_transfer_details.dart
#	lib/views/widgets/gas_refill/gas_refill_list.dart
design_3.0_medical_gas_inspection
Sikander Saleem 2 months ago
commit ea05e965d5

@ -469,8 +469,6 @@
"-framework", "-framework",
"\"nanopb\"", "\"nanopb\"",
"-framework", "-framework",
"\"qr_code_scanner\"",
"-framework",
"\"speech_to_text\"", "\"speech_to_text\"",
"-framework", "-framework",
"\"sqflite\"", "\"sqflite\"",
@ -689,8 +687,6 @@
"-framework", "-framework",
"\"nanopb\"", "\"nanopb\"",
"-framework", "-framework",
"\"qr_code_scanner\"",
"-framework",
"\"speech_to_text\"", "\"speech_to_text\"",
"-framework", "-framework",
"\"sqflite\"", "\"sqflite\"",
@ -795,8 +791,6 @@
"-framework", "-framework",
"\"nanopb\"", "\"nanopb\"",
"-framework", "-framework",
"\"qr_code_scanner\"",
"-framework",
"\"speech_to_text\"", "\"speech_to_text\"",
"-framework", "-framework",
"\"sqflite\"", "\"sqflite\"",

@ -1,15 +1,13 @@
class URLs { class URLs {
URLs._(); URLs._();
static const String appReleaseBuildNumber = "28"; static const String appReleaseBuildNumber = "31";
// static const host1 = "https://atomsm.hmg.com"; // production url // static const host1 = "https://atomsm.hmg.com"; // production url
// static const host1 = "https://atomsmdev.hmg.com"; // local DEV url // static const host1 = "https://atomsmdev.hmg.com"; // local DEV url
static const host1 = "https://atomsmuat.hmg.com"; // local UAT url static const host1 = "https://atomsmuat.hmg.com"; // local UAT url
// static const host1 = "http://10.201.111.125:9495"; // temporary Server UAT url
// static String _baseUrl = "$_host/mobile";
// static final String _baseUrl = "$_host/mobile"; // host local UAT
static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
// static final String _baseUrl = "$_host/mobile"; // host local UAT and for internal audit dev // static final String _baseUrl = "$_host/mobile"; // host local UAT and for internal audit dev
// static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM // static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM
@ -66,8 +64,10 @@ class URLs {
//service request new flow urls. //service request new flow urls.
static get nurseDashboardCountUrl => '$_baseUrl/ServiceRequest/GetDashboardNurseCount'; static get nurseDashboardCountUrl => '$_baseUrl/ServiceRequest/GetDashboardNurseCount';
static get qaAuditorCount => '$_baseUrl/ServiceRequest/GetDashboardQAAuditorCount';
static get nurseDashboardDetailsUrl => '$_baseUrl/ServiceRequest/GetDashboardNurseDetails'; static get nurseDashboardDetailsUrl => '$_baseUrl/ServiceRequest/GetDashboardNurseDetails';
static get qaAuditorDetails => '$_baseUrl/ServiceRequest/GetDashboardQAAuditorDetails';
static get nurseRejectUrl => '$_baseUrl/ServiceRequest/NurseReject'; static get nurseRejectUrl => '$_baseUrl/ServiceRequest/NurseReject';

@ -110,12 +110,13 @@ class FirebaseNotificationManger {
serviceClass = CMDetailPage(requestId: int.parse(messageData["requestNumber"].toString())); serviceClass = CMDetailPage(requestId: int.parse(messageData["requestNumber"].toString()));
break; break;
case "7": case "7":
serviceClass = DeviceTransferDetails(model: DeviceTransfer(id: int.parse(messageData["requestNumber"].toString()))); serviceClass = DeviceTransferDetails(model: DeviceTransfer(id: int.parse(messageData["requestNumber"].toString())), moduleId: 3);
break; break;
case "9": case "9":
serviceClass = GasRefillDetailsPage( serviceClass = GasRefillDetailsPage(
priority: messageData["priority"], priority: messageData["priority"],
date: messageData["createdOn"], date: messageData["createdOn"],
moduleId: 2,
model: GasRefillModel(id: int.parse(messageData["requestNumber"].toString())), model: GasRefillModel(id: int.parse(messageData["requestNumber"].toString())),
); );
break; break;

@ -106,7 +106,9 @@ class DashBoardProvider extends ChangeNotifier {
isAllCountLoading = true; isAllCountLoading = true;
notifyListeners(); notifyListeners();
String url = ''; String url = '';
if (usersType == UsersTypes.engineer || usersType == UsersTypes.assessor || usersType == UsersTypes.assessorTl) { if (usersType == UsersTypes.qualityUser) {
url = URLs.qaAuditorCount;
} else if (usersType == UsersTypes.engineer || usersType == UsersTypes.assessor || usersType == UsersTypes.assessorTl) {
url = URLs.engineerDashboardCountUrl; url = URLs.engineerDashboardCountUrl;
} else { } else {
url = URLs.nurseDashboardCountUrl; url = URLs.nurseDashboardCountUrl;
@ -241,7 +243,10 @@ class DashBoardProvider extends ChangeNotifier {
Response response; Response response;
String url = ''; String url = '';
if (usersType == UsersTypes.engineer || usersType == UsersTypes.assessor || usersType == UsersTypes.assessorTl) {
if (usersType == UsersTypes.qualityUser) {
url = URLs.qaAuditorDetails;
} else if (usersType == UsersTypes.engineer || usersType == UsersTypes.assessor || usersType == UsersTypes.assessorTl) {
//need to check pagination for not assigned task @waseem. //need to check pagination for not assigned task @waseem.
//these checks are to call different apis for dashboard for engineer... //these checks are to call different apis for dashboard for engineer...

@ -38,6 +38,7 @@ class DeviceTransfer {
this.senderEngSignature, this.senderEngSignature,
this.senderAttachments, this.senderAttachments,
this.receiverAssignedEmployeeId, this.receiverAssignedEmployeeId,
this.receiverAssignedEmployeeNumber,
this.receiverMachineStatusId, this.receiverMachineStatusId,
this.senderMachineStatusValue, this.senderMachineStatusValue,
this.receiverComment, this.receiverComment,
@ -74,6 +75,7 @@ class DeviceTransfer {
this.receiverMachineStatusValue, this.receiverMachineStatusValue,
this.receiverMachineStatusName, this.receiverMachineStatusName,
this.senderAssignedEmployeeName, this.senderAssignedEmployeeName,
this.senderAssignedEmployeeNumber,
this.senderBuildingName, this.senderBuildingName,
this.senderDepartmentName, this.senderDepartmentName,
this.senderEngSignatureUrl, this.senderEngSignatureUrl,
@ -144,6 +146,7 @@ class DeviceTransfer {
}); });
} }
receiverAssignedEmployeeId = json['receiverAssignedEmployeeId']; receiverAssignedEmployeeId = json['receiverAssignedEmployeeId'];
receiverAssignedEmployeeNumber = json['receiverAssignedEmployeeNumber'];
receiverMachineStatusId = json['receiverMachineStatusId']; receiverMachineStatusId = json['receiverMachineStatusId'];
receiverMachineStatusValue = json['receiverMachineStatusValue']; receiverMachineStatusValue = json['receiverMachineStatusValue'];
receiverComment = json['receiverComment']; receiverComment = json['receiverComment'];
@ -220,6 +223,7 @@ class DeviceTransfer {
receiverEngSignatureUrl = json['receiverEngSignatureUrl']; receiverEngSignatureUrl = json['receiverEngSignatureUrl'];
receiverMachineStatusName = json['receiverMachineStatusName']; receiverMachineStatusName = json['receiverMachineStatusName'];
senderAssignedEmployeeName = json['senderAssignedEmployeeName']; senderAssignedEmployeeName = json['senderAssignedEmployeeName'];
senderAssignedEmployeeNumber = json['senderAssignedEmployeeNumber'];
senderBuildingName = json['senderBuildingName']; senderBuildingName = json['senderBuildingName'];
senderDepartmentName = json['senderDepartmentName']; senderDepartmentName = json['senderDepartmentName'];
senderEngSignatureUrl = json['senderEngSignatureUrl']; senderEngSignatureUrl = json['senderEngSignatureUrl'];
@ -270,6 +274,7 @@ class DeviceTransfer {
List<AssetTransferAttachment>? attachments; List<AssetTransferAttachment>? attachments;
List<AssetTransferAttachment>? assetTransferAttachments; List<AssetTransferAttachment>? assetTransferAttachments;
String? receiverAssignedEmployeeId; String? receiverAssignedEmployeeId;
String? receiverAssignedEmployeeNumber;
num? receiverMachineStatusId; num? receiverMachineStatusId;
int? receiverMachineStatusValue; int? receiverMachineStatusValue;
String? receiverComment; String? receiverComment;
@ -290,6 +295,7 @@ class DeviceTransfer {
String? senderFloorName; String? senderFloorName;
String? senderDepartmentName; String? senderDepartmentName;
String? senderAssignedEmployeeName; String? senderAssignedEmployeeName;
String? senderAssignedEmployeeNumber;
String? senderMachineStatusName; String? senderMachineStatusName;
String? senderEngSignatureUrl; String? senderEngSignatureUrl;
String? receiverAssignedEmployeeName; String? receiverAssignedEmployeeName;
@ -345,6 +351,7 @@ class DeviceTransfer {
String? senderEngSignature, String? senderEngSignature,
List<AssetTransferAttachment>? senderAttachments, List<AssetTransferAttachment>? senderAttachments,
String? receiverAssignedEmployeeId, String? receiverAssignedEmployeeId,
String? receiverAssignedEmployeeNumber,
num? receiverMachineStatusId, num? receiverMachineStatusId,
String? receiverComment, String? receiverComment,
String? receiverStartDate, String? receiverStartDate,
@ -364,6 +371,7 @@ class DeviceTransfer {
String? senderFloorName, String? senderFloorName,
String? senderDepartmentName, String? senderDepartmentName,
String? senderAssignedEmployeeName, String? senderAssignedEmployeeName,
String? senderAssignedEmployeeNumber,
String? senderMachineStatusName, String? senderMachineStatusName,
String? senderEngSignatureUrl, String? senderEngSignatureUrl,
String? receiverAssignedEmployeeName, String? receiverAssignedEmployeeName,
@ -420,6 +428,7 @@ class DeviceTransfer {
senderEngSignature: senderEngSignature ?? this.senderEngSignature, senderEngSignature: senderEngSignature ?? this.senderEngSignature,
senderAttachments: senderAttachments ?? this.senderAttachments, senderAttachments: senderAttachments ?? this.senderAttachments,
receiverAssignedEmployeeId: receiverAssignedEmployeeId ?? this.receiverAssignedEmployeeId, receiverAssignedEmployeeId: receiverAssignedEmployeeId ?? this.receiverAssignedEmployeeId,
receiverAssignedEmployeeNumber: receiverAssignedEmployeeNumber ?? this.receiverAssignedEmployeeNumber,
receiverMachineStatusId: receiverMachineStatusId ?? this.receiverMachineStatusId, receiverMachineStatusId: receiverMachineStatusId ?? this.receiverMachineStatusId,
receiverComment: receiverComment ?? this.receiverComment, receiverComment: receiverComment ?? this.receiverComment,
receiverStartDate: receiverStartDate ?? this.receiverStartDate, receiverStartDate: receiverStartDate ?? this.receiverStartDate,
@ -439,6 +448,7 @@ class DeviceTransfer {
senderFloorName: senderFloorName ?? this.senderFloorName, senderFloorName: senderFloorName ?? this.senderFloorName,
senderDepartmentName: senderDepartmentName ?? this.senderDepartmentName, senderDepartmentName: senderDepartmentName ?? this.senderDepartmentName,
senderAssignedEmployeeName: senderAssignedEmployeeName ?? this.senderAssignedEmployeeName, senderAssignedEmployeeName: senderAssignedEmployeeName ?? this.senderAssignedEmployeeName,
senderAssignedEmployeeNumber: senderAssignedEmployeeNumber ?? this.senderAssignedEmployeeNumber,
senderMachineStatusName: senderMachineStatusName ?? this.senderMachineStatusName, senderMachineStatusName: senderMachineStatusName ?? this.senderMachineStatusName,
senderMachineStatusValue: senderMachineStatusValue ?? this.senderMachineStatusValue, senderMachineStatusValue: senderMachineStatusValue ?? this.senderMachineStatusValue,
senderEngSignatureUrl: senderEngSignatureUrl ?? this.senderEngSignatureUrl, senderEngSignatureUrl: senderEngSignatureUrl ?? this.senderEngSignatureUrl,
@ -503,6 +513,7 @@ class DeviceTransfer {
map['senderAttachments'] = senderAttachments!.map((v) => v.toJson()).toList(); map['senderAttachments'] = senderAttachments!.map((v) => v.toJson()).toList();
} }
map['receiverAssignedEmployeeId'] = receiverAssignedEmployeeId; map['receiverAssignedEmployeeId'] = receiverAssignedEmployeeId;
map['receiverAssignedEmployeeNumber'] = receiverAssignedEmployeeNumber;
map['receiverMachineStatusId'] = receiverMachineStatusId; map['receiverMachineStatusId'] = receiverMachineStatusId;
map['receiverComment'] = receiverComment; map['receiverComment'] = receiverComment;
map['receiverStartDate'] = receiverStartDate; map['receiverStartDate'] = receiverStartDate;
@ -524,6 +535,7 @@ class DeviceTransfer {
map["senderFloorName"] = senderFloorName; map["senderFloorName"] = senderFloorName;
map["senderDepartmentName"] = senderDepartmentName; map["senderDepartmentName"] = senderDepartmentName;
map["senderAssignedEmployeeName"] = senderAssignedEmployeeName; map["senderAssignedEmployeeName"] = senderAssignedEmployeeName;
map["senderAssignedEmployeeNumber"] = senderAssignedEmployeeNumber;
map["senderMachineStatusName"] = senderMachineStatusName; map["senderMachineStatusName"] = senderMachineStatusName;
map["senderEngSignatureUrl"] = senderEngSignatureUrl; map["senderEngSignatureUrl"] = senderEngSignatureUrl;
map["receiverAssignedEmployeeName"] = receiverAssignedEmployeeName; map["receiverAssignedEmployeeName"] = receiverAssignedEmployeeName;
@ -631,6 +643,7 @@ class DeviceTransfer {
map['assetTransferReceiverTimers'] = receiverVisitTimers!.map((v) => v.toJson()).toList(); map['assetTransferReceiverTimers'] = receiverVisitTimers!.map((v) => v.toJson()).toList();
} }
map['receiverAssignedEmployeeId'] = receiverAssignedEmployeeId; map['receiverAssignedEmployeeId'] = receiverAssignedEmployeeId;
map['receiverAssignedEmployeeNumber'] = receiverAssignedEmployeeNumber;
map['receiverMachineStatusId'] = receiverMachineStatusId; map['receiverMachineStatusId'] = receiverMachineStatusId;
map['receiverComment'] = receiverComment; map['receiverComment'] = receiverComment;
map['receiverStartDate'] = receiverStartDate; map['receiverStartDate'] = receiverStartDate;
@ -674,6 +687,7 @@ class DeviceTransfer {
senderEngSignature = assetTransfer.senderEngSignature; senderEngSignature = assetTransfer.senderEngSignature;
senderAttachments = assetTransfer.senderAttachments; senderAttachments = assetTransfer.senderAttachments;
receiverAssignedEmployeeId = assetTransfer.receiverAssignedEmployeeId; receiverAssignedEmployeeId = assetTransfer.receiverAssignedEmployeeId;
receiverAssignedEmployeeNumber = assetTransfer.receiverAssignedEmployeeNumber;
receiverMachineStatusId = assetTransfer.receiverMachineStatusId; receiverMachineStatusId = assetTransfer.receiverMachineStatusId;
receiverComment = assetTransfer.receiverComment; receiverComment = assetTransfer.receiverComment;
receiverStartDate = assetTransfer.receiverStartDate; receiverStartDate = assetTransfer.receiverStartDate;
@ -693,6 +707,7 @@ class DeviceTransfer {
senderFloorName = assetTransfer.senderFloorName; senderFloorName = assetTransfer.senderFloorName;
senderDepartmentName = assetTransfer.senderDepartmentName; senderDepartmentName = assetTransfer.senderDepartmentName;
senderAssignedEmployeeName = assetTransfer.senderAssignedEmployeeName; senderAssignedEmployeeName = assetTransfer.senderAssignedEmployeeName;
senderAssignedEmployeeNumber = assetTransfer.senderAssignedEmployeeNumber;
senderMachineStatusName = assetTransfer.senderMachineStatusName; senderMachineStatusName = assetTransfer.senderMachineStatusName;
senderEngSignatureUrl = assetTransfer.senderEngSignatureUrl; senderEngSignatureUrl = assetTransfer.senderEngSignatureUrl;
receiverAssignedEmployeeName = assetTransfer.receiverAssignedEmployeeName; receiverAssignedEmployeeName = assetTransfer.receiverAssignedEmployeeName;

@ -523,3 +523,55 @@ class GasRefillContactPerson {
}; };
} }
} }
class AssignedEmployee {
String? id;
String? name;
String? email;
String? employeeId;
int? languageId;
String? extensionNo;
String? phoneNumber;
String? positionName;
String? position;
bool? isActive;
AssignedEmployee(
{this.id,
this.name,
this.email,
this.employeeId,
this.languageId,
this.extensionNo,
this.phoneNumber,
this.positionName,
this.position,
this.isActive});
AssignedEmployee.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
email = json['email'];
employeeId = json['employeeId'];
languageId = json['languageId'];
extensionNo = json['extensionNo'];
phoneNumber = json['phoneNumber'];
positionName = json['positionName'];
position = json['position'];
isActive = json['isActive'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['email'] = this.email;
data['employeeId'] = this.employeeId;
data['languageId'] = this.languageId;
data['extensionNo'] = this.extensionNo;
data['phoneNumber'] = this.phoneNumber;
data['positionName'] = this.positionName;
data['position'] = this.position;
data['isActive'] = this.isActive;
return data;
}
}

@ -73,25 +73,26 @@ class _ChatWidgetState extends State<ChatWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<ChatProvider>(builder: (pContext, requestProvider, _) { return widget.isShow
return IconButton( ? Consumer<ChatProvider>(builder: (pContext, requestProvider, _) {
icon: const Icon(Icons.chat_bubble), return IconButton(
onPressed: () { icon: const Icon(Icons.chat_bubble),
Navigator.push( onPressed: () {
context, Navigator.push(
CupertinoPageRoute( context,
builder: (context) => ChatPage( CupertinoPageRoute(
moduleId: widget.moduleId, builder: (context) => ChatPage(
requestId: widget.requestId, moduleId: widget.moduleId,
title: widget.title, requestId: widget.requestId,
readOnly: widget.isReadOnly, title: widget.title,
assigneeEmployeeNumber: widget.assigneeEmployeeNumber, readOnly: widget.isReadOnly,
contactEmployeeINumber: widget.contactEmployeeINumber, assigneeEmployeeNumber: widget.assigneeEmployeeNumber,
myLoginUserID: widget.myLoginUserID, contactEmployeeINumber: widget.contactEmployeeINumber,
))); myLoginUserID: widget.myLoginUserID,
}, )));
).toShimmer(context: context, isShow: requestProvider.chatLoginTokenLoading, radius: 30, height: 30, width: 30); },
}); ).toShimmer(context: context, isShow: requestProvider.chatLoginTokenLoading, radius: 30, height: 30, width: 30);
; })
: const SizedBox();
} }
} }

@ -127,8 +127,9 @@ class ChatFileViewer extends StatelessWidget {
Future<File?> downloadFile() async { Future<File?> downloadFile() async {
try { try {
// print("downloadUrl:$downloadUrl");
return await ChatApiClient() return await ChatApiClient()
.downloadFileWithHttp(downloadUrl, fileName: fileTypeResponse.fileName, fileTypeDescription: fileTypeResponse.fileTypeDescription, fileSource: fileTypeResponse.fileTypeId!); .downloadFileWithHttp(downloadUrl, fileName: fileTypeResponse.fileName, fileTypeDescription: fileTypeResponse.fileTypeDescription ?? "", fileSource: fileTypeResponse.fileTypeId!);
} catch (ex) { } catch (ex) {
print("downloadFile:$ex"); print("downloadFile:$ex");
return null; return null;

@ -42,6 +42,8 @@ class _CreateEquipmentInternalAuditFormState extends State<CreateEquipmentIntern
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
FocusNode auditCheckListNode = FocusNode(); FocusNode auditCheckListNode = FocusNode();
int noFindingValue = 4;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -78,7 +80,6 @@ class _CreateEquipmentInternalAuditFormState extends State<CreateEquipmentIntern
}, },
), ),
16.height, 16.height,
//TODO need to check layout issue...
MultipleItemDropDownMenu<Lookup, InternalAuditCheckListProvider>( MultipleItemDropDownMenu<Lookup, InternalAuditCheckListProvider>(
context: context, context: context,
showAsBottomSheet: true, showAsBottomSheet: true,
@ -89,6 +90,15 @@ class _CreateEquipmentInternalAuditFormState extends State<CreateEquipmentIntern
title: 'Internal Audit Checklist'.addTranslation, title: 'Internal Audit Checklist'.addTranslation,
initialValue: _equipmentinternalAuditModel.findings, initialValue: _equipmentinternalAuditModel.findings,
onSelect: (value) { onSelect: (value) {
if ((value ?? []).isNotEmpty) {
Lookup? noFindingElement;
try {
noFindingElement = value!.singleWhere((element) => element.value == noFindingValue);
} catch (ex) {}
if (noFindingElement != null) {
value!.removeWhere((element) => element.value != noFindingElement!.value);
}
}
_equipmentinternalAuditModel.findings = value ?? []; _equipmentinternalAuditModel.findings = value ?? [];
}, },
), ),
@ -137,9 +147,9 @@ class _CreateEquipmentInternalAuditFormState extends State<CreateEquipmentIntern
} }
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
_equipmentinternalAuditModel.auditorId = context.userProvider.user?.userID; _equipmentinternalAuditModel.auditorId = context.userProvider.user?.userID;
bool status = await internalAuditProvider.addEquipmentInternalAudit(context: context, request: _equipmentinternalAuditModel); bool status = await internalAuditProvider.addEquipmentInternalAudit(context: context, request: _equipmentinternalAuditModel);
Navigator.pop(context); Navigator.pop(context);
if(status){ if (status) {
Navigator.pop(context); Navigator.pop(context);
} }
} }

@ -19,6 +19,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class EquipmentInternalAuditDetailPage extends StatefulWidget { class EquipmentInternalAuditDetailPage extends StatefulWidget {
static const String id = "/details-internal-audit"; static const String id = "/details-internal-audit";
@ -51,12 +52,10 @@ class _EquipmentInternalAuditDetailPageState extends State<EquipmentInternalAudi
Future<void> getAuditData() async { Future<void> getAuditData() async {
model = await _internalAuditProvider.getEquipmentInternalAuditById(widget.auditId); model = await _internalAuditProvider.getEquipmentInternalAuditById(widget.auditId);
allAttachments.clear(); allAttachments.clear();
allAttachments = [ allAttachments = [
...(model?.attachments ?? []), ...(model?.attachments ?? []),
...(model?.engineerData?.attachments ?? []), ...(model?.engineerData?.attachments ?? []),
]; ];
} }
@override @override
@ -82,12 +81,43 @@ class _EquipmentInternalAuditDetailPageState extends State<EquipmentInternalAudi
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
StatusLabel(
label: model!.status!.name,
id: model!.status!.value,
radius: 4,
textColor: AppColor.getRequestStatusTextColorByName(
context,
model!.status!.name,
),
backgroundColor: AppColor.getRequestStatusColorByName(
context,
model!.status!.name,
),
// textColor: AppColor.green15,
// backgroundColor: AppColor.greenStatus(context),
),
Text(
model!.createdDate!.toString().toServiceRequestCardFormat,
textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
)
],
),
8.height,
assetDetails(), assetDetails(),
8.height, 8.height,
requestDetails(), requestDetails(),
8.height, 8.height,
if (model?.remarks?.isNotEmpty ?? false) ...[ if (model?.remarks?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
Text(
"Remarks",
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
model!.remarks!.bodyText(context), model!.remarks!.bodyText(context),
8.height, 8.height,
], ],
@ -103,7 +133,7 @@ class _EquipmentInternalAuditDetailPageState extends State<EquipmentInternalAudi
], ],
).paddingAll(0).toShadowContainer(context), ).paddingAll(0).toShadowContainer(context),
).expanded, ).expanded,
if (context.userProvider.isEngineer&&model?.status?.value!=3) if (context.userProvider.isEngineer && model?.status?.value != 3)
FooterActionButton.footerContainer( FooterActionButton.footerContainer(
context: context, context: context,
child: AppFilledButton( child: AppFilledButton(
@ -160,6 +190,7 @@ class _EquipmentInternalAuditDetailPageState extends State<EquipmentInternalAudi
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
), ),
6.height, 6.height,
'${context.translation.requestNo}: ${model?.requestNo ?? '-'}'.bodyText(context),
if (model != null && model!.equipmentsFindings != null && model!.equipmentsFindings!.isNotEmpty) if (model != null && model!.equipmentsFindings != null && model!.equipmentsFindings!.isNotEmpty)
...model!.equipmentsFindings!.map((item) { ...model!.equipmentsFindings!.map((item) {
final findingName = item.finding?.name ?? 'Unknown'; final findingName = item.finding?.name ?? 'Unknown';
@ -177,14 +208,17 @@ class _EquipmentInternalAuditDetailPageState extends State<EquipmentInternalAudi
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
"Asset Details", "Asset Information",
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
), ),
6.height, 6.height,
'${context.translation.assetName}: ${model?.asset?.assetName ?? '-'}'.bodyText(context), '${context.translation.assetName}: ${model?.asset?.assetName ?? '-'}'.bodyText(context),
'${context.translation.assetNo}: ${model?.asset?.assetNumber ?? '-'}'.bodyText(context), '${context.translation.assetNo}: ${model?.asset?.assetNumber ?? '-'}'.bodyText(context),
'${context.translation.serialNumber}: ${model?.asset?.assetNumber ?? '-'}'.bodyText(context),
'${context.translation.manufacture}: ${model?.asset?.manufacturerName ?? '-'}'.bodyText(context), '${context.translation.manufacture}: ${model?.asset?.manufacturerName ?? '-'}'.bodyText(context),
'${context.translation.model}: ${model?.asset?.modelName ?? '-'}'.bodyText(context), '${context.translation.model}: ${model?.asset?.modelName ?? '-'}'.bodyText(context),
'${context.translation.md}: ${model?.asset?.modelDefinition ?? '-'}'.bodyText(context),
'${context.translation.site}: ${model?.asset?.siteName ?? '-'}'.bodyText(context),
], ],
); );
} }

@ -44,8 +44,8 @@ class EquipmentInternalAuditItemView extends StatelessWidget {
), ),
8.height, 8.height,
(requestData?.typeTransaction ?? "Internal Audit Request").heading5(context), (requestData?.typeTransaction ?? "Internal Audit Request").heading5(context),
infoWidget(label: context.translation.assetNumber, value: requestData?.assetNumber, context: context), infoWidget(label: context.translation.requestNo, value: requestData!.requestNo, context: context),
infoWidget(label: context.translation.assetNumber, value: requestData!.assetNumber, context: context),
8.height, 8.height,
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -85,9 +85,11 @@ class EquipmentInternalAuditItemView extends StatelessWidget {
8.height, 8.height,
(requestDetails?.nameOfType ?? "Internal Audit Request").heading5(context), (requestDetails?.nameOfType ?? "Internal Audit Request").heading5(context),
8.height, 8.height,
infoWidget(label: context.translation.requestNo, value: requestDetails!.requestNo, context: context),
infoWidget(label: context.translation.assetNumber, value: requestDetails!.assetNo, context: context), infoWidget(label: context.translation.assetNumber, value: requestDetails!.assetNo, context: context),
infoWidget(label: context.translation.assetSN, value: requestDetails!.assetSN, context: context), infoWidget(label: context.translation.assetSN, value: requestDetails!.assetSN, context: context),
infoWidget(label: context.translation.model, value: requestDetails!.model, context: context), infoWidget(label: context.translation.model, value: requestDetails!.model, context: context),
infoWidget(label: context.translation.site, value: requestDetails!.site, context: context),
8.height, 8.height,
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

@ -20,6 +20,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class SystemInternalAuditDetailPage extends StatefulWidget { class SystemInternalAuditDetailPage extends StatefulWidget {
static const String id = "/details-system-internal-audit"; static const String id = "/details-system-internal-audit";
@ -79,17 +80,45 @@ class _SystemInternalAuditDetailPageState extends State<SystemInternalAuditDetai
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
assetInformation(), Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
StatusLabel(
label: model!.status!.name,
id: model!.status!.value,
radius: 4,
textColor: AppColor.getRequestStatusTextColorByName(
context,
model!.status!.name,
),
backgroundColor: AppColor.getRequestStatusColorByName(
context,
model!.status!.name,
),
// textColor: AppColor.green15,
// backgroundColor: AppColor.greenStatus(context),
),
Text(
model!.createdDate!.toString().toServiceRequestCardFormat,
textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
)
],
),
8.height, 8.height,
workOrderInformation(), workOrderInfo(),
const Divider().defaultStyle(context),
8.height, 8.height,
assetInfo(),
//TODO need to check for comments //TODO need to check for comments
if (model?.findingDescription?.isNotEmpty ?? false) ...[ if (model?.findingDescription?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
// Text( Text(
// "Comments".addTranslation, "Remarks",
// style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
// ), ),
model!.findingDescription!.bodyText(context), model!.findingDescription!.bodyText(context),
], ],
//TODO need to check for attachments //TODO need to check for attachments
@ -143,10 +172,33 @@ class _SystemInternalAuditDetailPageState extends State<SystemInternalAuditDetai
6.height, 6.height,
labelValueText(context, context.translation.woNumber, details?.workOrderNo), labelValueText(context, context.translation.woNumber, details?.workOrderNo),
labelValueText(context, 'WO Type'.addTranslation, model?.workOrderType?.name), labelValueText(context, 'WO Type'.addTranslation, model?.workOrderType?.name),
labelValueText(context, context.translation.site, details?.woSite),
labelValueText(context, context.translation.assetName, details?.woAssetName), labelValueText(context, context.translation.assetName, details?.woAssetName),
labelValueText(context, context.translation.assetNo, details?.woAssetNo),
labelValueText(context, context.translation.manufacture, details?.woManufacturer), labelValueText(context, context.translation.manufacture, details?.woManufacturer),
labelValueText(context, context.translation.serialNumber, details?.wosn),
labelValueText(context, context.translation.model, details?.woModel), labelValueText(context, context.translation.model, details?.woModel),
labelValueText(context, context.translation.site, details?.woSite),
labelValueText(context, context.translation.department, details?.woDepartment),
],
);
}
Widget workOrderInfo() {
final details = model?.workOrderDetails;
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"WO Info",
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
6.height,
labelValueText(context, context.translation.requestNo, model?.requestNo),
labelValueText(context, 'WO Type'.addTranslation, model?.workOrderType?.name),
labelValueText(context, context.translation.woNumber, details?.workOrderNo),
labelValueText(context, "Finding Type", model?.findingType?.name),
labelValueText(context, "Assigned Engineer", model?.workOrderDetails?.woAssignedEngineer),
], ],
); );
} }
@ -187,6 +239,28 @@ class _SystemInternalAuditDetailPageState extends State<SystemInternalAuditDetai
); );
} }
Widget assetInfo() {
final details = model?.workOrderDetails;
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Asset Details",
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
6.height,
labelValueText(context, context.translation.assetName, details?.woAssetName),
labelValueText(context, context.translation.assetNo, details?.woAssetNo),
labelValueText(context, context.translation.manufacture, details?.woManufacturer),
labelValueText(context, context.translation.serialNumber, details?.wosn),
labelValueText(context, context.translation.model, details?.woModel),
labelValueText(context, context.translation.site, details?.woSite),
labelValueText(context, context.translation.department, details?.woDepartment),
],
);
}
Widget labelValueText(BuildContext context, String label, String? value) { Widget labelValueText(BuildContext context, String label, String? value) {
if (value == null || value.isEmpty) return const SizedBox.shrink(); if (value == null || value.isEmpty) return const SizedBox.shrink();

@ -44,9 +44,9 @@ class SystemInternalAuditItemView extends StatelessWidget {
], ],
), ),
8.height, 8.height,
(requestData?.typeTransaction ?? "Internal Audit Request").heading5(context), (requestData?.typeTransaction ?? "System Audit Request").heading5(context),
infoWidget(label: context.translation.assetNo, value: requestData?.assetNumber, context: context), infoWidget(label: context.translation.requestNo, value: requestData!.requestNo, context: context),
infoWidget(label: context.translation.assetNumber, value: requestData?.assetNumber, context: context),
8.height, 8.height,
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -85,9 +85,12 @@ class SystemInternalAuditItemView extends StatelessWidget {
), ),
8.height, 8.height,
(requestDetails?.nameOfType ?? "Internal Audit Request").heading5(context), (requestDetails?.nameOfType ?? "Internal Audit Request").heading5(context),
infoWidget(label: context.translation.requestNo, value: requestDetails!.requestNo, context: context),
infoWidget(label: context.translation.assetNumber, value: requestDetails!.assetNo, context: context), infoWidget(label: context.translation.assetNumber, value: requestDetails!.assetNo, context: context),
infoWidget(label: context.translation.assetSN, value: requestDetails!.assetSN, context: context), infoWidget(label: context.translation.assetSN, value: requestDetails!.assetSN, context: context),
infoWidget(label: context.translation.model, value: requestDetails!.model, context: context), infoWidget(label: context.translation.model, value: requestDetails!.model, context: context),
infoWidget(label: context.translation.site, value: requestDetails!.site, context: context),
8.height, 8.height,
// infoWidget(label: context.translation.site, value: requestDetails!.site, context: context), // infoWidget(label: context.translation.site, value: requestDetails!.site, context: context),
8.height, 8.height,

@ -9,6 +9,8 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/modules/cx_module/chat/chat_widget.dart';
import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart';
import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
@ -22,8 +24,9 @@ import 'update_device_transfer.dart';
class DeviceTransferDetails extends StatefulWidget { class DeviceTransferDetails extends StatefulWidget {
final DeviceTransfer model; final DeviceTransfer model;
final int moduleId;
const DeviceTransferDetails({Key? key, required this.model}) : super(key: key); const DeviceTransferDetails({Key? key, required this.model, required this.moduleId}) : super(key: key);
@override @override
State<DeviceTransferDetails> createState() => _DeviceTransferDetailsState(); State<DeviceTransferDetails> createState() => _DeviceTransferDetailsState();
@ -131,6 +134,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
] else ...[ ] else ...[
// sender card // sender card
_buildCard( _buildCard(
_model!,
isSender: true, isSender: true,
site: _model?.senderSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", site: _model?.senderSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "",
dept: _model?.senderDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", dept: _model?.senderDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "",
@ -150,6 +154,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
8.height, 8.height,
// receiver card // receiver card
_buildCard( _buildCard(
_model!,
isSender: false, isSender: false,
site: _model?.destSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", site: _model?.destSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "",
dept: _model?.destDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", dept: _model?.destDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "",
@ -215,7 +220,17 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
], ],
), ),
], ],
), ).expanded,
if (context.userProvider.isEngineer || context.userProvider.isNurse)
ChatWidget(
moduleId: widget.moduleId,
isShow: _model!.senderMachineStatusValue! != 4,
isReadOnly: _model!.senderMachineStatusValue! != 1,
requestId: widget.model.id!.toInt(),
assigneeEmployeeNumber: _model!.senderAssignedEmployeeNumber,
myLoginUserID: context.userProvider.user!.username!,
contactEmployeeINumber: _model!.assetTransferContactPersons!.first.employeeNumber,
),
if ((_userProvider!.user?.type == UsersTypes.engineer)) if ((_userProvider!.user?.type == UsersTypes.engineer))
if (isCurrentEngineerEligibleForEdit && isCurrentRequestEditAble) if (isCurrentEngineerEligibleForEdit && isCurrentRequestEditAble)
"edit".toSvgAsset(height: 40, width: 40).onPress(() async { "edit".toSvgAsset(height: 40, width: 40).onPress(() async {
@ -248,7 +263,8 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
).toShadowContainer(context); ).toShadowContainer(context);
} }
_buildCard({required String site, String? building, String? dept, String? floor, required String comment, required bool isSender, StatusLabel? statusLabel, String? assignTo}) { _buildCard(DeviceTransfer _deviceTransfer,
{required String site, String? building, String? dept, String? floor, required String comment, required bool isSender, StatusLabel? statusLabel, String? assignTo}) {
bool isCurrentEngineerEligibleForEdit = isSender ? _model?.senderAssignedEmployeeId == _userProvider!.user?.userID : _model?.receiverAssignedEmployeeId == _userProvider!.user?.userID; bool isCurrentEngineerEligibleForEdit = isSender ? _model?.senderAssignedEmployeeId == _userProvider!.user?.userID : _model?.receiverAssignedEmployeeId == _userProvider!.user?.userID;
bool isCurrentRequestClosed = isSender ? ((_model?.senderMachineStatusValue == 3)) : ((_model?.receiverMachineStatusValue == 3)); bool isCurrentRequestClosed = isSender ? ((_model?.senderMachineStatusValue == 3)) : ((_model?.receiverMachineStatusValue == 3));
@ -265,7 +281,17 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
if (statusLabel != null) 8.height, if (statusLabel != null) 8.height,
isSender ? context.translation.senderDetails.heading5(context) : context.translation.receiverDetails.heading5(context), isSender ? context.translation.senderDetails.heading5(context) : context.translation.receiverDetails.heading5(context),
], ],
), ).expanded,
if (context.userProvider.isEngineer || context.userProvider.isNurse)
ChatWidget(
moduleId: widget.moduleId,
isShow: (isSender ? _deviceTransfer.senderMachineStatusValue! : _deviceTransfer.receiverMachineStatusValue!) != 0,
isReadOnly: (isSender ? _deviceTransfer.senderMachineStatusValue! : _deviceTransfer.receiverMachineStatusValue) != 1,
requestId: widget.model.id!.toInt(),
assigneeEmployeeNumber: isSender ? _deviceTransfer.senderAssignedEmployeeNumber! : _deviceTransfer.receiverAssignedEmployeeNumber!,
myLoginUserID: context.userProvider.user!.username!,
contactEmployeeINumber: _deviceTransfer.assetTransferContactPersons!.first.employeeNumber,
),
if ((_userProvider!.user?.type == UsersTypes.engineer)) if ((_userProvider!.user?.type == UsersTypes.engineer))
if (isCurrentEngineerEligibleForEdit && !isCurrentRequestClosed) if (isCurrentEngineerEligibleForEdit && !isCurrentRequestClosed)
@ -273,7 +299,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
// ? (!(_model?.senderMachineStatusName?.toLowerCase()?.contains("close") ?? false) && !(_model?.senderMachineStatusName?.toLowerCase()?.contains("complete") ?? false)) // ? (!(_model?.senderMachineStatusName?.toLowerCase()?.contains("close") ?? false) && !(_model?.senderMachineStatusName?.toLowerCase()?.contains("complete") ?? false))
// : (!(_model?.receiverMachineStatusName?.toLowerCase()?.contains("close") ?? false) && !(_model?.receiverMachineStatusName?.toLowerCase()?.contains("complete") ?? false))) // : (!(_model?.receiverMachineStatusName?.toLowerCase()?.contains("close") ?? false) && !(_model?.receiverMachineStatusName?.toLowerCase()?.contains("complete") ?? false)))
// //
"edit".toSvgAsset(height: 48, width: 48).onPress(() async { "edit".toSvgAsset(height: 48, width: 48).onPress(() async {
bool isReload = (await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model!, isSender: isSender)))) as bool; bool isReload = (await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model!, isSender: isSender)))) as bool;
if (isReload ?? false) { if (isReload ?? false) {
setState(() {}); setState(() {});

@ -28,8 +28,9 @@ import 'update_gas_refill_request.dart';
class GasRefillDetailsPage extends StatefulWidget { class GasRefillDetailsPage extends StatefulWidget {
GasRefillModel model; GasRefillModel model;
String? priority, date; String? priority, date;
final int moduleId;
GasRefillDetailsPage({Key? key, this.priority, this.date, required this.model}) : super(key: key); GasRefillDetailsPage({Key? key, this.priority, this.date, required this.model, required this.moduleId}) : super(key: key);
@override @override
State<GasRefillDetailsPage> createState() => _GasRefillDetailsPageState(); State<GasRefillDetailsPage> createState() => _GasRefillDetailsPageState();
@ -59,21 +60,22 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
appBar: DefaultAppBar( appBar: DefaultAppBar(
title: context.translation.gasRefillDetails, title: context.translation.gasRefillDetails,
actions: [ actions: [
// if (context.userProvider.isEngineer || context.userProvider.isNurse) if (context.userProvider.isEngineer || context.userProvider.isNurse)
// Selector<GasRefillProvider, GasRefillModel?>( Selector<GasRefillProvider, GasRefillModel?>(
// selector: (_, myModel) => myModel.gasRefillModel, // Selects only the userName selector: (_, myModel) => myModel.gasRefillModel, // Selects only the userName
// builder: (_, _gasRefillModel, __) { builder: (_, _gasRefillModel, __) {
// if (_gasRefillModel == null) return const SizedBox(); if (_gasRefillModel == null) return const SizedBox();
// return ChatWidget(
// moduleId: 2, return ChatWidget(
// isShow: _gasRefillModel.status!.value! == 1, moduleId: widget.moduleId,
// // isReadOnly: _gasRefillModel.status!.value! == 1, isShow: _gasRefillModel.status!.value! != 0,
// requestId: widget.model.id!.toInt(), isReadOnly: _gasRefillModel.status!.value! != 1,
// assigneeEmployeeNumber: _gasRefillModel.assignedEmployee!.name!, requestId: widget.model.id!.toInt(),
// myLoginUserID: context.userProvider.user!.username!, assigneeEmployeeNumber: _gasRefillModel.assignedEmployee?.employeeId!,
// contactEmployeeINumber: _gasRefillModel.gasRefillContactPerson!.first.employeeCode!, myLoginUserID: context.userProvider.user!.username!,
// ); contactEmployeeINumber: _gasRefillModel.gasRefillContactPerson!.first.employeeCode!,
// }) );
})
], ],
), ),
key: _scaffoldKey, key: _scaffoldKey,

@ -11,6 +11,7 @@ import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/new_models/task_request/task_request_model.dart'; import 'package:test_sa/models/new_models/task_request/task_request_model.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart'; import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/modules/cx_module/chat/chat_widget.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/common_widgets/working_time_tile.dart'; import 'package:test_sa/new_views/common_widgets/working_time_tile.dart';
import 'package:test_sa/providers/task_request_provider/task_request_provider.dart'; import 'package:test_sa/providers/task_request_provider/task_request_provider.dart';
@ -29,8 +30,9 @@ class TaskRequestDetailsView extends StatefulWidget {
static const String id = "/task-request-detail"; static const String id = "/task-request-detail";
final int taskId; final int taskId;
final RequestsDetails? requestDetails; final RequestsDetails? requestDetails;
final int moduleId;
const TaskRequestDetailsView({Key? key, required this.taskId, this.requestDetails}) : super(key: key); const TaskRequestDetailsView({Key? key, required this.taskId, this.requestDetails, required this.moduleId}) : super(key: key);
@override @override
_TaskRequestDetailsViewState createState() { _TaskRequestDetailsViewState createState() {
@ -65,7 +67,27 @@ class _TaskRequestDetailsViewState extends State<TaskRequestDetailsView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
userProvider ??= Provider.of<UserProvider>(context, listen: false); userProvider ??= Provider.of<UserProvider>(context, listen: false);
return Scaffold( return Scaffold(
appBar: DefaultAppBar(title: context.translation.taskRequest), appBar: DefaultAppBar(
title: context.translation.taskRequest,
actions: [
if (context.userProvider.isEngineer || context.userProvider.isNurse)
Selector<TaskRequestProvider, TaskData?>(
selector: (_, myModel) => myModel.taskRequestModel, // Selects only the userName
builder: (_, _taskReqModel, __) {
if (_taskReqModel == null) return const SizedBox();
return ChatWidget(
moduleId: widget.moduleId,
isShow: _taskReqModel.taskJobStatus!.value! != 1,
isReadOnly: _taskReqModel.taskJobStatus!.value! != 2,
requestId: widget.taskId.toInt(),
assigneeEmployeeNumber: _taskReqModel.assignedEngineer?.employeeId!,
myLoginUserID: context.userProvider.user!.username!,
contactEmployeeINumber: _taskReqModel.taskJobContactPersons!.first.user?.employeeId,
);
})
],
),
body: Consumer<TaskRequestProvider>(builder: (context, taskProvider, child) { body: Consumer<TaskRequestProvider>(builder: (context, taskProvider, child) {
TaskData? taskModel = taskProvider.taskRequestModel; TaskData? taskModel = taskProvider.taskRequestModel;
return taskProvider.isLoading return taskProvider.isLoading

@ -68,7 +68,8 @@ class TaskRequestItemView extends StatelessWidget {
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (_) => TaskRequestDetailsView( builder: (_) => TaskRequestDetailsView(
taskId: requestData!.id!, taskId: requestData!.id!,
requestDetails: RequestsDetails(nameOfType: requestData?.nameOfType, status: requestData?.statusName, priority: requestData?.priorityName, date: requestData?.transactionDate), moduleId: requestData!.transactionNo!,
requestDetails: RequestsDetails(nameOfType: requestData?.nameOfType, status: requestData?.statusName, priority: requestData?.priorityName, date: requestData?.transactionDate, ),
))); )));
}); });
} }
@ -122,6 +123,7 @@ class TaskRequestItemView extends StatelessWidget {
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (_) => TaskRequestDetailsView( builder: (_) => TaskRequestDetailsView(
taskId: requestDetails!.id!, taskId: requestDetails!.id!,
moduleId: requestDetails!.transactionType!,
requestDetails: requestDetails, requestDetails: requestDetails,
))); )));
}); });

@ -77,7 +77,7 @@ class DeviceItemView extends StatelessWidget {
), ),
], ],
).toShadowContainer(context, withShadow: showShadow).onPress(() { ).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: DeviceTransfer(id: requestData!.id!)))); Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: DeviceTransfer(id: requestData!.id!), moduleId: requestData!.transactionNo!)));
}); });
} }
@ -138,7 +138,11 @@ class DeviceItemView extends StatelessWidget {
), ),
], ],
).toShadowContainer(context, withShadow: showShadow).onPress(() { ).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: DeviceTransfer(id: requestDetails!.id!)))); Navigator.of(context).push(MaterialPageRoute(
builder: (_) => DeviceTransferDetails(
model: DeviceTransfer(id: requestDetails!.id!),
moduleId: requestDetails!.transactionType!,
)));
}); });
} }

@ -74,6 +74,7 @@ class GasRefillItemView extends StatelessWidget {
builder: (_) => GasRefillDetailsPage( builder: (_) => GasRefillDetailsPage(
priority: requestData!.priorityName, priority: requestData!.priorityName,
date: requestData!.transactionDate!, date: requestData!.transactionDate!,
moduleId: requestData!.transactionNo!,
model: GasRefillModel(id: requestData!.id), model: GasRefillModel(id: requestData!.id),
), ),
), ),
@ -135,6 +136,7 @@ class GasRefillItemView extends StatelessWidget {
builder: (_) => GasRefillDetailsPage( builder: (_) => GasRefillDetailsPage(
priority: requestDetails!.priority!, priority: requestDetails!.priority!,
date: requestDetails!.date, date: requestDetails!.date,
moduleId: requestDetails!.transactionType!,
model: GasRefillModel(id: requestDetails!.id), model: GasRefillModel(id: requestDetails!.id),
), ),
), ),

@ -77,6 +77,7 @@ class TaskRequestProvider extends ChangeNotifier {
Future getTaskById({required int id, bool? showLoading = true}) async { Future getTaskById({required int id, bool? showLoading = true}) async {
try { try {
isLoading = showLoading ?? true; isLoading = showLoading ?? true;
taskRequestModel = null;
notifyListeners(); notifyListeners();
final response = await ApiManager.instance.get(URLs.getTaskByIdUrl + "?taskJobId=$id"); final response = await ApiManager.instance.get(URLs.getTaskByIdUrl + "?taskJobId=$id");
stateCode = response.statusCode; stateCode = response.statusCode;
@ -129,7 +130,6 @@ class TaskRequestProvider extends ChangeNotifier {
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
if (stateCode == 200) { if (stateCode == 200) {
return true; return true;
} }
return false; return false;

@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at # Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.3.11+30 version: 1.4.0+31
environment: environment:
sdk: ">=3.5.0 <4.0.0" sdk: ">=3.5.0 <4.0.0"

Loading…
Cancel
Save