in progress

design_3.0_latest
WaseemAbbasi22 1 year ago
parent abed426de2
commit 7ebd01d012

@ -0,0 +1,8 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 11.75C7.30964 11.75 6.75 12.3096 6.75 13C6.75 13.6904 7.30964 14.25 8 14.25H8.00897C8.69933 14.25 9.25897 13.6904 9.25897 13C9.25897 12.3096 8.69933 11.75 8.00897 11.75H8Z" fill="#3B3D4A"/>
<path d="M11.9955 11.75C11.3052 11.75 10.7455 12.3096 10.7455 13C10.7455 13.6904 11.3052 14.25 11.9955 14.25H12.0045C12.6948 14.25 13.2545 13.6904 13.2545 13C13.2545 12.3096 12.6948 11.75 12.0045 11.75H11.9955Z" fill="#3B3D4A"/>
<path d="M15.991 11.75C15.3007 11.75 14.741 12.3096 14.741 13C14.741 13.6904 15.3007 14.25 15.991 14.25H16C16.6904 14.25 17.25 13.6904 17.25 13C17.25 12.3096 16.6904 11.75 16 11.75H15.991Z" fill="#3B3D4A"/>
<path d="M8 15.75C7.30964 15.75 6.75 16.3096 6.75 17C6.75 17.6904 7.30964 18.25 8 18.25H8.00897C8.69933 18.25 9.25897 17.6904 9.25897 17C9.25897 16.3096 8.69933 15.75 8.00897 15.75H8Z" fill="#3B3D4A"/>
<path d="M11.9955 15.75C11.3052 15.75 10.7455 16.3096 10.7455 17C10.7455 17.6904 11.3052 18.25 11.9955 18.25H12.0045C12.6948 18.25 13.2545 17.6904 13.2545 17C13.2545 16.3096 12.6948 15.75 12.0045 15.75H11.9955Z" fill="#3B3D4A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2C7 1.44772 6.55229 1 6 1C5.44772 1 5 1.44772 5 2V2.44885C4.23882 2.6903 3.57734 3.06994 3.01802 3.6746C2.18949 4.57031 1.83279 5.69272 1.66416 7.04866C1.49997 8.36894 1.49998 10.0541 1.5 12.1739V12.8261C1.49998 14.9459 1.49997 16.6311 1.66416 17.9513C1.83279 19.3073 2.18949 20.4297 3.01802 21.3254C3.8568 22.2322 4.92535 22.6329 6.21533 22.8204C7.45141 23.0001 9.02291 23 10.9712 23H13.0288C14.977 23 16.5486 23.0001 17.7847 22.8204C19.0747 22.6329 20.1432 22.2322 20.982 21.3254C21.8105 20.4297 22.1672 19.3073 22.3358 17.9513C22.5 16.6311 22.5 14.9459 22.5 12.8261V12.1739C22.5 10.0541 22.5 8.36895 22.3358 7.04866C22.1672 5.69272 21.8105 4.57031 20.982 3.6746C20.4227 3.06993 19.7612 2.6903 19 2.44885V2C19 1.44772 18.5523 1 18 1C17.4477 1 17 1.44772 17 2V2.09173C15.903 1.99995 14.5863 1.99998 13.0288 2H10.9712C9.41376 1.99998 8.09704 1.99995 7 2.09173V2ZM4.49783 9C4.03921 9 3.8099 9 3.66385 9.14417C3.51781 9.28833 3.51487 9.51472 3.509 9.96751C3.50027 10.6407 3.5 11.3942 3.5 12.2432V12.7568C3.5 14.9616 3.50182 16.5221 3.64887 17.7045C3.79327 18.8656 4.06263 19.5094 4.48622 19.9673C4.89956 20.4142 5.4647 20.6903 6.503 20.8412C7.57858 20.9975 9.00425 21 11.05 21H12.95C14.9957 21 16.4214 20.9975 17.497 20.8412C18.5353 20.6903 19.1004 20.4142 19.5138 19.9673C19.9374 19.5094 20.2067 18.8656 20.3511 17.7045C20.4982 16.5221 20.5 14.9616 20.5 12.7568V12.2432C20.5 11.3942 20.4997 10.6407 20.491 9.96751C20.4851 9.51472 20.4822 9.28833 20.3362 9.14417C20.1901 9 19.9608 9 19.5022 9H4.49783Z" fill="#3B3D4A"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -0,0 +1,8 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 4C2.44772 4 2 4.44772 2 5C2 5.55228 2.44772 6 3 6L15 6C15.5523 6 16 5.55229 16 5C16 4.44772 15.5523 4 15 4H3Z" fill="#212936"/>
<path d="M19 4C18.4477 4 18 4.44772 18 5C18 5.55228 18.4477 6 19 6L21 6C21.5523 6 22 5.55229 22 5C22 4.44772 21.5523 4 21 4H19Z" fill="#212936"/>
<path d="M2 12C2 11.4477 2.44772 11 3 11L15 11C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13L3 13C2.44772 13 2 12.5523 2 12Z" fill="#212936"/>
<path d="M19 11C18.4477 11 18 11.4477 18 12C18 12.5523 18.4477 13 19 13H21C21.5523 13 22 12.5523 22 12C22 11.4477 21.5523 11 21 11L19 11Z" fill="#212936"/>
<path d="M2 19C2 18.4477 2.44772 18 3 18L15 18C15.5523 18 16 18.4477 16 19C16 19.5523 15.5523 20 15 20L3 20C2.44772 20 2 19.5523 2 19Z" fill="#212936"/>
<path d="M19 18C18.4477 18 18 18.4477 18 19C18 19.5523 18.4477 20 19 20H21C21.5523 20 22 19.5523 22 19C22 18.4477 21.5523 18 21 18H19Z" fill="#212936"/>
</svg>

After

Width:  |  Height:  |  Size: 1004 B

@ -0,0 +1,12 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.01111 2.74981C9.42521 2.74034 9.75324 2.39697 9.74377 1.98286C9.7343 1.56875 9.39093 1.24073 8.97682 1.2502C6.20759 1.31352 4.27098 1.56295 2.91696 2.91696C1.56295 4.27098 1.31352 6.20759 1.2502 8.97682C1.24073 9.39093 1.56875 9.7343 1.98286 9.74377C2.39697 9.75324 2.74034 9.42521 2.74981 9.01111C2.81439 6.1866 3.09929 4.85596 3.97762 3.97762C4.85596 3.09929 6.1866 2.81439 9.01111 2.74981Z" fill="#3B3D4A"/>
<path d="M15.0232 1.2502C14.6091 1.24073 14.2657 1.56875 14.2562 1.98286C14.2468 2.39697 14.5748 2.74034 14.9889 2.74981C17.8134 2.81439 19.144 3.09929 20.0224 3.97762C20.9007 4.85596 21.1856 6.1866 21.2502 9.01111C21.2597 9.42521 21.603 9.75324 22.0171 9.74377C22.4313 9.7343 22.7593 9.39093 22.7498 8.97682C22.6865 6.20759 22.4371 4.27098 21.083 2.91696C19.729 1.56295 17.7924 1.31352 15.0232 1.2502Z" fill="#3B3D4A"/>
<path d="M22.7498 15.0232C22.7593 14.6091 22.4313 14.2657 22.0171 14.2562C21.603 14.2468 21.2597 14.5748 21.2502 14.9889C21.1856 17.8134 20.9007 19.144 20.0224 20.0224C19.144 20.9007 17.8134 21.1856 14.9889 21.2502C14.5748 21.2597 14.2468 21.603 14.2562 22.0171C14.2657 22.4313 14.6091 22.7593 15.0232 22.7498C17.7924 22.6865 19.729 22.4371 21.083 21.083C22.4371 19.729 22.6865 17.7924 22.7498 15.0232Z" fill="#3B3D4A"/>
<path d="M2.74981 14.9889C2.74034 14.5748 2.39697 14.2468 1.98286 14.2562C1.56875 14.2657 1.24073 14.6091 1.2502 15.0232C1.31352 17.7924 1.56295 19.729 2.91696 21.083C4.27098 22.4371 6.20759 22.6865 8.97682 22.7498C9.39093 22.7593 9.7343 22.4313 9.74377 22.0171C9.75324 21.603 9.42521 21.2597 9.01111 21.2502C6.1866 21.1856 4.85596 20.9007 3.97762 20.0224C3.09929 19.144 2.81439 17.8134 2.74981 14.9889Z" fill="#3B3D4A"/>
<path d="M13 5.25C13.4142 5.25 13.75 5.58579 13.75 6L13.75 9.05199C13.75 9.95048 13.7501 10.6997 13.6701 11.2945C13.5857 11.9223 13.4 12.4891 12.9445 12.9445C12.4891 13.4 11.9223 13.5857 11.2945 13.6701C10.6997 13.7501 9.95048 13.75 9.05199 13.75L6 13.75C5.58579 13.75 5.25 13.4142 5.25 13C5.25 12.5858 5.58579 12.25 6 12.25H9C9.96401 12.25 10.6116 12.2484 11.0946 12.1835C11.5561 12.1214 11.7536 12.0142 11.8839 11.8839C12.0142 11.7536 12.1214 11.5561 12.1835 11.0946C12.2484 10.6116 12.25 9.96401 12.25 9V6C12.25 5.58579 12.5858 5.25 13 5.25Z" fill="#3B3D4A"/>
<path d="M16 7C16 6.44772 16.4477 6 17 6H17.009C17.5613 6 18.009 6.44772 18.009 7C18.009 7.55228 17.5613 8 17.009 8H17C16.4477 8 16 7.55228 16 7Z" fill="#3B3D4A"/>
<path d="M17.75 10C17.75 9.58579 17.4142 9.25 17 9.25C16.5858 9.25 16.25 9.58579 16.25 10V12C16.25 12.4142 16.5858 12.75 17 12.75C17.4142 12.75 17.75 12.4142 17.75 12V10Z" fill="#3B3D4A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.9656 14.25H17.0345C17.2396 14.2499 17.4614 14.2498 17.6486 14.275C17.8679 14.3045 18.1481 14.3803 18.3839 14.6161C18.6197 14.8519 18.6955 15.1321 18.725 15.3514C18.7502 15.5387 18.7501 15.7604 18.75 15.9656V17.0345C18.7501 17.2396 18.7502 17.4614 18.725 17.6486C18.6955 17.8679 18.6197 18.1481 18.3839 18.3839C18.1481 18.6197 17.8679 18.6955 17.6486 18.725C17.4614 18.7502 17.2396 18.7501 17.0345 18.75H14.9656C14.7605 18.7501 14.5387 18.7502 14.3514 18.725C14.1321 18.6955 13.8519 18.6197 13.6161 18.3839C13.3803 18.1481 13.3045 17.8679 13.275 17.6486C13.2498 17.4614 13.2499 17.2396 13.25 17.0345V15.9656C13.2499 15.7605 13.2498 15.5387 13.275 15.3514C13.3045 15.1321 13.3803 14.8519 13.6161 14.6161C13.8519 14.3803 14.1321 14.3045 14.3514 14.275C14.5387 14.2498 14.7605 14.2499 14.9656 14.25ZM14.7512 15.7512C14.7501 15.8206 14.75 15.9009 14.75 16V17C14.75 17.0991 14.7501 17.1794 14.7512 17.2489C14.8206 17.25 14.9009 17.25 15 17.25H17C17.0991 17.25 17.1794 17.25 17.2489 17.2489C17.25 17.1794 17.25 17.0991 17.25 17V16C17.25 15.9009 17.25 15.8206 17.2489 15.7512C17.1794 15.7501 17.0991 15.75 17 15.75H15C14.9009 15.75 14.8206 15.7501 14.7512 15.7512Z" fill="#3B3D4A"/>
<path d="M5.25 18C5.25 17.5858 5.58579 17.25 6 17.25H11C11.4142 17.25 11.75 17.5858 11.75 18C11.75 18.4142 11.4142 18.75 11 18.75H6C5.58579 18.75 5.25 18.4142 5.25 18Z" fill="#3B3D4A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.00001 5.24989L7.84116 5.2497C7.46087 5.249 7.10601 5.24835 6.81592 5.28506C6.45039 5.33132 6.07776 5.44728 5.76251 5.76252C5.45342 6.07158 5.34097 6.44729 5.29321 6.80281C5.2499 7.12518 5.24995 7.52142 5.25 7.95348L5.25 8.04464C5.24995 8.47746 5.24991 8.87429 5.29331 9.1971C5.3411 9.55258 5.45355 9.92831 5.76257 10.2373C6.07159 10.5464 6.44732 10.6588 6.8028 10.7066C7.12561 10.75 7.52245 10.7499 7.95526 10.7499H8.04475C8.47757 10.7499 8.8744 10.75 9.19722 10.7066C9.5527 10.6588 9.92842 10.5464 10.2374 10.2373C10.5465 9.92831 10.6589 9.55258 10.7067 9.1971C10.7501 8.87429 10.7501 8.47746 10.75 8.04465L10.7501 7.89322C10.7504 7.48883 10.7506 7.11466 10.7108 6.80925C10.6637 6.44867 10.5496 6.07463 10.2374 5.76246C9.92527 5.45028 9.55123 5.33618 9.19065 5.28912C8.88523 5.24926 8.51109 5.24954 8.10668 5.24984L8.00001 5.24989ZM6.82329 6.82306C6.83028 6.81606 6.83435 6.81288 6.84743 6.80743C6.86672 6.79939 6.91121 6.78497 7.00425 6.77319C7.19245 6.74938 7.44004 6.74955 7.85269 6.74983L8.04127 6.74989C8.51373 6.74987 8.79235 6.74986 8.99652 6.77651C9.09134 6.78888 9.13776 6.80374 9.15829 6.81224C9.17152 6.81772 9.17401 6.82027 9.17621 6.82254L9.17737 6.82369C9.17963 6.8259 9.18218 6.82838 9.18766 6.84161C9.19616 6.86214 9.21102 6.90856 9.22339 7.00338C9.25004 7.20755 9.25003 7.48615 9.25001 7.95859L9.25001 7.99989C9.25001 8.4925 9.24841 8.78651 9.22008 8.99723C9.2071 9.09379 9.19181 9.14215 9.18285 9.16393C9.18198 9.16603 9.1812 9.16784 9.1805 9.16936C9.17953 9.1715 9.17874 9.1731 9.17815 9.17422L9.17677 9.17666L9.17434 9.17803C9.1724 9.17904 9.16909 9.18066 9.16404 9.18274C9.14226 9.1917 9.0939 9.20699 8.99734 9.21997C8.78662 9.2483 8.49261 9.24989 8.00001 9.24989C7.5074 9.24989 7.21339 9.2483 7.00267 9.21997C6.90611 9.20699 6.85775 9.1917 6.83597 9.18274C6.83272 9.1814 6.83018 9.18025 6.82828 9.17933C6.82723 9.17883 6.82637 9.17839 6.82568 9.17803L6.82325 9.17666L6.82187 9.17422C6.82086 9.17229 6.81924 9.16897 6.81717 9.16393C6.80821 9.14215 6.79291 9.09379 6.77993 8.99723C6.7516 8.78651 6.75001 8.4925 6.75001 7.99989C6.75001 7.50717 6.75154 7.21325 6.77985 7.00253C6.79282 6.906 6.8081 6.8577 6.81704 6.83597C6.81911 6.83093 6.82073 6.82763 6.82173 6.8257L6.82329 6.82306Z" fill="#3B3D4A"/>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

@ -3,7 +3,10 @@ class AppAsset {
static String askOtpIcon = 'ask_otp_icon';
static String askRequesterIcon = 'ask_requester_icon';
static String scanQrIcon = 'scan_qr_icon';
static String calendarIcon = 'calendar_icon';
static String listIcon = 'list_icon';
static String takeDevicePhotoIcon = 'take_device_photo_icon';
static String getQrCodeIcon = 'qr_code_icon';
static String maintenanceIcon = 'maintenance_icon';
static String retiredAssetIcon = 'assets/images/retired_asset_icon.svg';
static String sparePartIcon = 'spare_part_icon';

@ -14,6 +14,14 @@ class DashBoardProvider extends ChangeNotifier {
bool isAllCountLoading = false;
bool isLoading = false;
bool _isDetailLoading = false;
bool _isShowDashBoardCalendar = false;
bool get isShowDashBoardCalendar => _isShowDashBoardCalendar;
set isShowDashBoardCalendar(bool value) {
_isShowDashBoardCalendar = value;
notifyListeners();
}
int _status = 0;

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/app_strings/app_asset.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/dashboard_latest/widgets/request_category_list.dart';
@ -19,11 +20,31 @@ class RequestCategoryFragment extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<DashBoardProvider>(builder: (context, dashboardProvider, child) {
bool isNurse = (Provider.of<UserProvider>(context, listen: false).user?.type) == UsersTypes.normal_user;
return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
context.translation.allWorkOrder.heading4(context).paddingOnly(start: 16, end: 16),
12.height,
const WeeklyCalendarFragment(),
12.height,
!isNurse
? Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
context.translation.allWorkOrder.heading4(context),
GestureDetector(
onTap: () {
dashboardProvider.isShowDashBoardCalendar = !dashboardProvider.isShowDashBoardCalendar;
},
child: dashboardProvider.isShowDashBoardCalendar ? AppAsset.listIcon.toSvgAsset() : AppAsset.calendarIcon.toSvgAsset())
],
),
dashboardProvider.isShowDashBoardCalendar
? Padding(
padding: EdgeInsets.only(top: 12.toScreenHeight),
child: const WeeklyCalendarFragment(),
)
: const SizedBox(),
],
).paddingOnly(start: 16, end: 16)
: context.translation.allWorkOrder.heading4(context).paddingOnly(start: 16, end: 16),
getTabs(
requestsProvider: dashboardProvider,
context: context,
@ -46,7 +67,7 @@ class RequestCategoryFragment extends StatelessWidget {
}
Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes? userType}) {
List<CategoryTabs> tabs = CategoryTabs.getTabs(userType: userType??UsersTypes.normal_user, context: context);
List<CategoryTabs> tabs = CategoryTabs.getTabs(userType: userType ?? UsersTypes.normal_user, context: context);
return SizedBox(
height: 44 + 16,
child: ListView.separated(
@ -62,7 +83,7 @@ class RequestCategoryFragment extends StatelessWidget {
onPressed: () async {
requestsProvider.currentListIndex = index;
requestsProvider.resetRequestDataList();
requestsProvider.getRequestDetail(usersType: userType??UsersTypes.normal_user, showLoader: true, status: tabs[index].tag);
requestsProvider.getRequestDetail(usersType: userType ?? UsersTypes.normal_user, showLoader: true, status: tabs[index].tag);
},
);
},

@ -483,6 +483,7 @@
"createSubWorkOrder" : "إنشاء أمر عمل فرعي",
"mrNumber" : "MR Number",
"vendorEng" : "المهندس المزود",
"qrCode": "رمز الاستجابة السريعة",
"vendorName" : "اسم المزود",
"reset" : "اعادة تعيين",
"solution" : "الحل",
@ -497,5 +498,9 @@
"assetScan" : "مسح الجهاز",
"pickManually" : "اختر يدويا",
"searchAsset" : "ابحث عن جهاز",
"doYouWantToSetReminder": "هل تريد تعيين تذكير؟",
"youCanSetTheReminderInAlarmToRemindYouBeforeVisit": "يمكنك تعيين التذكير في المنبه لتذكيرك قبل الزيارة. الرجاء اختيار الوقت أدناه",
"setReminder": "تعيين التذكير",
"provideQrCodeToEngineer": "قدم رمز الاستجابة السريعة أدناه للمهندس للتحقق من وصوله",
"callResponse": "استجابة الاتصال"
}

@ -486,6 +486,8 @@
"technicalComment" : "Technical Comment",
"recentActivities" : "Recent Activities",
"activities" : "Activities",
"provideQrCodeToEngineer": "Provide the below QR Code to Engineer to verify his arrival",
"qrCode": "QR Code",
"createNewActivity" : "Create New Activity",
"selectActivityType" : "Select Activity Type",
"sparePartRequest" : "Spare Part Request",
@ -500,5 +502,8 @@
"lastPmDate" : "Last PM Date",
"assetScan" : "Asset Scan",
"pickManually" : "Pick Manually",
"doYouWantToSetReminder": "Do you want to set reminder?",
"youCanSetTheReminderInAlarmToRemindYouBeforeVisit": "You can set the reminder in alarm to remind you before visit. Please select the time below",
"setReminder": "Set Reminder",
"searchAsset" : "Search Asset"
}

@ -32,6 +32,7 @@ class AppColor {
static const Color neutral140 = Color(0xffE6E6E6);
static const Color neutral150 = Color(0xffA1A1A1);
static const Color neutral160 = Color(0xffE5E5E5);
static const Color neutral170 = Color(0xff6E6E6E);
//background
static const Color backgroundLight = Color(0xfff7f9fb);

@ -14,6 +14,7 @@ import 'package:test_sa/models/helper_data_models/maintenance_request/activity_m
import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart';
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart';
import 'package:test_sa/service_request_latest/service_request_detail_provider.dart';
@ -280,19 +281,21 @@ class ServiceRequestBottomSheet {
buttonColor: AppColor.primary10,
loading: false,
onPressed: () async {
if (requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.eArrived) {
requestDetailProvider.updateNeedVisitHelperModel(NeedVisitHelperModel(
workOrderId: requestDetailProvider.needVisitHelperModel?.workOrderId,
visitDate: requestDetailProvider.needVisitHelperModel?.visitDate,
comment: requestDetailProvider.needVisitHelperModel?.comment,
));
requestDetailProvider.engineerUpdateNeedVisit();
} else {
requestDetailProvider.needVisitHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder!.data!.requestId;
requestDetailProvider.engineerNeedVisit();
requestDetailProvider.needVisitHelperModel = NeedVisitHelperModel();
}
// if (requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.eArrived) {
// requestDetailProvider.updateNeedVisitHelperModel(NeedVisitHelperModel(
// workOrderId: requestDetailProvider.needVisitHelperModel?.workOrderId,
// visitDate: requestDetailProvider.needVisitHelperModel?.visitDate,
// comment: requestDetailProvider.needVisitHelperModel?.comment,
// ));
// requestDetailProvider.engineerUpdateNeedVisit();
// } else {
// requestDetailProvider.needVisitHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder!.data!.requestId;
// requestDetailProvider.engineerNeedVisit();
// requestDetailProvider.needVisitHelperModel = NeedVisitHelperModel();
// }
Navigator.pop(context);
initialVisitReminderBottomSheet(context: context);
//
},
),
16.height,
@ -301,6 +304,205 @@ class ServiceRequestBottomSheet {
}));
}
static Future initialVisitReminderBottomSheet({required BuildContext context}) {
String selectedReminderTime = '10 minutes before';
Widget reminderTimeWidget({required BuildContext context}) {
List<String> reminderTimeList = ['5 minutes before', '10 minutes before', '15 minutes before'];
return StatefulBuilder(
builder: (context, setState) {
return Wrap(
direction: Axis.vertical,
runSpacing: 8,
spacing: 8,
children: [
for (var element in reminderTimeList)
Row(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width: 24,
height: 24,
child: Radio<String>(
value: element,
activeColor: Colors.red,
fillColor: MaterialStateColor.resolveWith((states) {
if (states.contains(MaterialState.selected)) return AppColor.primary10;
return AppColor.neutral130;
}),
groupValue: selectedReminderTime,
onChanged: (String? value) {
setState(() {
selectedReminderTime = value!;
});
},
),
),
8.width,
Text(element, style: AppTextStyles.bodyText.copyWith(color: AppColor.neutral120)),
],
)
],
);
},
);
}
return buildBottomSheetParent(
context: context,
childWidget: Consumer<ServiceRequestDetailProvider>(
builder: (context, requestDetailProvider, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox().indicatorWidget().center,
8.height,
Align(
alignment: AlignmentDirectional.centerStart,
child: context.translation.doYouWantToSetReminder.bottomSheetHeadingTextStyle(context),
),
8.height,
Align(
alignment: AlignmentDirectional.centerStart,
child: context.translation.youCanSetTheReminderInAlarmToRemindYouBeforeVisit.bodyText2(context),
),
12.height,
reminderTimeWidget(context: context),
30.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: AppFilledButton(
label: context.translation.cancel,
buttonColor: AppColor.white60,
textColor: AppColor.black10,
loading: false,
onPressed: () async {
if (requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.eArrived) {
requestDetailProvider.updateNeedVisitHelperModel(
NeedVisitHelperModel(
workOrderId: requestDetailProvider.needVisitHelperModel?.workOrderId,
visitDate: requestDetailProvider.needVisitHelperModel?.visitDate,
comment: requestDetailProvider.needVisitHelperModel?.comment,
),
);
requestDetailProvider.engineerUpdateNeedVisit();
} else {
requestDetailProvider.needVisitHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder!.data!.requestId;
requestDetailProvider.engineerNeedVisit();
requestDetailProvider.needVisitHelperModel = NeedVisitHelperModel();
}
Navigator.pop(context);
},
),
),
12.width,
Expanded(
child: AppFilledButton(
label: context.translation.setReminder,
buttonColor: AppColor.primary10,
loading: false,
onPressed: () async {
if (requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.eArrived) {
requestDetailProvider.updateNeedVisitHelperModel(
NeedVisitHelperModel(
workOrderId: requestDetailProvider.needVisitHelperModel?.workOrderId,
visitDate: requestDetailProvider.needVisitHelperModel?.visitDate,
comment: requestDetailProvider.needVisitHelperModel?.comment,
),
);
requestDetailProvider.engineerUpdateNeedVisit();
} else {
requestDetailProvider.needVisitHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder!.data!.requestId;
requestDetailProvider.engineerNeedVisit();
requestDetailProvider.needVisitHelperModel = NeedVisitHelperModel();
}
Navigator.pop(context);
},
),
),
],
),
16.height,
],
);
},
),
);
}
static Future getQRCodeBottomSheet({required BuildContext context}) async{
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context,listen:false);
String? base64String = await requestDetailProvider.getQrCode(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId ?? 0);
Navigator.pop(context);
if (base64String != null) {
// You have the base64 string, now you can display it
Uint8List bytes = base64Decode(base64String);
return buildBottomSheetParent(
context: context,
childWidget: Consumer<ServiceRequestDetailProvider>(
builder: (context, requestDetailProvider, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox().indicatorWidget().center,
8.height,
Align(
alignment: AlignmentDirectional.centerStart,
child: context.translation.qrCode.bottomSheetHeadingTextStyle(context),
),
8.height,
Align(
alignment: AlignmentDirectional.centerStart,
child: context.translation.provideQrCodeToEngineer.bodyText2(context),
),
12.height,
Center(
child: Image.memory(
bytes, // Displaying the QR code from base64
fit: BoxFit.contain, // Ensure the image fits well in the dialog
errorBuilder: (context, error, stackTrace) {
return const Icon(Icons.error, color: Colors.red);
},
),
),
16.height,
],
);
},
),
);
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
backgroundColor: Colors.white,
title:context.translation.scanQr.heading6(context).center,
content: Image.memory(
bytes, // Displaying the QR code from base64
fit: BoxFit.contain, // Ensure the image fits well in the dialog
errorBuilder: (context, error, stackTrace) {
return const Icon(Icons.error, color: Colors.red);
},
),
);
},
);
} else {
print('Failed to get the QR code');
}
}
static Future rejectRequestBottomSheet({required BuildContext context}) {
return buildBottomSheetParent(
context: context,

@ -2,45 +2,57 @@ import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_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/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/app_style/app_text_style.dart';
import 'package:test_sa/views/app_style/sizing.dart';
class WeeklyCalendarFragment extends StatelessWidget {
class WeeklyCalendarFragment extends StatefulWidget {
const WeeklyCalendarFragment({Key? key}) : super(key: key);
@override
State<WeeklyCalendarFragment> createState() => _WeeklyCalendarFragmentState();
}
class _WeeklyCalendarFragmentState extends State<WeeklyCalendarFragment> {
DateTime? selectedDate = DateTime.now(); // Initially select today's date
@override
Widget build(BuildContext context) {
// Generate the list of dates for the current week (3 days before and 3 days after today)
List<DateTime> weekDates = getWeekDates();
return Consumer<DashBoardProvider>(
builder: (context, snapshot, _) => GridView.builder(
padding: const EdgeInsets.only(left: 16, right: 16),
padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 7,
childAspectRatio: 70 / 60,
crossAxisSpacing: 2,
mainAxisSpacing: 12,
childAspectRatio: 60 / 80,
crossAxisSpacing: 4,
mainAxisSpacing: 4,
),
itemCount: weekDates.length, // Now we have 7 items
itemCount: weekDates.length,
itemBuilder: (context, index) {
DateTime date = weekDates[index];
String formattedDate = DateFormat('EEE\ndd').format(date); // EEE: Day name, dd: Day number
DateTime currentDate = weekDates[index];
String formattedDay = DateFormat('EEE').format(currentDate);
String formattedDate = DateFormat('dd MMM').format(currentDate);
// Check if the current date is selected
bool isSelected = selectedDate != null && selectedDate!.day == currentDate.day && selectedDate!.month == currentDate.month && selectedDate!.year == currentDate.year;
return listItem(
formattedDate, // Pass the formatted date
snapshot.dashboardCount?.data?.countOpen ?? 0, // Adjust as needed
context,
snapshot.isAllCountLoading,
index,
AppColor.primary10,
formattedDate: formattedDate,
formattedDay: formattedDay,
context: context,
isLoading: snapshot.isAllCountLoading,
currentDate: currentDate,
isSelected: isSelected,
onSelect: () {
setState(() {
selectedDate = currentDate; // Update selected date on tap
});
},
);
},
),
@ -59,13 +71,17 @@ class WeeklyCalendarFragment extends StatelessWidget {
return weekDates;
}
Widget listItem(String formattedDate, int value, BuildContext context, bool isLoading, int index, Color iconColor) {
Widget listItem({
required String formattedDate,
required String formattedDay,
required BuildContext context,
required DateTime currentDate,
required bool isLoading,
required bool isSelected, // To check if this item is selected
required VoidCallback onSelect, // Callback for tap
}) {
return GestureDetector(
onTap: isLoading
? null
: () {
// Action on tapping the date (if required)
},
onTap: isLoading ? null : onSelect,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
@ -74,13 +90,43 @@ class WeeklyCalendarFragment extends StatelessWidget {
Column(
children: [
Container(
color: Colors.red,
child: Text(
formattedDate,
style: AppTextStyles.tinyFont2,
padding: EdgeInsets.symmetric(horizontal: 7.toScreenWidth, vertical: 14.toScreenHeight),
width: double.infinity,
decoration: ShapeDecoration(
color: AppColor.background(context),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(14),
side: isSelected
? const BorderSide(color: AppColor.primary10, width: 2) // Blue border if selected
: BorderSide.none,
),
shadows: [
BoxShadow(
color: Colors.black.withOpacity(0.03),
blurRadius: 5,
offset: const Offset(0, 0),
spreadRadius: 0,
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
formattedDay,
style: AppTextStyles.tinyFont2.copyWith(
color: isSelected ? AppColor.black20 : AppColor.neutral170, // Blue text if selected
),
),
Text(
formattedDate,
style: AppTextStyles.tinyFont2.copyWith(
color: isSelected ? AppColor.black20 : AppColor.neutral170, // Blue text if selected
),
),
],
),
),
// Any other widgets you want to display (e.g. counts, icons)
],
),
],

@ -1,12 +1,17 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/app_strings/app_asset.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/enums/user_types.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/service_request_detail_provider.dart';
import 'package:test_sa/service_request_latest/utilities/service_request_utils.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/history_log_view.dart';
import 'components/service_request_detail_view.dart';
@ -46,6 +51,7 @@ class _ServiceRequestDetailMainState extends State<ServiceRequestDetailMain> {
@override
Widget build(BuildContext context) {
bool isNurse = (Provider.of<UserProvider>(context, listen: false).user?.type) == UsersTypes.normal_user;
return WillPopScope(
onWillPop: () async {
// Implement custom back button handling logic here
@ -64,7 +70,15 @@ class _ServiceRequestDetailMainState extends State<ServiceRequestDetailMain> {
Navigator.pop(context);
},
actions: [
IconButton(
isNurse? IconButton(
icon: 'qr'.toSvgAsset(
height: 24,
width: 24,
),
onPressed: () {
ServiceRequestBottomSheet.getQRCodeBottomSheet(context: context);
},
):IconButton(
icon: const Icon(Icons.home),
onPressed: () {
stopTimer();

Loading…
Cancel
Save