finishCommit
This commit is contained in:
@@ -1,6 +1,11 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../models/response_output.dart';
|
||||
|
||||
import '../helper/constants.dart';
|
||||
|
||||
@@ -14,74 +19,193 @@ class HomeController extends GetxController {
|
||||
final currentView = MainView.dashboard.obs;
|
||||
|
||||
//--------------Settings View---------------------------
|
||||
final askiUserController = TextEditingController().obs;
|
||||
final askiPasswordController = TextEditingController().obs;
|
||||
final loginUrlController = TextEditingController().obs;
|
||||
final userWebMethodesController = TextEditingController().obs;
|
||||
final passwordWebMethodesController = TextEditingController().obs;
|
||||
|
||||
final powerUrlController = TextEditingController().obs;
|
||||
|
||||
final pvTraunDeviceController = TextEditingController().obs;
|
||||
final pvTraunDeviceMeterIdPVController = TextEditingController().obs;
|
||||
final pvTraunDeviceMeterIdImportController = TextEditingController().obs;
|
||||
|
||||
final pvSarleinsbachDeviceController = TextEditingController().obs;
|
||||
final pvSarleinsbachDeviceMeterIdPV01Controller = TextEditingController().obs;
|
||||
final pvSarleinsbachDeviceMeterIdPV02Controller = TextEditingController().obs;
|
||||
final pvSarleinsbachDeviceMeterIdPV03Controller = TextEditingController().obs;
|
||||
final pvSarleinsbachDeviceMeterIdImportController = TextEditingController().obs;
|
||||
|
||||
final pvLannachDeviceController = TextEditingController().obs;
|
||||
final pvLannachDeviceMeterIdPVController = TextEditingController().obs;
|
||||
final pvLannachDeviceMeterIdImportController = TextEditingController().obs;
|
||||
|
||||
void saveSettings() {
|
||||
String askiUser = askiUserController.value.text;
|
||||
String askiPassword = askiPasswordController.value.text;
|
||||
String loginUrl = loginUrlController.value.text;
|
||||
String powerUrl = powerUrlController.value.text;
|
||||
//traun
|
||||
String pvTraunDevice = pvTraunDeviceController.value.text;
|
||||
int pvTraunDeviceMeterIdPV = int.parse(pvTraunDeviceMeterIdPVController.value.text);
|
||||
int pvTraunDeviceMeterIdImport = int.parse(pvTraunDeviceMeterIdImportController.value.text);
|
||||
//sarleinsbach
|
||||
String pvSarleinsbachDevice = pvSarleinsbachDeviceController.value.text;
|
||||
int pvSarleinsbachDeviceMeterIdPV01 = int.parse(pvSarleinsbachDeviceMeterIdPV01Controller.value.text);
|
||||
int pvSarleinsbachDeviceMeterIdPV02 = int.parse(pvSarleinsbachDeviceMeterIdPV02Controller.value.text);
|
||||
int pvSarleinsbachDeviceMeterIdPV03 = int.parse(pvSarleinsbachDeviceMeterIdPV03Controller.value.text);
|
||||
int pvSarleinsbachDeviceMeterIdImport = int.parse(pvSarleinsbachDeviceMeterIdImportController.value.text);
|
||||
//lannach
|
||||
String pvLannachDevice = pvLannachDeviceController.value.text;
|
||||
int pvLannachDeviceMeterIdPV = int.parse(pvLannachDeviceMeterIdPVController.value.text);
|
||||
int pvLannachDeviceMeterIdImport = int.parse(pvLannachDeviceMeterIdImportController.value.text);
|
||||
String wbUser = userWebMethodesController.value.text;
|
||||
String wbPassword = passwordWebMethodesController.value.text;
|
||||
String wbPowerUrl = powerUrlController.value.text;
|
||||
|
||||
|
||||
boxSettings.write('askiUser', askiUser);
|
||||
boxSettings.write('askiPassword', askiPassword);
|
||||
boxSettings.write('loginUrl', loginUrl);
|
||||
boxSettings.write('powerUrl', powerUrl);
|
||||
boxSettings.write('pvTraunDevice', pvTraunDevice);
|
||||
boxSettings.write('pvTraunDeviceMeterIdPV', pvTraunDeviceMeterIdPV);
|
||||
boxSettings.write('pvTraunDeviceMeterIdImport', pvTraunDeviceMeterIdImport);
|
||||
boxSettings.write('pvSarleinsbachDevice', pvSarleinsbachDevice);
|
||||
boxSettings.write('pvSarleinsbachDeviceMeterIdPV01', pvSarleinsbachDeviceMeterIdPV01);
|
||||
boxSettings.write('pvSarleinsbachDeviceMeterIdPV02', pvSarleinsbachDeviceMeterIdPV02);
|
||||
boxSettings.write('pvSarleinsbachDeviceMeterIdPV03', pvSarleinsbachDeviceMeterIdPV03);
|
||||
boxSettings.write('pvSarleinsbachDeviceMeterIdImport', pvSarleinsbachDeviceMeterIdImport);
|
||||
boxSettings.write('pvLannachDevice', pvLannachDevice);
|
||||
boxSettings.write('pvLannachDeviceMeterIdPV', pvLannachDeviceMeterIdPV);
|
||||
boxSettings.write('pvLannachDeviceMeterIdImport', pvLannachDeviceMeterIdImport);
|
||||
boxSettings.write('wbUser', wbUser);
|
||||
boxSettings.write('wbPassword', wbPassword);
|
||||
boxSettings.write('wbPowerUrl', wbPowerUrl);
|
||||
|
||||
kDisplaySnackBarGreen("Settings saved successfully!");
|
||||
|
||||
print('Einstellungen gespeichert:');
|
||||
print('ASKI User: $askiUser');
|
||||
print('ASKI Password: $askiPassword');
|
||||
print('Login URL: $loginUrl');
|
||||
print('Power URL: $powerUrl');
|
||||
print('Admin User: $wbUser');
|
||||
print('Admin Password: $wbPassword');
|
||||
print('Web Methodes Power URL: $wbPowerUrl');
|
||||
}
|
||||
//------------------------------------------------------
|
||||
// http get request to fetch data from the provided URL
|
||||
//------------------------------------------------------
|
||||
|
||||
final dateFromToIsoController = TextEditingController().obs;
|
||||
final dateToIsoController = TextEditingController().obs;
|
||||
final inputSwitchBranches = RxnString('TraunPV');
|
||||
final responseOutputTraunPV = ResponseOutput().obs;
|
||||
final responseOutputTraunImport = ResponseOutput().obs;
|
||||
final responseOutputSarleinsbachPV = ResponseOutput().obs;
|
||||
final responseOutputSarleinsbachImport = ResponseOutput().obs;
|
||||
final responseOutputLannachPV = ResponseOutput().obs;
|
||||
final responseOutputLannachImport = ResponseOutput().obs;
|
||||
|
||||
/// Map: Branch → (PV Observable, Import Observable)
|
||||
Map<String, Map<String, dynamic>> get _branchConfig => {
|
||||
'TraunPV': {
|
||||
'pv': responseOutputTraunPV,
|
||||
'import': responseOutputTraunImport,
|
||||
'pvSuffix': 'TraunPV',
|
||||
'importSuffix': 'TraunImport',
|
||||
},
|
||||
'TraunImport': {
|
||||
'pv': responseOutputTraunPV,
|
||||
'import': responseOutputTraunImport,
|
||||
'pvSuffix': 'TraunPV',
|
||||
'importSuffix': 'TraunImport',
|
||||
},
|
||||
'SarleinsbachPV': {
|
||||
'pv': responseOutputSarleinsbachPV,
|
||||
'import': responseOutputSarleinsbachImport,
|
||||
'pvSuffix': 'SarleinsbachPV',
|
||||
'importSuffix': 'SarleinsbachImport',
|
||||
},
|
||||
'SarleinsbachImport': {
|
||||
'pv': responseOutputSarleinsbachPV,
|
||||
'import': responseOutputSarleinsbachImport,
|
||||
'pvSuffix': 'SarleinsbachPV',
|
||||
'importSuffix': 'SarleinsbachImport',
|
||||
},
|
||||
'LannachPV': {
|
||||
'pv': responseOutputLannachPV,
|
||||
'import': responseOutputLannachImport,
|
||||
'pvSuffix': 'LannachPV',
|
||||
'importSuffix': 'LannachImport',
|
||||
},
|
||||
'LannachImport': {
|
||||
'pv': responseOutputLannachPV,
|
||||
'import': responseOutputLannachImport,
|
||||
'pvSuffix': 'LannachPV',
|
||||
'importSuffix': 'LannachImport',
|
||||
},
|
||||
};
|
||||
|
||||
void fetchData() async {
|
||||
final inputFromIso = dateFromToIsoController.value.text;
|
||||
final inputToIso = dateToIsoController.value.text;
|
||||
final branch = inputSwitchBranches.value;
|
||||
|
||||
if (branch == null || branch.isEmpty) {
|
||||
kDisplaySnackBarRed('Ungültiger Standort ausgewählt.');
|
||||
return;
|
||||
}
|
||||
|
||||
final baseUrl = _getBaseUrl();
|
||||
if (baseUrl.isEmpty) {
|
||||
kDisplaySnackBarRed('Bitte zuerst die Server-URL eintragen.');
|
||||
return;
|
||||
}
|
||||
|
||||
final config = _branchConfig[branch];
|
||||
if (config == null) {
|
||||
kDisplaySnackBarRed('Unbekannte Branche: $branch');
|
||||
return;
|
||||
}
|
||||
|
||||
final credentials =
|
||||
'${userWebMethodesController.value.text}:${passwordWebMethodesController.value.text}';
|
||||
final basicAuth = 'Basic ${base64Encode(utf8.encode(credentials))}';
|
||||
final baseUri = Uri.parse(baseUrl);
|
||||
|
||||
try {
|
||||
// Fetch PV Daten
|
||||
await _fetchAndStore(baseUri, inputFromIso, inputToIso,
|
||||
config['pvSuffix'], config['pv'], basicAuth);
|
||||
|
||||
// Fetch Import Daten
|
||||
await _fetchAndStore(baseUri, inputFromIso, inputToIso,
|
||||
config['importSuffix'], config['import'], basicAuth);
|
||||
} catch (e) {
|
||||
print('Error: $e');
|
||||
kDisplaySnackBarRed('Netzwerkfehler: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Hilfsfunktion - reduziert Codeverdoppelung
|
||||
Future<void> _fetchAndStore(
|
||||
Uri baseUri,
|
||||
String inputFromIso,
|
||||
String inputToIso,
|
||||
String switchBranch,
|
||||
dynamic responseObservable,
|
||||
String basicAuth,
|
||||
) async {
|
||||
final uri = baseUri.replace(
|
||||
queryParameters: {
|
||||
...baseUri.queryParameters,
|
||||
'InputFromIso': inputFromIso,
|
||||
'InputToIso': inputToIso,
|
||||
'InputSwitchBranches': switchBranch,
|
||||
},
|
||||
);
|
||||
|
||||
try {
|
||||
final response = await http.get(
|
||||
uri,
|
||||
headers: {'Authorization': basicAuth, 'Accept': 'application/json'},
|
||||
);
|
||||
|
||||
final statusGroup = response.statusCode ~/ 100;
|
||||
|
||||
if (statusGroup == 2) {
|
||||
print('✓ $switchBranch erfolgreich geladen');
|
||||
responseObservable.value = ResponseOutput.fromJson(jsonDecode(response.body));
|
||||
} else if (statusGroup == 4) {
|
||||
kDisplaySnackBarRed('Fehler 4xx: ${response.statusCode}');
|
||||
} else if (statusGroup == 5) {
|
||||
kDisplaySnackBarRed('Fehler 5xx: ${response.statusCode}');
|
||||
} else {
|
||||
kDisplaySnackBarRed('Fehler: ${response.statusCode}');
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error fetching $switchBranch: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
/// Wählt die richtige Base-URL:
|
||||
/// Web: localhost:3000 (Reverse Proxy)
|
||||
/// Desktop: Direkt von Settings
|
||||
String _getBaseUrl() {
|
||||
final settingsUrl = powerUrlController.value.text.trim();
|
||||
|
||||
// Auf Web: verwende Reverse Proxy auf localhost:3000
|
||||
if (kIsWeb) {
|
||||
return 'http://localhost:3000/invoke/IFN_ASKI_Service.flows/getAskiData?';
|
||||
}
|
||||
|
||||
// Auf Desktop (Windows, Linux, macOS): direkt von Settings
|
||||
return settingsUrl;
|
||||
}
|
||||
|
||||
void changeView(MainView view) {
|
||||
currentView.value = view;
|
||||
if (currentView.value == MainView.dashboard) {
|
||||
inputSwitchBranches.value = 'TraunPV';
|
||||
} else if (currentView.value == MainView.traun) {
|
||||
inputSwitchBranches.value = 'TraunPV';
|
||||
} else if (currentView.value == MainView.sarleinsbach) {
|
||||
inputSwitchBranches.value = 'SarleinsbachPV';
|
||||
} else if (currentView.value == MainView.lannach) {
|
||||
inputSwitchBranches.value = 'LannachPV';
|
||||
}
|
||||
if (currentView.value != MainView.dashboard) {
|
||||
fetchData(); // Fetch data whenever the view changes
|
||||
}
|
||||
}
|
||||
|
||||
void toggleDrawer() {
|
||||
@@ -100,49 +224,41 @@ class HomeController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
_readStorageData();
|
||||
}
|
||||
|
||||
void _readStorageData() {
|
||||
bool hasAskiUser = boxSettings.hasData('askiUser');
|
||||
if (hasAskiUser) {
|
||||
askiUserController.value.text = boxSettings.read('askiUser');
|
||||
bool hasWbUser = boxSettings.hasData('wbUser');
|
||||
if (hasWbUser) {
|
||||
userWebMethodesController.value.text = boxSettings.read('wbUser');
|
||||
}
|
||||
bool hasAskiPassword = boxSettings.hasData('askiPassword');
|
||||
if (hasAskiPassword) {
|
||||
askiPasswordController.value.text = boxSettings.read('askiPassword');
|
||||
bool hasWbPassword = boxSettings.hasData('wbPassword');
|
||||
if (hasWbPassword) {
|
||||
passwordWebMethodesController.value.text = boxSettings.read('wbPassword');
|
||||
}
|
||||
bool hasLoginUrl = boxSettings.hasData('loginUrl');
|
||||
if (hasLoginUrl) {
|
||||
loginUrlController.value.text = boxSettings.read('loginUrl');
|
||||
}
|
||||
bool hasPowerUrl = boxSettings.hasData('powerUrl');
|
||||
if (hasPowerUrl) {
|
||||
powerUrlController.value.text = boxSettings.read('powerUrl');
|
||||
bool hasWbPowerUrl = boxSettings.hasData('wbPowerUrl');
|
||||
if (hasWbPowerUrl) {
|
||||
powerUrlController.value.text = boxSettings.read('wbPowerUrl');
|
||||
}
|
||||
//fromDateTimeIso and toDateTimeIso
|
||||
dateFromToIsoController.value.text = DateTime(
|
||||
DateTime.now().year,
|
||||
DateTime.now().month,
|
||||
DateTime.now().day,
|
||||
).toIso8601String();
|
||||
dateToIsoController.value.text = DateTime.now().toIso8601String();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
askiUserController.close();
|
||||
askiPasswordController.close();
|
||||
loginUrlController.close();
|
||||
userWebMethodesController.close();
|
||||
powerUrlController.close();
|
||||
pvTraunDeviceController.close();
|
||||
pvTraunDeviceMeterIdPVController.close();
|
||||
pvTraunDeviceMeterIdImportController.close();
|
||||
pvSarleinsbachDeviceController.close();
|
||||
pvSarleinsbachDeviceMeterIdPV01Controller.close();
|
||||
pvSarleinsbachDeviceMeterIdPV02Controller.close();
|
||||
pvSarleinsbachDeviceMeterIdPV03Controller.close();
|
||||
pvSarleinsbachDeviceMeterIdImportController.close();
|
||||
pvLannachDeviceController.close();
|
||||
pvLannachDeviceMeterIdPVController.close();
|
||||
pvLannachDeviceMeterIdImportController.close();
|
||||
passwordWebMethodesController.close();
|
||||
dateFromToIsoController.close();
|
||||
dateToIsoController.close();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user