Change service last calls API

merge-requests/30/head
zaid_daoud 2 years ago
parent 5945756e60
commit 5f7bc0cf6e

@ -53,7 +53,7 @@ class URLs {
static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get
static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // get static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // get
static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get
static get getServiceReportLastCalls => "$_baseUrl/Lookups/GetLookup?lookupEnum=520"; // get static get getServiceReportLastCalls => "$_baseUrl/WorkOrder/GetLookupCallLastSituationBasedOnCase"; // get
static get getAssetTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=28"; // get static get getAssetTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=28"; // get
static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get
static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get

@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceReportLastCallsProvider extends ChangeNotifier{ class ServiceReportLastCallsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_calls = null; _calls = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -33,7 +32,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -43,16 +42,22 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getCalls ({String host,User user,int serviceStatus}) async { Future<int> getCalls({
if(_loading == true) String host,
return -2; User user,
int serviceStatus,
String woId,
int id,
String typeName,
}) async {
if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
// todo request new api from backend to make filter work // todo request new api from backend to make filter work
response = await ApiManager.instance.get( response = await ApiManager.instance.get(
URLs.getServiceReportLastCalls, "${URLs.getServiceReportLastCalls}?parentWOId=$woId&isAdd=true&id=${id ?? 0}&typeTransaction=$typeName",
); );
// response = await get( // response = await get(
// Uri.parse( // Uri.parse(
@ -61,7 +66,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
// ), // ),
// ); // );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"]; List categoriesListJson = json.decode(response.body)["data"];
_calls = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); _calls = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
@ -69,13 +74,11 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -278,6 +278,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
), ),
ServiceReportStatusMenu( ServiceReportStatusMenu(
report: _serviceReport, report: _serviceReport,
request: widget.request,
onSelect: (status) { onSelect: (status) {
_serviceReport.status = status; _serviceReport.status = status;
}, },

@ -2,7 +2,6 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
@ -36,9 +35,10 @@ import 'package:test_sa/views/widgets/status/report/service_report_type.dart';
import 'package:test_sa/views/widgets/status/report/service_status.dart'; import 'package:test_sa/views/widgets/status/report/service_status.dart';
import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
class EditServiceReport extends StatefulWidget { class EditServiceReport extends StatefulWidget {
static final String id = "/edit-service-report"; static final String id = "/edit-service-report";
final ServiceRequest request ; final ServiceRequest request;
final ServiceReport report; final ServiceReport report;
const EditServiceReport({Key key, this.request, this.report}) : super(key: key); const EditServiceReport({Key key, this.request, this.report}) : super(key: key);
@ -46,9 +46,7 @@ class EditServiceReport extends StatefulWidget {
_EditServiceReportState createState() => _EditServiceReportState(); _EditServiceReportState createState() => _EditServiceReportState();
} }
class _EditServiceReportState extends State<EditServiceReport> with TickerProviderStateMixin{ class _EditServiceReportState extends State<EditServiceReport> with TickerProviderStateMixin {
UserProvider _userProvider; UserProvider _userProvider;
SettingProvider _settingProvider; SettingProvider _settingProvider;
ServiceRequestsProvider _serviceRequestsProvider; ServiceRequestsProvider _serviceRequestsProvider;
@ -76,6 +74,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
_workPreformedController.dispose(); _workPreformedController.dispose();
super.dispose(); super.dispose();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context); _userProvider = Provider.of<UserProvider>(context);
@ -97,52 +96,54 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
ListView( ListView(
children: [ children: [
//AppNameBar(), //AppNameBar(),
const SizedBox(height: 16,), const SizedBox(
height: 16,
),
Center( Center(
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text( child: Text(
_subtitle.editServiceReport, _subtitle.editServiceReport,
style: Theme.of(context).textTheme.headline5.copyWith( style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold),
color: AColors.cyan,
fontSize: 28,
fontWeight: FontWeight.bold
),
), ),
), ),
), ),
Container( Container(
padding: const EdgeInsets.symmetric(horizontal: 16), padding: const EdgeInsets.symmetric(horizontal: 16),
margin: const EdgeInsets.symmetric(horizontal: 16,vertical: 16), margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
decoration: BoxDecoration( decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [
const BoxShadow(
color: AColors.grey, color: AColors.grey,
borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), offset: Offset(0, -1),
boxShadow: [ )
const BoxShadow( ]),
color: AColors.grey,
offset: Offset(0,-1),
)
]
),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
Wrap( Wrap(
spacing: 10, spacing: 10,
children: [ children: [
ASubTitle("${_subtitle.callId}: ${widget.request.requestCode}",font: 14,), ASubTitle(
widget.request.deviceSerialNumber == null ? const SizedBox(): "${_subtitle.callId}: ${widget.request.requestCode}",
ASubTitle("${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}",font: 14,), font: 14,
),
widget.request.deviceSerialNumber == null
? const SizedBox()
: ASubTitle(
"${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}",
font: 14,
),
Text( Text(
"${_subtitle.customer}: ${widget.request.hospitalName}", "${_subtitle.customer}: ${widget.request.hospitalName}",
style: Theme.of(context).textTheme.subtitle1.copyWith( style: Theme.of(context).textTheme.subtitle1.copyWith(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 12, fontSize: 12,
), ),
textScaleFactor: AppStyle.getScaleFactor(context), textScaleFactor: AppStyle.getScaleFactor(context),
) )
], ],
), ),
const Divider(), const Divider(),
@ -156,29 +157,39 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.reportType), ASubTitle(_subtitle.reportType),
_validate && _serviceReport.type == null ? _validate && _serviceReport.type == null
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ? ASubTitle(
const SizedBox.shrink(), _subtitle.requiredWord,
const SizedBox(height: 4,), color: Colors.red,
)
: const SizedBox.shrink(),
const SizedBox(
height: 4,
),
ServiceReportTypeMenu( ServiceReportTypeMenu(
initialValue: _serviceReport.type, initialValue: _serviceReport.type,
onSelect: (status){ onSelect: (status) {
_serviceReport.type = status; _serviceReport.type = status;
}, },
), ),
], ],
), ),
), ),
const SizedBox(width: 8,), const SizedBox(
width: 8,
),
// visit date // visit date
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.visitDate), ASubTitle(_subtitle.visitDate),
_validate && _serviceReport.visitDate == null ? _validate && _serviceReport.visitDate == null
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ? ASubTitle(
const SizedBox.shrink(), _subtitle.requiredWord,
color: Colors.red,
)
: const SizedBox.shrink(),
Row( Row(
children: [ children: [
Expanded( Expanded(
@ -186,7 +197,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
date: _serviceReport.visitDate, date: _serviceReport.visitDate,
from: DateTime.now().subtract(const Duration(days: 365)), from: DateTime.now().subtract(const Duration(days: 365)),
to: DateTime.now().add(const Duration(days: 365)), to: DateTime.now().add(const Duration(days: 365)),
onDatePicker: (date){ onDatePicker: (date) {
_serviceReport.visitDate = date; _serviceReport.visitDate = date;
setState(() {}); setState(() {});
}, },
@ -197,58 +208,84 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
], ],
), ),
), ),
], ],
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
// device sn // device sn
Visibility( Visibility(
visible: true,//widget.report.device == null, visible: true, //widget.report.device == null,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.deviceSN), ASubTitle(_subtitle.deviceSN),
_validate && _serviceReport.device?.id == null ? _validate && _serviceReport.device?.id == null
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ? ASubTitle(
const SizedBox.shrink(), _subtitle.requiredWord,
color: Colors.red,
)
: const SizedBox.shrink(),
AutoCompleteDeviceField( AutoCompleteDeviceField(
hospitalId: widget.request.hospitalId, hospitalId: widget.request.hospitalId,
initialValue: _serviceReport.device, initialValue: _serviceReport.device,
onPick: (id){ onPick: (id) {
_serviceReport.device.id = id; _serviceReport.device.id = id;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
], ],
), ),
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
ASubTitle(_subtitle.serviceType), ASubTitle(_subtitle.serviceType),
_validate && _serviceReport.assetType == null ? _validate && _serviceReport.assetType == null
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ? ASubTitle(
const SizedBox.shrink(), _subtitle.requiredWord,
const SizedBox(height: 4,), color: Colors.red,
)
: const SizedBox.shrink(),
const SizedBox(
height: 4,
),
ServiceAssetTypeMenu( ServiceAssetTypeMenu(
initialValue: _serviceReport.assetType, initialValue: _serviceReport.assetType,
onSelect: (status){ onSelect: (status) {
_serviceReport.assetType = status; _serviceReport.assetType = status;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
SizedBox(height: 8 * AppStyle.getScaleFactor(context),), height: 8,
),
SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
const ASubTitle("Assign Employee"), const ASubTitle("Assign Employee"),
const SizedBox(height: 8,), const SizedBox(
_validate && _serviceReport.engineer == null ? height: 8,
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ),
const SizedBox.shrink(), _validate && _serviceReport.engineer == null
const SizedBox(height: 4,), ? ASubTitle(
_subtitle.requiredWord,
color: Colors.red,
)
: const SizedBox.shrink(),
const SizedBox(
height: 4,
),
EngineersMenu( EngineersMenu(
initialValue: _serviceReport.engineer, initialValue: _serviceReport.engineer,
onSelect: (engineer){ onSelect: (engineer) {
_serviceReport.engineer = engineer; _serviceReport.engineer = engineer;
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
// Report status and Service Type // Report status and Service Type
Row( Row(
children: [ children: [
@ -258,37 +295,49 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.reportStatus), ASubTitle(_subtitle.reportStatus),
_validate && _serviceReport.status == null ? _validate && _serviceReport.status == null
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ? ASubTitle(
const SizedBox.shrink(), _subtitle.requiredWord,
const SizedBox(height: 4,), color: Colors.red,
)
: const SizedBox.shrink(),
const SizedBox(
height: 4,
),
ServiceReportStatusMenu( ServiceReportStatusMenu(
report: _serviceReport, report: _serviceReport,
onSelect: (status){ request: widget.request,
onSelect: (status) {
_serviceReport.status = status; _serviceReport.status = status;
}, },
), ),
], ],
), ),
), ),
const SizedBox(width: 8,), const SizedBox(
width: 8,
),
Consumer<ServiceReportLastCallsProvider>( Consumer<ServiceReportLastCallsProvider>(
builder: (_, provider, __) { builder: (_, provider, __) {
if(provider.isLoading == null) return const SizedBox.shrink(); if (provider.isLoading == null) return const SizedBox.shrink();
return Expanded( return Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.callLastSituation), ASubTitle(_subtitle.callLastSituation),
_validate && _serviceReport.callLastSituation == null ? _validate && _serviceReport.callLastSituation == null
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ? ASubTitle(
const SizedBox.shrink(), _subtitle.requiredWord,
const SizedBox(height: 4,), color: Colors.red,
)
: const SizedBox.shrink(),
const SizedBox(
height: 4,
),
ServiceReportLastCallsMenu( ServiceReportLastCallsMenu(
report: _serviceReport, report: _serviceReport,
onSelect: (status){ onSelect: (status) {
if(status?.value == 12 if (status?.value == 12 || _serviceReport.callLastSituation?.value == 12) {
|| _serviceReport.callLastSituation?.value == 12){
_serviceReport.callLastSituation = status; _serviceReport.callLastSituation = status;
setState(() {}); setState(() {});
} else { } else {
@ -303,56 +352,61 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
), ),
], ],
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
// invoice number & code // invoice number & code
_serviceReport.callLastSituation?.value != 12 ? const SizedBox.shrink(): _serviceReport.callLastSituation?.value != 12
Row( ? const SizedBox.shrink()
children: [ : Row(
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.invoiceNumber), Expanded(
const SizedBox(height: 8,), child: Column(
ATextFormField( crossAxisAlignment: CrossAxisAlignment.start,
initialValue: _serviceReport?.invoiceNumber, children: [
textAlign: TextAlign.center, ASubTitle(_subtitle.invoiceNumber),
style: Theme.of(context).textTheme.subtitle1, const SizedBox(
validator: (value) => height: 8,
Validator.hasValue(value) ),
? null : _subtitle.requiredWord, ATextFormField(
textInputType: TextInputType.number, initialValue: _serviceReport?.invoiceNumber,
onSaved: (value){ textAlign: TextAlign.center,
_serviceReport.invoiceNumber = value; style: Theme.of(context).textTheme.subtitle1,
}, validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
textInputType: TextInputType.number,
onSaved: (value) {
_serviceReport.invoiceNumber = value;
},
),
],
),
), ),
], const SizedBox(
), width: 8,
), ),
const SizedBox(width: 8,), Expanded(
Expanded( child: Column(
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ ASubTitle(_subtitle.invoiceCode),
ASubTitle(_subtitle.invoiceCode), const SizedBox(
const SizedBox(height: 4,), height: 4,
ATextFormField( ),
initialValue: _serviceReport?.invoiceCode, ATextFormField(
textAlign: TextAlign.center, initialValue: _serviceReport?.invoiceCode,
style: Theme.of(context).textTheme.subtitle1, textAlign: TextAlign.center,
validator: (value) => style: Theme.of(context).textTheme.subtitle1,
Validator.hasValue(value) validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
? null : _subtitle.requiredWord, textInputType: TextInputType.text,
textInputType: TextInputType.text, onSaved: (value) {
onSaved: (value){ _serviceReport.invoiceCode = value;
_serviceReport.invoiceCode = value; },
}, ),
],
),
), ),
], ],
), ),
),
],
),
// const SizedBox(height: 8,), // const SizedBox(height: 8,),
// Row( // Row(
@ -414,7 +468,9 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
// ), // ),
// const SizedBox(height: 8,), // const SizedBox(height: 8,),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
Row( Row(
children: [ children: [
// reasons // reasons
@ -423,17 +479,21 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.reasons), ASubTitle(_subtitle.reasons),
const SizedBox(height: 4,), const SizedBox(
height: 4,
),
ServiceReportReasonsMenu( ServiceReportReasonsMenu(
initialValue: _serviceReport.reason, initialValue: _serviceReport.reason,
onSelect: (status){ onSelect: (status) {
_serviceReport.reason = status; _serviceReport.reason = status;
}, },
), ),
], ],
), ),
), ),
const SizedBox(width: 8,), const SizedBox(
width: 8,
),
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -442,8 +502,8 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
AMiniOneImagePicker( AMiniOneImagePicker(
//error: _validate && _serviceReport.image == null, //error: _validate && _serviceReport.image == null,
image: _image, image: _image,
onPick: (image){ onPick: (image) {
_image =image; _image = image;
_serviceReport.image = base64Encode(image.readAsBytesSync()); _serviceReport.image = base64Encode(image.readAsBytesSync());
}, },
), ),
@ -452,7 +512,9 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
), ),
], ],
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
// Traveling Hours & Working Hours // Traveling Hours & Working Hours
Row( Row(
children: [ children: [
@ -461,13 +523,15 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.workingHours), ASubTitle(_subtitle.workingHours),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
Row( Row(
children: [ children: [
Expanded( Expanded(
child: AppTimer( child: AppTimer(
timer: _serviceReport.timer, timer: _serviceReport.timer,
onChange: (timer) async{ onChange: (timer) async {
_serviceReport.timer = timer; _serviceReport.timer = timer;
return true; return true;
}, },
@ -516,7 +580,9 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
// ), // ),
], ],
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
// Operating Hours and Job Sheet Number // Operating Hours and Job Sheet Number
// Row( // Row(
// children: [ // children: [
@ -564,29 +630,39 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
// ], // ],
// ), // ),
//const SizedBox(height: 8,), //const SizedBox(height: 8,),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
const ASubTitle("Nurse Signature"), const ASubTitle("Nurse Signature"),
ESignature( ESignature(
oldSignature: _serviceReport.signatureNurse, oldSignature: _serviceReport.signatureNurse,
newSignature: _serviceReport.localNurseSignature, newSignature: _serviceReport.localNurseSignature,
onChange: (signature){ onChange: (signature) {
if(signature == null || signature.isEmpty) {return;} if (signature == null || signature.isEmpty) {
return;
}
_serviceReport.localNurseSignature = signature; _serviceReport.localNurseSignature = signature;
_serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; _serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
const ASubTitle("Engineer Signature"), const ASubTitle("Engineer Signature"),
ESignature( ESignature(
oldSignature: _serviceReport.signatureEngineer, oldSignature: _serviceReport.signatureEngineer,
newSignature: _serviceReport.localNurseSignature, newSignature: _serviceReport.localNurseSignature,
onChange: (signature){ onChange: (signature) {
if(signature == null || signature.isEmpty) {return;} if (signature == null || signature.isEmpty) {
return;
}
_serviceReport.localNurseSignature = signature; _serviceReport.localNurseSignature = signature;
_serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; _serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
}, },
), ),
const SizedBox(height: 8,), const SizedBox(
height: 8,
),
// Part Number and Quantity // Part Number and Quantity
Row( Row(
children: [ children: [
@ -596,12 +672,17 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ASubTitle(_subtitle.partNumber), ASubTitle(_subtitle.partNumber),
_validate && _serviceReport.parts == null ? _validate && _serviceReport.parts == null
ASubTitle(_subtitle.requiredWord,color: Colors.red,): ? ASubTitle(
const SizedBox.shrink(), _subtitle.requiredWord,
const SizedBox(height: 4,), color: Colors.red,
)
: const SizedBox.shrink(),
const SizedBox(
height: 4,
),
AutoCompletePartsField( AutoCompletePartsField(
onPick: (part){ onPick: (part) {
_serviceReport.parts.add(part); _serviceReport.parts.add(part);
setState(() {}); setState(() {});
}, },
@ -609,34 +690,33 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
], ],
), ),
), ),
], ],
), ),
SizedBox(height: 8*AppStyle.getScaleFactor(context),), SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
Row( Row(
children: [ children: [
Expanded(flex:3,child: Text(_subtitle.number)), Expanded(flex: 3, child: Text(_subtitle.number)),
Expanded(flex: 1,child: Text(_subtitle.quantity)), Expanded(flex: 1, child: Text(_subtitle.quantity)),
], ],
), ),
Column( Column(
children: List.generate( children: List.generate(_serviceReport.parts.length, (index) {
_serviceReport.parts.length, Part _part = _serviceReport.parts[index];
(index) { return PartItem(
Part _part = _serviceReport.parts[index]; part: _part,
return PartItem( onDelete: (part) {
part: _part, _serviceReport.parts.remove(part);
onDelete: (part){ setState(() {});
_serviceReport.parts.remove(part); },
setState(() {}); );
}, }),
);
}
),
), ),
const SizedBox(height: 16,), const SizedBox(
height: 16,
),
], ],
), ),
), ),
@ -646,48 +726,40 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
text: _subtitle.update, text: _subtitle.update,
onPressed: () async { onPressed: () async {
_validate = true; _validate = true;
if(!_formKey.currentState.validate()){ if (!_formKey.currentState.validate()) {
setState(() {}); setState(() {});
return; return;
} }
if(!_serviceReport.validate()) { if (!_serviceReport.validate()) {
setState(() {}); setState(() {});
return; return;
} }
_formKey.currentState.save(); _formKey.currentState.save();
_isLoading =true; _isLoading = true;
setState(() {}); setState(() {});
int status = await _serviceRequestsProvider.updateServiceReport( int status = await _serviceRequestsProvider.updateServiceReport(user: _userProvider.user, host: _settingProvider.host, report: _serviceReport, request: widget.request);
user: _userProvider.user, _isLoading = false;
host: _settingProvider.host,
report: _serviceReport,
request: widget.request
);
_isLoading =false;
setState(() {}); setState(() {});
if(status >= 200 && status < 300){ if (status >= 200 && status < 300) {
Fluttertoast.showToast( Fluttertoast.showToast(
msg: _subtitle.requestCompleteSuccessfully, msg: _subtitle.requestCompleteSuccessfully,
); );
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context).pop(); Navigator.of(context).pop();
}else{ } else {
String errorMessage = HttpStatusManger.getStatusMessage( String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle);
status: status, subtitle: _subtitle); ScaffoldMessenger.of(context).showSnackBar(SnackBar(
ScaffoldMessenger.of(context).showSnackBar( content: Text(errorMessage),
SnackBar( ));
content: Text(
errorMessage
),
)
);
} }
}, },
), ),
), ),
const SizedBox(height: 300,) const SizedBox(
height: 300,
)
], ],
), ),
const ABackButton(), const ABackButton(),

@ -8,13 +8,16 @@ import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/single_status_menu.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart';
class ServiceReportStatusMenu extends StatefulWidget { class ServiceReportStatusMenu extends StatefulWidget {
final Function(Lookup) onSelect; final Function(Lookup) onSelect;
final ServiceReport report; final ServiceReport report;
final ServiceRequest request;
const ServiceReportStatusMenu({Key key, this.onSelect, this.report}) : super(key: key); const ServiceReportStatusMenu({Key key, this.onSelect, this.report, this.request}) : super(key: key);
@override @override
State<ServiceReportStatusMenu> createState() => _ServiceReportStatusMenuState(); State<ServiceReportStatusMenu> createState() => _ServiceReportStatusMenuState();
@ -28,7 +31,7 @@ class _ServiceReportStatusMenuState extends State<ServiceReportStatusMenu> {
UserProvider userProvider = Provider.of<UserProvider>(context); UserProvider userProvider = Provider.of<UserProvider>(context);
ServiceReportStatusProvider menuProvider = Provider.of<ServiceReportStatusProvider>(context); ServiceReportStatusProvider menuProvider = Provider.of<ServiceReportStatusProvider>(context);
ServiceReportLastCallsProvider callsLastSituationsProvider = Provider.of<ServiceReportLastCallsProvider>(context); ServiceReportLastCallsProvider callsLastSituationsProvider = Provider.of<ServiceReportLastCallsProvider>(context);
if(firstTime){ if (firstTime) {
callsLastSituationsProvider.reset(); callsLastSituationsProvider.reset();
firstTime = false; firstTime = false;
@ -36,37 +39,38 @@ class _ServiceReportStatusMenuState extends State<ServiceReportStatusMenu> {
return LoadingManager( return LoadingManager(
isLoading: menuProvider.isLoading == true || callsLastSituationsProvider.isLoading == true, isLoading: menuProvider.isLoading == true || callsLastSituationsProvider.isLoading == true,
isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null, isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null,
stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null: stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null : max(menuProvider.stateCode ?? 0, callsLastSituationsProvider.stateCode ?? 0),
max(menuProvider.stateCode ?? 0,callsLastSituationsProvider.stateCode ?? 0),
onRefresh: () async { onRefresh: () async {
await callsLastSituationsProvider.getCalls( await callsLastSituationsProvider.getCalls(
user: userProvider.user, user: userProvider.user,
host: settingProvider.host, host: settingProvider.host,
serviceStatus: widget.report.status?.id serviceStatus: widget.report.status?.id,
typeName: widget.report.type?.name,
id: widget.report.id,
woId: widget.request.id,
); );
if(menuProvider.stateCode == null){ if (menuProvider.stateCode == null) {
menuProvider.reset(); menuProvider.reset();
await menuProvider.getTypes( await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host);
user: userProvider.user,
host: settingProvider.host
);
setState(() {}); setState(() {});
} }
}, },
child: SingleStatusMenu( child: SingleStatusMenu(
statuses: menuProvider.statuses, statuses: menuProvider.statuses,
initialStatus: widget.report.status, initialStatus: widget.report.status,
onSelect: (status){ onSelect: (status) {
widget.report.callLastSituation = null; widget.report.callLastSituation = null;
callsLastSituationsProvider.getCalls( callsLastSituationsProvider.getCalls(
user: userProvider.user, user: userProvider.user,
host: settingProvider.host, host: settingProvider.host,
serviceStatus: status.id serviceStatus: status.id,
id: widget.report.id,
woId: widget.request.id,
typeName: widget.report.type.name,
); );
widget.onSelect(status); widget.onSelect(status);
}, },
) ));
);
} }
} }

Loading…
Cancel
Save