bug fixes mentioned on excel sheet and tested with backend

design_3.0_latest
WaseemAbbasi22 11 months ago
parent 4954549594
commit ab91baf216

@ -96,11 +96,29 @@ class PartsProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"]; List categoriesListJson = json.decode(response.body)["data"];
page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList(); page = categoriesListJson.map((part) => SparePart.fromJson(part,false)).toList();
} }
return page; return page;
} catch (error) { } catch (error) {
return []; return [];
} }
} }
// Implement this only for spare part request for now show and search on display name ....
Future<List<SparePart>> getPartsListByDisplayName({num? assetId, String? displayName}) async {
late Response response;
try {
response = await ApiManager.instance.post(URLs.getPartNumber, body: {"displayName": displayName, });
List<SparePart> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
page = categoriesListJson.map((part) => SparePart.fromJson(part,true)).toList();
}
return page;
} catch (error) {
return [];
}
}
} }

@ -22,6 +22,14 @@ class PpmProvider extends ChangeNotifier {
PlanPreventiveVisit? _planPreventiveVisit; PlanPreventiveVisit? _planPreventiveVisit;
late int _totalTabs = 4; late int _totalTabs = 4;
TabController? tabController; TabController? tabController;
bool _isReadOnly = false;
bool get isReadOnly => _isReadOnly;
set isReadOnly(bool value) {
_isReadOnly = value;
notifyListeners();
}
int get totalTabs => _totalTabs; int get totalTabs => _totalTabs;
@ -155,6 +163,11 @@ class PpmProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
ppmPlanAttachments = []; ppmPlanAttachments = [];
planPreventiveVisit = PlanPreventiveVisit.fromJson(json.decode(response.body)["data"]); planPreventiveVisit = PlanPreventiveVisit.fromJson(json.decode(response.body)["data"]);
if(planPreventiveVisit?.visitStatus?.value! == 1 || planPreventiveVisit?.visitStatus?.value == 3){
isReadOnly =true;
}else{
isReadOnly =false;
}
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return planPreventiveVisit; return planPreventiveVisit;

@ -55,7 +55,7 @@ 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 handlePopScope(BuildContext _cxt, VoidCallback onSave) { Widget handlePopScope(BuildContext _cxt, VoidCallback onSave,) {
return PopScope( return PopScope(
canPop: false, canPop: false,
onPopInvokedWithResult: (didPop, result) { onPopInvokedWithResult: (didPop, result) {

@ -783,136 +783,136 @@ class PreventiveVisitSuppliers {
} }
} }
class Supplier { // class Supplier {
int? id; // int? id;
String? suppliername; // String? suppliername;
String? name; // String? name;
String? website; // String? website;
String? email; // String? email;
String? code; // String? code;
int? suppNo; // int? suppNo;
String? suppStatusId; // String? suppStatusId;
String? cityId; // String? cityId;
String? person; // String? person;
String? comment; // String? comment;
String? zipcode; // String? zipcode;
String? contact; // String? contact;
List<String>? telephones; // List<String>? telephones;
List<String>? faxes; // List<String>? faxes;
List<String>? addresses; // List<String>? addresses;
List<String>? attachments; // List<String>? attachments;
List<SuppPersons>? suppPersons; // List<SuppPersons>? suppPersons;
List<String>? suppTCodes; // List<String>? suppTCodes;
//
Supplier( // Supplier(
{this.id, // {this.id,
this.suppliername, // this.suppliername,
this.name, // this.name,
this.website, // this.website,
this.email, // this.email,
this.code, // this.code,
this.suppNo, // this.suppNo,
this.suppStatusId, // this.suppStatusId,
this.cityId, // this.cityId,
this.person, // this.person,
this.comment, // this.comment,
this.zipcode, // this.zipcode,
this.contact, // this.contact,
this.telephones, // this.telephones,
this.faxes, // this.faxes,
this.addresses, // this.addresses,
this.attachments, // this.attachments,
this.suppPersons, // this.suppPersons,
this.suppTCodes}); // this.suppTCodes});
//
Supplier.fromJson(Map<String, dynamic> json) { // Supplier.fromJson(Map<String, dynamic> json) {
id = json['id']; // id = json['id'];
suppliername = json['suppliername']; // suppliername = json['suppliername'];
name = json['name']; // name = json['name'];
website = json['website']; // website = json['website'];
email = json['email']; // email = json['email'];
code = json['code']; // code = json['code'];
suppNo = json['suppNo']; // suppNo = json['suppNo'];
suppStatusId = json['suppStatusId']; // suppStatusId = json['suppStatusId'];
cityId = json['cityId']; // cityId = json['cityId'];
person = json['person']; // person = json['person'];
comment = json['comment']; // comment = json['comment'];
zipcode = json['zipcode']; // zipcode = json['zipcode'];
contact = json['contact']; // contact = json['contact'];
if (json['telephones'] != null) { // if (json['telephones'] != null) {
telephones = <String>[]; // telephones = <String>[];
json['telephones'].forEach((v) { // json['telephones'].forEach((v) {
telephones!.add(v); // telephones!.add(v);
}); // });
} // }
if (json['faxes'] != null) { // if (json['faxes'] != null) {
faxes = <String>[]; // faxes = <String>[];
json['faxes'].forEach((v) { // json['faxes'].forEach((v) {
faxes!.add(v); // faxes!.add(v);
}); // });
} // }
if (json['addresses'] != null) { // if (json['addresses'] != null) {
addresses = <String>[]; // addresses = <String>[];
json['addresses'].forEach((v) { // json['addresses'].forEach((v) {
addresses!.add(v); // addresses!.add(v);
}); // });
} // }
if (json['attachments'] != null) { // if (json['attachments'] != null) {
attachments = <String>[]; // attachments = <String>[];
json['attachments'].forEach((v) { // json['attachments'].forEach((v) {
attachments!.add(v); // attachments!.add(v);
}); // });
} // }
if (json['suppPersons'] != null) { // if (json['suppPersons'] != null) {
suppPersons = <SuppPersons>[]; // suppPersons = <SuppPersons>[];
json['suppPersons'].forEach((v) { // json['suppPersons'].forEach((v) {
suppPersons!.add(SuppPersons.fromJson(v)); // suppPersons!.add(SuppPersons.fromJson(v));
}); // });
} // }
if (json['suppTCodes'] != null) { // if (json['suppTCodes'] != null) {
suppTCodes = <String>[]; // suppTCodes = <String>[];
json['suppTCodes'].forEach((v) { // json['suppTCodes'].forEach((v) {
suppTCodes!.add(v); // suppTCodes!.add(v);
}); // });
} // }
} // }
//
Map<String, dynamic> toJson() { // Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; // final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id; // data['id'] = id;
data['suppliername'] = suppliername; // data['suppliername'] = suppliername;
data['name'] = name; // data['name'] = name;
data['website'] = website; // data['website'] = website;
data['email'] = email; // data['email'] = email;
data['code'] = code; // data['code'] = code;
data['suppNo'] = suppNo; // data['suppNo'] = suppNo;
data['suppStatusId'] = suppStatusId; // data['suppStatusId'] = suppStatusId;
data['cityId'] = cityId; // data['cityId'] = cityId;
data['person'] = person; // data['person'] = person;
data['comment'] = comment; // data['comment'] = comment;
data['zipcode'] = zipcode; // data['zipcode'] = zipcode;
data['contact'] = contact; // data['contact'] = contact;
if (telephones != null) { // if (telephones != null) {
data['telephones'] = telephones!.map((v) => v).toList(); // data['telephones'] = telephones!.map((v) => v).toList();
} // }
if (faxes != null) { // if (faxes != null) {
data['faxes'] = faxes!.map((v) => v).toList(); // data['faxes'] = faxes!.map((v) => v).toList();
} // }
if (addresses != null) { // if (addresses != null) {
data['addresses'] = addresses!.map((v) => v).toList(); // data['addresses'] = addresses!.map((v) => v).toList();
} // }
if (attachments != null) { // if (attachments != null) {
data['attachments'] = attachments!.map((v) => v).toList(); // data['attachments'] = attachments!.map((v) => v).toList();
} // }
if (suppPersons != null) { // if (suppPersons != null) {
data['suppPersons'] = suppPersons!.map((v) => v.toJson()).toList(); // data['suppPersons'] = suppPersons!.map((v) => v.toJson()).toList();
} // }
if (suppTCodes != null) { // if (suppTCodes != null) {
data['suppTCodes'] = suppTCodes!.map((v) => v).toList(); // data['suppTCodes'] = suppTCodes!.map((v) => v).toList();
} // }
return data; // return data;
} // }
} // }
// class SuppPersons { // class SuppPersons {
// int? id; // int? id;

@ -5,7 +5,7 @@ class SparePartsWorkOrders extends Base {
SparePartsWorkOrders.fromJson(dynamic json) { SparePartsWorkOrders.fromJson(dynamic json) {
id = json['id']; id = json['id'];
sparePart = json['sparePart'] != null ? SparePart.fromJson(json['sparePart']) : null; sparePart = json['sparePart'] != null ? SparePart.fromJson(json['sparePart'],true) : null;
qty = json['qty']; qty = json['qty'];
returnQty = json['returnQty']; returnQty = json['returnQty'];
@ -40,33 +40,37 @@ class SparePart extends Base {
this.partNo, this.partNo,
this.partName, this.partName,
this.oracleCode, this.oracleCode,
this.displayName,
this.assetId, this.assetId,
}) : super(identifier: id?.toString(), name: partName); }) : super(identifier: id?.toString(), name: partName);
SparePart.fromJson(dynamic json) { SparePart.fromJson(dynamic json,bool ?isDisplayName) {
id = json['id']; id = json['id'];
identifier = id?.toString(); identifier = id?.toString();
partNo = json['partNo']; partNo = json['partNo'];
partName = json['partName']; partName = json['partName'];
displayName = json['displayName'];
oracleCode = json['oracleCode']; oracleCode = json['oracleCode'];
name = partName; name = isDisplayName!=null&&isDisplayName?displayName: partName;
assetId = json['assetId']; assetId = json['assetId'];
} }
num? id; num? id;
String? partNo; String? partNo;
String? partName; String? partName;
String? displayName;
String? oracleCode; String? oracleCode;
num? assetId; num? assetId;
SparePart copyWith({num? id, String? partNo, String? partName, num? assetId,String?oracleCode}) => SparePart copyWith({num? id, String? partNo, String? partName, num? assetId,String?oracleCode,String ?displayName}) =>
SparePart(id: id ?? this.id,oracleCode: oracleCode?? this.oracleCode, partNo: partNo ?? this.partNo, partName: partName ?? this.partName, assetId: assetId ?? this.assetId); SparePart(id: id ?? this.id,oracleCode: oracleCode?? this.oracleCode, partNo: partNo ?? this.partNo, partName: partName ?? this.partName, assetId: assetId ?? this.assetId,displayName: displayName??this.displayName);
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
map['id'] = id; map['id'] = id;
map['partNo'] = partNo; map['partNo'] = partNo;
map['partName'] = partName; map['partName'] = partName;
map['displayName'] = displayName;
map['oracleCode'] = oracleCode; map['oracleCode'] = oracleCode;
map['assetId'] = assetId; map['assetId'] = assetId;
return map; return map;

@ -126,7 +126,7 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
radius: 4, radius: 4,
label:'${workOrder.since} days', label:'${workOrder.since} days',
textColor: AppColor.neutral50, textColor: AppColor.neutral50,
backgroundColor: AppColor.orange80, backgroundColor: AppColor.orange30,
), ),
], ],
1.width.expanded, 1.width.expanded,

@ -80,7 +80,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
_isLoading = true; _isLoading = true;
_files = _requestDetailProvider?.sparePartHelperModel?.sparePartAttachments?.map((e) => MultiFilesPickerModel(e.id!, File(e.name!))).toList() ?? []; _files = _requestDetailProvider?.sparePartHelperModel?.sparePartAttachments?.map((e) => MultiFilesPickerModel(e.id!, File(e.name!))).toList() ?? [];
setState(() {}); setState(() {});
_spareParts = await _partsProvider!.getPartsList(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id); _spareParts = await _partsProvider!.getPartsListByDisplayName(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id);
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});

@ -106,7 +106,7 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
], ],
).toShadowContainer(context).paddingAll(16), ).toShadowContainer(context).paddingAll(16),
).expanded, ).expanded,
if (userProvider!.user!.type == UsersTypes.engineer && (planPreventiveVisit.visitStatus!.id! != 270 && planPreventiveVisit.visitStatus!.id! != 269)) if (userProvider!.user!.type == UsersTypes.engineer && (!ppmProvider.isReadOnly))...[
AppFilledButton( AppFilledButton(
onPressed: () async { onPressed: () async {
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit))); await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit)));
@ -114,6 +114,16 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
}, },
label: context.translation.updateWorkOrder, label: context.translation.updateWorkOrder,
).paddingAll(16) ).paddingAll(16)
]
else ...[
AppFilledButton(
onPressed: () async {
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit)));
getVisitData();
},
label: context.translation.viewDetails,
).paddingAll(16)
]
]); ]);
}), }),
), ),

@ -57,6 +57,7 @@ class _RoomInspectionCardState extends State<RoomInspectionCard> {
required PlanRecurrentMedicalTaskRoomTabAttributes model, required PlanRecurrentMedicalTaskRoomTabAttributes model,
required BuildContext context, required BuildContext context,
}) { }) {
bool status = (model.attribute == null || model.attributeValue == null) bool status = (model.attribute == null || model.attributeValue == null)
? true ? true
: model.attribute != null : model.attribute != null
@ -65,6 +66,7 @@ class _RoomInspectionCardState extends State<RoomInspectionCard> {
: false : false
: false; : false;
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,

@ -79,7 +79,7 @@ class RecurrentTaskInfoWidget extends StatelessWidget {
label: context.translation.timer, label: context.translation.timer,
timer: snapshot.recurrentWoData?.recurrentWoTimerModel, timer: snapshot.recurrentWoData?.recurrentWoTimerModel,
width: double.infinity, width: double.infinity,
// enabled: snapshot.recurrentWoData?.recurrentWoTimerModel?.endAt == null, enabled: snapshot.recurrentWoData?.status?.value != 1,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.neutral100, color: AppColor.neutral100,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),

@ -65,7 +65,6 @@ class _RecurrentWorkOrderViewState extends State<RecurrentWorkOrderView> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
RecurrentTaskInfoWidget(model: requestProvider.recurrentWoData), RecurrentTaskInfoWidget(model: requestProvider.recurrentWoData),
// 8.height,
requestProvider.recurrentWoData!.planRecurrentMedicalTaskRooms!.isNotEmpty requestProvider.recurrentWoData!.planRecurrentMedicalTaskRooms!.isNotEmpty
? Column( ? Column(
children: [ children: [
@ -77,7 +76,7 @@ class _RecurrentWorkOrderViewState extends State<RecurrentWorkOrderView> {
], ],
).paddingAll(12), ).paddingAll(12),
).paddingOnly(bottom: 85), ).paddingOnly(bottom: 85),
if (requestProvider.recurrentWoData?.status?.id != 270) ...[ if (requestProvider.recurrentWoData?.status?.value != 1) ...[
FooterActionButton.footerContainer( FooterActionButton.footerContainer(
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment: MainAxisAlignment.spaceAround,

@ -30,7 +30,8 @@ class _PpmCalibrationToolsFormState extends State<PpmCalibrationToolsForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final userProvider = Provider.of<UserProvider>(context); final userProvider = Provider.of<UserProvider>(context);
int totalTabs = Provider.of<PpmProvider>(context, listen: false).totalTabs; final ppmProvider = Provider.of<PpmProvider>(context, listen: false);
int totalTabs = ppmProvider.totalTabs;
int currentIndex = totalTabs == 4 ? 2 : 1; int currentIndex = totalTabs == 4 ? 2 : 1;
return ListView.separated( return ListView.separated(
itemCount: widget.models!.length + 1, itemCount: widget.models!.length + 1,
@ -38,7 +39,9 @@ class _PpmCalibrationToolsFormState extends State<PpmCalibrationToolsForm> {
separatorBuilder: (cxt, index) => 16.height, separatorBuilder: (cxt, index) => 16.height,
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models!.length) { if (index == widget.models!.length) {
return AppFilledButton( return Visibility(
visible: !ppmProvider.isReadOnly,
child: AppFilledButton(
label: "Add More Calibration Tools".addTranslation, label: "Add More Calibration Tools".addTranslation,
maxWidth: true, maxWidth: true,
textColor: AppColor.black10, textColor: AppColor.black10,
@ -59,6 +62,7 @@ class _PpmCalibrationToolsFormState extends State<PpmCalibrationToolsForm> {
widget.models!.add(PreventiveVisitCalibrations(id: 0)); widget.models!.add(PreventiveVisitCalibrations(id: 0));
setState(() {}); setState(() {});
}, },
),
); );
} }
PreventiveVisitCalibrations model = widget.models![index]; PreventiveVisitCalibrations model = widget.models![index];
@ -69,6 +73,8 @@ class _PpmCalibrationToolsFormState extends State<PpmCalibrationToolsForm> {
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
), ),
child: IgnorePointer(
ignoring:ppmProvider.isReadOnly,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -112,6 +118,7 @@ class _PpmCalibrationToolsFormState extends State<PpmCalibrationToolsForm> {
), ),
], ],
), ),
),
); );
}, },
); );

@ -237,6 +237,8 @@
// } // }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
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';
@ -289,13 +291,15 @@ class _PpmExternalDetailsFormState extends State<PpmExternalDetailsForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
print("widget.models!.length:${widget.models!.length}"); final ppmProvider = Provider.of<PpmProvider>(context, listen: false);
return ListView.builder( return ListView.builder(
itemCount: widget.models!.length + 1, itemCount: widget.models!.length + 1,
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models!.length) { if (index == widget.models!.length) {
return AppFilledButton( return Visibility(
visible: !ppmProvider.isReadOnly,
child: AppFilledButton(
label: "Add More External Details".addTranslation, label: "Add More External Details".addTranslation,
maxWidth: true, maxWidth: true,
textColor: AppColor.black10, textColor: AppColor.black10,
@ -303,6 +307,7 @@ class _PpmExternalDetailsFormState extends State<PpmExternalDetailsForm> {
icon: Icon(Icons.add_circle, color: AppColor.blueStatus(context)), icon: Icon(Icons.add_circle, color: AppColor.blueStatus(context)),
showIcon: true, showIcon: true,
onPressed: _addNewEntry, onPressed: _addNewEntry,
),
); );
} }
// return !isLoading // return !isLoading
@ -336,10 +341,12 @@ class ExternalDetailItem extends StatefulWidget {
class _ExternalDetailItemState extends State<ExternalDetailItem> { class _ExternalDetailItemState extends State<ExternalDetailItem> {
TextEditingController? controller; TextEditingController? controller;
PpmProvider? _ppmProvider;
@override @override
void initState() { void initState() {
controller = TextEditingController(text: widget.model.workingHours != null ? widget.model.workingHours.toString() : ''); controller = TextEditingController(text: widget.model.workingHours != null ? widget.model.workingHours.toString() : '');
_ppmProvider= Provider.of<PpmProvider>(context,listen:false);
super.initState(); super.initState();
} }
@ -353,6 +360,8 @@ class _ExternalDetailItemState extends State<ExternalDetailItem> {
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
), ),
child: IgnorePointer(
ignoring: _ppmProvider!.isReadOnly,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -496,6 +505,7 @@ class _ExternalDetailItemState extends State<ExternalDetailItem> {
8.height, 8.height,
], ],
), ),
),
); );
} }
} }

@ -32,6 +32,7 @@ class _PpmPmChecklistFormState extends State<PpmPmChecklistForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
int totalTabs = Provider.of<PpmProvider>(context, listen: false).totalTabs; int totalTabs = Provider.of<PpmProvider>(context, listen: false).totalTabs;
final ppmProvider = Provider.of<PpmProvider>(context, listen: false);
int currentIndex = totalTabs == 4 ? 4 : 3; int currentIndex = totalTabs == 4 ? 4 : 3;
List<PreventiveVisitChecklists>? list = widget.checkList ?? []; List<PreventiveVisitChecklists>? list = widget.checkList ?? [];
return (list.isEmpty) return (list.isEmpty)
@ -42,7 +43,9 @@ class _PpmPmChecklistFormState extends State<PpmPmChecklistForm> {
shrinkWrap: true, shrinkWrap: true,
separatorBuilder: (cxt, index) => 12.height, separatorBuilder: (cxt, index) => 12.height,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Column( return IgnorePointer(
ignoring: ppmProvider.isReadOnly,
child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -103,7 +106,8 @@ class _PpmPmChecklistFormState extends State<PpmPmChecklistForm> {
}, },
), ),
], ],
).toShadowContainer(context, showShadow: false, borderRadius: 20); ).toShadowContainer(context, showShadow: false, borderRadius: 20),
);
}, },
); );
} }

@ -26,7 +26,8 @@ class PpmPMKitsForm extends StatefulWidget {
class _PpmPMKitsFormState extends State<PpmPMKitsForm> { class _PpmPMKitsFormState extends State<PpmPMKitsForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
int totalTabs = Provider.of<PpmProvider>(context, listen: false).totalTabs; final ppmProvider = Provider.of<PpmProvider>(context, listen: false);
int totalTabs = ppmProvider.totalTabs;
int currentIndex = totalTabs == 4 ? 3 : 2; int currentIndex = totalTabs == 4 ? 3 : 2;
return ListView.builder( return ListView.builder(
itemCount: widget.models!.length + 1, itemCount: widget.models!.length + 1,
@ -34,7 +35,9 @@ class _PpmPMKitsFormState extends State<PpmPMKitsForm> {
padding: const EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16), padding: const EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 16),
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models!.length) { if (index == widget.models!.length) {
return AppFilledButton( return Visibility(
visible: !ppmProvider.isReadOnly,
child: AppFilledButton(
label: "Add More PM Kits".addTranslation, label: "Add More PM Kits".addTranslation,
maxWidth: true, maxWidth: true,
textColor: AppColor.black10, textColor: AppColor.black10,
@ -55,6 +58,7 @@ class _PpmPMKitsFormState extends State<PpmPMKitsForm> {
widget.models!.add(PreventiveVisitKits(id: 0)); widget.models!.add(PreventiveVisitKits(id: 0));
setState(() {}); setState(() {});
}, },
),
); );
} }
final model = widget.models![index]; final model = widget.models![index];
@ -66,6 +70,8 @@ class _PpmPMKitsFormState extends State<PpmPMKitsForm> {
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.03), blurRadius: 14)],
), ),
child: IgnorePointer(
ignoring: ppmProvider.isReadOnly,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -108,6 +114,7 @@ class _PpmPMKitsFormState extends State<PpmPMKitsForm> {
), ),
], ],
), ),
),
); );
}, },
); );

@ -79,9 +79,12 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
@override @override
void initState() { void initState() {
ppmProvider = Provider.of<PpmProvider>(context, listen: false); ppmProvider = Provider.of<PpmProvider>(context, listen: false);
_planPreventiveVisit = widget.planPreventiveVisit; _planPreventiveVisit = widget.planPreventiveVisit;
// WidgetsBinding.instance.addPostFrameCallback((_) {
initTabs(_planPreventiveVisit.typeOfService); initTabs(_planPreventiveVisit.typeOfService);
// });
super.initState(); super.initState();
} }
@ -112,7 +115,7 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
backgroundColor: AppColor.neutral110, backgroundColor: AppColor.neutral110,
appBar: DefaultAppBar( appBar: DefaultAppBar(
title: context.translation.preventiveMaintenance, title: context.translation.preventiveMaintenance,
onWillPopScope: () { onWillPopScope:ppmProvider.isReadOnly?null: () {
_onSubmit(status: 0); _onSubmit(status: 0);
}, },
), ),
@ -186,8 +189,8 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
children: [ children: [
if (tabIndex == 1) ...[ if (tabIndex == 1) ...[
AppFilledButton( AppFilledButton(
buttonColor: _tabController!.index == 0 ? null:AppColor.background(context), buttonColor: _tabController!.index == 0 ? null : AppColor.background(context),
textColor: _tabController!.index == 0 ? null: AppColor.blueStatus(context), textColor: _tabController!.index == 0 ? null : AppColor.blueStatus(context),
showBorder: true, showBorder: true,
disableButton: _tabController!.index == 0, disableButton: _tabController!.index == 0,
onPressed: () { onPressed: () {
@ -202,6 +205,7 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
).expanded, ).expanded,
8.width, 8.width,
], ],
if (!ppmProvider.isReadOnly) ...[
AppFilledButton( AppFilledButton(
buttonColor: AppColor.white60, buttonColor: AppColor.white60,
textColor: AppColor.neutral50, textColor: AppColor.neutral50,
@ -226,6 +230,22 @@ class _UpdatePpmState extends State<UpdatePpm> with TickerProviderStateMixin {
}, },
label: tabIndex == 0 ? "Complete".addTranslation : ((ppmProvider.totalTabs == _tabController!.index + 1) ? "Complete".addTranslation : context.translation.next), label: tabIndex == 0 ? "Complete".addTranslation : ((ppmProvider.totalTabs == _tabController!.index + 1) ? "Complete".addTranslation : context.translation.next),
).expanded, ).expanded,
] else ...[
Visibility(
visible: tabIndex != 0,
child: AppFilledButton(
onPressed: () {
if(ppmProvider.totalTabs == _tabController!.index + 1){
Navigator.pop(context);
return;
}
_tabController?.animateTo(_tabController!.index + 1);
setState(() {});
},
label:ppmProvider.totalTabs == _tabController!.index + 1? context.translation.close: context.translation.next,
).expanded,
),
]
], ],
).toShadowContainer(context, showShadow: false, borderRadius: 0), ).toShadowContainer(context, showShadow: false, borderRadius: 0),
], ],

@ -6,8 +6,15 @@ 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/new_models/building.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/new_models/room_model.dart';
import 'package:test_sa/models/new_models/site.dart';
import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart'; import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/providers/ppm_asset_availability_provider.dart'; import 'package:test_sa/providers/ppm_asset_availability_provider.dart';
@ -59,8 +66,13 @@ class _WoInfoFormState extends State<WoInfoForm> {
totalWorkingHours = totalWorkingHours; totalWorkingHours = totalWorkingHours;
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: [
IgnorePointer(
ignoring: ppmProvider.isReadOnly,
child: Column(
children: [ children: [
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -157,8 +169,6 @@ class _WoInfoFormState extends State<WoInfoForm> {
Column( Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
//TODO Ahmed need to provide look up value....
SingleItemDropDownMenu<Lookup, PpmTaskStatusProvider>( SingleItemDropDownMenu<Lookup, PpmTaskStatusProvider>(
context: context, context: context,
showShadow: false, showShadow: false,
@ -285,6 +295,9 @@ class _WoInfoFormState extends State<WoInfoForm> {
), ),
], ],
).toShadowContainer(context), ).toShadowContainer(context),
],
),
),
//TODO need to check this also... //TODO need to check this also...
// ESignature( // ESignature(
// title: context.translation.nurseSignature, // title: context.translation.nurseSignature,
@ -311,8 +324,18 @@ class _WoInfoFormState extends State<WoInfoForm> {
_buildAssetDetailBottomSheet(BuildContext context) { _buildAssetDetailBottomSheet(BuildContext context) {
PlanPreventiveVisit model = widget.planPreventiveVisit; PlanPreventiveVisit model = widget.planPreventiveVisit;
Asset asset = Asset(
Asset asset = Asset(id: model.asset?.id, assetSerialNo: model.asset?.assetSerialNo, assetNumber: model.asset?.assetNumber); id: model.asset?.id,
assetSerialNo: model.asset?.assetSerialNo,
assetNumber: model.asset?.assetNumber,
building: Building(name: model.buildingName),
floor: Floor(name: model.floorName),
site: Site(custName: model.siteName),
supplier: Supplier(suppliername: model.supplierName),
modelDefinition: ModelDefinition(modelName: model.model, manufacturerName: model.manufacturer),
room: Rooms(value: int.tryParse(model.roomName??'')),
department: Department(departmentName: model.departmentName),
);
return AssetDetailBottomSheet(asset); return AssetDetailBottomSheet(asset);
} }

Loading…
Cancel
Save