Merge remote-tracking branch 'origin/design_3.0_sdk_upgrade' into design_3.0_sdk_upgrade

# Conflicts:
#	lib/models/new_models/work_order_detail_model.dart
design_3.0_latest
muhammad.abbasi 1 year ago
commit 0dd4a0f254

@ -86,6 +86,7 @@ class WorkOrderData {
required this.activities,
required this.activityAssetToBeRetireds,
});
int? requestId;
String? workOrderNo;
WorkOrderAssignedEmployee? workOrderCreatedBy;
@ -331,7 +332,7 @@ class Activities {
Lookup? activityStatus;
ActivityMaintenance? activityMaintenance;
ActivitySparePart? activitySparePart;
String ?activityType;
String? activityType;
Activities(
{this.id,
@ -601,6 +602,7 @@ class ActivityMaintenance {
int? id;
ActivityStatus? activityStatus;
String? startTime;
Lookup? lastSituation;
String? endTime;
double? workingHours;
double? travelHours;
@ -616,20 +618,21 @@ class ActivityMaintenance {
ActivityMaintenance(
{this.id,
this.activityStatus,
this.startTime,
this.endTime,
this.workingHours,
this.travelHours,
this.repairLocation,
this.assignedEmployee,
this.technicalComment,
this.supplier,
this.supplierEngineer,
this.supplierStartTime,
this.supplierEndTime,
this.supplierWorkingHours,
this.assistantEmployees});
this.activityStatus,
this.lastSituation,
this.startTime,
this.endTime,
this.workingHours,
this.travelHours,
this.repairLocation,
this.assignedEmployee,
this.technicalComment,
this.supplier,
this.supplierEngineer,
this.supplierStartTime,
this.supplierEndTime,
this.supplierWorkingHours,
this.assistantEmployees});
ActivityMaintenance.fromJson(Map<String, dynamic> json) {
print('activity status i got is ${json['activityStatus']}');
@ -641,6 +644,7 @@ class ActivityMaintenance {
endTime = json['endTime'];
workingHours = json['workingHours'];
travelHours = json['travelHours'];
lastSituation = json['lastSituation'] != null ? Lookup.fromJson(json['lastSituation']) : null;
repairLocation = json['repairLocation'] != null
? Lookup.fromJson(json['repairLocation'])
: null;
@ -691,7 +695,6 @@ class ActivityMaintenance {
}
}
class RepairLocation {
int? id;
String? name;

@ -1,24 +1,20 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_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';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/main.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/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart';
import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/activities_list_view.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/verify_arrival_view.dart';
import 'package:test_sa/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart';
import 'package:test_sa/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart';
class FooterActionButton {
static Widget footerContainer({required Widget child}) {
@ -146,7 +142,7 @@ class FooterActionButton {
buttonColor: AppColor.neutral50,
onPressed: () async {
// ServiceRequestBottomSheet.activityTypeBottomSheet(context: context);
Navigator.push(context, MaterialPageRoute(builder: (context)=>const ActivitiesListView()));
Navigator.push(context, MaterialPageRoute(builder: (context) => const ActivitiesListView()));
},
),
8.height,

@ -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';
@ -27,44 +28,108 @@ 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/requests/request_status.dart';
class ActivitiesListView extends StatelessWidget {
class ActivitiesListView extends StatefulWidget {
static const String id = "/activities-list";
const ActivitiesListView({Key? key}) : super(key: key);
@override
_ActivitiesListViewState createState() {
return _ActivitiesListViewState();
}
}
class _ActivitiesListViewState extends State<ActivitiesListView> {
bool showReorderView = false;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
List<Activities> reOrderActivities = [];
@override
Widget build(BuildContext context) {
//TODO add the check for type of activity after completing maintenance activity flow.
List<Activities> activities = [];
UserProvider userProvider = Provider.of<UserProvider>(context);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.activities),
appBar: DefaultAppBar(
title: context.translation.activities,
actions: [if (!showReorderView) IconButton(onPressed: () => setState(() => showReorderView = true), icon: const Icon(Icons.reorder_rounded))],
),
//backgroundColor: const Color(0xfff8f9fb),
body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) {
activities = requestDetailProvider.currentWorkOrder!.data!.activities;
if (showReorderView && reOrderActivities.isEmpty) {
reOrderActivities = requestDetailProvider.currentWorkOrder!.data!.activities;
} else {
activities = requestDetailProvider.currentWorkOrder!.data!.activities;
}
return Column(
children: [
(activities.isEmpty)
(activities.isEmpty && reOrderActivities.isEmpty)
? NoDataFound(message: context.translation.noDataFound).expanded
: ListView.separated(
padding: const EdgeInsets.all(16),
itemCount: activities.length,
separatorBuilder: (czt, index) => 16.height,
itemBuilder: (context, index) {
if (activities[index].activityMaintenance != null) {
return maintenanceActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]);
}
return sparePartActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]);
},
).expanded,
: showReorderView
? ReorderableListView(
padding: const EdgeInsets.all(16),
children: [
for (int index = 0; index < reOrderActivities.length; index++)
if (reOrderActivities[index].activityMaintenance != null)
ReorderWidget(
key: ValueKey(index),
child: maintenanceActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: reOrderActivities[index])
.paddingOnly(top: 8, bottom: 8),
)
else
ReorderWidget(
key: ValueKey(index),
child: sparePartActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: reOrderActivities[index])
.paddingOnly(top: 8, bottom: 8),
)
],
onReorder: (oldIndex, newIndex) {
setState(() {
if (oldIndex < newIndex) {
newIndex -= 1;
}
final Activities item = reOrderActivities.removeAt(oldIndex);
reOrderActivities.insert(newIndex, item);
});
}).expanded
: ListView.separated(
padding: const EdgeInsets.all(16),
itemCount: activities.length,
separatorBuilder: (czt, index) => 16.height,
itemBuilder: (context, index) {
if (activities[index].activityMaintenance != null) {
return maintenanceActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index])
.paddingOnly(top: 8, bottom: 8);
}
return sparePartActivityCard(requestDetailProvider: requestDetailProvider, userProvider: userProvider, context: context, activity: activities[index]);
},
).expanded,
if (userProvider.user!.type == UsersTypes.engineer &&
(requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3))
FooterActionButton.footerContainer(
child: AppFilledButton(
label: context.translation.createNewActivity,
label: showReorderView ? "Confirm Order".addTranslation : context.translation.createNewActivity,
maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
if (showReorderView) {
requestDetailProvider.currentWorkOrder!.data!.activities = reOrderActivities;
reOrderActivities = [];
showReorderView = false;
setState(() {});
return;
}
ServiceRequestBottomSheet.activityTypeBottomSheet(context: context);
},
))
@ -220,7 +285,7 @@ class ActivitiesListView extends StatelessWidget {
),
3.height,
Text(
'${context.translation.partName}: ${activity.activitySparePart?.partCatalogItem?.partName}',
'${context.translation.callLastSituation}: ${activity.activityMaintenance?.lastSituation?.name}',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
),
2.height,
@ -317,3 +382,18 @@ class ActivitiesListView extends StatelessWidget {
));
}
}
class ReorderWidget extends StatelessWidget {
final Widget child;
final Key key;
const ReorderWidget({required this.key, required this.child}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox(
key: key,
child: child,
);
}
}

Loading…
Cancel
Save