improvements

design_3.0_demo_module
Sikander Saleem 9 hours ago
parent 42677a72b3
commit 1a2845337b

@ -8,10 +8,10 @@ class URLs {
static const host1 = "https://atomsmuat.hmg.com"; // local UAT url
// static final String _baseUrl = "$_host/mobile"; // host local UAT
// static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
// static final String _baseUrl = "$_host/mobile"; // host local UAT and for internal audit dev
// static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM
static final String _baseUrl = "$_host/v4/mobile"; // v4 for Demo module
// static final String _baseUrl = "$_host/v4/mobile"; // v4 for Demo module
// static final String _baseUrl = "$_host/v5/mobile"; // v5 for data segregation
static const String chatHubUrl = "https://apiderichat.hmg.com/chathub";
@ -492,11 +492,14 @@ class URLs {
//Demo Request...
static get addDemoRequest => "$_baseUrl/DemoRequest/AddDemoRequest";
static get updateDemoRequest => "$_baseUrl/DemoRequest/UpdateDemoRequest";
static get getDemoRequestById => "$_baseUrl/DemoRequest";
static get updateDemoRequestByAssessor => "$_baseUrl/DemoRequest/UpdateDemoRequestByAssessor";
static get updateDemoPeriodByRequester => "$_baseUrl/DemoRequest/UpdateDemoPeriodByRequester";
//4104 attachment type lookup
static get updateDemoPeriodByRequester => "$_baseUrl/DemoRequest/UpdateDemoPeriodByRequester";
//4104 attachment type lookup
}

@ -8,6 +8,7 @@ import 'package:test_sa/modules/asset_delivery_module/pages/asset_delivery_item_
import 'package:test_sa/modules/asset_inventory_module/pages/inventory_session_item_view.dart';
import 'package:test_sa/modules/demo_module/demo_request_item_view.dart';
import 'package:test_sa/modules/internal_audit_module/pages/equipment_internal_audit/equipment_internal_audit_item_view.dart';
import 'package:test_sa/modules/loan_module/pages/loan_equipment_item_view.dart';
import 'package:test_sa/modules/medical_gas_inspection/medical_gas_inspection_item_view.dart';
import 'package:test_sa/modules/tm_module/tasks/task_request_item_view.dart';
import 'package:test_sa/modules/traf_module/traf_request_item_view.dart';
@ -43,7 +44,7 @@ class RequestCategoryList extends StatelessWidget {
}
Widget _buildRequestItem(Data request) {
log('here with no ${request.transactionNo}');
// log('here with no ${request.transactionNo}');
switch (request.transactionNo) {
case 1:
return ServiceRequestItemView(requestData: request);
@ -63,15 +64,17 @@ class RequestCategoryList extends StatelessWidget {
return InventorySessionItemView(requestData: request);
case 9:
return TrafRequestItemView(requestData: request);
case 10:
case 10:
return EquipmentInternalAuditItemView(requestData: request);
case 11:
case 11:
return EquipmentInternalAuditItemView(requestData: request);
case 13:
case 12:
return LoanEquipmentItemView(requestData: request);
case 13:
return AssetDeliveryItemView(requestData: request);
case 14:
case 14:
return MedicalGasInspectionItemView(requestData: request);
case 15:
case 15:
return DemoRequestItemView(requestData: request);
default:
return Container(

@ -100,30 +100,29 @@ extension IntExtensionsDemoRequest on int {
DemoRequestStepEnum toDemoRequestStepEnum() {
//Todo need to check exact stages
switch (this) {
// { "id": 7690, "name": "Pending Assessor Acceptance", "value": 5 },
//
// update request details
//
//
// { "id": 7692, "name": "Assessor Audit Doc Pending", "value": 7 },
//
// Update request details
//
//
// { "id": 7766, "name": "Demo Period Expired", "value": 15 }
//
// request for extention
//
//
// { "id": 7769, "name": "Awaiting MD Evaluation", "value": 18 },
//
// evaluation
case 5:
// { "id": 7690, "name": "Pending Assessor Acceptance", "value": 5 },
//
// update request details
//
//
// { "id": 7692, "name": "Assessor Audit Doc Pending", "value": 7 },
//
// Update request details
//
//
// { "id": 7766, "name": "Demo Period Expired", "value": 15 }
//
// request for extention
//
//
// { "id": 7769, "name": "Awaiting MD Evaluation", "value": 18 },
//
// evaluation
case 5:
return DemoRequestStepEnum.qAuditorRejectAccept;
case 7:
return DemoRequestStepEnum.updateRequest;
return DemoRequestStepEnum.qAuditorRejectAccept;
case 5:
return DemoRequestStepEnum.updateRequest;
return DemoRequestStepEnum.viewOnly;

@ -372,7 +372,7 @@ class FooterActionButton {
Lookup? status,
required DemoRequestModel dataModel,
required DemoRequestStepEnum demoRequestStage,
required Function(bool status) refreshData,
required VoidCallback refreshData,
}) {
DemoProvider demoProvider = Provider.of<DemoProvider>(context, listen: false);
UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
@ -401,9 +401,7 @@ class FooterActionButton {
}
},
).expanded,
const SizedBox(
width: 20,
),
const SizedBox(width: 16),
AppFilledButton(
label: context.translation.accept,
maxWidth: true,
@ -413,7 +411,7 @@ class FooterActionButton {
bool responseStatus = await demoProvider.acceptRejectRequest(requestId: dataModel.id!, status: true);
Utils.hideLoading(context);
if (responseStatus) {
refreshData(true);
refreshData();
}
},
).expanded,
@ -434,7 +432,7 @@ class FooterActionButton {
dataModel: dataModel,
)));
if (isRefresh == true) {
refreshData(true);
refreshData();
}
},
),
@ -454,7 +452,7 @@ class FooterActionButton {
dataModel: dataModel,
)));
if (isRefresh == true) {
refreshData(true);
refreshData();
}
},
),
@ -478,7 +476,7 @@ class FooterActionButton {
),
);
if (isRefresh == true) {
refreshData(true);
refreshData();
}
},
),

@ -59,10 +59,10 @@ class CreateDemoRequestPage extends StatefulWidget {
}
class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with TickerProviderStateMixin {
final List<GenericAttachmentModel> attachments = [];
List<GenericAttachmentModel> _attachments = [];
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
final DemoFormModel _demoFormModel = DemoFormModel();
final DemoFormModel _demoFormModel = DemoFormModel(id: 0);
TextEditingController vendorEmailController = TextEditingController();
TextEditingController vendorPhoneController = TextEditingController();
@ -72,13 +72,12 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
vendorPhoneController.dispose();
super.dispose();
}
Lookup? demoDocumentLookup;
@override
void initState() {
super.initState();
// Provider.of<MedicalDepartmentProvider>(context, listen: false).reset();
// Provider.of<LoanPeriodProvider>(context, listen: false).reset();
// loanTypes = [Lookup(id: 0, name: "Standard", value: 1), Lookup(id: 1, name: "Backup", value: 2)];
}
@override
@ -143,7 +142,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
16.height,
AttachmentPicker(
label: context.translation.attachments,
attachment: attachments,
attachment: _attachments,
buttonColor: AppColor.black10.withOpacity(demoDocumentLookup != null ? 1 : .4),
onlyImages: false,
enabled: demoDocumentLookup != null,
@ -151,7 +150,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: (context.isDark ? AppColor.primary10 : AppColor.neutral120).withOpacity(demoDocumentLookup != null ? 1 : .4)),
onChange: (attachments) {
attachments = attachments;
_attachments = attachments;
setState(() {});
},
),
@ -436,7 +435,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
'Vendor Details'.addTranslation.bodyText(context).custom(color: AppColor.black10),
8.height,
AppTextFormField(
labelText:'Vendor Name'.addTranslation,
labelText: 'Vendor Name'.addTranslation,
style: Theme.of(context).textTheme.titleMedium,
backgroundColor: AppColor.fieldBgColor(context),
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
@ -449,7 +448,7 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
),
8.height,
AppTextFormField(
labelText:'Representative Name'.addTranslation,
labelText: 'Representative Name'.addTranslation,
style: Theme.of(context).textTheme.titleMedium,
backgroundColor: AppColor.fieldBgColor(context),
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
@ -495,10 +494,11 @@ class _CreateDemoRequestPageState extends State<CreateDemoRequestPage> with Tick
FocusScope.of(context).unfocus();
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
_demoFormModel.id = 0;
_demoFormModel.demoAttachment = [];
for (var item in attachments) {
for (var item in _attachments) {
String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? '';
_demoFormModel.demoAttachment?.add(DemoAttachments(id: 0, attachmentName: fileName, demoRequestId: 0,documentTypeId: 7748));
_demoFormModel.demoAttachment?.add(DemoAttachments(id: 0, attachmentName: fileName, demoRequestId: 0, documentTypeId: item.documentTypeId!.id!));
}
Utils.showLoading(context);
DemoProvider demoProvider = Provider.of<DemoProvider>(context, listen: false);

@ -22,6 +22,7 @@ import '../../views/widgets/images/files_list.dart';
import '../../views/widgets/requests/request_status.dart';
import '../loan_module/models/loan_request_model.dart';
import 'demo_activities_page.dart';
import 'models/demo_attachment_model.dart';
class DemoDetailViewPage extends StatefulWidget {
static const String id = "/demo-detail-page";
@ -36,36 +37,37 @@ class DemoDetailViewPage extends StatefulWidget {
}
class _DemoDetailViewPageState extends State<DemoDetailViewPage> {
bool isLoading = false;
// bool isLoading = false;
DemoRequestModel? dataModel;
// DemoRequestModel? dataModel;
DemoProvider? demoProvider;
List<WorkOrderAttachments> allAttachments = [];
// List<DemoAttachments> allAttachments = [];
//Todo need to check about attachments.
bool loading = false;
// bool loading = false;
@override
void initState() {
demoProvider = Provider.of<DemoProvider>(context, listen: false);
WidgetsBinding.instance.addPostFrameCallback((_) {
getDetailsById();
});
// WidgetsBinding.instance.addPostFrameCallback((_) {
// getDetailsById();
// });
super.initState();
}
Future<void> getDetailsById() async {
setState(() {
loading = true;
});
dataModel = await demoProvider?.getDemoById(widget.demoId) ?? DemoRequestModel();
// _attachments = dataModel.demoAttachments.toList() ?? [];
setState(() {
loading = false;
});
}
// Future<void> getDetailsById() async {
// setState(() {
// loading = true;
// });
// dataModel = await demoProvider?.getDemoById(widget.demoId);// ?? DemoRequestModel();
//
// allAttachments = dataModel?.demoAttachments ?? [];
// setState(() {
// loading = false;
// });
// }
@override
void dispose() {
@ -76,69 +78,78 @@ class _DemoDetailViewPageState extends State<DemoDetailViewPage> {
Widget build(BuildContext context) {
return Scaffold(
appBar: const DefaultAppBar(title: "Request Details"),
body: loading
? const CircularProgressIndicator(color: AppColor.primary10).center
: dataModel == null
? const NoDataFound().center
: Column(
children: [
SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (dataModel?.status != null) ...[
StatusLabel(
label: dataModel?.status?.name,
id: dataModel?.status?.value,
radius: 4,
textColor: AppColor.demoRequestStatusTextColor(context, dataModel!.status!.value!),
backgroundColor: AppColor.demoRequestStatus(context, dataModel!.status!.value!),
),
8.height,
],
...requesterDetails(context, dataModel),
12.height,
...requestDetails(context, dataModel),
12.height,
...doctorDetails(context, dataModel),
12.height,
...assetDetails(context, dataModel),
12.height,
...vendorDetails(context, dataModel),
if (allAttachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
Text(
"Attachments".addTranslation,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []),
],
],
).toShadowContainer(context, padding: 12),
).expanded,
FooterActionButton.demoRequestDetailsFooterWidget(
demoRequestStage: dataModel!.status!.demoRequestStepEnum!,
// demoRequestStage: DemoRequestStepEnum.updateRequest,
dataModel: dataModel!,
status: dataModel!.status!,
context: context,
refreshData: (status) {
if (status) {
getDetailsById();
}
}).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0),
],
));
body: FutureBuilder<DemoRequestModel?>(
future: Provider.of<DemoProvider>(context, listen: false).getDemoById(widget.demoId),
builder: (BuildContext context, AsyncSnapshot<DemoRequestModel?> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) return const CircularProgressIndicator(color: AppColor.primary10).center;
if (snapshot.data == null) return const NoDataFound().center;
List<DemoAttachments> allAttachments = snapshot.data!.demoAttachments! ?? [];
DemoRequestModel demoData = snapshot.data!;
return Column(
children: [
SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (demoData.status != null) ...[
StatusLabel(
label: demoData.status?.name,
id: demoData.status?.value,
radius: 4,
textColor: AppColor.demoRequestStatusTextColor(context, demoData.status!.value!),
backgroundColor: AppColor.demoRequestStatus(context, demoData.status!.value!),
),
8.height,
],
12.height,
...requesterDetails(context, demoData),
const Divider().defaultStyle(context),
...requestDetails(context, demoData),
const Divider().defaultStyle(context),
...doctorDetails(context, demoData),
const Divider().defaultStyle(context),
...assetDetails(context, demoData),
const Divider().defaultStyle(context),
...vendorDetails(context, demoData),
if (allAttachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
Text(
"Attachments".addTranslation,
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
FilesList(
showAsListView: true,
images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList(),
types: allAttachments.map((e) => e.documentType?.name ?? '').toList()),
],
],
).toShadowContainer(context, padding: 12),
).expanded,
FooterActionButton.demoRequestDetailsFooterWidget(
demoRequestStage: demoData.status!.demoRequestStepEnum!,
// demoRequestStage: DemoRequestStepEnum.updateRequest,
dataModel: demoData,
status: demoData.status!,
context: context,
refreshData: () => setState(() {})).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0),
],
);
}));
}
List<Widget> requestDetails(BuildContext context, DemoRequestModel? model) {
return [
Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Request Details", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
// 'Demo No: ${model. ?? "-"}'.bodyText(context),
'Demo Period: ${model?.demoPeriod?.name ?? "-"}'.bodyText(context),
'${context.translation.site}: ${model?.site?.custName ?? "-"}'.bodyText(context),
'${context.translation.department}: ${model?.department?.name ?? "-"}'.bodyText(context),
'${context.translation.building}: ${model?.building?.name ?? "-"}'.bodyText(context),
'${context.translation.floor}: ${model?.floor?.name ?? "-"}'.bodyText(context),
'${context.translation.department}: ${model?.department?.departmentName ?? "-"}'.bodyText(context),
'Item Description: ${model?.itemDescription ?? "-"}'.bodyText(context),
'Request Description: ${model?.requestDescription ?? "-"}'.bodyText(context),
];
@ -146,17 +157,17 @@ class _DemoDetailViewPageState extends State<DemoDetailViewPage> {
List<Widget> vendorDetails(BuildContext context, DemoRequestModel? model) {
return [
Text("Vendor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Name: ${model?.supplier?.name ?? "-"}'.bodyText(context),
'Representative Name: ${model?.suppPerson?.name ?? "-"}'.bodyText(context),
'Contact: ${model?.supplier?.contact ?? "-"}'.bodyText(context),
'Email: ${model?.supplier?.email ?? "-"}'.bodyText(context),
Text("Vendor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Name: ${model?.supplier?.name ?? model?.vendorName ?? "-"}'.bodyText(context),
'Representative Name: ${model?.suppPerson?.name ?? model?.vendorRepresentativeName ?? "-"}'.bodyText(context),
'Contact: ${model?.supplier?.contact ?? model?.vendorContactNumber ?? "-"}'.bodyText(context),
'Email: ${model?.supplier?.email ?? model?.vendorEmail ?? "-"}'.bodyText(context),
];
}
List<Widget> assetDetails(BuildContext context, DemoRequestModel? model) {
return [
Text("Asset Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Asset Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'${context.translation.assetName}: ${model?.assetName ?? "-"}'.bodyText(context),
'${context.translation.manufacture}: ${model?.manufacturer ?? "-"}'.bodyText(context),
'${context.translation.model}: ${model?.model ?? "-"}'.bodyText(context),
@ -165,7 +176,7 @@ class _DemoDetailViewPageState extends State<DemoDetailViewPage> {
List<Widget> doctorDetails(BuildContext context, DemoRequestModel? model) {
return [
Text("Doctor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Doctor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Name: ${model?.doctorName ?? "-"}'.bodyText(context),
'Contact: ${model?.doctorContactNumber ?? "-"}'.bodyText(context),
'Email: ${model?.doctorContactEmail ?? "-"}'.bodyText(context),
@ -174,7 +185,7 @@ class _DemoDetailViewPageState extends State<DemoDetailViewPage> {
List<Widget> requesterDetails(BuildContext context, DemoRequestModel? model) {
return [
Text("Requester Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Requester Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Name: ${model?.requesterUser?.requesterName ?? "-"}'.bodyText(context),
'Email: ${model?.requesterUser?.requesterEmail ?? "-"}'.bodyText(context),
'Contact: ${model?.requesterUser?.requesterMobile ?? "-"}'.bodyText(context),

@ -60,10 +60,7 @@ class DemoRequestItemView extends StatelessWidget {
),
],
).toShadowContainer(context, withShadow: showShadow).onPress(() async {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => DemoDetailViewPage(
demoId: requestData!.id!,
)));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DemoDetailViewPage(demoId: requestData!.id!)));
});
}
return Column(
@ -103,10 +100,7 @@ class DemoRequestItemView extends StatelessWidget {
),
],
).toShadowContainer(context, withShadow: showShadow).onPress(() async {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => DemoDetailViewPage(
demoId: requestDetails!.id!,
)));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => DemoDetailViewPage(demoId: requestDetails!.id!)));
});
}

@ -1,15 +1,19 @@
import 'package:test_sa/models/lookup.dart';
class DemoAttachments {
int? id;
num? demoRequestId;
num? documentTypeId;
Lookup? documentType;
String? attachmentName;
String? originalName;
DemoAttachments({this.id, this.documentTypeId, this.attachmentName, this.demoRequestId, this.originalName});
DemoAttachments({this.id, this.documentTypeId, this.documentType, this.attachmentName, this.demoRequestId, this.originalName});
DemoAttachments.fromJson(dynamic json) {
id = json['id'];
documentTypeId = json['documentTypeId'];
documentType = json['documentType'] != null ? Lookup.fromJson(json['documentType']) : null;
demoRequestId = json['demoRequestId'];
attachmentName = json['attachmentName'];
originalName = json['originalName'];
@ -24,4 +28,4 @@ class DemoAttachments {
map['originalName'] = originalName;
return map;
}
}
}

@ -58,7 +58,7 @@ class DemoFormModel {
Map<String, dynamic> toJson() {
return {
"id": 0,
"id": id ?? 0,
'siteId': site?.id,
'departmentId': department?.id,
"buildingId": building?.id,
@ -80,7 +80,35 @@ class DemoFormModel {
"supplierId": vendor?.id,
"suppPersonId": supEngineer?.id,
// "vendorEmail": vendorEmail,
"demoAttachments": demoAttachment != null ? demoAttachment!.map((v) => v.toJson()).toList() : [],
"demoAttachments":
// [
// {
// "id": 3,
// // "documentType": {
// // "id": 7748,
// // "name": "February",
// // "value": 2
// // },
// "documentTypeId": 7748,
// "attachmentName": "6c9f50b0-1c92-4ae9-ae64-7c284c61ea72.jpg",
// "originalName": "scaled_d245df97-1289-4d0c-92a0-569abedfb0db8154518103327960943.jpg",
// "demoRequestId": 3
// },
// {
// "id": 4,
// // "documentType": {
// // "id": 7748,
// // "name": "February",
// // "value": 2
// // },
// "documentTypeId": 7748,
// "attachmentName": "346e04f6-0f9b-4004-ad85-4cdbf8318f7c.jpg",
// "originalName": "scaled_85790b6c-7b16-46e6-891c-11c316d5897a2973693360957767376.jpg",
// "demoRequestId": 3
// }
// ]
demoAttachment != null ? demoAttachment!.map((v) => v.toJson()).toList() : [],
};
}

@ -1,4 +1,3 @@
import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart';
@ -106,6 +105,7 @@ class DemoProvider extends ChangeNotifier {
notifyListeners();
return siteObj;
}
Future<bool> addDemoTrialOutcome(Map<String, dynamic> body) async {
try {
Response response = await ApiManager.instance.post(URLs.addDemoTrialOutcome, body: body, showToast: false);

@ -47,7 +47,7 @@ class UpdateDemoRequestView extends StatefulWidget {
}
class _UpdateDemoRequestViewState extends State<UpdateDemoRequestView> with TickerProviderStateMixin {
final List<GenericAttachmentModel> attachments = [];
final List<DemoAttachments> attachments = [];
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
DemoFormModel _demoFormModel = DemoFormModel();
@ -161,7 +161,7 @@ class _UpdateDemoRequestViewState extends State<UpdateDemoRequestView> with Tick
for (final item in widget.dataModel.demoAttachments!) {
if ((item.attachmentName ?? '').isNotEmpty) {
attachments.add(
GenericAttachmentModel(name: item.attachmentName, id: item.id ?? 0, originalName: item.originalName),
DemoAttachments(attachmentName: item.attachmentName, id: item.id ?? 0, originalName: item.originalName),
);
}
}
@ -197,14 +197,14 @@ class _UpdateDemoRequestViewState extends State<UpdateDemoRequestView> with Tick
16.height,
...vendorDetailsSection(),
16.height,
AttachmentPicker(
label: context.translation.attachments,
attachment: attachments,
buttonColor: AppColor.black10,
onlyImages: false,
showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120),
),
// AttachmentPicker(
// label: context.translation.attachments,
// attachment: attachments,
// buttonColor: AppColor.black10,
// onlyImages: false,
// showAsListView: true,
// buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120),
// ),
],
).toShadowContainer(context, borderRadius: 20),
).expanded,
@ -580,10 +580,11 @@ class _UpdateDemoRequestViewState extends State<UpdateDemoRequestView> with Tick
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
_demoFormModel.demoAttachment = [];
// _demoFormModel.id = 3;
for (var item in attachments) {
String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? '';
// String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? '';
//Todo need to pass attachmentType id as well.
_demoFormModel.demoAttachment?.add(DemoAttachments(id: item.id, demoRequestId: _demoFormModel.id ?? 0, attachmentName: fileName));
// _demoFormModel.demoAttachment?.add(DemoAttachments(id: item.id, demoRequestId: _demoFormModel.id ?? 0, attachmentName: fileName));
}
Utils.showLoading(context);
DemoProvider demoProvider = Provider.of<DemoProvider>(context, listen: false);

@ -70,21 +70,21 @@ class LoanEquipmentDetailPage extends StatelessWidget {
),
12.height,
...requesterDetails(context, snapshot.data!),
12.height,
const Divider().defaultStyle(context),
...requestDetails(context, snapshot.data!),
12.height,
const Divider().defaultStyle(context),
...assetDetails(context, snapshot.data!),
12.height,
const Divider().defaultStyle(context),
...installationDetails(context, snapshot.data!),
12.height,
const Divider().defaultStyle(context),
...doctorDetails(context, snapshot.data!),
12.height,
const Divider().defaultStyle(context),
...vendorDetails(context, snapshot.data!),
if (allAttachments.isNotEmpty) ...[
const Divider().defaultStyle(context),
Text(
"Attachments".addTranslation,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []),
],
@ -98,7 +98,7 @@ class LoanEquipmentDetailPage extends StatelessWidget {
List<Widget> requestDetails(BuildContext context, LoanRequestModel loanData) {
return [
Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Request Details", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Loan Type: ${loanData.loanTypeName ?? "-"}'.bodyText(context),
'Loan No: ${loanData.reqCode ?? "-"}'.bodyText(context),
'Loan Period: ${loanData.loanPeriodName ?? "-"}'.bodyText(context),
@ -111,7 +111,7 @@ class LoanEquipmentDetailPage extends StatelessWidget {
List<Widget> vendorDetails(BuildContext context, LoanRequestModel loanData) {
return [
Text("Vendor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Vendor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Name: ${loanData.vendorName ?? "-"}'.bodyText(context),
'Representative Name: ${loanData.vendorRepName ?? "-"}'.bodyText(context),
'Contact: ${loanData.vendorContact ?? "-"}'.bodyText(context),
@ -121,7 +121,7 @@ class LoanEquipmentDetailPage extends StatelessWidget {
List<Widget> assetDetails(BuildContext context, LoanRequestModel loanData) {
return [
Text("Asset Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Asset Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'${context.translation.assetName}: ${loanData.assetName ?? "-"}'.bodyText(context),
'${context.translation.assetNo}: ${loanData.assetNumber ?? "-"}'.bodyText(context),
'${context.translation.serialNumber}: ${loanData.assetSerialNumber ?? "-"}'.bodyText(context),
@ -132,7 +132,7 @@ class LoanEquipmentDetailPage extends StatelessWidget {
List<Widget> installationDetails(BuildContext context, LoanRequestModel loanData) {
return [
Text("Installation & Pullout Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Installation & Pullout Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Installation EDD: ${loanData.installationEDD?.toServiceRequestDetailsFormat ?? "-"}'.bodyText(context),
'Installation Date: ${loanData.installationEDD?.toAssetDetailsFormat ?? "-"}'.bodyText(context),
'Pullout EDD: ${loanData.pulloutEDD?.toServiceRequestDetailsFormat ?? "-"}'.bodyText(context),
@ -142,7 +142,7 @@ class LoanEquipmentDetailPage extends StatelessWidget {
List<Widget> doctorDetails(BuildContext context, LoanRequestModel loanData) {
return [
Text("Doctor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Doctor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Name: ${loanData.doctorName ?? "-"}'.bodyText(context),
'Contact: ${loanData.doctorContact ?? "-"}'.bodyText(context),
'Email: ${loanData.doctorEmail ?? "-"}'.bodyText(context),
@ -151,7 +151,7 @@ class LoanEquipmentDetailPage extends StatelessWidget {
List<Widget> requesterDetails(BuildContext context, LoanRequestModel loanData) {
return [
Text("Requester Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
Text("Requester Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
'Name: ${loanData.requestorUserIdForDisplay ?? "-"}'.bodyText(context),
'Email: ${loanData.requestorUserEmail ?? "-"}'.bodyText(context),
'Contact: ${loanData.requestorUserMobileNumber ?? "-"}'.bodyText(context),

@ -75,6 +75,7 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
context.translation.preventiveMaintenance: 4,
context.translation.task: 6,
"Loan Equipment": 12,
"Demo": 15,
};
if (isEngineer) {

@ -75,6 +75,7 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
}
requestsList.add(Request(12, "Loan Equipment"));
requestsList.add(Request(15, "Demo"));
if (context.userProvider.isAssessor) {
requestsList = [

@ -38,14 +38,7 @@ class RequestItemViewList extends StatelessWidget {
shrinkWrap: true,
itemBuilder: (cxt, index) {
if (isLoading) return const SizedBox().toRequestShimmer(cxt, isLoading);
if (list[index].transactionType == 12) {
return DemoRequestItemView(requestDetails: list[index]);;
// return Container(
// height: 100,
// width: double.infinity,
// color: AppColor.neutral40,
// );
}
switch (list[index].transactionType) {
case 1:
return ServiceRequestItemView(requestDetails: list[index]);

@ -15,6 +15,7 @@ import 'package:test_sa/controllers/notification/firebase_notification_manger.da
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart';
import 'package:test_sa/new_views/pages/land_page/land_page.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
@ -193,10 +194,7 @@ class _SplashPageState extends State<SplashPage> {
child: SizedBox(
width: 36,
height: 36,
child: CircularProgressIndicator(
color: Color(0xff4A8DB7),
strokeWidth: 3,
),
child: CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 3),
)),
SizedBox(
width: MediaQuery.of(context).size.width / 1.1,

@ -16,10 +16,11 @@ import 'package:url_launcher/url_launcher.dart';
class FilesList extends StatelessWidget {
final List<String> images;
final List<String> types;
final EdgeInsets? padding;
final bool showAsListView;
const FilesList({Key? key, this.images = const <String>[], this.padding, this.showAsListView = false}) : super(key: key);
const FilesList({Key? key, this.images = const <String>[], this.types = const <String>[], this.padding, this.showAsListView = false}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -75,7 +76,7 @@ class FilesList extends StatelessWidget {
4.height,
RichText(
text: TextSpan(
text: 'Asset Guide | ',
text: '${types.isEmpty ? "Asset Guide" : types[itemIndex]} | ',
style: AppTextStyles.bodyText.copyWith(color: AppColor.neutral120),
children: <TextSpan>[
TextSpan(

Loading…
Cancel
Save