Merge remote-tracking branch 'origin/main_design2.0' into main_design2.0

# Conflicts:
#	lib/new_views/pages/land_page/calender_fragments/daily_fragment.dart
#	lib/new_views/pages/land_page/calender_fragments/monthly_fragment.dart
#	lib/new_views/pages/land_page/calender_fragments/weekly_fragment.dart
design_3.0_demo_module
nextwo 2 years ago
commit 4be031e8f8

@ -13,6 +13,7 @@ class AllRequestsProvider extends ChangeNotifier {
bool isCloseLoading = false; bool isCloseLoading = false;
bool isOverdueLoading = false; bool isOverdueLoading = false;
bool isHighPriorityLoading = false; bool isHighPriorityLoading = false;
bool isCalendarLoading = false;
int stateCode; int stateCode;
@ -22,6 +23,7 @@ class AllRequestsProvider extends ChangeNotifier {
AllRequestsAndCount closeRequests; AllRequestsAndCount closeRequests;
AllRequestsAndCount overdueRequests; AllRequestsAndCount overdueRequests;
AllRequestsAndCount highPriorityRequests; AllRequestsAndCount highPriorityRequests;
AllRequestsAndCount calendarRequests;
void getRequests() { void getRequests() {
getHighPriorityRequests(); getHighPriorityRequests();
@ -41,7 +43,7 @@ class AllRequestsProvider extends ChangeNotifier {
"typeTransaction": [1, 2, 3, 4], "typeTransaction": [1, 2, 3, 4],
"statusTransaction": [1, 2, 3], "statusTransaction": [1, 2, 3],
"priority": [0, 1], "priority": [0, 1],
"displayData": [1] "displayData": []
}; };
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
@ -61,6 +63,38 @@ class AllRequestsProvider extends ChangeNotifier {
} }
} }
Future<int> getCalenderRequests({@required DateTime from, DateTime to}) async {
if (isCalendarLoading == true) return -2;
isCalendarLoading = true;
if (isCalendarLoading == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {
"typeTransaction": [1, 2, 3, 4],
"statusTransaction": [1, 2, 3],
"priority": [0, 1],
"displayData": [],
"from": from.toIso8601String(),
"to": to?.toIso8601String() ?? from.toIso8601String(),
};
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
calendarRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
notifyListeners();
}
isCalendarLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isCalendarLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getHighPriorityRequests() async { Future<int> getHighPriorityRequests() async {
if (isHighPriorityLoading == true) return -2; if (isHighPriorityLoading == true) return -2;
isHighPriorityLoading = true; isHighPriorityLoading = true;

@ -10,44 +10,44 @@ class AllRequestsAndCount {
AllRequestsAndCount({this.countServiceRequest, this.countGasRefill, this.countAssetTransfer, this.countPPM, this.detailsStatusTotal, this.total, this.requestsDetails}); AllRequestsAndCount({this.countServiceRequest, this.countGasRefill, this.countAssetTransfer, this.countPPM, this.detailsStatusTotal, this.total, this.requestsDetails});
AllRequestsAndCount.fromJson(Map<String, dynamic> json) { AllRequestsAndCount.fromJson(Map<String, dynamic> json) {
countServiceRequest = json['countServiceRequest'] != null ? new CountServiceRequest.fromJson(json['countServiceRequest']) : null; countServiceRequest = json['countServiceRequest'] != null ? CountServiceRequest.fromJson(json['countServiceRequest']) : null;
countGasRefill = json['countGasRefill'] != null ? new CountServiceRequest.fromJson(json['countGasRefill']) : null; countGasRefill = json['countGasRefill'] != null ? CountServiceRequest.fromJson(json['countGasRefill']) : null;
countAssetTransfer = json['countAssetTransfer'] != null ? new CountServiceRequest.fromJson(json['countAssetTransfer']) : null; countAssetTransfer = json['countAssetTransfer'] != null ? CountServiceRequest.fromJson(json['countAssetTransfer']) : null;
countPPM = json['countPPM'] != null ? new CountServiceRequest.fromJson(json['countPPM']) : null; countPPM = json['countPPM'] != null ? CountServiceRequest.fromJson(json['countPPM']) : null;
detailsStatusTotal = json['detailsStatusTotal'] != null ? new DetailsStatusTotal.fromJson(json['detailsStatusTotal']) : null; detailsStatusTotal = json['detailsStatusTotal'] != null ? DetailsStatusTotal.fromJson(json['detailsStatusTotal']) : null;
total = json['total'] != null ? new CountServiceRequest.fromJson(json['total']) : null; total = json['total'] != null ? CountServiceRequest.fromJson(json['total']) : null;
if (json['requestsDetails'] != null) { if (json['requestsDetails'] != null) {
requestsDetails = <RequestsDetails>[]; requestsDetails = <RequestsDetails>[];
json['requestsDetails'].forEach((v) { json['requestsDetails'].forEach((v) {
requestsDetails.add(new RequestsDetails.fromJson(v)); requestsDetails.add(RequestsDetails.fromJson(v));
}); });
} }
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
if (this.countServiceRequest != null) { if (countServiceRequest != null) {
data['countServiceRequest'] = this.countServiceRequest.toJson(); data['countServiceRequest'] = countServiceRequest.toJson();
} }
if (this.countGasRefill != null) { if (countGasRefill != null) {
data['countGasRefill'] = this.countGasRefill.toJson(); data['countGasRefill'] = countGasRefill.toJson();
} }
if (this.countAssetTransfer != null) { if (countAssetTransfer != null) {
data['countAssetTransfer'] = this.countAssetTransfer.toJson(); data['countAssetTransfer'] = countAssetTransfer.toJson();
} }
if (this.countPPM != null) { if (countPPM != null) {
data['countPPM'] = this.countPPM.toJson(); data['countPPM'] = countPPM.toJson();
} }
if (this.detailsStatusTotal != null) { if (detailsStatusTotal != null) {
data['detailsStatusTotal'] = this.detailsStatusTotal.toJson(); data['detailsStatusTotal'] = detailsStatusTotal.toJson();
} }
if (this.total != null) { if (total != null) {
data['total'] = this.total.toJson(); data['total'] = total.toJson();
} }
if (this.requestsDetails != null) { if (requestsDetails != null) {
data['requestsDetails'] = this.requestsDetails.map((v) => v.toJson()).toList(); data['requestsDetails'] = requestsDetails.map((v) => v.toJson()).toList();
} }
return data; return data;
} }
@ -63,8 +63,8 @@ class CountServiceRequest {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['count'] = this.count; data['count'] = count;
return data; return data;
} }
} }
@ -83,10 +83,10 @@ class DetailsStatusTotal {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['open'] = this.open; data['open'] = open;
data['inProgress'] = this.inProgress; data['inProgress'] = inProgress;
data['closed'] = this.closed; data['closed'] = closed;
return data; return data;
} }
} }
@ -156,26 +156,26 @@ class RequestsDetails {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['nameOfType'] = this.nameOfType; data['nameOfType'] = nameOfType;
data['priority'] = this.priority; data['priority'] = priority;
data['status'] = this.status; data['status'] = status;
data['assetName'] = this.assetName; data['assetName'] = assetName;
data['assetNo'] = this.assetNo; data['assetNo'] = assetNo;
data['assetSN'] = this.assetSN; data['assetSN'] = assetSN;
data['model'] = this.model; data['model'] = model;
data['supplier'] = this.supplier; data['supplier'] = supplier;
data['manufacturer'] = this.manufacturer; data['manufacturer'] = manufacturer;
data['requestType'] = this.requestType; data['requestType'] = requestType;
data['requestNo'] = this.requestNo; data['requestNo'] = requestNo;
data['gasType'] = this.gasType; data['gasType'] = gasType;
data['site'] = this.site; data['site'] = site;
data['statusReceiver'] = this.statusReceiver; data['statusReceiver'] = statusReceiver;
data['assetTransferFrom'] = this.assetTransferFrom; data['assetTransferFrom'] = assetTransferFrom;
data['assetTransferTo'] = this.assetTransferTo; data['assetTransferTo'] = assetTransferTo;
data['code'] = this.code; data['code'] = code;
data['date'] = this.date; data['date'] = date;
return data; return data;
} }
} }

@ -6,16 +6,13 @@ import '../../../app_style/app_color.dart';
class CalendarDaysCard extends StatelessWidget { class CalendarDaysCard extends StatelessWidget {
final String day; final String day;
const CalendarDaysCard({Key key, @required this.day}) : super(key: key); final bool fill;
const CalendarDaysCard({Key key, @required this.day, this.fill = false}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final bgColor = day == "1" ? AppColor.neutral30 : (day == "2" ? AppColor.primary40 : AppColor.green50).withOpacity(0.3); final bgColor = fill ? AppColor.primary40.withOpacity(0.3) : AppColor.neutral30;
final dotColor = (day == "1" final dotColor = fill ? AppColor.primary40 : AppColor.green50;
? Colors.transparent
: day == "2"
? AppColor.primary40
: AppColor.green50);
return SizedBox( return SizedBox(
height: 45.toScreenWidth, height: 45.toScreenWidth,
width: 45.toScreenWidth, width: 45.toScreenWidth,
@ -28,11 +25,12 @@ class CalendarDaysCard extends StatelessWidget {
decoration: BoxDecoration(shape: BoxShape.circle, color: bgColor), decoration: BoxDecoration(shape: BoxShape.circle, color: bgColor),
child: day.bodyText(context).custom(color: AppColor.neutral50), child: day.bodyText(context).custom(color: AppColor.neutral50),
), ),
PositionedDirectional( if (fill)
bottom: 16.toScreenHeight, PositionedDirectional(
end: 16.toScreenWidth, bottom: 16.toScreenHeight,
child: CircleAvatar(backgroundColor: dotColor, radius: 2.5), end: 16.toScreenWidth,
), child: CircleAvatar(backgroundColor: dotColor, radius: 2.5),
),
], ],
), ),
); );

@ -1,6 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../requests/asset_item_view.dart';
import '../requests/gas_refill_item_view.dart';
import '../requests/ppm_item_view.dart';
import '../requests/service_request_item_view.dart';
class DailyFragment extends StatefulWidget { class DailyFragment extends StatefulWidget {
const DailyFragment({Key key}) : super(key: key); const DailyFragment({Key key}) : super(key: key);
@ -12,11 +21,10 @@ class DailyFragment extends StatefulWidget {
} }
class _DailyFragmentState extends State<DailyFragment> { class _DailyFragmentState extends State<DailyFragment> {
DateTime currentDateTime = DateTime.now();
@override @override
void initState() { void initState() {
super.initState(); super.initState();
Provider.of<AllRequestsProvider>(context, listen: false).getCalenderRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day));
} }
@override @override
@ -27,9 +35,46 @@ class _DailyFragmentState extends State<DailyFragment> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SingleChildScrollView( return SingleChildScrollView(
child: Column( child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
children: [context.translation.daily.heading5(context)], return Column(
), mainAxisSize: MainAxisSize.min,
); crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
snapshot.isCalendarLoading ? const Center(child: CircularProgressIndicator()) : DateFormat("EEEE, d MMMM, yyyy").format(DateTime.now()).heading5(context),
if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context),
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) {
final list = snapshot.calendarRequests.requestsDetails;
if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading);
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: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests.requestsDetails.length,
),
],
).toShadowContainer(context);
}),
).paddingOnly(start: 16, end: 16);
} }
BoxDecoration cellDecoration({Color color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle);
} }

@ -1,10 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart'; import 'package:table_calendar/table_calendar.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../../../../extensions/text_extensions.dart'; import '../../../../extensions/text_extensions.dart';
import '../../../app_style/app_color.dart'; import '../../../app_style/app_color.dart';
import 'calendar_header.dart'; import 'calendar_header.dart';
@ -18,49 +19,81 @@ class MonthlyFragment extends StatefulWidget {
} }
class _MonthlyFragmentState extends State<MonthlyFragment> { class _MonthlyFragmentState extends State<MonthlyFragment> {
PageController _controller; DateTime _initialDate, _firstDate, _lastDate;
@override
void initState() {
super.initState();
_initialDate = DateTime.now();
_firstDate = DateTime.utc(2010, 10, 16);
_lastDate = DateTime.utc(2030, 3, 14);
Provider.of<AllRequestsProvider>(context, listen: false).getCalenderRequests(
from: DateTime.now().subtract(const Duration(days: 31)),
to: DateTime.now(),
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SingleChildScrollView( return SingleChildScrollView(
//physics: BouncingScrollPhysics(),
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
child: Column( child: Column(
children: [ children: [
TableCalendar( Consumer<AllRequestsProvider>(
firstDay: DateTime.utc(2010, 10, 16), builder: (context, snapshot, _) => snapshot.isCalendarLoading
lastDay: DateTime.utc(2030, 3, 14), ? const Center(child: CircularProgressIndicator())
focusedDay: DateTime.now(), : TableCalendar(
calendarFormat: CalendarFormat.month, firstDay: _firstDate,
weekendDays: const [], lastDay: _lastDate,
rowHeight: 45, focusedDay: _initialDate,
availableGestures: AvailableGestures.none, calendarFormat: CalendarFormat.month,
onCalendarCreated: (controller) { weekendDays: const [],
_controller = controller; rowHeight: 45,
}, availableGestures: AvailableGestures.none,
calendarBuilders: CalendarBuilders( calendarBuilders: CalendarBuilders(
headerTitleBuilder: (context, dateTime) => CalendarHeader(dateFormat: DateFormat("MMMM, yyyy", context.isAr?"ar":"en"), dateTime: dateTime), headerTitleBuilder: (context, dateTime) => CalendarHeader(dateFormat: DateFormat("MMMM, yyyy"), dateTime: dateTime).onPress(() async {
dowBuilder: (context, dateTime) { final result = await showDatePicker(
final day = DateFormat("EE",context.isAr?"ar":"en").format(dateTime).toUpperCase(); context: context,
return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark? AppColor.neutral10:AppColor.neutral50)); initialDate: _initialDate,
}, firstDate: _firstDate,
defaultBuilder: (context, dateTime, _) { lastDate: _lastDate,
final day = DateFormat("d").format(dateTime); initialDatePickerMode: DatePickerMode.year,
return CalendarDaysCard(day: day); );
}, await snapshot.getCalenderRequests(from: DateTime(result.year, result.month), to: DateTime.now());
), if (result != null) {
daysOfWeekHeight: 35.toScreenHeight, _initialDate = result;
headerStyle: const HeaderStyle( setState(() {});
leftChevronVisible: false, }
rightChevronVisible: false, }),
formatButtonVisible: false, dowBuilder: (context, dateTime) {
headerPadding: EdgeInsets.all(0), final day = DateFormat("EE").format(dateTime).toUpperCase();
), return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50));
calendarStyle: CalendarStyle( },
isTodayHighlighted: false, defaultBuilder: (context, dateTime, _) {
defaultTextStyle: AppTextStyles.bodyText, final day = DateFormat("d").format(dateTime);
defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30), return CalendarDaysCard(
), day: day,
fill: snapshot.calendarRequests.requestsDetails?.firstWhere(
(element) => (element.date != null) && (DateTime.tryParse(element.date)?.difference(dateTime)?.inDays == 0),
orElse: () => null,
) !=
null,
);
},
),
daysOfWeekHeight: 35.toScreenHeight,
headerStyle: const HeaderStyle(
leftChevronVisible: false,
rightChevronVisible: false,
formatButtonVisible: false,
headerPadding: EdgeInsets.all(0),
),
calendarStyle: CalendarStyle(
isTodayHighlighted: false,
defaultTextStyle: AppTextStyles.bodyText,
defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30),
),
),
), ),
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -70,17 +103,19 @@ class _MonthlyFragmentState extends State<MonthlyFragment> {
children: [ children: [
const CircleAvatar(backgroundColor: AppColor.primary40, radius: 8), const CircleAvatar(backgroundColor: AppColor.primary40, radius: 8),
8.width, 8.width,
context.translation.myRequests.heading6(context), "My Requests".heading6(context),
], ],
), ),
16.height, 16.height,
Row(
children: [ /// TODO : TBD
const CircleAvatar(backgroundColor: AppColor.green50, radius: 8), // Row(
8.width, // children: [
context.translation.myTeamRequest.heading6(context), // const CircleAvatar(backgroundColor: AppColor.green50, radius: 8),
], // 8.width,
), // "My Team Requests".heading6(context),
// ],
// ),
], ],
), ),
], ],

@ -1,12 +1,17 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart'; import 'package:table_calendar/table_calendar.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_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_color.dart';
import '../../../../controllers/providers/api/all_requests_provider.dart';
import '../requests/asset_item_view.dart';
import '../requests/gas_refill_item_view.dart';
import '../requests/ppm_item_view.dart';
import '../requests/service_request_item_view.dart';
import 'calender_days_card.dart'; import 'calender_days_card.dart';
class WeeklyFragment extends StatefulWidget { class WeeklyFragment extends StatefulWidget {
@ -19,12 +24,15 @@ class WeeklyFragment extends StatefulWidget {
} }
class _WeeklyFragmentState extends State<WeeklyFragment> { class _WeeklyFragmentState extends State<WeeklyFragment> {
DateTime currentDateTime = DateTime.now(); DateTime _initialDate, _firstDate, _lastDate;
PageController _controller;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_initialDate = DateTime.now();
_firstDate = DateTime.utc(2010, 10, 16);
_lastDate = DateTime.utc(2030, 3, 14);
Provider.of<AllRequestsProvider>(context, listen: false).getCalenderRequests(from: DateTime.now().subtract(const Duration(days: 7)), to: DateTime.now());
} }
@override @override
@ -35,68 +43,106 @@ class _WeeklyFragmentState extends State<WeeklyFragment> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SingleChildScrollView( return SingleChildScrollView(
child: Column( child: Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
mainAxisSize: MainAxisSize.min, return Column(
children: [ mainAxisSize: MainAxisSize.min,
TableCalendar( children: [
firstDay: DateTime.utc(2010, 10, 16), snapshot.isCalendarLoading
lastDay: DateTime.utc(2030, 3, 14), ? const Center(child: CircularProgressIndicator())
focusedDay: DateTime.now(), : TableCalendar(
calendarFormat: CalendarFormat.week, firstDay: _firstDate,
weekendDays: const [], lastDay: _lastDate,
onCalendarCreated: (controller) { focusedDay: _initialDate,
_controller = controller; calendarFormat: CalendarFormat.week,
}, weekendDays: const [],
calendarBuilders: CalendarBuilders( onCalendarCreated: (controller) {},
headerTitleBuilder: (context, dateTime) => Column( calendarBuilders: CalendarBuilders(
crossAxisAlignment: CrossAxisAlignment.stretch, headerTitleBuilder: (context, dateTime) => Column(
children: [ crossAxisAlignment: CrossAxisAlignment.stretch,
DateFormat("EEEE, d MMMM, yyyy", context.isAr?"ar":"en").format(dateTime).heading5(context), children: [
8.height, DateFormat("EEEE, d MMMM, yyyy").format(dateTime).heading5(context),
const Divider().defaultStyle(context), 8.height,
], const Divider().defaultStyle(context),
), ],
dowBuilder: (context, dateTime) { ),
final day = DateFormat("EE", context.isAr?"ar":"en").format(dateTime).toUpperCase(); dowBuilder: (context, dateTime) {
return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: context.isDark? AppColor.neutral10:AppColor.neutral50)); final day = DateFormat("EE").format(dateTime).toUpperCase();
}, return Align(alignment: Alignment.center, child: day.bodyText(context).custom(color: AppColor.neutral50));
defaultBuilder: (context, dateTime, _) { },
final day = DateFormat("d").format(dateTime); defaultBuilder: (context, dateTime, _) {
return CalendarDaysCard(day: day); final day = DateFormat("d").format(dateTime);
return CalendarDaysCard(
day: day,
fill: snapshot.calendarRequests.requestsDetails?.firstWhere(
(element) => (element.date != null) && (DateTime.tryParse(element.date)?.difference(dateTime)?.inDays == 0),
orElse: () => null,
) !=
null,
);
},
),
daysOfWeekHeight: 35.toScreenHeight,
headerStyle: const HeaderStyle(leftChevronVisible: false, rightChevronVisible: false, formatButtonVisible: false),
calendarStyle: CalendarStyle(
isTodayHighlighted: false,
defaultTextStyle: AppTextStyles.bodyText,
defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30),
),
),
if (snapshot.calendarRequests?.requestsDetails?.isNotEmpty ?? false) const Divider().defaultStyle(context),
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) {
final list = snapshot.calendarRequests.requestsDetails;
if (snapshot.isCalendarLoading) return const SizedBox().toRequestShimmer(cxt, snapshot.isCalendarLoading);
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: snapshot.isCalendarLoading ? 6 : snapshot.calendarRequests.requestsDetails.length,
), ),
daysOfWeekHeight: 35.toScreenHeight, // TableCalendar(
headerStyle: const HeaderStyle(leftChevronVisible: false, rightChevronVisible: false, formatButtonVisible: false), // headerVisible: false,
calendarStyle: CalendarStyle( // calendarFormat: CalendarFormat.week,
isTodayHighlighted: false, // firstDay: DateTime.utc(2010, 10, 16),
defaultTextStyle: AppTextStyles.bodyText, // lastDay: DateTime.utc(2030, 3, 14),
defaultDecoration: const BoxDecoration(shape: BoxShape.circle, color: AppColor.neutral30), // focusedDay: currentDateTime,
), // currentDay: currentDateTime,
), // rowHeight: 37,
// TableCalendar( // calendarStyle: CalendarStyle(
// headerVisible: false, // todayDecoration: cellDecoration(),
// calendarFormat: CalendarFormat.week, // todayTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// firstDay: DateTime.utc(2010, 10, 16), // selectedTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// lastDay: DateTime.utc(2030, 3, 14), // rangeStartTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// focusedDay: currentDateTime, // rangeEndTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)),
// currentDay: currentDateTime, // ),
// rowHeight: 37, // daysOfWeekStyle: DaysOfWeekStyle(
// calendarStyle: CalendarStyle( // weekdayStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50),
// todayDecoration: cellDecoration(), // weekendStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50),
// todayTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)), // ),
// selectedTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)), // availableGestures: AvailableGestures.none,
// rangeStartTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)), // ),
// rangeEndTextStyle: AppTextStyles.bodyText.copyWith(color: const Color(0xFF2B353E)), ],
// ), ).toShadowContainer(context);
// daysOfWeekStyle: DaysOfWeekStyle( }),
// weekdayStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50), ).paddingOnly(start: 16, end: 16);
// weekendStyle: AppTextStyles.bodyText.copyWith(color: AppColor.neutral50),
// ),
// availableGestures: AvailableGestures.none,
// ),
],
).toShadowContainer(context),
);
} }
BoxDecoration cellDecoration({Color color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle); BoxDecoration cellDecoration({Color color}) => BoxDecoration(color: color ?? Colors.transparent, shape: BoxShape.circle);

@ -2,10 +2,13 @@ import 'package:flutter/material.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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/text_extensions.dart';
import 'package:test_sa/extensions/widget_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/all_requests_and_count_model.dart';
import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class AssetItemView extends StatelessWidget { class AssetItemView extends StatelessWidget {
final RequestsDetails request; final RequestsDetails request;
@ -15,9 +18,24 @@ class AssetItemView extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween, // mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(label: request.priority, textColor: AColors.getRequestStatusTextColorByName(request.priority), backgroundColor: AColors.getRequestStatusColorByName(request.priority)),
8.width,
StatusLabel(
label: request.status,
textColor: AColors.getRequestStatusTextColorByName(request.status),
backgroundColor: AColors.getRequestStatusColorByName(request.status),
),
1.width.expanded,
Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
],
),
8.height,
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

@ -5,7 +5,9 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_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/all_requests_and_count_model.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class GasRefillItemView extends StatelessWidget { class GasRefillItemView extends StatelessWidget {
final RequestsDetails request; final RequestsDetails request;
@ -17,22 +19,21 @@ class GasRefillItemView extends StatelessWidget {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
// Row( Row(
// crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
// children: [ children: [
// /// TBD StatusLabel(
// // StatusLabel( label: request.priority,
// // label: , // id: ,
// // id: , textColor: AColors.getRequestStatusTextColorByName(request.priority),
// // textColor: AColors.getPriorityStatusTextColor(), backgroundColor: AColors.getRequestStatusColorByName(request.priority)),
// // backgroundColor: AColors.getPriorityStatusColor()), 8.width,
// 8.width, StatusLabel(label: request.status, textColor: AColors.getRequestStatusTextColorByName(request.status), backgroundColor: AColors.getRequestStatusColorByName(request.status)),
// StatusLabel(label: item.status.name, textColor: AColors.getRequestStatusTextColor(item.status.value), backgroundColor: AColors.getRequestStatusColor(item.status.value)), 1.width.expanded,
// 1.width.expanded, Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
// Text(item.startDate != null ? item.startDate.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), ],
// ], ),
// ), 8.height,
// 8.height,
Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text( Text(
'${context.translation.gasType}: ${request.gasType}', '${context.translation.gasType}: ${request.gasType}',

@ -8,7 +8,9 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.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/enums/user_types.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/pages/user/visits/visit_details.dart'; import 'package:test_sa/views/pages/user/visits/visit_details.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class PpmItemView extends StatelessWidget { class PpmItemView extends StatelessWidget {
final RequestsDetails request; final RequestsDetails request;
@ -20,24 +22,21 @@ class PpmItemView extends StatelessWidget {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
// Row( Row(
// children: [ crossAxisAlignment: CrossAxisAlignment.start,
// // StatusLabel( children: [
// // label: visit.priority.name, StatusLabel(label: request.priority, textColor: AColors.getRequestStatusTextColorByName(request.priority), backgroundColor: AColors.getRequestStatusColorByName(request.priority)),
// // id: visit.priority.id, 8.width,
// // textColor: AColors.getPriorityStatusTextColor(visit.priority.id), StatusLabel(
// // backgroundColor: AColors.getPriorityStatusColor(visit.priority.id)), label: request.status,
// // 8.width, textColor: AColors.getRequestStatusTextColorByName(request.status),
// StatusLabel( backgroundColor: AColors.getRequestStatusColorByName(request.status),
// label: visit.status.name, ),
// id: visit.status.id, 1.width.expanded,
// textColor: AColors.getRequestStatusTextColorByName(visit.status.name), Text(request.date?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
// backgroundColor: AColors.getRequestStatusColorByName(visit.status.name), ],
// ), ),
// 1.width.expanded, 8.height,
// ],
// ),
// 8.height,
Text("PPMs Request", style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), Text("PPMs Request", style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height, 8.height,
Text( Text(

@ -1,10 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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/text_extensions.dart';
import 'package:test_sa/extensions/widget_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/all_requests_and_count_model.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class ServiceRequestItemView extends StatelessWidget { class ServiceRequestItemView extends StatelessWidget {
final RequestsDetails request; final RequestsDetails request;
@ -17,21 +19,17 @@ class ServiceRequestItemView extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
// Row( Row(
// crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
// children: [ children: [
// StatusLabel( StatusLabel(label: request.priority, textColor: AColors.getRequestStatusTextColorByName(request.priority), backgroundColor: AColors.getRequestStatusColorByName(request.priority)),
// label: request.priority.name, 8.width,
// id: request.priority.id, StatusLabel(label: request.status, textColor: AColors.getRequestStatusTextColorByName(request.status), backgroundColor: AColors.getRequestStatusColorByName(request.status)),
// textColor: AColors.getPriorityStatusTextColor(request.priority.id), 1.width.expanded,
// backgroundColor: AColors.getPriorityStatusColor(request.priority.id)), Text(request.date.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),
// 8.width, ],
// StatusLabel(label: request.statusLabel, textColor: AColors.getRequestStatusTextColor(request.statusValue), backgroundColor: AColors.getRequestStatusColor(request.statusValue)), ),
// 1.width.expanded, 8.height,
// 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.serviceRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text( Text(
'${context.translation.assetName}: ${request.assetName}', '${context.translation.assetName}: ${request.assetName}',
@ -66,6 +64,6 @@ class ServiceRequestItemView extends StatelessWidget {
], ],
), ),
], ],
).toShadowContainer(context).onPress(() { }); ).toShadowContainer(context).onPress(() {});
} }
} }

@ -36,6 +36,8 @@ class AColors {
return AColors.statusYellow; return AColors.statusYellow;
case "high priority": case "high priority":
return AColors.statusRed; return AColors.statusRed;
// case "low priority":
// return AColors.statusGreen;
default: default:
return AColors.white; return AColors.white;
} }

@ -11,7 +11,7 @@ class StatusLabel extends StatelessWidget {
final Color textColor; final Color textColor;
final bool isPriority; final bool isPriority;
StatusLabel({Key key, this.id, this.label, this.backgroundColor, this.textColor, this.isPriority = false}) : super(key: key); StatusLabel({Key key, this.id=0, this.label, this.backgroundColor, this.textColor, this.isPriority = false}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -23,7 +23,6 @@ class StatusLabel extends StatelessWidget {
if (label.toLowerCase() == 'Closed'.toLowerCase()) label = context.translation.closed; if (label.toLowerCase() == 'Closed'.toLowerCase()) label = context.translation.closed;
if (label.toLowerCase() == 'Waiting for quotation'.toLowerCase()) label = context.translation.waitingForQuotation; if (label.toLowerCase() == 'Waiting for quotation'.toLowerCase()) label = context.translation.waitingForQuotation;
print("label:$label:$id");
return Container( return Container(
padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 10), padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 10),
decoration: ShapeDecoration( decoration: ShapeDecoration(

Loading…
Cancel
Save