initial commit

design_3.0_latest
WaseemAbbasi22 1 year ago
parent b5bfb3c0c0
commit 8a5478f37f

@ -81,13 +81,13 @@ extension WidgetExtensions on Widget {
).toShadowContainer(context)
: this;
Widget toShadowContainer(BuildContext context, {bool showShadow = true, bool withShadow = true, Color? backgroundColor, double padding = 16, EdgeInsets? paddingObject}) => withShadow
Widget toShadowContainer(BuildContext context, {bool showShadow = true,double borderRadius = 14, bool withShadow = true, Color? backgroundColor, double padding = 16, EdgeInsets? paddingObject}) => withShadow
? Container(
padding: paddingObject ?? EdgeInsets.all(padding),
width: double.infinity,
decoration: ShapeDecoration(
color: backgroundColor ?? AppColor.background(context),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(borderRadius)),
shadows: showShadow ? [boxShadowR14] : null,
),
child: this,

@ -526,5 +526,10 @@
"userName": "اسم المستخدم",
"siteName": "اسم الموقع",
"pointName": "اسم النقطة",
"checkIn": "تسجيل الدخول"
"checkIn": "تسجيل الدخول",
"pmWo": "أمر العمل الوقائي",
"recurrentWo": "أمر العمل المتكرر",
"taskNo": "رقم المهمة",
"assignEngineer": "تعيين مهندس",
"scheduledDate": "التاريخ المجدول"
}

@ -530,5 +530,10 @@
"userName": "User Name",
"siteName": "Site Name",
"pointName": "Point Name",
"checkIn": "Check in"
"checkIn": "Check in",
"pmWo": "PM WO",
"recurrentWo": "Recurrent WO",
"taskNo": "Task No",
"assignEngineer": "Assign Engineer",
"scheduledDate": "Scheduled Date"
}

@ -183,7 +183,7 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
controller: widget.controller,
textInputAction: widget.textInputType == TextInputType.multiline ? null : widget.textInputAction ?? TextInputAction.next,
onEditingComplete: widget.onAction ?? () => FocusScope.of(context).nextFocus(),
style: AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500),
style:widget.style?? AppTextStyle.body1.copyWith(fontWeight: FontWeight.w500),
onTap: widget.onTap,
decoration: InputDecoration(
alignLabelWithHint: widget.alignLabelWithHint,

@ -101,14 +101,12 @@ class _MaintenanceRequestFormState extends State<MaintenanceRequestForm> with Si
if (validate(model: requestDetailProvider.activityMaintenanceHelperModel!)) {
print('value of timer is ${requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimerModel.toString()}');
ActivityMaintenanceTimers model = ActivityMaintenanceTimers(
id: 0,
startTime: requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimerModel?.startAt!.toIso8601String(), // Handle potential null
endTime: requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimerModel?.endAt?.toIso8601String(), // Handle potential null
workingHours: ((requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimerModel?.durationInSecond ?? 0) / 60 / 60),
);
print('model i got is ${model.toJson()}');
requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers =requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers??[];
requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers?.add(
ActivityMaintenanceTimers(

@ -8,6 +8,7 @@ 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/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart';
import 'package:test_sa/views/pages/user/ppm/update_ppm/edit_ppm.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -108,8 +109,9 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
if (userProvider!.user!.type == UsersTypes.engineer && (ppm.visitStatusId != 270 && ppm.visitStatusId != 269))
AppFilledButton(
onPressed: () async {
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => EditPpm(ppm: ppm, details: widget.request)));
setState(() {});
//TODO remove after testing..
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => RecurrentWorkOrderView( request: widget.request)));
// setState(() {});
},
label: context.translation.updateRequest,
).paddingAll(16)

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

@ -17,6 +17,7 @@ class AppTimer extends StatefulWidget {
final BoxDecoration? decoration;
final bool enabled;
final String? label;
final double ?width;
final Function(bool)? timerProgress;
@ -27,6 +28,7 @@ class AppTimer extends StatefulWidget {
this.onChange,
this.style,
this.decoration,
this.width,
this.timerProgress,
this.enabled = true,
}) : super(key: key);
@ -113,7 +115,7 @@ class _AppTimerState extends State<AppTimer> {
@override
Widget build(BuildContext context) {
return Container(
width: 100 * AppStyle.getScaleFactor(context),
width: widget.width??100 * AppStyle.getScaleFactor(context),
height: 56.toScreenHeight,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
decoration: widget.decoration ??

Loading…
Cancel
Save