Enhancements

pull/1/head
zaid_daoud 2 years ago
parent 575005ebdd
commit a1f2960fad

@ -16,6 +16,7 @@ import 'package:test_sa/views/pages/sub_workorder/workorder_details.dart';
import '../../../controllers/api_routes/http_status_manger.dart'; import '../../../controllers/api_routes/http_status_manger.dart';
import '../../../controllers/localization/localization.dart'; import '../../../controllers/localization/localization.dart';
import '../../../controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart';
import '../../../models/subtitle.dart'; import '../../../models/subtitle.dart';
import '../../widgets/app_text_form_field.dart'; import '../../widgets/app_text_form_field.dart';
import '../../widgets/buttons/app_back_button.dart'; import '../../widgets/buttons/app_back_button.dart';
@ -49,6 +50,9 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
void initState() { void initState() {
_subWorkOrders = SearchWorkOrder(assignedEmployee: widget.workOrder.assignedEmployee, callRequest: CallRequest()); _subWorkOrders = SearchWorkOrder(assignedEmployee: widget.workOrder.assignedEmployee, callRequest: CallRequest());
_serviceReport = ServiceReport(id: widget.workOrder.id, type: widget.workOrder.assetType, equipmentStatus: widget.workOrder.equipmentStatus); _serviceReport = ServiceReport(id: widget.workOrder.id, type: widget.workOrder.assetType, equipmentStatus: widget.workOrder.equipmentStatus);
if (context.mounted) {
Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset();
}
super.initState(); super.initState();
} }
@ -182,7 +186,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
height: 4, height: 4,
), ),
ServiceReportFaultDescription( ServiceReportFaultDescription(
requestId: widget.workOrder?.id?.toString(), requestId: widget.workOrder?.callRequest?.id?.toString(),
initialValue: _subWorkOrders.faultDescription, initialValue: _subWorkOrders.faultDescription,
onSelect: (status) { onSelect: (status) {
_subWorkOrders.faultDescription = status; _subWorkOrders.faultDescription = status;
@ -261,6 +265,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
image: _image, image: _image,
onPick: (image) { onPick: (image) {
_image = image; _image = image;
_subWorkOrders.attachmentsWorkOrder ??= [];
_subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}")); _subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}"));
}, },
), ),

@ -1,11 +1,14 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import '../../../controllers/localization/localization.dart'; import '../../../controllers/localization/localization.dart';
import '../../../models/subtitle.dart'; import '../../../models/subtitle.dart';
import '../../widgets/app_text_form_field.dart'; import '../../app_style/sizing.dart';
import '../../widgets/buttons/app_button.dart'; import '../../widgets/buttons/app_button.dart';
import '../../widgets/parts/auto_complete_parts_field.dart';
import '../../widgets/parts/part_item.dart';
import '../../widgets/titles/app_sub_title.dart'; import '../../widgets/titles/app_sub_title.dart';
class SparePartsBottomSheet extends StatefulWidget { class SparePartsBottomSheet extends StatefulWidget {
@ -19,6 +22,7 @@ class SparePartsBottomSheet extends StatefulWidget {
class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> { class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final SearchWorkOrder _workOrder = SearchWorkOrder(); final SearchWorkOrder _workOrder = SearchWorkOrder();
bool _validate = false;
@override @override
void initState() { void initState() {
@ -53,97 +57,92 @@ class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> {
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: SingleChildScrollView( child: SingleChildScrollView(
child: SingleChildScrollView( child: Column(
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Container(
const SizedBox(height: 8), width: double.infinity,
if (_workOrder.sparePartsWorkOrders?.length != null) padding: const EdgeInsets.all(16),
ListView.builder( margin: const EdgeInsets.symmetric(vertical: 16),
itemCount: _workOrder.sparePartsWorkOrders?.length, decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: const [
shrinkWrap: true, BoxShadow(
physics: const NeverScrollableScrollPhysics(), color: AColors.grey,
itemBuilder: (context, index) { offset: Offset(0, -1),
final wo = _workOrder.sparePartsWorkOrders[index]; )
return Column( ]),
children: [ child: Column(
ATextFormField( mainAxisSize: MainAxisSize.min,
labelText: _workOrder?.sparePartsWorkOrders[index]?.sparePart?.partNo ?? "Part No.", children: [
onChange: (value) { Row(
_workOrder.sparePartsWorkOrders[index].sparePart = SparePart(partNo: value); children: [
}, Expanded(
), flex: 3,
// const SizedBox(height: 8), child: Column(
// ATextFormField( crossAxisAlignment: CrossAxisAlignment.start,
// labelText: "Description", children: [
// hintText: "Add Some Text", ASubTitle(subtitle.partNumber),
// textInputType: TextInputType.multiline, _validate && _workOrder.sparePartsWorkOrders == null
// onSaved: (value) { ? ASubTitle(
// _workOrder.sparePartsWorkOrders[index].sparePart = value; subtitle.requiredWord,
// }, color: Colors.red,
// ), )
const SizedBox(height: 8), : const SizedBox.shrink(),
ATextFormField( const SizedBox(height: 4),
labelText: _workOrder?.sparePartsWorkOrders[index]?.qty?.toString() ?? "Quantity", AutoCompletePartsField(
textInputType: TextInputType.number, onPick: (part) {
onSaved: (value) { _workOrder.sparePartsWorkOrders ??= [];
_workOrder.sparePartsWorkOrders[index].qty = double.tryParse(value ?? ""); _workOrder.sparePartsWorkOrders.add(SparePartsWorkOrders(
}, id: part.id,
), qty: part.quantity,
const SizedBox(height: 8), sparePart: SparePart(id: part.reportPartID, partName: part.name, partNo: part.code),
InkWell( ));
onTap: () { },
_workOrder.sparePartsWorkOrders.removeWhere( ),
(element) => (element.sparePart?.partNo == wo.sparePart?.partNo && element.id == wo.id), ],
);
setState(() {});
},
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
const Icon(Icons.delete, color: Colors.red),
Text(
"Remove this part",
style: Theme.of(context).textTheme.bodySmall,
),
],
),
), ),
const SizedBox(height: 8), ),
], ],
); ),
}, SizedBox(
), height: 8 * AppStyle.getScaleFactor(context),
const Divider(),
const SizedBox(height: 8),
InkWell(
onTap: () {
_workOrder.sparePartsWorkOrders ??= [];
_workOrder.sparePartsWorkOrders.add(SparePartsWorkOrders());
setState(() {});
},
child: Container(
decoration: BoxDecoration(
color: AColors.primaryColor.withOpacity(0.15),
borderRadius: BorderRadius.circular(10),
border: Border.all(color: AColors.primaryColor),
), ),
child: ListTile( if (_workOrder.sparePartsWorkOrders?.isNotEmpty ?? false)
title: Text( Row(
"Add Part", children: [
style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: AColors.primaryColor), Expanded(flex: 3, child: Text(subtitle.number)),
Expanded(flex: 1, child: Text(subtitle.quantity)),
],
), ),
trailing: const Icon( if (_workOrder.sparePartsWorkOrders?.isNotEmpty ?? false)
Icons.add_circle, Column(
color: AColors.primaryColor, children: List.generate(_workOrder.sparePartsWorkOrders?.length, (index) {
size: 20, final spare = _workOrder.sparePartsWorkOrders[index];
Part part = Part(
id: spare.id,
reportPartID: spare.sparePart?.id,
code: spare.sparePart?.partNo,
name: spare.sparePart?.partName,
quantity: spare.qty,
);
return PartItem(
part: part,
onDelete: (part) {
_workOrder.sparePartsWorkOrders.remove(SparePartsWorkOrders(
id: part.id,
qty: part.quantity,
sparePart: SparePart(id: part.reportPartID, partName: part.name, partNo: part.code),
));
setState(() {});
},
);
}),
), ),
), const SizedBox(height: 16),
), ],
), ),
const SizedBox(height: 24), ),
], const SizedBox(height: 24),
), ],
), ),
), ),
), ),

@ -19,64 +19,65 @@ class _PartItemState extends State<PartItem> {
//final _subtitle = AppLocalization.of(context).subtitle; //final _subtitle = AppLocalization.of(context).subtitle;
return Column( return Column(
children: [ children: [
Divider(), const Divider(),
Row( Row(
children: [ children: [
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
children: [ children: [
Expanded( Expanded(
child: Text( child: Text(
widget.part.code, widget?.part?.code ?? "",
style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.bold), style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.bold),
),
), ),
), AIconButton2(
AIconButton2( iconData: Icons.add,
iconData: Icons.add, color: Theme.of(context).primaryColor,
color: Theme.of(context).primaryColor, onPressed: () {
onPressed: () { widget.part.quantity++;
widget.part.quantity++; setState(() {});
setState(() {}); },
},
),
AIconButton2(
iconData: Icons.remove,
color: Theme.of(context).primaryColor,
onPressed: widget.part.quantity < 2
? null
: () {
widget.part.quantity--;
setState(() {});
},
),
SizedBox(
width: 8 * AppStyle.getScaleFactor(context),
),
Text(
widget.part.quantity.toString(),
style: Theme.of(context).textTheme.headline6.copyWith(
//fontSize: 12,
//fontWeight: FontWeight.bold
),
),
SizedBox(
width: 8 * AppStyle.getScaleFactor(context),
),
],
),
widget.part.name == null
? SizedBox.shrink()
: Text(
widget.part.name,
style: Theme.of(context).textTheme.caption.copyWith(fontSize: 11, fontWeight: FontWeight.bold),
maxLines: 1,
overflow: TextOverflow.ellipsis,
), ),
], AIconButton2(
)), iconData: Icons.remove,
color: Theme.of(context).primaryColor,
onPressed: widget.part.quantity < 2
? null
: () {
widget.part.quantity--;
setState(() {});
},
),
SizedBox(
width: 8 * AppStyle.getScaleFactor(context),
),
Text(
widget.part.quantity.toString(),
style: Theme.of(context).textTheme.headline6.copyWith(
//fontSize: 12,
//fontWeight: FontWeight.bold
),
),
SizedBox(
width: 8 * AppStyle.getScaleFactor(context),
),
],
),
widget.part.name == null
? const SizedBox.shrink()
: Text(
widget.part.name,
style: Theme.of(context).textTheme.caption.copyWith(fontSize: 11, fontWeight: FontWeight.bold),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
],
),
),
AIconButton2( AIconButton2(
iconData: Icons.close, iconData: Icons.close,
color: Colors.red, color: Colors.red,

Loading…
Cancel
Save