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": "موقع الصيانه", "maintenanceSituation": "موقع الصيانه",
"currentSituation": "الموقع الحالي", "currentSituation": "الموقع الحالي",
"comment" : "تعليق", "comment" : "تعليق",
"updateServiceRequest" : "تعديل طلب الخدمة" "updateServiceRequest" : "تعديل طلب الخدمة",
"repairLocation" : "موقع الإصلاح",
"travelingExpense" : "مصاريف التنقل",
"startDate" : "وقت البدء",
"endDate" : "وقت الانتهاء"
} }

@ -196,6 +196,9 @@
"duplicateAlertMessage": "Are you sure you want to duplicate request?", "duplicateAlertMessage": "Are you sure you want to duplicate request?",
"duplicateRequest": "Duplicate Request", "duplicateRequest": "Duplicate Request",
"comment" : "Comment", "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 getServiceFirstAction => "$_baseUrl/Lookups/GetLookup?lookupEnum=700"; // get
static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get
static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503"; 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 getPreventiveMaintenanceVisits => "$_baseUrl/return/user/calibrations"; // get
static get updatePreventiveMaintenanceVisits => "$_baseUrl/Visit/UpdateVisits"; // 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 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

@ -284,7 +284,68 @@ class ServiceRequestsProvider extends ChangeNotifier {
}) async { }) async {
Response response; Response response;
try { 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["uid"] = user.id;
// body["token"] = user.token; // body["token"] = user.token;
response = await ApiManager.instance.post(URLs.createServiceReport, body: body); response = await ApiManager.instance.post(URLs.createServiceReport, body: body);
@ -302,6 +363,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
} }
return response.statusCode; return response.statusCode;
} catch (error) { } catch (error) {
print(error);
return -1; return -1;
} }
} }

@ -42,7 +42,14 @@ 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({
String host,
User user,
int serviceStatus,
String woId,
int id,
String typeName,
}) async {
if (_loading == true) return -2; if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
@ -50,7 +57,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier {
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(

@ -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/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_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_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_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_report_types_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_types_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_types_provider.dart';
@ -115,6 +116,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => EngineersProvider()), ChangeNotifierProvider(create: (_) => EngineersProvider()),
ChangeNotifierProvider(create: (_) => ServiceLoanAvailabilityProvider()), ChangeNotifierProvider(create: (_) => ServiceLoanAvailabilityProvider()),
ChangeNotifierProvider(create: (_) => ServiceFirstActionProvider()), ChangeNotifierProvider(create: (_) => ServiceFirstActionProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportRepairLocationProvider()),
], ],
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {

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

@ -224,6 +224,10 @@ class Subtitle {
String alert; String alert;
String comment; String comment;
String updateServiceRequest; String updateServiceRequest;
String repairLocation;
String travelingExpense;
String startDate;
String endDate;
void setIssues(List<String> issues) { void setIssues(List<String> issues) {
issues.clear(); issues.clear();
@ -423,6 +427,10 @@ class Subtitle {
@required this.site, @required this.site,
@required this.maintenanceSituation, @required this.maintenanceSituation,
@required this.currentSituation, @required this.currentSituation,
@required this.repairLocation,
@required this.travelingExpense,
@required this.startDate,
@required this.endDate,
}); });
factory Subtitle.fromJson(Map<String, dynamic> parsedJson) { factory Subtitle.fromJson(Map<String, dynamic> parsedJson) {
@ -615,6 +623,10 @@ class Subtitle {
site: parsedJson["site"], site: parsedJson["site"],
maintenanceSituation: parsedJson["maintenanceSituation"], maintenanceSituation: parsedJson["maintenanceSituation"],
currentSituation: parsedJson["currentSituation"], 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 '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';
@ -15,7 +14,6 @@ import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/part.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/models/service_request/service_request.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.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_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_reasons.dart';
import 'package:test_sa/views/widgets/status/report/service_report_status.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/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';
import '../../../../widgets/speech_to_text/speech_to_text.dart';
import '../../../../widgets/status/report/service_report_repair_location.dart';
class CreateServiceReport extends StatefulWidget { class CreateServiceReport extends StatefulWidget {
static final String id = "/create-service-report"; static final String id = "/create-service-report";
final ServiceRequest request; final ServiceRequest request;
@ -279,6 +279,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;
}, },
@ -330,7 +331,55 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
SizedBox( SizedBox(
height: 8 * AppStyle.getScaleFactor(context), 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( const SizedBox(
height: 8, height: 8,
), ),
@ -404,66 +453,69 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
), ),
], ],
), ),
const SizedBox(height: 8),
// const SizedBox(height: 8,), Row(
// Row( children: [
// children: [ ASubTitle(_subtitle.faultDescription),
// ASubTitle(_subtitle.faultDescription), Expanded(
// Expanded( child: SizedBox(
// child: SizedBox( height: 32 * AppStyle.getScaleFactor(context),
// height: 32 * AppStyle.getScaleFactor(context), child: SpeechToTextButton(
// child: SpeechToTextButton( controller: _faultController,
// controller: _faultController, mini: true,
// mini: true, ),
// ), ),
// ), ),
// ), ],
// ], ),
// ), const SizedBox(
// const SizedBox(height: 4,), height: 4,
// ATextFormField( ),
// initialValue: _serviceReport?.faultDescriptionId, ATextFormField(
// textAlign: TextAlign.center, initialValue: _serviceReport?.faultDescriptionId?.toString(),
// controller: _faultController, textAlign: TextAlign.center,
// style: Theme.of(context).textTheme.subtitle1, controller: _faultController,
// validator: (value) => style: Theme.of(context).textTheme.titleMedium,
// Validator.hasValue(value) validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
// ? null : _subtitle.requiredWord, textInputType: TextInputType.multiline,
// textInputType: TextInputType.multiline, onSaved: (value) {
// onSaved: (value){ _serviceReport.faultDescriptionId = int.tryParse(value) ?? 0;
// _serviceReport.faultDescriptionId = value; },
// }, ),
// ), const SizedBox(
// const SizedBox(height: 8,), height: 8,
// Row( ),
// children: [ Row(
// ASubTitle(_subtitle.workPreformed), children: [
// Expanded( ASubTitle(_subtitle.workPreformed),
// child: SizedBox( Expanded(
// height: 32 * AppStyle.getScaleFactor(context), child: SizedBox(
// child: SpeechToTextButton( height: 32 * AppStyle.getScaleFactor(context),
// controller: _workPreformedController, child: SpeechToTextButton(
// mini: true, controller: _workPreformedController,
// ), mini: true,
// ), ),
// ), ),
// ], ),
// ), ],
// const SizedBox(height: 4,), ),
// ATextFormField( const SizedBox(
// initialValue: _serviceReport?.workPreformed, height: 4,
// textAlign: TextAlign.center, ),
// controller: _workPreformedController, ATextFormField(
// style: Theme.of(context).textTheme.subtitle1, initialValue: _serviceReport?.workPreformed,
// validator: (value) => textAlign: TextAlign.center,
// Validator.hasValue(value) controller: _workPreformedController,
// ? null : _subtitle.requiredWord, style: Theme.of(context).textTheme.subtitle1,
// textInputType: TextInputType.multiline, validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord,
// onSaved: (value){ textInputType: TextInputType.multiline,
// _serviceReport.workPreformed = value; onSaved: (value) {
// }, _serviceReport.workPreformed = value;
// ), },
// const SizedBox(height: 8,), ),
const SizedBox(
height: 8,
),
const SizedBox( const SizedBox(
height: 8, 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( const SizedBox(
height: 8, 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"), const ASubTitle("Nurse Signature"),
ESignature( ESignature(
oldSignature: _serviceReport.signatureNurse, oldSignature: _serviceReport.signatureNurse,
@ -731,7 +820,14 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
_isLoading = true; _isLoading = true;
setState(() {}); 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; _isLoading = false;
setState(() {}); setState(() {});
if (status >= 200 && status < 300) { if (status >= 200 && status < 300) {

@ -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';
@ -307,6 +306,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
), ),
ServiceReportStatusMenu( ServiceReportStatusMenu(
report: _serviceReport, report: _serviceReport,
request: widget.request,
onSelect: (status) { onSelect: (status) {
_serviceReport.status = 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/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.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/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_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart';
@ -84,13 +85,16 @@ class RequestDetailsPage extends StatelessWidget {
buttonSize: 42, buttonSize: 42,
backgroundColor: AColors.green, backgroundColor: AColors.green,
onPressed: () async { onPressed: () async {
showModalBottomSheet( Navigator.of(context).push(
context: context, MaterialPageRoute(builder: (_) => CreateRequestPage(serviceRequest: serviceRequest)),
builder: (context) { );
return ServiceRequestsUpdateDialog( // showModalBottomSheet(
request: serviceRequest, // context: context,
); // builder: (context) {
}); // return ServiceRequestsUpdateDialog(
// request: serviceRequest,
// );
// });
// DateTime picked = await showDatePicker( // DateTime picked = await showDatePicker(
// context: context, // context: context,
// initialDate: DateTime.now(), // initialDate: DateTime.now(),
@ -302,6 +306,7 @@ class RequestDetailsPage extends StatelessWidget {
future: _serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode), future: _serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode),
builder: (context, snap) { builder: (context, snap) {
workOrders = snap.data as List<SearchWorkOrders>; 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) { if (snap.connectionState == ConnectionState.done && (snap.data?.length ?? 0) != 0) {
return ListView.separated( return ListView.separated(
padding: EdgeInsets.all(21), 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/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();
@ -39,7 +41,14 @@ class _ServiceReportStatusMenuState extends State<ServiceReportStatusMenu> {
isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null, isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null,
stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null : max(menuProvider.stateCode ?? 0, callsLastSituationsProvider.stateCode ?? 0), stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null : max(menuProvider.stateCode ?? 0, callsLastSituationsProvider.stateCode ?? 0),
onRefresh: () async { 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) { if (menuProvider.stateCode == null) {
menuProvider.reset(); menuProvider.reset();
await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host); await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host);
@ -51,7 +60,14 @@ class _ServiceReportStatusMenuState extends State<ServiceReportStatusMenu> {
initialStatus: widget.report.status, initialStatus: widget.report.status,
onSelect: (status) { onSelect: (status) {
widget.report.callLastSituation = null; 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); widget.onSelect(status);
}, },

Loading…
Cancel
Save