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( ?.map(
(p) => { (p) => {
"id": p.reportPartID ?? 0, "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 "qty": p.quantity
}, },
) )

@ -1,23 +1,28 @@
class Part { class Part {
int id; int id;
int reportPartID; int reportPartID;
String code; String partNo;
String name; String partName;
int quantity; int quantity;
double returnQty, installQty;
Part({ Part({
this.id, this.id,
this.reportPartID, this.reportPartID,
this.code, this.partNo,
this.name, this.partName,
this.quantity = 1, this.quantity = 1,
this.installQty,
this.returnQty,
}); });
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {
"id": reportPartID ?? 0, "id": reportPartID ?? 0,
"sparePart": {"id": id, "partNo": code, "partName": name}, "sparePart": {"id": id, "partNo": partNo, "partName": partName},
"qty": quantity "qty": quantity,
if (returnQty != null) "returnQty": returnQty,
if (installQty != null) "installQty": installQty,
}; };
} }
@ -25,9 +30,11 @@ class Part {
return Part( return Part(
id: parsedJson["id"], id: parsedJson["id"],
reportPartID: reportJson != null ? reportJson["id"] : null, reportPartID: reportJson != null ? reportJson["id"] : null,
code: parsedJson["partNo"], partNo: parsedJson["partNo"],
name: parsedJson["partName"], partName: parsedJson["partName"],
quantity: reportJson != null ? (reportJson["qty"] ?? 1).toInt() : 1, 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/lookup.dart';
import 'package:test_sa/models/service_request/sub_work_order_details.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
import '../fault_description.dart'; import '../fault_description.dart';
@ -163,7 +164,6 @@ class SearchWorkOrder {
Lookup currentSituation; Lookup currentSituation;
Lookup repairLocation; Lookup repairLocation;
Lookup reason; Lookup reason;
// String startofWorkTime; // String startofWorkTime;
// String endofWorkTime; // String endofWorkTime;
num workingHours; num workingHours;
@ -321,6 +321,13 @@ class SearchWorkOrder {
} }
return map; return map;
} }
void copyDetails(SubWorkOrderDetails subWoDetails) {
equipmentStatus = subWoDetails.equipmentStatus;
reason = subWoDetails.reason;
faultDescription = subWoDetails.faultDescription;
sparePartsWorkOrders = subWoDetails.sparePartsWorkOrders;
}
} }
class WoParentDto { class WoParentDto {

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

@ -75,15 +75,13 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
assetTypesProvider = Provider.of<ServiceStatusProvider>(context, listen: false); assetTypesProvider = Provider.of<ServiceStatusProvider>(context, listen: false);
_callRequestForWorkOrder = await serviceRequestProvider.getCallRequestForWorkOrder(callId: widget.workOrder.callRequest.id.toString()); _callRequestForWorkOrder = await serviceRequestProvider.getCallRequestForWorkOrder(callId: widget.workOrder.callRequest.id.toString());
if (_subWorkOrders?.parentWOId != null) { if (_subWorkOrders?.parentWOId != null) {
print(_subWorkOrders?.parentWOId.toString());
final subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders?.parentWOId.toString()); final subWoDetails = await serviceRequestProvider.getSubWorkOrderDetails(parentId: _subWorkOrders?.parentWOId.toString());
_subWorkOrders.equipmentStatus = subWoDetails.equipmentStatus; _subWorkOrders.copyDetails(subWoDetails);
_subWorkOrders.reason = subWoDetails.reason;
_serviceReportReason = _subWorkOrders.reason;
_subWorkOrders.faultDescription = subWoDetails.faultDescription;
_subWorkOrders.sparePartsWorkOrders = subWoDetails.sparePartsWorkOrders;
_serviceReport.equipmentStatus = subWoDetails.equipmentStatus; _serviceReport.equipmentStatus = subWoDetails.equipmentStatus;
_serviceReport.reason = subWoDetails.reason; _serviceReport.reason = subWoDetails.reason;
_serviceReport.faultDescription = subWoDetails.faultDescription; _serviceReport.faultDescription = subWoDetails.faultDescription;
_serviceReportReason = _subWorkOrders.reason;
} }
await assetTypesProvider.getTypes(); await assetTypesProvider.getTypes();
_subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere( _subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere(
@ -213,7 +211,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
onSelect: (status) { onSelect: (status) {
_serviceReportReason = status; _serviceReportReason = status;
_subWorkOrders.reason = 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 '../../../controllers/localization/localization.dart';
import '../../../models/subtitle.dart'; import '../../../models/subtitle.dart';
import '../../app_style/sizing.dart'; import '../../app_style/sizing.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/buttons/app_button.dart'; import '../../widgets/buttons/app_button.dart';
import '../../widgets/parts/auto_complete_parts_field.dart'; import '../../widgets/parts/auto_complete_parts_field.dart';
import '../../widgets/parts/part_item.dart'; import '../../widgets/parts/part_item.dart';
@ -101,7 +102,7 @@ class _SparePartsBottomSheetState extends State<SparePartsBottomSheet> {
_workOrder.sparePartsWorkOrders.add(SparePartsWorkOrders( _workOrder.sparePartsWorkOrders.add(SparePartsWorkOrders(
id: part.reportPartID, id: part.reportPartID,
qty: part.quantity, 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( Part part = Part(
id: spare.sparePart?.id, id: spare.sparePart?.id,
reportPartID: spare.id, reportPartID: spare.id,
code: spare.sparePart?.partNo, partNo: spare.sparePart?.partNo,
name: spare.sparePart?.partName, partName: spare.sparePart?.partName,
quantity: spare.qty?.toInt(), quantity: spare.qty?.toInt(),
installQty: spare.installQty,
returnQty: spare.returnQty,
); );
return PartItem( return Column(
part: part, children: [
onEdit: (qty) { PartItem(
spare.qty = qty; part: part,
}, onEdit: (qty) {
onDelete: (part) { spare.qty = qty;
_workOrder.sparePartsWorkOrders.remove(spare); },
setState(() {}); 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:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.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/service_request/search_work_order.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart';
@ -33,10 +34,10 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_workOrder.copyFrom(widget.subWorkOrder); _workOrder.copyFrom(widget.subWorkOrder);
if (_workOrder.calllastSituation?.name?.toLowerCase()?.contains("under repair-vendor") ?? false) { if (checkVendorFieldsVisibility(_workOrder.calllastSituation)) {
_showVendorFields = true; engineer = _workOrder.suppEngineerWorkOrders?.last;
engineer?.id = engineer?.supplierContactId;
_workOrder.supplier ??= SupplierModel(id: _workOrder?.supplier?.id); _workOrder.supplier ??= SupplierModel(id: _workOrder?.supplier?.id);
} }
if (context.mounted) { 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final size = MediaQuery.of(context).size; final size = MediaQuery.of(context).size;
@ -126,20 +133,17 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
ServiceReportMaintenanceSituation( ServiceReportMaintenanceSituation(
initialValue: _workOrder.calllastSituation, initialValue: _workOrder.calllastSituation,
onSelect: (status) { onSelect: (status) {
if (status.name.toLowerCase().contains("under repair-vendor") || status.name.toLowerCase().contains("waiting for vendor")) { if (checkVendorFieldsVisibility(status)) {
_showVendorFields = true;
_workOrder.supplier ??= SupplierModel(id: _workOrder?.supplier?.id); _workOrder.supplier ??= SupplierModel(id: _workOrder?.supplier?.id);
engineer = null; engineer = null;
} else {
_showVendorFields = false;
} }
setState(() {});
if (status?.value == 12 || _workOrder.calllastSituation?.value == 12) { if (status?.value == 12 || _workOrder.calllastSituation?.value == 12) {
_workOrder.calllastSituation = status; _workOrder.calllastSituation = status;
setState(() {}); setState(() {});
} else { } else {
_workOrder.calllastSituation = status; _workOrder.calllastSituation = status;
} }
setState(() {});
}, },
woId: widget.subWorkOrder?.parentWOId?.toString(), woId: widget.subWorkOrder?.parentWOId?.toString(),
), ),
@ -158,7 +162,7 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
if (_showVendorFields) if (_showVendorFields)
SupplierEngineersMenu( SupplierEngineersMenu(
initialValue: engineer, initialValue: engineer,
engineers: _workOrder.supplier.suppPersons, engineers: _workOrder?.supplier?.suppPersons,
onSelect: (engineer) { onSelect: (engineer) {
if (engineer != null) { if (engineer != null) {
this.engineer = engineer; this.engineer = engineer;

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

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

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

Loading…
Cancel
Save