Merge remote-tracking branch 'origin/main_design2.0' into main_design2.0

main_design2.0
nextwo 2 years ago
commit 0a699fe33b

@ -1,53 +0,0 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
class VendorProvider extends ChangeNotifier {
void reset() {
_vendors = null;
_loading = null;
_stateCode = null;
}
int _stateCode;
int get stateCode => _stateCode;
List<SupplierDetails> _vendors;
List<SupplierDetails> get vendors => _vendors;
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
Future<int> getVendors(String text) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get("${URLs.getSuppliersAutoComplete}?searchText=$text");
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List suppliersJson = json.decode(response.body)["data"];
_vendors = suppliersJson.map((type) => SupplierDetails.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -363,5 +363,9 @@
"trackAssetTransfer" : "تتبع نقل اجهزة",
"total" : "مجموع",
"allRequests" : "كل الطلبات",
"requestStatus" : "حالة الطلب"
"requestStatus" : "حالة الطلب",
"createSubWorkOrder" : "إنشاء أمر عمل فرعي",
"mrNumber" : "MR Number",
"vendorEng" : "المهندس المزود",
"vendorName" : "اسم المزود"
}

@ -365,5 +365,9 @@
"total" : "Total",
"noDataFound" : "No Data Found",
"allRequests" : "All Requests",
"requestStatus" : "Request Status"
"requestStatus" : "Request Status",
"createSubWorkOrder" : "Create Sub Work Order",
"mrNumber" : "MR Number",
"vendorEng" : "Vendor Engineer",
"vendorName" : "Vendor Name"
}

@ -69,6 +69,7 @@ import 'package:test_sa/providers/service_request_providers/requested_through_pr
import 'package:test_sa/providers/service_request_providers/type_of_request_provider.dart';
import 'package:test_sa/providers/work_order/reason_provider.dart';
import 'package:test_sa/providers/work_order/service_type_provider.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/pages/device_transfer/asset_filter_screen.dart';
import 'package:test_sa/views/pages/device_transfer/asset_search_screen.dart';
import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart';
@ -191,6 +192,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => PPMDeviceStatusProvider()),
ChangeNotifierProvider(create: (_) => CommentsProvider()),
ChangeNotifierProvider(create: (_) => RequestStatusProvider()),
ChangeNotifierProvider(create: (_) => VendorProvider()),
],
child: GestureDetector(
onTap: () {

@ -44,7 +44,7 @@ class Building extends Base {
map['id'] = id;
map['name'] = name;
map['value'] = value;
if(addFloor) {
if (addFloor) {
if (floors != null) {
map['floors'] = floors.map((v) => v.toJson()).toList();
}

@ -44,10 +44,9 @@ class Floor extends Base {
map['id'] = id;
map['name'] = name;
map['value'] = value;
if (addDepartments)
if (departments != null) {
map['departments'] = departments.map((v) => v.toJson()).toList();
}
return map;
if (addDepartments) if (departments != null) {
map['departments'] = departments.map((v) => v.toJson()).toList();
}
return map;
}
}

@ -1,4 +1,6 @@
class SuppEngineerWorkOrders {
import 'package:test_sa/models/base.dart';
class SuppEngineerWorkOrders extends Base {
SuppEngineerWorkOrders({
this.id,
this.supplierContactId,
@ -7,12 +9,14 @@ class SuppEngineerWorkOrders {
this.contact,
this.externalEngCode,
this.email,
});
}) : super(identifier: id?.toString(), name: personName);
SuppEngineerWorkOrders.fromJson(dynamic json) {
id = json['id'];
identifier = id?.toString();
supplierContactId = json['supplierContactId'];
personName = json['personName'];
name = personName;
personRoleName = json['personRoleName'];
contact = json['contact'];
externalEngCode = json['externalEngCode'];

@ -1,8 +1,10 @@
class SupplierDetails {
import 'package:test_sa/models/base.dart';
class SupplierDetails extends Base {
SupplierDetails({
this.id,
this.suppliername,
this.name,
this.nameX,
this.website,
this.email,
this.code,
@ -19,12 +21,14 @@ class SupplierDetails {
this.attachments,
this.suppPersons,
this.suppTCodes,
});
}) : super(name: suppliername, identifier: id?.toString());
SupplierDetails.fromJson(dynamic json) {
id = json['id'];
identifier = id?.toString();
suppliername = json['suppliername'];
name = json['name'];
name = suppliername;
nameX = json['name'];
website = json['website'];
email = json['email'];
code = json['code'];
@ -74,7 +78,7 @@ class SupplierDetails {
}
num id;
String suppliername;
String name;
String nameX;
String website;
String email;
String code;
@ -94,7 +98,7 @@ class SupplierDetails {
SupplierDetails copyWith({
num id,
String suppliername,
String name,
String nameX,
String website,
String email,
String code,
@ -115,7 +119,7 @@ class SupplierDetails {
SupplierDetails(
id: id ?? this.id,
suppliername: suppliername ?? this.suppliername,
name: name ?? this.name,
nameX: nameX ?? this.nameX,
website: website ?? this.website,
email: email ?? this.email,
code: code ?? this.code,
@ -137,7 +141,7 @@ class SupplierDetails {
final map = <String, dynamic>{};
map['id'] = id;
map['suppliername'] = suppliername;
map['name'] = name;
map['name'] = nameX;
map['website'] = website;
map['email'] = email;
map['code'] = code;
@ -210,7 +214,7 @@ class SuppTCodes {
}
}
class SuppPersons {
class SuppPersons extends Base {
SuppPersons({
this.id,
this.supplierId,
@ -219,12 +223,14 @@ class SuppPersons {
this.contact,
this.externalEngCode,
this.email,
});
}) : super(name: personName, identifier: id?.toString());
SuppPersons.fromJson(dynamic json) {
id = json['id'];
identifier = id?.toString();
supplierId = json['supplierId'];
personName = json['personName'];
name = personName;
personRoleId = json['personRoleId'];
contact = json['contact'];
externalEngCode = json['externalEngCode'];

@ -45,7 +45,7 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
return element == widget.initialValue;
});
if (result?.isNotEmpty??false) _selectedItem = result.first;
if (result?.isNotEmpty ?? false) _selectedItem = result.first;
if (widget.onSelect != null && (widget.initialValue?.identifier ?? "") != (_selectedItem?.identifier ?? "")) {
widget.onSelect(_selectedItem);
}
@ -64,7 +64,7 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
return element == widget.initialValue;
});
if (result?.isNotEmpty??false) {
if (result?.isNotEmpty ?? false) {
_selectedItem = result.first;
} else {
_selectedItem = null;

@ -0,0 +1,35 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
class VendorProvider extends LoadingListNotifier<SupplierDetails> {
@override
Future getDate() async {
if (loading == true) return -2;
loading = true;
notifyListeners();
loading = true;
notifyListeners();
try {
Response response = await ApiManager.instance.get("${URLs.getSuppliersAutoComplete}?searchText=${""}");
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
items = categoriesListJson.map((item) => SupplierDetails.fromJson(item)).toList();
}
loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
loading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -212,9 +212,10 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
children: [
context.translation.transferDetails.heading5(context),
8.height,
'${context.translation.assetName}: ${_formModel.assetName}'.bodyText(context),
'${context.translation.assetName}: ${_formModel.assetName}'.bodyText(context),
///TBDZ
'${context.translation.requesterName}: '.bodyText(context),
'${context.translation.requesterName}: '.bodyText(context),
],
).toShadowContainer(context);
}

@ -1,11 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import '../../../controllers/providers/api/status_drop_down/report/vendor_provider.dart';
import '../../app_style/colors.dart';
import '../../app_style/sizing.dart';
import '../../../providers/work_order/vendor_provider.dart';
class AutoGeneratedVendorName extends StatefulWidget {
final String initialValue;
@ -43,43 +42,30 @@ class _AutoGeneratedVendorNameState extends State<AutoGeneratedVendorName> {
@override
Widget build(BuildContext context) {
final vendorProvider = Provider.of<VendorProvider>(context, listen: false);
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: const Color(0xffefefef),
return TypeAheadField<SupplierDetails>(
textFieldConfiguration: TextFieldConfiguration(
style: Theme.of(context).textTheme.titleLarge,
controller: _controller,
textAlign: TextAlign.center,
decoration: const InputDecoration(
hintText: "Vendor Name",
border: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: [
// AppStyle.boxShadow
// ]
textInputAction: TextInputAction.search,
),
child: TypeAheadField<SupplierDetails>(
textFieldConfiguration: TextFieldConfiguration(
style: Theme.of(context).textTheme.titleLarge,
controller: _controller,
textAlign: TextAlign.center,
decoration: const InputDecoration(
hintText: "Vendor Name",
border: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
),
textInputAction: TextInputAction.search,
),
suggestionsCallback: (vale) async {
await vendorProvider.getVendors(_controller.text.trim());
return vendorProvider.vendors;
},
itemBuilder: (context, vendor) {
return ListTile(title: Text(vendor.suppliername));
},
onSuggestionSelected: (hospital) {
widget.onSearch(hospital);
},
),
);
suggestionsCallback: (vale) async {
// await vendorProvider.getVendors(_controller.text.trim());
// return vendorProvider.vendors;
},
itemBuilder: (context, vendor) {
return ListTile(title: Text(vendor.suppliername));
},
onSuggestionSelected: (hospital) {
widget.onSearch(hospital);
},
).toShadowContainer(context);
}
}

@ -9,29 +9,35 @@ import 'package:test_sa/controllers/providers/api/service_requests_provider.dart
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/lookup.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
import 'package:test_sa/models/service_request/service_report.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart';
import 'package:test_sa/views/pages/sub_workorder/work_order_details_bottom_sheet.dart';
import 'package:test_sa/views/pages/sub_workorder/workorder_details.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.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';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/status/service_request/service_request_defect_types_mune.dart';
import '../../../attachment.dart';
import '../../../controllers/api_routes/http_status_manger.dart';
import '../../../controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart';
import '../../../models/service_request/spare_parts.dart';
import '../../../models/service_request/supp_engineer_work_orders.dart';
import '../../../models/service_request/supplier_details.dart';
import '../../../models/service_request/wo_call_request.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/buttons/app_back_button.dart';
import '../../widgets/buttons/app_button.dart';
import '../../../new_views/common_widgets/app_lazy_loading.dart';
import '../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../providers/loading_list_notifier.dart';
import '../../../providers/work_order/reason_provider.dart';
import '../../widgets/date_and_time/date_picker.dart';
import '../../widgets/status/report/service_report_fault_description.dart';
import '../../widgets/status/report/service_report_reasons.dart';
import '../../widgets/titles/app_sub_title.dart';
import '../../widgets/status/report/service_report_assistant_employee_menu.dart';
import '../../widgets/status/report/service_report_last_call.dart';
import '../../widgets/timer/app_timer.dart';
class CreateSubWorkOrderPage extends StatefulWidget {
static const id = "/CreateSubWorkOrder";
@ -46,11 +52,11 @@ class CreateSubWorkOrderPage extends StatefulWidget {
class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
SearchWorkOrder _subWorkOrders;
Lookup _serviceReportReason = Lookup();
ServiceReport _serviceReport;
final List<File> _files = [];
bool _isLoading = false;
bool _validate = false;
bool _showVendorFields = false;
SuppEngineerWorkOrders engineer;
@override
void initState() {
@ -69,33 +75,36 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
}
}
var assetTypesProvider;
ServiceStatusProvider assetTypesProvider;
CallRequest _callRequestForWorkOrder;
Future getAssetType() async {
//if (assetTypesProvider == null) {
final serviceRequestProvider = Provider.of<ServiceRequestsProvider>(context);
Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset();
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.copyDetails(subWoDetails);
_serviceReport.equipmentStatus = subWoDetails.equipmentStatus;
_serviceReport.reason = subWoDetails.reason;
_serviceReport.faultDescription = subWoDetails.faultDescription;
_serviceReportReason = _subWorkOrders.reason;
// _serviceReport.faultDescription = subWoDetails.faultDescription;
}
await assetTypesProvider.getTypes();
_subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere(
(element) => element.value == _callRequestForWorkOrder?.assetType,
orElse: () => null,
);
if (checkVendorFieldsVisibility(_subWorkOrders.calllastSituation)) {
if (_subWorkOrders.suppEngineerWorkOrders?.isNotEmpty ?? false) {
engineer = _subWorkOrders.suppEngineerWorkOrders?.last;
engineer?.id = engineer?.supplierContactId;
}
_subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id);
}
setState(() {
_isLoading = false;
});
//}
}
@override
@ -105,6 +114,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
}
return Scaffold(
appBar: DefaultAppBar(title: context.translation.createSubWorkOrder),
body: SafeArea(
child: _isLoading
? const ALoading()
@ -114,283 +124,232 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Container(
color: AColors.primaryColor,
padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4),
Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
children: [
const ABackButton(),
Expanded(
child: Center(
child: Text(
"New Sub Work Order",
style: Theme.of(context).textTheme.titleLarge.copyWith(color: AColors.white, fontStyle: FontStyle.italic),
),
),
),
const SizedBox(
width: 48,
)
],
),
(widget.workOrder?.callRequest?.asset?.site?.name ?? "").heading5(context),
8.height,
"${context.translation.assetNo}: ${widget.workOrder?.callRequest?.asset?.assetNumber ?? ""}".bodyText(context),
"${context.translation.callId}: ${widget.workOrder?.callRequest?.id}".bodyText(context),
],
),
).paddingAll(16),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
child: Column(
children: [
WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const ASubTitle("Equipment status"),
if (_validate && _subWorkOrders?.equipmentStatus == null)
ASubTitle(
context.translation.requiredWord,
color: Colors.red,
),
const SizedBox(
height: 4,
),
ServiceRequestDefectTypesMenu(
initialValue: _serviceReport.equipmentStatus,
onSelect: (status) {
_subWorkOrders.equipmentStatus = status;
_serviceReport.equipmentStatus = status;
setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const ASubTitle("Return to Service"),
// if (_validate && _subWorkOrders.visitDate == null)
// ASubTitle(
// context.translation.requiredWord,
// color: Colors.red,
// ),
const SizedBox(
height: 4,
),
Row(
children: [
Expanded(
child: ADatePicker(
date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""),
from: DateTime(1950),
onDatePicker: (date) {
_subWorkOrders.visitDate = date?.toIso8601String();
setState(() {});
},
),
),
],
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle("Failure ${context.translation.reasons}"),
if (_validate && _subWorkOrders.reason == null)
ASubTitle(
context.translation.requiredWord,
color: Colors.red,
),
const SizedBox(
height: 4,
),
ServiceReportReasonsMenu(
initialValue: _serviceReportReason,
onSelect: (status) {
_serviceReportReason = status;
_subWorkOrders.reason = status;
// setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle(context.translation.faultDescription),
if (_validate && _subWorkOrders.faultDescription == null)
ASubTitle(
context.translation.requiredWord,
color: Colors.red,
),
const SizedBox(
height: 4,
),
ServiceReportFaultDescription(
requestId: widget.workOrder?.callRequest?.id?.toString(),
initialValue: _subWorkOrders?.faultDescription,
onSelect: (status) {
_subWorkOrders.faultDescription = status;
if (mounted) setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const ASubTitle("Solution"),
const SizedBox(height: 4),
ATextFormField(labelText: _subWorkOrders?.faultDescription?.workPerformed ?? "", textInputType: TextInputType.multiline, enable: false),
],
),
const SizedBox(height: 8),
MultiFilesPicker(label: "Attachments", files: _files),
const SizedBox(height: 8),
InkWell(
onTap: () async {
await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => WorkOrderDetailsBottomSheet(
subWorkOrder: _subWorkOrders,
assetId: widget.workOrder?.callRequest?.asset?.id,
),
);
//log(_subWorkOrders?.toJson()?.toString());
},
child: Card(
child: ListTile(
title: Row(
children: [
Text(
"WO Details",
style: Theme.of(context).textTheme.bodyMedium,
),
const Text("*", style: TextStyle(color: Colors.red)),
],
),
trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor),
),
),
),
const SizedBox(height: 8),
InkWell(
onTap: () async {
await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => SparePartsBottomSheet(
subWorkOrder: _subWorkOrders,
assetId: widget.workOrder?.callRequest?.asset?.id,
),
);
log(_subWorkOrders?.toJson()?.toString());
},
child: Card(
child: ListTile(
title: Row(
children: [
Text(
"Spare Parts",
style: Theme.of(context).textTheme.bodyMedium,
),
const Text("*", style: TextStyle(color: Colors.red)),
],
),
trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor),
),
),
),
// AMiniOneFilePicker(
// file: _file,
// onPick: (file) {
// _file = file;
// _subWorkOrders.attachmentsWorkOrder ??= [];
// _subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"));
// },
// ),
const SizedBox(height: 50),
],
// WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType),
8.height,
ADatePicker(
label: context.translation.visitDate,
date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""),
onDatePicker: (date) {
_subWorkOrders.visitDate = date?.toIso8601String();
setState(() {});
},
),
8.height,
AppTimer(
label: context.translation.workingHours,
timer: _subWorkOrders.timer,
enabled: _subWorkOrders?.timer?.endAt == null,
onChange: (timer) async {
_subWorkOrders.timer = timer;
return true;
},
),
8.height,
SingleItemDropDownMenu<Lookup, ReasonProvider>(
context: context,
title: context.translation.reason,
initialValue: _subWorkOrders.reason,
onSelect: (value) {
_subWorkOrders.reason = value;
},
),
8.height,
SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
context: context,
title: context.translation.equipmentStatus,
initialValue: _subWorkOrders.equipmentStatus,
onSelect: (value) {
_subWorkOrders.equipmentStatus = value;
},
),
8.height,
ServiceReportLastCallsMenu(
report: _serviceReport,
title: context.translation.callLastSituation,
parentId: widget.workOrder?.callRequest?.id?.toString(),
onSelect: (status) {
_serviceReport.calllastSituation = status;
if (checkVendorFieldsVisibility(status)) {
_subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id);
engineer = null;
}
if (status?.value == 12 || _subWorkOrders.calllastSituation?.value == 12) {
_subWorkOrders.calllastSituation = status;
_subWorkOrders.mrNumber = null;
} else {
_subWorkOrders.calllastSituation = status;
}
setState(() {});
},
),
if (_subWorkOrders.calllastSituation?.value == 12)
AppTextFormField(
labelText: context.translation.mrNumber,
initialValue: _subWorkOrders.mrNumber,
onSaved: (value) {
_subWorkOrders.mrNumber = value;
},
),
if (_showVendorFields) const SizedBox(height: 8),
if (_showVendorFields)
SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
context: context,
title: context.translation.vendorEng,
initialValue: _subWorkOrders.supplier,
onSelect: (supplier) {
if (supplier != null) {
_subWorkOrders.supplier = supplier;
log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString());
setState(() {});
}
},
),
if (_showVendorFields) const SizedBox(height: 8),
if (_showVendorFields)
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
context: context,
title: context.translation.vendorName,
enabled: _subWorkOrders.supplier?.suppPersons?.isNotEmpty ?? false,
staticData: _subWorkOrders.supplier.suppPersons,
onSelect: (suppPerson) {
if (suppPerson != null) {
engineer = SuppEngineerWorkOrders(
id: suppPerson?.supplierId,
supplierContactId: suppPerson?.id,
personName: suppPerson?.personName,
contact: suppPerson?.contact,
externalEngCode: suppPerson?.externalEngCode,
email: suppPerson?.email,
);
}
},
),
8.height,
ServiceReportAssistantEmployeeMenu(
title: context.translation.assignAssistant,
assetId: widget.workOrder?.callRequest?.asset?.id,
initialValue: (_subWorkOrders.assistantEmployees?.isNotEmpty ?? false) ? _subWorkOrders.assistantEmployees?.first : null,
onSelect: (employee) {
_subWorkOrders.assistantEmployees = [employee.copyWith(id: 0)];
},
),
8.height,
SingleItemDropDownMenu<SparePart, NullableLoadingProvider>(
context: context,
title: context.translation.partNo,
staticData: _subWorkOrders.sparePartsWorkOrders.map((e) => e.sparePart).toList(),
initialValue: (_subWorkOrders.sparePartsWorkOrders?.isNotEmpty ?? false) ? _subWorkOrders.sparePartsWorkOrders.first.sparePart : null,
onSelect: (part) {
_subWorkOrders.sparePartsWorkOrders.clear();
_subWorkOrders.sparePartsWorkOrders.add(SparePartsWorkOrders(id: 0, sparePart: part, qty: 0));
setState(() {});
},
),
8.height,
AppTextFormField(
labelText: context.translation.quantity,
textInputType: TextInputType.number,
enable: _subWorkOrders?.sparePartsWorkOrders?.isNotEmpty,
initialValue: (_subWorkOrders.sparePartsWorkOrders?.isNotEmpty ?? false) ? _subWorkOrders.sparePartsWorkOrders.first.qty?.toString() : null,
onSaved: (text) {
if (_subWorkOrders.sparePartsWorkOrders?.isNotEmpty ?? false) {
_subWorkOrders.sparePartsWorkOrders.first.qty = num.tryParse(text ?? "");
}
},
),
8.height,
MultiFilesPicker(label: context.translation.attachImage, files: _files),
],
),
),
).expanded,
Padding(
padding: const EdgeInsets.all(16.0),
child: AButton(
text: context.translation.create,
onPressed: () async {
_validate = true;
setState(() {});
if (validate()) {
if (_subWorkOrders.calllastSituation.value == 12 && (_subWorkOrders.sparePartsWorkOrders == null || _subWorkOrders.sparePartsWorkOrders.isEmpty)) {
await Fluttertoast.showToast(msg: "You have to add parts");
return;
}
_subWorkOrders.attachmentsWorkOrder ??= [];
for (var file in _files) {
_subWorkOrders.attachmentsWorkOrder.add(Attachment(name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"));
}
if (_subWorkOrders.timer?.startAt == null || _subWorkOrders.timer?.endAt == null) {
Fluttertoast.showToast(msg: "Working hours required");
return;
} else if (_subWorkOrders.calllastSituation == null) {
Fluttertoast.showToast(msg: "${context.translation.callLastSituation} required");
return;
}
_validate = false;
_isLoading = true;
setState(() {});
if (_formKey.currentState?.validate() ?? false) {}
_formKey.currentState?.save();
final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
for (var element in (_subWorkOrders?.suppEngineerWorkOrders ?? [])) {
if (element != null) {
element.id = 0;
}
}
final status = await serviceRequestsProvider.createSubWorkOrder(workOrder: _subWorkOrders);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
Navigator.of(context).pop();
Navigator.of(context).pop();
} else {
String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: context.translation);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(errorMessage),
));
).paddingAll(16).expanded,
AppFilledButton(
label: context.translation.submitRequest,
onPressed: () async {
setState(() {});
_subWorkOrders.suppEngineerWorkOrders ?? [];
if (engineer != null) _subWorkOrders.suppEngineerWorkOrders.add(engineer..id = 0);
if (await validate()) {
_subWorkOrders.attachmentsWorkOrder ??= [];
for (var file in _files) {
_subWorkOrders.attachmentsWorkOrder.add(Attachment(id: 0, name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"));
}
if (_formKey.currentState?.validate() ?? false) {}
_formKey.currentState?.save();
final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
for (var element in (_subWorkOrders?.suppEngineerWorkOrders ?? [])) {
if (element != null) {
element.id = 0;
}
}
},
),
),
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
final status = await serviceRequestsProvider.createSubWorkOrder(workOrder: _subWorkOrders);
Navigator.of(context).pop();
if (status >= 200 && status < 300) {
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
Navigator.of(context).pop();
} else {
String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: context.translation);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(errorMessage)));
}
}
},
).paddingAll(16),
],
),
),
);
}
bool validate() {
if (_subWorkOrders.faultDescription == null || _subWorkOrders.reason == null || _subWorkOrders.equipmentStatus == null) {
bool checkVendorFieldsVisibility(Lookup callsLastSituation) {
bool result = (_subWorkOrders.supplier?.suppliername?.isNotEmpty ?? false) ||
(callsLastSituation?.name?.toLowerCase()?.contains("under repair-vendor") ?? false) ||
(callsLastSituation?.name?.toLowerCase()?.contains("waiting for vendor") ?? false);
setState(() {
_showVendorFields = result;
});
return result;
}
Future<bool> validate() async {
if (_subWorkOrders.reason == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.reason}");
return false;
} else if (_subWorkOrders.equipmentStatus == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.equipmentStatus}");
return false;
} else if (_subWorkOrders.calllastSituation == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}");
return false;
} else if (_showVendorFields && _subWorkOrders.suppEngineerWorkOrders == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.vendorEng}");
return false;
} else if (_showVendorFields && (_subWorkOrders.supplier.suppliername == null || _subWorkOrders.supplier.suppliername.isEmpty)) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.vendorName}");
return false;
} else if (_subWorkOrders.calllastSituation.value == 12 && (_subWorkOrders.sparePartsWorkOrders == null || _subWorkOrders.sparePartsWorkOrders.isEmpty)) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}");
return false;
} else if (_subWorkOrders?.timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
} else if (_subWorkOrders?.timer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
} else {
return true;
}
return true;
}
}

@ -1,80 +1,40 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart';
import '../../../controllers/localization/localization.dart';
import '../../../models/service_request/search_work_order.dart';
import '../../../models/subtitle.dart';
import '../../app_style/colors.dart';
import '../../app_style/sizing.dart';
class WorkOrderDetails extends StatelessWidget {
final SearchWorkOrder item;
Lookup assetType;
final Lookup assetType;
const WorkOrderDetails({@required this.item, this.assetType, Key key}) : super(key: key);
WorkOrderDetails({@required this.item, this.assetType, Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: const [
// AppStyle.boxShadow
// ]
),
child: Column(
children: [
_buildRow(context.translation.callId, item.callRequest?.id?.toString() ?? "", context),
_buildRow(context.translation.assetNumber, item.callRequest?.asset?.assetNumber ?? "", context),
_buildRow("WO No", item.workOrderNo, context),
_buildRow(context.translation.assetName, item.callRequest?.asset?.assetNumber ?? '', context),
_buildRow(context.translation.department, item.callRequest?.asset?.department ?? '', context),
_buildRow(context.translation.assetSN, item.callRequest?.asset?.assetSerialNo ?? '', context),
_buildRow(context.translation.model, item.callRequest?.asset?.modelDefinition?.modelName ?? "", context),
_buildRow("Manufacturer", item.callRequest?.asset?.modelDefinition?.manufacturerName ?? "", context),
_buildRow(context.translation.site, item.callRequest?.asset?.site?.custName ?? "", context),
],
),
),
const SizedBox(height: 8),
Container(
padding: EdgeInsets.all(10),
height: 55,
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
),
child: _buildRow("Asset Type", assetType?.name ?? (item.assetType?.name ?? ""), context),
)
_buildRow(context.translation.callId, item.callRequest?.id?.toString() ?? "", context),
_buildRow(context.translation.assetNumber, item.callRequest?.asset?.assetNumber ?? "", context),
_buildRow("WO No", item.workOrderNo, context),
_buildRow(context.translation.assetName, item.callRequest?.asset?.assetNumber ?? '', context),
_buildRow(context.translation.department, item.callRequest?.asset?.department ?? '', context),
_buildRow(context.translation.assetSN, item.callRequest?.asset?.assetSerialNo ?? '', context),
_buildRow(context.translation.assetType, assetType?.name ?? (item.assetType?.name ?? ""), context),
_buildRow(context.translation.model, item.callRequest?.asset?.modelDefinition?.modelName ?? "", context),
_buildRow(context.translation.manufacture, item.callRequest?.asset?.modelDefinition?.manufacturerName ?? "", context),
_buildRow(context.translation.site, item.callRequest?.asset?.site?.custName ?? "", context),
],
);
).toShadowContainer(context);
}
Widget _buildRow(String title, String value, BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
title + " : ",
style: Theme.of(context).textTheme.subtitle2.copyWith(fontWeight: FontWeight.bold),
),
//if (item.clientName != null)
Text(
value,
style: Theme.of(context).textTheme.subtitle2.copyWith(),
),
"$title: $value".bodyText(context),
],
);
}

@ -1,9 +1,7 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';

@ -10,7 +10,6 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';

@ -189,11 +189,12 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
children: [
context.translation.gasRefill.heading5(context),
8.height,
/// TBD
'${context.translation.gasRequest}:'.bodyText(context),
'${context.translation.cylinderSize}: ${widget.gasRefillModel.gazRefillDetails[0].cylinderSize.value}'.bodyText(context),
'${context.translation.quantity}: ${widget.gasRefillModel.gazRefillDetails[0].requestedQty}'.bodyText(context),
'${context.translation.site}: ${widget.gasRefillModel.site.name}'.bodyText(context),
'${context.translation.gasRequest}:'.bodyText(context),
'${context.translation.cylinderSize}: ${widget.gasRefillModel.gazRefillDetails[0].cylinderSize.value}'.bodyText(context),
'${context.translation.quantity}: ${widget.gasRefillModel.gazRefillDetails[0].requestedQty}'.bodyText(context),
'${context.translation.site}: ${widget.gasRefillModel.site.name}'.bodyText(context),
],
).paddingAll(16),
12.height,

@ -9,6 +9,7 @@ import 'package:test_sa/models/service_request/service_request.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/default_app_bar.dart';
import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart';
import 'package:test_sa/views/pages/user/requests/work_order/update_service_report.dart';
import '../../../../../controllers/providers/api/user_provider.dart';
@ -30,55 +31,64 @@ class WorkOrderDetailsPage extends StatelessWidget {
body: Column(
children: [
SingleChildScrollView(
child: Container(
margin: const EdgeInsets.all(16),
width: double.infinity,
decoration: ShapeDecoration(
color: context.isDark?Theme.of(context).cardColor:Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)],
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(label: workOrder.currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40),
8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark?AppColor.neutral30:const Color(0xFF3B3D4A))),
8.height,
Text(
'${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text(
'${context.translation.status}: ${workOrder.currentSituation.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text(
'${context.translation.orderWorkNumber}: ${workOrder.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text(
'${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.name ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575)),
),
Text('${context.translation.visitDate}: ${workOrder.visitDate?.toServiceRequestDetailsFormat ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
Text('${context.translation.callLastSituation}: ${workOrder.calllastSituation.name ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))),
],
).paddingAll(16),
),
).expanded,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
StatusLabel(label: workOrder.currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40),
if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
Align(alignment: AlignmentDirectional.centerEnd, child: "edit".toSvgAsset(height: 48, width: 48)).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateServiceReport(workOrder: workOrder, request: serviceRequest)));
}),
],
),
8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
8.height,
Text(
'${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)),
),
Text(
'${context.translation.status}: ${workOrder.currentSituation.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)),
),
Text(
'${context.translation.orderWorkNumber}: ${workOrder.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)),
),
Text(
'${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.name ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575)),
),
Text('${context.translation.visitDate}: ${workOrder.visitDate?.toServiceRequestDetailsFormat ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575))),
Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575))),
Text('${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575))),
Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575))),
Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575))),
Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575))),
Text('${context.translation.callLastSituation}: ${workOrder.calllastSituation.name ?? '' ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF757575))),
],
).toShadowContainer(context),
).paddingAll(16).expanded,
if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
AppFilledButton(
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateServiceReport(workOrder: workOrder, request: serviceRequest)));
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: workOrder)),
);
},
label: context.translation.updateRequest,
label: context.translation.createSubWorkOrder,
).paddingAll(16),
],
),

@ -34,13 +34,14 @@ class GasRefillItem extends StatelessWidget {
// 8.width,
StatusLabel(label: item.status.name, textColor: AColors.getRequestStatusTextColor(item.status.value), backgroundColor: AColors.getRequestStatusColor(item.status.value)),
1.width.expanded,
Text(item.startDate != null ? item.startDate.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark?AppColor.neutral10 :const Color(0xFF3B3D4A))),
Text(item.startDate != null ? item.startDate.toServiceRequestCardFormat : "",
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : const Color(0xFF3B3D4A))),
],
),
8.height,
context.translation.gasRefillRequest.heading5(context),
'${context.translation.gasType}: ${item.gazRefillDetails[0].gasType.name}'.bodyText(context),
'${context.translation.site}: ${item.site.name}'.bodyText(context),
'${context.translation.site}: ${item.site.name}'.bodyText(context),
8.height,
Row(
mainAxisSize: MainAxisSize.min,

@ -17,7 +17,6 @@ class GasRefillUpdateDetailsItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -28,7 +27,7 @@ class GasRefillUpdateDetailsItem extends StatelessWidget {
),
RequestInfoRow(
title: "Requested Quantity",
info: details.deliverdQty?.toStringAsFixed(0)??"",
info: details.deliverdQty?.toStringAsFixed(0) ?? "",
),
enableEdit
? Column(

@ -77,13 +77,7 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
textInputAction: TextInputAction.search,
),
suggestionsCallback: (vale) async {
return await _devicesProvider.getDevicesList(
host: _settingProvider.host,
user: _userProvider.user,
hospitalId: widget.hospitalId,
number: vale,
addPagination: false
);
return await _devicesProvider.getDevicesList(host: _settingProvider.host, user: _userProvider.user, hospitalId: widget.hospitalId, number: vale, addPagination: false);
},
itemBuilder: (context, device) {
return device.assetNumber.bodyText(context).paddingOnly(bottom: 16, start: 16);

@ -1,18 +1,10 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/translation_keys.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';

Loading…
Cancel
Save