Merge remote-tracking branch 'origin/design_3.0_TM_Module_bug_fixes' into design_3.0_TM_Module_bug_fixes
commit
0b97ffe296
@ -0,0 +1,195 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:test_sa/cm_module/service_request_detail_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/helper_data_models/workorder/work_order_helper_models.dart';
|
||||
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/new_views/common_widgets/app_text_form_field.dart';
|
||||
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
|
||||
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
|
||||
|
||||
class CostDetailFormScreen extends StatefulWidget {
|
||||
static const String id = "/cost-detail-form-screen";
|
||||
bool isEdit = false;
|
||||
|
||||
CostDetailFormScreen({Key? key, required this.isEdit}) : super(key: key);
|
||||
|
||||
@override
|
||||
_CostDetailFormScreenState createState() => _CostDetailFormScreenState();
|
||||
}
|
||||
|
||||
class _CostDetailFormScreenState extends State<CostDetailFormScreen> with TickerProviderStateMixin {
|
||||
ServiceRequestDetailProvider? _requestDetailProvider;
|
||||
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void assignValues() {
|
||||
// ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
|
||||
// _requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
|
||||
WorkOrderData currentWorkOrderData = _requestDetailProvider!.currentWorkOrder!.data!;
|
||||
_requestDetailProvider!.workOrderCostModel = WorkOrderCostModel(
|
||||
workOrderId: currentWorkOrderData.requestId,
|
||||
labourCost: currentWorkOrderData.labourCost,
|
||||
sparePartCost: currentWorkOrderData.sparePartCost,
|
||||
travelCost: currentWorkOrderData.travelCost,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (_requestDetailProvider == null) {
|
||||
_requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
|
||||
assignValues();
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
key: _scaffoldKey,
|
||||
appBar: const DefaultAppBar(title: "Cost Details"),
|
||||
body: Consumer<ServiceRequestDetailProvider>(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
if (widget.isEdit) ...[
|
||||
SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
AppTextFormField(
|
||||
labelText: "Spare Part Cost",
|
||||
backgroundColor: AppColor.neutral100,
|
||||
initialValue: requestDetailProvider.workOrderCostModel?.sparePartCost?.toString(),
|
||||
textAlign: TextAlign.center,
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
showShadow: false,
|
||||
onChange: (value) {
|
||||
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.callResponse = value;
|
||||
},
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
labelText: "Labour Cost",
|
||||
backgroundColor: AppColor.neutral100,
|
||||
initialValue: requestDetailProvider.workOrderCostModel?.labourCost?.toString(),
|
||||
textAlign: TextAlign.center,
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
showShadow: false,
|
||||
onChange: (value) {
|
||||
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.descriptionOfFinding = value;
|
||||
},
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
labelText: "Travel Cost",
|
||||
backgroundColor: AppColor.neutral100,
|
||||
initialValue: requestDetailProvider.workOrderCostModel?.travelCost?.toString(),
|
||||
textAlign: TextAlign.center,
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
showShadow: false,
|
||||
onChange: (value) {
|
||||
requestDetailProvider.engineerUpdateWorkOrderHelperModel?.actionTaken = value;
|
||||
},
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
],
|
||||
).toShadowContainer(context).paddingAll(16),
|
||||
).expanded,
|
||||
] else ...[
|
||||
assetStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!).toShadowContainer(context).paddingAll(16),
|
||||
],
|
||||
Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight),
|
||||
color: AppColor.white10,
|
||||
child: AppFilledButton(
|
||||
label: "Update Cost Details",
|
||||
buttonColor: AppColor.primary10,
|
||||
onPressed: () async {
|
||||
if (validateForm(requestDetailProvider: requestDetailProvider)) {
|
||||
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
|
||||
await requestDetailProvider.engineerUpdateWorkOrder();
|
||||
Navigator.pop(context);
|
||||
Navigator.pop(context);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
bool validateForm({required ServiceRequestDetailProvider requestDetailProvider}) {
|
||||
bool isValid = true;
|
||||
if (!widget.isEdit) {
|
||||
return true;
|
||||
}
|
||||
// if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus != null) {
|
||||
// if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 1 || requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 2) {
|
||||
// if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService == null) {
|
||||
// Fluttertoast.showToast(msg: "Return to service is required ", toastLength: Toast.LENGTH_LONG);
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
return isValid;
|
||||
}
|
||||
|
||||
Widget assetStatusWidget({required BuildContext context, required EngineerUpdateWorkOrderHelperModel workOrderData}) {
|
||||
return Consumer<EquipmentStatusProvider>(builder: (cxt, snapshot, _) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
context.translation.assetStatus.bodyText(context).custom(color: AppColor.black20),
|
||||
8.height,
|
||||
Wrap(
|
||||
runSpacing: 8,
|
||||
spacing: 8,
|
||||
children: [
|
||||
for (var element in snapshot.items)
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 24,
|
||||
height: 24,
|
||||
child: Radio(
|
||||
value: element,
|
||||
activeColor: Colors.red,
|
||||
fillColor: WidgetStateColor.resolveWith((states) {
|
||||
if (states.contains(WidgetState.selected)) return AppColor.primary10;
|
||||
return AppColor.neutral130;
|
||||
}),
|
||||
groupValue: workOrderData.equipmentStatus,
|
||||
onChanged: (state) {
|
||||
setState(() {
|
||||
workOrderData.equipmentStatus = element;
|
||||
});
|
||||
}),
|
||||
),
|
||||
8.width,
|
||||
Text(element.name ?? '', style: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral120)),
|
||||
],
|
||||
)
|
||||
],
|
||||
).toShimmer(isShow: snapshot.loading),
|
||||
],
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue