supplier added on ppm update, cont.

main_design2.0
Sikander Saleem 2 years ago
parent 2a53ab8b8e
commit ae8991493b

@ -87,6 +87,9 @@ class Ppm {
this.safetyName,
this.siteId,
this.siteName,
this. buildingName,
this. floorName,
this. roomName,
this.supplierName,
this.suppPerson,
this.taskStatusName,
@ -203,6 +206,9 @@ class Ppm {
safetyName = json['safetyName'];
siteId = json['siteId'];
siteName = json['siteName'];
buildingName = json['buildingName'];
floorName = json['floorName'];
roomName = json['roomName'];
supplierName = json['supplierName'];
suppPerson = json['suppPerson'];
taskStatusName = json['taskStatusName'];
@ -288,6 +294,9 @@ class Ppm {
String safetyName;
num siteId;
String siteName;
String buildingName;
String floorName;
String roomName;
String supplierName;
String suppPerson;
String taskStatusName;
@ -376,6 +385,9 @@ class Ppm {
String safetyName,
num siteId,
String siteName,
String buildingName,
String floorName,
String roomName,
String supplierName,
String suppPerson,
String taskStatusName,
@ -458,6 +470,9 @@ class Ppm {
safetyName: safetyName ?? this.safetyName,
siteId: siteId ?? this.siteId,
siteName: siteName ?? this.siteName,
buildingName: buildingName ?? this.buildingName,
floorName: floorName ?? this.floorName,
roomName: roomName ?? this.roomName,
supplierName: supplierName ?? this.supplierName,
suppPerson: suppPerson ?? this.suppPerson,
taskStatusName: taskStatusName ?? this.taskStatusName,

@ -2,17 +2,21 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/common_widgets/app_loading_manager.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart';
import '../../models/base.dart';
import '../app_style/app_color.dart';
class SingleItemDropDownMenu<T extends Base, X extends LoadingListNotifier> extends StatefulWidget {
class SingleItemDropDownMenu<T extends Base, X extends LoadingListNotifier>
extends StatefulWidget {
final BuildContext context;
final Function(T) onSelect;
final T initialValue;
final bool enabled;
final bool showAsBottomSheet;
final List<T> staticData;
final String title;
final Color backgroundColor;
@ -27,16 +31,19 @@ class SingleItemDropDownMenu<T extends Base, X extends LoadingListNotifier> exte
this.onSelect,
this.initialValue,
this.enabled = true,
this.showAsBottomSheet = false,
this.staticData,
this.backgroundColor,
this.loading,
}) : super(key: key);
@override
State<SingleItemDropDownMenu<T, X>> createState() => _SingleItemDropDownMenuState<T, X>();
State<SingleItemDropDownMenu<T, X>> createState() =>
_SingleItemDropDownMenuState<T, X>();
}
class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier> extends State<SingleItemDropDownMenu<T, X>> {
class _SingleItemDropDownMenuState<T extends Base,
X extends LoadingListNotifier> extends State<SingleItemDropDownMenu<T, X>> {
T _selectedItem;
X provider;
@ -46,11 +53,15 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
provider = Provider.of<X>(widget.context);
}
if (widget.initialValue != null) {
final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
final result =
(X == NullableLoadingProvider ? widget.staticData : provider.items)
?.where((element) {
return element.identifier == widget.initialValue.identifier;
});
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);
}
}
@ -65,7 +76,9 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
@override
void didUpdateWidget(covariant SingleItemDropDownMenu<T, X> oldWidget) {
if (widget.initialValue != null) {
final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
final result =
(X == NullableLoadingProvider ? widget.staticData : provider.items)
?.where((element) {
return element.identifier == widget.initialValue.identifier;
});
if (result?.isNotEmpty ?? false) {
@ -73,7 +86,9 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
} else {
_selectedItem = null;
}
if (widget.onSelect != null && (widget.initialValue?.identifier ?? "") != (_selectedItem?.identifier ?? "")) {
if (widget.onSelect != null &&
(widget.initialValue?.identifier ?? "") !=
(_selectedItem?.identifier ?? "")) {
widget.onSelect(_selectedItem);
}
} else {
@ -84,10 +99,15 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
@override
Widget build(BuildContext context) {
bool isEmpty = ((X == NullableLoadingProvider ? widget.staticData : provider.items)?.isEmpty ?? true);
bool isEmpty =
((X == NullableLoadingProvider ? widget.staticData : provider.items)
?.isEmpty ??
true);
return AppLoadingManager(
isLoading: widget.loading ?? ((X == NullableLoadingProvider) ? false : provider.loading),
isFailedLoading: (X == NullableLoadingProvider) ? false : provider.items == null,
isLoading: widget.loading ??
((X == NullableLoadingProvider) ? false : provider.loading),
isFailedLoading:
(X == NullableLoadingProvider) ? false : provider.items == null,
stateCode: (X == NullableLoadingProvider) ? 200 : provider.stateCode,
onRefresh: () async {
if (X != NullableLoadingProvider) {
@ -105,19 +125,25 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
? AppColor.neutral40
: widget.backgroundColor ?? AppColor.background(context),
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
boxShadow: [
BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)
],
),
child: Stack(
alignment: Alignment.center,
children: [
if (widget.enabled) const PositionedDirectional(end: 0, child: Icon(Icons.keyboard_arrow_down_rounded)),
if (widget.enabled)
const PositionedDirectional(
end: 0, child: Icon(Icons.keyboard_arrow_down_rounded)),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
widget.title,
style: Theme.of(context).textTheme.bodySmall?.copyWith(color: context.isDark ? null : AppColor.neutral20, fontWeight: FontWeight.w500),
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: context.isDark ? null : AppColor.neutral20,
fontWeight: FontWeight.w500),
),
DropdownButton<T>(
value: _selectedItem,
@ -127,12 +153,14 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
elevation: 0,
isExpanded: true,
hint: Text(
isEmpty || widget.enabled == false ? context.translation.noDataFound : context.translation.select,
isEmpty || widget.enabled == false
? context.translation.noDataFound
: context.translation.select,
style: Theme.of(context).textTheme.bodyLarge,
),
style: TextStyle(color: Theme.of(context).primaryColor),
underline: const SizedBox.shrink(),
onChanged: widget.enabled == false
onChanged: (widget.enabled == false || widget.showAsBottomSheet)
? null
: (T newValue) {
final isNull = newValue.identifier == "-1";
@ -141,7 +169,10 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
});
widget.onSelect(isNull ? null : newValue);
},
items: ((X == NullableLoadingProvider) ? widget.staticData : provider.items)?.map<DropdownMenuItem<T>>((value) {
items: ((X == NullableLoadingProvider)
? widget.staticData
: provider.items)
?.map<DropdownMenuItem<T>>((value) {
return DropdownMenuItem<T>(
value: value,
child: Text(
@ -150,7 +181,31 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
),
);
})?.toList(),
),
).onPress(widget.showAsBottomSheet ? () async{
T _selectedT = (await showModalBottomSheet(
context: context,
isScrollControlled: true,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(20),
),
),
clipBehavior: Clip.antiAliasWithSaveLayer,
builder: (BuildContext context) => SelectionBottomSheet(
items: ((X == NullableLoadingProvider)
? widget.staticData
: provider.items),
selectedItem: _selectedItem,
title: widget.title,
builderString: (emp) => emp?.name ?? "",
),
)) as T;
if(_selectedT !=null) {
widget.onSelect(_selectedT);
}
} : null),
],
),
],

@ -98,7 +98,10 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
'${context.translation.assignedTo}: ${ppm.assignedToName ?? ""}'.bodyText(context),
'${context.translation.engineerName}: ${ppm.assignedEmployeeName ?? ""}'.bodyText(context),
'${context.translation.site}: ${ppm.siteName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context),
'${context.translation.building}: ${ppm.buildingName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context),
'${context.translation.floor}: ${ppm.floorName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context),
'${context.translation.department}: ${ppm.departmentName?.cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context),
'${context.translation.room}: ${(ppm.roomName??"").cleanupWhitespace?.capitalizeFirstOfEach}'.bodyText(context),
],
).toShadowContainer(context).paddingAll(16),
).expanded,

@ -147,10 +147,22 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
'${context.translation.site}: ${serviceRequest.device.site.custName?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.building}: ${serviceRequest.device.building.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.floor}: ${serviceRequest.device.floor.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.department}: ${serviceRequest.device.department.departmentName?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
Text(
'${context.translation.room}: ${(serviceRequest.device.room?.name ?? "").cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
),
8.height,
if ((serviceRequest.callComments ?? "").isNotEmpty) ...[
const Divider().defaultStyle(context),

@ -7,10 +7,13 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/models/ppm/ppm.dart';
import 'package:test_sa/models/ppm/ppm_attachment.dart';
import 'package:test_sa/models/service_request/supplier_details.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/ppm_asset_availability_provider.dart';
import 'package:test_sa/providers/ppm_electrical_safety_provider.dart';
import 'package:test_sa/providers/ppm_service_provider.dart';
import 'package:test_sa/providers/ppm_task_status_provider.dart';
import 'package:test_sa/providers/work_order/vendor_provider.dart';
import '../../../models/lookup.dart';
import '../../../new_views/common_widgets/app_text_form_field.dart';
@ -32,10 +35,16 @@ class PentryTBSForm extends StatefulWidget {
}
class _PentryTBSFormState extends State<PentryTBSForm> {
SupplierDetails initialSupplier;
SuppPersons _suppPerson;
@override
Widget build(BuildContext context) {
widget.model?.files ??= [];
widget.model?.files = (widget.model.files ?? []).where((element) => element.attachmentName != null && element.attachmentName.isNotEmpty).toList();
widget.model?.files = (widget.model.files ?? [])
.where((element) =>
element.attachmentName != null && element.attachmentName.isNotEmpty)
.toList();
return SingleChildScrollView(
child: Column(
@ -44,11 +53,17 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
8.height,
SingleItemDropDownMenu<Lookup, PPMVisitStatusProvider>(
context: context,
initialValue: widget.model.visitStatusId == null ? null : Lookup(name: widget.model.visitStatusName ?? "", id: widget.model.visitStatusId),
initialValue: widget.model.visitStatusId == null
? null
: Lookup(
name: widget.model.visitStatusName ?? "",
id: widget.model.visitStatusId),
title: context.translation.ppmVisit,
onSelect: (value) {
if (value?.value == 4) {
"Status cannot be change to ${value.name}.".addTranslation.showToast;
"Status cannot be change to ${value.name}."
.addTranslation
.showToast;
setState(() {});
return;
}
@ -75,7 +90,11 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
8.height,
SingleItemDropDownMenu<Lookup, PPMDeviceStatusProvider>(
context: context,
initialValue: widget.model.deviceStatusId == null ? null : Lookup(name: widget.model.deviceStatusName ?? "", id: widget.model.deviceStatusId),
initialValue: widget.model.deviceStatusId == null
? null
: Lookup(
name: widget.model.deviceStatusName ?? "",
id: widget.model.deviceStatusId),
title: context.translation.deviceStatus,
onSelect: (value) {
if (value != null) {
@ -87,7 +106,11 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
8.height,
SingleItemDropDownMenu<Lookup, PpmTaskStatusProvider>(
context: context,
initialValue: widget.model.taskStatusId == null ? null : Lookup(name: widget.model.taskStatusName ?? "", id: widget.model.taskStatusId),
initialValue: widget.model.taskStatusId == null
? null
: Lookup(
name: widget.model.taskStatusName ?? "",
id: widget.model.taskStatusId),
title: context.translation.taskStatus,
onSelect: (value) {
if (value != null) {
@ -99,7 +122,11 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
8.height,
SingleItemDropDownMenu<Lookup, PpmAssetAvailabilityProvider>(
context: context,
initialValue: widget.model.assetAvailabilityId == null ? null : Lookup(name: widget.model.assetAvailabilityName ?? "", id: widget.model.assetAvailabilityId),
initialValue: widget.model.assetAvailabilityId == null
? null
: Lookup(
name: widget.model.assetAvailabilityName ?? "",
id: widget.model.assetAvailabilityId),
title: "Asset Availability",
onSelect: (value) {
if (value != null) {
@ -109,10 +136,13 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
},
),
8.height,
SingleItemDropDownMenu<Lookup, PpmServiceProvider>(
context: context,
initialValue: widget.model.typeOfServiceId == null ? null : Lookup(name: widget.model.typeOfServiceName ?? "", id: widget.model.typeOfServiceId),
initialValue: widget.model.typeOfServiceId == null
? null
: Lookup(
name: widget.model.typeOfServiceName ?? "",
id: widget.model.typeOfServiceId),
title: context.translation.serviceType,
onSelect: (value) {
if (value != null) {
@ -120,15 +150,29 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
widget.model.typeOfServiceName = value.name;
widget.model.safetyId = null;
widget.model.safetyName = null;
widget.model.supplierId = null;
widget.model.supplierName = null;
initialSupplier = null;
_suppPerson = null;
widget.model.suppPersonId = null;
widget.model.suppPerson = null;
setState(() {});
}
},
),
8.height,
if(widget.model?.typeOfServiceId !=66)...[
if (widget.model?.typeOfServiceId != 66) ...[
SingleItemDropDownMenu<Lookup, PpmElectricalSafetyProvider>(
context: context,
initialValue: widget.model.safetyId == null ? null : Lookup(name: widget.model.safetyName ?? "", id: widget.model.safetyId),
initialValue: widget.model.safetyId == null
? null
: Lookup(
name: widget.model.safetyName ?? "",
id: widget.model.safetyId),
title: "Electrical Safety",
onSelect: (value) {
if (value != null) {
@ -139,6 +183,43 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
),
8.height,
],
if (widget.model?.typeOfServiceId == 66) ...[
SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
context: context,
title: context.translation.supplier,
initialValue: initialSupplier,
showAsBottomSheet: true,
onSelect: (supplier) {
if (supplier != null) {
widget.model.supplierId = supplier.id;
widget.model.supplierName = supplier.name;
initialSupplier = supplier;
_suppPerson = null;
widget.model.suppPersonId = null;
widget.model.suppPerson = null;
setState(() {});
}
},
),
8.height,
SingleItemDropDownMenu<SuppPersons, NullableLoadingProvider>(
context: context,
title: context.translation.supplierEngineer,
enabled: initialSupplier?.suppPersons?.isNotEmpty ?? false,
initialValue: _suppPerson,
staticData: initialSupplier?.suppPersons,
showAsBottomSheet: true,
onSelect: (suppPerson) {
if (suppPerson != null) {
_suppPerson = suppPerson;
widget.model.suppPersonId = suppPerson.id;
widget.model.suppPerson = suppPerson.name;
setState(() {});
}
},
),
8.height,
],
ADatePicker(
label: context.translation.actualVisitDate,
@ -147,7 +228,8 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
onDatePicker: (date) {
if (date == null) return;
if (date.isBefore(DateTime.parse(widget.model.expectedDate))) {
"Actual visit date must be greater then expected date".showToast;
"Actual visit date must be greater then expected date"
.showToast;
return;
}
@ -181,9 +263,12 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
8.height,
MultiFilesPicker(
label: context.translation.attachImage,
files: widget.model.files.map((e) => File(e.attachmentName)).toList(),
files:
widget.model.files.map((e) => File(e.attachmentName)).toList(),
onChange: (files) {
widget.model.files = files.map((e) => PpmAttachments(attachmentName: e.path)).toList();
widget.model.files = files
.map((e) => PpmAttachments(attachmentName: e.path))
.toList();
},
),
8.height,
@ -193,7 +278,8 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
newSignature: widget.model.localNurseSignature,
onChange: (signature) {
widget.model.localNurseSignature = signature;
widget.model.nurseSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
widget.model.nurseSignature =
"${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
),
8.height,
@ -203,7 +289,8 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
newSignature: widget.model.localEngineerSignature,
onChange: (signature) {
widget.model.localEngineerSignature = signature;
widget.model.engSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
widget.model.engSignature =
"${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
},
),
8.height,

Loading…
Cancel
Save