all the changes are implemented

design_3.0_latest
WaseemAbbasi22 1 year ago
parent 38ce0bd9a0
commit 4c9a730e24

@ -54,7 +54,7 @@ class BaseStep extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SizedBox(
width: (radius * 2) + (padding ?? 0),
width: (radius * 2) + (padding),
height: radius * 2.5 + 25,
child: CustomMultiChildLayout(
delegate: BaseStepDelegate(
@ -67,7 +67,7 @@ class BaseStep extends StatelessWidget {
child: Material(
color: Colors.transparent,
clipBehavior: Clip.antiAlias,
borderRadius: BorderRadius.circular(stepRadius ?? 0),
borderRadius: BorderRadius.circular(stepRadius),
child: Container(
width: radius * 2,
height: radius * 2,
@ -89,14 +89,14 @@ class BaseStep extends StatelessWidget {
Color _handleColor(BuildContext context, bool isFinished, bool isActive,
bool isAlreadyReached) {
if (isActive) {
return activeStepBackgroundColor ?? Colors.transparent;
return activeStepBackgroundColor;
} else {
if (isFinished) {
return AppColor.primary10;
} else if (isAlreadyReached) {
return AppColor.primary10;
} else {
return unreachedBackgroundColor ?? Colors.transparent;
return unreachedBackgroundColor;
}
}
}
@ -121,7 +121,7 @@ class BaseStep extends StatelessWidget {
Widget _buildStepTitle(BuildContext context) {
return SizedBox(
width: (radius * 4.5) +
(padding ?? 0),
(padding),
child: step.customTitle,
);
}

@ -103,9 +103,7 @@ class _CustomStepperState extends State<CustomStepper> {
_padding = _padding!.add(EdgeInsetsDirectional.symmetric(
horizontal: lineStyle!.lineLength / 2));
}
if (widget.padding != null) {
_padding!.add(widget.padding);
}
_padding!.add(widget.padding);
super.initState();
}

@ -613,20 +613,20 @@ class ServiceRequestsProvider extends ChangeNotifier {
}
Future<ServiceRequest?> getServiceRequestObjectById({required String requestId}) async {
// try {
isDetialLoading = true;
Response response = await ApiManager.instance.get(URLs.getServiceRequestById + "?callRequestId=$requestId");
if (response.statusCode >= 200 && response.statusCode < 300) {
isDetialLoading = false;
return ServiceRequest.fromJson(json.decode(response.body)["data"]);
} else {
try {
isDetialLoading = true;
Response response = await ApiManager.instance.get(URLs.getServiceRequestById + "?callRequestId=$requestId");
if (response.statusCode >= 200 && response.statusCode < 300) {
isDetialLoading = false;
return ServiceRequest.fromJson(json.decode(response.body)["data"]);
} else {
isDetialLoading = false;
return null;
}
} catch (error) {
isDetialLoading = false;
return null;
}
// } catch (error) {
isDetialLoading = false;
return null;
// }
}
Future<Map<String, dynamic>> getServiceRequestById({required String requestId}) async {

@ -8,13 +8,7 @@ class ArrivalVerificationTypeModel {
int? responseCode;
bool? isSuccess;
ArrivalVerificationTypeModel(
{this.data,
this.message,
this.title,
this.innerMessage,
this.responseCode,
this.isSuccess});
ArrivalVerificationTypeModel({this.data, this.message, this.title, this.innerMessage, this.responseCode, this.isSuccess});
ArrivalVerificationTypeModel.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
@ -29,7 +23,6 @@ class ArrivalVerificationTypeModel {
responseCode = json['responseCode'];
isSuccess = json['isSuccess'];
}
}
class ArrivalTypeData {
@ -44,24 +37,12 @@ class ArrivalTypeData {
dynamic modifiedBy;
dynamic modifiedDate;
ArrivalTypeData(
{this.assetGroupId,
this.verificationTypeId,
this.verificationTypes,
this.id,
this.description,
this.createdBy,
this.createdDate,
this.modifiedBy,
this.modifiedDate});
ArrivalTypeData({this.assetGroupId, this.verificationTypeId, this.verificationTypes, this.id, this.description, this.createdBy, this.createdDate, this.modifiedBy, this.modifiedDate});
ArrivalTypeData.fromJson(Map<String, dynamic> json) {
assetGroupId = json['assetGroupId'];
verificationTypeId = json['verificationTypeId'];
verificationTypes = json['verificationTypes'] != null
? VerificationTypes.fromJson(json['verificationTypes'])
: null;
verificationTypes = json['verificationTypes'] != null ? VerificationTypes.fromJson(json['verificationTypes']) : null;
id = json['id'];
description = json['description'];
createdBy = json['createdBy'];
@ -69,6 +50,7 @@ class ArrivalTypeData {
modifiedBy = json['modifiedBy'];
modifiedDate = json['modifiedDate'];
}
Map<String, dynamic> toJson() {
return {
'assetGroupId': assetGroupId,
@ -82,17 +64,15 @@ class ArrivalTypeData {
'modifiedDate': modifiedDate,
};
}
}
class VerificationTypes {
int? id;
String? name;
int? value;
String?icon;
String? icon;
VerificationTypes({this.id, this.name, this.value,this.icon});
VerificationTypes({this.id, this.name, this.value, this.icon});
VerificationTypes.fromJson(Map<String, dynamic> json) {
id = json['id'];
@ -100,14 +80,7 @@ class VerificationTypes {
value = json['value'];
icon = (json['value'] as int).getVerificationIconByValue();
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'value': value,
};
icon = (json['value'] as int).getVerificationIconByValue();
}
Map<String, dynamic> toJson() {
return {
'id': id,
@ -115,6 +88,4 @@ class VerificationTypes {
'value': value,
};
}
}

@ -336,45 +336,7 @@ class AssetLoan {
};
}
class AssetLoan {
int? id;
String? assetSerialNo;
String? assetNumber;
dynamic tagCode;
dynamic systemId;
dynamic assetName;
AssetLoan({
this.id,
this.assetSerialNo,
this.assetNumber,
this.tagCode,
this.systemId,
this.assetName,
});
factory AssetLoan.fromJson(Map<String, dynamic> json) {
return AssetLoan(
id: json['id'],
assetSerialNo: json['assetSerialNo'],
assetNumber: json['assetNumber'],
tagCode: json['tagCode'],
systemId: json['systemId'],
assetName: json['assetName'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'assetSerialNo': assetSerialNo,
'assetNumber': assetNumber,
'tagCode': tagCode,
'systemId': systemId,
'assetName': assetName,
};
}
}
class Activities {
int? id;

@ -2,6 +2,7 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';

@ -1,13 +1,17 @@
import 'dart:convert';
import 'package:device_calendar/device_calendar.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_timezone/flutter_timezone.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/service_request_detail_provider.dart';
class ServiceRequestUtils {
static double calculateAndAssignWorkingHours({
@ -16,8 +20,6 @@ class ServiceRequestUtils {
required TextEditingController workingHoursController,
required Function(double) updateModel, // A callback to update the model
}) {
print('start date i got is $startTime');
print('end date i got is $endTime');
if (startTime != null && endTime != null) {
Duration difference = endTime.difference(startTime);
double hours = difference.inMinutes / 60.0; // Calculate hours as a decimal
@ -49,7 +51,7 @@ class ServiceRequestUtils {
static void getQrCode({required BuildContext context }) async{
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context,listen:false);
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) {
@ -80,8 +82,6 @@ class ServiceRequestUtils {
}
}
static Widget testScheduleNotificationButton({required BuildContext context}){

@ -15,11 +15,8 @@ import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_mo
import 'package:test_sa/models/new_models/work_order_detail_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.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';
import 'package:test_sa/service_request_latest/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/activities_list_view.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/verify_arrival_view.dart';
@ -42,23 +39,19 @@ class FooterActionButton {
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
bool showMarkAsFixedButton = activities.isEmpty ? true : activities.every((object) => object.activityStatus!.name!.toLowerCase() == "completed");
if (userProvider.user?.type == UsersTypes.engineer) {
print('status i got is ${workOrderNextStepStatus}');
switch (workOrderNextStepStatus) {
case WorkOrderNextStepEnum.onlyView:
return footerContainer(
child: AppFilledButton(
label: 'Assign To Me',
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
//TODO uncommit this after testing ...
requestDetailProvider.engineerAssignWorkOrderToHimself(id: requestDetailProvider.currentWorkOrder!.data!.requestId.toString());
},
fontSize: 12.toScreenWidth,
));
label: 'Assign To Me',
// maxWidth: true,
buttonColor: AppColor.primary10,
onPressed: () async {
requestDetailProvider.engineerAssignWorkOrderToHimself(id: requestDetailProvider.currentWorkOrder!.data!.requestId.toString());
},
fontSize: 12.toScreenWidth,
));
case WorkOrderNextStepEnum.markedAsFixed:
break;
// TODO: Handle this case.
@ -185,7 +178,6 @@ class FooterActionButton {
buttonColor: AppColor.green70,
onPressed: () async {
ServiceRequestBottomSheet.feedBackBottomSheet(context: context);
},
),
]
@ -203,13 +195,13 @@ class FooterActionButton {
fontSize: 12.toScreenWidth,
));
case WorkOrderNextStepEnum.waitingForRequesterToConfirm:
return footerContainer(
child: AppFilledButton(
label: 'Waiting for requester to verify',
buttonColor: AppColor.neutral140,
textColor: AppColor.neutral150,
fontSize: 12.toScreenWidth,
));
return footerContainer(
child: AppFilledButton(
label: 'Waiting for requester to verify',
buttonColor: AppColor.neutral140,
textColor: AppColor.neutral150,
fontSize: 12.toScreenWidth,
));
}
} else {
if (workOrderNextStepStatus == WorkOrderNextStepEnum.nTakeAction) {
@ -230,14 +222,11 @@ class FooterActionButton {
// maxWidth: true,
buttonColor: AppColor.green70,
onPressed: () async {
int ?status = await requestDetailProvider.nurseConfirmArrival(workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId??0);
if(status==200){
}
int? status = await requestDetailProvider.nurseConfirmArrival(workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId ?? 0);
if (status == 200) {}
},
));
}
}
return const SizedBox();
}

@ -1,7 +1,6 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
@ -11,7 +10,7 @@ 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/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/service_request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/verify_otp_view.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/qr/scan_qr.dart';
@ -33,7 +32,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
}
Future<void> getInitialData() async {
RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
await requestDetailProvider.getArrivalVerificationType();
}
@ -42,7 +41,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
return Scaffold(
appBar: DefaultAppBar(title: context.translation.verifyArrival),
//backgroundColor: const Color(0xfff8f9fb),
body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) {
body: Consumer<ServiceRequestDetailProvider>(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) {
return SafeArea(
child: requestDetailProvider.isArrivalLoading
? const CircularProgressIndicator(color: AppColor.primary10).center
@ -114,7 +113,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
);
}
void onItemTap({required int index, required RequestDetailProvider requestDetailProvider, required BuildContext context, int? verificationTypeId}) async {
void onItemTap({required int index, required ServiceRequestDetailProvider requestDetailProvider, required BuildContext context, int? verificationTypeId}) async {
switch (index) {
case 0:
int? status;
@ -199,8 +198,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
Map<String, dynamic> resultJson = jsonDecode(result);
print('result i got is ${resultJson}');
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
status = await requestDetailProvider.engineerConfirmArrival(
workOrderId: resultJson['WorkOrderId'], verificationTypeId: 5, workOrderCreatedById: resultJson['WorkOrderCreatedById']);
status = await requestDetailProvider.engineerConfirmArrival(workOrderId: resultJson['WorkOrderId'], verificationTypeId: 5, workOrderCreatedById: resultJson['WorkOrderCreatedById']);
if (status == 200) {
requestDetailProvider.getWorkOrderById(id: resultJson['WorkOrderId']);
Navigator.pop(context);

@ -22,7 +22,7 @@ import 'package:test_sa/providers/service_request_providers/equipment_status_pro
import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart';
import 'package:test_sa/providers/work_order/fault_description_provider.dart';
import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/service_request_detail_provider.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
@ -41,7 +41,7 @@ class VerifyAssetDetails extends StatefulWidget {
}
class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProviderStateMixin {
RequestDetailProvider? _requestDetailProvider;
ServiceRequestDetailProvider? _requestDetailProvider;
LoanAvailabilityProvider? _loanAvailabilityProvider;
EquipmentStatusProvider? _equipmentStatusProvider;
ReasonProvider? _reasonProvider;
@ -65,7 +65,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
}
void assignValues() {
RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
WorkOrderData currentWorkOrderData = requestDetailProvider.currentWorkOrder!.data!;
requestDetailProvider.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel(
workOrderId: currentWorkOrderData.requestId,
@ -94,7 +94,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
@override
Widget build(BuildContext context) {
if (_requestDetailProvider == null) {
_requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
_requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
_reasonProvider = Provider.of<ReasonProvider>(context, listen: false);
_reasonProvider!.reset();
_loanAvailabilityProvider = Provider.of<LoanAvailabilityProvider>(context, listen: false);
@ -109,8 +109,8 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
return Scaffold(
key: _scaffoldKey,
appBar: DefaultAppBar(title: context.translation.verify_asset_details),
body: Consumer<RequestDetailProvider>(builder: (context, RequestDetailProvider requestDetailProvider, child) {
appBar: DefaultAppBar(title: context.translation.updateAssetDetails),
body: Consumer<ServiceRequestDetailProvider>(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -230,7 +230,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
color: AppColor.white10,
child: AppFilledButton(
label: context.translation.verify_asset_details,
label: context.translation.updateAssetDetails,
buttonColor: AppColor.primary10,
onPressed: () async {
if (validateForm(requestDetailProvider: requestDetailProvider)) {
@ -248,7 +248,7 @@ class _VerifyAssetDetailsState extends State<VerifyAssetDetails> with TickerProv
);
}
bool validateForm({required RequestDetailProvider requestDetailProvider}) {
bool validateForm({required ServiceRequestDetailProvider requestDetailProvider}) {
bool isValid = true;
if (!widget.isEdit) {
return true;

@ -1,15 +1,12 @@
import 'package:flutter/material.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/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/service_request_latest/request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/get_qr_code_view.dart';
import 'package:test_sa/service_request_latest/service_request_detail_provider.dart';
import 'package:test_sa/service_request_latest/views/components/history_log_view.dart';
import 'components/service_request_detail_view.dart';
@ -49,11 +46,10 @@ class _ServiceRequestDetailMainState extends State<ServiceRequestDetailMain> {
@override
Widget build(BuildContext context) {
print('user type i got is ${_userProvider?.user?.type}');
return WillPopScope(
onWillPop: () async {
// Implement custom back button handling logic here
RequestDetailProvider requestDetailProvider = Provider.of<RequestDetailProvider>(context, listen: false);
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
if (requestDetailProvider.timer != null && requestDetailProvider.timer!.isActive) {
requestDetailProvider.stopTimer();
}

@ -4,7 +4,6 @@
"signInToYour",
"overdue",
"newR",
"noDataFound",
"allWorkOrder"
"noDataFound"
]
}

Loading…
Cancel
Save