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

main_design2.0
nextwo 2 years ago
commit 9aba167e1f

@ -148,12 +148,16 @@ class AssetTransferProvider extends ChangeNotifier {
}
}
Future<int> updateRequest({@required AssetTransfer assetTransfer}) async {
Future<int> updateRequest(BuildContext context, {@required AssetTransfer assetTransfer}) async {
Response response;
try {
assetTransfer.receiverStartDate = assetTransfer.timer?.startAt?.toIso8601String();
assetTransfer.receiverEndDate = assetTransfer.timer?.endAt?.toIso8601String();
assetTransfer.receiverWorkingHours = (((assetTransfer.timer?.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2);
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
assetTransfer.receiverStartDate = assetTransfer.receiverTimer?.startAt?.toIso8601String();
assetTransfer.receiverEndDate = assetTransfer.receiverTimer?.endAt?.toIso8601String();
assetTransfer.receiverWorkingHours = (((assetTransfer.receiverTimer?.durationInSecond ?? 0) * 60) * 60).toStringAsFixed(2);
assetTransfer.senderStartDate = assetTransfer.senderTimer?.startAt?.toIso8601String();
assetTransfer.senderEndDate = assetTransfer.senderTimer?.endAt?.toIso8601String();
assetTransfer.senderWorkingHours = (((assetTransfer.senderTimer?.durationInSecond ?? 0) * 60) * 60).toStringAsFixed(2);
response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: assetTransfer.toJson());
print(response.body);
@ -166,15 +170,21 @@ class AssetTransferProvider extends ChangeNotifier {
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
Navigator.of(context).pop();
// oldModel.fromDeviceTransfer(
// DeviceTransfer.fromJson(
// json.decode(utf8.decode(response.bodyBytes))[0]
// )
// );
notifyListeners();
} else {
Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest} :${json.decode(response.body)['message']}");
}
Navigator.pop(context);
return response.statusCode;
} catch (error) {
Navigator.pop(context);
return -1;
}
}

@ -40,9 +40,9 @@ class NotificationsProvider extends ChangeNotifier {
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getSystemNotifications({
@required String host,
@required User user,
@required int hospitalId,
String host,
User user,
int hospitalId,
}) async {
if (isLoading == true) return -2;
isLoading = true;

@ -66,7 +66,8 @@ class AssetTransfer {
this.senderSiteName,
this.supplierId,
this.supplierName,
this.timer,
this.senderTimer,
this.receiverTimer,
});
AssetTransfer.fromJson(dynamic json) {
@ -107,10 +108,15 @@ class AssetTransfer {
receiverTravelingHours = json['receiverTravelingHours'];
receiverEngSignature = json['receiverEngSignature'];
try {
timer = TimerModel(startAt: DateTime.tryParse(receiverStartDate ?? ""), endAt: DateTime.tryParse(receiverEndDate));
if (timer.endAt != null && timer.startAt != null) {
timer.durationInSecond = (timer.endAt.difference(timer.startAt))?.inSeconds;
receiverWorkingHours = (((timer.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2);
receiverTimer = TimerModel(startAt: DateTime.tryParse(receiverStartDate ?? ""), endAt: DateTime.tryParse(receiverEndDate));
senderTimer = TimerModel(startAt: DateTime.tryParse(senderStartDate ?? ""), endAt: DateTime.tryParse(senderEndDate));
if (receiverTimer.endAt != null && receiverTimer.startAt != null) {
receiverTimer.durationInSecond = (receiverTimer.endAt.difference(receiverTimer.startAt))?.inSeconds;
receiverWorkingHours = (((receiverTimer.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2);
}
if (senderTimer.endAt != null && senderTimer.startAt != null) {
senderTimer.durationInSecond = (senderTimer.endAt.difference(senderTimer.startAt))?.inSeconds;
senderWorkingHours = (((senderTimer.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2);
}
} catch (e) {
print(e);
@ -206,7 +212,8 @@ class AssetTransfer {
bool applied;
String createdOn;
String modifiedOn;
TimerModel timer = TimerModel();
TimerModel senderTimer = TimerModel();
TimerModel receiverTimer = TimerModel();
AssetTransfer copyWith({
num id,
@ -268,7 +275,8 @@ class AssetTransfer {
int manufacturerId,
String manufacturerName,
String destDepartmentName,
TimerModel timer,
TimerModel senderTimer,
TimerModel receiverTimer,
}) =>
AssetTransfer(
id: id ?? this.id,
@ -328,7 +336,8 @@ class AssetTransfer {
modelId: modelId ?? this.modelId,
modelName: modelName ?? this.modelName,
manufacturerId: manufacturerId ?? this.manufacturerId,
timer: timer ?? this.timer,
senderTimer: senderTimer ?? this.senderTimer,
receiverTimer: receiverTimer ?? this.receiverTimer,
manufacturerName: manufacturerName ?? this.manufacturerName);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
@ -439,6 +448,7 @@ class AssetTransfer {
}
fromDetails(AssetTransfer assetTransfer) {
if (assetTransfer == null) return;
id = assetTransfer.id;
transferNo = assetTransfer.transferNo;
transferCode = assetTransfer.transferCode;
@ -497,6 +507,8 @@ class AssetTransfer {
modelName = assetTransfer.modelName;
manufacturerId = assetTransfer.manufacturerId;
manufacturerName = assetTransfer.manufacturerName;
senderTimer = assetTransfer.senderTimer;
receiverTimer = assetTransfer.receiverTimer;
}
Future<bool> validate(BuildContext context) async {

@ -40,10 +40,10 @@ class AppDrawer extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.all(1), // Border radius
child: ClipOval(
child: (snapshot.user.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName)
: snapshot.profileImage != null
child: snapshot.profileImage != null
? Image.file(snapshot.profileImage)
: (snapshot.user.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName)
: const Icon(
Icons.person,
size: 50,

@ -1,9 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/new_views/pages/new_gas_refill_request_page.dart';
import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart';
import 'package:test_sa/views/pages/user/requests/create_service_request_page.dart';
@ -32,6 +35,7 @@ class _AppFloatingActionButtonState extends State<AppFloatingActionButton> {
@override
Widget build(BuildContext context) {
final user = Provider.of<UserProvider>(context, listen: false).user;
const duration = Duration(milliseconds: 250);
return Column(
mainAxisAlignment: MainAxisAlignment.end,
@ -58,11 +62,11 @@ class _AppFloatingActionButtonState extends State<AppFloatingActionButton> {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
fabItem(context.translation.gasRefillRequest, "gas_refill_request", NewGasRefillRequestPage.routeName),
1.divider.paddingOnly(top: 16, bottom: 16),
if (user.type == UsersTypes.normal_user) fabItem(context.translation.gasRefillRequest, "gas_refill_request", NewGasRefillRequestPage.routeName),
if (user.type == UsersTypes.normal_user) 1.divider.paddingOnly(top: 16, bottom: 16),
fabItem(context.translation.transferRequest, "transfer_request", RequestDeviceTransfer.id),
1.divider.paddingOnly(top: 16, bottom: 16),
fabItem(context.translation.serviceRequest, "service_request", CreateServiceRequestPage.id),
if (user.type == UsersTypes.normal_user) 1.divider.paddingOnly(top: 16, bottom: 16),
if (user.type == UsersTypes.normal_user) fabItem(context.translation.serviceRequest, "service_request", CreateServiceRequestPage.id),
],
),
),

@ -21,13 +21,16 @@ class ProgressFragment extends StatelessWidget {
@override
Widget build(BuildContext context) {
const Map<String, double> statuses = {
"Completed": 12,
"In Progress": 12,
"Open": 12,
};
return Consumer<AllRequestsProvider>(
builder: (context, snapshot, _) => Column(
builder: (context, snapshot, _) {
Map<String, double> statuses = {
"Completed": snapshot.completedRequests?.requestsDetails?.length?.toDouble() ?? 0.0,
"In Progress": snapshot.inProgressRequests?.requestsDetails?.length?.toDouble() ?? 0.0,
"Open": snapshot.openRequests.requestsDetails?.length?.toDouble() ?? 0.0,
};
int total = (snapshot.completedRequests?.requestsDetails?.length ?? 0) + (snapshot.inProgressRequests?.requestsDetails?.length ?? 0) + (snapshot.openRequests?.requestsDetails?.length ?? 0);
return Column(
children: [
AspectRatio(
aspectRatio: 398 / 237,
@ -39,11 +42,12 @@ class ProgressFragment extends StatelessWidget {
initialAngleInDegree: 270,
chartType: ChartType.ring,
ringStrokeWidth: 40.toScreenWidth,
centerText: "${context.translation.total}\n20",
centerText: "${context.translation.total}\n$total",
centerTextStyle: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
legendOptions: const LegendOptions(showLegends: false),
chartValuesOptions: ChartValuesOptions(
chartValueBackgroundColor: Colors.transparent,
chartValueBackgroundColor: Colors.white,
showChartValuesInPercentage: true,
chartValueStyle: AppTextStyles.heading6.copyWith(color: AppColor.neutral20),
showChartValuesOutside: true,
),
@ -87,7 +91,8 @@ class ProgressFragment extends StatelessWidget {
),
).expanded,
],
),
);
},
);
}
//

@ -1,6 +1,7 @@
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/controllers/providers/api/notifications_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
@ -28,6 +29,7 @@ class _DashboardPageState extends State<DashboardPage> {
void initState() {
super.initState();
Provider.of<AllRequestsProvider>(context, listen: false).getRequests();
Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications();
}
@override
@ -54,10 +56,10 @@ class _DashboardPageState extends State<DashboardPage> {
child: Padding(
padding: const EdgeInsets.all(1), // Border radius
child: ClipOval(
child: (snapshot.user.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName)
: snapshot.profileImage != null
child: snapshot.profileImage != null
? Image.file(snapshot.profileImage)
: (snapshot.user.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName)
: const Icon(
Icons.person,
size: 24,

@ -45,6 +45,8 @@ class AColors {
static Color getRequestStatusColorByName(String status) {
switch ((status ?? "").toLowerCase()) {
case "medium":
return AColors.statusBlue;
case "in progress":
return AColors.statusYellowLight;
case "complete":

@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
@ -9,7 +8,6 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
@ -124,8 +122,8 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
? StatusLabel(
label: _model?.senderMachineStatusName,
id: _model?.senderMachineStatusId,
textColor: AColors.getRequestStatusTextColor(getIdstatus(_model.senderMachineStatusName)),
backgroundColor: AColors.getRequestStatusColor(getIdstatus(_model.senderMachineStatusName)))
textColor: AColors.getRequestStatusTextColorByName(_model.senderMachineStatusName),
backgroundColor: AColors.getRequestStatusColorByName(_model.senderMachineStatusName))
: null,
),
8.height,
@ -143,8 +141,8 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
? StatusLabel(
label: _model?.receiverMachineStatusName ?? "",
id: _model?.receiverMachineStatusId,
textColor: AColors.getRequestStatusTextColor(getIdstatus(_model.receiverMachineStatusName)),
backgroundColor: AColors.getRequestStatusColor(getIdstatus(_model.receiverMachineStatusName)))
textColor: AColors.getRequestStatusTextColorByName(_model.receiverMachineStatusName),
backgroundColor: AColors.getRequestStatusColorByName(_model.receiverMachineStatusName))
: null,
),
],
@ -185,18 +183,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
if (isSender
? (_model?.senderMachineStatusName?.toLowerCase() != "closed" && _model?.senderMachineStatusName?.toLowerCase() != "completed")
: (_model?.receiverMachineStatusName?.toLowerCase() != "closed" && _model?.receiverMachineStatusName?.toLowerCase() != "completed"))
CircleAvatar(
radius: 25,
backgroundColor: AppColor.neutral30,
child: CircleAvatar(
radius: 24,
backgroundColor: Colors.white,
child: Padding(
padding: const EdgeInsets.only(left: 3.0),
child: SvgPicture.asset('assets/images/update.svg'),
),
),
).onPress(isSender
"edit".toSvgAsset(height: 48, width: 48).onPress(isSender
? () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender)));
}
@ -216,18 +203,4 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
],
).toShadowContainer(context);
}
int getIdstatus(String status) {
switch (status) {
case "Closed":
return 3;
break;
case "Open":
return 1;
break;
case "In Progress":
return 2;
break;
}
}
}

@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@ -48,11 +49,11 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
_update() async {
if (_formModel?.timer?.startAt == null) {
if ((widget.isSender && _formModel?.senderTimer?.startAt == null) || (!widget.isSender && _formModel?.receiverTimer?.startAt == null)) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
}
if (_formModel?.timer?.endAt == null) {
if ((widget.isSender && _formModel?.senderTimer?.endAt == null) || (!widget.isSender && _formModel?.receiverTimer?.startAt == null)) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
@ -62,19 +63,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
return false;
}
_formKey.currentState.save();
_isLoading = true;
setState(() {});
int status = await _deviceTransferProvider.updateRequest(assetTransfer: _formModel);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(
msg: context.translation.successfulRequestMessage,
);
_validate = false;
Navigator.of(context).pop();
}
await _deviceTransferProvider.updateRequest(context, assetTransfer: _formModel);
}
// @override
@ -122,6 +111,10 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
AppTextFormField(
initialValue: widget.isSender ? _formModel.senderTravelingHours : _formModel.receiverTravelingHours,
labelText: context.translation.travelingHours,
onChange: (text) {
log(widget.isSender ? _formModel.senderStartDate : _formModel.receiverStartDate);
log(widget.isSender ? _formModel.senderEndDate : _formModel.receiverEndDate);
},
onSaved: (value) {
widget.isSender ? _formModel.senderTravelingHours : _formModel.receiverTravelingHours = value;
//_formModel?.workingHours = double.tryParse(value);
@ -133,10 +126,14 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
8.height,
AppTimer(
label: context.translation.workingHours,
timer: _formModel.timer,
enabled: _formModel.receiverEndDate == null,
timer: widget.isSender ? _formModel.senderTimer : _formModel.receiverTimer,
enabled: widget.isSender ? _formModel.senderEndDate == null : _formModel.receiverEndDate == null,
onChange: (timer) async {
_formModel.timer = timer;
if (widget.isSender) {
_formModel.senderTimer = timer;
} else {
_formModel.receiverTimer = timer;
}
return true;
},
),
@ -175,7 +172,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
8.height,
ESignature(
title: "Signature",
oldSignature: widget.isSender ? widget.model.senderEngSignature : widget.model.receiverEngSignature,
oldSignature: widget.isSender ? widget.model?.senderEngSignature : widget.model?.receiverEngSignature,
newSignature: _signature,
onSaved: (signature) {
_signature = signature;

@ -71,10 +71,10 @@ class _ProfilePageState extends State<ProfilePage> {
child: Padding(
padding: const EdgeInsets.all(1), // Border radius
child: ClipOval(
child: (snapshot.user.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName)
: snapshot.profileImage != null
child: snapshot.profileImage != null
? Image.file(snapshot.profileImage)
: (snapshot.user.profilePhotoName?.isNotEmpty ?? false)
? Image.network(snapshot.user.profilePhotoName)
: const Icon(
Icons.person,
size: 50,

Loading…
Cancel
Save