diff --git a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart index 3414bb46..6eef18dc 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart @@ -1,14 +1,21 @@ import 'package:flutter/material.dart'; import 'package:pie_chart/pie_chart.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/all_requests_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/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart'; +import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart'; +import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart'; +import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart'; import 'package:test_sa/views/app_style/colors.dart'; class ProgressFragment extends StatelessWidget { - const ProgressFragment({Key key}) : super(key: key); + ProgressFragment({Key key}) : super(key: key); @override Widget build(BuildContext context) { @@ -17,26 +24,95 @@ class ProgressFragment extends StatelessWidget { "In Progress": 12, "Open": 12, }; - return Column( - children: [ - PieChart( - dataMap: statuses, - animationDuration: const Duration(milliseconds: 500), - chartRadius: 190.toScreenWidth, - colorList: [AColors.statusGreen, AColors.statusBlue, AColors.statusYellowLight], - initialAngleInDegree: 270, - chartType: ChartType.ring, - ringStrokeWidth: 40.toScreenWidth, - centerText: "Total\n20", - centerTextStyle: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - legendOptions: const LegendOptions(showLegends: false), - chartValuesOptions: ChartValuesOptions( - chartValueBackgroundColor: Colors.transparent, - chartValueStyle: AppTextStyles.heading6.copyWith(color: AppColor.neutral20), - showChartValuesOutside: false, - ), - ).paddingAll(8).toShadowContainer, - ], - ).paddingOnly(start: 16, end: 16); + return Consumer( + builder: (context, snapshot, _) => Column( + children: [ + AspectRatio( + aspectRatio: 398 / 237, + child: PieChart( + dataMap: statuses, + animationDuration: const Duration(milliseconds: 500), + chartRadius: 190.toScreenWidth, + colorList: [AColors.statusGreen, AColors.statusBlue, AColors.statusYellowLight], + initialAngleInDegree: 270, + chartType: ChartType.ring, + ringStrokeWidth: 40.toScreenWidth, + centerText: "Total\n20", + centerTextStyle: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + legendOptions: const LegendOptions(showLegends: false), + chartValuesOptions: ChartValuesOptions( + chartValueBackgroundColor: Colors.transparent, + chartValueStyle: AppTextStyles.heading6.copyWith(color: AppColor.neutral20), + showChartValuesOutside: true, + ), + ).toShimmer(isShow: snapshot.isOpenLoading || snapshot.isInProgressLoading || snapshot.isCloseLoading, radius: 300).paddingAll(12).toShadowContainer, + ).paddingOnly(start: 16, end: 16, bottom: 16), + DefaultTabController( + length: 3, + child: Column( + children: [ + Container( + margin: const EdgeInsets.only(left: 16, right: 16), + decoration: BoxDecoration(color: AppColor.neutral30, borderRadius: BorderRadius.circular(16)), + child: TabBar( + //controller: _tabController, + padding: EdgeInsets.zero, + labelColor: AppColor.neutral60, + unselectedLabelColor: AppColor.neutral20, + unselectedLabelStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + labelStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral60), + indicatorPadding: const EdgeInsets.all(4), + indicator: BoxDecoration(color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(13)), + onTap: (index) { + // setState(() {}); + }, + tabs: [ + Tab(text: "Open", height: 57.toScreenHeight), + Tab(text: "In Progress", height: 57.toScreenHeight), + Tab(text: "Completed", height: 57.toScreenHeight), + ], + ), + ), + 8.height, + TabBarView( + children: [ + requestItemView(snapshot.openRequests?.requestsDetails ?? [], snapshot.isOpenLoading), + requestItemView(snapshot.inProgressRequests?.requestsDetails ?? [], snapshot.isInProgressLoading), + requestItemView(snapshot.closeRequests?.requestsDetails ?? [], snapshot.isCloseLoading), + ], + ).expanded, + ], + ), + ).expanded, + ], + ), + ); + } + + Widget requestItemView(List list, bool isLoading) { + return ListView.separated( + padding: const EdgeInsets.all(16), + itemBuilder: (cxt, index) { + bool isServiceRequest = list[index].nameOfType == "ServiceRequest"; + bool isGasRefill = list[index].nameOfType == "GasRefill"; + bool isAssetTransfer = list[index].nameOfType == "AssetTransfer"; + bool isPPMs = list[index].nameOfType == "PPMs"; + + return isServiceRequest + ? ServiceRequestItemView(list[index]) + : isGasRefill + ? GasRefillItemView(list[index]) + : isPPMs + ? PpmItemView(list[index]) + : isAssetTransfer + ? AssetItemView(list[index]) + : Container( + height: 100, + width: double.infinity, + color: Colors.grey, + ); + }, + separatorBuilder: (cxt, index) => 8.height, + itemCount: list.length); } } diff --git a/lib/new_views/pages/land_page/dashboard_page.dart b/lib/new_views/pages/land_page/dashboard_page.dart index 4bf1a973..722a6b6e 100644 --- a/lib/new_views/pages/land_page/dashboard_page.dart +++ b/lib/new_views/pages/land_page/dashboard_page.dart @@ -122,7 +122,7 @@ class _DashboardPageState extends State { onPageChanged: (index) => setState(() => _currentPage = index), children: [ RequestsFragment(), - const ProgressFragment(), + ProgressFragment(), RecentActivitiesFragment(), ], ).expanded, diff --git a/lib/new_views/pages/land_page/requests/asset_item_view.dart b/lib/new_views/pages/land_page/requests/asset_item_view.dart new file mode 100644 index 00000000..da270467 --- /dev/null +++ b/lib/new_views/pages/land_page/requests/asset_item_view.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; +import 'package:test_sa/controllers/api_routes/urls.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/device/asset.dart'; + +class AssetItemView extends StatelessWidget { + final RequestsDetails request; + + const AssetItemView(this.request, {Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Device Transfer Request", + maxLines: 2, + style: AppTextStyles.heading5.copyWith(color: Color(0xFF3B3D4A)), + ), + Text( + "${context.translation.from} : ${request.assetTransferFrom}", + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + Text( + "${context.translation.to} : ${request.assetTransferTo}", + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + ], + ), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.viewDetails, + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), + ), + 4.width, + const Icon( + Icons.arrow_forward, + color: Color(0xFF4A8DB7), + size: 14, + ) + ], + ), + ], + ).toShadowContainer.onPress(() {}); + } +} diff --git a/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart new file mode 100644 index 00000000..9964f1ca --- /dev/null +++ b/lib/new_views/pages/land_page/requests/gas_refill_item_view.dart @@ -0,0 +1,64 @@ +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/string_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/views/app_style/sizing.dart'; + +class GasRefillItemView extends StatelessWidget { + final RequestsDetails request; + + const GasRefillItemView(this.request, {Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Row( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // /// TBD + // // StatusLabel( + // // label: , + // // id: , + // // textColor: AColors.getPriorityStatusTextColor(), + // // backgroundColor: AColors.getPriorityStatusColor()), + // 8.width, + // StatusLabel(label: item.status.name, textColor: AColors.getRequestStatusTextColor(item.status.value), backgroundColor: AColors.getRequestStatusColor(item.status.value)), + // 1.width.expanded, + // Text(item.startDate != null ? item.startDate.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), + // ], + // ), + // 8.height, + Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), + Text( + '${context.translation.gasType}: ${request.gasType}', + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + Text( + '${context.translation.site}: ${request.site}', + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + 8.height, + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.viewDetails, + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), + ), + 4.width, + const Icon( + Icons.arrow_forward, + color: Color(0xFF4A8DB7), + size: 14, + ) + ], + ), + ], + ).toShadowContainer.onPress(() {}); + } +} diff --git a/lib/new_views/pages/land_page/requests/ppm_item_view.dart b/lib/new_views/pages/land_page/requests/ppm_item_view.dart new file mode 100644 index 00000000..4cf449cb --- /dev/null +++ b/lib/new_views/pages/land_page/requests/ppm_item_view.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:provider/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/all_requests_and_count_model.dart'; +import 'package:test_sa/models/enums/user_types.dart'; +import 'package:test_sa/models/visits/visit.dart'; +import 'package:test_sa/views/pages/user/visits/visit_details.dart'; + +class PpmItemView extends StatelessWidget { + final RequestsDetails request; + + const PpmItemView(this.request, {Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Row( + // children: [ + // // StatusLabel( + // // label: visit.priority.name, + // // id: visit.priority.id, + // // textColor: AColors.getPriorityStatusTextColor(visit.priority.id), + // // backgroundColor: AColors.getPriorityStatusColor(visit.priority.id)), + // // 8.width, + // StatusLabel( + // label: visit.status.name, + // id: visit.status.id, + // textColor: AColors.getRequestStatusTextColorByName(visit.status.name), + // backgroundColor: AColors.getRequestStatusColorByName(visit.status.name), + // ), + // 1.width.expanded, + // ], + // ), + // 8.height, + Text(context.translation.preventiveMaintenance, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), + 8.height, + Text( + '${context.translation.assetNumber}: ${request.assetName}', + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + ), + Text( + '${context.translation.assetSN}: ${request.assetNo}', + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + ), + Text( + '${context.translation.code}: ${request.code}', + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + ), + 16.height, + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.viewDetails, + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), + ), + 4.width, + const Icon(Icons.arrow_forward, color: Color(0xFF4A8DB7), size: 14) + ], + ), + ], + ).toShadowContainer.onPress(() { + + }); + } +} diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart new file mode 100644 index 00000000..d6652a42 --- /dev/null +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/controllers/providers/api/service_requests_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/string_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/translation_keys.dart'; +import 'package:test_sa/models/service_request/service_request.dart'; +import 'package:test_sa/models/subtitle.dart'; +import 'package:test_sa/models/user.dart'; +import 'package:test_sa/views/app_style/colors.dart'; +import 'package:test_sa/views/widgets/requests/request_status.dart'; + +class ServiceRequestItemView extends StatelessWidget { + final RequestsDetails request; + + const ServiceRequestItemView(this.request, {Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Row( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // StatusLabel( + // label: request.priority.name, + // id: request.priority.id, + // textColor: AColors.getPriorityStatusTextColor(request.priority.id), + // backgroundColor: AColors.getPriorityStatusColor(request.priority.id)), + // 8.width, + // StatusLabel(label: request.statusLabel, textColor: AColors.getRequestStatusTextColor(request.statusValue), backgroundColor: AColors.getRequestStatusColor(request.statusValue)), + // 1.width.expanded, + // Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), + // ], + // ), + // 8.height, + Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), + Text( + '${context.translation.assetName}: ${request.assetName}', + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + Text( + '${context.translation.assetNumber}: ${request.assetNo}', + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + Text( + '${context.translation.requestType}: ${request.requestType}', + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + Text( + '${context.translation.requestNo}: ${request.requestNo}', + style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + ), + 8.height, + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.viewDetails, + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), + ), + 4.width, + const Icon( + Icons.arrow_forward, + color: Color(0xFF4A8DB7), + size: 14, + ) + ], + ), + ], + ).toShadowContainer.onPress(() { + //onPressed(request); + }); + } +}