spare part comment fix and improvement.

design_3.0_latest
Sikander Saleem 1 year ago
parent 701455d939
commit e1aaa71ae7

@ -403,12 +403,14 @@ class ActivitySparePart {
int? id; int? id;
PartCatalogItem? partCatalogItem; PartCatalogItem? partCatalogItem;
double? quantity; double? quantity;
String? comment;
List<SparePartAttachments>? acitiySparePartAttachments; List<SparePartAttachments>? acitiySparePartAttachments;
ActivitySparePart( ActivitySparePart(
{this.id, {this.id,
this.partCatalogItem, this.partCatalogItem,
this.quantity, this.quantity,
this.comment,
this.acitiySparePartAttachments}); this.acitiySparePartAttachments});
ActivitySparePart.fromJson(Map<String, dynamic> json) { ActivitySparePart.fromJson(Map<String, dynamic> json) {
@ -417,6 +419,7 @@ class ActivitySparePart {
? new PartCatalogItem.fromJson(json['partCatalogItem']) ? new PartCatalogItem.fromJson(json['partCatalogItem'])
: null; : null;
quantity = json['quantity']; quantity = json['quantity'];
comment = json['comment'];
if (json['acitiySparePartAttachments'] != null) { if (json['acitiySparePartAttachments'] != null) {
acitiySparePartAttachments = <SparePartAttachments>[]; acitiySparePartAttachments = <SparePartAttachments>[];
json['acitiySparePartAttachments'].forEach((v) { json['acitiySparePartAttachments'].forEach((v) {
@ -432,6 +435,7 @@ class ActivitySparePart {
data['partCatalogItem'] = partCatalogItem!.toJson(); data['partCatalogItem'] = partCatalogItem!.toJson();
} }
data['quantity'] = quantity; data['quantity'] = quantity;
data['comment'] = comment;
if (acitiySparePartAttachments != null) { if (acitiySparePartAttachments != null) {
data['acitiySparePartAttachments'] = data['acitiySparePartAttachments'] =
acitiySparePartAttachments!.map((v) => v.toJson()).toList(); acitiySparePartAttachments!.map((v) => v.toJson()).toList();

@ -1,19 +1,14 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart'; import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart';
import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/service_request/spare_parts.dart'; import 'package:test_sa/models/service_request/spare_parts.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/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
@ -23,8 +18,7 @@ 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/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/pages/user/requests/work_order/update_service_report.dart'; import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
@ -52,99 +46,107 @@ class ActivitiesListView extends StatelessWidget {
itemCount: activities.length, itemCount: activities.length,
separatorBuilder: (czt, index) => 8.height, separatorBuilder: (czt, index) => 8.height,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Row( return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Column( Row(
mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( StatusLabel(
mainAxisAlignment: MainAxisAlignment.spaceBetween, label: activities[index].activityStatus?.name,
children: [ textColor: AppColor.getHistoryLogStatusTextColorByName(activities[index].activityStatus!.name!),
StatusLabel( backgroundColor: AppColor.getHistoryLogStatusColorByName(activities[index].activityStatus!.name!),
label: activities[index].activityStatus?.name,
textColor: AppColor.getRequestStatusTextColorByName(context, activities[index].activityStatus?.name),
backgroundColor: AppColor.getRequestStatusColorByName(context, activities[index].activityStatus?.name),
),
"drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160),
if (userProvider.user!.type == UsersTypes.engineer &&
requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 &&
requestDetailProvider.currentWorkOrder?.data?.status?.value != 3)
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
print('attachments in activity model is ${activities[index].activitySparePart?.acitiySparePartAttachments}');
requestDetailProvider.sparePartHelperModel=SparePartHelperModel(
id: activities[index].id,
workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId,
sparePartAttachments:activities[index].activitySparePart?.acitiySparePartAttachments??[],
sparePart:SparePart(
id: activities[index].activitySparePart?.partCatalogItem?.id,
partName: activities[index].activitySparePart?.partCatalogItem?.partName,
partNo: activities[index].activitySparePart?.partCatalogItem?.partNumber),
quantity: activities[index].activitySparePart?.quantity,
activityStatusId: activities[index].activityStatus?.id,
//TODO commets are missing in api response..
// comment: activities[index].activitySparePart?.description,
);
requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel);
print('model in activity page is ${requestDetailProvider.sparePartHelperModel?.toJson()}');
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const SparePartRequest (),
));
}),
24.width,
"delete_icon".toSvgAsset(height: 21, width: 21).onPress(()async {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
int status = await requestDetailProvider.deleteActivitySparePart(id: activities[index].id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!);
if (status == 200) {
await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
Navigator.pop(context);
} else {
Navigator.pop(context);
}
}),
],
)
],
),
6.height,
//activity type...
Text(
'${activities[index].activityType?.cleanupWhitespace.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
),
3.height,
Text(
'${context.translation.partName}: ${activities[index].activitySparePart?.partCatalogItem?.partName}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
2.height, "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160),
Text( if (userProvider.user!.type == UsersTypes.engineer &&
'${context.translation.partNo}: ${activities[index].activitySparePart?.partCatalogItem?.partNumber}', requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 &&
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), requestDetailProvider.currentWorkOrder?.data?.status?.value != 3)
), Row(
2.height, crossAxisAlignment: CrossAxisAlignment.start,
//TODO description text not in api. mainAxisAlignment: MainAxisAlignment.spaceBetween,
// Text( children: [
// '${context.translation.date}: ${activities[index].currentSituation?.date}', "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
// style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), requestDetailProvider.sparePartHelperModel = SparePartHelperModel(
// ), id: activities[index].id,
2.height, workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId,
comment: activities[index].activitySparePart?.comment,
sparePartAttachments: activities[index].activitySparePart?.acitiySparePartAttachments ?? [],
sparePart: SparePart(
id: activities[index].activitySparePart?.partCatalogItem?.id,
partName: activities[index].activitySparePart?.partCatalogItem?.partName,
partNo: activities[index].activitySparePart?.partCatalogItem?.partNumber),
quantity: activities[index].activitySparePart?.quantity,
activityStatusId: activities[index].activityStatus?.id,
//TODO commets are missing in api response..
// comment: activities[index].activitySparePart?.description,
);
requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel);
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => const SparePartRequest(),
));
}),
24.width,
"delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async {
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
int status =
await requestDetailProvider.deleteActivitySparePart(id: activities[index].id!, workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!);
if (status == 200) {
await requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!);
Navigator.pop(context);
} else {
Navigator.pop(context);
}
}),
],
)
], ],
).onPress(() { ),
//TODO write onview detail method.. 6.height,
// Navigator.push( //activity type...
// context, Text(
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activities[index], serviceRequest: ServiceRequest())), '${activities[index].activityType?.cleanupWhitespace.capitalizeFirstOfEach}',
// ); style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
}).expanded, ),
3.height,
Text(
'${context.translation.partName}: ${activities[index].activitySparePart?.partCatalogItem?.partName}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
2.height,
Text(
'${context.translation.partNo}: ${activities[index].activitySparePart?.partCatalogItem?.partNumber}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
2.height,
//TODO description text not in api.
// Text(
// '${context.translation.date}: ${activities[index].currentSituation?.date}',
// style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
// ),
if (activities[index].activitySparePart?.comment?.isNotEmpty ?? false) ...[
const Divider().defaultStyle(context),
2.height,
Text(
activities[index].activitySparePart?.comment ?? "",
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
],
if (activities[index].activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[
2.height,
const Divider().defaultStyle(context),
FilesList(images: activities[index].activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()),
],
], ],
).toShadowContainer(context); ).toShadowContainer(context, padding: 12).onPress(() {
//TODO write onview detail method..
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activities[index], serviceRequest: ServiceRequest())),
// );
});
}, },
).expanded, ).expanded,
if (userProvider.user!.type == UsersTypes.engineer && if (userProvider.user!.type == UsersTypes.engineer &&

@ -187,6 +187,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
buttonIcon: 'quotation_icon'.toSvgAsset(), buttonIcon: 'quotation_icon'.toSvgAsset(),
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
onChange: (List<MultiFilesPickerModel> list) { onChange: (List<MultiFilesPickerModel> list) {
for (var element in list) { for (var element in list) {
print('path is ${element.file.path}'); print('path is ${element.file.path}');
} }

@ -18,7 +18,7 @@ class FilesList extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GridView.builder( return GridView.builder(
padding: const EdgeInsets.only(top: 16, bottom: 16), padding: const EdgeInsets.only(top: 8, bottom: 8),
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 6, mainAxisSpacing: 8, crossAxisSpacing: 8), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 6, mainAxisSpacing: 8, crossAxisSpacing: 8),

Loading…
Cancel
Save