history log completed.

design_3.0_demo_module
Sikander Saleem 1 year ago
parent 58666916cc
commit 0ea7954c6a

@ -28,8 +28,7 @@ class WorkOrderDetail {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"data": data?.toJson(), "data": data?.toJson(),
"message": message, "message": message,
"title": title, "title": title,
@ -84,48 +83,49 @@ class WorkOrderData {
required this.activities, required this.activities,
required this.activityAssetToBeRetireds, required this.activityAssetToBeRetireds,
}); });
int? requestId; int? requestId;
String? workOrderNo; String? workOrderNo;
AssignedEmployee? workOrderCreatedBy; AssignedEmployee? workOrderCreatedBy;
DateTime? requestedDate; DateTime? requestedDate;
WorkOrderAsset? asset; WorkOrderAsset? asset;
Lookup? assetGroup; Lookup? assetGroup;
Lookup? manufacturer; Lookup? manufacturer;
Lookup? model; Lookup? model;
Lookup? assetNdModel; Lookup? assetNdModel;
Site? site; Site? site;
Lookup? building; Lookup? building;
Lookup? floor; Lookup? floor;
AssetGroup? department; AssetGroup? department;
int? room; int? room;
Lookup? assetType; Lookup? assetType;
AssignedEmployee? assignedEmployee; AssignedEmployee? assignedEmployee;
String? lastActivityStatus; String? lastActivityStatus;
Lookup? status; Lookup? status;
Lookup? nextStep; Lookup? nextStep;
int? assetVerificationType; int? assetVerificationType;
List<WorkOrderContactPerson> workOrderContactPerson; List<WorkOrderContactPerson> workOrderContactPerson;
Lookup? equipmentStatus; Lookup? equipmentStatus;
Lookup? priority; Lookup? priority;
Lookup? requestedThrough; Lookup? requestedThrough;
Lookup? typeofRequest; Lookup? typeofRequest;
Lookup? loanAvailablity; Lookup? loanAvailablity;
Lookup? assetLoan; Lookup? assetLoan;
Lookup? safety; Lookup? safety;
Lookup? problemDescription; Lookup? problemDescription;
String? comments; String? comments;
String? voiceNote; String? voiceNote;
List<String> workOrderAttachments; List<String> workOrderAttachments;
String? returnToService; String? returnToService;
Lookup? serviceType; Lookup? serviceType;
Lookup? failureReasone; Lookup? failureReasone;
Lookup? solution; Lookup? solution;
String? totalWorkingHours; String? totalWorkingHours;
DateTime? needAVisitDateTime; DateTime? needAVisitDateTime;
String?needAVisitComment; String? needAVisitComment;
List<WorkOrderHistory> workOrderHistory; List<WorkOrderHistory> workOrderHistory;
List<dynamic> activities; List<dynamic> activities;
List<dynamic> activityAssetToBeRetireds; List<dynamic> activityAssetToBeRetireds;
factory WorkOrderData.fromJson(Map<String, dynamic> json) { factory WorkOrderData.fromJson(Map<String, dynamic> json) {
return WorkOrderData( return WorkOrderData(
@ -174,8 +174,7 @@ class WorkOrderData {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"id": requestId, "id": requestId,
"workOrderNo": workOrderNo, "workOrderNo": workOrderNo,
"workOrderCreatedBy": workOrderCreatedBy?.toJson(), "workOrderCreatedBy": workOrderCreatedBy?.toJson(),
@ -218,22 +217,33 @@ class WorkOrderData {
"activities": activities.map((x) => x).toList(), "activities": activities.map((x) => x).toList(),
"activityAssetToBeRetireds": activityAssetToBeRetireds.map((x) => x).toList(), "activityAssetToBeRetireds": activityAssetToBeRetireds.map((x) => x).toList(),
}; };
Map<String, dynamic> toFixRemotelyJson() { Map<String, dynamic> toFixRemotelyJson() {
return {'workOrderId': workOrderNo, 'startDate': workOrderHistory.isNotEmpty? workOrderHistory[0].fixRemotlyStartTime:'', 'endDate': workOrderHistory.isNotEmpty? workOrderHistory[0].fixRemotlyEndTime:'', 'workingHour':'', 'comment': comments}; return {
'workOrderId': workOrderNo,
'startDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].fixRemotlyStartTime : '',
'endDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].fixRemotlyEndTime : '',
'workingHour': '',
'comment': comments
};
} }
//TODO feedback not defined... //TODO feedback not defined...
Map<String, dynamic> toMarkAsFixedJson() { Map<String, dynamic> toMarkAsFixedJson() {
return {'workOrderId': workOrderNo, 'feedback': comments}; return {'workOrderId': workOrderNo, 'feedback': comments};
} }
Map<String, dynamic> toNeedVisitJson() { Map<String, dynamic> toNeedVisitJson() {
return {'workOrderId': workOrderNo, 'visitDate': workOrderHistory.isNotEmpty? workOrderHistory[0].needAVisitDateTime:'', 'comment': comments}; return {'workOrderId': workOrderNo, 'visitDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].needAVisitDateTime : '', 'comment': comments};
} }
//TODO signatureNurse not defined... //TODO signatureNurse not defined...
Map<String, dynamic> toNurseActionJson() { Map<String, dynamic> toNurseActionJson() {
return {'workOrderId': workOrderNo, 'feedback': '', 'signatureNurse': 'signatureNurse'}; return {'workOrderId': workOrderNo, 'feedback': '', 'signatureNurse': 'signatureNurse'};
} }
Map<String, dynamic> toWorkOrderJson() { Map<String, dynamic> toWorkOrderJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
data['workOrderId'] = requestId; data['workOrderId'] = requestId;
data['equipmentStatusId'] = equipmentStatus?.id; data['equipmentStatusId'] = equipmentStatus?.id;
data['returnToService'] = returnToService; data['returnToService'] = returnToService;
@ -253,8 +263,8 @@ class WorkOrderAsset {
required this.assetNumber, required this.assetNumber,
}); });
int? id; int? id;
String? assetNumber; String? assetNumber;
factory WorkOrderAsset.fromJson(Map<String, dynamic> json) { factory WorkOrderAsset.fromJson(Map<String, dynamic> json) {
return WorkOrderAsset( return WorkOrderAsset(
@ -263,8 +273,7 @@ class WorkOrderAsset {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"id": id, "id": id,
"assetNumber": assetNumber, "assetNumber": assetNumber,
}; };
@ -276,8 +285,8 @@ class AssetGroup {
required this.name, required this.name,
}); });
int? id; int? id;
String? name; String? name;
factory AssetGroup.fromJson(Map<String, dynamic> json) { factory AssetGroup.fromJson(Map<String, dynamic> json) {
return AssetGroup( return AssetGroup(
@ -286,8 +295,7 @@ class AssetGroup {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"id": id, "id": id,
"name": name, "name": name,
}; };
@ -301,10 +309,10 @@ class AssignedEmployee {
required this.languageId, required this.languageId,
}); });
dynamic userId; dynamic userId;
String? userName; String? userName;
String? email; String? email;
int? languageId; int? languageId;
factory AssignedEmployee.fromJson(Map<String, dynamic> json) { factory AssignedEmployee.fromJson(Map<String, dynamic> json) {
return AssignedEmployee( return AssignedEmployee(
@ -315,8 +323,7 @@ class AssignedEmployee {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"userId": userId, "userId": userId,
"userName": userName, "userName": userName,
"email": email, "email": email,
@ -330,8 +337,8 @@ class Site {
required this.siteName, required this.siteName,
}); });
int? id; int? id;
String? siteName; String? siteName;
factory Site.fromJson(Map<String, dynamic> json) { factory Site.fromJson(Map<String, dynamic> json) {
return Site( return Site(
@ -340,8 +347,7 @@ class Site {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"id": id, "id": id,
"siteName": siteName, "siteName": siteName,
}; };
@ -359,14 +365,14 @@ class WorkOrderContactPerson {
required this.contactUser, required this.contactUser,
}); });
int? id; int? id;
String? name; String? name;
String? employeeId; String? employeeId;
String? position; String? position;
dynamic extension; dynamic extension;
String? email; String? email;
dynamic mobilePhone; dynamic mobilePhone;
AssignedEmployee? contactUser; AssignedEmployee? contactUser;
factory WorkOrderContactPerson.fromJson(Map<String, dynamic> json) { factory WorkOrderContactPerson.fromJson(Map<String, dynamic> json) {
return WorkOrderContactPerson( return WorkOrderContactPerson(
@ -381,8 +387,7 @@ class WorkOrderContactPerson {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"id": id, "id": id,
"name": name, "name": name,
"employeeId": employeeId, "employeeId": employeeId,
@ -409,17 +414,17 @@ class WorkOrderHistory {
required this.needAVisitDateTime, required this.needAVisitDateTime,
}); });
int? id; int? id;
Lookup? workorderStatus; Lookup? workorderStatus;
dynamic activityStatus; dynamic activityStatus;
DateTime? date; DateTime? date;
AssignedEmployee? user; AssignedEmployee? user;
Lookup? step; Lookup? step;
DateTime? fixRemotlyStartTime; DateTime? fixRemotlyStartTime;
DateTime? fixRemotlyEndTime; DateTime? fixRemotlyEndTime;
num? fixRemotlyWorkingHours; num? fixRemotlyWorkingHours;
String? comments; String? comments;
DateTime? needAVisitDateTime; DateTime? needAVisitDateTime;
factory WorkOrderHistory.fromJson(Map<String, dynamic> json) { factory WorkOrderHistory.fromJson(Map<String, dynamic> json) {
return WorkOrderHistory( return WorkOrderHistory(
@ -437,8 +442,7 @@ class WorkOrderHistory {
); );
} }
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"id": id, "id": id,
"workorderStatus": workorderStatus?.toJson(), "workorderStatus": workorderStatus?.toJson(),
"activityStatus": activityStatus, "activityStatus": activityStatus,

@ -13,6 +13,7 @@ class AppColor {
static const Color primary70 = Color(0xff163A51); static const Color primary70 = Color(0xff163A51);
static const Color primary80 = Color(0xff161D27); static const Color primary80 = Color(0xff161D27);
static const Color primary90 = Color(0xff1E95DE); static const Color primary90 = Color(0xff1E95DE);
static const Color primary63 = Color(0xff63A4D1);
//texts //texts
static const Color neutral10 = Color(0xffBCBCBC); static const Color neutral10 = Color(0xffBCBCBC);
@ -31,7 +32,6 @@ class AppColor {
static const Color neutral140 = Color(0xffE6E6E6); static const Color neutral140 = Color(0xffE6E6E6);
static const Color neutral150 = Color(0xffA1A1A1); static const Color neutral150 = Color(0xffA1A1A1);
//background //background
static const Color backgroundLight = Color(0xfff7f9fb); static const Color backgroundLight = Color(0xfff7f9fb);
static const Color backgroundDark = Color(0xff111427); static const Color backgroundDark = Color(0xff111427);
@ -45,10 +45,12 @@ class AppColor {
static const Color white60 = Color(0xffEFEFEF); static const Color white60 = Color(0xffEFEFEF);
static const Color white70 = Color(0xffF1F1F1); static const Color white70 = Color(0xffF1F1F1);
static const Color white936 = Color(0xff212936); static const Color white936 = Color(0xff212936);
//black //black
static const Color black10 = Color(0xff3B3D4A); static const Color black10 = Color(0xff3B3D4A);
static const Color black20 = Color(0xff212936); static const Color black20 = Color(0xff212936);
static const Color black35 = Color(0xff222A36); static const Color black35 = Color(0xff222A36);
static const Color black1E = Color(0xff1E1F20);
//red //red
static const Color red30 = Color(0xffF63939); static const Color red30 = Color(0xffF63939);
@ -62,7 +64,7 @@ class AppColor {
static const Color green50 = Color(0xff62BE96); static const Color green50 = Color(0xff62BE96);
static const Color green60 = Color(0xff065E38); static const Color green60 = Color(0xff065E38);
static const Color green70 = Color(0xff54C166); static const Color green70 = Color(0xff54C166);
static const Color green15 = Color(0xff157D14);
//orange //orange
static const Color orange30 = Color(0xffFDE19B); static const Color orange30 = Color(0xffFDE19B);
@ -81,6 +83,7 @@ class AppColor {
// static Color yellowStatus(BuildContext context) => context.isDark ? const Color(0xffFFDA76) : orange40; // static Color yellowStatus(BuildContext context) => context.isDark ? const Color(0xffFFDA76) : orange40;
static Color yellowStatus(BuildContext context) => context.isDark ? const Color(0xffFFC945) : orange30; static Color yellowStatus(BuildContext context) => context.isDark ? const Color(0xffFFC945) : orange30;
static Color yellowIcon(BuildContext context) => context.isDark ? const Color(0xffFFC945) : orange70; static Color yellowIcon(BuildContext context) => context.isDark ? const Color(0xffFFC945) : orange70;
static Color background(BuildContext context) => context.isDark ? neutral60 : Colors.white; static Color background(BuildContext context) => context.isDark ? neutral60 : Colors.white;
@ -102,6 +105,40 @@ class AppColor {
} }
} }
static Color getHistoryLogStatusTextColorByName(String status) {
switch ((status).toLowerCase()) {
case "in progress":
return white936;
case "new":
return primary63;
case "closed":
return black1E;
case "completed":
return green15;
case "fixed":
return green15;
default:
return Colors.white;
}
}
static Color getHistoryLogStatusColorByName(String status) {
switch ((status).toLowerCase()) {
case "in progress":
return orange30;
case "new":
return primary10.withOpacity(.30);
case "closed":
return white936.withOpacity(.30);
case "completed":
return green70.withOpacity(.5);
case "fixed":
return green70.withOpacity(.5);
default:
return Colors.white;
}
}
static Color getRequestStatusColorByName(BuildContext context, String? status) { static Color getRequestStatusColorByName(BuildContext context, String? status) {
switch ((status ?? "").toLowerCase()) { switch ((status ?? "").toLowerCase()) {
case "medium": case "medium":
@ -165,7 +202,7 @@ class AppColor {
case 81: case 81:
return Colors.white; return Colors.white;
case 82: case 82:
//high priority //high priority
return white10; return white10;
default: default:
return blueStatus(context); return blueStatus(context);
@ -174,10 +211,10 @@ class AppColor {
static Color getPriorityStatusColor(BuildContext context, int id) { static Color getPriorityStatusColor(BuildContext context, int id) {
switch (id) { switch (id) {
//low priority //low priority
case 81: case 81:
return greenStatus(context); return greenStatus(context);
//high priority //high priority
case 82: case 82:
return redStatus(context); return redStatus(context);
default: default:

@ -5,6 +5,7 @@ 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/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -28,6 +29,7 @@ class HistoryLogView extends StatelessWidget {
]; ];
return Consumer<RequestDetailProvider>(builder: (context, requestProvider, _) { return Consumer<RequestDetailProvider>(builder: (context, requestProvider, _) {
String status = "";
return requestProvider.isLoading return requestProvider.isLoading
? const CircularProgressIndicator(color: AppColor.primary10).center ? const CircularProgressIndicator(color: AppColor.primary10).center
: (requestProvider.currentWorkOrder == null || (requestProvider.currentWorkOrder?.data?.workOrderHistory.isEmpty ?? true) : (requestProvider.currentWorkOrder == null || (requestProvider.currentWorkOrder?.data?.workOrderHistory.isEmpty ?? true)
@ -44,58 +46,66 @@ class HistoryLogView extends StatelessWidget {
endIndent: 10, endIndent: 10,
), ),
), ),
ListView.builder( Builder(builder: (cxt) {
itemCount: dummyList.length, List<Widget> items = [];
padding: EdgeInsets.zero, String lastStatus = "";
itemBuilder: (context, index) { for (var object in requestProvider.currentWorkOrder!.data!.workOrderHistory) {
return historyLogCard(context: context, historyLogModel: dummyList[index]); String currentStatus = object.workorderStatus!.name!;
}, if (lastStatus.isEmpty) {
), lastStatus = currentStatus;
}
if (lastStatus == currentStatus) {
items.add(historyLogCard(cxt, object));
} else {
items.add(statusCard(cxt, lastStatus));
lastStatus = currentStatus;
items.add(historyLogCard(cxt, object));
}
}
items.add(statusCard(cxt, lastStatus));
return SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(children: items),
);
}),
], ],
)); ));
}); });
} }
Widget historyLogCard({required BuildContext context, required HistoryLogModel historyLogModel}) { Widget historyLogCard(BuildContext context, WorkOrderHistory object) {
return Column( return Row(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
historyLogModel.status != null Align(
? Padding( alignment: Alignment.centerLeft,
padding: EdgeInsets.only(top: 16.toScreenHeight, bottom: 16.toScreenHeight, right: 89.toScreenWidth), child: Text(
child: StatusLabel( object.date.toString().toServiceRequestCardFormat,
radius: 4, textAlign: TextAlign.end,
label: historyLogModel.status, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120),
textColor: AppColor.getRequestStatusTextColorByName(context, historyLogModel.status!),
backgroundColor: AppColor.getRequestStatusColorByName(context, historyLogModel.status!),
),
)
: 12.height,
Container(
width: double.infinity,
padding: EdgeInsets.only(left: 12.toScreenWidth, bottom: 16.toScreenHeight, top: 12.toScreenHeight),
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
historyLogModel.date.toString().toServiceRequestCardFormat,
textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120),
),
50.width,
Expanded(
child: historyLogModel.message.bodyText(context).custom(color: AppColor.black10),
),
],
),
],
), ),
).toShadowContainer(context), ).expanded,
Expanded(
flex: 2,
child: object.step!.name!.bodyText(context).custom(color: AppColor.black10),
),
], ],
); ).toShadowContainer(context, padding: 16).paddingOnly(bottom: 16);
}
Widget statusCard(BuildContext context, String status) {
return SizedBox(
width: 153.toScreenWidth,
child: StatusLabel(
radius: 4,
label: status,
labelInCenter: true,
textColor: AppColor.getHistoryLogStatusTextColorByName(status),
backgroundColor: AppColor.getHistoryLogStatusColorByName(status),
),
).paddingOnly(bottom: 16, start: 40);
} }
} }

@ -9,8 +9,9 @@ class StatusLabel extends StatelessWidget {
final Color? textColor; final Color? textColor;
final bool isPriority; final bool isPriority;
final double radius; final double radius;
final bool labelInCenter;
StatusLabel({Key? key, this.id = 0, this.label, this.backgroundColor, this.textColor, this.isPriority = false, this.radius = 4}) : super(key: key); StatusLabel({Key? key, this.id = 0, this.label, this.backgroundColor, this.textColor, this.isPriority = false, this.radius = 4,this.labelInCenter=false}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -26,6 +27,7 @@ class StatusLabel extends StatelessWidget {
return Container( return Container(
padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 10), padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 10),
alignment: labelInCenter ? Alignment.center: null,
decoration: ShapeDecoration( decoration: ShapeDecoration(
color: backgroundColor, color: backgroundColor,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
@ -35,77 +37,4 @@ class StatusLabel extends StatelessWidget {
child: Text(label ?? "", style: AppTextStyles.overline.copyWith(color: textColor)), child: Text(label ?? "", style: AppTextStyles.overline.copyWith(color: textColor)),
); );
} }
// Color getRequestStatusColor1(String status) {
// switch (status) {
// case "in progress":
// return AColors.statusYellowLight;
// case "completed":
// return AColors.statusGreenLight;
// case "high priority":
// return AColors.statusRedLight;
// case "low priority":
// return AColors.statusGreenLight;
// case "open":
// return AColors.statusBlue;
// default:
// return AColors.statusDefault;
// }
// }
//
// Color getRequestStatusTextColor(String status) {
// switch (status) {
// case "in progress":
// return AColors.statusYellow;
// case "completed":
// return AColors.statusGreen;
// case "high priority":
// return AColors.statusRed;
// case "low priority":
// return AColors.statusGreen;
// case "open":
// return AColors.statusBlue;
// default:
// return Colors.white;
// }
// }
//
// static Color getRequestStatusColor(int id) {
// switch (id) {
// case 4:
// return AColors.deepRed;
// case 6:
// return AColors.green;
// case 5:
// return AColors.orange;
// case 8:
// return AColors.green;
// case 9:
// return AColors.orange;
// default:
// return AColors.grey;
// }
// }
//
// static Color getGasStatusColor(int id) {
// switch (id) {
// case 0:
// return AColors.orange;
// case 1:
// return AColors.green;
// default:
// return AColors.grey;
// }
// }
//
// static Color getPriorityStatusColor(int id) {
// switch (id) {
// case 0:
// return AColors.orange;
// case 1:
// return AColors.green;
// default:
// return AColors.grey;
// }
// }
} }

Loading…
Cancel
Save