diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 0c882854..b069de74 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -272,7 +272,7 @@ class ServiceRequestsProvider extends ChangeNotifier { "requestedThrough": request.requestedThrough?.toJson(), "voiceNote": request.audio, "assets": request.deviceId == null ? [] : [request.deviceId], - "attachmentsCallRequest": request.devicePhotos?.map((e) => {"name": e})?.toList(), + "attachmentsCallRequest": (request.devicePhotos?.isNotEmpty ?? false) ? request.devicePhotos?.map((e) => {"name": e.getFileName})?.toList() : [], "assignedEmployee": { "id": request.engineerId, "name": request.engineerName, diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 3bf44786..7c64135e 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -20,7 +20,6 @@ extension StringExtensions on String { } } - String get toFirstActionFormat { try { DateTime dateTime = DateTime.tryParse(this); @@ -29,6 +28,7 @@ extension StringExtensions on String { return ""; } } + String get toAssetDetailsFormat { try { DateTime dateTime = DateTime.tryParse(this); @@ -37,4 +37,18 @@ extension StringExtensions on String { return "-"; } } + + String get getFileName { + try { + if (this.contains("fileName=")) { + String sub = this.substring(this.indexOf("fileName="), this.length); + sub = sub.replaceAll("fileName=", ""); + return sub; + } else { + this; + } + } catch (e) { + return this; + } + } } diff --git a/lib/models/service_request/service_report.dart b/lib/models/service_request/service_report.dart index 0eb5e062..75237bed 100644 --- a/lib/models/service_request/service_report.dart +++ b/lib/models/service_request/service_report.dart @@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/spare_parts.dart'; import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart'; @@ -310,7 +311,7 @@ class ServiceReport { map['reviewComment'] = reviewComment; map['comment'] = comment; if (attachmentsWorkOrder != null) { - map['attachmentsWorkOrder'] = attachmentsWorkOrder.map((v) => {"name": v.name}).toList(); + map['attachmentsWorkOrder'] = attachmentsWorkOrder.map((v) => {"name": v.name.getFileName}).toList(); } if (equipmentStatus != null) { map['equipmentStatus'] = equipmentStatus.toJson(); diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index 45729bd1..eebb3271 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -140,8 +140,12 @@ class ServiceRequest { jobSheetNumber: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["jobSheetNumber"] : null, visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first, - startDate: DateTime.tryParse(parsedJson["startDate"] ?? "").toString().split(" ").first, - endDate: DateTime.tryParse(parsedJson["endDate"] ?? "").toString().split(" ").first, + startDate: parsedJson["startDate"] == null ? null : DateTime.tryParse(parsedJson["startDate"] ?? "").toString().split(" ").first, + endDate: + + parsedJson["endDate"] == null ? null : + + DateTime.tryParse(parsedJson["endDate"] ?? "").toString().split(" ").first, workingHours: parsedJson["workingHours"], diff --git a/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart b/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart index 40f8f674..0500606c 100644 --- a/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart +++ b/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart @@ -42,19 +42,19 @@ class ContactUsBottomSheet extends StatelessWidget { ), ), 16.height, - Row( - children: [ - contactItem(context, context.isDark, "phone", context.translation.callUs, contactNumber).onPress(() { - - return; - launchUrlString("tel://$contactNumber"); - }).expanded, - 16.width, - contactItem(context, context.isDark, "whatsapp", context.translation.liveChat, context.translation.openWhatsapp).onPress(() { - _launchWhatsapp(contactNumber); - }).expanded, - ], - ), + // Row( + // children: [ + // contactItem(context, context.isDark, "phone", context.translation.callUs, contactNumber).onPress(() { + // + // return; + // launchUrlString("tel://$contactNumber"); + // }).expanded, + // 16.width, + // contactItem(context, context.isDark, "whatsapp", context.translation.liveChat, context.translation.openWhatsapp).onPress(() { + // _launchWhatsapp(contactNumber); + // }).expanded, + // ], + // ), 32.height, ], ), diff --git a/lib/views/widgets/pentry/pentry_tbs_form.dart b/lib/views/widgets/pentry/pentry_tbs_form.dart index df747ac8..f30bceb5 100644 --- a/lib/views/widgets/pentry/pentry_tbs_form.dart +++ b/lib/views/widgets/pentry/pentry_tbs_form.dart @@ -41,10 +41,7 @@ class _PentryTBSFormState extends State { @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( @@ -53,17 +50,11 @@ class _PentryTBSFormState extends State { 8.height, SingleItemDropDownMenu( 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; } @@ -90,11 +81,7 @@ class _PentryTBSFormState extends State { 8.height, SingleItemDropDownMenu( 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) { @@ -106,11 +93,7 @@ class _PentryTBSFormState extends State { 8.height, SingleItemDropDownMenu( 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) { @@ -122,11 +105,7 @@ class _PentryTBSFormState extends State { 8.height, SingleItemDropDownMenu( 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) { @@ -136,21 +115,26 @@ class _PentryTBSFormState extends State { }, ), 8.height, + SingleItemDropDownMenu( + context: context, + initialValue: widget.model.safetyId == null ? null : Lookup(name: widget.model.safetyName ?? "", id: widget.model.safetyId), + title: "Electrical Safety", + onSelect: (value) { + if (value != null) { + widget.model.safetyId = value.id; + widget.model.safetyName = value.name; + } + }, + ), + 8.height, SingleItemDropDownMenu( 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) { widget.model.typeOfServiceId = value.id; widget.model.typeOfServiceName = value.name; - widget.model.safetyId = null; - widget.model.safetyName = null; - widget.model.supplierId = null; widget.model.supplierName = null; @@ -159,30 +143,12 @@ class _PentryTBSFormState extends State { widget.model.suppPersonId = null; widget.model.suppPerson = null; - setState(() {}); } }, ), 8.height, - if (widget.model?.typeOfServiceId != 66) ...[ - SingleItemDropDownMenu( - context: context, - initialValue: widget.model.safetyId == null - ? null - : Lookup( - name: widget.model.safetyName ?? "", - id: widget.model.safetyId), - title: "Electrical Safety", - onSelect: (value) { - if (value != null) { - widget.model.safetyId = value.id; - widget.model.safetyName = value.name; - } - }, - ), - 8.height, - ], + if (widget.model?.typeOfServiceId == 66) ...[ SingleItemDropDownMenu( context: context, @@ -221,7 +187,7 @@ class _PentryTBSFormState extends State { 8.height, AppTextFormField( labelText: "Telephone", - initialValue: (widget.model.telephone ?? "").toString(), + initialValue: (widget.model.telephone ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.titleMedium, textInputType: TextInputType.number, @@ -230,7 +196,6 @@ class _PentryTBSFormState extends State { }, ), 8.height, - AppTimer( label: "External Supplier Timer", timer: widget.model.externalEngineerTimer, @@ -245,7 +210,6 @@ class _PentryTBSFormState extends State { ), 8.height, ], - ADatePicker( label: context.translation.actualVisitDate, date: DateTime.tryParse(widget.model.actualDate ?? ""), @@ -253,8 +217,7 @@ class _PentryTBSFormState extends State { 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; } @@ -288,18 +251,15 @@ class _PentryTBSFormState extends State { 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, AppTextFormField( labelText: context.translation.comments, - initialValue: (widget.model.comments ?? "").toString(), + initialValue: (widget.model.comments ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.titleMedium, onChange: (value) { @@ -313,8 +273,7 @@ class _PentryTBSFormState extends State { 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, @@ -324,8 +283,7 @@ class _PentryTBSFormState extends State { 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, diff --git a/pubspec.lock b/pubspec.lock index a28e034c..1fcfc4de 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -693,6 +693,46 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + local_auth: + dependency: "direct main" + description: + name: local_auth + sha256: "0cf238be2bfa51a6c9e7e9cfc11c05ea39f2a3a4d3e5bb255d0ebc917da24401" + url: "https://pub.dev" + source: hosted + version: "2.1.6" + local_auth_android: + dependency: transitive + description: + name: local_auth_android + sha256: "523dd636ce061ddb296cbc3db410cb8f21efb7d8798f7b9532c8038ce2f8bad5" + url: "https://pub.dev" + source: hosted + version: "1.0.31" + local_auth_ios: + dependency: transitive + description: + name: local_auth_ios + sha256: edc2977c5145492f3451db9507a2f2f284ee4f408950b3e16670838726761940 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + local_auth_platform_interface: + dependency: transitive + description: + name: local_auth_platform_interface + sha256: fc5bd537970a324260fda506cfb61b33ad7426f37a8ea5c461cf612161ebba54 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + local_auth_windows: + dependency: transitive + description: + name: local_auth_windows + sha256: "19323b75ab781d5362dbb15dcb7e0916d2431c7a6dbdda016ec9708689877f73" + url: "https://pub.dev" + source: hosted + version: "1.0.8" localization: dependency: "direct main" description: