dashboard apis added.

main_design2.0
Sikander Saleem 2 years ago
parent 8a097a1ed6
commit ff80897a3c

@ -32,6 +32,8 @@ class URLs {
static get getAssets => "$_baseUrl/Asset/GetAssets"; // get static get getAssets => "$_baseUrl/Asset/GetAssets"; // get
static get getAssetById => "$_baseUrl/Asset/GetAssetById?assetId="; // get static get getAssetById => "$_baseUrl/Asset/GetAssetById?assetId="; // get
static get getModels => "$_baseUrl/ModelDefinition/GetModelDefinitionAsset"; // get ?client=2 static get getModels => "$_baseUrl/ModelDefinition/GetModelDefinitionAsset"; // get ?client=2
static get getAllRequestsAndCount => "$_baseUrl/CallRequest/GetAllRequestsAndCount"; // get
// 08051 // 08051
static get getServiceRequests => "$_baseUrl/CallRequest/GetCallRequests"; // get static get getServiceRequests => "$_baseUrl/CallRequest/GetCallRequests"; // get
static get getServiceRequestById => "$_baseUrl/CallRequest/GetCallRequestById"; // get static get getServiceRequestById => "$_baseUrl/CallRequest/GetCallRequestById"; // get

@ -1,47 +1,213 @@
import 'dart:convert';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
class AllRequestsProvider extends ChangeNotifier { class AllRequestsProvider extends ChangeNotifier {
bool isLoading; bool isAllLoading = false;
bool isOpenLoading = false;
// Future<int> getAllRequests() async { bool isInProgressLoading = false;
// if (isLoading == true) return -2; bool isCloseLoading = false;
// isLoading = true; bool isOverdueLoading = false;
// if (serviceRequests?.isEmpty ?? false) notifyListeners(); bool isHighPriorityLoading = false;
// Response response;
// try { int stateCode;
// Map<String, dynamic> body = {};
// body.addAll(search.toMap()); AllRequestsAndCount allRequestsAndCount;
// body["pageNumber"] = (serviceRequests?.length ?? 0) ~/ pageItemNumber + 1; AllRequestsAndCount openRequests;
// body["pageSize"] = pageItemNumber; AllRequestsAndCount inProgressRequests;
// AllRequestsAndCount closeRequests;
// response = await ApiManager.instance.post( AllRequestsAndCount overdueRequests;
// URLs.getServiceRequests, AllRequestsAndCount highPriorityRequests;
// body: body,
// ); void getRequests() {
// getHighPriorityRequests();
// stateCode = response.statusCode; getOverdueRequests();
// if (response.statusCode >= 200 && response.statusCode < 300) { getOpenRequests();
// // client's request was successfully received getInProgressRequests();
// List requestsListJson = json.decode(response.body)["data"]; getCloseRequests();
// List<ServiceRequest> serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList(); }
// serviceRequests ??= [];
// serviceRequests.addAll(serviceRequestsPage); Future<int> getAllRequests() async {
// notifyListeners(); if (isAllLoading == true) return -2;
// if (serviceRequestsPage.length == pageItemNumber) { isAllLoading = true;
// nextPage = true; if (allRequestsAndCount == null) notifyListeners();
// } else { Response response;
// nextPage = false; try {
// } Map<String, dynamic> body = {
// } "typeTransaction": [1, 2, 3, 4],
// isLoading = false; "statusTransaction": [1, 2, 3],
// notifyListeners(); "priority": [0, 1],
// return response.statusCode; "displayData": [1]
// } catch (error) { };
// isLoading = false; response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
// stateCode = -1;
// notifyListeners(); stateCode = response.statusCode;
// return -1; if (response.statusCode >= 200 && response.statusCode < 300) {
// } allRequestsAndCount = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
// } notifyListeners();
}
isAllLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isAllLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getHighPriorityRequests() async {
if (isHighPriorityLoading == true) return -2;
isHighPriorityLoading = true;
if (highPriorityRequests == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {
"typeTransaction": [1, 2, 3, 4],
"statusTransaction": [1, 2, 3],
"priority": [0],
"displayData": []
};
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
highPriorityRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
print("highPriorityRequests:${highPriorityRequests.total}");
notifyListeners();
}
isHighPriorityLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isHighPriorityLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getOverdueRequests() async {
if (isOverdueLoading == true) return -2;
isOverdueLoading = true;
if (overdueRequests == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {
"typeTransaction": [1, 2, 3, 4],
"statusTransaction": [1, 2, 3],
"priority": [],
"displayData": [1]
};
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
overdueRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
notifyListeners();
}
isOverdueLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isOverdueLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getOpenRequests() async {
if (isOpenLoading == true) return -2;
isOpenLoading = true;
if (openRequests == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {
"typeTransaction": [1, 2, 3, 4],
"statusTransaction": [1],
"priority": [],
"displayData": []
};
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
openRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
notifyListeners();
}
isOpenLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isOpenLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getInProgressRequests() async {
if (isInProgressLoading == true) return -2;
isInProgressLoading = true;
if (inProgressRequests == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {
"typeTransaction": [1, 2, 3, 4],
"statusTransaction": [2],
"priority": [],
"displayData": []
};
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
inProgressRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
notifyListeners();
}
isInProgressLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isInProgressLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
Future<int> getCloseRequests() async {
if (isCloseLoading == true) return -2;
isCloseLoading = true;
if (closeRequests == null) notifyListeners();
Response response;
try {
Map<String, dynamic> body = {
"typeTransaction": [1, 2, 3, 4],
"statusTransaction": [3],
"priority": [],
"displayData": []
};
response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
closeRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"]);
notifyListeners();
}
isCloseLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isCloseLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
} }

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:shimmer/shimmer.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';
@ -20,6 +21,20 @@ extension WidgetExtensions on Widget {
Widget toExpanded({int flex = 1}) => Expanded(flex: flex, child: this); Widget toExpanded({int flex = 1}) => Expanded(flex: flex, child: this);
Widget toShimmer({bool isShow = true, double radius = 20}) => isShow
? Shimmer.fromColors(
baseColor: const Color(0xffe8eff0),
highlightColor: Colors.white,
child: ClipRRect(
borderRadius: BorderRadius.circular(radius),
child: Container(
color: Colors.white,
child: this,
),
),
)
: this;
Widget get toShadowContainer => Container( Widget get toShadowContainer => Container(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
decoration: ShapeDecoration( decoration: ShapeDecoration(

@ -0,0 +1,157 @@
class AllRequestsAndCount {
CountServiceRequest countServiceRequest;
CountServiceRequest countGasRefill;
CountServiceRequest countAssetTransfer;
CountServiceRequest countPPM;
DetailsStatusTotal detailsStatusTotal;
CountServiceRequest total;
List<RequestsDetails> requestsDetails;
AllRequestsAndCount({this.countServiceRequest, this.countGasRefill, this.countAssetTransfer, this.countPPM, this.detailsStatusTotal, this.total, this.requestsDetails});
AllRequestsAndCount.fromJson(Map<String, dynamic> json) {
countServiceRequest = json['countServiceRequest'] != null ? new CountServiceRequest.fromJson(json['countServiceRequest']) : null;
countGasRefill = json['countGasRefill'] != null ? new CountServiceRequest.fromJson(json['countGasRefill']) : null;
countAssetTransfer = json['countAssetTransfer'] != null ? new CountServiceRequest.fromJson(json['countAssetTransfer']) : null;
countPPM = json['countPPM'] != null ? new CountServiceRequest.fromJson(json['countPPM']) : null;
detailsStatusTotal = json['detailsStatusTotal'] != null ? new DetailsStatusTotal.fromJson(json['detailsStatusTotal']) : null;
total = json['total'] != null ? new CountServiceRequest.fromJson(json['total']) : null;
if (json['requestsDetails'] != null) {
requestsDetails = <RequestsDetails>[];
json['requestsDetails'].forEach((v) {
requestsDetails.add(new RequestsDetails.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.countServiceRequest != null) {
data['countServiceRequest'] = this.countServiceRequest.toJson();
}
if (this.countGasRefill != null) {
data['countGasRefill'] = this.countGasRefill.toJson();
}
if (this.countAssetTransfer != null) {
data['countAssetTransfer'] = this.countAssetTransfer.toJson();
}
if (this.countPPM != null) {
data['countPPM'] = this.countPPM.toJson();
}
if (this.detailsStatusTotal != null) {
data['detailsStatusTotal'] = this.detailsStatusTotal.toJson();
}
if (this.total != null) {
data['total'] = this.total.toJson();
}
if (this.requestsDetails != null) {
data['requestsDetails'] = this.requestsDetails.map((v) => v.toJson()).toList();
}
return data;
}
}
class CountServiceRequest {
int count;
CountServiceRequest({this.count});
CountServiceRequest.fromJson(Map<String, dynamic> json) {
count = json['count'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['count'] = this.count;
return data;
}
}
class DetailsStatusTotal {
int open;
int inProgress;
int closed;
DetailsStatusTotal({this.open, this.inProgress, this.closed});
DetailsStatusTotal.fromJson(Map<String, dynamic> json) {
open = json['open'];
inProgress = json['inProgress'];
closed = json['closed'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['open'] = this.open;
data['inProgress'] = this.inProgress;
data['closed'] = this.closed;
return data;
}
}
class RequestsDetails {
String nameOfType;
String status;
String statusReceiver;
String assetName;
String assetNo;
String requestType;
String requestNo;
String gasType;
String site;
String assetTransferFrom;
String assetTransferTo;
String assetSN;
String code;
RequestsDetails(
{this.nameOfType,
this.status,
this.statusReceiver,
this.assetName,
this.assetNo,
this.requestType,
this.requestNo,
this.gasType,
this.site,
this.assetTransferFrom,
this.assetTransferTo,
this.assetSN,
this.code});
RequestsDetails.fromJson(Map<String, dynamic> json) {
nameOfType = json['nameOfType'];
status = json['status'];
statusReceiver = json['statusReceiver'];
assetName = json['assetName'];
assetNo = json['assetNo'];
requestType = json['requestType'];
requestNo = json['requestNo'];
gasType = json['gasType'];
site = json['site'];
assetTransferFrom = json['assetTransferFrom'];
assetTransferTo = json['assetTransferTo'];
assetSN = json['assetSN'];
code = json['code'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['nameOfType'] = this.nameOfType;
data['status'] = this.status;
data['statusReceiver'] = this.statusReceiver;
data['assetName'] = this.assetName;
data['assetNo'] = this.assetNo;
data['requestType'] = this.requestType;
data['requestNo'] = this.requestNo;
data['gasType'] = this.gasType;
data['site'] = this.site;
data['assetTransferFrom'] = this.assetTransferFrom;
data['assetTransferTo'] = this.assetTransferTo;
data['assetSN'] = this.assetSN;
data['code'] = this.code;
return data;
}
}

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pie_chart/pie_chart.dart'; import 'package:pie_chart/pie_chart.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';
@ -18,36 +19,23 @@ class ProgressFragment extends StatelessWidget {
}; };
return Column( return Column(
children: [ children: [
Card( PieChart(
child: Stack( dataMap: statuses,
alignment: Alignment.center, animationDuration: const Duration(milliseconds: 500),
children: [ chartRadius: 190.toScreenWidth,
PieChart( colorList: [AColors.statusGreen, AColors.statusBlue, AColors.statusYellowLight],
dataMap: statuses, initialAngleInDegree: 270,
animationDuration: const Duration(milliseconds: 800), chartType: ChartType.ring,
chartRadius: 190.toScreenWidth, ringStrokeWidth: 40.toScreenWidth,
colorList: [AColors.statusGreen, AColors.statusBlue, AColors.statusYellowLight], centerText: "Total\n20",
initialAngleInDegree: 270, centerTextStyle: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
chartType: ChartType.ring, legendOptions: const LegendOptions(showLegends: false),
ringStrokeWidth: 40.toScreenWidth, chartValuesOptions: ChartValuesOptions(
legendOptions: const LegendOptions(showLegends: false), chartValueBackgroundColor: Colors.transparent,
chartValuesOptions: ChartValuesOptions( chartValueStyle: AppTextStyles.heading6.copyWith(color: AppColor.neutral20),
chartValueBackgroundColor: Colors.transparent, showChartValuesOutside: false,
chartValueStyle: AppTextStyles.heading6.copyWith(color: AppColor.neutral20), ),
showChartValuesOutside: true, ).paddingAll(8).toShadowContainer,
),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
"Total".heading5(context),
"20".heading6(context).custom(color: AppColor.neutral20),
],
)
],
).paddingAll(23),
),
], ],
).paddingOnly(start: 16, end: 16); ).paddingOnly(start: 16, end: 16);
} }

@ -1,5 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.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/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';
@ -15,71 +17,57 @@ class RequestsFragment extends StatelessWidget {
return Scaffold( return Scaffold(
// todo check here, nurse can add request not engineer // todo check here, nurse can add request not engineer
floatingActionButton: const AppFloatingActionButton(), floatingActionButton: const AppFloatingActionButton(),
body: GridView( body: Consumer<AllRequestsProvider>(
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16), builder: (context, snapshot, _) => GridView(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 237, crossAxisSpacing: 16, mainAxisSpacing: 16), padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
children: [ gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 237, crossAxisSpacing: 16, mainAxisSpacing: 16),
gridItem("12", "high_priority",context.translation.highPriorityRequests,context), children: [
gridItem("12", "overdue", context.translation.overdueRequests,context), gridItem(snapshot.highPriorityRequests?.total?.count?.toString() ?? "-", "high_priority", context.translation.highPriorityRequests, context, snapshot.isHighPriorityLoading),
gridItem("12", "new_request", context.translation.newRequests,context), gridItem(snapshot.overdueRequests?.total?.count?.toString() ?? "-", "overdue", context.translation.overdueRequests, context, snapshot.isOverdueLoading),
gridItem("12", "complete_request", context.translation.completedRequests ,context), gridItem(snapshot.openRequests?.total?.count?.toString() ?? "-", "new_request", context.translation.newRequests, context, snapshot.isOpenLoading),
], gridItem(snapshot.closeRequests?.total?.count?.toString() ?? "-", "complete_request", context.translation.completedRequests, context, snapshot.isCloseLoading),
],
),
), ),
); );
} }
Widget gridItem(String value, String icon, String title, BuildContext context) { Widget gridItem(String value, String icon, String title, BuildContext context, bool isLoading) {
return Container( return Column(
padding: const EdgeInsets.all(16), crossAxisAlignment: CrossAxisAlignment.start,
decoration: ShapeDecoration( children: [
color: Colors.white, Row(
shape: RoundedRectangleBorder( crossAxisAlignment: CrossAxisAlignment.start,
borderRadius: BorderRadius.circular(20), children: [
), Text(
shadows: const [ value,
BoxShadow( style: AppTextStyles.heading1.copyWith(color: AppColor.neutral70, height: 1),
color: Color(0x07000000), ).toShimmer(isShow: isLoading).expanded,
blurRadius: 14, 8.width,
offset: Offset(0, 0), SvgPicture.asset('assets/images/$icon.svg', height: 35, width: 35).toShimmer(isShow: isLoading),
spreadRadius: 0, ],
) ).expanded,
], Text(
), title,
child: Column( style: AppTextStyles.heading5.copyWith(color: AppColor.neutral50),
crossAxisAlignment: CrossAxisAlignment.start, ).toShimmer(isShow: isLoading),
children: [ 8.height,
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
value, context.translation.viewDetails,
style: AppTextStyles.heading1.copyWith(color: AppColor.neutral70, height: 1), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
).expanded, ),
SvgPicture.asset('assets/images/$icon.svg', height: 35, width: 35), 4.width,
], const Icon(
).expanded, Icons.arrow_forward,
Text( color: Color(0xFF4A8DB7),
title, size: 14,
style: AppTextStyles.heading5.copyWith(color: AppColor.neutral50), )
), ],
8.height, ).toShimmer(isShow: isLoading),
Row( ],
mainAxisSize: MainAxisSize.min, ).toShadowContainer;
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,
)
],
),
],
),
);
} }
} }

@ -1,4 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.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/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';
@ -24,6 +26,7 @@ class _DashboardPageState extends State<DashboardPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
Provider.of<AllRequestsProvider>(context, listen: false).getRequests();
} }
@override @override

@ -12,6 +12,7 @@ import '../../../providers/service_request_providers/equipment_status_provider.d
class EquipmentStatusButtons extends StatefulWidget { class EquipmentStatusButtons extends StatefulWidget {
final Function(Lookup) onSelect; final Function(Lookup) onSelect;
const EquipmentStatusButtons({Key key, this.onSelect}) : super(key: key); const EquipmentStatusButtons({Key key, this.onSelect}) : super(key: key);
@override @override

Loading…
Cancel
Save