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

design_3.0_internal_audit_module
nextwo 2 years ago
commit df147f3ef1

@ -128,6 +128,7 @@
"unite": "Unit", "unite": "Unit",
"uniteRequired": "Unit Required", "uniteRequired": "Unit Required",
"visitDate": "Visit Date", "visitDate": "Visit Date",
"returnToService": "Return to service",
"whatsApp": "WhatsApp", "whatsApp": "WhatsApp",
"workPerformed": "Work Performed", "workPerformed": "Work Performed",
"actualDate": "Actual Date", "actualDate": "Actual Date",

@ -1,3 +1,5 @@
import 'dart:typed_data';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.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/models/service_request/spare_parts.dart'; import 'package:test_sa/models/service_request/spare_parts.dart';
@ -189,7 +191,9 @@ class SearchWorkOrder {
Lookup equipmentStatus; Lookup equipmentStatus;
List<SuppEngineerWorkOrders> suppEngineerWorkOrders; List<SuppEngineerWorkOrders> suppEngineerWorkOrders;
String engSignature; String engSignature;
Uint8List localEngSignature;
String nurseSignature; String nurseSignature;
Uint8List localNurseSignature;
WoParent woParentDto; WoParent woParentDto;
TimerModel timer; TimerModel timer;
String mrNumber; String mrNumber;

@ -57,7 +57,7 @@ class AppDrawer extends StatelessWidget {
], ],
), ),
8.height, 8.height,
userProvider.user.username.heading3(context).custom(fontWeight: FontWeight.w600), (userProvider.user?.username ?? "").heading3(context).custom(fontWeight: FontWeight.w600),
if ((userProvider.user?.email ?? "").isNotEmpty) (userProvider.user?.email).heading6(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), if ((userProvider.user?.email ?? "").isNotEmpty) (userProvider.user?.email).heading6(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
18.height, 18.height,
1.divider, 1.divider,
@ -75,15 +75,15 @@ class AppDrawer extends StatelessWidget {
children: [ children: [
drawerItem("drawer_notification", context.translation.notifications, context).onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)), drawerItem("drawer_notification", context.translation.notifications, context).onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)),
18.height, 18.height,
drawerItem("help_center", context.translation.helpCenter, context) /*.onPress(() => Navigator.of(context).pushNamed(HelpCenterPage.id))*/, // drawerItem("help_center", context.translation.helpCenter, context) /*.onPress(() => Navigator.of(context).pushNamed(HelpCenterPage.id))*/,
18.height, // 18.height,
drawerItem("rate_us", context.translation.rateUs, context), // drawerItem("rate_us", context.translation.rateUs, context),
18.height, // 18.height,
drawerItem("setting", context.translation.settings, context).onPress(() => Navigator.of(context).pushNamed(SettingsPage.id)), drawerItem("setting", context.translation.settings, context).onPress(() => Navigator.of(context).pushNamed(SettingsPage.id)),
18.height, // 18.height,
drawerItem("report", context.translation.reportBg, context) /*.onPress(() => Navigator.of(context).pushNamed(ReportBugPage.id))*/, // drawerItem("report", context.translation.reportBg, context) /*.onPress(() => Navigator.of(context).pushNamed(ReportBugPage.id))*/,
18.height, // 18.height,
drawerItem("whats_new", context.translation.whatsNew, context), // drawerItem("whats_new", context.translation.whatsNew, context),
], ],
).expanded, ).expanded,
drawerItem("logout", context.translation.logout, context, color: AppColor.red50).onPress(() async { drawerItem("logout", context.translation.logout, context, color: AppColor.red50).onPress(() async {
@ -91,7 +91,7 @@ class AppDrawer extends StatelessWidget {
context: context, context: context,
builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert), builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert),
); );
if (result) { if (result ?? false) {
settingProvider.resetSettings(); settingProvider.resetSettings();
userProvider.reset(); userProvider.reset();
Navigator.of(context).pop(); Navigator.of(context).pop();

@ -106,7 +106,7 @@ class _DashboardPageState extends State<DashboardPage> {
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20),
), ),
Text( Text(
user.username ?? "Eng Mahmoud", user?.username ?? "",
style: AppTextStyles.heading2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600), style: AppTextStyles.heading2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600),
), ),
24.height, 24.height,

@ -64,53 +64,52 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
onRefresh: () async {}, onRefresh: () async {},
child: Column( child: Column(
children: [ children: [
_buildDetailsCard( Row(
Row( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Column(
Column( crossAxisAlignment: CrossAxisAlignment.stretch,
crossAxisAlignment: CrossAxisAlignment.stretch, children: [
children: [ context.translation.transferDetails.heading5(context),
context.translation.transferDetails.heading5(context), 8.height,
8.height, Column(
Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ _buildTextWidget('${context.translation.assetName} : ${_model?.assetName ?? ""}'),
_buildTextWidget('${context.translation.assetName} : ${_model?.assetName ??""}'), _buildTextWidget('${context.translation.assetNumber} : ${_model?.assetNumber ?? ""}'),
_buildTextWidget('${context.translation.assetNumber} : ${_model?.assetNumber??""}'), _buildTextWidget('${context.translation.model} : ${_model?.modelName ?? ""}'),
_buildTextWidget('${context.translation.model} : ${_model?.modelName??""}'), _buildTextWidget('${context.translation.sn} : ${_model?.assetSerialNo ?? ""}'),
_buildTextWidget('${context.translation.sn} : ${_model?.assetSerialNo??""}'), ],
], ),
), 8.height,
8.height, ],
], ).expanded,
).expanded, Column(
Column( crossAxisAlignment: CrossAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end, children: [
children: [ /// TBD
/// TBD // Row(
// Row( // children: [
// children: [ // /// TBD
// /// TBD // // StatusLabel(
// // StatusLabel( // // label: "",
// // label: "", // // id: 0,
// // id: 0, // // textColor: AColors.getPriorityStatusTextColor(0),
// // textColor: AColors.getPriorityStatusTextColor(0), // // backgroundColor: AColors.getPriorityStatusColor(0)),
// // backgroundColor: AColors.getPriorityStatusColor(0)), // 8.width,
// 8.width, //
// // /// TBD
// /// TBD // //StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)),
// //StatusLabel(label: '', textColor: AColors.getRequestStatusTextColor(0), backgroundColor: AColors.getRequestStatusColor(0)), // ],
// ], // ),
// ), 1.width,
1.width, Text(_model?.createdOn != null ? _model.createdOn.toServiceRequestCardFormat : "",
Text(_model?.createdOn != null ? _model.createdOn.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF3B3D4A))),
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : Color(0xFF3B3D4A))), ],
], ),
), ],
], ).toShadowContainer(context),
).paddingAll(14), 8.height,
),
// sender card // sender card
_buildCard( _buildCard(
isSender: true, isSender: true,
@ -129,6 +128,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
backgroundColor: AColors.getRequestStatusColor(getIdstatus(_model.senderMachineStatusName))) backgroundColor: AColors.getRequestStatusColor(getIdstatus(_model.senderMachineStatusName)))
: null, : null,
), ),
8.height,
// receiver card // receiver card
_buildCard( _buildCard(
isSender: false, isSender: false,
@ -148,7 +148,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
: null, : null,
), ),
], ],
), ).paddingAll(16),
), ),
); );
} }
@ -182,42 +182,39 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
], ],
), ),
if ((_userProvider.user?.type == UsersTypes.engineer)) if ((_userProvider.user?.type == UsersTypes.engineer))
if(isSender ? (_model?.senderMachineStatusName?.toLowerCase() != "closed" && _model?.senderMachineStatusName?.toLowerCase() != "completed") if (isSender
: (_model?.receiverMachineStatusName?.toLowerCase() != "closed" && _model?.receiverMachineStatusName?.toLowerCase() != "completed")) ? (_model?.senderMachineStatusName?.toLowerCase() != "closed" && _model?.senderMachineStatusName?.toLowerCase() != "completed")
CircleAvatar( : (_model?.receiverMachineStatusName?.toLowerCase() != "closed" && _model?.receiverMachineStatusName?.toLowerCase() != "completed"))
radius: 25, CircleAvatar(
backgroundColor: AppColor.neutral30, radius: 25,
child: CircleAvatar( backgroundColor: AppColor.neutral30,
radius: 24, child: CircleAvatar(
backgroundColor: Colors.white, radius: 24,
child: Padding( backgroundColor: Colors.white,
padding: const EdgeInsets.only(left: 3.0), child: Padding(
child: SvgPicture.asset('assets/images/update.svg'), padding: const EdgeInsets.only(left: 3.0),
child: SvgPicture.asset('assets/images/update.svg'),
),
), ),
), ).onPress(isSender
).onPress(isSender ? () {
? () { Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender)));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender))); }
} : () {
: () { Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender)));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model, isSender: isSender))); }),
}),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildTextWidget('${context.translation.site} : $site'),
_buildTextWidget('${context.translation.unite} : $unit'),
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
_buildTextWidget(comment),
], ],
), ),
8.height, _buildTextWidget('${context.translation.site} : $site'),
_buildTextWidget('${context.translation.unite} : $unit'),
if (comment != null && comment.isNotEmpty) ...[
8.height,
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height,
_buildTextWidget(comment),
]
], ],
).toShadowContainer(context).paddingOnly(top: 14, start: 14, end: 14); ).toShadowContainer(context);
} }
int getIdstatus(String status) { int getIdstatus(String status) {

@ -174,7 +174,6 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
), ),
8.height, 8.height,
ESignature( ESignature(
title: "Signature", title: "Signature",
oldSignature: widget.isSender ? widget.model.senderEngSignature : widget.model.receiverEngSignature, oldSignature: widget.isSender ? widget.model.senderEngSignature : widget.model.receiverEngSignature,
newSignature: _signature, newSignature: _signature,
@ -184,8 +183,6 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
widget.isSender widget.isSender
? _formModel.senderEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" ? _formModel.senderEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"
: _formModel.receiverEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; : _formModel.receiverEngSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
base64Encode(signature);
}, },
), ),
], ],

@ -25,6 +25,7 @@ import 'package:test_sa/views/widgets/loaders/app_loading.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 '../../../controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import '../../../models/service_request/spare_parts.dart'; import '../../../models/service_request/spare_parts.dart';
import '../../../models/service_request/supp_engineer_work_orders.dart'; import '../../../models/service_request/supp_engineer_work_orders.dart';
import '../../../models/service_request/supplier_details.dart'; import '../../../models/service_request/supplier_details.dart';
@ -35,6 +36,7 @@ import '../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../providers/loading_list_notifier.dart'; import '../../../providers/loading_list_notifier.dart';
import '../../../providers/work_order/reason_provider.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/e_signature/e_signature.dart';
import '../../widgets/status/report/service_report_assistant_employee_menu.dart'; import '../../widgets/status/report/service_report_assistant_employee_menu.dart';
import '../../widgets/status/report/service_report_last_call.dart'; import '../../widgets/status/report/service_report_last_call.dart';
import '../../widgets/timer/app_timer.dart'; import '../../widgets/timer/app_timer.dart';
@ -57,6 +59,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
bool _isLoading = false; bool _isLoading = false;
bool _showVendorFields = false; bool _showVendorFields = false;
SuppEngineerWorkOrders engineer; SuppEngineerWorkOrders engineer;
SupplierDetails initialSupplier;
@override @override
void initState() { void initState() {
@ -79,6 +82,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
CallRequest _callRequestForWorkOrder; CallRequest _callRequestForWorkOrder;
Future getAssetType() async { Future getAssetType() async {
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
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);
@ -88,6 +92,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
_subWorkOrders.copyDetails(subWoDetails); _subWorkOrders.copyDetails(subWoDetails);
_serviceReport.equipmentStatus = subWoDetails.equipmentStatus; _serviceReport.equipmentStatus = subWoDetails.equipmentStatus;
_serviceReport.reason = subWoDetails.reason; _serviceReport.reason = subWoDetails.reason;
initialSupplier = subWoDetails.supplier;
// _serviceReport.faultDescription = subWoDetails.faultDescription; // _serviceReport.faultDescription = subWoDetails.faultDescription;
} }
await assetTypesProvider.getTypes(); await assetTypesProvider.getTypes();
@ -140,7 +145,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
// WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType), // WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType),
8.height, 8.height,
ADatePicker( ADatePicker(
label: context.translation.visitDate, label: context.translation.returnToService,
date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""), date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""),
onDatePicker: (date) { onDatePicker: (date) {
_subWorkOrders.visitDate = date?.toIso8601String(); _subWorkOrders.visitDate = date?.toIso8601String();
@ -179,12 +184,14 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
ServiceReportLastCallsMenu( ServiceReportLastCallsMenu(
report: _serviceReport, report: _serviceReport,
title: context.translation.callLastSituation, title: context.translation.callLastSituation,
parentId: widget.workOrder?.callRequest?.id?.toString(), parentId: widget.workOrder?.id?.toString(),
onSelect: (status) { onSelect: (status) {
_serviceReport.calllastSituation = status; _serviceReport.calllastSituation = status;
if (checkVendorFieldsVisibility(status)) { if (checkVendorFieldsVisibility(status)) {
_subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id); _subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id);
engineer = null; engineer = null;
} else {
_subWorkOrders.supplier = initialSupplier;
} }
if (status?.value == 12 || _subWorkOrders.calllastSituation?.value == 12) { if (status?.value == 12 || _subWorkOrders.calllastSituation?.value == 12) {
_subWorkOrders.calllastSituation = status; _subWorkOrders.calllastSituation = status;
@ -195,6 +202,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
setState(() {}); setState(() {});
}, },
), ),
if (_subWorkOrders.calllastSituation?.value == 12) const SizedBox(height: 8),
if (_subWorkOrders.calllastSituation?.value == 12) if (_subWorkOrders.calllastSituation?.value == 12)
AppTextFormField( AppTextFormField(
labelText: context.translation.mrNumber, labelText: context.translation.mrNumber,
@ -272,6 +280,20 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
), ),
8.height, 8.height,
MultiFilesPicker(label: context.translation.attachImage, files: _files), MultiFilesPicker(label: context.translation.attachImage, files: _files),
8.height,
ESignature(
title: context.translation.engSign,
oldSignature: _subWorkOrders.engSignature,
newSignature: _subWorkOrders.localEngSignature,
onSaved: (signature) {
// if (signature == null || signature.isEmpty) {
// setState(() {});
// return;
// }
_subWorkOrders.localEngSignature = signature;
_subWorkOrders.engSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
},
),
], ],
), ),
), ),

@ -189,6 +189,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
SingleChildScrollView( SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
@ -204,8 +205,8 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
'${context.translation.quantity}: ${widget.gasRefillModel.gazRefillDetails[0].requestedQty}'.bodyText(context), '${context.translation.quantity}: ${widget.gasRefillModel.gazRefillDetails[0].requestedQty}'.bodyText(context),
'${context.translation.site}: ${widget.gasRefillModel.site.name}'.bodyText(context), '${context.translation.site}: ${widget.gasRefillModel.site.name}'.bodyText(context),
], ],
).paddingAll(16), ).toShadowContainer(context),
12.height, 8.height,
AppTimer( AppTimer(
label: context.translation.workingHours, label: context.translation.workingHours,
timer: _formModel.timer, timer: _formModel.timer,
@ -215,7 +216,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
return true; return true;
}, },
), ),
12.height, 8.height,
SingleItemDropDownMenu<Lookup, GasStatusProvider>( SingleItemDropDownMenu<Lookup, GasStatusProvider>(
context: context, context: context,
title: context.translation.reportStatus, title: context.translation.reportStatus,
@ -224,7 +225,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
_formModel.status = value; _formModel.status = value;
}, },
), ),
12.height, 8.height,
AppTextFormField( AppTextFormField(
labelText: context.translation.deliveredQuantity, labelText: context.translation.deliveredQuantity,
onSaved: (value) { onSaved: (value) {
@ -234,7 +235,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
controller: _deliveredQuantityController, controller: _deliveredQuantityController,
validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only", validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
), ),
12.height, 8.height,
/// TBD /// TBD
AppTextFormField( AppTextFormField(
@ -269,7 +270,7 @@ class _RequestGasRefillState extends State<RequestGasRefill> {
}, },
), ),
], ],
).toShadowContainer(context).paddingAll(16), ),
).expanded, ).expanded,
AppFilledButton( AppFilledButton(
label: widget.gasRefillModel == null ? context.translation.submit : context.translation.update, label: widget.gasRefillModel == null ? context.translation.submit : context.translation.update,

@ -23,6 +23,7 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/report/service_report_assistant_employee_menu.dart'; import 'package:test_sa/views/widgets/status/report/service_report_assistant_employee_menu.dart';
import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart'; import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
import '../../../../../controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import '../../../../../controllers/providers/api/status_drop_down/report/service_types_provider.dart'; import '../../../../../controllers/providers/api/status_drop_down/report/service_types_provider.dart';
import '../../../../../models/lookup.dart'; import '../../../../../models/lookup.dart';
import '../../../../../models/service_request/spare_parts.dart'; import '../../../../../models/service_request/spare_parts.dart';
@ -69,6 +70,9 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
sparePartsWorkOrders: [], sparePartsWorkOrders: [],
); );
super.initState(); super.initState();
if (context.mounted) {
Provider.of<ServiceReportLastCallsProvider>(context, listen: false).reset();
}
// _isLoading = true; // _isLoading = true;
} }
@ -135,7 +139,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
), ),
8.height, 8.height,
ADatePicker( ADatePicker(
label: context.translation.visitDate, label: context.translation.returnToService,
date: DateTime.tryParse(_serviceReport.visitDate ?? ""), date: DateTime.tryParse(_serviceReport.visitDate ?? ""),
onDatePicker: (date) { onDatePicker: (date) {
_serviceReport.visitDate = date?.toIso8601String(); _serviceReport.visitDate = date?.toIso8601String();

@ -124,7 +124,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
), ),
8.height, 8.height,
ADatePicker( ADatePicker(
label: context.translation.visitDate, label: context.translation.returnToService,
date: DateTime.tryParse(_serviceReport.visitDate ?? ""), date: DateTime.tryParse(_serviceReport.visitDate ?? ""),
onDatePicker: (date) { onDatePicker: (date) {
_serviceReport.visitDate = date?.toIso8601String(); _serviceReport.visitDate = date?.toIso8601String();

@ -16,6 +16,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/pages/user/requests/work_order/create_service_report.dart'; import 'package:test_sa/views/pages/user/requests/work_order/create_service_report.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 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart'; import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.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';
class WorkOrderListPage extends StatelessWidget { class WorkOrderListPage extends StatelessWidget {
@ -43,93 +44,92 @@ class WorkOrderListPage extends StatelessWidget {
child: FutureBuilder( child: FutureBuilder(
future: serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode), future: serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode),
builder: (context, snap) { builder: (context, snap) {
workOrders = snap.data as List<SearchWorkOrder>;
if (snap.connectionState == ConnectionState.waiting) return const Center(child: CircularProgressIndicator()); if (snap.connectionState == ConnectionState.waiting) return const Center(child: CircularProgressIndicator());
workOrders = snap.data as List<SearchWorkOrder>;
return Column( return Column(
children: [ children: [
ListView.separated( (workOrders.isEmpty)
padding: const EdgeInsets.all(16), ? NoItemFound(message: context.translation.noDataFound).expanded
itemCount: workOrders?.length ?? 0, : ListView.separated(
separatorBuilder: (czt, index) => 8.height, padding: const EdgeInsets.all(16),
itemBuilder: (context, index) { itemCount: workOrders.length,
Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; separatorBuilder: (czt, index) => 8.height,
Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; itemBuilder: (context, index) {
Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
return Column( return Column(
children: [ children: [
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
StatusLabel(label: workOrders[index].currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40), StatusLabel(label: workOrders[index].currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40),
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))),
], ],
).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)
context.translation.edit.toSvgAsset(height: 48, width: 48).onPress(() { context.translation.edit.toSvgAsset(height: 48, width: 48).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])), MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])),
); );
}) })
], ],
), ),
8.height, 8.height,
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
'${context.translation.assetName}: ${workOrders[index].callRequest.asset.modelDefinition.assetName}', '${context.translation.assetName}: ${workOrders[index].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}: ${workOrders[index].currentSituation.name}', '${context.translation.status}: ${workOrders[index].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)),
), ),
], ],
).expanded, ).expanded,
Text(workOrders[index].visitDate?.toServiceRequestCardFormat ?? "", Text(workOrders[index].visitDate?.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))), textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral30 : const Color(0xFF3B3D4A))),
], ],
), ),
16.height, 16.height,
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
context.translation.viewDetails, context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,
const Icon(Icons.arrow_forward, color: Color(0xFF4A8DB7), size: 14) const Icon(Icons.arrow_forward, color: Color(0xFF4A8DB7), size: 14)
], ],
).onPress(() { ),
Navigator.push( ],
context, ).onPress(() {
MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrders[index], serviceRequest: serviceRequest)), Navigator.push(
); context,
}), MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrders[index], serviceRequest: serviceRequest)),
], );
).onPress(() { }),
// onPressed(request); ],
}), ).toShadowContainer(context);
], },
).toShadowContainer(context); ).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(
label: context.translation.createWorkOrder, label: context.translation.createWorkOrder,

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:signature/signature.dart'; import 'package:signature/signature.dart';
import 'package:test_sa/controllers/api_routes/urls.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/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
@ -15,6 +16,7 @@ class ESignature extends StatefulWidget {
final Function(Uint8List) onSaved; final Function(Uint8List) onSaved;
final Function(Uint8List) onChange; final Function(Uint8List) onChange;
final String title; final String title;
const ESignature({Key key, this.title, this.oldSignature, this.onSaved, this.onChange, this.newSignature}) : super(key: key); const ESignature({Key key, this.title, this.oldSignature, this.onSaved, this.onChange, this.newSignature}) : super(key: key);
@override @override
@ -50,6 +52,7 @@ class _ESignatureState extends State<ESignature> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
print(widget.oldSignature);
return FormField<String>(onSaved: (_) async { return FormField<String>(onSaved: (_) async {
widget.onSaved(signature); widget.onSaved(signature);
}, builder: (FormFieldState<String> state) { }, builder: (FormFieldState<String> state) {
@ -59,7 +62,7 @@ class _ESignatureState extends State<ESignature> {
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
decoration: BoxDecoration( decoration: BoxDecoration(
color: context.isDark?Theme.of(context).cardColor:Colors.white, color: context.isDark ? Theme.of(context).cardColor : Colors.white,
borderRadius: _editable ? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10)) : BorderRadius.circular(10), borderRadius: _editable ? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10)) : BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
@ -98,7 +101,7 @@ class _ESignatureState extends State<ESignature> {
height: 135.toScreenHeight, height: 135.toScreenHeight,
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
padding: const EdgeInsets.only(bottom: 8), padding: const EdgeInsets.only(bottom: 8),
child: signature != null ? Image.memory(signature) : ImageLoader(boxFit: BoxFit.contain, url: widget.oldSignature), child: signature != null ? Image.memory(signature) : ImageLoader(boxFit: BoxFit.contain, url: URLs.getFileUrl(widget.oldSignature)),
) )
: AbsorbPointer( : AbsorbPointer(
absorbing: !_editable, absorbing: !_editable,

@ -108,7 +108,7 @@ class _AppTimerState extends State<AppTimer> {
height: 56.toScreenHeight, height: 56.toScreenHeight,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
decoration: BoxDecoration( decoration: BoxDecoration(
color: context.isDark?AppColor.neutral50:Theme.of(context).cardColor, color: context.isDark ? AppColor.neutral50 : Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)],
), ),
@ -125,7 +125,7 @@ class _AppTimerState extends State<AppTimer> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
(widget.label ?? "Timer").tinyFont(context), (widget.label ?? "Timer").tinyFont(context),
value.bodyText(context).custom(color: AppColor.neutral50), value.bodyText(context).custom(color: widget.enabled ? AppColor.neutral50 : AppColor.neutral20),
], ],
); );
}, },

Loading…
Cancel
Save