Merge remote-tracking branch 'origin/design_3.0_TM_Module_bug_fixes' into design_3.0_TM_Module_bug_fixes

design_3.0_task_module_new
WaseemAbbasi22 5 months ago
commit cfdf41233c

@ -84,6 +84,9 @@ class FirebaseNotificationManger {
static void handleMessage(context, Map<String, dynamic> messageData) { static void handleMessage(context, Map<String, dynamic> messageData) {
if (messageData["requestType"] != null && messageData["requestNumber"] != null) { if (messageData["requestType"] != null && messageData["requestNumber"] != null) {
Widget? serviceClass; Widget? serviceClass;
String? transactionType = messageData["transactionType"]?.toString();
// PPM=1, // PPM=1,
// ServiceRequestEngineer = 3, // ServiceRequestEngineer = 3,
// AssetTransfer=7, // AssetTransfer=7,
@ -91,31 +94,31 @@ class FirebaseNotificationManger {
// GasRefill=9, // GasRefill=9,
// TechnicalRetirmentWO = 11, // TechnicalRetirmentWO = 11,
// Recurrent = 12, // Recurrent = 12,
switch (messageData["transactionType"]) { switch (transactionType) {
case 1: case "1":
serviceClass = PpmDetailsPage(requestId: int.parse(messageData["requestNumber"].toString())); serviceClass = PpmDetailsPage(requestId: int.parse(messageData["requestNumber"].toString()));
break; break;
//these three request are same corrective maintenance.... //these three request are same corrective maintenance....
case 3: case "3":
serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? ''); serviceClass = ServiceRequestDetailMain(requestId: int.parse(messageData["requestNumber"].toString()));
break; break;
case 8: case "8":
serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? ''); serviceClass = ServiceRequestDetailMain(requestId: int.parse(messageData["requestNumber"].toString()));
break; break;
case 11: case "11":
serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? ''); serviceClass = ServiceRequestDetailMain(requestId: int.parse(messageData["requestNumber"].toString()));
break; break;
case 7: case "7":
serviceClass = DeviceTransferDetails(model: DeviceTransfer(id: int.parse(messageData["requestNumber"].toString()))); serviceClass = DeviceTransferDetails(model: DeviceTransfer(id: int.parse(messageData["requestNumber"].toString())));
break; break;
case 9: case "9":
serviceClass = GasRefillDetailsPage( serviceClass = GasRefillDetailsPage(
priority: messageData["priority"], priority: messageData["priority"],
date: messageData["createdOn"], date: messageData["createdOn"],
model: GasRefillModel(id: int.parse(messageData["requestNumber"].toString())), model: GasRefillModel(id: int.parse(messageData["requestNumber"].toString())),
); );
break; break;
case 12: case "12":
serviceClass = RecurrentWorkOrderView(taskId: int.parse(messageData["requestNumber"].toString())); serviceClass = RecurrentWorkOrderView(taskId: int.parse(messageData["requestNumber"].toString()));
//Didn't handle task request yet... //Didn't handle task request yet...
// case 6: // case 6:

@ -295,7 +295,7 @@ class UserProvider extends ChangeNotifier {
"userId": userId, "userId": userId,
}; };
try { try {
response = await ApiManager.instance.post(URLs.getSwipeLastTransactionUrl, body: body); response = await ApiManager.instance.post(URLs.getSwipeLastTransactionUrl, body: body,showToast: false);
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
swipeTransactionModel = SwipeTransaction.fromJson(json.decode(response.body)['data']); swipeTransactionModel = SwipeTransaction.fromJson(json.decode(response.body)['data']);

@ -945,7 +945,7 @@ class ServiceRequestDetailProvider extends ChangeNotifier {
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
try { try {
final response = await ApiManager.instance.post(URLs.sendOtpUrl + "$workOrderId", body: {}); final response = await ApiManager.instance.post(URLs.sendOtpUrl + "$workOrderId", body: {},showToast: false);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {} if (response.statusCode >= 200 && response.statusCode < 300) {}
isLoading = false; isLoading = false;

@ -49,7 +49,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
//backgroundColor: const Color(0xfff8f9fb), //backgroundColor: const Color(0xfff8f9fb),
body: Consumer<ServiceRequestDetailProvider>(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) { body: Consumer<ServiceRequestDetailProvider>(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) {
return SafeArea( return SafeArea(
child: requestDetailProvider.isArrivalLoading child: requestDetailProvider.isArrivalLoading || requestDetailProvider.isLoading
? const CircularProgressIndicator(color: AppColor.primary10).center ? const CircularProgressIndicator(color: AppColor.primary10).center
: requestDetailProvider.arrivalTypeList.isEmpty : requestDetailProvider.arrivalTypeList.isEmpty
? const NoDataFound().center ? const NoDataFound().center
@ -62,6 +62,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
icon: item.verificationTypes!.icon ?? '', icon: item.verificationTypes!.icon ?? '',
heading: item.verificationTypes!.name ?? '', heading: item.verificationTypes!.name ?? '',
subHeading: item.description ?? '', subHeading: item.description ?? '',
// isLoading: requestDetailProvider.isLoading,
onTap: () { onTap: () {
onItemTap(requestDetailProvider: requestDetailProvider, context: context, verificationTypeId: item.verificationTypes?.value); onItemTap(requestDetailProvider: requestDetailProvider, context: context, verificationTypeId: item.verificationTypes?.value);
}); });
@ -72,7 +73,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
); );
} }
Widget customListItem({required String icon, required String heading, required String subHeading, required VoidCallback onTap}) { Widget customListItem({required String icon, required String heading, required String subHeading, required VoidCallback onTap, bool isLoading = false}) {
return GestureDetector( return GestureDetector(
onTap: onTap, // Handles the tap onTap: onTap, // Handles the tap
child: Card( child: Card(
@ -81,33 +82,29 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
), ),
color: Colors.white, color: Colors.white,
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, // Align items at the top crossAxisAlignment: CrossAxisAlignment.center, // Align items at the top
children: [ children: [
// Icon Section icon.toSvgAsset(width: 30, color: AppColor.neutral120, height: 30).paddingOnly(top: 0),
icon 12.width,
.toSvgAsset(
width: 32,
color: AppColor.neutral120,
height: 29,
)
.paddingOnly(top: 8),
14.width,
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
heading, heading,
style: AppTextStyles.heading6.copyWith(color: AppColor.neutral50), style: AppTextStyles.heading6.copyWith(color: AppColor.neutral50),
), ),
7.height, 6.height,
Text( Text(
subHeading, subHeading,
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120),
), ),
], ],
).paddingOnly(end: 50), ),
), ),
12.width,
SizedBox(width: 24, height: 24, child: isLoading ? const CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 2) : const SizedBox())
], ],
).paddingAll(12), ).paddingAll(12),
), ),
@ -150,7 +147,7 @@ class _VerifyArrivalViewState extends State<VerifyArrivalView> {
} }
break; break;
case 3: case 3:
requestDetailProvider.sendOtp(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!); await requestDetailProvider.sendOtp(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!);
Navigator.pushReplacement( Navigator.pushReplacement(
context, context,
MaterialPageRoute(builder: (context) => const VerifyOtpView()), MaterialPageRoute(builder: (context) => const VerifyOtpView()),

@ -18,10 +18,7 @@ class VerifyOtpView extends StatelessWidget {
final defaultPinTheme = PinTheme( final defaultPinTheme = PinTheme(
width: 51.toScreenWidth, width: 51.toScreenWidth,
height: 63.toScreenHeight, height: 63.toScreenHeight,
textStyle: const TextStyle( textStyle: const TextStyle(fontSize: 22, color: Colors.black),
fontSize: 22,
color: Colors.black,
),
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.neutral100, color: AppColor.neutral100,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),

@ -111,10 +111,7 @@ class _ExternalMaintenanceRequestState extends State<ExternalMaintenanceRequest>
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
child: Icon( child: Icon(Icons.add, color: context.isDark ? null : AppColor.neutral60),
Icons.add,
color: context.isDark ? null : AppColor.neutral60,
),
).onPress(requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ).onPress(requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null
? null ? null
: () async { : () async {

@ -257,7 +257,7 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
labelStyle: AppTextStyles.textFieldLabelStyle, labelStyle: AppTextStyles.textFieldLabelStyle,
suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16), suffixIcon: "clock".toSvgAsset(width: 20, color: context.isDark ? AppColor.neutral10 : null).paddingOnly(end: 16),
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.travelHours?.toString(), initialValue: requestDetailProvider.activityMaintenanceHelperModel?.travelHours?.toString(),
textInputType: TextInputType.number, textInputType: const TextInputType.numberWithOptions(decimal: true),
onChange: (value) { onChange: (value) {
requestDetailProvider.activityMaintenanceHelperModel?.travelHours = num.parse(value); // int.tryParse(value); requestDetailProvider.activityMaintenanceHelperModel?.travelHours = num.parse(value); // int.tryParse(value);
}, },

@ -6,10 +6,11 @@ import 'package:test_sa/controllers/providers/api/ppm_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/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/models/device/model_definition.dart';
import 'package:test_sa/models/device/supplier.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/device/asset.dart';
import 'package:test_sa/models/device/model_definition.dart';
import 'package:test_sa/models/device/supplier.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart'; import 'package:test_sa/models/new_models/building.dart';
import 'package:test_sa/models/new_models/department.dart'; import 'package:test_sa/models/new_models/department.dart';
@ -25,12 +26,10 @@ import 'package:test_sa/providers/ppm_asset_availability_provider.dart';
import 'package:test_sa/providers/ppm_electrical_safety_provider.dart'; import 'package:test_sa/providers/ppm_electrical_safety_provider.dart';
import 'package:test_sa/providers/ppm_service_provider.dart'; import 'package:test_sa/providers/ppm_service_provider.dart';
import 'package:test_sa/providers/ppm_task_status_provider.dart'; import 'package:test_sa/providers/ppm_task_status_provider.dart';
import 'package:test_sa/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart'; import 'package:test_sa/views/widgets/bottom_sheets/asset_detail_bottom_sheet.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:test_sa/models/device/asset.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
class WoInfoForm extends StatefulWidget { class WoInfoForm extends StatefulWidget {
@ -63,9 +62,7 @@ class _WoInfoFormState extends State<WoInfoForm> {
double totalWorkingHours = double totalWorkingHours =
widget.planPreventiveVisit.preventiveVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0; widget.planPreventiveVisit.preventiveVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0;
return Consumer<PpmProvider>(builder: (context, ppmProvider, child) { return Consumer<PpmProvider>(builder: (context, ppmProvider, child) {
return ListView( return ListView(
padding: const EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16), padding: const EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16),
children: [ children: [
@ -109,7 +106,7 @@ class _WoInfoFormState extends State<WoInfoForm> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
widget.planPreventiveVisit.assetName!.bodyText(context).custom(color: AppColor.black10), widget.planPreventiveVisit.assetName!.bodyText(context).custom(color: AppColor.black10).expanded,
"info_icon".toSvgAsset(height: 17, width: 17).onPress( "info_icon".toSvgAsset(height: 17, width: 17).onPress(
() { () {
// There is only limited information for asset is returned from backend to show all info need to return the whole model from backend... // There is only limited information for asset is returned from backend to show all info need to return the whole model from backend...
@ -171,7 +168,8 @@ class _WoInfoFormState extends State<WoInfoForm> {
SingleItemDropDownMenu<Lookup, PpmTaskStatusProvider>( SingleItemDropDownMenu<Lookup, PpmTaskStatusProvider>(
context: context, context: context,
showShadow: false, showShadow: false,
initialValue: widget.planPreventiveVisit.taskStatus == null ? null : Lookup(name: widget.planPreventiveVisit.taskStatus?.name ?? "", id: widget.planPreventiveVisit.taskStatus?.id), initialValue:
widget.planPreventiveVisit.taskStatus == null ? null : Lookup(name: widget.planPreventiveVisit.taskStatus?.name ?? "", id: widget.planPreventiveVisit.taskStatus?.id),
title: context.translation.pmTestResult, title: context.translation.pmTestResult,
backgroundColor: AppColor.neutral100, backgroundColor: AppColor.neutral100,
onSelect: (value) { onSelect: (value) {
@ -331,8 +329,8 @@ class _WoInfoFormState extends State<WoInfoForm> {
floor: Floor(name: model.floorName), floor: Floor(name: model.floorName),
site: Site(custName: model.siteName), site: Site(custName: model.siteName),
supplier: Supplier(suppliername: model.supplierName), supplier: Supplier(suppliername: model.supplierName),
modelDefinition: ModelDefinition(modelName: model.model, manufacturerName: model.manufacturer), modelDefinition: ModelDefinition(modelName: model.model, manufacturerName: model.manufacturer, assetName: model.assetName),
room: Rooms(value: int.tryParse(model.roomName??'')), room: Rooms(value: int.tryParse(model.roomName ?? '')),
department: Department(departmentName: model.departmentName), department: Department(departmentName: model.departmentName),
); );
return AssetDetailBottomSheet(asset); return AssetDetailBottomSheet(asset);

@ -104,7 +104,7 @@ class _AddSupplierEngineerBottomSheetState extends State<AddSupplierEngineerBott
8.height, 8.height,
AppTextFormField( AppTextFormField(
labelText: "Email".addTranslation, labelText: "Email".addTranslation,
textInputType: TextInputType.name, textInputType: TextInputType.emailAddress,
onChange: (text) { onChange: (text) {
engineer.email = text.isEmpty ? null : text; engineer.email = text.isEmpty ? null : text;
}, },

Loading…
Cancel
Save