import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'package:hl_lieferservice/dto/note_get_response.dart'; import 'package:hl_lieferservice/services/erpframe.dart'; import 'package:docuframe/docuframe.dart' as df; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart' as http; import '../../../../dto/basic_response.dart'; import '../../../../dto/note_add_response.dart'; import '../../../../dto/note_template_response.dart'; import '../../../../model/delivery.dart'; class NoteService extends ErpFrameService { NoteService({required super.config}); Future deleteNote(int noteId) async { df.LoginSession? session; try { session = await getSession(); df.DocuFrameMacroResponse response = await df.Macro( config: dfConfig, session: session, ).execute("_web_deleteNote", parameter: {"id": noteId}); Map responseJson = jsonDecode(response.body!); BasicResponseDTO responseDto = BasicResponseDTO.fromJson(responseJson); if (responseDto.succeeded == true) { return; } else { throw responseDto.message; } } catch (e, st) { debugPrint("ERROR WHILE DELETING NOTE $noteId"); debugPrint("$e"); debugPrint(st.toString()); rethrow; } finally { await logout(session); } } Future editNote(Note newNote) async { df.LoginSession? session; try { session = await getSession(); df.DocuFrameMacroResponse response = await df.Macro( config: dfConfig, session: session, ).execute( "_web_editNote", parameter: {"id": newNote.id, "note": newNote.content}, ); Map responseJson = jsonDecode(response.body!); BasicResponseDTO responseDto = BasicResponseDTO.fromJson(responseJson); if (responseDto.succeeded == true) { return; } else { throw responseDto.message; } } catch (e, st) { debugPrint("ERROR WHILE EDITING NOTE ${newNote.id}"); debugPrint("$e"); debugPrint(st.toString()); rethrow; } finally { await logout(session); } } Future> getNoteTemplates() async { df.LoginSession? session; try { session = await getSession(); df.DocuFrameMacroResponse response = await df.Macro( config: dfConfig, session: session, ).execute("_web_getNoteTemplates"); Map responseJson = jsonDecode(response.body!); NoteTemplateResponseDTO responseDto = NoteTemplateResponseDTO.fromJson( responseJson, ); if (responseDto.succeeded == true) { return responseDto.notes.map(NoteTemplate.fromDTO).toList(); } else { throw responseDto.message; } } catch (e, st) { debugPrint("ERROR WHILE GETTING NOTE TEMPLATES"); debugPrint("$e"); debugPrint(st.toString()); rethrow; } finally { await logout(session); } } Future> getNotes(String deliveryId) async { df.LoginSession? session; try { session = await getSession(); df.DocuFrameMacroResponse response = await df.Macro( config: dfConfig, session: session, ).execute("_web_getNotes", parameter: {"delivery_id": deliveryId}); debugPrint(deliveryId); Map responseJson = jsonDecode(response.body!); debugPrint(responseJson.toString()); NoteGetResponseDTO responseDto = NoteGetResponseDTO.fromJson( responseJson, ); if (responseDto.succeeded == true) { return responseDto.notes .map((noteDto) => Note.fromDto(noteDto)) .toList(); } else { throw responseDto.message; } } catch (e, st) { debugPrint("ERROR WHILE GETTING NOTES"); debugPrint("$e"); debugPrint(st.toString()); rethrow; } finally { await logout(session); } } Future addNote(String note, int deliveryId) async { df.LoginSession? session; try { session = await getSession(); df.DocuFrameMacroResponse response = await df.Macro( config: dfConfig, session: session, ).execute( "_web_addNote", parameter: {"receipt_id": deliveryId, "note": note}, ); debugPrint(deliveryId.toString()); Map responseJson = jsonDecode(response.body!); debugPrint(responseJson.toString()); NoteAddResponseDTO responseDto = NoteAddResponseDTO.fromJson( responseJson, ); if (responseDto.succeeded == true) { return Note.fromDto(responseDto.note!); } else { debugPrint("ERROR: ${responseDto.message}"); throw responseDto.message; } } catch (e) { rethrow; } finally { await logout(session); } } Future uploadImage( String deliveryId, String filename, Uint8List bytes, String? mimeType, ) async { df.LoginSession? session; try { session = await getSession(); // First get UPLOAD ID df.UploadFile uploadHandler = df.UploadFile( config: dfConfig, session: session, ); df.GetUploadIdResponse uploadIdResponse = await uploadHandler.getUploadId(); // Upload binary data to DOCUframe debugPrint(filename); df.FileInformationResponse response = await uploadHandler.uploadFile( uploadIdResponse.uploadId, bytes, filename, mimeType ?? "image/jpeg", ); debugPrint(response.body); // Commit file upload df.CommitFileUploadResponse commitResponse = await uploadHandler .commitUpload(uploadIdResponse.uploadId); debugPrint(commitResponse.body); return commitResponse.objectId; } catch (e, st) { debugPrint("An error occured:"); debugPrint("$e"); debugPrint(st.toString()); rethrow; } finally { await logout(session); } } Future>> downloadImages(List urls) async { df.LoginSession? session; debugPrint(urls.toString()); try { session = await getSession(); final header = { "sessionId": session.getAuthorizationHeader().$2, "appKey": config.appNames[0], }; return urls.map((url) async { return (await http.get( Uri.parse("${config.host}$url"), headers: header, )).bodyBytes; }).toList(); } catch (e, st) { debugPrint("An error occured:"); debugPrint("$e"); debugPrint(st.toString()); rethrow; } finally { await logout(session); } } Future removeImage(String oid) async { df.LoginSession? session; try { session = await getSession(); df.DocuFrameMacroResponse response = await df.Macro( config: dfConfig, session: session, ).execute("_web_removeImage", parameter: {"oid": oid}); Map responseJson = jsonDecode(response.body!); debugPrint(oid); debugPrint(responseJson.toString()); BasicResponseDTO responseDto = BasicResponseDTO.fromJson(responseJson); if (responseDto.succeeded == true) { return; } else { debugPrint("ERROR: ${responseDto.message}"); throw responseDto.message; } } on df.DocuFrameException catch (e, st) { debugPrint("${e.errorMessage}"); debugPrint(st.toString()); rethrow; } finally { await logout(session); } } }