work order improvement.

merge-requests/28/head
Sikander Saleem 3 years ago
parent d869f82020
commit f39b6f5d8e

@ -21,8 +21,8 @@ class SearchWorkOrders {
String startofWorkTime; String startofWorkTime;
String endofWorkTime; String endofWorkTime;
double workingHours; double workingHours;
String travelingHours; num travelingHours;
String travelingExpenses; num travelingExpenses;
ModelDefRelatedDefects faultDescription; ModelDefRelatedDefects faultDescription;
List sparePartsWorkOrders; List sparePartsWorkOrders;
String reviewComment; String reviewComment;
@ -509,7 +509,7 @@ class ModelDefinition {
} }
class ModelDefRelatedDefects { class ModelDefRelatedDefects {
String id; int id;
String defectName; String defectName;
String workPerformed; String workPerformed;
String estimatedTime; String estimatedTime;

@ -5,6 +5,7 @@ import 'package:test_sa/controllers/providers/api/service_requests_provider.dart
import 'package:test_sa/controllers/providers/api/user_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/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/search_work_order.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/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart';
@ -13,8 +14,9 @@ import 'package:test_sa/views/widgets/loaders/failed_loading.dart';
import 'edit_service_report.dart'; import 'edit_service_report.dart';
class FutureServiceReport extends StatefulWidget { class FutureServiceReport extends StatefulWidget {
final ServiceRequest request; final ServiceRequest request;
final SearchWorkOrders workOrder;
const FutureServiceReport({Key key, this.request}) : super(key: key); const FutureServiceReport({Key key, this.request,this.workOrder}) : super(key: key);
@override @override
_FutureServiceReportState createState() => _FutureServiceReportState(); _FutureServiceReportState createState() => _FutureServiceReportState();
@ -32,7 +34,7 @@ class _FutureServiceReportState extends State<FutureServiceReport> {
return Scaffold( return Scaffold(
body: FutureBuilder<ServiceReport>( body: FutureBuilder<ServiceReport>(
future: ServiceRequestsProvider().getSingleServiceReport( future: ServiceRequestsProvider().getSingleServiceReport(
reportId: widget.request.reportID, reportId: widget.workOrder.id,
user: _userProvider.user, user: _userProvider.user,
host: _settingProvider.host, host: _settingProvider.host,
subtitle: _subtitle subtitle: _subtitle

@ -6,6 +6,7 @@ import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_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/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.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/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
@ -25,17 +26,19 @@ import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../models/service_request/search_work_order.dart'; import '../../../../models/service_request/search_work_order.dart';
import 'report/future_service_report.dart'; import 'report/future_service_report.dart';
class RequestDetailsPage extends StatelessWidget { class RequestDetailsPage extends StatelessWidget {
static final String id = "/call-details"; static final String id = "/call-details";
final ServiceRequest serviceRequest; final ServiceRequest serviceRequest;
const RequestDetailsPage({Key key, this.serviceRequest}) : super(key: key); const RequestDetailsPage({Key key, this.serviceRequest}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Subtitle _subtitle = AppLocalization.of(context).subtitle; Subtitle _subtitle = AppLocalization.of(context).subtitle;
UserProvider _userProvider = Provider.of<UserProvider>(context); UserProvider _userProvider = Provider.of<UserProvider>(context);
SettingProvider _settingProvider = Provider.of<SettingProvider>(context); SettingProvider _settingProvider = Provider.of<SettingProvider>(context);
List<SearchWorkOrders> workOrders=[]; List<SearchWorkOrders> workOrders = [];
ServiceRequestsProvider _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context); ServiceRequestsProvider _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
return DefaultTabController( return DefaultTabController(
length: 2, length: 2,
@ -44,8 +47,8 @@ class RequestDetailsPage extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
Container( Container(
color:AColors.primaryColor, color: AColors.primaryColor,
padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4),
child: Row( child: Row(
children: [ children: [
ABackButton(), ABackButton(),
@ -53,124 +56,129 @@ class RequestDetailsPage extends StatelessWidget {
child: Center( child: Center(
child: Text( child: Text(
_subtitle.details, _subtitle.details,
style: Theme.of(context).textTheme.headline6.copyWith( style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic),
color: AColors.white,
fontStyle: FontStyle.italic
),
), ),
), ),
), ),
_userProvider.user.type == UsersTypes.normal_user ? _userProvider.user.type == UsersTypes.normal_user
// AIconButton( ?
// iconData: Icons.warning_amber_rounded, // AIconButton(
// color: AColors.white, // iconData: Icons.warning_amber_rounded,
// buttonSize: 42, // color: AColors.white,
// backgroundColor: AColors.deepOrange, // buttonSize: 42,
// onPressed: (){ // backgroundColor: AColors.deepOrange,
// Navigator.of(context).push( // onPressed: (){
// MaterialPageRoute( // Navigator.of(context).push(
// builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) // MaterialPageRoute(
// ) // builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,)
// ); // )
// },
// )
const SizedBox(width: 48,)
: AIconButton(
iconData: Icons.edit,
color: AColors.white,
buttonSize: 42,
backgroundColor: AColors.green,
onPressed: () async {
showModalBottomSheet(
context: context,
builder: (context){
return ServiceRequestsUpdateDialog(request: serviceRequest,);
});
// DateTime picked = await showDatePicker(
// context: context,
// initialDate: DateTime.now(),
// firstDate: DateTime.now(),
// lastDate: DateTime.now().add(Duration(days: 182))
// );
// if(picked == null){return;}
// showDialog<void>(
// context: context,
// barrierDismissible: false,
// builder: (BuildContext context) {
// return CupertinoAlertDialog(
// title: Text(_subtitle.updatingDots),
// content: Center(child: CircularProgressIndicator()),
// ); // );
// }, // },
// ); // )
// int status = await _serviceRequestsProvider.updateDate( const SizedBox(
// user: _userProvider.user, width: 48,
// host: _settingProvider.host, )
// request: serviceRequest, : AIconButton(
// newDate: picked.toString().split(" ").first iconData: Icons.edit,
// ); color: AColors.white,
// Navigator.of(context).pop(); buttonSize: 42,
// Fluttertoast.showToast( backgroundColor: AColors.green,
// msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), onPressed: () async {
// ); showModalBottomSheet(
}, context: context,
), builder: (context) {
SizedBox(width: 16,) return ServiceRequestsUpdateDialog(
request: serviceRequest,
);
});
// DateTime picked = await showDatePicker(
// context: context,
// initialDate: DateTime.now(),
// firstDate: DateTime.now(),
// lastDate: DateTime.now().add(Duration(days: 182))
// );
// if(picked == null){return;}
// showDialog<void>(
// context: context,
// barrierDismissible: false,
// builder: (BuildContext context) {
// return CupertinoAlertDialog(
// title: Text(_subtitle.updatingDots),
// content: Center(child: CircularProgressIndicator()),
// );
// },
// );
// int status = await _serviceRequestsProvider.updateDate(
// user: _userProvider.user,
// host: _settingProvider.host,
// request: serviceRequest,
// newDate: picked.toString().split(" ").first
// );
// Navigator.of(context).pop();
// Fluttertoast.showToast(
// msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle),
// );
},
),
SizedBox(
width: 16,
)
], ],
), ),
), ),
serviceRequest.devicePhotos.isEmpty
serviceRequest.devicePhotos.isEmpty ? SizedBox.shrink(): ? SizedBox.shrink()
Column( : Column(
children: [ children: [
SizedBox(height: 8,), SizedBox(
MaterialButton( height: 8,
padding: EdgeInsets.zero, ),
onPressed: (){ MaterialButton(
Navigator.of(context).push( padding: EdgeInsets.zero,
MaterialPageRoute( onPressed: () {
builder: (_) => Scaffold( Navigator.of(context).push(MaterialPageRoute(
body: InteractiveViewer( builder: (_) => Scaffold(
child: Center( body: InteractiveViewer(
child: ImageLoader( child: Center(
url: serviceRequest.devicePhotos.first, child: ImageLoader(
boxFit: BoxFit.contain, url: serviceRequest.devicePhotos.first,
), boxFit: BoxFit.contain,
), ),
), ),
) ),
) )));
); },
}, child: SizedBox(
child: SizedBox( height: 140 * AppStyle.getScaleFactor(context),
height: 140 * AppStyle.getScaleFactor(context), width: MediaQuery.of(context).size.width,
width: MediaQuery.of(context).size.width, child: ImageLoader(
child: ImageLoader( url: serviceRequest.devicePhotos.first,
url: serviceRequest.devicePhotos.first, boxFit: BoxFit.cover,
boxFit: BoxFit.cover, ),
), ),
), ),
), SizedBox(height: 8),
SizedBox(height: 8,), SizedBox(
SizedBox( height: 60 * AppStyle.getScaleFactor(context),
height: 60* AppStyle.getScaleFactor(context), child: ImagesList(
child: ImagesList( images: serviceRequest.devicePhotos,
images: serviceRequest.devicePhotos, ),
),
],
), ),
), TabBar(labelColor: AColors.primaryColor, tabs: [
], Tab(
), text: _subtitle.general,
),
TabBar( Tab(
labelColor: AColors.primaryColor, text: _subtitle.serviceRequestInformation,
tabs: [ ),
Tab(text: _subtitle.general,),
Tab(text: _subtitle.serviceRequestInformation,),
]), ]),
SizedBox(height: 8,), SizedBox(
height: 8,
),
Expanded( Expanded(
child: TabBarView( child: TabBarView(
children: [ children: [
ListView( ListView(
padding: EdgeInsets.symmetric(horizontal: 16), padding: EdgeInsets.symmetric(horizontal: 16),
@ -189,7 +197,7 @@ class RequestDetailsPage extends StatelessWidget {
), ),
RequestInfoRow( RequestInfoRow(
title: _subtitle.deviceModel, title: _subtitle.deviceModel,
info : serviceRequest.deviceModel, info: serviceRequest.deviceModel,
), ),
RequestInfoRow( RequestInfoRow(
title: _subtitle.engineerName, title: _subtitle.engineerName,
@ -203,11 +211,12 @@ class RequestDetailsPage extends StatelessWidget {
title: _subtitle.date, title: _subtitle.date,
info: serviceRequest.date, info: serviceRequest.date,
), ),
serviceRequest.nextVisitDate == null ? SizedBox.shrink() : serviceRequest.nextVisitDate == null
RequestInfoRow( ? SizedBox.shrink()
title: _subtitle.nextVisitDate, : RequestInfoRow(
info: DateFormat('EE dd/MM/yyyy').format(serviceRequest.nextVisitDate), title: _subtitle.nextVisitDate,
), info: DateFormat('EE dd/MM/yyyy').format(serviceRequest.nextVisitDate),
),
Row( Row(
children: [ children: [
Expanded( Expanded(
@ -217,12 +226,12 @@ class RequestDetailsPage extends StatelessWidget {
textScaleFactor: AppStyle.getScaleFactor(context), textScaleFactor: AppStyle.getScaleFactor(context),
), ),
), ),
StatusLabel(label: serviceRequest.statusLabel, StatusLabel(label: serviceRequest.statusLabel, color: AColors.getRequestStatusColor(serviceRequest.statusValue)),
color: AColors.getRequestStatusColor(serviceRequest.statusValue)
),
], ],
), ),
Divider(color: Theme.of(context).primaryColor,), Divider(
color: Theme.of(context).primaryColor,
),
RequestInfoRow( RequestInfoRow(
title: _subtitle.hospital, title: _subtitle.hospital,
info: serviceRequest.hospitalName, info: serviceRequest.hospitalName,
@ -243,10 +252,10 @@ class RequestDetailsPage extends StatelessWidget {
title: _subtitle.maintenanceIssue, title: _subtitle.maintenanceIssue,
content: serviceRequest.maintenanceIssue, content: serviceRequest.maintenanceIssue,
), ),
if(serviceRequest.audio?.isNotEmpty == true) if (serviceRequest.audio?.isNotEmpty == true)
ASoundPlayer( ASoundPlayer(
audio: serviceRequest.audio, audio: serviceRequest.audio,
), ),
// //
// Center( // Center(
// child: Padding( // child: Padding(
@ -290,98 +299,112 @@ class RequestDetailsPage extends StatelessWidget {
), ),
// workOrders.isEmpty ? // workOrders.isEmpty ?
FutureBuilder( FutureBuilder(
future: _serviceRequestsProvider.searchWorkOrders(callId:serviceRequest.requestCode), future: _serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode),
builder: (context, snap){ builder: (context, snap) {
print("${workOrders?.length}"); workOrders = snap.data as List<SearchWorkOrders>;
workOrders= snap.data as List<SearchWorkOrders>; if (snap.connectionState == ConnectionState.done && (snap.data?.length ?? 0) != 0)
print("${workOrders?.length}"); return ListView.separated(
if(snap.connectionState==ConnectionState.done && snap.data.length != 0) padding: EdgeInsets.all(21),
return ListView.builder(
padding: EdgeInsets.symmetric(horizontal: 16),
itemCount: workOrders.length, itemCount: workOrders.length,
itemBuilder: (context , index){ separatorBuilder: (czt, index) => 21.height,
return Column( itemBuilder: (context, index) {
children: [ Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
RequestInfoRow( Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary;
title: _subtitle.callId,
content:workOrders[index].id.toString(), return ElevatedButton(
), style: ElevatedButton.styleFrom(
RequestInfoRow( padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8),
title: _subtitle.orderWorkNumber, primary: itemColor.withOpacity(.7),
info: "123", shape: RoundedRectangleBorder(
), borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)),
RequestInfoRow(
title: _subtitle.visitDate,
info: workOrders[index].visitDate,
),
RequestInfoRow(
title: _subtitle.assignedEmployee,
info: workOrders[index].callRequest.assignedEmployee.name,
),
RequestInfoRow(
title: _subtitle.assetSN,
info:workOrders[index].callRequest.asset.assetSerialNo,
),
RequestInfoRow(
title: _subtitle.assetName,
info:"123",
),
RequestInfoRow(
title: _subtitle.model,
info:"123",
),
RequestInfoRow(
title: _subtitle.site,
info:workOrders[index].callRequest.asset.site.custName,
),
RequestInfoRow(
title: _subtitle.maintenanceSituation,
info:"123",
),
RequestInfoRow(
title: _subtitle.currentSituation,
info:workOrders[index].currentSituation.name??'',
), ),
_userProvider.user.type == UsersTypes.engineer ),
&& serviceRequest.reportID != null? //padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8),
Padding( onPressed: () {
// onPressed(request);
},
child: Column(
children: [
RequestInfoRow(
title: _subtitle.callId,
content: workOrders[index].id.toString(),
),
RequestInfoRow(
title: _subtitle.orderWorkNumber,
info: workOrders[index].workOrderNo.toString(),
),
RequestInfoRow(
title: _subtitle.visitDate,
info: workOrders[index].visitDate,
),
RequestInfoRow(title: _subtitle.assignedEmployee, info: workOrders[index].assignedEmployee.name),
RequestInfoRow(
title: _subtitle.assetSN,
info: workOrders[index].callRequest.asset.assetSerialNo,
),
RequestInfoRow(
title: _subtitle.assetName,
info: workOrders[index].callRequest.asset.modelDefinition.assetName,
),
RequestInfoRow(
title: _subtitle.model,
info: workOrders[index].callRequest.asset.modelDefinition.modelName,
),
RequestInfoRow(
title: _subtitle.site,
info: workOrders[index].callRequest.asset.site.custName,
),
RequestInfoRow(
title: _subtitle.maintenanceSituation,
info: workOrders[index].calllastSituation.name ?? '',
),
RequestInfoRow(
title: _subtitle.currentSituation,
info: workOrders[index].currentSituation.name ?? '',
),
_userProvider.user.type == UsersTypes.engineer && workOrders[index].workOrderNo != null
? Padding(
padding: EdgeInsets.all(32),
child: AButton(
text: _subtitle.editServiceReport,
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => FutureServiceReport(
request: serviceRequest,
workOrder: workOrders[index],
)),
);
},
),
)
: SizedBox.shrink(),
],
),
);
},
);
else
return _userProvider.user.type == UsersTypes.engineer
? Center(
child: Padding(
padding: EdgeInsets.all(32), padding: EdgeInsets.all(32),
child: AButton( child: AButton(
text: _subtitle.editServiceReport, text: "Create Report",
onPressed: (){ onPressed: () {
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (_) => FutureServiceReport( builder: (_) => CreateServiceReport(
request: serviceRequest, request: serviceRequest,
) )),
),
); );
}, },
), ),
): SizedBox.shrink(), ),
], )
); : Center(
}, child: ASubTitle(_subtitle.noDateFound),
); );
else
return _userProvider.user.type == UsersTypes.engineer ?
Center(
child: Padding(
padding: EdgeInsets.all(32),
child: AButton(
text: "Create Report",
onPressed: (){
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => CreateServiceReport(
request: serviceRequest,
)
),
);
},
),
),
): Center(child: ASubTitle(_subtitle.noDateFound),);
}, },
) )
], ],
@ -393,69 +416,4 @@ class RequestDetailsPage extends StatelessWidget {
), ),
); );
} }
Widget dataList({@required Subtitle subtitle, @required List workOrders, @required UserProvider userProvider, @required BuildContext context}){
return ListView(
padding: EdgeInsets.symmetric(horizontal: 16),
children: [
RequestInfoRow(
title: subtitle.callId,
content:"123",
),
RequestInfoRow(
title: subtitle.orderWorkNumber,
info: "123",
),
RequestInfoRow(
title: subtitle.visitDate,
info: workOrders[0].visitDate??"",
),
RequestInfoRow(
title: subtitle.assignedEmployee,
info: "123",
),
RequestInfoRow(
title: subtitle.assetSN,
info:"123",
),
RequestInfoRow(
title: subtitle.assetName,
info:"123",
),
RequestInfoRow(
title: subtitle.model,
info:"123",
),
RequestInfoRow(
title: subtitle.site,
info:"123",
),
RequestInfoRow(
title: subtitle.maintenanceSituation,
info:"123",
),
RequestInfoRow(
title: subtitle.currentSituation,
info:"123",
),
userProvider.user.type == UsersTypes.engineer
&& serviceRequest.reportID != null?
Padding(
padding: EdgeInsets.all(32),
child: AButton(
text: subtitle.editServiceReport,
onPressed: (){
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => FutureServiceReport(
request: serviceRequest,
)
),
);
},
),
): SizedBox.shrink(),
],
);
}
} }

Loading…
Cancel
Save