|
|
|
|
@ -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,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|