diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index eed578cf..e6c1f6e5 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -247,6 +247,7 @@ class URLs { static get getYesNoRequestTypeLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=4"; static get getDemoPeriodLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=4101"; + static get getDemoDocumentTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=4104"; static get getClassificationTypeLookup => "$_baseUrl/Lookups/GetLookup?lookupEnum=450"; diff --git a/lib/main.dart b/lib/main.dart index 20701c5c..263657ce 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -119,6 +119,7 @@ import 'controllers/providers/api/gas_refill_comments.dart'; import 'controllers/providers/api/user_provider.dart'; import 'controllers/providers/settings/setting_provider.dart'; import 'dashboard_latest/dashboard_provider.dart'; +import 'modules/demo_module/demo_document_lookup_provider.dart'; import 'modules/internal_audit_module/pages/equipment_internal_audit/update_equipment_internal_audit_page.dart'; import 'modules/internal_audit_module/provider/internal_audit_checklist_provider.dart'; import 'modules/cx_module/survey/survey_provider.dart'; @@ -343,6 +344,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => MedicalGasSupplierProvider()), ChangeNotifierProvider(create: (_) => DemoProvider()), ChangeNotifierProvider(create: (_) => DemoPeriodLookupProvider()), + ChangeNotifierProvider(create: (_) => DemoDocumentLookupProvider()), ], child: GestureDetector( onTap: () { diff --git a/lib/models/generic_attachment_model.dart b/lib/models/generic_attachment_model.dart index c0c2b4cf..dde1d74d 100644 --- a/lib/models/generic_attachment_model.dart +++ b/lib/models/generic_attachment_model.dart @@ -1,12 +1,16 @@ import 'dart:io'; +import 'package:test_sa/models/lookup.dart'; + class GenericAttachmentModel { - GenericAttachmentModel({this.id, this.name,this.originalName,this.createdBy}); + GenericAttachmentModel({this.id, this.name, this.originalName, this.createdBy,this.documentTypeId}); int? id; String? name; - String ?createdBy; + String? createdBy; String? originalName; + Lookup? documentTypeId; + GenericAttachmentModel.fromJson(Map json) { id = json['id']; name = json['name']; @@ -22,4 +26,4 @@ class GenericAttachmentModel { data['originalName'] = originalName; return data; } -} \ No newline at end of file +} diff --git a/lib/modules/demo_module/create_demo_request_page.dart b/lib/modules/demo_module/create_demo_request_page.dart index 69c981e6..79aec114 100644 --- a/lib/modules/demo_module/create_demo_request_page.dart +++ b/lib/modules/demo_module/create_demo_request_page.dart @@ -40,6 +40,7 @@ import 'package:test_sa/providers/work_order/vendor_provider.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import '../../../../../../new_views/common_widgets/default_app_bar.dart'; import 'demo_detail_view_page.dart'; +import 'demo_document_lookup_provider.dart'; import 'demo_form_model.dart'; class CreateDemoRequestPage extends StatefulWidget { @@ -63,6 +64,7 @@ class _CreateDemoRequestPageState extends State with Tick SupplierDetails? supplier; Lookup? demoPeriodLookup; + Lookup? demoDocumentLookup; // List loanTypes = []; @@ -114,13 +116,33 @@ class _CreateDemoRequestPageState extends State with Tick 16.height, ...vendorDetailsSection(), 16.height, + SingleItemDropDownMenu( + context: context, + height: 56.toScreenHeight, + title: "Document Type", + initialValue: demoDocumentLookup, + showShadow: false, + validator: (value) { + if (value == null) return "Mandatory"; + return null; + }, + backgroundColor: AppColor.fieldBgColor(context), + showAsBottomSheet: true, + onSelect: (value) { + demoDocumentLookup = value; + setState(() {}); + }, + ), + 16.height, AttachmentPicker( label: context.translation.attachments, attachment: attachments, - buttonColor: AppColor.black10, + buttonColor: AppColor.black10.withOpacity(demoDocumentLookup != null ? 1 : .4), onlyImages: false, + enabled: demoDocumentLookup != null, + documentType: demoDocumentLookup, showAsListView: true, - buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), + buttonIcon: 'image-plus'.toSvgAsset(color: (context.isDark ? AppColor.primary10 : AppColor.neutral120).withOpacity(demoDocumentLookup != null ? 1 : .4)), onChange: (attachments) { attachments = attachments; setState(() {}); diff --git a/lib/modules/demo_module/demo_document_lookup_provider.dart b/lib/modules/demo_module/demo_document_lookup_provider.dart new file mode 100644 index 00000000..07f3e2f2 --- /dev/null +++ b/lib/modules/demo_module/demo_document_lookup_provider.dart @@ -0,0 +1,33 @@ +import 'dart:convert'; + +import 'package:http/http.dart'; +import 'package:test_sa/providers/loading_list_notifier.dart'; + +import '../../controllers/api_routes/api_manager.dart'; +import '../../controllers/api_routes/urls.dart'; +import '../../models/lookup.dart'; + +class DemoDocumentLookupProvider extends LoadingListNotifier { + @override + Future getData({int? id}) async { + if (loading == true) return -2; + loading = true; + notifyListeners(); + try { + Response response = await ApiManager.instance.get(URLs.getDemoDocumentTypes); + stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + List categoriesListJson = json.decode(response.body)["data"]; + items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); + } + loading = false; + notifyListeners(); + return response.statusCode; + } catch (error) { + loading = false; + stateCode = -1; + notifyListeners(); + return -1; + } + } +} diff --git a/lib/views/widgets/images/multi_image_picker.dart b/lib/views/widgets/images/multi_image_picker.dart index e2973118..4278901f 100644 --- a/lib/views/widgets/images/multi_image_picker.dart +++ b/lib/views/widgets/images/multi_image_picker.dart @@ -9,6 +9,7 @@ import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/generic_attachment_model.dart'; +import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import '../../../new_views/common_widgets/app_dashed_button.dart'; @@ -321,6 +322,7 @@ class AttachmentPicker extends StatefulWidget { final Function(List)? onChange; final bool showAsGrid; final bool showAsListView; + Lookup? documentType; AttachmentPicker( {Key? key, @@ -332,6 +334,7 @@ class AttachmentPicker extends StatefulWidget { this.enabled = true, this.onlyImages = false, this.onChange, + this.documentType, this.showAsGrid = false, this.showAsListView = false, this.buttonColor}) @@ -419,7 +422,7 @@ class _AttachmentPickerState extends State { ); if (result != null) { for (var path in result.paths) { - widget.attachment.add(GenericAttachmentModel(id: 0, name: File(path!).path)); + widget.attachment.add(GenericAttachmentModel(id: 0, name: File(path!).path, documentTypeId: widget.documentType)); } if (widget.onChange != null) { widget.onChange!(widget.attachment); @@ -466,7 +469,7 @@ class _AttachmentPickerState extends State { if (pickedFile != null) { File fileImage = File(pickedFile.path); - widget.attachment.add(GenericAttachmentModel(id: 0, name: fileImage.path)); + widget.attachment.add(GenericAttachmentModel(id: 0, name: fileImage.path, documentTypeId: widget.documentType)); if (widget.onChange != null) { widget.onChange!(widget.attachment); } @@ -633,7 +636,7 @@ class _AttachmentPickerState extends State { if (pickedFile != null) { File fileImage = File(pickedFile.path); - widget.attachment.add(GenericAttachmentModel(id: 0, name: fileImage.path)); + widget.attachment.add(GenericAttachmentModel(id: 0, name: fileImage.path, documentTypeId: widget.documentType)); if (widget.onChange != null) { widget.onChange!(widget.attachment); }