Merge branch 'zaid_development_new' into 'main_latest_merged'

Zaid development new

See merge request haroon6138/cloudsolutions-atoms!30
merge-requests/31/merge
Sikander Saleem 3 years ago
commit f9e9f63348

@ -196,5 +196,9 @@
"maintenanceSituation": "موقع الصيانه",
"currentSituation": "الموقع الحالي",
"comment" : "تعليق",
"updateServiceRequest" : "تعديل طلب الخدمة"
"updateServiceRequest" : "تعديل طلب الخدمة",
"repairLocation" : "موقع الإصلاح",
"travelingExpense" : "مصاريف التنقل",
"startDate" : "وقت البدء",
"endDate" : "وقت الانتهاء"
}

@ -196,6 +196,9 @@
"duplicateAlertMessage": "Are you sure you want to duplicate request?",
"duplicateRequest": "Duplicate Request",
"comment" : "Comment",
"updateServiceRequest" : "Update Service Request"
"updateServiceRequest" : "Update Service Request",
"repairLocation" : "Repair Location",
"travelingExpense": "Traveling Expense",
"startDate" : "Start Date",
"endDate" : "End Date"
}

@ -29,6 +29,7 @@ class URLs {
static get getServiceFirstAction => "$_baseUrl/Lookups/GetLookup?lookupEnum=700"; // get
static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get
static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503";
static get getRepairLocation => "$_baseUrl/Lookups/GetLookup?lookupEnum=504";
static get getPreventiveMaintenanceVisits => "$_baseUrl/return/user/calibrations"; // get
static get updatePreventiveMaintenanceVisits => "$_baseUrl/Visit/UpdateVisits"; // get
@ -53,7 +54,7 @@ class URLs {
static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get
static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // 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 getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get
static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get

@ -284,7 +284,68 @@ class ServiceRequestsProvider extends ChangeNotifier {
}) async {
Response response;
try {
Map<String, dynamic> body = report.toMap(request);
Map<String, dynamic> body = {
"id": 0,
"parentWOId": null,
"workOrderNo": "",
"workOrderYear": null,
"workOrderSequennce": null,
"callRequest": {
"id": request.id,
},
"assetType": report.assetType?.toMap(),
"assignedEmployee": {"id": report.engineer.id, "name": report.engineer.name},
"visitDate": report.visitDate?.toIso8601String() ?? "",
// "assistantEmployees": [
// {"id": report.engineer.id, "name": report.engineer.name},
// ],
"supplier": null,
"vendorTicketNumber": null,
"contactPersonWorkOrders": [
{
"id": 0,
// "employeeCode": "",
"name": user.userName,
"telephone": user.phoneNumber,
// "job": "",
"email": user.email,
// "land": "",
"contactUserId": user.id,
}
],
"calllastSituation": report.callLastSituation?.toMap(),
"currentSituation": null,
"repairLocation": report.repairLocation?.toMap(),
"reason": report.reason?.toMap(),
"startofWorkTime": report.startDate?.toIso8601String() ?? "",
"endofWorkTime": report.endDate?.toIso8601String() ?? "",
"workingHours": report.timer?.durationInSecond,
"travelingHours": report.travelingHours,
"travelingExpenses": report.travelingExpense ?? 0,
"faultDescription": {
"id": report.faultDescriptionId ?? 0,
"defectName": report.type?.name,
"workPerformed": report.workPreformed,
"estimatedTime": report.operatingHours,
},
"sparePartsWorkOrders": report.parts
?.map(
(p) => {
"id": p.id,
"sparePart": {"id": p.reportPartID ?? 0, "partNo": p.code, "partName": p.name},
"qty": p.quantity
},
)
?.toList(),
"reviewComment": "",
"comment": report.comment,
"attachmentsWorkOrder": request.devicePhotos?.map((e) => {"name": e})?.toList(),
"equipmentStatus": report.status?.toMap(),
"suppEngineerWorkOrders": null,
"engSignature": report.signatureEngineer,
"nurseSignature": report.signatureNurse,
"woParentDto": null,
};
// body["uid"] = user.id;
// body["token"] = user.token;
response = await ApiManager.instance.post(URLs.createServiceReport, body: body);
@ -302,6 +363,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
}
return response.statusCode;
} catch (error) {
print(error);
return -1;
}
}

@ -42,7 +42,14 @@ class ServiceReportLastCallsProvider extends ChangeNotifier {
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getCalls({String host, User user, int serviceStatus}) async {
Future<int> getCalls({
String host,
User user,
int serviceStatus,
String woId,
int id,
String typeName,
}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
@ -50,7 +57,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier {
try {
// todo request new api from backend to make filter work
response = await ApiManager.instance.get(
URLs.getServiceReportLastCalls,
"${URLs.getServiceReportLastCalls}?parentWOId=$woId&isAdd=true&id=${id ?? 0}&typeTransaction=$typeName",
);
// response = await get(
// Uri.parse(

@ -0,0 +1,69 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceReportRepairLocationProvider extends ChangeNotifier {
//reset provider data
void reset() {
_reasons = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _reasons;
List<Lookup> get reasons => _reasons;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getTypes({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getRepairLocation,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_reasons = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -51,6 +51,7 @@ import 'controllers/providers/api/preventive_maintenance_visits_provider.dart';
import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_status_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_types_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_types_provider.dart';
@ -115,6 +116,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => EngineersProvider()),
ChangeNotifierProvider(create: (_) => ServiceLoanAvailabilityProvider()),
ChangeNotifierProvider(create: (_) => ServiceFirstActionProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportRepairLocationProvider()),
],
child: GestureDetector(
onTap: () {

@ -13,8 +13,10 @@ class ServiceReport {
String operatingHours;
DateTime visitDate;
DateTime endDate;
DateTime startDate;
Lookup assetType;
Lookup callLastSituation;
Lookup repairLocation;
Engineer engineer;
Lookup status;
Lookup type;
@ -33,36 +35,43 @@ class ServiceReport {
TimerModel timer;
String signatureNurse;
String signatureEngineer;
String comment;
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
int travelingExpense;
ServiceReport(
{this.id,
this.visitDate,
this.endDate,
this.assetType,
this.status,
this.type,
this.faultDescriptionId,
//this.workHours,
this.travelingHours,
this.parts,
this.engineer,
this.workPreformed,
this.reason,
this.operatingHours,
this.callLastSituation,
this.jobSheetNumber,
this.image,
this.device,
this.invoiceCode,
this.invoiceNumber,
this.quantity = "1",
this.timer,
this.signatureNurse,
this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature});
ServiceReport({
this.id,
this.visitDate,
this.endDate,
this.assetType,
this.status,
this.type,
this.faultDescriptionId,
//this.workHours,
this.travelingHours,
this.parts,
this.engineer,
this.workPreformed,
this.reason,
this.operatingHours,
this.callLastSituation,
this.jobSheetNumber,
this.image,
this.device,
this.invoiceCode,
this.invoiceNumber,
this.quantity = "1",
this.timer,
this.signatureNurse,
this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature,
this.comment,
this.repairLocation,
this.travelingExpense,
this.startDate,
});
Map<String, dynamic> toMap(ServiceRequest request) {
Map<String, dynamic> _map = {};
@ -98,6 +107,7 @@ class ServiceReport {
_map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber;
}
_map["AssignedEmployee"] = engineer?.toMap();
_map["repairLocation"] = repairLocation?.toMap();
//if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity;
//if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString();
if (reason != null) _map["reason"] = reason.toMap();
@ -113,6 +123,10 @@ class ServiceReport {
}
_map["nurseSignature"] = signatureNurse;
_map["engSignature"] = signatureEngineer;
_map["comment"] = comment;
_map["travelingExpense"] = travelingExpense;
_map["startofWorkTime"] = startDate;
_map["endofWorkTime"] = endDate;
return _map;
}
@ -140,7 +154,7 @@ class ServiceReport {
factory ServiceReport.fromJson(Map<String, dynamic> parsedJson, int id) {
List<Part> _parts = [];
if (parsedJson["sparePartsWorkOrders"] != null) {
if (parsedJson["sparePartsWorkOrders"][0]["id"] != null) {
if ((parsedJson["sparePartsWorkOrders"]as List ).isNotEmpty && parsedJson["sparePartsWorkOrders"][0]["id"] != null) {
List partsList = parsedJson["sparePartsWorkOrders"];
_parts = partsList.map((e) => Part.fromJson(e["sparePart"], reportJson: e)).toList();
}

@ -224,6 +224,10 @@ class Subtitle {
String alert;
String comment;
String updateServiceRequest;
String repairLocation;
String travelingExpense;
String startDate;
String endDate;
void setIssues(List<String> issues) {
issues.clear();
@ -423,6 +427,10 @@ class Subtitle {
@required this.site,
@required this.maintenanceSituation,
@required this.currentSituation,
@required this.repairLocation,
@required this.travelingExpense,
@required this.startDate,
@required this.endDate,
});
factory Subtitle.fromJson(Map<String, dynamic> parsedJson) {
@ -615,6 +623,10 @@ class Subtitle {
site: parsedJson["site"],
maintenanceSituation: parsedJson["maintenanceSituation"],
currentSituation: parsedJson["currentSituation"],
repairLocation: parsedJson["repairLocation"],
travelingExpense: parsedJson["travelingExpense"],
startDate: parsedJson["startDate"],
endDate: parsedJson["endDate"],
);
}
}

@ -2,7 +2,6 @@ import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
@ -15,7 +14,6 @@ import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
@ -33,11 +31,13 @@ import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart';
import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
import 'package:test_sa/views/widgets/status/report/service_report_reasons.dart';
import 'package:test_sa/views/widgets/status/report/service_report_status.dart';
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/timer/app_timer.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../widgets/speech_to_text/speech_to_text.dart';
import '../../../../widgets/status/report/service_report_repair_location.dart';
class CreateServiceReport extends StatefulWidget {
static final String id = "/create-service-report";
final ServiceRequest request;
@ -279,6 +279,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
),
ServiceReportStatusMenu(
report: _serviceReport,
request: widget.request,
onSelect: (status) {
_serviceReport.status = status;
},
@ -330,7 +331,55 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
const ASubTitle("Assign Employee"),
Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const ASubTitle("Start Date"),
SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
ADatePicker(
date: _serviceReport.startDate,
from: DateTime.now().subtract(const Duration(days: 365)),
to: DateTime.now().add(const Duration(days: 365)),
onDatePicker: (date) {
_serviceReport.startDate = date;
setState(() {});
},
),
],
),
),
const SizedBox(width: 8),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const ASubTitle("End Date"),
SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
ADatePicker(
date: _serviceReport.endDate,
from: DateTime.now().subtract(const Duration(days: 365)),
to: DateTime.now().add(const Duration(days: 365)),
onDatePicker: (date) {
_serviceReport.endDate = date;
setState(() {});
},
),
],
),
),
],
),
SizedBox(
height: 8 * AppStyle.getScaleFactor(context),
),
const ASubTitle("Assigned Employee"),
const SizedBox(
height: 8,
),
@ -404,66 +453,69 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
),
],
),
// const SizedBox(height: 8,),
// Row(
// children: [
// ASubTitle(_subtitle.faultDescription),
// Expanded(
// child: SizedBox(
// height: 32 * AppStyle.getScaleFactor(context),
// child: SpeechToTextButton(
// controller: _faultController,
// mini: true,
// ),
// ),
// ),
// ],
// ),
// const SizedBox(height: 4,),
// ATextFormField(
// initialValue: _serviceReport?.faultDescriptionId,
// textAlign: TextAlign.center,
// controller: _faultController,
// style: Theme.of(context).textTheme.subtitle1,
// validator: (value) =>
// Validator.hasValue(value)
// ? null : _subtitle.requiredWord,
// textInputType: TextInputType.multiline,
// onSaved: (value){
// _serviceReport.faultDescriptionId = value;
// },
// ),
// const SizedBox(height: 8,),
// Row(
// children: [
// ASubTitle(_subtitle.workPreformed),
// Expanded(
// child: SizedBox(
// height: 32 * AppStyle.getScaleFactor(context),
// child: SpeechToTextButton(
// controller: _workPreformedController,
// mini: true,
// ),
// ),
// ),
// ],
// ),
// const SizedBox(height: 4,),
// ATextFormField(
// initialValue: _serviceReport?.workPreformed,
// textAlign: TextAlign.center,
// controller: _workPreformedController,
// style: Theme.of(context).textTheme.subtitle1,
// validator: (value) =>
// Validator.hasValue(value)
// ? null : _subtitle.requiredWord,
// textInputType: TextInputType.multiline,
// onSaved: (value){
// _serviceReport.workPreformed = value;
// },
// ),
// 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,
),
),
),
],
),
const SizedBox(
height: 4,
),
ATextFormField(
initialValue: _serviceReport?.faultDescriptionId?.toString(),
textAlign: TextAlign.center,
controller: _faultController,
style: Theme.of(context).textTheme.titleMedium,
validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
textInputType: TextInputType.multiline,
onSaved: (value) {
_serviceReport.faultDescriptionId = int.tryParse(value) ?? 0;
},
),
const SizedBox(
height: 8,
),
Row(
children: [
ASubTitle(_subtitle.workPreformed),
Expanded(
child: SizedBox(
height: 32 * AppStyle.getScaleFactor(context),
child: SpeechToTextButton(
controller: _workPreformedController,
mini: true,
),
),
),
],
),
const SizedBox(
height: 4,
),
ATextFormField(
initialValue: _serviceReport?.workPreformed,
textAlign: TextAlign.center,
controller: _workPreformedController,
style: Theme.of(context).textTheme.subtitle1,
validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
textInputType: TextInputType.multiline,
onSaved: (value) {
_serviceReport.workPreformed = value;
},
),
const SizedBox(
height: 8,
),
const SizedBox(
height: 8,
@ -509,6 +561,46 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
),
],
),
const SizedBox(
height: 8,
),
ASubTitle(_subtitle.repairLocation),
const SizedBox(
height: 4,
),
ServiceReportRepairLocation(
initialValue: _serviceReport.repairLocation,
onSelect: (status) {
_serviceReport.repairLocation = status;
},
),
const SizedBox(
height: 16,
),
ATextFormField(
initialValue: _serviceReport?.travelingExpense?.toString(),
hintText: _subtitle.travelingExpense,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.number,
onSaved: (value) {
_serviceReport.travelingExpense = int.tryParse(value) ?? 0;
},
),
const SizedBox(
height: 8,
),
ATextFormField(
initialValue: _serviceReport?.comment,
hintText: _subtitle.comment,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.multiline,
onSaved: (value) {
_serviceReport.comment = value;
},
),
const SizedBox(
height: 8,
),
@ -626,10 +718,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
// ),
// ],
// ),
//const SizedBox(height: 8,),
const SizedBox(
height: 8,
),
const SizedBox(height: 8),
const ASubTitle("Nurse Signature"),
ESignature(
oldSignature: _serviceReport.signatureNurse,
@ -731,7 +820,14 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
_isLoading = true;
setState(() {});
int status = await _serviceRequestsProvider.createServiceReport(user: _userProvider.user, host: _settingProvider.host, report: _serviceReport, request: widget.request);
int status = await _serviceRequestsProvider.createServiceReport(
user: _userProvider.user,
host: _settingProvider.host,
report: _serviceReport,
request: widget.request,
);
print(6);
print(status);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {

@ -2,7 +2,6 @@ import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
@ -307,6 +306,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
),
ServiceReportStatusMenu(
report: _serviceReport,
request: widget.request,
onSelect: (status) {
_serviceReport.status = status;
},

@ -12,6 +12,7 @@ import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/requests/create_request.dart';
import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
@ -84,13 +85,16 @@ class RequestDetailsPage extends StatelessWidget {
buttonSize: 42,
backgroundColor: AColors.green,
onPressed: () async {
showModalBottomSheet(
context: context,
builder: (context) {
return ServiceRequestsUpdateDialog(
request: serviceRequest,
);
});
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => CreateRequestPage(serviceRequest: serviceRequest)),
);
// showModalBottomSheet(
// context: context,
// builder: (context) {
// return ServiceRequestsUpdateDialog(
// request: serviceRequest,
// );
// });
// DateTime picked = await showDatePicker(
// context: context,
// initialDate: DateTime.now(),
@ -302,6 +306,7 @@ class RequestDetailsPage extends StatelessWidget {
future: _serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode),
builder: (context, snap) {
workOrders = snap.data as List<SearchWorkOrders>;
if (snap.connectionState == ConnectionState.waiting) return Center(child: CircularProgressIndicator());
if (snap.connectionState == ConnectionState.done && (snap.data?.length ?? 0) != 0) {
return ListView.separated(
padding: EdgeInsets.all(21),

@ -0,0 +1,37 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/single_status_menu.dart';
class ServiceReportRepairLocation extends StatelessWidget {
final Lookup initialValue;
final Function(Lookup) onSelect;
const ServiceReportRepairLocation({Key key, this.onSelect, this.initialValue}) : super(key: key);
@override
Widget build(BuildContext context) {
SettingProvider _settingProvider = Provider.of<SettingProvider>(context);
UserProvider _userProvider = Provider.of<UserProvider>(context);
ServiceReportRepairLocationProvider _menuProvider = Provider.of<ServiceReportRepairLocationProvider>(context);
return LoadingManager(
isLoading: _menuProvider.isLoading,
isFailedLoading: _menuProvider.reasons == null,
stateCode: _menuProvider.stateCode,
onRefresh: () async {
_menuProvider.reset();
await _menuProvider.getTypes(
user: _userProvider.user,
host: _settingProvider.host,
);
},
child: SingleStatusMenu(
initialStatus: initialValue,
statuses: _menuProvider.reasons,
onSelect: onSelect,
));
}
}

@ -8,14 +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/models/lookup.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/status/single_status_menu.dart';
class ServiceReportStatusMenu extends StatefulWidget {
final Function(Lookup) onSelect;
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
State<ServiceReportStatusMenu> createState() => _ServiceReportStatusMenuState();
@ -39,7 +41,14 @@ class _ServiceReportStatusMenuState extends State<ServiceReportStatusMenu> {
isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null,
stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null : max(menuProvider.stateCode ?? 0, callsLastSituationsProvider.stateCode ?? 0),
onRefresh: () async {
await callsLastSituationsProvider.getCalls(user: userProvider.user, host: settingProvider.host, serviceStatus: widget.report.status?.id);
await callsLastSituationsProvider.getCalls(
user: userProvider.user,
host: settingProvider.host,
serviceStatus: widget.report.status?.id,
typeName: widget.report.type?.name,
id: widget.report.id,
woId: widget.request.id,
);
if (menuProvider.stateCode == null) {
menuProvider.reset();
await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host);
@ -51,7 +60,14 @@ class _ServiceReportStatusMenuState extends State<ServiceReportStatusMenu> {
initialStatus: widget.report.status,
onSelect: (status) {
widget.report.callLastSituation = null;
callsLastSituationsProvider.getCalls(user: userProvider.user, host: settingProvider.host, serviceStatus: status.id);
callsLastSituationsProvider.getCalls(
user: userProvider.user,
host: settingProvider.host,
serviceStatus: status.id,
id: widget.report.id,
woId: widget.request.id,
typeName: widget.report.type?.name,
);
widget.onSelect(status);
},

Loading…
Cancel
Save