Files

534 lines
21 KiB
Dart

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../providers/token_manager.dart';
import '../../theme/app_style.dart';
import '../../widgets/app_bar/appbar_image.dart';
import '../../widgets/app_bar/appbar_title.dart';
import '../../widgets/app_bar/custom_app_bar.dart';
import '../../widgets/custom_button.dart';
import '../../widgets/custom_text_form_field.dart';
import 'SystemParameterApiService.dart';
class SysParameter extends StatefulWidget {
final int sysparameter=1;
// const SysParameter({Key? key, required this.sysparameter}) : super(key: key);
@override
_SysParameterState createState() => _SysParameterState();
}
class _SysParameterState extends State<SysParameter> {
TextEditingController schedulerTimerController = TextEditingController();
TextEditingController leaseTaxCodeController = TextEditingController();
TextEditingController vesselConfirmationController = TextEditingController();
TextEditingController rowToDisplayController = TextEditingController();
TextEditingController linkToDisplayController = TextEditingController();
TextEditingController rowToAddController = TextEditingController();
TextEditingController lovRowToDisplayController = TextEditingController();
TextEditingController lovLinkToDisplayController = TextEditingController();
TextEditingController oidServerNameController = TextEditingController();
TextEditingController oidBaseController = TextEditingController();
TextEditingController oidAdminUserController = TextEditingController();
TextEditingController oidServerPortController = TextEditingController();
TextEditingController userDefaultGroupController = TextEditingController();
TextEditingController defaultDepartmentController = TextEditingController();
TextEditingController defaultPositionController = TextEditingController();
TextEditingController singleChargeController = TextEditingController();
TextEditingController firstDayOfWeekController = TextEditingController();
TextEditingController hourPerShiftController = TextEditingController();
TextEditingController cnBillingFrequencyController = TextEditingController();
TextEditingController billingDepartmentCodeController = TextEditingController();
TextEditingController basePriceListController = TextEditingController();
TextEditingController nonContainerServiceController = TextEditingController();
TextEditingController ediMaeSchedulerController = TextEditingController();
TextEditingController ediSchedulerController = TextEditingController();
TextEditingController lastController = TextEditingController();
TextEditingController companynameController = TextEditingController();
bool isRegistrationAllow=false;
Map<String,dynamic> formData = {};
var logoname;
var logopath;
SystemParameterApiService apiService = SystemParameterApiService();
String? uploadimageurl;
Uint8List? _imageBytes; // Uint8List to store the image data
String? _imageFileName;
late Map<String,dynamic> sysparameter;
@override
void initState() {
_loadParameters();
}
Future<void> _loadParameters() async {
final token = await TokenManager.getToken();
try {
final projectData = await apiService.getsystemparameters(token!,widget.sysparameter);
setState(() {
sysparameter = projectData;
lastController.text = "('SYSADMIN','ITSUPPORTMSC')";
schedulerTimerController.text = sysparameter['schedulerTime'].toString()??'';
isRegistrationAllow = sysparameter['regitrationAllowed']??false;
leaseTaxCodeController.text = sysparameter['leaseTaxCode'].toString()??'';
vesselConfirmationController.text = sysparameter['vesselConfProcessLimit'].toString()??'';
rowToDisplayController.text = sysparameter['rowToDisplay'].toString()??'';
linkToDisplayController.text = sysparameter['linkToDisplay'].toString()??'';
rowToAddController.text = sysparameter['rowToAdd'].toString()??'';
lovRowToDisplayController.text = sysparameter['lovRowToDisplay'].toString()??'';
lovLinkToDisplayController.text = sysparameter['lovLinkToDisplay'].toString()??'';
oidServerNameController.text = sysparameter['oidserverName'].toString()??'';
oidBaseController.text = sysparameter['oidBase'].toString()??'';
oidAdminUserController.text = sysparameter['oidAdminUser'].toString()??'';
oidServerPortController.text = sysparameter['oidServerPort'].toString()??'';
userDefaultGroupController.text = sysparameter['userDefaultGroup'].toString()??'';
defaultDepartmentController.text = sysparameter['defaultDepartment'].toString()??'';
defaultPositionController.text = sysparameter['defaultPosition'].toString()??'';
singleChargeController.text = sysparameter['singleCharge'].toString()??'';
firstDayOfWeekController.text = sysparameter['firstDayOftheWeek'].toString()??'';
hourPerShiftController.text = sysparameter['hourPerShift'].toString()??'';
cnBillingFrequencyController.text = sysparameter['cnBillingFrequency'].toString()??'';
billingDepartmentCodeController.text = sysparameter['billingDepartmentCode'].toString()??'';
basePriceListController.text = sysparameter['basePriceList'].toString()??'';
nonContainerServiceController.text = sysparameter['nonContainerServiceOrder'].toString()??'';
ediMaeSchedulerController.text = sysparameter['ediMaeSchedulerONOFF'].toString()??'';
ediSchedulerController.text = sysparameter['ediSchedulerONOFF'].toString()??'';
lastController.text = "('SYSADMIN','ITSUPPORTMSC')"??'';
companynameController.text = sysparameter['company_Display_Name'].toString()??'';
print(sysparameter['schedulerTime']);
});
} catch (e) {
print('Failed to load projects: $e');
}
}
Future<void> _uploadImageFile() async {
final imagePicker = ImagePicker();
try {
final pickedImage =
await imagePicker.pickImage(source: ImageSource.gallery);
if (pickedImage != null) {
final imageBytes = await pickedImage.readAsBytes();
setState(() {
_imageBytes = imageBytes;
_imageFileName = pickedImage.name; // Store the file name
});
}
_submitImage();
} catch (e) {
print(e);
}
}
Future<void> _submitImage() async {
if (_imageBytes == null) {
// Show an error message if no image is selected
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Please select an image.'),
actions: [
TextButton(
child: const Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
return;
}
if (_imageFileName == null) {
// Handle the case where _imageFileName is null (no file name provided)
print('File name is missing.');
return;
}
try {
final token = await TokenManager.getToken();
Map<String,dynamic> fileuploadeddata = await apiService.createFile(_imageBytes!, _imageFileName!, token!);
logoname = fileuploadeddata['image_name'];
logopath = fileuploadeddata['image_path'];
} catch (e) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to upload image: $e'),
actions: [
TextButton(
child: const Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
height: getVerticalSize(49),
leadingWidth: 40,
leading: AppbarImage(
height: getSize(24),
width: getSize(24),
svgPath: ImageConstant.imgArrowleftBlueGray900,
margin: getMargin(left: 16, top: 12, bottom: 13),
onTap: () {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "System Parameter")),
body: Material(child:SingleChildScrollView( // Wrap the form in a SingleChildScrollView
scrollDirection: Axis.vertical, // Allow vertical scrolling
child:Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildFieldWithTooltip(
fieldName: 'Scheduler Timer',
controller: schedulerTimerController,
tooltip: 'Tooltip for Scheduler Timer',
),
_buildFieldWithTooltip(
fieldName: 'Lease Tax Code',
controller: leaseTaxCodeController,
tooltip: 'Tooltip for Lease Tax Code',
),
_buildFieldWithTooltip(
fieldName: 'Vessel Confirmation Process Limit',
controller: vesselConfirmationController,
tooltip: 'Tooltip for Vessel Confirmation Process Limit',
),
_buildFieldWithTooltip(
fieldName: 'Row To Display',
controller: rowToDisplayController,
tooltip: 'Tooltip for Row To Display',
),
_buildFieldWithTooltip(
fieldName: 'Link To Display',
controller: linkToDisplayController,
tooltip: 'Tooltip for Link To Display',
),
_buildFieldWithTooltip(
fieldName: 'Row To Add',
controller: rowToAddController,
tooltip: 'Tooltip for Row To Add',
),
_buildFieldWithTooltip(
fieldName: 'LOV Row To Display',
controller: lovRowToDisplayController,
tooltip: 'Tooltip for LOV Row To Display',
),
_buildFieldWithTooltip(
fieldName: 'LOV Link To Display',
controller: lovLinkToDisplayController,
tooltip: 'Tooltip for LOV Link To Display',
),
_buildFieldWithTooltip(
fieldName: 'OID Server Name',
controller: oidServerNameController,
tooltip: 'Tooltip for OID Server Name',
),
_buildFieldWithTooltip(
fieldName: 'OID Base',
controller: oidBaseController,
tooltip: 'Tooltip for OID Base',
),
_buildFieldWithTooltip(
fieldName: 'OID Admin User',
controller: oidAdminUserController,
tooltip: 'Tooltip for OID Admin User',
),
_buildFieldWithTooltip(
fieldName: 'OID Server Port',
controller: oidServerPortController,
tooltip: 'Tooltip for OID Server Port',
),
_buildFieldWithTooltip(
fieldName: 'User Default Group',
controller: userDefaultGroupController,
tooltip: 'Tooltip for User Default Group',
),
_buildFieldWithTooltip(
fieldName: 'Default Department',
controller: defaultDepartmentController,
tooltip: 'Tooltip for Default Department',
),
_buildFieldWithTooltip(
fieldName: 'Default Position',
controller: defaultPositionController,
tooltip: 'Tooltip for Default Position',
),
_buildFieldWithTooltip(
fieldName: 'Single Charge',
controller: singleChargeController,
tooltip: 'Tooltip for Single Charge',
),
_buildFieldWithTooltip(
fieldName: 'First Day of The Week',
controller: firstDayOfWeekController,
tooltip: 'Tooltip for First Day of The Week',
),
_buildFieldWithTooltip(
fieldName: 'Hour per Shift',
controller: hourPerShiftController,
tooltip: 'Tooltip for Hour per Shift',
),
_buildFieldWithTooltip(
fieldName: 'CN Billing Frequency',
controller: cnBillingFrequencyController,
tooltip: 'Tooltip for CN Billing Frequency',
),
_buildFieldWithTooltip(
fieldName: 'Billing Department Code',
controller: billingDepartmentCodeController,
tooltip: 'Tooltip for Billing Department Code',
),
_buildFieldWithTooltip(
fieldName: 'Base Price List',
controller: basePriceListController,
tooltip: 'Tooltip for Base Price List',
),
_buildFieldWithTooltip(
fieldName: 'Non-Container Service Order Auto-Approval Department Code',
controller: nonContainerServiceController,
tooltip: 'Tooltip for Non-Container Service Order Auto-Approval Department Code',
),
_buildFieldWithTooltip(
fieldName: 'EDI MAE Scheduler ON/OFF',
controller: ediMaeSchedulerController,
tooltip: 'Tooltip for EDI MAE Scheduler ON/OFF',
),
_buildFieldWithTooltip(
fieldName: 'EDI Scheduler ON/OFF',
controller: ediSchedulerController,
tooltip: 'Tooltip for EDI Scheduler ON/OFF',
),
_buildFieldWithTooltip(
fieldName: 'Company Name',
controller: companynameController,
tooltip: 'Company Name',
),
Text("Is Registration Allowed?",
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800),
Row(
children: [
Radio(
value: true,
groupValue: isRegistrationAllow,
onChanged: (value) {
setState(() {
isRegistrationAllow = value as bool;
});
},
),
Text("Yes",
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800),
Radio(
value: false,
groupValue: isRegistrationAllow,
onChanged: (value) {
setState(() {
isRegistrationAllow = value as bool;
});
},
),
Text("No",
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800),
],
),
ElevatedButton(
onPressed: () {
_uploadImageFile();
},
style: ButtonStyle(
backgroundColor: _imageBytes==null?MaterialStateProperty.all<Color>(Colors.red):MaterialStateProperty.all<Color>(Colors.green), // Change to the desired color
),
child: _imageBytes == null
? Text("Pick a Company Logo",
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800)
: Text("Company Logo uploaded Successful",
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800),
),
Tooltip(
message: 'Allow customer code for MSC taulia CSV generation',
child: Column(
children: [
Text("i",
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800),
CustomTextFormField(
focusNode: FocusNode(),
controller:lastController,
margin: getMargin(top: 7),
textInputType:
TextInputType.text),
],
)
// TextFormField(
// controller: lastController,
// decoration: const InputDecoration(
// labelText: 'i',
// ),
// ),
),
CustomButton(
height: getVerticalSize(50),
text: "Save",
margin: getMargin(top: 24, bottom: 5),
onTap: () async {
formData['regitrationAllowed'] = isRegistrationAllow;
formData['schedulerTime']=schedulerTimerController.text;
formData['leaseTaxCode']=leaseTaxCodeController.text;
formData['vesselConfProcessLimit']=vesselConfirmationController.text;
formData['rowToDisplay']=rowToDisplayController.text;
formData['linkToDisplay']=linkToDisplayController.text;
formData['rowToAdd']=rowToAddController.text;
formData['lovRowToDisplay']=lovRowToDisplayController.text;
formData['lovLinkToDisplay']=lovLinkToDisplayController.text;
formData['oidserverName']=oidServerNameController.text;
formData['oidBase']=oidBaseController.text;
formData['oidAdminUser']=oidAdminUserController.text;
formData['oidServerPort']=oidServerPortController.text;
formData['userDefaultGroup']=userDefaultGroupController.text;
formData['defaultDepartment']=defaultDepartmentController.text;
formData['defaultPosition']=defaultPositionController.text;
formData['singleCharge']=singleChargeController.text;
formData['firstDayOftheWeek']=firstDayOfWeekController.text;
formData['hourPerShift']=hourPerShiftController.text;
formData['cnBillingFrequency']=cnBillingFrequencyController.text;
formData['billingDepartmentCode']=billingDepartmentCodeController.text;
formData['basePriceList']=basePriceListController.text;
formData['nonContainerServiceOrder']=nonContainerServiceController.text;
formData['ediMaeSchedulerONOFF']=ediMaeSchedulerController.text;
formData['ediSchedulerONOFF']=ediSchedulerController.text;
//formData['']=lastController.text;
formData['upload_Logo_name']=logoname;
formData['upload_Logo_path']=logopath;
formData['company_Display_Name']=companynameController.text;
final token = await TokenManager.getToken();
try {
print("token is : $token");
print(formData);
if (formData != null) {
// Create new project
apiService.updateParameter(token!, widget.sysparameter, formData);
}
Navigator.pop(context);
// Add navigation or any other logic after successful create/update
} catch (e) {
print('error is $e');
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text(
'Failed to ${widget.sysparameter == null ? 'create' : 'update'} project: $e'),
actions: [
TextButton(
child: const Text('OK'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
},
),
],
),
),
)));
}
Widget _buildFieldWithTooltip({
required String fieldName,
required TextEditingController controller,
required String tooltip,
}) {
return Tooltip(
message: tooltip,
child:
Padding(
padding: getPadding(top: 18),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("$fieldName",
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800),
CustomTextFormField(
focusNode: FocusNode(),
controller:controller,
hintText: "Enter Your $fieldName",
margin: getMargin(top: 7),
textInputType:
TextInputType.text)
])),
// TextFormField(
// controller: controller,
// decoration: InputDecoration(
// labelText: fieldName,
// ),
// ),
);
}
}