create supplier engineer functionality added.

main_design2.0
Sikander Saleem 1 year ago
parent b508e839c5
commit 8273537b00

@ -58,6 +58,7 @@ class URLs {
static get getSingleServiceRequest => "$_baseUrl/return/call/information"; // get
static get getSuppliersAutoComplete => "$_baseUrl/Supplier/GetSuppliersAutoComplete";
static get addSupplierEngineer => "$_baseUrl/Supplier/AddSupplierEngineer";
static get getSystemNotifications => "$_baseUrl/SystemNotification/GetSystemNotifications"; // get
static get getRecentNotifications => "$_baseUrl/return/user/recent/notification"; // get
@ -86,6 +87,7 @@ class URLs {
static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get
static get getServiceReportLastCalls => "$_baseUrl/WorkOrder/GetLookupCallLastSituationBasedOnCase"; // get
static get getAssetTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=500"; // get
static get getPersonRoles => "$_baseUrl/Lookups/GetLookup?lookupEnum=36"; // get
static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get
static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=4"; // get
static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get

@ -1,16 +1,13 @@
import 'dart:convert';
import 'dart:io';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/new_models/gas_refill_model.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/system_notification_model.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_details_page.dart';
@ -35,7 +32,9 @@ class FirebaseNotificationManger {
);
if (settings.authorizationStatus == AuthorizationStatus.authorized) {
token = await messaging.getToken();
try {
token = await messaging.getToken();
} catch (ex) {}
}
print("pushToken:$token");
return token;

@ -16,6 +16,8 @@ import 'package:test_sa/models/service_request/pending_service_request_model.dar
import 'package:test_sa/models/service_request/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/service_request/service_request_search.dart';
import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart';
import 'package:test_sa/models/service_request/supplier_engineer_model.dart';
import 'package:test_sa/models/timer_model.dart';
import '../../../models/service_request/search_work_order.dart';
@ -671,4 +673,25 @@ class ServiceRequestsProvider extends ChangeNotifier {
return [];
}
}
Future<SuppEngineerWorkOrders> addSupplierEngineer(SupplierEngineer supplierEngineer) async {
isLoading = true;
notifyListeners();
Response response;
SuppEngineerWorkOrders res;
try {
response = await ApiManager.instance.post(URLs.addSupplierEngineer, body: supplierEngineer.toJson());
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
res = SuppEngineerWorkOrders.fromJson(json.decode(response.body)["data"]);
}
isLoading = false;
notifyListeners();
return res;
} catch (error) {
isLoading = false;
notifyListeners();
return res;
}
}
}

@ -17,6 +17,7 @@ class SettingProvider extends ChangeNotifier {
user = null;
_assetGroup = null;
prefs.remove(ASettings.user);
prefs.remove(ASettings.localAuth);
prefs.remove(ASettings.assetGroup);
notifyListeners();
}

@ -75,6 +75,7 @@ import 'package:test_sa/providers/service_request_providers/type_of_request_prov
import 'package:test_sa/providers/work_order/asset_types_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/supplier_engineer_provider.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/pages/device_transfer/asset_filter_screen.dart';
import 'package:test_sa/views/pages/device_transfer/asset_search_screen.dart';
@ -183,6 +184,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => ServiceRequestedThroughProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestStatusProvider()),
ChangeNotifierProvider(create: (_) => EngineersProvider()),
ChangeNotifierProvider(create: (_) => SupplierEngineerProvider()),
/// Loan availability not required
// ChangeNotifierProvider(create: (_) => ServiceLoanAvailabilityProvider()),

@ -0,0 +1,30 @@
class SupplierEngineer {
int id;
int supplierId;
String personName;
int personRoleId;
String contact;
String email;
SupplierEngineer({this.id, this.supplierId, this.personName, this.personRoleId, this.contact, this.email});
SupplierEngineer.fromJson(Map<String, dynamic> json) {
id = json['id'];
supplierId = json['supplierId'];
personName = json['personName'];
personRoleId = json['personRoleId'];
contact = json['contact'];
email = json['email'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['supplierId'] = this.supplierId;
data['personName'] = this.personName;
data['personRoleId'] = this.personRoleId;
data['contact'] = this.contact;
data['email'] = this.email;
return data;
}
}

@ -5,6 +5,7 @@ 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/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/notifications/notifications_page.dart';
@ -90,7 +91,8 @@ class AppDrawer extends StatelessWidget {
userProvider.reset();
Navigator.of(context).pop();
Navigator.of(context).pop();
// Navigator.of(context).pop();
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
}
}),
18.height,

@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:test_sa/controllers/providers/settings/app_settings.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';
@ -122,6 +124,7 @@ class _LoginPageState extends State<LoginPage> {
int status = await _userProvider.login(context: context, user: _user);
if (status >= 200 && status < 300 && _userProvider.user.isAuthenticated ?? false) {
await _settingProvider.setUser(_userProvider.user);
(await SharedPreferences.getInstance()).remove(ASettings.localAuth);
await _settingProvider.setRememberMe(_user.userName, _user.password, rememberMe);
/// The below line for the new design

@ -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/lookup.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
class SupplierEngineerProvider extends LoadingListNotifier<Lookup> {
@override
Future getDate() async {
if (loading == true) return -2;
loading = true;
notifyListeners();
loading = true;
notifyListeners();
try {
Response response = await ApiManager.instance.get(URLs.getPersonRoles);
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) => Lookup.fromJson(item)).toList();
}
loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
loading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -19,11 +19,13 @@ import 'package:test_sa/models/new_models/assigned_employee.dart';
import 'package:test_sa/models/new_models/assistant_employee.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/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import 'package:test_sa/views/pages/user/requests/add_supplier_engineer_bottom_sheet.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
@ -315,6 +317,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
context: context,
title: context.translation.supplier,
initialValue: _subWorkOrders.supplier ?? initialSupplier,
showAsBottomSheet: true,
onSelect: (supplier) {
if (supplier != null) {
_subWorkOrders.supplier = supplier;
@ -325,23 +328,65 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
),
if (_showVendorFields) const SizedBox(height: 8),
if (_showVendorFields)
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
context: context,
title: context.translation.supplierEngineer,
enabled: _subWorkOrders?.supplier?.suppPersons?.isNotEmpty ?? false,
staticData: _subWorkOrders?.supplier?.suppPersons,
onSelect: (suppPerson) {
if (suppPerson != null) {
engineer = SuppEngineerWorkOrders(
id: suppPerson?.supplierId,
supplierContactId: suppPerson?.id,
personName: suppPerson?.personName,
contact: suppPerson?.contact,
externalEngCode: suppPerson?.externalEngCode,
email: suppPerson?.email,
);
}
},
Row(
children: [
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
context: context,
title: context.translation.supplierEngineer,
enabled: _subWorkOrders?.supplier?.suppPersons?.isNotEmpty ?? false,
staticData: _subWorkOrders?.supplier?.suppPersons,
showAsBottomSheet: true,
initialValue: engineer == null ? null : SuppPersons.fromJson(engineer.toJson()),
onSelect: (suppPerson) {
print(suppPerson?.toJson());
if (suppPerson != null) {
engineer = SuppEngineerWorkOrders.fromJson(suppPerson.toJson());
// engineer = SuppEngineerWorkOrders(
// id: suppPerson?.supplierId,
// supplierContactId: suppPerson?.id,
// personName: suppPerson?.personName,
// contact: suppPerson?.contact,
// externalEngCode: suppPerson?.externalEngCode,
// email: suppPerson?.email,
// );
setState(() {});
}
},
).expanded,
8.width,
Container(
height: 60.toScreenHeight,
width: 60.toScreenWidth,
decoration: BoxDecoration(
color: _subWorkOrders.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.background(context),
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
),
child: Icon(
Icons.add,
color: context.isDark ? null : AppColor.neutral60,
),
).onPress(_subWorkOrders.supplier?.suppliername == null
? null
: () async {
SuppEngineerWorkOrders suppEngineer = (await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => AddSupplierEngineerBottomSheet(_subWorkOrders.supplier.id),
)) as SuppEngineerWorkOrders;
if (suppEngineer != null) {
if (_subWorkOrders?.supplier?.suppPersons == null) {
_subWorkOrders?.supplier?.suppPersons = [];
}
_subWorkOrders?.supplier?.suppPersons?.add(SuppPersons.fromJson(suppEngineer.toJson()));
engineer = suppEngineer;
setState(() {});
}
}),
],
),
8.height,
ServiceReportFaultDescription(

@ -0,0 +1,151 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart';
import 'package:test_sa/models/service_request/supplier_engineer_model.dart';
import 'package:test_sa/providers/work_order/supplier_engineer_provider.dart';
import '../../../../controllers/providers/api/service_requests_provider.dart';
import '../../../../models/lookup.dart';
import '../../../../new_views/app_style/app_color.dart';
import '../../../../new_views/common_widgets/app_filled_button.dart';
import '../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
class AddSupplierEngineerBottomSheet extends StatefulWidget {
final int supplierId;
const AddSupplierEngineerBottomSheet(this.supplierId, {Key key}) : super(key: key);
@override
State<AddSupplierEngineerBottomSheet> createState() => _AddSupplierEngineerBottomSheetState();
}
class _AddSupplierEngineerBottomSheetState extends State<AddSupplierEngineerBottomSheet> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
Lookup suppEngRole;
SupplierEngineer engineer = SupplierEngineer();
@override
void initState() {
super.initState();
engineer.id = 0;
engineer.supplierId = widget.supplierId;
}
@override
Widget build(BuildContext context) {
final userProvider = Provider.of<UserProvider>(context, listen: false);
return Wrap(
children: [
Container(
clipBehavior: Clip.antiAlias,
margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
decoration: BoxDecoration(
color: Theme.of(context).scaffoldBackgroundColor,
borderRadius: const BorderRadius.only(topRight: Radius.circular(20), topLeft: Radius.circular(20)),
),
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
child: Form(
key: _formKey,
child: SingleChildScrollView(
child: Column(
children: [
Container(
width: 40.toScreenWidth,
height: 5.toScreenHeight,
decoration: BoxDecoration(color: AppColor.neutral40, borderRadius: BorderRadius.circular(30)),
),
Align(
alignment: AlignmentDirectional.centerStart,
child: "Add Engineer For Supplier".heading5(context).custom(fontWeight: FontWeight.w600).paddingOnly(top: 16, bottom: 16),
),
8.height,
AppTextFormField(
labelText: "Engineer Supplier Name".addTranslation,
textInputType: TextInputType.name,
onChange: (text) {
engineer.personName = text.isEmpty ? null : text;
},
onSaved: (text) {
engineer.personName = text.isEmpty ? null : text;
},
),
8.height,
SingleItemDropDownMenu<Lookup, SupplierEngineerProvider>(
context: context,
title: "Role",
initialValue: suppEngRole,
onSelect: (value) {
if (value != null) {
suppEngRole = value;
}
},
),
8.height,
AppTextFormField(
labelText: "Contact".addTranslation,
textInputType: TextInputType.name,
onChange: (text) {
engineer.contact = text.isEmpty ? null : text;
},
onSaved: (text) {
engineer.contact = text.isEmpty ? null : text;
},
),
8.height,
AppTextFormField(
labelText: "Email".addTranslation,
textInputType: TextInputType.name,
onChange: (text) {
engineer.email = text.isEmpty ? null : text;
},
onSaved: (text) {
engineer.email = text.isEmpty ? null : text;
},
),
8.height,
16.height,
Consumer<ServiceRequestsProvider>(
builder: (context, snapshot, _) => AppFilledButton(
label: context.translation.save,
loading: snapshot.isLoading ?? false,
onPressed: () async {
_formKey.currentState.save();
if (engineer.personName.isEmpty) {
"Engineer supplier name is empty".showToast;
return;
}
engineer.personRoleId = suppEngRole?.id;
// print(engineer.toJson());
// return;
SuppEngineerWorkOrders suppEngineer = await snapshot.addSupplierEngineer(engineer);
if (suppEngineer == null) {
Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest}");
return;
}
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
Navigator.pop(context, suppEngineer);
},
),
),
16.height,
],
),
),
),
)
],
);
}
}
Loading…
Cancel
Save