Add Document Type Lookup for each module

main_production_attahment_type
WaseemAbbasi22 1 month ago
parent 392136dbe4
commit 56322d8db3

@ -309,7 +309,8 @@ class URLs {
static get genderLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=3065";
static get getDemoDocumentTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=4106";
static get getAttachmentTypesLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=4021";
// static get getAttachmentTypesLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=4021";
static get getAttachmentTypesLookup => "$_baseUrl/Lookups/GetLookup";
static get getClassificationTypeLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=450";

@ -56,7 +56,7 @@ class DashBoardProvider extends ChangeNotifier {
// Helper method to check if a tab index is UnAssigned
bool isUnassignedTab(int index) {
if (index >= 0 && index < tabs.length) {
return tabs[index].requestType == RequestTypeEnum.unassigned;
return tabs[index].requestType == RequestStatusEnum.unassigned;
}
return false;
}
@ -64,7 +64,7 @@ class DashBoardProvider extends ChangeNotifier {
// Helper method to get the UnAssigned tab index (returns -1 if not found)
int getUnassignedTabIndex() {
for (int i = 0; i < tabs.length; i++) {
if (tabs[i].requestType == RequestTypeEnum.unassigned) {
if (tabs[i].requestType == RequestStatusEnum.unassigned) {
return i;
}
}
@ -111,25 +111,25 @@ class DashBoardProvider extends ChangeNotifier {
DD.DashboardDetail? get requestDetailList => _requestDetailList;
int getStatusCount(RequestTypeEnum requestType) {
int getStatusCount(RequestStatusEnum requestType) {
switch (requestType) {
case RequestTypeEnum.unassigned:
case RequestStatusEnum.unassigned:
return dashboardCount?.data?.countUnAssigned ?? 0;
case RequestTypeEnum.open:
case RequestStatusEnum.open:
return dashboardCount?.data?.countOpen ?? 0;
case RequestTypeEnum.inProgress:
case RequestStatusEnum.inProgress:
return dashboardCount?.data?.countInprogress ?? 0;
case RequestTypeEnum.completed:
case RequestStatusEnum.completed:
return dashboardCount?.data?.countComplete ?? 0;
case RequestTypeEnum.pendingAcknowledgment:
case RequestStatusEnum.pendingAcknowledgment:
return dashboardCount?.data?.countAcknowledge ?? 0;
case RequestTypeEnum.canceled:
case RequestStatusEnum.canceled:
return dashboardCount?.data?.countCanceled ?? 0;
case RequestTypeEnum.closed:
case RequestStatusEnum.closed:
return dashboardCount?.data?.countClose ?? 0;
case RequestTypeEnum.overdue:
case RequestStatusEnum.overdue:
return dashboardCount?.data?.countOverdue ?? 0;
case RequestTypeEnum.highPriority:
case RequestStatusEnum.highPriority:
return dashboardCount?.data?.countHighPriority ?? 0;
default:
return 0;
@ -310,30 +310,30 @@ class DashBoardProvider extends ChangeNotifier {
}
// Status categories (Open, InProgress, Completed, Closed)
if (!tab.isHighPriority && !tab.isOverDue && tab.requestType != RequestTypeEnum.unassigned) {
if (!tab.isHighPriority && !tab.isOverDue && tab.requestType != RequestStatusEnum.unassigned) {
// Map requestType to status value
switch (tab.requestType) {
case RequestTypeEnum.open:
case RequestStatusEnum.open:
if (!statusTransaction.contains(1)) statusTransaction.add(1);
break;
case RequestTypeEnum.inProgress:
case RequestStatusEnum.inProgress:
if (!statusTransaction.contains(2)) statusTransaction.add(2);
break;
case RequestTypeEnum.completed:
case RequestStatusEnum.completed:
if (!statusTransaction.contains(4)) statusTransaction.add(4);
break;
case RequestTypeEnum.closed:
case RequestStatusEnum.closed:
if (!statusTransaction.contains(4)) statusTransaction.add(4);
break;
case RequestTypeEnum.canceled:
case RequestStatusEnum.canceled:
if (!statusTransaction.contains(5)) statusTransaction.add(5);
break;
case RequestTypeEnum.pendingAcknowledgment:
case RequestStatusEnum.pendingAcknowledgment:
if (!statusTransaction.contains(4)) statusTransaction.add(4);
break;
case RequestTypeEnum.unassigned:
case RequestTypeEnum.highPriority:
case RequestTypeEnum.overdue:
case RequestStatusEnum.unassigned:
case RequestStatusEnum.highPriority:
case RequestStatusEnum.overdue:
// These are handled separately above
break;
}
@ -556,7 +556,7 @@ class CategoryTabs {
String label;
int tag;
int id;
RequestTypeEnum requestType;
RequestStatusEnum requestType;
String icon;
Color iconColor;
bool isHighPriority;
@ -568,12 +568,12 @@ class CategoryTabs {
List<CategoryTabs> tabs = [];
if (userType == UsersTypes.engineer) {
// Order: 1-UnAssigned, 2-HighPriority, 3-Overdue, 4-Open, 5-InProgress, 6-Completed
tabs.add(CategoryTabs(label: 'UnAssigned', tag: 1, id: 1, requestType: RequestTypeEnum.unassigned, icon: "dashboard/unassigned", iconColor: AppColor.unassignedStatus(context)));
tabs.add(CategoryTabs(label: context.translation.highPriority, tag: 3, id: 4, requestType: RequestTypeEnum.highPriority, icon: "high_priority", iconColor: AppColor.red30, isHighPriority: true));
tabs.add(CategoryTabs(label: context.translation.overdue, tag: 3, id: 4, requestType: RequestTypeEnum.overdue, icon: "overdue", iconColor: AppColor.yellowIcon(context), isOverDue: true));
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Completed', tag: 3, id: 4, requestType: RequestTypeEnum.completed, icon: "complete_request", iconColor: AppColor.completedColor));
tabs.add(CategoryTabs(label: 'UnAssigned', tag: 1, id: 1, requestType: RequestStatusEnum.unassigned, icon: "dashboard/unassigned", iconColor: AppColor.unassignedStatus(context)));
tabs.add(CategoryTabs(label: context.translation.highPriority, tag: 3, id: 4, requestType: RequestStatusEnum.highPriority, icon: "high_priority", iconColor: AppColor.red30, isHighPriority: true));
tabs.add(CategoryTabs(label: context.translation.overdue, tag: 3, id: 4, requestType: RequestStatusEnum.overdue, icon: "overdue", iconColor: AppColor.yellowIcon(context), isOverDue: true));
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestStatusEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestStatusEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Completed', tag: 3, id: 4, requestType: RequestStatusEnum.completed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs;
}
@ -584,29 +584,29 @@ class CategoryTabs {
// tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 2));
// tabs.add(CategoryTabs(label: 'Completed', tag: 4, id: 3));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 2, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Completed', tag: 4, id: 3, requestType: RequestTypeEnum.completed, icon: "complete_request", iconColor: AppColor.completedColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 2, requestType: RequestStatusEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Completed', tag: 4, id: 3, requestType: RequestStatusEnum.completed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs;
}
if (userType == UsersTypes.qualityUser) {
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestTypeEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestStatusEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestStatusEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestStatusEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs;
}
if (userType == UsersTypes.commissioningEngineer) {
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestTypeEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestStatusEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestStatusEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestStatusEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs;
}
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestStatusEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestStatusEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
// tabs.add(CategoryTabs(label: 'Pending Acknowledgement', tag: 3, id: 1, requestType: RequestTypeEnum.pendingAcknowledgment, icon: "complete_request", iconColor: AppColor.overdueColor));
tabs.add(CategoryTabs(label: 'Acknowledgement', tag: 4, id: 1, requestType: RequestTypeEnum.pendingAcknowledgment, icon: "complete_request", iconColor: AppColor.overdueColor));
tabs.add(CategoryTabs(label: 'Canceled', tag: 6, id: 4, requestType: RequestTypeEnum.canceled, icon: "dashboard/unassigned", iconColor: AppColor.red30));
tabs.add(CategoryTabs(label: 'Acknowledgement', tag: 4, id: 1, requestType: RequestStatusEnum.pendingAcknowledgment, icon: "complete_request", iconColor: AppColor.overdueColor));
tabs.add(CategoryTabs(label: 'Canceled', tag: 6, id: 4, requestType: RequestStatusEnum.canceled, icon: "dashboard/unassigned", iconColor: AppColor.red30));
return tabs;
}
}

@ -147,29 +147,29 @@ class _DashboardViewState extends State<DashboardView> {
}
// Status categories
if (!tab.isHighPriority && !tab.isOverDue && tab.requestType != RequestTypeEnum.unassigned) {
if (!tab.isHighPriority && !tab.isOverDue && tab.requestType != RequestStatusEnum.unassigned) {
switch (tab.requestType) {
case RequestTypeEnum.open:
case RequestStatusEnum.open:
if (!statusTransaction.contains(1)) statusTransaction.add(1);
break;
case RequestTypeEnum.inProgress:
case RequestStatusEnum.inProgress:
if (!statusTransaction.contains(2)) statusTransaction.add(2);
break;
case RequestTypeEnum.completed:
case RequestStatusEnum.completed:
if (!statusTransaction.contains(4)) statusTransaction.add(4);
break;
case RequestTypeEnum.closed:
case RequestStatusEnum.closed:
if (!statusTransaction.contains(4)) statusTransaction.add(4);
break;
case RequestTypeEnum.canceled:
case RequestStatusEnum.canceled:
if (!statusTransaction.contains(5)) statusTransaction.add(5);
break;
case RequestTypeEnum.pendingAcknowledgment:
case RequestStatusEnum.pendingAcknowledgment:
if (!statusTransaction.contains(3)) statusTransaction.add(3);
break;
case RequestTypeEnum.unassigned:
case RequestTypeEnum.highPriority:
case RequestTypeEnum.overdue:
case RequestStatusEnum.unassigned:
case RequestStatusEnum.highPriority:
case RequestStatusEnum.overdue:
break;
}
}

@ -380,7 +380,7 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> with
});
// Check if this is UnAssigned tab (index 0 for engineer)
bool isUnassignedTab = tabs[index].requestType == RequestTypeEnum.unassigned;
bool isUnassignedTab = tabs[index].requestType == RequestStatusEnum.unassigned;
// Update selection state
requestsProvider.currentListIndex = index;

@ -46,24 +46,24 @@ class RequestsFragment extends StatelessWidget {
List<Widget> listItems = [];
if (context.userProvider.isNurse) {
listItems = [
requestType(data.dashboardCount?.data?.countOpen ?? 0, "dashboard/open_icon", context.translation.open, context, data.isLoading, RequestTypeEnum.open, AppColor.openColor),
requestType(data.dashboardCount?.data?.countInprogress ?? 0, "dashboard/inprogress_icon", context.translation.inProgress, context, data.isLoading, RequestTypeEnum.inProgress,
requestType(data.dashboardCount?.data?.countOpen ?? 0, "dashboard/open_icon", context.translation.open, context, data.isLoading, RequestStatusEnum.open, AppColor.openColor),
requestType(data.dashboardCount?.data?.countInprogress ?? 0, "dashboard/inprogress_icon", context.translation.inProgress, context, data.isLoading, RequestStatusEnum.inProgress,
AppColor.primary10),
requestType(
data.dashboardCount?.data?.countAcknowledge ?? 0, "complete_request", "Acknowledgement", context, data.isLoading, RequestTypeEnum.pendingAcknowledgment, AppColor.overdueColor),
requestType(data.dashboardCount?.data?.countCanceled ?? 0, "dashboard/unassigned", "Canceled", context, data.isLoading, RequestTypeEnum.canceled, AppColor.red30),
data.dashboardCount?.data?.countAcknowledge ?? 0, "complete_request", "Acknowledgement", context, data.isLoading, RequestStatusEnum.pendingAcknowledgment, AppColor.overdueColor),
requestType(data.dashboardCount?.data?.countCanceled ?? 0, "dashboard/unassigned", "Canceled", context, data.isLoading, RequestStatusEnum.canceled, AppColor.red30),
];
} else {
listItems = [
requestType(
data.dashboardCount?.data?.countUnAssigned ?? 0, "dashboard/unassigned", "UnAssigned", context, data.isLoading, RequestTypeEnum.unassigned, AppColor.unassignedStatus(context)),
requestType(data.dashboardCount?.data?.countOpen ?? 0, "dashboard/open_icon", context.translation.open, context, data.isLoading, RequestTypeEnum.open, AppColor.openColor),
requestType(data.dashboardCount?.data?.countInprogress ?? 0, "dashboard/inprogress_icon", context.translation.inProgress, context, data.isLoading, RequestTypeEnum.inProgress,
data.dashboardCount?.data?.countUnAssigned ?? 0, "dashboard/unassigned", "UnAssigned", context, data.isLoading, RequestStatusEnum.unassigned, AppColor.unassignedStatus(context)),
requestType(data.dashboardCount?.data?.countOpen ?? 0, "dashboard/open_icon", context.translation.open, context, data.isLoading, RequestStatusEnum.open, AppColor.openColor),
requestType(data.dashboardCount?.data?.countInprogress ?? 0, "dashboard/inprogress_icon", context.translation.inProgress, context, data.isLoading, RequestStatusEnum.inProgress,
AppColor.primary10),
requestType(
data.dashboardCount?.data?.countComplete ?? 0, "complete_request", context.translation.completed, context, data.isLoading, RequestTypeEnum.completed, AppColor.completedColor),
requestType(data.dashboardCount?.data?.countOverdue ?? 0, "overdue", context.translation.overdue, context, data.isLoading, RequestTypeEnum.overdue, AppColor.yellowIcon(context)),
requestType(data.dashboardCount?.data?.countHighPriority ?? 0, "high_priority", context.translation.highPriority, context, data.isLoading, RequestTypeEnum.highPriority, AppColor.red30),
data.dashboardCount?.data?.countComplete ?? 0, "complete_request", context.translation.completed, context, data.isLoading, RequestStatusEnum.completed, AppColor.completedColor),
requestType(data.dashboardCount?.data?.countOverdue ?? 0, "overdue", context.translation.overdue, context, data.isLoading, RequestStatusEnum.overdue, AppColor.yellowIcon(context)),
requestType(data.dashboardCount?.data?.countHighPriority ?? 0, "high_priority", context.translation.highPriority, context, data.isLoading, RequestStatusEnum.highPriority, AppColor.red30),
];
}
@ -77,7 +77,7 @@ class RequestsFragment extends StatelessWidget {
});
}
Widget requestType(int value, String icon, String title, BuildContext context, bool isLoading, RequestTypeEnum requestType, Color iconColor) {
Widget requestType(int value, String icon, String title, BuildContext context, bool isLoading, RequestStatusEnum requestType, Color iconColor) {
return CustomBadge(
value: isLoading ? 0 : value,
positionR: -4,

@ -197,7 +197,7 @@ enum AssetDeliveryStageEnum {
other,
}
enum RequestTypeEnum {
enum RequestStatusEnum {
unassigned,
open,
inProgress,

@ -0,0 +1,206 @@
enum RequestAttachmentTypeEnum {
correctiveMaintenance, // 1
gasRefill, // 2
transferAsset, // 3
preventiveMaintenance, // 4
recurrentWo, // 5
taskRequest, // 6
recallAndAlert, // 7
assetInventory, // 8
assessmentOfNeedAndTechnology, // 9
equipmentInternalAudit, // 10
systemInternalAudit, // 11
loanEquipment, // 12
assetDelivery, // 13
medicalGasInspection, // 14
demo, // 15
incidents, // 16
sparePartActivity, // 17
updateDeliveryNotes, // 18
traf, // 19
}
extension RequestAttachmentTypeEnumExtension on RequestAttachmentTypeEnum {
int get id {
switch (this) {
case RequestAttachmentTypeEnum.correctiveMaintenance:
return 1;
case RequestAttachmentTypeEnum.gasRefill:
return 2;
case RequestAttachmentTypeEnum.transferAsset:
return 3;
case RequestAttachmentTypeEnum.preventiveMaintenance:
return 4;
case RequestAttachmentTypeEnum.recurrentWo:
return 5;
case RequestAttachmentTypeEnum.taskRequest:
return 6;
case RequestAttachmentTypeEnum.recallAndAlert:
return 7;
case RequestAttachmentTypeEnum.assetInventory:
return 8;
case RequestAttachmentTypeEnum.assessmentOfNeedAndTechnology:
return 9;
case RequestAttachmentTypeEnum.equipmentInternalAudit:
return 10;
case RequestAttachmentTypeEnum.systemInternalAudit:
return 11;
case RequestAttachmentTypeEnum.loanEquipment:
return 12;
case RequestAttachmentTypeEnum.assetDelivery:
return 13;
case RequestAttachmentTypeEnum.medicalGasInspection:
return 14;
case RequestAttachmentTypeEnum.demo:
return 15;
case RequestAttachmentTypeEnum.incidents:
return 16;
case RequestAttachmentTypeEnum.sparePartActivity:
return 17;
case RequestAttachmentTypeEnum.updateDeliveryNotes:
return 18;
case RequestAttachmentTypeEnum.traf:
return 19;
}
}
int get lookupEnumId {
switch (this) {
///values with 0 we need to check with backend team for the correct lookupEnumId
case RequestAttachmentTypeEnum.correctiveMaintenance:
return 40305;
case RequestAttachmentTypeEnum.gasRefill:
return 40307;
case RequestAttachmentTypeEnum.transferAsset:
return 40304;
case RequestAttachmentTypeEnum.preventiveMaintenance:
return 40313;
case RequestAttachmentTypeEnum.recurrentWo:
return 40314;
case RequestAttachmentTypeEnum.taskRequest:
return 40317;
case RequestAttachmentTypeEnum.recallAndAlert:
return 40316;
case RequestAttachmentTypeEnum.assetInventory:
return 40303;
case RequestAttachmentTypeEnum.assessmentOfNeedAndTechnology:
return 40319;
case RequestAttachmentTypeEnum.equipmentInternalAudit:
return 40323;
case RequestAttachmentTypeEnum.systemInternalAudit:
return 40322;
case RequestAttachmentTypeEnum.loanEquipment:
return 3053;
case RequestAttachmentTypeEnum.assetDelivery:
return 5009;
case RequestAttachmentTypeEnum.medicalGasInspection:
return 3012;
case RequestAttachmentTypeEnum.demo:
return 4106;
case RequestAttachmentTypeEnum.incidents:
return 40308;
case RequestAttachmentTypeEnum.sparePartActivity:
return 40321;
case RequestAttachmentTypeEnum.updateDeliveryNotes:
return 40309;
case RequestAttachmentTypeEnum.traf:
return 40319;
}
}
// String getName(BuildContext context) {
// switch (this) {
// case RequestTypeEnum.correctiveMaintenance:
// return context.translation.correctiveMaintenance;
// case RequestTypeEnum.gasRefill:
// return context.translation.gasRefill;
// case RequestTypeEnum.transferAsset:
// return context.translation.transferAsset;
// case RequestTypeEnum.preventiveMaintenance:
// return context.translation.preventiveMaintenance;
// case RequestTypeEnum.recurrentWo:
// return context.translation.recurrentWo;
// case RequestTypeEnum.taskRequest:
// return context.translation.taskRequest;
// case RequestTypeEnum.recallAndAlert:
// return 'Recall and Alert';
// case RequestTypeEnum.assetInventory:
// return 'Asset Inventory';
// case RequestTypeEnum.assessmentOfNeedAndTechnology:
// return 'Assessment of Need & Technology';
// case RequestTypeEnum.equipmentInternalAudit:
// return 'Equipment Internal Audit';
// case RequestTypeEnum.systemInternalAudit:
// return 'System Internal Audit';
// case RequestTypeEnum.loanEquipment:
// return 'Loan Equipment';
// case RequestTypeEnum.assetDelivery:
// return 'Asset Delivery';
// case RequestTypeEnum.medicalGasInspection:
// return 'Medical Gas Inspection';
// case RequestTypeEnum.demo:
// return 'Demo';
// case RequestTypeEnum.incidents:
// return 'Incidents';
// case RequestTypeEnum.sparePartActivity:
// return 'Spare Part Activity';
// case RequestTypeEnum.updateDeliveryNotes:
// return 'Update Delivery Notes';
// case RequestTypeEnum.traf:
// return 'Traf';
// }
// }
static RequestAttachmentTypeEnum? fromId(int? id) {
if (id == null) return null;
switch (id) {
case 1:
return RequestAttachmentTypeEnum.correctiveMaintenance;
case 2:
return RequestAttachmentTypeEnum.gasRefill;
case 3:
return RequestAttachmentTypeEnum.transferAsset;
case 4:
return RequestAttachmentTypeEnum.preventiveMaintenance;
case 5:
return RequestAttachmentTypeEnum.recurrentWo;
case 6:
return RequestAttachmentTypeEnum.taskRequest;
case 7:
return RequestAttachmentTypeEnum.recallAndAlert;
case 8:
return RequestAttachmentTypeEnum.assetInventory;
case 9:
return RequestAttachmentTypeEnum.assessmentOfNeedAndTechnology;
case 10:
return RequestAttachmentTypeEnum.equipmentInternalAudit;
case 11:
return RequestAttachmentTypeEnum.systemInternalAudit;
case 12:
return RequestAttachmentTypeEnum.loanEquipment;
case 13:
return RequestAttachmentTypeEnum.assetDelivery;
case 14:
return RequestAttachmentTypeEnum.medicalGasInspection;
case 15:
return RequestAttachmentTypeEnum.demo;
case 16:
return RequestAttachmentTypeEnum.incidents;
case 17:
return RequestAttachmentTypeEnum.sparePartActivity;
case 18:
return RequestAttachmentTypeEnum.updateDeliveryNotes;
case 19:
return RequestAttachmentTypeEnum.traf;
default:
return null;
}
}
// static String getNameFromId(int id, BuildContext context) {
// final requestType = fromId(id);
// return requestType?.getName(context) ?? "Type $id";
// }
static int? getLookupEnumIdFromId(int? id) {
final requestType = fromId(id);
return requestType?.lookupEnumId;
}
}

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
@ -314,4 +316,13 @@ class GenericAttachmentModel {
data['attachmentURL'] = attachmentURL;
return data;
}
Map<String, dynamic> toTaskJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
data['createdBy'] = createdBy;
data['originalName'] = originalName;
data['attachmentTypeId'] = documentType?.id;
return data;
}
}

@ -284,7 +284,7 @@ class TaskData {
data['callComment'] = callComment;
if (taskJobAttachments != null) {
data['taskJobAttachments'] = taskJobAttachments!.map((e) => e?.toJson() ?? {}).toList();
data['taskJobAttachments'] = taskJobAttachments!.map((e) => e.toTaskJson()).toList();
}
if (assignedEngineer != null) {
@ -369,7 +369,7 @@ class TaskData {
data['taskJobActivityEngineerTimers'] = taskJobActivityEngineerTimers!.map((v) => v.toJson()).toList();
}
if (taskJobAttachments != null) {
data['attachments'] = taskJobAttachments!.map((v) => v?.toJson() ?? {}).toList();
data['attachments'] = taskJobAttachments!.map((v) => v.toTaskJson()).toList();
}
data['installationBuildingId'] = building?.id;
data['installationFloorId'] = floor?.id;
@ -781,7 +781,7 @@ class AddTaskModel {
'reasonOfFSCA': reasonOfFSCA,
'correctiveActionDescription': correctiveActionDescription,
'evaluatorUserId': taskEvaluatorUser?.userId,
'attachments': attachments?.map((x) => x.toJson() ?? {}).toList(),
'attachments': attachments?.map((x) => x.toTaskJson()).toList(),
};
}

@ -9,6 +9,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/modules/asset_delivery_module/provider/asset_delivery_provider.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -19,6 +20,7 @@ import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
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/multi_image_picker.dart';
import 'package:test_sa/views/widgets/item_views/info_header_widget.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
class AssetDeliveryAttachmentView extends StatefulWidget {
@ -86,6 +88,7 @@ class _AssetDeliveryAttachmentViewState extends State<AssetDeliveryAttachmentVie
? AttachmentPicker(
label: context.translation.attachments,
attachment: _attachments,
moduleId: RequestAttachmentTypeEnum.assetDelivery.id,
buttonColor: AppColor.primary10,
onlyImages: false,
showAsListView: true,
@ -97,17 +100,22 @@ class _AssetDeliveryAttachmentViewState extends State<AssetDeliveryAttachmentVie
padding: 12,
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
)
: FilesList( showAsListView: true,
types: _attachments.map((doc) {
final attachmentType = doc.documentType?.name ?? '';
return attachmentType.isNotEmpty ? attachmentType : 'Asset Guide';
}).toList(),
images: _attachments.map((e) => URLs.getFileUrl(e.name ?? '') ?? '',).toList() ?? []).toShadowContainer(
context,
borderRadius: 20,
padding: 12,
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
),
: Column(
children: [
InfoHeader16Widget("Attachments".addTranslation),
FilesList( showAsListView: true,
types: _attachments.map((doc) {
final attachmentType = doc.documentType?.name ?? '';
return attachmentType.isNotEmpty ? attachmentType : 'Asset Guide';
}).toList(),
images: _attachments.map((e) => URLs.getFileUrl(e.name ?? '') ?? '',).toList() ?? []).toShadowContainer(
context,
borderRadius: 20,
padding: 12,
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
),
],
),
],
),
),

@ -1,9 +1,12 @@
import 'dart:convert';
import 'dart:developer';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
///TODO need to remove this after verifying we need to use the same for all modules ..
class AttachmentTypeLookupProvider extends LoadingListNotifier<Lookup> {
@override
@ -38,10 +41,18 @@ class AttachmentTypeLookupProviderLatest extends LoadingListNotifier<Lookup> {
if (loading == true) return -2;
loading = true;
notifyListeners();
int? lookupEnum = RequestAttachmentTypeEnumExtension.getLookupEnumIdFromId(id);
if (lookupEnum == null) {
log('Invalid request type id: $id');
loading = false;
stateCode = -1;
notifyListeners();
return -1;
}
try {
// OPTIMIZATION: Enable caching for demo document types lookup
log('Request type id: $id, Lookup enum: $lookupEnum');
Response response = await ApiManager.instance.get(
URLs.getAttachmentTypesLookup,
'${URLs.getAttachmentTypesLookup}?lookupEnum=$lookupEnum',
useCache: true,
enableToastMessage: false,
);

@ -11,6 +11,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/modules/asset_inventory_module/models/asset_inventory_model.dart';
import 'package:test_sa/modules/asset_inventory_module/pages/search_asset_view.dart';
@ -298,8 +299,9 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
'Attachments'.addTranslation,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.white936),
),
12.height,
AttachmentPicker(
moduleId: RequestAttachmentTypeEnum.assetInventory.id,
label: context.translation.attachFiles,
attachment: attachments,
showAsListView: true,

@ -12,6 +12,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
@ -157,6 +158,7 @@ class _CreateCMRequestState extends State<CreateCMRequest> with TickerProviderSt
24.height,
AttachmentPicker(
label: context.translation.attachImage,
moduleId: RequestAttachmentTypeEnum.correctiveMaintenance.id,
showAsListView: true,
attachment: _deviceImages,
onlyImages: false,

@ -4,6 +4,7 @@ import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart';
@ -173,6 +174,7 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[
2.height,
const Divider().defaultStyle(context),
InfoHeader16Widget("Attachments".addTranslation),
FilesList(
showAsListView: true,
types: activity.activitySparePart!.acitiySparePartAttachments!

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/enums/work_order_next_step.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
@ -56,19 +57,14 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
return Consumer<CMDetailProvider>(builder: (pContext, requestProvider, _) {
if (userProvider.user?.type == UsersTypes.engineer) {
_userAttachments = requestProvider.currentWorkOrder?.data?.workOrderAttachments
.whereType<GenericAttachmentModel>()
.where((e) => e.createdBy == userProvider.user?.userID)
.map((e) => GenericAttachmentModel(id: e.id, name: e.name, createdBy: e.createdBy, documentType: e.documentType))
.toList() ?? [];
_attachments = requestProvider.currentWorkOrder?.data?.workOrderAttachments
.whereType<GenericAttachmentModel>()
.where((e) => e.createdBy != userProvider.user?.userID)
.toList() ?? [];
.whereType<GenericAttachmentModel>()
.where((e) => e.createdBy == userProvider.user?.userID)
.map((e) => GenericAttachmentModel(id: e.id, name: e.name, createdBy: e.createdBy, documentType: e.documentType))
.toList() ??
[];
_attachments = requestProvider.currentWorkOrder?.data?.workOrderAttachments.whereType<GenericAttachmentModel>().where((e) => e.createdBy != userProvider.user?.userID).toList() ?? [];
} else {
_attachments = requestProvider.currentWorkOrder?.data?.workOrderAttachments
.whereType<GenericAttachmentModel>()
.where((e) => e.createdBy == userProvider.user?.userID)
.toList() ?? [];
_attachments = requestProvider.currentWorkOrder?.data?.workOrderAttachments.whereType<GenericAttachmentModel>().where((e) => e.createdBy == userProvider.user?.userID).toList() ?? [];
}
bool showInitialVisitCard = requestProvider.currentWorkOrder?.data?.needAVisitDateTime != null &&
@ -286,18 +282,32 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
label: context.translation.attachments,
showAsListView: true,
attachment: _userAttachments,
moduleId: RequestAttachmentTypeEnum.correctiveMaintenance.id,
buttonColor: AppColor.primary10,
onlyImages: false,
buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
onChange: (attachment) {
requestProvider.addWorkOrderAttachment(woId: workOrder.requestId!, attachments: attachment, otherAttachment: _attachments,);
requestProvider.addWorkOrderAttachment(
woId: workOrder.requestId!,
attachments: attachment,
otherAttachment: _attachments,
);
},
),
],
] else ...[
if (_attachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
FilesList(images: _attachments.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList(),showAsListView: true,),
InfoHeader16Widget("Attachments".addTranslation),
FilesList(
images: _attachments.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList(),
showAsListView: true,
types: _attachments
.whereType<GenericAttachmentModel>()
.where((e) => e.documentType != null && e.documentType!.name!.isNotEmpty)
.map((toElement) => toElement.documentType!.name!)
.toList(),
),
],
//handle nurse case..
],

@ -7,6 +7,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/helper_data_models/asset_retired/asset_retired_model.dart';
import 'package:test_sa/models/lookup.dart';
@ -106,6 +107,7 @@ class _AssetRetiredState extends State<AssetRetired> with TickerProviderStateMix
AttachmentPicker(
label: context.translation.attachFiles,
attachment: _attachments,
moduleId: RequestAttachmentTypeEnum.assetDelivery.id,
showAsListView: true,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -11,6 +11,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart';
import 'package:test_sa/models/lookup.dart';
@ -293,6 +294,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
AttachmentPicker(
label: context.translation.attachQuotation,
showAsListView: true,
moduleId: RequestAttachmentTypeEnum.sparePartActivity.id,
attachment: attachments,
buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
// buttonColor: AppColor.primary10,

@ -13,6 +13,7 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
@ -516,9 +517,10 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
attachment: _attachments,
buttonColor: AppColor.primary10.withOpacity(demoDocumentLookup != null ? 1 : .4),
onlyImages: false,
enabled: demoDocumentLookup != null,
documentType: demoDocumentLookup,
// enabled: demoDocumentLookup != null,
// documentType: demoDocumentLookup,
showAsListView: true,
moduleId: RequestAttachmentTypeEnum.demo.id,
buttonIcon: 'image-plus'.toSvgAsset(color: (AppColor.primary10)),
// onChange: (attachments) {
// _attachments = attachments;

@ -5,6 +5,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/item_views/info_header_widget.dart';
import '../../controllers/api_routes/urls.dart';
import '../../extensions/text_extensions.dart';
@ -54,10 +55,7 @@ class DemoActivitiesPage extends StatelessWidget {
12.height,
if (allAttachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
Text(
"Attachments".addTranslation,
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
InfoHeader16Widget("Attachments".addTranslation),
FilesList(
showAsListView: true,
types: allAttachments

@ -11,6 +11,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart';
@ -225,8 +226,7 @@ class _UpdateDemoRequestViewState extends State<UpdateDemoRequestView> with Tick
attachment: attachments,
buttonColor: AppColor.black10.withOpacity(demoDocumentLookup != null ? 1 : .4),
onlyImages: false,
// documentType: demoDocumentLookup,
// enabled: demoDocumentLookup != null,
moduleId: RequestAttachmentTypeEnum.demo.id,
showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
),

@ -11,6 +11,7 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart';
@ -171,6 +172,7 @@ class _CreateIncidentRequestPageState extends State<CreateIncidentRequestPage> {
label: context.translation.attachments,
attachment: attachments,
buttonColor: AppColor.black10,
moduleId: RequestAttachmentTypeEnum.incidents.id,
onlyImages: false,
showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -8,6 +8,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -120,6 +121,7 @@ class _CreateEquipmentInternalAuditFormState extends State<CreateEquipmentIntern
label: context.translation.attachments,
attachment: _attachments,
showAsListView: true,
moduleId: RequestAttachmentTypeEnum.equipmentInternalAudit.id,
buttonColor: AppColor.primary10,
onlyImages: false,
onChange: (value) {},

@ -126,11 +126,7 @@ class _EquipmentInternalAuditDetailPageState extends State<EquipmentInternalAudi
],
if (allAttachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
Text(
"Attachments".addTranslation,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
8.height,
InfoHeader16Widget("Attachments".addTranslation),
FilesList(
showAsListView: true,
types: allAttachments

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -222,6 +223,7 @@ class _UpdateEquipmentInternalAuditPageState extends State<UpdateEquipmentIntern
label: 'Upload Attachment',
attachment: _attachments,
showAsListView: true,
moduleId: RequestAttachmentTypeEnum.equipmentInternalAudit.id,
buttonColor: AppColor.primary10,
onlyImages: false,
buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),

@ -9,6 +9,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/lookup.dart';
@ -153,6 +154,7 @@ class _CreateSystemInternalAuditFormState extends State<CreateSystemInternalAudi
AttachmentPicker(
label: context.translation.attachments,
showAsListView: true,
moduleId: RequestAttachmentTypeEnum.systemInternalAudit.id,
attachment: _attachments,
buttonColor: AppColor.primary10,
onlyImages: false,

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -212,6 +213,7 @@ class _UpdateSystemInternalAuditPageState extends State<UpdateSystemInternalAudi
label: 'Upload Attachment',
showAsListView: true,
attachment: _attachments,
moduleId: RequestAttachmentTypeEnum.systemInternalAudit.id,
buttonColor: AppColor.primary10,
onlyImages: false,
buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/mapped_sites.dart';
@ -155,6 +156,7 @@ class _CreateLoanRequestPageState extends State<CreateLoanRequestPage> with Tick
AttachmentPicker(
label: context.translation.attachments,
attachment: attachments,
moduleId: RequestAttachmentTypeEnum.loanEquipment.id,
onlyImages: false,
showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -166,6 +167,7 @@ class _InstallationFormViewState extends State<InstallationFormView> {
attachment: _attachments,
buttonColor: AppColor.primary10,
onlyImages: false,
moduleId: RequestAttachmentTypeEnum.loanEquipment.id,
showAsListView: true,
buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),
onChange: (attachments) {

@ -11,6 +11,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -169,6 +170,7 @@ class _InstallationPullOutFormViewState extends State<InstallationPullOutFormVie
label: context.translation.attachments,
attachment: _attachments,
buttonColor: AppColor.primary10,
moduleId: RequestAttachmentTypeEnum.loanEquipment.id,
onlyImages: false,
showAsListView: true,
buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.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';
@ -213,6 +214,7 @@ class _UpdateDeliveryNotesState extends State<UpdateDeliveryNotes> {
attachment: _attachments,
showAsListView: true,
buttonColor: AppColor.primary10,
moduleId: RequestAttachmentTypeEnum.updateDeliveryNotes.id,
onlyImages: false,
buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),
),

@ -8,6 +8,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
@ -202,6 +203,7 @@ class _UpdateMedicalGasInspectionPageState extends State<UpdateMedicalGasInspect
buttonColor: AppColor.primary10,
showAsListView: true,
onlyImages: false,
moduleId: RequestAttachmentTypeEnum.medicalGasInspection.id,
buttonIcon: 'attachment_icon'.toSvgAsset(color: AppColor.primary10),
),
16.height,

@ -12,6 +12,7 @@ import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/device/model_definition.dart';
import 'package:test_sa/models/device/supplier.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart';
@ -342,6 +343,7 @@ class _WoInfoFormState extends State<WoInfoForm> {
label: context.translation.attachments,
showAsListView: true,
attachment: ppmProvider.ppmPlanAttachments,
moduleId: RequestAttachmentTypeEnum.preventiveMaintenance.id,
buttonColor: AppColor.black10,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -13,6 +13,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/device/asset_transfer_attachment.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/new_models/department.dart';
@ -247,6 +248,7 @@ class _CreateDeviceTransferRequestState extends State<CreateDeviceTransferReques
label: context.translation.attachImage,
showAsListView: true,
attachment: attachments,
moduleId: RequestAttachmentTypeEnum.transferAsset.id,
buttonColor: AppColor.black10,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -13,6 +13,7 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset_transfer_attachment.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/new_models/assigned_employee.dart';
import 'package:test_sa/models/new_models/assistant_employee.dart';
@ -297,6 +298,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
AttachmentPicker(
label: context.translation.attachFiles,
showAsListView: true,
moduleId: RequestAttachmentTypeEnum.transferAsset.id,
attachment: attachments,
buttonColor: AppColor.black10,
onlyImages: false,

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
@ -218,6 +219,7 @@ class _GasRefillRequestFormState extends State<GasRefillRequestForm> {
label: context.translation.attachFiles,
showAsListView: true,
attachment: attachments,
moduleId: RequestAttachmentTypeEnum.gasRefill.id,
buttonColor: AppColor.black10,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -11,6 +11,7 @@ import 'package:test_sa/controllers/providers/api/user_provider.dart';
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/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/timer_model.dart';
@ -292,6 +293,7 @@ class _UpdateGasRefillRequestState extends State<UpdateGasRefillRequest> {
AttachmentPicker(
label: context.translation.attachFiles,
attachment: _attachments,
moduleId: RequestAttachmentTypeEnum.gasRefill.id,
showAsListView: true,
buttonColor: AppColor.black10,
onlyImages: false,

@ -5,10 +5,12 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/enum_extensions.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
@ -58,7 +60,9 @@ class _CreateTaskViewState extends State<CreateTaskView> with TickerProviderStat
void initState() {
// TODO: implement initState
super.initState();
Provider.of<TaskTypeProvider>(context, listen: false).reset();
// WidgetsBinding.instance.addPostFrameCallback((_) {
Provider.of<TaskTypeProvider>(context, listen: false).reset();
// });
}
@override
@ -116,6 +120,7 @@ class _CreateTaskViewState extends State<CreateTaskView> with TickerProviderStat
AttachmentPicker(
label: context.translation.attachImage,
attachment: attachments,
moduleId: RequestAttachmentTypeEnum.taskRequest.id,
buttonColor: AppColor.black10,
showAsListView: true,
onlyImages: false,

@ -15,6 +15,7 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart';
@ -193,6 +194,7 @@ class _UpdateTaskRequestState extends State<UpdateTaskRequest> {
label: context.translation.attachFiles,
showAsListView: true,
attachment: attachments,
moduleId: RequestAttachmentTypeEnum.taskRequest.id,
buttonColor: AppColor.black10,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -11,6 +11,7 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/traf_customer.dart';
@ -518,6 +519,7 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
label: context.translation.attachFiles,
showAsListView: true,
attachment: attachments,
moduleId: RequestAttachmentTypeEnum.traf.id,
buttonColor: AppColor.black10,
onlyImages: false,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),

@ -149,12 +149,7 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
],
if (_attachments.isNotEmpty) ...[
4.height,
Text(
// todo @waseem conver to header
"Attachments".addTranslation,
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
// 8.height,
InfoHeader16Widget("Attachments".addTranslation),
FilesList(
showAsListView: true,
types: _attachments

@ -7,6 +7,7 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/modules/cm_module/cm_request_utils.dart';
@ -213,6 +214,7 @@ class _UpdateTrafRequestPageState extends State<UpdateTrafRequestPage> {
AttachmentPicker(
label: context.translation.attachFiles,
showAsListView: true,
moduleId: RequestAttachmentTypeEnum.traf.id,
attachment: attachments,
buttonColor: AppColor.black10,
onlyImages: false,

@ -12,7 +12,6 @@ import '../../controllers/api_routes/urls.dart';
class TaskTypeProvider extends LoadingListNotifier<TaskType> {
@override
Future getData({int? id}) async {
print('get data called...');
if (loading == true) return -2;
loading = true;
notifyListeners();
@ -23,7 +22,6 @@ class TaskTypeProvider extends LoadingListNotifier<TaskType> {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
items = categoriesListJson.map((item) => TaskType.fromJson(item)).toList();
print('item lenght i got is ${items.length}');
}
loading = false;

@ -317,6 +317,7 @@ class _AssetDetailsViewState extends State<AssetDetailsView> with SingleTickerPr
opacity: attachmentAnimation,
child: const Divider().defaultStyle(context),
),
InfoHeader16Widget("Attachments".addTranslation),
FadeTransition(
opacity: attachmentAnimation,
child: SlideTransition(

@ -10,6 +10,7 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset_by_id_model.dart';
import 'package:test_sa/models/enums/request_attachment_type_enum.dart';
import 'package:test_sa/models/generic_attachment_model.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';
@ -109,12 +110,12 @@ class _AssetImageUploadPageState extends State<AssetImageUploadPage> {
AttachmentPicker(
label: "Additional Images",
pickerTitle: "Attach Images",
moduleId: RequestAttachmentTypeEnum.transferAsset.id,
attachment: trainingImageData.additionalImages!,
buttonColor: AppColor.black10,
onlyImages: true,
showAsListView: true,
pickMultiple: true,
// showAsGrid: true,
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.primary10),
onChange: (_attachments) {
trainingImageData.additionalImages = _attachments;
@ -165,6 +166,7 @@ class _AssetImageUploadPageState extends State<AssetImageUploadPage> {
child: AttachmentPicker(
label: "",
pickerTitle: title,
moduleId: RequestAttachmentTypeEnum.transferAsset.id,
showAsListView:true,
onlyImages: true,
checkQuality: true,

@ -1,8 +1,10 @@
import 'dart:developer';
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:image_blur_detection/image_blur_detection.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
@ -43,8 +45,8 @@ class AttachmentPicker extends StatefulWidget {
final String pickerTitle;
final String label;
final bool error;
final int moduleId;
final List<GenericAttachmentModel> attachment;
final bool enabled, onlyImages;
double? buttonHeight;
Widget? buttonIcon;
@ -63,7 +65,8 @@ class AttachmentPicker extends StatefulWidget {
this.pickerTitle = "Attach File",
this.error = false,
this.buttonHeight,
required this.showAsListView,
required this.moduleId,
required this.showAsListView,
this.buttonIcon,
this.enabled = true,
this.onlyImages = false,
@ -83,6 +86,7 @@ class AttachmentPicker extends StatefulWidget {
class _AttachmentPickerState extends State<AttachmentPicker> with SingleTickerProviderStateMixin {
late AnimationController _animationController;
Lookup? documentLookup;
late AttachmentTypeLookupProviderLatest attachmentTypeLookupProvider;
@override
void initState() {
@ -92,6 +96,10 @@ class _AttachmentPickerState extends State<AttachmentPicker> with SingleTickerPr
vsync: this,
);
_animationController.forward();
WidgetsBinding.instance.addPostFrameCallback((_) {
Provider.of<AttachmentTypeLookupProviderLatest>(context, listen: false).reset();
log('i am going to reset the value');
});
}
@override
@ -283,7 +291,8 @@ class _AttachmentPickerState extends State<AttachmentPicker> with SingleTickerPr
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(alignment: AlignmentDirectional.center,
Align(
alignment: AlignmentDirectional.center,
child: Container(
width: 40.toScreenWidth,
height: 5.toScreenHeight,
@ -291,11 +300,12 @@ class _AttachmentPickerState extends State<AttachmentPicker> with SingleTickerPr
),
),
8.height,
InfoHeader16Widget(widget.pickerTitle),
InfoHeader16Widget(widget.pickerTitle),
8.height,
SingleItemDropDownMenu<Lookup, AttachmentTypeLookupProviderLatest>(
context: context,
height: 56.toScreenHeight,
requestById: widget.moduleId,
title: "Document Type",
initialValue: documentLookup,
showShadow: false,

Loading…
Cancel
Save