|
|
|
@ -2,16 +2,11 @@ import 'dart:convert';
|
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
|
|
|
|
import '../../../../../api/user_api_client.dart';
|
|
|
|
|
import '../../../../../controllers/http_status_manger/http_status_manger.dart';
|
|
|
|
|
import '../../../../../controllers/localization/localization.dart';
|
|
|
|
|
import '../../../../../controllers/providers/api/service_requests_provider.dart';
|
|
|
|
|
import '../../../../../controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
|
|
|
|
|
import '../../../../../controllers/providers/settings/setting_provider.dart';
|
|
|
|
|
import '../../../../../controllers/providers/user_provider.dart';
|
|
|
|
|
import '../../../../../controllers/validator/validator.dart';
|
|
|
|
|
import '../../../../../models/part.dart';
|
|
|
|
|
import '../../../../../models/service_report.dart';
|
|
|
|
@ -38,30 +33,27 @@ import '../../../../widgets/timer/app_timer.dart';
|
|
|
|
|
import '../../../../widgets/titles/app_sub_title.dart';
|
|
|
|
|
|
|
|
|
|
class EditServiceReport extends StatefulWidget {
|
|
|
|
|
static final String id = "/edit-service-report";
|
|
|
|
|
static const String id = "/edit-service-report";
|
|
|
|
|
final ServiceRequest request;
|
|
|
|
|
final ServiceReport report;
|
|
|
|
|
|
|
|
|
|
const EditServiceReport({Key? key, required this.request, required this.report}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
_EditServiceReportState createState() => _EditServiceReportState();
|
|
|
|
|
EditServiceReportState createState() => EditServiceReportState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _EditServiceReportState extends State<EditServiceReport> with TickerProviderStateMixin {
|
|
|
|
|
late UserProvider _userProvider;
|
|
|
|
|
late SettingProvider _settingProvider;
|
|
|
|
|
class EditServiceReportState extends State<EditServiceReport> with TickerProviderStateMixin {
|
|
|
|
|
late ServiceRequestsProvider _serviceRequestsProvider;
|
|
|
|
|
|
|
|
|
|
bool _validate = false;
|
|
|
|
|
late ServiceReport _serviceReport;
|
|
|
|
|
bool _isLoading = false;
|
|
|
|
|
|
|
|
|
|
late Subtitle _subtitle;
|
|
|
|
|
late File _image;
|
|
|
|
|
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
|
|
|
|
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
|
|
|
|
TextEditingController _faultController = TextEditingController();
|
|
|
|
|
TextEditingController _workPreformedController = TextEditingController();
|
|
|
|
|
final TextEditingController _faultController = TextEditingController();
|
|
|
|
|
final TextEditingController _workPreformedController = TextEditingController();
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
@ -78,15 +70,13 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
_userProvider = Provider.of<UserProvider>(context);
|
|
|
|
|
_settingProvider = Provider.of<SettingProvider>(context);
|
|
|
|
|
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
|
|
|
|
|
_subtitle = AppLocalization.of(context)!.subtitle!;
|
|
|
|
|
return Scaffold(
|
|
|
|
|
key: _scaffoldKey,
|
|
|
|
|
body: SafeArea(
|
|
|
|
|
child: LoadingManager(
|
|
|
|
|
isLoading: _isLoading,
|
|
|
|
|
isLoading: _serviceRequestsProvider.loading,
|
|
|
|
|
isFailedLoading: false,
|
|
|
|
|
stateCode: 200,
|
|
|
|
|
onRefresh: () async {},
|
|
|
|
@ -105,14 +95,14 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
padding: const EdgeInsets.all(8.0),
|
|
|
|
|
child: Text(
|
|
|
|
|
_subtitle.editServiceReport,
|
|
|
|
|
style: Theme.of(context).textTheme.headline5?.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold),
|
|
|
|
|
style: Theme.of(context).textTheme.headlineSmall?.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
|
|
|
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
|
|
|
|
decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [
|
|
|
|
|
decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: const [
|
|
|
|
|
BoxShadow(
|
|
|
|
|
color: AColors.grey,
|
|
|
|
|
offset: Offset(0, -1),
|
|
|
|
@ -121,28 +111,15 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
Wrap(
|
|
|
|
|
spacing: 10,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(
|
|
|
|
|
"${_subtitle.callId}: ${widget.request.requestCode}",
|
|
|
|
|
font: 14,
|
|
|
|
|
),
|
|
|
|
|
widget.request.deviceSerialNumber == null
|
|
|
|
|
? const SizedBox()
|
|
|
|
|
: ASubTitle(
|
|
|
|
|
"${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}",
|
|
|
|
|
font: 14,
|
|
|
|
|
),
|
|
|
|
|
ASubTitle("${_subtitle.callId}: ${widget.request.requestCode}", font: 14),
|
|
|
|
|
widget.request.deviceSerialNumber == null ? const SizedBox() : ASubTitle("${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}", font: 14),
|
|
|
|
|
Text(
|
|
|
|
|
"${_subtitle.customer}: ${widget.request.hospitalName}",
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1?.copyWith(
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
fontSize: 12,
|
|
|
|
|
),
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.bold, fontSize: 12),
|
|
|
|
|
textScaleFactor: AppStyle.getScaleFactor(context),
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
@ -158,15 +135,8 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.reportType),
|
|
|
|
|
_validate && _serviceReport.type == null
|
|
|
|
|
? ASubTitle(
|
|
|
|
|
_subtitle.requiredWord,
|
|
|
|
|
color: Colors.red,
|
|
|
|
|
)
|
|
|
|
|
: const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
_validate && _serviceReport.type == null ? ASubTitle(_subtitle.requiredWord, color: Colors.red) : const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ServiceReportTypeMenu(
|
|
|
|
|
initialValue: _serviceReport.type,
|
|
|
|
|
onSelect: (status) {
|
|
|
|
@ -176,21 +146,14 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
// visit date
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.visitDate),
|
|
|
|
|
_validate && _serviceReport.visitDate == null
|
|
|
|
|
? ASubTitle(
|
|
|
|
|
_subtitle.requiredWord,
|
|
|
|
|
color: Colors.red,
|
|
|
|
|
)
|
|
|
|
|
: const SizedBox.shrink(),
|
|
|
|
|
_validate && _serviceReport.visitDate == null ? ASubTitle(_subtitle.requiredWord, color: Colors.red) : const SizedBox.shrink(),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Expanded(
|
|
|
|
@ -211,9 +174,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
// device sn
|
|
|
|
|
Visibility(
|
|
|
|
|
visible: true, //widget.report.device == null,
|
|
|
|
@ -221,12 +182,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.deviceSN),
|
|
|
|
|
_validate && _serviceReport.device?.id == null
|
|
|
|
|
? ASubTitle(
|
|
|
|
|
_subtitle.requiredWord,
|
|
|
|
|
color: Colors.red,
|
|
|
|
|
)
|
|
|
|
|
: const SizedBox.shrink(),
|
|
|
|
|
_validate && _serviceReport.device?.id == null ? ASubTitle(_subtitle.requiredWord, color: Colors.red) : const SizedBox.shrink(),
|
|
|
|
|
AutoCompleteDeviceField(
|
|
|
|
|
hospitalId: widget.request.hospitalId,
|
|
|
|
|
initialValue: _serviceReport.device!,
|
|
|
|
@ -234,34 +190,21 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
_serviceReport.device?.id = id;
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
ASubTitle(_subtitle.serviceType),
|
|
|
|
|
_validate && _serviceReport.serviceType == null
|
|
|
|
|
? ASubTitle(
|
|
|
|
|
_subtitle.requiredWord,
|
|
|
|
|
color: Colors.red,
|
|
|
|
|
)
|
|
|
|
|
: const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
_validate && _serviceReport.serviceType == null ? ASubTitle(_subtitle.requiredWord, color: Colors.red) : const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ServiceStatusMenu(
|
|
|
|
|
initialValue: _serviceReport.serviceType,
|
|
|
|
|
onSelect: (status) {
|
|
|
|
|
_serviceReport.serviceType = status;
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
// Report status and Service Type
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
@ -271,15 +214,8 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.reportStatus),
|
|
|
|
|
_validate && _serviceReport.status == null
|
|
|
|
|
? ASubTitle(
|
|
|
|
|
_subtitle.requiredWord,
|
|
|
|
|
color: Colors.red,
|
|
|
|
|
)
|
|
|
|
|
: const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
_validate && _serviceReport.status == null ? ASubTitle(_subtitle.requiredWord, color: Colors.red) : const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ServiceReportStatusMenu(
|
|
|
|
|
report: _serviceReport,
|
|
|
|
|
onSelect: (status) {
|
|
|
|
@ -289,9 +225,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
Provider.of<ServiceReportLastCallsProvider>(context).isLoading == null
|
|
|
|
|
? const SizedBox.shrink()
|
|
|
|
|
:
|
|
|
|
@ -301,15 +235,8 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.callLastSituation),
|
|
|
|
|
_validate && _serviceReport.callLastSituation == null
|
|
|
|
|
? ASubTitle(
|
|
|
|
|
_subtitle.requiredWord,
|
|
|
|
|
color: Colors.red,
|
|
|
|
|
)
|
|
|
|
|
: const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
_validate && _serviceReport.callLastSituation == null ? ASubTitle(_subtitle.requiredWord, color: Colors.red) : const SizedBox.shrink(),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ServiceReportLastCallsMenu(
|
|
|
|
|
report: _serviceReport,
|
|
|
|
|
onSelect: (status) {
|
|
|
|
@ -326,9 +253,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
// invoice number & code
|
|
|
|
|
_serviceReport.callLastSituation?.id != 12
|
|
|
|
|
? const SizedBox.shrink()
|
|
|
|
@ -339,13 +264,11 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.invoiceNumber),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: _serviceReport?.invoiceNumber,
|
|
|
|
|
initialValue: _serviceReport.invoiceNumber,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
validator: (value) => Validator.hasValue(value!) ? '' : _subtitle.requiredWord,
|
|
|
|
|
textInputType: TextInputType.number,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
@ -355,21 +278,17 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.invoiceCode),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: _serviceReport?.invoiceCode,
|
|
|
|
|
initialValue: _serviceReport.invoiceCode,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
validator: (value) => Validator.hasValue(value!) ? '' : _subtitle.requiredWord,
|
|
|
|
|
textInputType: TextInputType.text,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
@ -382,19 +301,14 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.faultDescription),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: SizedBox(
|
|
|
|
|
height: 32 * AppStyle.getScaleFactor(context),
|
|
|
|
|
child: SpeechToTextButton(
|
|
|
|
|
controller: _faultController,
|
|
|
|
|
mini: true,
|
|
|
|
|
),
|
|
|
|
|
child: SpeechToTextButton(controller: _faultController, mini: true),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
@ -403,29 +317,24 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: _serviceReport?.faultDescription,
|
|
|
|
|
initialValue: _serviceReport.faultDescription,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
controller: _faultController,
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
validator: (value) => Validator.hasValue(value!) ? '' : _subtitle.requiredWord,
|
|
|
|
|
textInputType: TextInputType.multiline,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
|
_serviceReport.faultDescription = value;
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.workPreformed),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: SizedBox(
|
|
|
|
|
height: 32 * AppStyle.getScaleFactor(context),
|
|
|
|
|
child: SpeechToTextButton(
|
|
|
|
|
controller: _workPreformedController,
|
|
|
|
|
mini: true,
|
|
|
|
|
),
|
|
|
|
|
child: SpeechToTextButton(controller: _workPreformedController, mini: true),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
@ -434,10 +343,10 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: _serviceReport?.workPreformed,
|
|
|
|
|
initialValue: _serviceReport.workPreformed,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
controller: _workPreformedController,
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
validator: (value) => Validator.hasValue(value!) ? '' : _subtitle.requiredWord,
|
|
|
|
|
textInputType: TextInputType.multiline,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
@ -503,9 +412,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.workingHours),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
AppTimer(
|
|
|
|
|
timer: _serviceReport.timer,
|
|
|
|
|
onChange: (timer) async {
|
|
|
|
@ -529,22 +436,18 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
width: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
ASubTitle(_subtitle.travelingHours),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: _serviceReport?.travelingHours,
|
|
|
|
|
initialValue: _serviceReport.travelingHours,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
hintText: "i.e 3, 3.5, 4",
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
validator: (value) => Validator.isNumeric(value!) ? '' : _subtitle.requiredWord,
|
|
|
|
|
textInputType: TextInputType.number,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
@ -556,9 +459,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
// Operating Hours and Job Sheet Number
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
@ -571,10 +472,10 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: _serviceReport?.operatingHours,
|
|
|
|
|
initialValue: _serviceReport.operatingHours,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
hintText: "i.e 3, 3.5, 4",
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
validator: (value) => Validator.isNumeric(value!) ? '' : _subtitle.requiredWord,
|
|
|
|
|
textInputType: TextInputType.number,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
@ -596,9 +497,9 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
height: 4,
|
|
|
|
|
),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: _serviceReport?.jobSheetNumber,
|
|
|
|
|
initialValue: _serviceReport.jobSheetNumber,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
style: Theme.of(context).textTheme.subtitle1,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
textInputType: TextInputType.name,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
|
_serviceReport.jobSheetNumber = value;
|
|
|
|
@ -609,9 +510,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 8,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
// Part Number and Quantity
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
@ -652,9 +551,9 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
),
|
|
|
|
|
Column(
|
|
|
|
|
children: List.generate(_serviceReport.parts!.length, (index) {
|
|
|
|
|
Part _part = _serviceReport.parts![index];
|
|
|
|
|
Part part = _serviceReport.parts![index];
|
|
|
|
|
return PartItem(
|
|
|
|
|
part: _part,
|
|
|
|
|
part: part,
|
|
|
|
|
onDelete: (part) {
|
|
|
|
|
_serviceReport.parts?.remove(part);
|
|
|
|
|
setState(() {});
|
|
|
|
@ -663,9 +562,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
}),
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
const SizedBox(
|
|
|
|
|
height: 16,
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 16),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
@ -675,34 +572,9 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
|
|
|
|
|
text: _subtitle.update,
|
|
|
|
|
onPressed: () async {
|
|
|
|
|
_validate = true;
|
|
|
|
|
if (!(_formKey.currentState?.validate() ?? false)) {
|
|
|
|
|
setState(() {});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!_serviceReport.validate()) {
|
|
|
|
|
setState(() {});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (_formKey.currentState?.validate() ?? false) {
|
|
|
|
|
_formKey.currentState?.save();
|
|
|
|
|
|
|
|
|
|
_isLoading = true;
|
|
|
|
|
setState(() {});
|
|
|
|
|
|
|
|
|
|
int status =
|
|
|
|
|
await _serviceRequestsProvider.updateServiceReport(user: UserApiClient().user!, host: _settingProvider.host ?? "", report: _serviceReport, request: widget.request);
|
|
|
|
|
_isLoading = false;
|
|
|
|
|
setState(() {});
|
|
|
|
|
if (status >= 200 && status < 300) {
|
|
|
|
|
Fluttertoast.showToast(
|
|
|
|
|
msg: _subtitle.requestCompleteSuccessfully,
|
|
|
|
|
);
|
|
|
|
|
Navigator.of(context).pop();
|
|
|
|
|
Navigator.of(context).pop();
|
|
|
|
|
} else {
|
|
|
|
|
String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle);
|
|
|
|
|
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
|
|
|
|
|
content: Text(errorMessage),
|
|
|
|
|
));
|
|
|
|
|
await _serviceRequestsProvider.updateServiceReport(context, report: _serviceReport, request: widget.request);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|