Implemented settings, new scan, enhanced UI/UX
This commit is contained in:
@ -1,32 +1,40 @@
|
||||
import 'dart:collection';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:hl_lieferservice/dto/note_get_response.dart';
|
||||
import 'package:hl_lieferservice/feature/delivery/detail/exceptions.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 'package:http_parser/http_parser.dart';
|
||||
|
||||
import '../../../../dto/basic_response.dart';
|
||||
import '../../../../dto/note_add_response.dart';
|
||||
import '../../../../dto/note_template_response.dart';
|
||||
import '../../../../model/delivery.dart';
|
||||
import '../../../../util.dart';
|
||||
import '../../../authentication/exceptions.dart';
|
||||
|
||||
class NoteService extends ErpFrameService {
|
||||
NoteService({required super.config});
|
||||
|
||||
Future<void> 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});
|
||||
var response = await http.post(
|
||||
urlBuilder("_web_deleteNote"),
|
||||
headers: getSessionOrThrow(),
|
||||
body: {"id": noteId.toString()},
|
||||
);
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body!);
|
||||
if (response.statusCode == HttpStatus.unauthorized) {
|
||||
throw UserUnauthorized();
|
||||
}
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body);
|
||||
debugPrint("NOTE DELETE: ${response.body}");
|
||||
BasicResponseDTO responseDto = BasicResponseDTO.fromJson(responseJson);
|
||||
|
||||
if (responseDto.succeeded == true) {
|
||||
@ -40,25 +48,22 @@ class NoteService extends ErpFrameService {
|
||||
debugPrint(st.toString());
|
||||
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> 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},
|
||||
var response = await http.post(
|
||||
urlBuilder("_web_editNote"),
|
||||
headers: getSessionOrThrow(),
|
||||
body: {"id": newNote.id.toString(), "note": newNote.content},
|
||||
);
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body!);
|
||||
if (response.statusCode == HttpStatus.unauthorized) {
|
||||
throw UserUnauthorized();
|
||||
}
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body);
|
||||
BasicResponseDTO responseDto = BasicResponseDTO.fromJson(responseJson);
|
||||
|
||||
if (responseDto.succeeded == true) {
|
||||
@ -72,22 +77,22 @@ class NoteService extends ErpFrameService {
|
||||
debugPrint(st.toString());
|
||||
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<NoteTemplate>> getNoteTemplates() async {
|
||||
df.LoginSession? session;
|
||||
|
||||
try {
|
||||
session = await getSession();
|
||||
df.DocuFrameMacroResponse response = await df.Macro(
|
||||
config: dfConfig,
|
||||
session: session,
|
||||
).execute("_web_getNoteTemplates");
|
||||
var response = await http.post(
|
||||
urlBuilder("_web_getNoteTemplates"),
|
||||
headers: getSessionOrThrow(),
|
||||
body: {},
|
||||
);
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body!);
|
||||
if (response.statusCode == HttpStatus.unauthorized) {
|
||||
throw UserUnauthorized();
|
||||
}
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body);
|
||||
NoteTemplateResponseDTO responseDto = NoteTemplateResponseDTO.fromJson(
|
||||
responseJson,
|
||||
);
|
||||
@ -103,23 +108,22 @@ class NoteService extends ErpFrameService {
|
||||
debugPrint(st.toString());
|
||||
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Note>> 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);
|
||||
var response = await http.post(
|
||||
urlBuilder("_web_getNotes"),
|
||||
headers: getSessionOrThrow(),
|
||||
body: {"delivery_id": deliveryId},
|
||||
);
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body!);
|
||||
if (response.statusCode == HttpStatus.unauthorized) {
|
||||
throw UserUnauthorized();
|
||||
}
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body);
|
||||
debugPrint(responseJson.toString());
|
||||
NoteGetResponseDTO responseDto = NoteGetResponseDTO.fromJson(
|
||||
responseJson,
|
||||
@ -138,27 +142,22 @@ class NoteService extends ErpFrameService {
|
||||
debugPrint(st.toString());
|
||||
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
|
||||
Future<Note> 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},
|
||||
var response = await http.post(
|
||||
urlBuilder("_web_addNote"),
|
||||
headers: getSessionOrThrow(),
|
||||
body: {"receipt_id": deliveryId.toString(), "note": note},
|
||||
);
|
||||
|
||||
debugPrint(deliveryId.toString());
|
||||
if (response.statusCode == HttpStatus.unauthorized) {
|
||||
throw UserUnauthorized();
|
||||
}
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body!);
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body);
|
||||
debugPrint(responseJson.toString());
|
||||
NoteAddResponseDTO responseDto = NoteAddResponseDTO.fromJson(
|
||||
responseJson,
|
||||
@ -172,8 +171,6 @@ class NoteService extends ErpFrameService {
|
||||
}
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
|
||||
@ -183,63 +180,79 @@ class NoteService extends ErpFrameService {
|
||||
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,
|
||||
var config = getConfig();
|
||||
var basePath = "${config.backendUrl}/v1/uploadFile";
|
||||
var response = await http.get(
|
||||
Uri.parse(basePath),
|
||||
headers: getSessionOrThrow(),
|
||||
);
|
||||
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);
|
||||
if (response.statusCode == HttpStatus.unauthorized) {
|
||||
throw UserUnauthorized();
|
||||
}
|
||||
|
||||
// Commit file upload
|
||||
df.CommitFileUploadResponse commitResponse = await uploadHandler
|
||||
.commitUpload(uploadIdResponse.uploadId);
|
||||
debugPrint(commitResponse.body);
|
||||
Map<String, dynamic> jsonResponse = jsonDecode(response.body);
|
||||
debugPrint("GET UPLOADID : ${response.body}");
|
||||
|
||||
return commitResponse.objectId;
|
||||
if (!jsonResponse.containsKey("data")) {
|
||||
debugPrint("No data structure in uploadFile request");
|
||||
debugPrint("RAW RESPONSE: ${response.body}");
|
||||
throw NoteImageAddException();
|
||||
}
|
||||
|
||||
Map<String, dynamic> data = jsonResponse["data"];
|
||||
|
||||
if (!data.containsKey("uploadId")) {
|
||||
debugPrint("No data.uploadId structure in uploadFile request");
|
||||
debugPrint("RAW RESPONSE: ${response.body}");
|
||||
throw NoteImageAddException();
|
||||
}
|
||||
|
||||
String uploadId = data["uploadId"];
|
||||
http.MultipartRequest request =
|
||||
http.MultipartRequest("POST", Uri.parse("$basePath/$uploadId"));
|
||||
|
||||
HashMap<String, String> header = HashMap();
|
||||
header["Content-Type"] = "multipart/form-data";
|
||||
header.addAll(getSessionOrThrow());
|
||||
|
||||
request.headers.addAll(header);
|
||||
request.files.add(http.MultipartFile.fromBytes("file", bytes,
|
||||
filename: filename,
|
||||
contentType: MediaType.parse(mimeType ?? "application/octet-stream")));
|
||||
|
||||
http.Response fileUploadResponse = await http.Response.fromStream(await request.send());
|
||||
Map<String, dynamic> fileUploadResponseJson = jsonDecode(fileUploadResponse.body);
|
||||
|
||||
debugPrint("UPLOAD IMAGE RESPONSE: ${fileUploadResponse.body}");
|
||||
|
||||
if (fileUploadResponseJson["status"]["internalStatus"] != "0") {
|
||||
debugPrint("Failed to upload image");
|
||||
debugPrint("RAW: ${fileUploadResponseJson.toString()}");
|
||||
throw NoteImageAddException();
|
||||
}
|
||||
|
||||
var fileCommitResponse = await http.patch(Uri.parse("$basePath/$uploadId"), headers: getSessionOrThrow());
|
||||
debugPrint("FILE COMMIT BODY: ${fileCommitResponse.body}");
|
||||
var fileCommitResponseJson = jsonDecode(fileCommitResponse.body);
|
||||
|
||||
return fileCommitResponseJson["data"]["~ObjectID"];
|
||||
} catch (e, st) {
|
||||
debugPrint("An error occured:");
|
||||
debugPrint("$e");
|
||||
debugPrint(st.toString());
|
||||
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Future<Uint8List>>> downloadImages(List<String> 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,
|
||||
Uri.parse("${config.backendUrl}$url"),
|
||||
headers: getSessionOrThrow(),
|
||||
)).bodyBytes;
|
||||
}).toList();
|
||||
} catch (e, st) {
|
||||
@ -248,22 +261,22 @@ class NoteService extends ErpFrameService {
|
||||
debugPrint(st.toString());
|
||||
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> 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});
|
||||
var response = await http.post(
|
||||
urlBuilder("_web_removeImage"),
|
||||
headers: getSessionOrThrow(),
|
||||
body: {"oid": oid},
|
||||
);
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body!);
|
||||
if (response.statusCode == HttpStatus.unauthorized) {
|
||||
throw UserUnauthorized();
|
||||
}
|
||||
|
||||
Map<String, dynamic> responseJson = jsonDecode(response.body);
|
||||
debugPrint(oid);
|
||||
debugPrint(responseJson.toString());
|
||||
|
||||
@ -280,8 +293,6 @@ class NoteService extends ErpFrameService {
|
||||
debugPrint(st.toString());
|
||||
|
||||
rethrow;
|
||||
} finally {
|
||||
await logout(session);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user