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