Compare commits

...

5 Commits

@ -47,6 +47,7 @@ class URLs {
static get getRepairLocation => "$_baseUrl/Lookups/GetLookup?lookupEnum=504";
static get equipmentStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=601";
static get commissioningStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=601";
static get getDateOperators => "$_baseUrl/Lookups/GetLookup?lookupEnum=200";

@ -82,7 +82,7 @@ class AllRequestsProvider extends ChangeNotifier {
}
}
Future<int> getCalenderRequests({@required DateTime from, DateTime to}) async {
Future<int> getCalendarRequests({@required DateTime from, DateTime to}) async {
if (isCalendarLoading == true) return -2;
isCalendarLoading = true;
notifyListeners();

@ -69,6 +69,7 @@ class ServiceReportAssistantsEmployeeProvider extends ChangeNotifier {
List usersListJson = json.decode(response.body);
_assistantEmployees = [];
_assistantEmployees = usersListJson.map((type) => Engineer.fromJson(type ?? {})).map((e) => AssistantEmployees(user: AssignedEmployee(id: e.id, name: e.name))).toList();
_assistantEmployees.insert(0, AssistantEmployees(id: -1, user: AssignedEmployee(id: "-1", name: "-- Select --")));
}
_loading = false;
notifyListeners();

@ -14,4 +14,13 @@ extension StringExtensions on String {
return "null";
}
}
String get toAssetDetailsFormat {
try {
DateTime dateTime = DateTime.tryParse(this);
return DateFormat('dd MMM, yyyy').format(dateTime);
} catch (e) {
return "-";
}
}
}

@ -89,6 +89,7 @@
"maintenanceIssueRequired": "مطلوب مسألة صيانة",
"maxImagesNumberIs5": "أقصى عدد للصورة 5",
"model": "نموذج",
"modelNo": "رقم النموذج",
"nameExist": "الاسم موجود",
"newServiceRequest": "طلب خدمة جديدة",
"newWord": "جديد",
@ -288,6 +289,7 @@
"supplier" : "المزود",
"md": "تعريف النموذج",
"snNumber" : "الرقم التسلسلي",
"snNo" : "الرقم التسلسلي",
"oracleCode" : "رمز اوراكل",
"filter" : "تصفية",
"byDepartment" : "حسب القسم",
@ -309,7 +311,7 @@
"updateWorkOrder" : "تعديل طلب العمل",
"createPreventiveMaintenanceRequest" : "إنشاء طلب صيانة وقائية",
"createNewRequest" : "إنشاء طلب جديد",
"calender" : "التقويم",
"calendar" : "التقويم",
"helpCenter" : "مركز المساعدة",
"rateUs": "قيمنا",
"settings" : " الاعدادات",
@ -376,5 +378,8 @@
"recentActivities" : "الأنشطة الحالية",
"problemDesc" : "وصف المشكلة",
"source": "المصدر",
"costCodeName" : "اسم رمز التكلفة"
"costCodeName" : "اسم رمز التكلفة",
"installationDate" : "تاريخ التثبيت",
"nextPmDate" : "موعد الزيارة الوقائية التالية",
"lastPmDate" : "موعد الزيارة الوقائية الأخيرة"
}

@ -89,6 +89,7 @@
"maintenanceIssueRequired": "maintenance Issue Required",
"maxImagesNumberIs5": "Maximum Images Number Is 5",
"model": "Model",
"modelNo": "Model No.",
"nameExist": "Name Exist",
"newServiceRequest": "New Service Request",
"newWord": "New",
@ -293,6 +294,7 @@
"supplier" : "Supplier",
"md": "MD",
"snNumber" : "SN Number",
"snNo" : "SN No.",
"oracleCode" : "Oracle Code",
"filter" : "Filter",
"byDepartment" : "By Department",
@ -314,7 +316,7 @@
"updateWorkOrder" : "Update Work Order",
"createPreventiveMaintenanceRequest" : "Create Preventive Maintenance Request",
"createNewRequest" : "Create New Request",
"calender" : "Calender",
"calendar" : "Calendar",
"helpCenter" : "Help Center",
"rateUs": "Rate Us",
"settings" : "Settings",
@ -379,5 +381,8 @@
"recentActivities" : "Recent Activities",
"problemDesc" : "Problem Description",
"source": "Source",
"costCodeName" : "Cost Code Name"
"costCodeName" : "Cost Code Name",
"installationDate" : "Installation Date",
"nextPmDate" : "Next PM Date",
"lastPmDate" : "Last PM Date"
}

@ -59,6 +59,7 @@ import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/ppm_checklist_status_provider.dart';
import 'package:test_sa/providers/ppm_device_status_provider.dart';
import 'package:test_sa/providers/ppm_visit_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/commissioning_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/first_action_provider.dart';
import 'package:test_sa/providers/service_request_providers/priority_provider.dart';
@ -181,6 +182,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => ServiceReportAssistantsEmployeeProvider()),
ChangeNotifierProvider(create: (_) => PriorityProvider()),
ChangeNotifierProvider(create: (_) => EquipmentStatusProvider()),
ChangeNotifierProvider(create: (_) => CommissioningStatusProvider()),
ChangeNotifierProvider(create: (_) => RequestedThroughProvider()),
ChangeNotifierProvider(create: (_) => TypeOfRequestProvider()),
ChangeNotifierProvider(create: (_) => FirstActionStatusProvider()),

@ -335,10 +335,10 @@ class ServiceReport {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}");
return false;
}
if (sparePartsWorkOrders?.isEmpty ?? true) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}");
return false;
}
// if (sparePartsWorkOrders?.isEmpty ?? true) {
// await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}");
// return false;
// }
if (reason == null) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.reason}");
return false;

@ -30,7 +30,7 @@ class AppBottomNavigationBar extends StatelessWidget {
navBarItem(context, index: 0, iconName: "overview", label: context.translation.overview),
navBarItem(context, index: 1, iconName: "requests", label: context.translation.myRequests),
navBarItem(context, index: 2, iconName: "assets", label: context.translation.myAssets),
if (isEngineer) navBarItem(context, index: 3, iconName: "calender_bottom", label: context.translation.calender),
if (isEngineer) navBarItem(context, index: 3, iconName: "calender_bottom", label: context.translation.calendar),
navBarItem(context, index: isEngineer ? 4 : 3, iconName: "message", label: context.translation.contactUs),
],
currentIndex: selectedIndex,

@ -135,10 +135,11 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
onChanged: widget.enabled == false
? null
: (T newValue) {
final isNull = newValue.identifier == "-1";
setState(() {
_selectedItem = newValue;
_selectedItem = isNull ? null : newValue;
});
widget.onSelect(newValue);
widget.onSelect(isNull ? null : newValue);
},
items: ((X == NullableLoadingProvider) ? widget.staticData : provider.items)?.map<DropdownMenuItem<T>>((value) {
return DropdownMenuItem<T>(

@ -26,7 +26,7 @@ class _DailyFragmentState extends State<DailyFragment> {
@override
void initState() {
super.initState();
Provider.of<AllRequestsProvider>(context, listen: false).getCalenderRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day));
Provider.of<AllRequestsProvider>(context, listen: false).getCalendarRequests(from: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day));
}
@override

@ -30,7 +30,7 @@ class _MonthlyFragmentState extends State<MonthlyFragment> {
_firstDate = DateTime.utc(2010, 10, 16);
_lastDate = DateTime.utc(2030, 3, 14);
Provider.of<AllRequestsProvider>(context, listen: false)
.getCalenderRequests(from: DateTime(DateTime.now().year, DateTime.now().month, 1), to: DateTime(DateTime.now().year, DateTime.now().month + 1, 0));
.getCalendarRequests(from: DateTime(DateTime.now().year, DateTime.now().month, 1), to: DateTime(DateTime.now().year, DateTime.now().month + 1, 0));
}
@override
@ -64,7 +64,7 @@ class _MonthlyFragmentState extends State<MonthlyFragment> {
lastDate: _lastDate,
);
if (result != null) {
await snapshot.getCalenderRequests(from: DateTime(result.year, result.month, 1), to: DateTime(result.year, result.month + 1, 0));
await snapshot.getCalendarRequests(from: DateTime(result.year, result.month, 1), to: DateTime(result.year, result.month + 1, 0));
_initialDate = result;
setState(() {});
}

@ -34,7 +34,7 @@ class _WeeklyFragmentState extends State<WeeklyFragment> {
_firstDate = DateTime.utc(2010, 10, 16);
_lastDate = DateTime.utc(2030, 3, 14);
Provider.of<AllRequestsProvider>(context, listen: false)
.getCalenderRequests(from: DateTime.now().subtract(Duration(days: DateTime.now().weekday)), to: DateTime.now().add(Duration(days: DateTime.daysPerWeek - DateTime.now().weekday - 1)));
.getCalendarRequests(from: DateTime.now().subtract(Duration(days: DateTime.now().weekday)), to: DateTime.now().add(Duration(days: DateTime.daysPerWeek - DateTime.now().weekday - 1)));
}
@override
@ -57,7 +57,7 @@ class _WeeklyFragmentState extends State<WeeklyFragment> {
_initialDate = date;
Provider.of<AllRequestsProvider>(context, listen: false)
.getCalenderRequests(from: date.subtract(Duration(days: date.weekday)), to: date.add(Duration(days: DateTime.daysPerWeek - date.weekday - 1)));
.getCalendarRequests(from: date.subtract(Duration(days: date.weekday)), to: date.add(Duration(days: DateTime.daysPerWeek - date.weekday - 1)));
}
},
calendarBuilders: CalendarBuilders(

@ -0,0 +1,36 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import '../../controllers/api_routes/api_manager.dart';
import '../../controllers/api_routes/urls.dart';
import '../../models/lookup.dart';
class CommissioningStatusProvider 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.commissioningStatus);
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;
}
}
}

@ -5,8 +5,10 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/site.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/single_item_drop_down_menu.dart';
import 'package:test_sa/providers/department_provider.dart';
@ -16,7 +18,7 @@ import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import '../../../models/device/asset_search.dart';
import '../../../new_views/common_widgets/app_lazy_loading.dart';
import '../../../new_views/common_widgets/default_app_bar.dart';
import '../../widgets/equipment/equipment_status_buttons.dart';
import '../../widgets/equipment/commissioning_status_buttons.dart';
class AssetFilterScreen extends StatefulWidget {
static const String id = "asset_filter_screen";
@ -30,10 +32,10 @@ class AssetFilterScreen extends StatefulWidget {
class _AssetFilterScreenState extends State<AssetFilterScreen> {
AssetSearch filter;
Lookup _commissioningStatus;
Site _site;
Department _department;
String startDate, endDate;
int initialValue;
bool loading = false;
@override
@ -68,7 +70,7 @@ class _AssetFilterScreenState extends State<AssetFilterScreen> {
children: [
Text(
context.translation.reset,
style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.primary50),
).paddingAll(8).onPress(() {
setState(() {
startDate = null;
@ -88,13 +90,14 @@ class _AssetFilterScreenState extends State<AssetFilterScreen> {
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
/// todo : TBD
EquipmentStatusButtons(
CommissioningStatusButtons(
initialValue: _commissioningStatus,
onSelect: (value) {
if (value == null) {
/// the selected value is [All Assets]
}
_commissioningStatus = value;
},
initialvalue: initialValue,
),
16.height,
SingleItemDropDownMenu<Department, DepartmentProvider>(

@ -317,7 +317,11 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
: null,
enabled: !isCurrentAssigned,
onSelect: (employee) {
_subWorkOrders.assistantEmployees = [employee?.copyWith(id: 0)];
if (employee == null) {
_subWorkOrders.assistantEmployees = [];
} else {
_subWorkOrders.assistantEmployees = [employee?.copyWith(id: 0)];
}
},
),
8.height,

@ -97,7 +97,11 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
assetId: widget.assetId,
initialValue: (_workOrder.assistantEmployees?.isNotEmpty ?? false) ? _workOrder.assistantEmployees?.first : null,
onSelect: (assistantsEmployee) {
_workOrder.assistantEmployees = [assistantsEmployee];
if (assistantsEmployee == null) {
_workOrder.assistantEmployees = [];
} else {
_workOrder.assistantEmployees = [assistantsEmployee];
}
},
),
const SizedBox(height: 8),

@ -238,7 +238,11 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
assetId: _serviceReport.callRequest?.asset?.id,
initialValue: (_serviceReport.assistantEmployees?.isNotEmpty ?? false) ? _serviceReport.assistantEmployees?.first : null,
onSelect: (employee) {
_serviceReport.assistantEmployees = [employee?.copyWith(id: 0)];
if (employee == null) {
_serviceReport.assistantEmployees = [];
} else {
_serviceReport.assistantEmployees = [employee?.copyWith(id: 0)];
}
},
),
8.height,

@ -133,7 +133,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
date: DateTime.tryParse(_serviceReport.visitDate ?? ""),
onDatePicker: (date) {
_serviceReport.visitDate = date?.toIso8601String();
// setState(() {});
setState(() {});
},
),
8.height,
@ -223,7 +223,11 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
assetId: _serviceReport.callRequest?.asset?.id,
initialValue: (_serviceReport.assistantEmployees?.isNotEmpty ?? false) ? _serviceReport.assistantEmployees?.first : null,
onSelect: (employee) {
_serviceReport.assistantEmployees = [employee?.copyWith(id: 0)];
if (employee == null) {
_serviceReport.assistantEmployees = [];
} else {
_serviceReport.assistantEmployees = [employee?.copyWith(id: 0)];
}
},
),
8.height,

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_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';
@ -11,10 +12,12 @@ import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart';
import 'package:test_sa/views/pages/user/requests/work_order/update_service_report.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import '../../../../../controllers/providers/api/user_provider.dart';
import '../../../../../models/enums/user_types.dart';
import '../../../../../models/service_request/search_work_order.dart';
import '../../../../../models/service_request/service_report.dart';
import '../../../../widgets/requests/request_status.dart';
class WorkOrderDetailsPage extends StatelessWidget {
@ -29,79 +32,87 @@ class WorkOrderDetailsPage extends StatelessWidget {
UserProvider userProvider = Provider.of<UserProvider>(context);
return Scaffold(
appBar: DefaultAppBar(title: context.translation.workOrder),
body: Column(
children: [
SingleChildScrollView(
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
body: FutureBuilder<ServiceReport>(
future: Provider.of<ServiceRequestsProvider>(context).getSingleServiceReport(context, reportId: workOrder.id),
builder: (context, snapshot) {
final workOrderDetails = snapshot.data;
return Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: workOrder.currentSituation.name,
textColor: AppColor.getRequestStatusTextColorByName(context, workOrder.currentSituation.name),
backgroundColor: AppColor.getRequestStatusColorByName(context, workOrder.currentSituation.name),
),
8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
8.height,
Text(
'${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.status}: ${workOrder.currentSituation.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.orderWorkNumber}: ${workOrder.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.name ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.callLastSituation}: ${workOrder.calllastSituation.name ?? '' ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
],
).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
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)));
}),
if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
Text(workOrder.visitDate?.toServiceRequestCardFormat ?? "", style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
],
)
snapshot.connectionState == ConnectionState.waiting
? const Expanded(child: ALoading())
: SingleChildScrollView(
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: workOrderDetails.currentSituation.name,
textColor: AppColor.getRequestStatusTextColorByName(context, workOrderDetails.currentSituation.name),
backgroundColor: AppColor.getRequestStatusColorByName(context, workOrderDetails.currentSituation.name),
),
8.height,
Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
8.height,
Text(
'${context.translation.assetName}: ${workOrderDetails.callRequest.asset.modelDefinition.assetName}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.status}: ${workOrderDetails.currentSituation.name}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.orderWorkNumber}: ${workOrderDetails.workOrderNo}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.assignedEmployee}: ${workOrderDetails.assignedEmployee?.name ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text('${context.translation.assetSN}: ${workOrderDetails.callRequest.asset.assetSerialNo ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.assetName}: ${workOrderDetails.callRequest.asset.modelDefinition.assetName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.assetNumber}: ${workOrderDetails.callRequest.asset.assetNumber ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.model}: ${workOrderDetails.callRequest.asset.modelDefinition.modelName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.site}: ${workOrderDetails.callRequest.asset.site.custName ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
Text('${context.translation.callLastSituation}: ${workOrderDetails.calllastSituation.name ?? '' ?? ""}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
],
).expanded,
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
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)));
}),
if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) 8.height,
Text(workOrderDetails.visitDate?.toServiceRequestCardFormat ?? "",
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20)),
],
)
],
).toShadowContainer(context),
).paddingAll(16).expanded,
if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
AppFilledButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: workOrder)),
);
},
label: context.translation.createSubWorkOrder,
).paddingAll(16),
],
).toShadowContainer(context),
).paddingAll(16).expanded,
if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
AppFilledButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => CreateSubWorkOrderPage(workOrder: workOrder)),
);
},
label: context.translation.createSubWorkOrder,
).paddingAll(16),
],
),
);
}),
);
}
}

@ -4,6 +4,7 @@ import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/providers/api/devices_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/device/asset_by_id_model.dart';
@ -12,6 +13,7 @@ import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/failed_loading.dart';
import '../../../new_views/app_style/app_color.dart';
import '../requests/request_status.dart';
class AssetDetailPage extends StatefulWidget {
static const String id = "/asset-details";
@ -71,7 +73,7 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
width: 95,
height: 95,
decoration: ShapeDecoration(
color: const Color(0xFFEAF1F4),
color: AppColor.neutral30,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
@ -87,64 +89,52 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_assetProvider.assetById?.modelDefinition?.assetName ?? "-".heading5(context),
),
if (_assetProvider.assetById.commissioningStatus != null)
StatusLabel(
label: _assetProvider.assetById.commissioningStatus.name,
textColor: AppColor.getRequestStatusTextColorByName(context, _assetProvider.assetById.commissioningStatus.name),
backgroundColor: AppColor.getRequestStatusColorByName(context, _assetProvider.assetById.commissioningStatus.name),
),
if (_assetProvider.assetById.commissioningStatus != null) 8.height,
(_assetProvider.assetById?.modelDefinition?.assetName ?? "-").heading5(context),
8.height,
"${context.translation.assetNumber}: ${_assetProvider.assetById.multiAssets.first.assetNumber}".bodyText(context),
"${context.translation.model}: ${_assetProvider.assetById.modelDefinition.modelDefCode}".bodyText(context),
Text(
"${context.translation.serialNo}: ${_assetProvider.assetById.multiAssets.first.assetSerialNo}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
Text(
"MD: ${_assetProvider.assetById.department.departmentName ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
Text(
"Supplier: ${_assetProvider.assetById.supplier?.suppliername ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
Text(
"Manufacturer: ${_assetProvider.assetById.modelDefinition.manufacturerName}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
Text(
"Location: ${_assetProvider.assetById.site.custName}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"${context.translation.assetNo}: ${_assetProvider.assetById.multiAssets.first.assetNumber}".bodyText(context),
"${context.translation.modelNo}: ${_assetProvider.assetById.modelDefinition.modelDefCode}".bodyText(context),
"${context.translation.supplier}: ${_assetProvider.assetById.supplier?.suppliername ?? "-"}".bodyText(context),
"${context.translation.manufacture}: ${_assetProvider.assetById.modelDefinition.manufacturerName}".bodyText(context),
"${context.translation.location}: ${_assetProvider.assetById.site.custName}".bodyText(context),
],
).expanded,
8.width,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
/// TODO: theres no [ORACLE CODE] available to preview
// "${context.translation.oracleCode}: ${"-"}".bodyText(context),
"${context.translation.snNo}: ${_assetProvider.assetById.multiAssets.first.assetSerialNo}".bodyText(context),
"${context.translation.site}: ${_assetProvider.assetById?.site?.custName ?? "-"}".bodyText(context),
"${context.translation.md}: ${_assetProvider.assetById?.modelDefinition?.modelName ?? "-"}".bodyText(context),
],
).expanded,
],
),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
const Divider(color: AppColor.neutral30, height: 1, thickness: 1),
8.height,
Text(
"Installation Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
Text(
"Next PM Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
Text(
"Last PM Date: ${_assetProvider.assetById.installationDate ?? "-"}",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
"${context.translation.installationDate}: ${_assetProvider.assetById.installationDate.toAssetDetailsFormat ?? "-"}".bodyText(context),
"${context.translation.nextPmDate}: ${_assetProvider.assetById.installationDate.toAssetDetailsFormat}".bodyText(context),
"${context.translation.lastPmDate}: ${_assetProvider.assetById.installationDate.toAssetDetailsFormat}".bodyText(context),
if ((_assetProvider.assetById.modelDefinition.assetDescription ?? "").isNotEmpty) ...[
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
const Divider(color: AppColor.neutral30, height: 1, thickness: 1),
8.height,
Text(
_assetProvider.assetById.modelDefinition.assetDescription ?? "-",
maxLines: 2,
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF757575)),
),
_assetProvider.assetById.modelDefinition.assetDescription.bodyText(context),
]
],
)
@ -152,7 +142,7 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
).toShadowContainer(context),
);
}
return Center(child: ALoading());
return const Center(child: ALoading());
},
),
);

@ -39,6 +39,7 @@ class AssetItemListView extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
device.modelDefinition.assetName.heading6(context),
8.height,
"${context.translation.assetNumber} : ${device.assetNumber}".bodyText(context),
"${context.translation.model} : ${device.modelDefinition.modelDefCode}".bodyText(context),
],
@ -47,6 +48,7 @@ class AssetItemListView extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
"${context.translation.serialNo} : ${device.assetSerialNo}".bodyText(context).expanded,
4.width,
Row(
mainAxisSize: MainAxisSize.min,
children: [

@ -8,29 +8,47 @@ import 'package:test_sa/extensions/widget_extensions.dart';
import '../../../models/lookup.dart';
import '../../../new_views/app_style/app_color.dart';
import '../../../providers/service_request_providers/equipment_status_provider.dart';
import '../../../providers/service_request_providers/commissioning_status_provider.dart';
class EquipmentStatusButtons extends StatefulWidget {
class CommissioningStatusButtons extends StatefulWidget {
final Function(Lookup) onSelect;
int initialvalue;
final Lookup initialValue;
EquipmentStatusButtons({Key key, this.onSelect, this.initialvalue}) : super(key: key);
CommissioningStatusButtons({Key key, this.onSelect, this.initialValue}) : super(key: key);
@override
State<EquipmentStatusButtons> createState() => _EquipmentStatusButtonsState();
State<CommissioningStatusButtons> createState() => _CommissioningStatusButtonsState();
}
class _EquipmentStatusButtonsState extends State<EquipmentStatusButtons> {
//int _selectedEquipmentStatusIndex = 0;
class _CommissioningStatusButtonsState extends State<CommissioningStatusButtons> {
int _selectedIndex = 0;
@override
void initState() {
super.initState();
WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) {
Provider.of<EquipmentStatusProvider>(context, listen: false).getDate();
final provider = Provider.of<CommissioningStatusProvider>(context, listen: false);
provider.getDate().then((value) {
if (widget.initialValue != null) _selectedIndex = provider.items.indexOf(widget.initialValue);
setState(() {});
});
});
}
@override
void didUpdateWidget(covariant CommissioningStatusButtons oldWidget) {
if (widget.initialValue != oldWidget.initialValue) {
final provider = Provider.of<CommissioningStatusProvider>(context, listen: false);
if (widget.initialValue != null) {
_selectedIndex = provider.items.indexOf(widget.initialValue);
} else {
_selectedIndex = 0;
}
setState(() {});
}
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
return Column(
@ -38,7 +56,7 @@ class _EquipmentStatusButtonsState extends State<EquipmentStatusButtons> {
children: [
context.translation.jopStatus.heading5(context).paddingOnly(start: 16, end: 16),
8.height,
Consumer<EquipmentStatusProvider>(
Consumer<CommissioningStatusProvider>(
builder: (context, snapshot, _) {
return snapshot.loading
? Shimmer(
@ -62,9 +80,9 @@ class _EquipmentStatusButtonsState extends State<EquipmentStatusButtons> {
padding: EdgeInsetsDirectional.only(start: 16.toScreenWidth),
itemBuilder: (context, index) => Container(
margin: EdgeInsets.symmetric(horizontal: 4.toScreenWidth),
padding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: (widget.initialvalue == index ? 12 : 8).toScreenWidth),
padding: EdgeInsets.symmetric(vertical: 8.toScreenHeight, horizontal: (_selectedIndex == index ? 12 : 8).toScreenWidth),
alignment: Alignment.center,
foregroundDecoration: widget.initialvalue != index
foregroundDecoration: _selectedIndex != index
? null
: ShapeDecoration(
color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(0.1),
@ -74,9 +92,9 @@ class _EquipmentStatusButtonsState extends State<EquipmentStatusButtons> {
),
),
decoration: ShapeDecoration(
color: widget.initialvalue == index ? AppColor.selectedButtonColor(context) : AppColor.unSelectedButtonColor(context),
color: _selectedIndex == index ? AppColor.selectedButtonColor(context) : AppColor.unSelectedButtonColor(context),
shape: RoundedRectangleBorder(
side: widget.initialvalue == index ? BorderSide(width: 1, color: AppColor.blueStatus(context)) : BorderSide.none,
side: _selectedIndex == index ? BorderSide(width: 1, color: AppColor.blueStatus(context)) : BorderSide.none,
borderRadius: BorderRadius.circular(7),
),
shadows: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 14, offset: const Offset(0, 0), spreadRadius: 0)],
@ -84,7 +102,7 @@ class _EquipmentStatusButtonsState extends State<EquipmentStatusButtons> {
child: (index == 0 ? "All Assets" : snapshot.items[index - 1].name).tinyFont(context).custom(color: AppColor.filterButtonTextColor(context)),
).onPress(() {
setState(() {
widget.initialvalue = index;
_selectedIndex = index;
});
widget.onSelect(index == 0 ? null : snapshot.items[index - 1]);
}),

@ -7,7 +7,7 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../../controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart';
import '../../../../models/new_models/assistant_employee.dart';
class ServiceReportAssistantEmployeeMenu extends StatelessWidget {
class ServiceReportAssistantEmployeeMenu extends StatefulWidget {
final Function(AssistantEmployees) onSelect;
final AssistantEmployees initialValue;
final String title;
@ -16,6 +16,28 @@ class ServiceReportAssistantEmployeeMenu extends StatelessWidget {
const ServiceReportAssistantEmployeeMenu({Key key, this.enabled = true, @required this.onSelect, @required this.assetId, this.title, this.initialValue}) : super(key: key);
@override
State<ServiceReportAssistantEmployeeMenu> createState() => _ServiceReportAssistantEmployeeMenuState();
}
class _ServiceReportAssistantEmployeeMenuState extends State<ServiceReportAssistantEmployeeMenu> {
AssistantEmployees _initialValue;
@override
void initState() {
_initialValue = widget.initialValue;
super.initState();
}
@override
void didUpdateWidget(covariant ServiceReportAssistantEmployeeMenu oldWidget) {
if (widget.initialValue != oldWidget.initialValue) {
_initialValue = widget.initialValue;
setState(() {});
}
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
ServiceReportAssistantsEmployeeProvider menuProvider = Provider.of<ServiceReportAssistantsEmployeeProvider>(context);
@ -24,15 +46,15 @@ class ServiceReportAssistantEmployeeMenu extends StatelessWidget {
isFailedLoading: menuProvider.assistantEmployees == null,
stateCode: menuProvider.stateCode,
onRefresh: () async {
await menuProvider.getAssistantEmployees(assetId);
await menuProvider.getAssistantEmployees(widget.assetId);
},
child: SingleItemDropDownMenu<AssistantEmployees, NullableLoadingProvider>(
title: title,
title: widget.title,
context: context,
enabled: enabled,
initialValue: initialValue,
enabled: widget.enabled,
initialValue: _initialValue,
staticData: menuProvider.assistantEmployees,
onSelect: onSelect,
onSelect: widget.onSelect,
),
// child: AssistantEmployeeMenu(
// title: title,

Loading…
Cancel
Save