1- Fix Vendor Engineer Issue

2- Add Install Qty & Return Qty
main_design2.0
zaid_daoud 2 years ago
parent ad48521170
commit 19cd20c645

@ -339,7 +339,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
?.map(
(p) => {
"id": p.reportPartID ?? 0,
"sparePart": {"id": p.id, "partNo": p.code, "partName": p.name},
"sparePart": {"id": p.id, "partNo": p.partNo, "partName": p.partName},
"qty": p.quantity
},
)

@ -1,23 +1,28 @@
class Part {
int id;
int reportPartID;
String code;
String name;
String partNo;
String partName;
int quantity;
double returnQty, installQty;
Part({
this.id,
this.reportPartID,
this.code,
this.name,
this.partNo,
this.partName,
this.quantity = 1,
this.installQty,
this.returnQty,
});
Map<String, dynamic> toJson() {
return {
"id": reportPartID ?? 0,
"sparePart": {"id": id, "partNo": code, "partName": name},
"qty": quantity
"sparePart": {"id": id, "partNo": partNo, "partName": partName},
"qty": quantity,
if (returnQty != null) "returnQty": returnQty,
if (installQty != null) "installQty": installQty,
};
}
@ -25,9 +30,11 @@ class Part {
return Part(
id: parsedJson["id"],
reportPartID: reportJson != null ? reportJson["id"] : null,
code: parsedJson["partNo"],
name: parsedJson["partName"],
partNo: parsedJson["partNo"],
partName: parsedJson["partName"],
quantity: reportJson != null ? (reportJson["qty"] ?? 1).toInt() : 1,
returnQty: parsedJson["returnQty"],
installQty: parsedJson["installQty"],
);
}
}

@ -1,4 +1,5 @@
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/sub_work_order_details.dart';
import 'package:test_sa/models/timer_model.dart';
import '../fault_description.dart';
@ -163,7 +164,6 @@ class SearchWorkOrder {
Lookup currentSituation;
Lookup repairLocation;
Lookup reason;
// String startofWorkTime;
// String endofWorkTime;
num workingHours;
@ -321,6 +321,13 @@ class SearchWorkOrder {
}
return map;
}
void copyDetails(SubWorkOrderDetails subWoDetails) {
equipmentStatus = subWoDetails.equipmentStatus;
reason = subWoDetails.reason;
faultDescription = subWoDetails.faultDescription;
sparePartsWorkOrders = subWoDetails.sparePartsWorkOrders;
}
}
class WoParentDto {

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
@ -7,14 +9,12 @@ class SubWorkOrderDetails {
Lookup equipmentStatus;
Lookup reason;
FaultDescription faultDescription;
// Lookup loanAvailablity;
List<SparePartsWorkOrders> sparePartsWorkOrders;
SubWorkOrderDetails({
this.equipmentStatus,
this.reason,
this.faultDescription,
// this.loanAvailablity,
this.sparePartsWorkOrders,
});
@ -22,7 +22,7 @@ class SubWorkOrderDetails {
if (json['equipmentStatus'] != null) equipmentStatus = Lookup.fromJson(json['equipmentStatus']);
if (json['reason'] != null) reason = Lookup.fromJson(json['reason']);
if (json['faultDescription'] != null) faultDescription = FaultDescription.fromJson(json['faultDescription']);
// loanAvailablity = Lookup.fromJson(json['loanAvailablity']);
log("supplier : ${json['supplier']}");
if (json['sparePartsWorkOrders'] != null) {
sparePartsWorkOrders = [];
json['sparePartsWorkOrders'].forEach((v) {
@ -35,14 +35,12 @@ class SubWorkOrderDetails {
Lookup equipmentStatus,
Lookup reason,
FaultDescription faultDescription,
// Lookup loanAvailablity,
List<SparePartsWorkOrders> sparePartsWorkOrders,
}) =>
SubWorkOrderDetails(
equipmentStatus: equipmentStatus ?? this.equipmentStatus,
reason: reason ?? this.reason,
faultDescription: faultDescription ?? this.faultDescription,
// loanAvailablity: loanAvailablity ?? this.loanAvailablity,
sparePartsWorkOrders: sparePartsWorkOrders ?? this.sparePartsWorkOrders,
);
@ -51,7 +49,6 @@ class SubWorkOrderDetails {
map['equipmentStatus'] = equipmentStatus?.toMap();
map['reason'] = reason?.toMap();
map['faultDescription'] = faultDescription?.toJson();
// map['loanAvailablity'] = loanAvailablity?.toMap();
if (sparePartsWorkOrders?.isNotEmpty ?? false) {
map['sparePartsWorkOrders'] = sparePartsWorkOrders?.map((e) => e.toJson())?.toList();
}

@ -75,15 +75,13 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
assetTypesProvider = Provider.of<ServiceStatusProvider>(context, listen: false);
_callRequestForWorkOrder = await serviceRequestProvider.getCallRequestForWorkOrder(callId: widget.workOrder.callRequest.id.toString());
if (_subWorkOrders?.parentWOId != null) {
print(_subWorkOrders?.parentWOId.toString());
final subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders?.parentWOId.toString());
_subWorkOrders.equipmentStatus = subWoDetails.equipmentStatus;
_subWorkOrders.reason = subWoDetails.reason;
_serviceReportReason = _subWorkOrders.reason;
_subWorkOrders.faultDescription = subWoDetails.faultDescription;
_subWorkOrders.sparePartsWorkOrders = subWoDetails.sparePartsWorkOrders;
_subWorkOrders.copyDetails(subWoDetails);
_serviceReport.equipmentStatus = subWoDetails.equipmentStatus;
_serviceReport.reason = subWoDetails.reason;
_serviceReport.faultDescription = subWoDetails.faultDescription;
_serviceReportReason = _subWorkOrders.reason;
}
await assetTypesProvider.getTypes();
_subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere(
@ -213,7 +211,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
onSelect: (status) {
_serviceReportReason = status;
_subWorkOrders.reason = status;
setState(() {});
// setState(() {});
},
),
],

@ -6,6 +6,7 @@ import 'package:test_sa/views/app_style/colors.dart';
import '../../../controllers/localization/localization.dart';
import '../../../models/subtitle.dart';
import '../../app_style/sizing.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/buttons/app_button.dart';
import '../../widgets/parts/auto_complete_parts_field.dart';
import '../../widgets/parts/part_item.dart';
@ -101,7 +102,7 @@ class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> {
_workOrder.sparePartsWorkOrders.add(SparePartsWorkOrders(
id: part.reportPartID,
qty: part.quantity,
sparePart: SparePart(id: part.id, partName: part.name, partNo: part.code),
sparePart: SparePart(id: part.id, partName: part.partName, partNo: part.partNo),
));
},
),
@ -129,19 +130,55 @@ class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> {
Part part = Part(
id: spare.sparePart?.id,
reportPartID: spare.id,
code: spare.sparePart?.partNo,
name: spare.sparePart?.partName,
partNo: spare.sparePart?.partNo,
partName: spare.sparePart?.partName,
quantity: spare.qty?.toInt(),
installQty: spare.installQty,
returnQty: spare.returnQty,
);
return PartItem(
part: part,
onEdit: (qty) {
spare.qty = qty;
},
onDelete: (part) {
_workOrder.sparePartsWorkOrders.remove(spare);
setState(() {});
},
return Column(
children: [
PartItem(
part: part,
onEdit: (qty) {
spare.qty = qty;
},
onDelete: (part) {
_workOrder.sparePartsWorkOrders.remove(spare);
setState(() {});
},
),
if (_workOrder.calllastSituation?.name?.toLowerCase()?.contains("part installation") ?? false)
Row(
children: [
Expanded(
child: ATextFormField(
initialValue: part?.returnQty?.toString(),
hintText: "Return Quantity",
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.number,
onSaved: (value) {
part.returnQty = num.tryParse(value);
},
),
),
const SizedBox(width: 8),
Expanded(
child: ATextFormField(
initialValue: part?.installQty?.toString(),
hintText: "Install Quantity",
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.number,
onSaved: (value) {
part.installQty = num.tryParse(value);
},
),
),
],
),
],
);
},
),

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
@ -33,10 +34,10 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
@override
void initState() {
super.initState();
_workOrder.copyFrom(widget.subWorkOrder);
if (_workOrder.calllastSituation?.name?.toLowerCase()?.contains("under repair-vendor") ?? false) {
_showVendorFields = true;
if (checkVendorFieldsVisibility(_workOrder.calllastSituation)) {
engineer = _workOrder.suppEngineerWorkOrders?.last;
engineer?.id = engineer?.supplierContactId;
_workOrder.supplier ??= SupplierModel(id: _workOrder?.supplier?.id);
}
if (context.mounted) {
@ -44,6 +45,12 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
}
}
bool checkVendorFieldsVisibility(Lookup callsLastSituation) {
bool result = (callsLastSituation?.name?.toLowerCase()?.contains("under repair-vendor") ?? false) || (callsLastSituation?.name?.toLowerCase()?.contains("waiting for vendor") ?? false);
_showVendorFields = result;
return result;
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
@ -126,20 +133,17 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
ServiceReportMaintenanceSituation(
initialValue: _workOrder.calllastSituation,
onSelect: (status) {
if (status.name.toLowerCase().contains("under repair-vendor") || status.name.toLowerCase().contains("waiting for vendor")) {
_showVendorFields = true;
if (checkVendorFieldsVisibility(status)) {
_workOrder.supplier ??= SupplierModel(id: _workOrder?.supplier?.id);
engineer = null;
} else {
_showVendorFields = false;
}
setState(() {});
if (status?.value == 12 || _workOrder.calllastSituation?.value == 12) {
_workOrder.calllastSituation = status;
setState(() {});
} else {
_workOrder.calllastSituation = status;
}
setState(() {});
},
woId: widget.subWorkOrder?.parentWOId?.toString(),
),
@ -158,7 +162,7 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
if (_showVendorFields)
SupplierEngineersMenu(
initialValue: engineer,
engineers: _workOrder.supplier.suppPersons,
engineers: _workOrder?.supplier?.suppPersons,
onSelect: (engineer) {
if (engineer != null) {
this.engineer = engineer;

@ -68,9 +68,9 @@ class _AutoCompletePartsFieldState extends State<AutoCompletePartsField> {
},
itemBuilder: (context, part) {
return ListTile(
title: Text(part.code),
title: Text(part.partNo),
subtitle: Text(
part.name,
part.partName,
style: Theme.of(context).textTheme.caption,
),
);
@ -79,7 +79,7 @@ class _AutoCompletePartsFieldState extends State<AutoCompletePartsField> {
if (widget.clearAfterPick) {
_controller.clear();
} else {
_controller.text = part.code;
_controller.text = part.partNo;
}
widget.onPick(part);
},

@ -21,7 +21,8 @@ class _PartItemState extends State<PartItem> {
return Column(
children: [
const Divider(),
Row(crossAxisAlignment: CrossAxisAlignment.start,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
@ -31,7 +32,7 @@ class _PartItemState extends State<PartItem> {
children: [
Expanded(
child: Text(
widget?.part?.code ?? "",
widget?.part?.partNo ?? "",
style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.bold),
),
),
@ -76,16 +77,16 @@ class _PartItemState extends State<PartItem> {
),
],
),
widget.part.name == null
widget.part.partName == null
? const SizedBox.shrink()
: Text(
widget.part.name,
widget.part.partName,
style: Theme.of(context).textTheme.caption.copyWith(fontSize: 11, fontWeight: FontWeight.bold),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
// Row(crossAxisAlignment: ,)
// Row(crossAxisAlignment: ,)
],
),
),

@ -74,7 +74,7 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
clearAfterPick: false,
initialValue: (model.itemCode?.name ?? "").toString(),
onPick: (part) {
model.itemCode = Lookup(id: part.id, name: part.code);
model.itemCode = Lookup(id: part.id, name: part.partNo);
},
),
const SizedBox(

Loading…
Cancel
Save