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

# Conflicts:
#	lib/controllers/api_routes/urls.dart
design_3.0_task_module_new
Sikander Saleem 8 months ago
commit 4c88dce72c

@ -170,7 +170,7 @@ class ProgressFragment extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context); _userProvider = Provider.of<UserProvider>(context);
bool isCurrentUserIsNurse = (_userProvider.user!.type == UsersTypes.normal_user); bool isCurrentUserIsNurse = (_userProvider.user?.type == UsersTypes.normal_user);
return Consumer<DashBoardProvider>( return Consumer<DashBoardProvider>(
builder: (context, snapshot, _) { builder: (context, snapshot, _) {
int total = 0; int total = 0;

@ -159,10 +159,13 @@ class WorkOrderCostModel {
num? sparePartCost; num? sparePartCost;
num? labourCost; num? labourCost;
num? travelCost; num? travelCost;
num? qAmount;
String? prNo;
String? poNo;
WorkOrderCostModel({this.workOrderId, this.sparePartCost, this.labourCost, this.travelCost}); WorkOrderCostModel({this.workOrderId, this.sparePartCost, this.labourCost, this.travelCost, this.qAmount, this.poNo, this.prNo});
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return {'workOrderId': workOrderId, 'sparePartCost': sparePartCost, 'laborCost': labourCost, 'travelCost': travelCost}; return {'workOrderId': workOrderId, 'sparePartCost': sparePartCost, 'laborCost': labourCost, 'travelCost': travelCost, 'qAmount': qAmount, 'prNo': prNo, 'poNo': poNo};
} }
} }

@ -96,6 +96,9 @@ class WorkOrderData {
this.labourCost, this.labourCost,
this.sparePartCost, this.sparePartCost,
this.travelCost, this.travelCost,
this.qAmount,
this.prNo,
this.poNo,
required this.workOrderHistory, required this.workOrderHistory,
required this.activities, required this.activities,
required this.activityAssetToBeRetireds, required this.activityAssetToBeRetireds,
@ -157,6 +160,9 @@ class WorkOrderData {
num? sparePartCost; num? sparePartCost;
num? labourCost; num? labourCost;
num? travelCost; num? travelCost;
num? qAmount;
String? prNo;
String? poNo;
List<WorkOrderHistory> workOrderHistory; List<WorkOrderHistory> workOrderHistory;
List<Activities> activities; List<Activities> activities;
List<dynamic> activityAssetToBeRetireds; List<dynamic> activityAssetToBeRetireds;
@ -190,6 +196,9 @@ class WorkOrderData {
travelCost: json['travelCost'], travelCost: json['travelCost'],
sparePartCost: json['sparePartCost'], sparePartCost: json['sparePartCost'],
labourCost: json['laborCost'], labourCost: json['laborCost'],
qAmount: json['qAmount'],
prNo: json['prNo'],
poNo: json['poNo'],
assetType: json["assetType"] == null ? null : Lookup.fromJson(json["assetType"]), assetType: json["assetType"] == null ? null : Lookup.fromJson(json["assetType"]),
assignedEmployee: json["assignedEmployee"] == null ? null : WorkOrderAssignedEmployee.fromJson(json["assignedEmployee"]), assignedEmployee: json["assignedEmployee"] == null ? null : WorkOrderAssignedEmployee.fromJson(json["assignedEmployee"]),
lastActivityStatus: json["lastActivityStatus"] != null ? Lookup.fromJson(json["lastActivityStatus"]) : null, lastActivityStatus: json["lastActivityStatus"] != null ? Lookup.fromJson(json["lastActivityStatus"]) : null,
@ -451,15 +460,19 @@ class ActivitySparePart {
int? id; int? id;
PartCatalogItem? partCatalogItem; PartCatalogItem? partCatalogItem;
double? quantity; double? quantity;
double? installQty;
double? returnQty;
String? comment; String? comment;
List<SparePartAttachments>? acitiySparePartAttachments; List<SparePartAttachments>? acitiySparePartAttachments;
ActivitySparePart({this.id, this.partCatalogItem, this.quantity, this.comment, this.acitiySparePartAttachments}); ActivitySparePart({this.id, this.partCatalogItem, this.quantity,this.installQty,this.returnQty, this.comment, this.acitiySparePartAttachments});
ActivitySparePart.fromJson(Map<String, dynamic> json) { ActivitySparePart.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
partCatalogItem = json['partCatalogItem'] != null ? new PartCatalogItem.fromJson(json['partCatalogItem']) : null; partCatalogItem = json['partCatalogItem'] != null ? new PartCatalogItem.fromJson(json['partCatalogItem']) : null;
quantity = json['quantity']; quantity = json['quantity'];
installQty = json['installQty'];
returnQty = json['returnQty'];
comment = json['comment']; comment = json['comment'];
if (json['acitiySparePartAttachments'] != null) { if (json['acitiySparePartAttachments'] != null) {
acitiySparePartAttachments = <SparePartAttachments>[]; acitiySparePartAttachments = <SparePartAttachments>[];
@ -476,6 +489,8 @@ class ActivitySparePart {
data['partCatalogItem'] = partCatalogItem!.toJson(); data['partCatalogItem'] = partCatalogItem!.toJson();
} }
data['quantity'] = quantity; data['quantity'] = quantity;
data['installQty'] = installQty;
data['returnQty'] = returnQty;
data['comment'] = comment; data['comment'] = comment;
if (acitiySparePartAttachments != null) { if (acitiySparePartAttachments != null) {
data['acitiySparePartAttachments'] = acitiySparePartAttachments!.map((v) => v.toJson()).toList(); data['acitiySparePartAttachments'] = acitiySparePartAttachments!.map((v) => v.toJson()).toList();

@ -167,32 +167,16 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
backgroundColor: AppColor.primary10, backgroundColor: AppColor.primary10,
), ),
// "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), // "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160),
if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) if (userProvider.user!.userID == requestDetailProvider.currentWorkOrder?.data?.assignedEmployee?.userId &&
userProvider.user!.type == UsersTypes.engineer &&
requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 &&
requestDetailProvider.currentWorkOrder?.data?.status?.value != 3)
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
requestDetailProvider.sparePartHelperModel = SparePartHelperModel( editSparePartRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
id: activity.id,
workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId,
comment: activity.activitySparePart?.comment,
sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [],
activityStatus: activity.activityStatus,
sparePart: SparePart(
id: activity.activitySparePart?.partCatalogItem?.id,
partName: activity.activitySparePart?.partCatalogItem?.partName,
partNo: activity.activitySparePart?.partCatalogItem?.partNumber,
oracleCode: activity.activitySparePart?.partCatalogItem?.oracleCode),
quantity: activity.activitySparePart?.quantity,
activityStatusId: activity.activityStatus?.id,
);
requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel);
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => const SparePartRequest(),
));
}), }),
24.width, 24.width,
"delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async {
@ -241,26 +225,13 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
], ],
], ],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { ).toShadowContainer(context, padding: 12, showShadow: false).onPress(() {
// if(requestDetailProvider.currentWorkOrder?.data?.status?.id ==3498){ if (requestDetailProvider.isReadOnlyRequest) {
// requestDetailProvider.sparePartHelperModel = SparePartHelperModel( editSparePartRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
// id: activity.id, }
// workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, else if(userProvider.user!.userID == requestDetailProvider.currentWorkOrder?.data?.assignedEmployee?.userId) {
// comment: activity.activitySparePart?.comment, requestDetailProvider.isReadOnlyRequest = true;
// sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [], editSparePartRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
// activityStatus: activity.activityStatus, }
// sparePart: SparePart(
// id: activity.activitySparePart?.partCatalogItem?.id,
// partName: activity.activitySparePart?.partCatalogItem?.partName,
// partNo: activity.activitySparePart?.partCatalogItem?.partNumber,
// oracleCode: activity.activitySparePart?.partCatalogItem?.oracleCode),
// quantity: activity.activitySparePart?.quantity,
// activityStatusId: activity.activityStatus?.id,
// );
// requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel);
// Navigator.of(context).push(MaterialPageRoute(
// builder: (_) => const SparePartRequest(),
// ));
// }
}); });
} }
@ -297,13 +268,16 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
), ),
// "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160), // "drag_icon".toSvgAsset(height: 12, width: 23, color: AppColor.neutral160),
if (userProvider.user!.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 && requestDetailProvider.currentWorkOrder?.data?.status?.value != 3) if (userProvider.user!.userID == requestDetailProvider.currentWorkOrder?.data?.assignedEmployee?.userId &&
userProvider.user!.type == UsersTypes.engineer &&
requestDetailProvider.currentWorkOrder?.data?.status?.value != 5 &&
requestDetailProvider.currentWorkOrder?.data?.status?.value != 3)
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
"edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() {
onEditMaintenanceRequestPress(context: context, requestDetailProvider: requestDetailProvider, activity: activity); editMaintenanceRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
}), }),
24.width, 24.width,
"delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async { "delete_icon".toSvgAsset(height: 21, width: 21).onPress(() async {
@ -365,12 +339,16 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
], ],
).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { ).toShadowContainer(context, padding: 12, showShadow: false).onPress(() {
if (requestDetailProvider.isReadOnlyRequest) { if (requestDetailProvider.isReadOnlyRequest) {
onEditMaintenanceRequestPress(context: context, requestDetailProvider: requestDetailProvider, activity: activity); editMaintenanceRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
}
else if(userProvider.user!.userID == requestDetailProvider.currentWorkOrder?.data?.assignedEmployee?.userId) {
requestDetailProvider.isReadOnlyRequest = true;
editMaintenanceRequest(context: context, requestDetailProvider: requestDetailProvider, activity: activity);
} }
}); });
} }
void onEditMaintenanceRequestPress({required BuildContext context, required ServiceRequestDetailProvider requestDetailProvider, required Activities activity}) async { void editMaintenanceRequest({required BuildContext context, required ServiceRequestDetailProvider requestDetailProvider, required Activities activity}) async {
Map<String, dynamic> assistEmpData = {}; Map<String, dynamic> assistEmpData = {};
try { try {
if (activity.activityMaintenance?.assistantEmployees != null && activity.activityMaintenance!.assistantEmployees!.isNotEmpty) { if (activity.activityMaintenance?.assistantEmployees != null && activity.activityMaintenance!.assistantEmployees!.isNotEmpty) {
@ -428,6 +406,31 @@ class _ActivitiesListViewState extends State<ActivitiesListView> {
} }
Navigator.of(context).push(MaterialPageRoute(builder: (_) => MaintenanceRequestForm())); Navigator.of(context).push(MaterialPageRoute(builder: (_) => MaintenanceRequestForm()));
} }
void editSparePartRequest({required BuildContext context, required ServiceRequestDetailProvider requestDetailProvider, required Activities activity}) async {
requestDetailProvider.sparePartHelperModel = SparePartHelperModel(
id: activity.id,
workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId,
comment: activity.activitySparePart?.comment,
sparePartAttachments: activity.activitySparePart?.acitiySparePartAttachments ?? [],
activityStatus: activity.activityStatus,
sparePart: SparePart(
id: activity.activitySparePart?.partCatalogItem?.id,
partName: activity.activitySparePart?.partCatalogItem?.partName,
partNo: activity.activitySparePart?.partCatalogItem?.partNumber,
oracleCode: activity.activitySparePart?.partCatalogItem?.oracleCode),
quantity: activity.activitySparePart?.quantity,
installQty: activity.activitySparePart?.installQty,
returnQty: activity.activitySparePart?.returnQty,
activityStatusId: activity.activityStatus?.id,
);
requestDetailProvider.updateSparePartHelperModel(requestDetailProvider.sparePartHelperModel);
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => const SparePartRequest(),
));
}
} }
class ReorderWidget extends StatelessWidget { class ReorderWidget extends StatelessWidget {

@ -68,7 +68,9 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
initialVisitCard(requestDetailProvider: requestProvider, userProvider: _userProvider), initialVisitCard(requestDetailProvider: requestProvider, userProvider: _userProvider),
assetDetailCard(requestDetailProvider: requestProvider, userProvider: _userProvider), assetDetailCard(requestDetailProvider: requestProvider, userProvider: _userProvider),
12.height, 12.height,
if (context.userProvider.user!.type == UsersTypes.engineer) ...[ if (context.userProvider.user!.type == UsersTypes.engineer &&
!requestProvider.isReadOnlyRequest &&
requestProvider.currentWorkOrder!.data!.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) ...[
costCard(context, requestProvider), costCard(context, requestProvider),
12.height, 12.height,
], ],
@ -310,14 +312,13 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
], ],
//workOrderNextStepStatus == WorkOrderNextStepEnum.assignToMe
if (!requestProvider.isReadOnlyRequest) ...[ if (!requestProvider.isReadOnlyRequest && userProvider.user?.type == UsersTypes.engineer && workOrder.nextStep?.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) ...[
8.height, 8.height,
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
MultiFilesPicker( MultiFilesPicker(
label: context.translation.attachments, label: context.translation.attachments,
files: _workOrderAttachments, files: _workOrderAttachments,
// attachment: _workOrderAttachments,
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
onlyImages: false, onlyImages: false,
buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10), buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
@ -484,6 +485,18 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
'Travel Cost: ${provider.currentWorkOrder!.data?.travelCost ?? '-'}', 'Travel Cost: ${provider.currentWorkOrder!.data?.travelCost ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
), ),
Text(
'Quot Amount: ${provider.currentWorkOrder!.data?.qAmount ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'PR No: ${provider.currentWorkOrder!.data?.prNo ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
Text(
'PO No: ${provider.currentWorkOrder!.data?.poNo ?? '-'}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
),
], ],
), ),
], ],

@ -43,6 +43,9 @@ class _CostDetailFormScreenState extends State<CostDetailFormScreen> with Ticker
labourCost: currentWorkOrderData.labourCost, labourCost: currentWorkOrderData.labourCost,
sparePartCost: currentWorkOrderData.sparePartCost, sparePartCost: currentWorkOrderData.sparePartCost,
travelCost: currentWorkOrderData.travelCost, travelCost: currentWorkOrderData.travelCost,
qAmount: currentWorkOrderData.qAmount,
prNo: currentWorkOrderData.prNo,
poNo: currentWorkOrderData.poNo,
); );
} }
@ -107,6 +110,48 @@ class _CostDetailFormScreenState extends State<CostDetailFormScreen> with Ticker
}, },
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,
), ),
8.height,
AppTextFormField(
labelText: "Quot Amount",
backgroundColor: AppColor.neutral100,
initialValue: requestDetailProvider.workOrderCostModel?.qAmount?.toString(),
textAlign: TextAlign.center,
labelStyle: AppTextStyles.textFieldLabelStyle,
textInputType: TextInputType.number,
showShadow: false,
onChange: (value) {
requestDetailProvider.workOrderCostModel?.qAmount = num.parse(value);
},
style: Theme.of(context).textTheme.titleMedium,
),
8.height,
AppTextFormField(
labelText: "PR No",
backgroundColor: AppColor.neutral100,
initialValue: requestDetailProvider.workOrderCostModel?.prNo,
textAlign: TextAlign.center,
labelStyle: AppTextStyles.textFieldLabelStyle,
textInputType: TextInputType.text,
showShadow: false,
onChange: (value) {
requestDetailProvider.workOrderCostModel?.prNo = value;
},
style: Theme.of(context).textTheme.titleMedium,
),
8.height,
AppTextFormField(
labelText: "PO No",
backgroundColor: AppColor.neutral100,
initialValue: requestDetailProvider.workOrderCostModel?.poNo,
textAlign: TextAlign.center,
labelStyle: AppTextStyles.textFieldLabelStyle,
textInputType: TextInputType.text,
showShadow: false,
onChange: (value) {
requestDetailProvider.workOrderCostModel?.poNo = value;
},
style: Theme.of(context).textTheme.titleMedium,
),
], ],
).toShadowContainer(context).paddingAll(16), ).toShadowContainer(context).paddingAll(16),
).expanded, ).expanded,

@ -27,7 +27,6 @@ import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/views/widgets/images/new_multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/new_multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
class SparePartRequest extends StatefulWidget { class SparePartRequest extends StatefulWidget {
static const String id = "/spare-part-request"; static const String id = "/spare-part-request";
@ -60,18 +59,18 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
super.initState(); super.initState();
_partsProvider = Provider.of<PartsProvider>(context, listen: false); _partsProvider = Provider.of<PartsProvider>(context, listen: false);
_requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false); _requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
_requestDetailProvider?.sparePartHelperModel = SparePartHelperModel( // _requestDetailProvider?.sparePartHelperModel = SparePartHelperModel(
id: _requestDetailProvider?.sparePartHelperModel?.id ?? 0, // id: _requestDetailProvider?.sparePartHelperModel?.id ?? 0,
workOrderId: _requestDetailProvider?.sparePartHelperModel?.workOrderId ?? _requestDetailProvider?.currentWorkOrder?.data?.requestId, // workOrderId: _requestDetailProvider?.sparePartHelperModel?.workOrderId ?? _requestDetailProvider?.currentWorkOrder?.data?.requestId,
sparePartAttachments: _requestDetailProvider?.sparePartHelperModel?.sparePartAttachments ?? [], // sparePartAttachments: _requestDetailProvider?.sparePartHelperModel?.sparePartAttachments ?? [],
sparePart: _requestDetailProvider?.sparePartHelperModel?.sparePart ?? SparePart(), // sparePart: _requestDetailProvider?.sparePartHelperModel?.sparePart ?? SparePart(),
quantity: _requestDetailProvider?.sparePartHelperModel?.quantity, // quantity: _requestDetailProvider?.sparePartHelperModel?.quantity,
installQty: _requestDetailProvider?.sparePartHelperModel?.installQty, // installQty: _requestDetailProvider?.sparePartHelperModel?.installQty,
returnQty: _requestDetailProvider?.sparePartHelperModel?.returnQty, // returnQty: _requestDetailProvider?.sparePartHelperModel?.returnQty,
activityStatusId: _requestDetailProvider?.sparePartHelperModel?.activityStatusId ?? statusLookup.id, // activityStatusId: _requestDetailProvider?.sparePartHelperModel?.activityStatusId ?? statusLookup.id,
activityStatus: _requestDetailProvider?.sparePartHelperModel?.activityStatus ?? statusLookup, // activityStatus: _requestDetailProvider?.sparePartHelperModel?.activityStatus ?? statusLookup,
comment: _requestDetailProvider?.sparePartHelperModel?.comment ?? '', // comment: _requestDetailProvider?.sparePartHelperModel?.comment ?? '',
); // );
_partQtyController.text = _requestDetailProvider?.sparePartHelperModel?.quantity != null ? _requestDetailProvider!.sparePartHelperModel!.quantity!.round().toString() : ''; _partQtyController.text = _requestDetailProvider?.sparePartHelperModel?.quantity != null ? _requestDetailProvider!.sparePartHelperModel!.quantity!.round().toString() : '';
_installQtyController.text = _requestDetailProvider?.sparePartHelperModel?.installQty != null ? _requestDetailProvider!.sparePartHelperModel!.installQty!.round().toString() : ''; _installQtyController.text = _requestDetailProvider?.sparePartHelperModel?.installQty != null ? _requestDetailProvider!.sparePartHelperModel!.installQty!.round().toString() : '';
_returnQtyController.text = _requestDetailProvider?.sparePartHelperModel?.returnQty != null ? _requestDetailProvider!.sparePartHelperModel!.returnQty!.round().toString() : ''; _returnQtyController.text = _requestDetailProvider?.sparePartHelperModel?.returnQty != null ? _requestDetailProvider!.sparePartHelperModel!.returnQty!.round().toString() : '';
@ -83,7 +82,6 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
_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!.getPartsListByDisplayName(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id); _spareParts = await _partsProvider!.getPartsListByDisplayName(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id);
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
}); });
@ -127,6 +125,8 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
child: Column( child: Column(
children: [ children: [
SingleChildScrollView( SingleChildScrollView(
child: IgnorePointer(
ignoring: _requestDetailProvider!.isReadOnlyRequest,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
@ -166,15 +166,16 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
}, },
), ),
if(requestDetailProvider.sparePartHelperModel?.sparePart?.id!=null)...[ if (requestDetailProvider.sparePartHelperModel?.sparePart?.id != null) ...[
12.height, 12.height,
SizedBox( SizedBox(
height: 30.toScreenHeight, height: 30.toScreenHeight,
child: Text('View Parts Availability',style:TextStyle( child: Text('View Parts Availability',
style: TextStyle(
fontSize: 12.toScreenWidth, fontSize: 12.toScreenWidth,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontStyle: FontStyle.normal, fontStyle: FontStyle.normal,
color:AppColor.primary10 , color: AppColor.primary10,
decorationColor: AppColor.primary10, decorationColor: AppColor.primary10,
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
)).onPress( )).onPress(
@ -217,7 +218,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
}, },
), ),
12.height, 12.height,
if(showInstallAndReturnQty) ...[ if (showInstallAndReturnQty) ...[
AppTextFormField( AppTextFormField(
controller: _installQtyController, controller: _installQtyController,
labelText: context.translation.installedQty, labelText: context.translation.installedQty,
@ -301,7 +302,9 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
8.height, 8.height,
], ],
), ),
),
).paddingAll(12).expanded, ).paddingAll(12).expanded,
if (!requestDetailProvider.isReadOnlyRequest)
FooterActionButton.footerContainer( FooterActionButton.footerContainer(
child: AppFilledButton( child: AppFilledButton(
label: _requestDetailProvider?.sparePartHelperModel?.id == 0 ? context.translation.addSparePartActivity : context.translation.updateSparePartActivity, label: _requestDetailProvider?.sparePartHelperModel?.id == 0 ? context.translation.addSparePartActivity : context.translation.updateSparePartActivity,
@ -341,27 +344,23 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
}), }),
); );
} }
} }
class PartDetailBottomSheetSheet extends StatelessWidget { class PartDetailBottomSheetSheet extends StatelessWidget {
PartDetailBottomSheetSheet({Key? key}) : super(key: key);
PartDetailBottomSheetSheet( {Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SizedBox( return SizedBox(
height: SizeConfig.screenHeight!/2.2, height: SizeConfig.screenHeight! / 2.2,
width: SizeConfig.screenWidth, width: SizeConfig.screenWidth,
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
8.height, 8.height,
'Parts Availability'.heading6(context).paddingOnly(top: 12,start: 12), 'Parts Availability'.heading6(context).paddingOnly(top: 12, start: 12),
Consumer<ServiceRequestDetailProvider>( Consumer<ServiceRequestDetailProvider>(builder: (context, requestDetailProvider, child) {
builder: (context, requestDetailProvider,child) {
return requestDetailProvider.isLoading return requestDetailProvider.isLoading
? const CircularProgressIndicator(color: AppColor.primary10).center ? const CircularProgressIndicator(color: AppColor.primary10).center
: requestDetailProvider.storeAvailability.isEmpty : requestDetailProvider.storeAvailability.isEmpty
@ -372,27 +371,23 @@ class PartDetailBottomSheetSheet extends StatelessWidget {
separatorBuilder: (czt, index) => 12.height, separatorBuilder: (czt, index) => 12.height,
itemBuilder: (context, index) { itemBuilder: (context, index) {
StoreAvailability model = requestDetailProvider.storeAvailability[index]; StoreAvailability model = requestDetailProvider.storeAvailability[index];
return partAvailableQuantityCard(context: context,model:model); return partAvailableQuantityCard(context: context, model: model);
}, },
); );
} }).expanded,
).expanded,
], ],
), ),
); );
} }
Widget partAvailableQuantityCard({required StoreAvailability model,required BuildContext context }){
return Column( Widget partAvailableQuantityCard({required StoreAvailability model, required BuildContext context}) {
mainAxisSize: MainAxisSize.min, return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [
crossAxisAlignment: CrossAxisAlignment.start, 'Site Name: ${model.siteName ?? ''}'.bodyText2(context).custom(color: AppColor.neutral120),
children: [
'Site Name: ${model.siteName??''}'.bodyText2(context).custom(color: AppColor.neutral120),
8.height, 8.height,
'Store Name: ${model.storeName??''}'.bodyText2(context).custom(color: AppColor.neutral120), 'Store Name: ${model.storeName ?? ''}'.bodyText2(context).custom(color: AppColor.neutral120),
8.height, 8.height,
'Available Quantity: ${model.availablityQty??''}'.bodyText2(context).custom(color: AppColor.neutral120), 'Available Quantity: ${model.availablityQty ?? ''}'.bodyText2(context).custom(color: AppColor.neutral120),
8.height, 8.height,
] ]).toShadowContainer(context, padding: 12, showShadow: false, backgroundColor: AppColor.neutral110);
).toShadowContainer(context, padding: 12, showShadow: false,backgroundColor: AppColor.neutral110);
} }
} }

Loading…
Cancel
Save