initial commit
parent
b5bfb3c0c0
commit
8a5478f37f
@ -0,0 +1,116 @@
|
|||||||
|
import 'package:flutter/material.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/models/all_requests_and_count_model.dart';
|
||||||
|
import 'package:test_sa/models/ppm/ppm.dart';
|
||||||
|
import 'package:test_sa/models/timer_model.dart';
|
||||||
|
import 'package:test_sa/new_views/app_style/app_color.dart';
|
||||||
|
import 'package:test_sa/service_request_latest/utilities/service_request_utils.dart';
|
||||||
|
import 'package:test_sa/views/widgets/requests/request_status.dart';
|
||||||
|
import 'package:test_sa/views/widgets/timer/app_timer.dart';
|
||||||
|
|
||||||
|
class AssetInfoWidget extends StatelessWidget {
|
||||||
|
DummyModel ?model;
|
||||||
|
AssetInfoWidget({super.key,DummyModel ?model});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
if (model?.request?.priority != null)
|
||||||
|
StatusLabel(
|
||||||
|
label: model?.request?.priority,
|
||||||
|
textColor: AppColor.getRequestStatusTextColorByName(context,model?.request?.priority),
|
||||||
|
backgroundColor: AppColor.getRequestStatusColorByName(context,model?.request?.priority),
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
|
||||||
|
model!.ppm!.assetName!.heading5(context),
|
||||||
|
8.height,
|
||||||
|
'${context.translation.taskNo}: ${model!.ppm!.assetName}'.bodyText(context),
|
||||||
|
'${context.translation.site}: ${model!.ppm!.siteName!.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context),
|
||||||
|
'${context.translation.assignEngineer}: ${model!.ppm!.assignedEmployeeName ?? ""}'.bodyText(context),
|
||||||
|
'${context.translation.scheduledDate}: ${'July 7, 2024' ?? ""}'.bodyText(context),
|
||||||
|
],
|
||||||
|
).toShadowContainer(context),
|
||||||
|
12.height,
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
buildingInfoWidget(label: context.translation.department, value: model!.ppm!.departmentName!.cleanupWhitespace.capitalizeFirstOfEach,context: context),
|
||||||
|
8.height,
|
||||||
|
buildingInfoWidget(label: context.translation.floor, value: model!.ppm!.floorName!.cleanupWhitespace.capitalizeFirstOfEach,context: context),
|
||||||
|
8.height,
|
||||||
|
buildingInfoWidget(label: context.translation.room, value: model!.ppm!.roomName!.cleanupWhitespace.capitalizeFirstOfEach,context: context),
|
||||||
|
8.height,
|
||||||
|
AppTimer(
|
||||||
|
label: context.translation.timer,
|
||||||
|
timer: model!.timerModel,
|
||||||
|
width:double.infinity,
|
||||||
|
enabled: model!.timerModel?.endAt == null,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppColor.neutral100,
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
timerProgress: (isRunning) {},
|
||||||
|
onChange: (timer) async {
|
||||||
|
timer = timer;
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
),
|
||||||
|
// if (totalWorkingHours > 0.0) ...[
|
||||||
|
11.height,
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"Total Working Time: ",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
" ${ServiceRequestUtils.formatTimerDuration(model!.totalWorkingHours.round())}",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
8.height,
|
||||||
|
],
|
||||||
|
// ],
|
||||||
|
).toShadowContainer(context,padding: 12),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget buildingInfoWidget({required String label, required String value, required BuildContext context}) {
|
||||||
|
return Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
label,
|
||||||
|
style: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.neutral120),
|
||||||
|
),
|
||||||
|
3.height,
|
||||||
|
Text(
|
||||||
|
value,
|
||||||
|
style: AppTextStyles.bodyText2.copyWith(color: AppColor.black10),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
).toShadowContainer(context, backgroundColor: AppColor.neutral100, borderRadius: 10, paddingObject: EdgeInsets.all(12.toScreenHeight), showShadow: false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DummyModel{
|
||||||
|
RequestsDetails? request;
|
||||||
|
Ppm? ppm;
|
||||||
|
TimerModel? timerModel = TimerModel();
|
||||||
|
double totalWorkingHours = 2;
|
||||||
|
|
||||||
|
DummyModel(this.request,this.ppm,this.timerModel,this.totalWorkingHours);
|
||||||
|
}
|
||||||
@ -0,0 +1,101 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:test_sa/controllers/providers/api/ppm_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/int_extensions.dart';
|
||||||
|
import 'package:test_sa/extensions/text_extensions.dart';
|
||||||
|
import 'package:test_sa/extensions/widget_extensions.dart';
|
||||||
|
import 'package:test_sa/models/all_requests_and_count_model.dart';
|
||||||
|
import 'package:test_sa/models/enums/user_types.dart';
|
||||||
|
import 'package:test_sa/models/ppm/ppm.dart';
|
||||||
|
import 'package:test_sa/models/timer_model.dart';
|
||||||
|
import 'package:test_sa/new_views/app_style/app_color.dart';
|
||||||
|
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
|
||||||
|
import 'package:test_sa/service_request_latest/utilities/service_request_utils.dart';
|
||||||
|
import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/asset_info_widget.dart';
|
||||||
|
import 'package:test_sa/views/widgets/loaders/app_loading.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/timer/app_timer.dart';
|
||||||
|
|
||||||
|
class RecurrentWorkOrderView extends StatefulWidget {
|
||||||
|
static const String id = "/visit-details";
|
||||||
|
final RequestsDetails request;
|
||||||
|
|
||||||
|
const RecurrentWorkOrderView({Key? key, required this.request}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_RecurrentWorkOrderViewState createState() {
|
||||||
|
return _RecurrentWorkOrderViewState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class _RecurrentWorkOrderViewState extends State<RecurrentWorkOrderView> {
|
||||||
|
UserProvider? userProvider;
|
||||||
|
TimerModel? timerModel = TimerModel();
|
||||||
|
PpmProvider? ppmProvider;
|
||||||
|
|
||||||
|
// double totalWorkingHours = _requestDetailProvider?.activityMaintenanceHelperModel?.activityMaintenanceTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endTime!).difference(DateTime.parse(item.startTime!)).inSeconds) ?? 0;
|
||||||
|
double totalWorkingHours = 2.0;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
userProvider ??= Provider.of<UserProvider>(context, listen: false);
|
||||||
|
ppmProvider ??= Provider.of<PpmProvider>(context, listen: false);
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
appBar: DefaultAppBar(title: context.translation.recurrentWo),
|
||||||
|
body: SafeArea(
|
||||||
|
child: FutureBuilder(
|
||||||
|
future: ppmProvider!.getPpmById(widget.request.id!),
|
||||||
|
builder: (context, snap) {
|
||||||
|
if (snap.connectionState == ConnectionState.waiting) {
|
||||||
|
return const ALoading();
|
||||||
|
} else if (snap.hasData) {
|
||||||
|
Ppm ppm = snap.data as Ppm;
|
||||||
|
return Column(children: [
|
||||||
|
AssetInfoWidget(model: DummyModel(widget.request, ppm, timerModel, totalWorkingHours)),
|
||||||
|
]).paddingAll(12);
|
||||||
|
}
|
||||||
|
return NoDataFound(message: context.translation.noDataFound);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class RoomTabs {
|
||||||
|
String label;
|
||||||
|
int tag;
|
||||||
|
int id;
|
||||||
|
|
||||||
|
RoomTabs({
|
||||||
|
required this.label,
|
||||||
|
required this.tag,
|
||||||
|
required this.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
static List<RoomTabs> getTabs({required UsersTypes userType, required BuildContext context}) {
|
||||||
|
List<RoomTabs> tabs = [];
|
||||||
|
|
||||||
|
tabs.add(RoomTabs(label: 'Upcoming', tag: 0, id: 0));
|
||||||
|
tabs.add(RoomTabs(label: 'UnAssigned Open', tag: 1, id: 1));
|
||||||
|
tabs.add(RoomTabs(label: 'Assigned Open', tag: 1, id: 2));
|
||||||
|
tabs.add(RoomTabs(label: 'In Progress', tag: 2, id: 3));
|
||||||
|
tabs.add(RoomTabs(label: 'Completed', tag: 3, id: 4));
|
||||||
|
return tabs;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue