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/localization/localization.dart';
import '../../../controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart';
import '../../../models/subtitle.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/buttons/app_back_button.dart';
@ -49,6 +50,9 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
void initState() {
_subWorkOrders = SearchWorkOrder(assignedEmployee: widget.workOrder.assignedEmployee, callRequest: CallRequest());
_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();
}
@ -182,7 +186,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
height: 4,
),
ServiceReportFaultDescription(
requestId: widget.workOrder?.id?.toString(),
requestId: widget.workOrder?.callRequest?.id?.toString(),
initialValue: _subWorkOrders.faultDescription,
onSelect: (status) {
_subWorkOrders.faultDescription = status;
@ -261,6 +265,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
image: _image,
onPick: (image) {
_image = image;
_subWorkOrders.attachmentsWorkOrder ??= [];
_subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}"));
},
),

@ -1,11 +1,14 @@
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/views/app_style/colors.dart';
import '../../../controllers/localization/localization.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/parts/auto_complete_parts_field.dart';
import '../../widgets/parts/part_item.dart';
import '../../widgets/titles/app_sub_title.dart';
class SparePartsBottomSheet extends StatefulWidget {
@ -19,6 +22,7 @@ class SparePartsBottomSheet extends StatefulWidget {
class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final SearchWorkOrder _workOrder = SearchWorkOrder();
bool _validate = false;
@override
void initState() {
@ -53,97 +57,92 @@ class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> {
child: Padding(
padding: const EdgeInsets.all(8.0),
child: SingleChildScrollView(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 8),
if (_workOrder.sparePartsWorkOrders?.length != null)
ListView.builder(
itemCount: _workOrder.sparePartsWorkOrders?.length,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
final wo = _workOrder.sparePartsWorkOrders[index];
return Column(
children: [
ATextFormField(
labelText: _workOrder?.sparePartsWorkOrders[index]?.sparePart?.partNo ?? "Part No.",
onChange: (value) {
_workOrder.sparePartsWorkOrders[index].sparePart = SparePart(partNo: value);
},
),
// const SizedBox(height: 8),
// ATextFormField(
// labelText: "Description",
// hintText: "Add Some Text",
// textInputType: TextInputType.multiline,
// onSaved: (value) {
// _workOrder.sparePartsWorkOrders[index].sparePart = value;
// },
// ),
const SizedBox(height: 8),
ATextFormField(
labelText: _workOrder?.sparePartsWorkOrders[index]?.qty?.toString() ?? "Quantity",
textInputType: TextInputType.number,
onSaved: (value) {
_workOrder.sparePartsWorkOrders[index].qty = double.tryParse(value ?? "");
},
),
const SizedBox(height: 8),
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,
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: double.infinity,
padding: const EdgeInsets.all(16),
margin: const EdgeInsets.symmetric(vertical: 16),
decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: const [
BoxShadow(
color: AColors.grey,
offset: Offset(0, -1),
)
]),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
children: [
Expanded(
flex: 3,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle(subtitle.partNumber),
_validate && _workOrder.sparePartsWorkOrders == null
? ASubTitle(
subtitle.requiredWord,
color: Colors.red,
)
: const SizedBox.shrink(),
const SizedBox(height: 4),
AutoCompletePartsField(
onPick: (part) {
_workOrder.sparePartsWorkOrders ??= [];
_workOrder.sparePartsWorkOrders.add(SparePartsWorkOrders(
id: part.id,
qty: part.quantity,
sparePart: SparePart(id: part.reportPartID, partName: part.name, partNo: part.code),
));
},
),
],
),
const SizedBox(height: 8),
],
);
},
),
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),
),
],
),
SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
child: ListTile(
title: Text(
"Add Part",
style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: AColors.primaryColor),
if (_workOrder.sparePartsWorkOrders?.isNotEmpty ?? false)
Row(
children: [
Expanded(flex: 3, child: Text(subtitle.number)),
Expanded(flex: 1, child: Text(subtitle.quantity)),
],
),
trailing: const Icon(
Icons.add_circle,
color: AColors.primaryColor,
size: 20,
if (_workOrder.sparePartsWorkOrders?.isNotEmpty ?? false)
Column(
children: List.generate(_workOrder.sparePartsWorkOrders?.length, (index) {
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;
return Column(
children: [
Divider(),
const Divider(),
Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Text(
widget.part.code,
style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.bold),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Text(
widget?.part?.code ?? "",
style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.bold),
),
),
),
AIconButton2(
iconData: Icons.add,
color: Theme.of(context).primaryColor,
onPressed: () {
widget.part.quantity++;
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.add,
color: Theme.of(context).primaryColor,
onPressed: () {
widget.part.quantity++;
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
? 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(
iconData: Icons.close,
color: Colors.red,

Loading…
Cancel
Save