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

design_3.0_demo_module
nextwo 3 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,8 +44,7 @@ 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;
}
}
}

@ -213,6 +213,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
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),
], ],

@ -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,19 +42,7 @@ 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),
decoration: BoxDecoration(
color: AColors.inputFieldBackgroundColor,
border: Border.all(
color: const Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// boxShadow: [
// AppStyle.boxShadow
// ]
),
child: TypeAheadField<SupplierDetails>(
textFieldConfiguration: TextFieldConfiguration( textFieldConfiguration: TextFieldConfiguration(
style: Theme.of(context).textTheme.titleLarge, style: Theme.of(context).textTheme.titleLarge,
controller: _controller, controller: _controller,
@ -70,8 +57,8 @@ class _AutoGeneratedVendorNameState extends State<AutoGeneratedVendorName> {
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,
), ),
suggestionsCallback: (vale) async { suggestionsCallback: (vale) async {
await vendorProvider.getVendors(_controller.text.trim()); // await vendorProvider.getVendors(_controller.text.trim());
return vendorProvider.vendors; // return vendorProvider.vendors;
}, },
itemBuilder: (context, vendor) { itemBuilder: (context, vendor) {
return ListTile(title: Text(vendor.suppliername)); return ListTile(title: Text(vendor.suppliername));
@ -79,7 +66,6 @@ class _AutoGeneratedVendorNameState extends State<AutoGeneratedVendorName> {
onSuggestionSelected: (hospital) { onSuggestionSelected: (hospital) {
widget.onSearch(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_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,247 +124,169 @@ 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(
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,
)
],
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType), (widget.workOrder?.callRequest?.asset?.site?.name ?? "").heading5(context),
const SizedBox(height: 8), 8.height,
Column( "${context.translation.assetNo}: ${widget.workOrder?.callRequest?.asset?.assetNumber ?? ""}".bodyText(context),
crossAxisAlignment: CrossAxisAlignment.start, "${context.translation.callId}: ${widget.workOrder?.callRequest?.id}".bodyText(context),
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(() {});
},
),
], ],
).paddingAll(16),
), ),
const SizedBox(height: 8), // WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType),
Column( 8.height,
crossAxisAlignment: CrossAxisAlignment.start, ADatePicker(
children: [ label: context.translation.visitDate,
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 ?? ""), date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""),
from: DateTime(1950),
onDatePicker: (date) { onDatePicker: (date) {
_subWorkOrders.visitDate = date?.toIso8601String(); _subWorkOrders.visitDate = date?.toIso8601String();
setState(() {}); setState(() {});
}, },
), ),
), 8.height,
], AppTimer(
), label: context.translation.workingHours,
], timer: _subWorkOrders.timer,
), enabled: _subWorkOrders?.timer?.endAt == null,
const SizedBox(height: 8), onChange: (timer) async {
Column( _subWorkOrders.timer = timer;
crossAxisAlignment: CrossAxisAlignment.start, return true;
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(() {});
}, },
), ),
], 8.height,
), SingleItemDropDownMenu<Lookup, ReasonProvider>(
const SizedBox(height: 8), context: context,
Column( title: context.translation.reason,
crossAxisAlignment: CrossAxisAlignment.start, initialValue: _subWorkOrders.reason,
children: [ onSelect: (value) {
ASubTitle(context.translation.faultDescription), _subWorkOrders.reason = value;
if (_validate && _subWorkOrders.faultDescription == null) },
ASubTitle(
context.translation.requiredWord,
color: Colors.red,
), ),
const SizedBox( 8.height,
height: 4, SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
context: context,
title: context.translation.equipmentStatus,
initialValue: _subWorkOrders.equipmentStatus,
onSelect: (value) {
_subWorkOrders.equipmentStatus = value;
},
), ),
ServiceReportFaultDescription( 8.height,
requestId: widget.workOrder?.callRequest?.id?.toString(), ServiceReportLastCallsMenu(
initialValue: _subWorkOrders?.faultDescription, report: _serviceReport,
title: context.translation.callLastSituation,
parentId: widget.workOrder?.callRequest?.id?.toString(),
onSelect: (status) { onSelect: (status) {
_subWorkOrders.faultDescription = status; _serviceReport.calllastSituation = status;
if (mounted) setState(() {}); 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(
const SizedBox(height: 8), labelText: context.translation.mrNumber,
Column( initialValue: _subWorkOrders.mrNumber,
crossAxisAlignment: CrossAxisAlignment.start, onSaved: (value) {
children: [ _subWorkOrders.mrNumber = value;
const ASubTitle("Solution"), },
const SizedBox(height: 4),
ATextFormField(labelText: _subWorkOrders?.faultDescription?.workPerformed ?? "", textInputType: TextInputType.multiline, enable: false),
],
), ),
const SizedBox(height: 8), if (_showVendorFields) const SizedBox(height: 8),
MultiFilesPicker(label: "Attachments", files: _files), if (_showVendorFields)
const SizedBox(height: 8), SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
InkWell(
onTap: () async {
await showModalBottomSheet(
context: context, context: context,
useSafeArea: true, title: context.translation.vendorEng,
isScrollControlled: true, initialValue: _subWorkOrders.supplier,
backgroundColor: Colors.transparent, onSelect: (supplier) {
builder: (context) => WorkOrderDetailsBottomSheet( if (supplier != null) {
subWorkOrder: _subWorkOrders, _subWorkOrders.supplier = supplier;
assetId: widget.workOrder?.callRequest?.asset?.id, log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString());
), setState(() {});
); }
//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),
), ),
), if (_showVendorFields) const SizedBox(height: 8),
), if (_showVendorFields)
const SizedBox(height: 8), SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
InkWell(
onTap: () async {
await showModalBottomSheet(
context: context, context: context,
useSafeArea: true, title: context.translation.vendorName,
isScrollControlled: true, enabled: _subWorkOrders.supplier?.suppPersons?.isNotEmpty ?? false,
backgroundColor: Colors.transparent, staticData: _subWorkOrders.supplier.suppPersons,
builder: (context) => SparePartsBottomSheet( onSelect: (suppPerson) {
subWorkOrder: _subWorkOrders, if (suppPerson != null) {
assetId: widget.workOrder?.callRequest?.asset?.id, engineer = SuppEngineerWorkOrders(
), id: suppPerson?.supplierId,
supplierContactId: suppPerson?.id,
personName: suppPerson?.personName,
contact: suppPerson?.contact,
externalEngCode: suppPerson?.externalEngCode,
email: suppPerson?.email,
); );
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),
),
), ),
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)];
},
), ),
// AMiniOneFilePicker( 8.height,
// file: _file, SingleItemDropDownMenu<SparePart, NullableLoadingProvider>(
// onPick: (file) { context: context,
// _file = file; title: context.translation.partNo,
// _subWorkOrders.attachmentsWorkOrder ??= []; staticData: _subWorkOrders.sparePartsWorkOrders.map((e) => e.sparePart).toList(),
// _subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}")); initialValue: (_subWorkOrders.sparePartsWorkOrders?.isNotEmpty ?? false) ? _subWorkOrders.sparePartsWorkOrders.first.sparePart : null,
// }, onSelect: (part) {
// ), _subWorkOrders.sparePartsWorkOrders.clear();
const SizedBox(height: 50), _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(
text: context.translation.create,
onPressed: () async { onPressed: () async {
_validate = true;
setState(() {}); setState(() {});
if (validate()) { _subWorkOrders.suppEngineerWorkOrders ?? [];
if (_subWorkOrders.calllastSituation.value == 12 && (_subWorkOrders.sparePartsWorkOrders == null || _subWorkOrders.sparePartsWorkOrders.isEmpty)) { if (engineer != null) _subWorkOrders.suppEngineerWorkOrders.add(engineer..id = 0);
await Fluttertoast.showToast(msg: "You have to add parts"); if (await validate()) {
return;
}
_subWorkOrders.attachmentsWorkOrder ??= []; _subWorkOrders.attachmentsWorkOrder ??= [];
for (var file in _files) { for (var file in _files) {
_subWorkOrders.attachmentsWorkOrder.add(Attachment(name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}")); _subWorkOrders.attachmentsWorkOrder.add(Attachment(id: 0, 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) {} if (_formKey.currentState?.validate() ?? false) {}
_formKey.currentState?.save(); _formKey.currentState?.save();
final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false); final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
@ -363,34 +295,61 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
element.id = 0; element.id = 0;
} }
} }
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
final status = await serviceRequestsProvider.createSubWorkOrder(workOrder: _subWorkOrders); final status = await serviceRequestsProvider.createSubWorkOrder(workOrder: _subWorkOrders);
_isLoading = false; Navigator.of(context).pop();
setState(() {});
if (status >= 200 && status < 300) { if (status >= 200 && status < 300) {
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage); Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context).pop();
} else { } else {
String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: context.translation); String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: context.translation);
ScaffoldMessenger.of(context).showSnackBar(SnackBar( ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(errorMessage)));
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,37 +1,20 @@
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;
WorkOrderDetails({@required this.item, this.assetType, Key key}) : super(key: key); const 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: [
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: [ children: [
_buildRow(context.translation.callId, item.callRequest?.id?.toString() ?? "", context), _buildRow(context.translation.callId, item.callRequest?.id?.toString() ?? "", context),
_buildRow(context.translation.assetNumber, item.callRequest?.asset?.assetNumber ?? "", context), _buildRow(context.translation.assetNumber, item.callRequest?.asset?.assetNumber ?? "", context),
@ -39,42 +22,19 @@ class WorkOrderDetails extends StatelessWidget {
_buildRow(context.translation.assetName, item.callRequest?.asset?.assetNumber ?? '', context), _buildRow(context.translation.assetName, item.callRequest?.asset?.assetNumber ?? '', context),
_buildRow(context.translation.department, item.callRequest?.asset?.department ?? '', context), _buildRow(context.translation.department, item.callRequest?.asset?.department ?? '', context),
_buildRow(context.translation.assetSN, item.callRequest?.asset?.assetSerialNo ?? '', 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.model, item.callRequest?.asset?.modelDefinition?.modelName ?? "", context),
_buildRow("Manufacturer", item.callRequest?.asset?.modelDefinition?.manufacturerName ?? "", context), _buildRow(context.translation.manufacture, item.callRequest?.asset?.modelDefinition?.manufacturerName ?? "", context),
_buildRow(context.translation.site, item.callRequest?.asset?.site?.custName ?? "", context), _buildRow(context.translation.site, item.callRequest?.asset?.site?.custName ?? "", context),
], ],
), ).toShadowContainer(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),
)
],
);
} }
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,6 +189,7 @@ 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),

@ -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(
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( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
StatusLabel(label: workOrder.currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40), 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, 8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark?AppColor.neutral30:const Color(0xFF3B3D4A))), Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
8.height, 8.height,
Text( Text(
'${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName}', '${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( Text(
'${context.translation.status}: ${workOrder.currentSituation.name}', '${context.translation.status}: ${workOrder.currentSituation.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( Text(
'${context.translation.orderWorkNumber}: ${workOrder.workOrderNo}', '${context.translation.orderWorkNumber}: ${workOrder.workOrderNo}',
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( Text(
'${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.name ?? ""}', '${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.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.visitDate}: ${workOrder.visitDate?.toServiceRequestDetailsFormat ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))), Text('${context.translation.visitDate}: ${workOrder.visitDate?.toServiceRequestDetailsFormat ?? ""}',
Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}', 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.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))), Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}',
Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}', 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.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: context.isDark?AppColor.neutral10:const Color(0xFF757575))), Text('${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}',
Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}', 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.callLastSituation}: ${workOrder.calllastSituation.name ?? '' ?? ""}', 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), ).toShadowContainer(context),
), ).paddingAll(16).expanded,
).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,7 +34,8 @@ 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,

@ -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