add maintenance request completed

design_3.0_latest
muhammad.abbasi 1 year ago
parent 0b72f0b219
commit c2f4722bb3

@ -6,6 +6,7 @@ import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart';
import 'package:test_sa/models/service_request/supplier_details.dart'; import 'package:test_sa/models/service_request/supplier_details.dart';
class ActivityMaintenanceHelperModel { class ActivityMaintenanceHelperModel {
int? id;
int? workOrderId; int? workOrderId;
int? lastSituationId; int? lastSituationId;
Lookup? activityStatus; Lookup? activityStatus;
@ -29,7 +30,8 @@ class ActivityMaintenanceHelperModel {
List<AssistantEmployees>? assistantEmployees; List<AssistantEmployees>? assistantEmployees;
ActivityMaintenanceHelperModel( ActivityMaintenanceHelperModel(
{this.workOrderId, {this.id,
this.workOrderId,
this.lastSituationId, this.lastSituationId,
this.startTime, this.startTime,
this.supplier, this.supplier,
@ -52,6 +54,7 @@ class ActivityMaintenanceHelperModel {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['workOrderId'] = workOrderId; data['workOrderId'] = workOrderId;
data['lastSituationId'] = lastSituationId; data['lastSituationId'] = lastSituationId;
data['activityStatusId'] = activityStatus?.id; data['activityStatusId'] = activityStatus?.id;

@ -603,6 +603,7 @@ class RequestDetailProvider extends ChangeNotifier {
currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body));
updateCurrentWorkOrder(currentWorkOrder); updateCurrentWorkOrder(currentWorkOrder);
notifyListeners(); notifyListeners();
return response.statusCode;
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();

@ -17,6 +17,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.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/service_request_latest/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart'; import 'package:test_sa/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart';
import 'package:test_sa/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart';
import 'package:test_sa/service_request_latest/views/forms/spare_part/spare_part_request.dart'; import 'package:test_sa/service_request_latest/views/forms/spare_part/spare_part_request.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/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -46,8 +47,8 @@ class ActivitiesListView extends StatelessWidget {
itemCount: activities.length, itemCount: activities.length,
separatorBuilder: (czt, index) => 16.height, separatorBuilder: (czt, index) => 16.height,
itemBuilder: (context, index) { itemBuilder: (context, index) {
if(activities[index].activityMaintenance!=null){ if (activities[index].activityMaintenance != null) {
return maintenanceActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]); return maintenanceActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]);
} }
return sparePartActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]); return sparePartActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]);
}, },
@ -69,210 +70,205 @@ class ActivitiesListView extends StatelessWidget {
); );
} }
Widget sparePartActivityCard({required RequestDetailProvider requestDetailProvider,required UserProvider userProvider,required BuildContext context,required Activities activity}){ Widget sparePartActivityCard({required RequestDetailProvider requestDetailProvider, required UserProvider userProvider, required BuildContext context, required Activities activity}) {
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
StatusLabel( StatusLabel(
label: activity.activityStatus?.name, label: activity.activityStatus?.name,
textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!),
backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!),
), ),
"drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160),
if (userProvider.user!.type == UsersTypes.engineer && if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3)
requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && Row(
requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) crossAxisAlignment: CrossAxisAlignment.start,
Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start, children: [
mainAxisAlignment: MainAxisAlignment.spaceBetween, "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
children: [ requestDetailProvider.sparePartHelperModel = SparePartHelperModel(
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { id: activity.id,
requestDetailProvider.sparePartHelperModel = SparePartHelperModel( workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId,
id: activity.id, comment: activity.activitySparePart?.comment,
workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [],
comment: activity.activitySparePart?.comment, sparePart: SparePart(
sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], id: activity.activitySparePart?.partCatalogItem?.id,
sparePart: SparePart( partName: activity.activitySparePart?.partCatalogItem?.partName,
id: activity.activitySparePart?.partCatalogItem?.id, partNo: activity.activitySparePart?.partCatalogItem?.partNumber),
partName: activity.activitySparePart?.partCatalogItem?.partName, quantity: activity.activitySparePart?.quantity,
partNo: activity.activitySparePart?.partCatalogItem?.partNumber), activityStatusId: activity.activityStatus?.id,
quantity: activity.activitySparePart?.quantity,
activityStatusId: activity.activityStatus?.id,
//TODO commets are missing in api response.. //TODO commets are missing in api response..
// comment: activity.activitySparePart?.description, // comment: activity.activitySparePart?.description,
); );
requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel); requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel);
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (_) => const SparePartRequest(), builder: (_) => const SparePartRequest(),
)); ));
}), }),
24.width, 24.width,
"delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
int status = int status = await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!);
await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); if (status == 200) {
if (status == 200) { await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); Navigator.pop(context);
Navigator.pop(context); } else {
} else { Navigator.pop(context);
Navigator.pop(context); }
} }),
}), ],
], )
) ],
], ),
), 6.height,
6.height,
//activity type... //activity type...
Text( Text(
'${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}', '${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
), ),
3.height, 3.height,
Text( Text(
'${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}', '${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
2.height, 2.height,
Text( Text(
'${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}', '${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
2.height, 2.height,
//TODO description text not in api. //TODO description text not in api.
// Text( // Text(
// '${context.translation.date}: ${activity.currentSituation?.date}', // '${context.translation.date}: ${activity.currentSituation?.date}',
// style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), // style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
// ), // ),
if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[ if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
2.height, 2.height,
Text( Text(
activity.activitySparePart?.comment ?? "", activity.activitySparePart?.comment ?? "",
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
], ],
if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[ if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[
2.height, 2.height,
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()),
], ],
], ],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { ).toShadowContainer(context, padding: 12, showShadow: false).onPress(() {
//TODO write onview detail method.. //TODO write onview detail method..
// Navigator.push( // Navigator.push(
// context, // context,
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())), // MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())),
// ); // );
}); });
} }
Widget maintenanceActivityCard({required RequestDetailProvider requestDetailProvider,required UserProvider userProvider,required BuildContext context,required Activities activity}){
Widget maintenanceActivityCard({required RequestDetailProvider requestDetailProvider, required UserProvider userProvider, required BuildContext context, required Activities activity}) {
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
StatusLabel( StatusLabel(
label: activity.activityStatus?.name, label: activity.activityStatus?.name,
textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!),
backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!), backgroundColor: AppColor.getHistoryLogStatusColorByName(activity.activityStatus!.name!),
), ),
"drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160),
if (userProvider.user!.type == UsersTypes.engineer && if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3)
requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && Row(
requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) crossAxisAlignment: CrossAxisAlignment.start,
Row( mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start, children: [
mainAxisAlignment: MainAxisAlignment.spaceBetween, "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
children: [ requestDetailProvider.sparePartHelperModel = SparePartHelperModel(
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { id: activity.id,
requestDetailProvider.sparePartHelperModel = SparePartHelperModel( workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId,
id: activity.id, comment: activity.activitySparePart?.comment,
workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [],
comment: activity.activitySparePart?.comment, sparePart: SparePart(
sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], id: activity.activitySparePart?.partCatalogItem?.id,
sparePart: SparePart( partName: activity.activitySparePart?.partCatalogItem?.partName,
id: activity.activitySparePart?.partCatalogItem?.id, partNo: activity.activitySparePart?.partCatalogItem?.partNumber),
partName: activity.activitySparePart?.partCatalogItem?.partName, quantity: activity.activitySparePart?.quantity,
partNo: activity.activitySparePart?.partCatalogItem?.partNumber), activityStatusId: activity.activityStatus?.id,
quantity: activity.activitySparePart?.quantity,
activityStatusId: activity.activityStatus?.id,
//TODO commets are missing in api response.. //TODO commets are missing in api response..
// comment: activity.activitySparePart?.description, // comment: activity.activitySparePart?.description,
); );
requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel); requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel);
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (_) => const SparePartRequest(), builder: (_) => const MaintenanceRequestForm(),
)); ));
}), }),
24.width, 24.width,
"delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
int status = int status = await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!);
await requestDetailProvider.deleteActivitySparePart(id: activity.id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); if (status == 200) {
if (status == 200) { await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); Navigator.pop(context);
Navigator.pop(context); } else {
} else { Navigator.pop(context);
Navigator.pop(context); }
} }),
}), ],
], )
) ],
], ),
), 6.height,
6.height,
//activity type... //activity type...
Text( Text(
'${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}', '${activity.activityType?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
), ),
3.height, 3.height,
Text( Text(
'${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}', '${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
2.height, 2.height,
Text( Text(
'${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}', '${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
2.height, 2.height,
//TODO description text not in api. //TODO description text not in api.
// Text( // Text(
// '${context.translation.date}: ${activity.currentSituation?.date}', // '${context.translation.date}: ${activity.currentSituation?.date}',
// style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), // style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
// ), // ),
if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[ if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
2.height, 2.height,
Text( Text(
activity.activitySparePart?.comment ?? "", activity.activitySparePart?.comment ?? "",
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
], ],
if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[ if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[
2.height, 2.height,
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()),
], ],
], ],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { ).toShadowContainer(context, padding: 12, showShadow: false).onPress(() {
//TODO write onview detail method.. //TODO write onview detail method..
// Navigator.push( // Navigator.push(
// context, // context,
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())), // MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())),
// ); // );
}); });
} }
} }

@ -36,7 +36,12 @@ class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with Si
} }
Future<void> getInitialData() async { Future<void> getInitialData() async {
Provider.of<ServiceReportRepairLocationProvider>(context, listen: false).getTypes(); Provider.of<ServiceReportRepairLocationProvider>(context, listen: false).getTypes();
Provider.of<RequestDetailProvider>(context,listen: false).activityMaintenanceHelperModel?.modelAssistantEmployees = MaintenanceActivityAssistantEmployees(); RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context,listen: false);
requestDetailProvider.activityMaintenanceHelperModel = ActivityMaintenanceHelperModel(
);
requestDetailProvider.activityMaintenanceHelperModel?.modelAssistantEmployees = MaintenanceActivityAssistantEmployees();
} }
@ -105,6 +110,7 @@ class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with Si
int status = -1; int status = -1;
// if (requestDetailProvider.activityMaintenanceHelperModel?.id == 0) { // if (requestDetailProvider.activityMaintenanceHelperModel?.id == 0) {
status = await requestDetailProvider.createActivityMaintenanceRequest(); status = await requestDetailProvider.createActivityMaintenanceRequest();
print('status i got is $status');
// } else { // } else {
// //TODO update logic... // //TODO update logic...
// status = await requestDetailProvider.updateActivityMaintenance(); // status = await requestDetailProvider.updateActivityMaintenance();

Loading…
Cancel
Save