import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/generic_attachment_model.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/new_models/building.dart'; import 'package:test_sa/models/new_models/floor.dart'; import 'package:test_sa/models/new_models/mapped_sites.dart'; import 'package:test_sa/models/new_models/room_model.dart'; import 'package:test_sa/models/new_models/site.dart'; import 'package:test_sa/models/new_models/task_request/task_request_model.dart'; import 'package:test_sa/models/new_models/task_request/task_type_model.dart'; import 'package:test_sa/models/service_request/pending_service_request_model.dart'; import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/loan_module/models/loan_form_model.dart'; import 'package:test_sa/modules/loan_module/models/medical_department_model.dart'; import 'package:test_sa/modules/loan_module/provider/loan_period_provider.dart'; import 'package:test_sa/modules/loan_module/provider/loan_provider.dart'; import 'package:test_sa/modules/loan_module/provider/medical_department_provider.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/department_provider.dart'; import 'package:test_sa/providers/gas_request_providers/site_provider.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/task_request_provider/task_job_provider.dart'; import 'package:test_sa/providers/task_request_provider/task_request_provider.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/equipment/asset_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import '../../../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../models/new_models/department.dart'; class CreateLoanRequestView extends StatefulWidget { static const String id = "/create-loan"; const CreateLoanRequestView({Key? key}) : super(key: key); @override _CreateLoanRequestViewState createState() => _CreateLoanRequestViewState(); } class _CreateLoanRequestViewState extends State with TickerProviderStateMixin { final List attachments = []; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); Asset? device; TaskType? selectedType; final LoanFormModel _loanFormModel = LoanFormModel(); bool isEng = true; TextEditingController commentController = TextEditingController(); @override void initState() { // TODO: implement initState super.initState(); Provider.of(context, listen: false).reset(); } @override Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar(title: 'Loan Request'.addTranslation), body: Form( key: _formKey, child: Column( children: [ SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // if(isEng)...[ // scanAssetButton(), // 16.height, // ], contactInfoSection(), 16.height, itemDetailsSection(), 16.height, vendorDetailsSection(), 23.height, AttachmentPicker( label: context.translation.attachments, attachment: attachments, buttonColor: AppColor.black10, onlyImages: false, buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), //verify this if not required delete this .. onChange: (attachments) { attachments = attachments; setState(() {}); }, ), ], ).toShadowContainer(context).paddingAll(16), ).expanded, FooterActionButton.footerContainer( context: context, child: AppFilledButton( buttonColor: AppColor.primary10, label: context.translation.submitRequest, onPressed: _submit, // buttonColor: AppColor.primary10, ), ), ], ), ), ); } Widget contactInfoSection() { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ context.translation.contactInfo.heading6(context).custom(color: AppColor.black10), 8.height, AppTextFormField( labelText: "Name", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, hintText: "Doc Name", labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.text, showShadow: false, onSaved: (value) { _loanFormModel.docName = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, AppTextFormField( labelText: "Number", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, hintText: "Doc Number", labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.phone, showShadow: false, onSaved: (value) { _loanFormModel.docNumber = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, AppTextFormField( labelText: "Email", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, hintText: "Doc Email", labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.emailAddress, showShadow: false, onSaved: (value) { _loanFormModel.docEmail = value; }, style: Theme.of(context).textTheme.titleMedium, ), ], ); } Widget itemDetailsSection() { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ 'Item Details'.addTranslation.heading6(context).custom(color: AppColor.black10), 8.height, SingleItemDropDownMenu( context: context, title: context.translation.site, initialValue: _loanFormModel.site, showShadow: false, backgroundColor: AppColor.fieldBgColor(context), showAsBottomSheet: true, onSelect: (value) { _loanFormModel.site = value; setState(() {}); }, ), 8.height, //TODO need to check where to get all departments.. // MultipleItemDropDownMenu( // context: context, // showAsBottomSheet: true, // backgroundColor: AppColor.neutral100, // showShadow: false, // showCancel: true, // requestById: context.userProvider.user?.clientId, // title: "Please specify departments and relations", // initialValue: departments, // onSelect: (value) { // departments = value ?? []; // trafRequest?.trafDepartments = departments.map((element) => Departments(id: 0, trafId: 0, departmentId: element.id!.toInt())).toList(); // }, // ), SingleItemDropDownMenu( context: context, title: context.translation.department, showShadow: false, showAsBottomSheet: true, initialValue: _loanFormModel.department, backgroundColor: AppColor.fieldBgColor(context), onSelect: (value) { _loanFormModel.department = value; setState(() {}); }, ), 8.height, AppTextFormField( labelText: "Item Description", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.text, showShadow: false, onSaved: (value) { _loanFormModel.itemDescription = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, AppTextFormField( labelText: "Request Description", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.text, showShadow: false, onSaved: (value) { _loanFormModel.requestDescription = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, AppTextFormField( labelText: "Model", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.text, showShadow: false, onSaved: (value) { _loanFormModel.model = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, AppTextFormField( labelText: "Manufacturer", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.text, showShadow: false, onSaved: (value) { _loanFormModel.manufacturer = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, SingleItemDropDownMenu( context: context, height: 56.toScreenHeight, title: 'Loan Period'.addTranslation, showShadow: false, backgroundColor: AppColor.fieldBgColor(context), showAsBottomSheet: true, initialValue: _loanFormModel.loanProvided, onSelect: (status) { if (status != null) { _loanFormModel.loanProvided = status; setState(() {}); } }, ), 8.height, ], ); } Widget vendorDetailsSection() { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ 'Vendor Details'.addTranslation.heading6(context).custom(color: AppColor.black10), 8.height, AppTextFormField( labelText: "Name", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, hintText: "Vendor Name", labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.text, showShadow: false, onSaved: (value) { _loanFormModel.vendorName = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, AppTextFormField( labelText: "Number", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, hintText: "Vendor Number", labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.phone, showShadow: false, onSaved: (value) { _loanFormModel.vendorNumber = value; }, style: Theme.of(context).textTheme.titleMedium, ), 8.height, AppTextFormField( labelText: "Email", backgroundColor: AppColor.fieldBgColor(context), textAlign: TextAlign.center, hintText: "Vendor Email", labelStyle: AppTextStyles.textFieldLabelStyle, hintStyle: AppTextStyles.textFieldLabelStyle, textInputType: TextInputType.emailAddress, showShadow: false, onSaved: (value) { _loanFormModel.vendorEmail = value; }, style: Theme.of(context).textTheme.titleMedium, ), ], ); } Widget scanAssetButton() { return AssetPicker( device: device, showLoading: false, borderColor: AppColor.black20, onPick: (asset) async { device = asset; setState(() {}); }, ); } Future _submit() async { if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); _loanFormModel?.loanAttachment = []; for (var item in attachments) { String fileName = ServiceRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? ''; _loanFormModel?.loanAttachment?.add(LoanAttachments(id: item.id, name: fileName)); } LoanProvider loanProvider = Provider.of(context, listen: false); // await loanProvider.addLoanRequest(context: context, task: _loanFormModel!); } } }