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

design_3.0_demo_module
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" : "تتبع نقل اجهزة", "trackAssetTransfer" : "تتبع نقل اجهزة",
"total" : "مجموع", "total" : "مجموع",
"allRequests" : "كل الطلبات", "allRequests" : "كل الطلبات",
"requestStatus" : "حالة الطلب" "requestStatus" : "حالة الطلب",
"createSubWorkOrder" : "إنشاء أمر عمل فرعي",
"mrNumber" : "MR Number",
"vendorEng" : "المهندس المزود",
"vendorName" : "اسم المزود"
} }

@ -365,5 +365,9 @@
"total" : "Total", "total" : "Total",
"noDataFound" : "No Data Found", "noDataFound" : "No Data Found",
"allRequests" : "All Requests", "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/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/reason_provider.dart';
import 'package:test_sa/providers/work_order/service_type_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_filter_screen.dart';
import 'package:test_sa/views/pages/device_transfer/asset_search_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'; 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: (_) => PPMDeviceStatusProvider()),
ChangeNotifierProvider(create: (_) => CommentsProvider()), ChangeNotifierProvider(create: (_) => CommentsProvider()),
ChangeNotifierProvider(create: (_) => RequestStatusProvider()), ChangeNotifierProvider(create: (_) => RequestStatusProvider()),
ChangeNotifierProvider(create: (_) => VendorProvider()),
], ],
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {

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

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

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

@ -1,8 +1,10 @@
class SupplierDetails { import 'package:test_sa/models/base.dart';
class SupplierDetails extends Base {
SupplierDetails({ SupplierDetails({
this.id, this.id,
this.suppliername, this.suppliername,
this.name, this.nameX,
this.website, this.website,
this.email, this.email,
this.code, this.code,
@ -19,12 +21,14 @@ class SupplierDetails {
this.attachments, this.attachments,
this.suppPersons, this.suppPersons,
this.suppTCodes, this.suppTCodes,
}); }) : super(name: suppliername, identifier: id?.toString());
SupplierDetails.fromJson(dynamic json) { SupplierDetails.fromJson(dynamic json) {
id = json['id']; id = json['id'];
identifier = id?.toString();
suppliername = json['suppliername']; suppliername = json['suppliername'];
name = json['name']; name = suppliername;
nameX = json['name'];
website = json['website']; website = json['website'];
email = json['email']; email = json['email'];
code = json['code']; code = json['code'];
@ -74,7 +78,7 @@ class SupplierDetails {
} }
num id; num id;
String suppliername; String suppliername;
String name; String nameX;
String website; String website;
String email; String email;
String code; String code;
@ -94,7 +98,7 @@ class SupplierDetails {
SupplierDetails copyWith({ SupplierDetails copyWith({
num id, num id,
String suppliername, String suppliername,
String name, String nameX,
String website, String website,
String email, String email,
String code, String code,
@ -115,7 +119,7 @@ class SupplierDetails {
SupplierDetails( SupplierDetails(
id: id ?? this.id, id: id ?? this.id,
suppliername: suppliername ?? this.suppliername, suppliername: suppliername ?? this.suppliername,
name: name ?? this.name, nameX: nameX ?? this.nameX,
website: website ?? this.website, website: website ?? this.website,
email: email ?? this.email, email: email ?? this.email,
code: code ?? this.code, code: code ?? this.code,
@ -137,7 +141,7 @@ class SupplierDetails {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
map['id'] = id; map['id'] = id;
map['suppliername'] = suppliername; map['suppliername'] = suppliername;
map['name'] = name; map['name'] = nameX;
map['website'] = website; map['website'] = website;
map['email'] = email; map['email'] = email;
map['code'] = code; map['code'] = code;
@ -210,7 +214,7 @@ class SuppTCodes {
} }
} }
class SuppPersons { class SuppPersons extends Base {
SuppPersons({ SuppPersons({
this.id, this.id,
this.supplierId, this.supplierId,
@ -219,12 +223,14 @@ class SuppPersons {
this.contact, this.contact,
this.externalEngCode, this.externalEngCode,
this.email, this.email,
}); }) : super(name: personName, identifier: id?.toString());
SuppPersons.fromJson(dynamic json) { SuppPersons.fromJson(dynamic json) {
id = json['id']; id = json['id'];
identifier = id?.toString();
supplierId = json['supplierId']; supplierId = json['supplierId'];
personName = json['personName']; personName = json['personName'];
name = personName;
personRoleId = json['personRoleId']; personRoleId = json['personRoleId'];
contact = json['contact']; contact = json['contact'];
externalEngCode = json['externalEngCode']; 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) { final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
return element == widget.initialValue; 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 ?? "")) { if (widget.onSelect != null && (widget.initialValue?.identifier ?? "") != (_selectedItem?.identifier ?? "")) {
widget.onSelect(_selectedItem); 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) { final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
return element == widget.initialValue; return element == widget.initialValue;
}); });
if (result?.isNotEmpty??false) { if (result?.isNotEmpty ?? false) {
_selectedItem = result.first; _selectedItem = result.first;
} else { } else {
_selectedItem = null; _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: [ children: [
context.translation.transferDetails.heading5(context), context.translation.transferDetails.heading5(context),
8.height, 8.height,
'${context.translation.assetName}: ${_formModel.assetName}'.bodyText(context), '${context.translation.assetName}: ${_formModel.assetName}'.bodyText(context),
///TBDZ ///TBDZ
'${context.translation.requesterName}: '.bodyText(context), '${context.translation.requesterName}: '.bodyText(context),
], ],
).toShadowContainer(context); ).toShadowContainer(context);
} }

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

@ -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_report_assistants_employee_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/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/extensions/widget_extensions.dart';
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';
import 'package:test_sa/models/service_request/service_report.dart'; import 'package:test_sa/models/service_request/service_report.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/pages/sub_workorder/work_order_details_bottom_sheet.dart'; import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
import 'package:test_sa/views/pages/sub_workorder/workorder_details.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/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.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 '../../../attachment.dart';
import '../../../controllers/api_routes/http_status_manger.dart'; import '../../../controllers/api_routes/http_status_manger.dart';
import '../../../controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.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 '../../../models/service_request/wo_call_request.dart';
import '../../widgets/app_text_form_field.dart'; import '../../../new_views/common_widgets/app_lazy_loading.dart';
import '../../widgets/buttons/app_back_button.dart'; import '../../../new_views/common_widgets/app_text_form_field.dart';
import '../../widgets/buttons/app_button.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/date_and_time/date_picker.dart';
import '../../widgets/status/report/service_report_fault_description.dart'; import '../../widgets/status/report/service_report_assistant_employee_menu.dart';
import '../../widgets/status/report/service_report_reasons.dart'; import '../../widgets/status/report/service_report_last_call.dart';
import '../../widgets/titles/app_sub_title.dart'; import '../../widgets/timer/app_timer.dart';
class CreateSubWorkOrderPage extends StatefulWidget { class CreateSubWorkOrderPage extends StatefulWidget {
static const id = "/CreateSubWorkOrder"; static const id = "/CreateSubWorkOrder";
@ -46,11 +52,11 @@ class CreateSubWorkOrderPage extends StatefulWidget {
class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> { class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
SearchWorkOrder _subWorkOrders; SearchWorkOrder _subWorkOrders;
Lookup _serviceReportReason = Lookup();
ServiceReport _serviceReport; ServiceReport _serviceReport;
final List<File> _files = []; final List<File> _files = [];
bool _isLoading = false; bool _isLoading = false;
bool _validate = false; bool _showVendorFields = false;
SuppEngineerWorkOrders engineer;
@override @override
void initState() { void initState() {
@ -69,33 +75,36 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
} }
} }
var assetTypesProvider; ServiceStatusProvider assetTypesProvider;
CallRequest _callRequestForWorkOrder; CallRequest _callRequestForWorkOrder;
Future getAssetType() async { Future getAssetType() async {
//if (assetTypesProvider == null) {
final serviceRequestProvider = Provider.of<ServiceRequestsProvider>(context); final serviceRequestProvider = Provider.of<ServiceRequestsProvider>(context);
Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset(); Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset();
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.copyDetails(subWoDetails); _subWorkOrders.copyDetails(subWoDetails);
_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(
(element) => element.value == _callRequestForWorkOrder?.assetType, (element) => element.value == _callRequestForWorkOrder?.assetType,
orElse: () => null, 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(() { setState(() {
_isLoading = false; _isLoading = false;
}); });
//}
} }
@override @override
@ -105,6 +114,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
} }
return Scaffold( return Scaffold(
appBar: DefaultAppBar(title: context.translation.createSubWorkOrder),
body: SafeArea( body: SafeArea(
child: _isLoading child: _isLoading
? const ALoading() ? const ALoading()
@ -114,283 +124,232 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
child: Form( child: Form(
key: _formKey, key: _formKey,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Container( Card(
color: AColors.primaryColor,
padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Row( (widget.workOrder?.callRequest?.asset?.site?.name ?? "").heading5(context),
children: [ 8.height,
const ABackButton(), "${context.translation.assetNo}: ${widget.workOrder?.callRequest?.asset?.assetNumber ?? ""}".bodyText(context),
Expanded( "${context.translation.callId}: ${widget.workOrder?.callRequest?.id}".bodyText(context),
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,
)
],
),
], ],
), ).paddingAll(16),
), ),
Padding( // WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType),
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16), 8.height,
child: Column( ADatePicker(
children: [ label: context.translation.visitDate,
WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType), date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""),
const SizedBox(height: 8), onDatePicker: (date) {
Column( _subWorkOrders.visitDate = date?.toIso8601String();
crossAxisAlignment: CrossAxisAlignment.start, setState(() {});
children: [ },
const ASubTitle("Equipment status"), ),
if (_validate && _subWorkOrders?.equipmentStatus == null) 8.height,
ASubTitle( AppTimer(
context.translation.requiredWord, label: context.translation.workingHours,
color: Colors.red, timer: _subWorkOrders.timer,
), enabled: _subWorkOrders?.timer?.endAt == null,
const SizedBox( onChange: (timer) async {
height: 4, _subWorkOrders.timer = timer;
), return true;
ServiceRequestDefectTypesMenu( },
initialValue: _serviceReport.equipmentStatus, ),
onSelect: (status) { 8.height,
_subWorkOrders.equipmentStatus = status; SingleItemDropDownMenu<Lookup, ReasonProvider>(
_serviceReport.equipmentStatus = status; context: context,
setState(() {}); title: context.translation.reason,
}, initialValue: _subWorkOrders.reason,
), onSelect: (value) {
], _subWorkOrders.reason = value;
), },
const SizedBox(height: 8), ),
Column( 8.height,
crossAxisAlignment: CrossAxisAlignment.start, SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
children: [ context: context,
const ASubTitle("Return to Service"), title: context.translation.equipmentStatus,
// if (_validate && _subWorkOrders.visitDate == null) initialValue: _subWorkOrders.equipmentStatus,
// ASubTitle( onSelect: (value) {
// context.translation.requiredWord, _subWorkOrders.equipmentStatus = value;
// color: Colors.red, },
// ), ),
const SizedBox( 8.height,
height: 4, ServiceReportLastCallsMenu(
), report: _serviceReport,
Row( title: context.translation.callLastSituation,
children: [ parentId: widget.workOrder?.callRequest?.id?.toString(),
Expanded( onSelect: (status) {
child: ADatePicker( _serviceReport.calllastSituation = status;
date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""), if (checkVendorFieldsVisibility(status)) {
from: DateTime(1950), _subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id);
onDatePicker: (date) { engineer = null;
_subWorkOrders.visitDate = date?.toIso8601String(); }
setState(() {}); if (status?.value == 12 || _subWorkOrders.calllastSituation?.value == 12) {
}, _subWorkOrders.calllastSituation = status;
), _subWorkOrders.mrNumber = null;
), } else {
], _subWorkOrders.calllastSituation = status;
), }
], setState(() {});
), },
const SizedBox(height: 8), ),
Column( if (_subWorkOrders.calllastSituation?.value == 12)
crossAxisAlignment: CrossAxisAlignment.start, AppTextFormField(
children: [ labelText: context.translation.mrNumber,
ASubTitle("Failure ${context.translation.reasons}"), initialValue: _subWorkOrders.mrNumber,
if (_validate && _subWorkOrders.reason == null) onSaved: (value) {
ASubTitle( _subWorkOrders.mrNumber = value;
context.translation.requiredWord, },
color: Colors.red, ),
), if (_showVendorFields) const SizedBox(height: 8),
const SizedBox( if (_showVendorFields)
height: 4, SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
), context: context,
ServiceReportReasonsMenu( title: context.translation.vendorEng,
initialValue: _serviceReportReason, initialValue: _subWorkOrders.supplier,
onSelect: (status) { onSelect: (supplier) {
_serviceReportReason = status; if (supplier != null) {
_subWorkOrders.reason = status; _subWorkOrders.supplier = supplier;
// setState(() {}); log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString());
}, setState(() {});
), }
], },
), ),
const SizedBox(height: 8), if (_showVendorFields) const SizedBox(height: 8),
Column( if (_showVendorFields)
crossAxisAlignment: CrossAxisAlignment.start, SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
children: [ context: context,
ASubTitle(context.translation.faultDescription), title: context.translation.vendorName,
if (_validate && _subWorkOrders.faultDescription == null) enabled: _subWorkOrders.supplier?.suppPersons?.isNotEmpty ?? false,
ASubTitle( staticData: _subWorkOrders.supplier.suppPersons,
context.translation.requiredWord, onSelect: (suppPerson) {
color: Colors.red, if (suppPerson != null) {
), engineer = SuppEngineerWorkOrders(
const SizedBox( id: suppPerson?.supplierId,
height: 4, supplierContactId: suppPerson?.id,
), personName: suppPerson?.personName,
ServiceReportFaultDescription( contact: suppPerson?.contact,
requestId: widget.workOrder?.callRequest?.id?.toString(), externalEngCode: suppPerson?.externalEngCode,
initialValue: _subWorkOrders?.faultDescription, email: suppPerson?.email,
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),
],
), ),
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, ).paddingAll(16).expanded,
Padding( AppFilledButton(
padding: const EdgeInsets.all(16.0), label: context.translation.submitRequest,
child: AButton( onPressed: () async {
text: context.translation.create, setState(() {});
onPressed: () async { _subWorkOrders.suppEngineerWorkOrders ?? [];
_validate = true; if (engineer != null) _subWorkOrders.suppEngineerWorkOrders.add(engineer..id = 0);
setState(() {}); if (await validate()) {
if (validate()) { _subWorkOrders.attachmentsWorkOrder ??= [];
if (_subWorkOrders.calllastSituation.value == 12 && (_subWorkOrders.sparePartsWorkOrders == null || _subWorkOrders.sparePartsWorkOrders.isEmpty)) { for (var file in _files) {
await Fluttertoast.showToast(msg: "You have to add parts"); _subWorkOrders.attachmentsWorkOrder.add(Attachment(id: 0, name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"));
return; }
} if (_formKey.currentState?.validate() ?? false) {}
_subWorkOrders.attachmentsWorkOrder ??= []; _formKey.currentState?.save();
for (var file in _files) { final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
_subWorkOrders.attachmentsWorkOrder.add(Attachment(name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}")); for (var element in (_subWorkOrders?.suppEngineerWorkOrders ?? [])) {
} if (element != null) {
if (_subWorkOrders.timer?.startAt == null || _subWorkOrders.timer?.endAt == null) { element.id = 0;
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),
));
} }
} }
}, 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() { bool checkVendorFieldsVisibility(Lookup callsLastSituation) {
if (_subWorkOrders.faultDescription == null || _subWorkOrders.reason == null || _subWorkOrders.equipmentStatus == null) { 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; return false;
} else {
return true;
} }
return true;
} }
} }

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

@ -1,9 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/requests/request_status.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/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.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/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/loaders/no_item_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';

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

@ -34,13 +34,14 @@ class GasRefillItem extends StatelessWidget {
// 8.width, // 8.width,
StatusLabel(label: item.status.name, textColor: AColors.getRequestStatusTextColor(item.status.value), backgroundColor: AColors.getRequestStatusColor(item.status.value)), StatusLabel(label: item.status.name, textColor: AColors.getRequestStatusTextColor(item.status.value), backgroundColor: AColors.getRequestStatusColor(item.status.value)),
1.width.expanded, 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, 8.height,
context.translation.gasRefillRequest.heading5(context), context.translation.gasRefillRequest.heading5(context),
'${context.translation.gasType}: ${item.gazRefillDetails[0].gasType.name}'.bodyText(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, 8.height,
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

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

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

@ -1,18 +1,10 @@
import 'package:flutter/material.dart'; 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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_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/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/app_style/colors.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';

Loading…
Cancel
Save