diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 22b09b84..3b12ba4c 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -34,6 +34,7 @@ android:value="2" /> + diff --git a/assets/images/home/process-upload.zip b/assets/images/home/process-upload.zip new file mode 100644 index 00000000..06a3396f Binary files /dev/null and b/assets/images/home/process-upload.zip differ diff --git a/assets/images/home/upload-files.zip b/assets/images/home/upload-files.zip new file mode 100644 index 00000000..5e604c69 Binary files /dev/null and b/assets/images/home/upload-files.zip differ diff --git a/lib/app/common/constant.dart b/lib/app/common/constant.dart index 20ea6064..790a5209 100644 --- a/lib/app/common/constant.dart +++ b/lib/app/common/constant.dart @@ -17,7 +17,7 @@ // 'https://9bf0-2001-448a-4049-68c4-c80c-e641-b21d-cb5c.ap.ngrok.io/api/v1/'; const baseUrl = - 'https://number-41-bagooska-the-terribly-tired-tapir-3.fleetimee.repl.co/api/v1/'; + 'https://number-41-bagooska-the-terribly-tired-tapir.fleetimee.repl.co/api/v1/'; // List debitur field string const field = @@ -25,4 +25,4 @@ const field = // Insight debitur query string const joinTable = - 'join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=syaratLain&join=analisaAgunan&join=ijinLegitimasi&join=asuransi'; + 'join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=syaratLain&join=analisaAgunan&join=ijinLegitimasi&join=asuransi&join=upload'; diff --git a/lib/app/data/provider/media/save_mediaprovider.dart b/lib/app/data/provider/media/save_mediaprovider.dart new file mode 100644 index 00000000..993e014d --- /dev/null +++ b/lib/app/data/provider/media/save_mediaprovider.dart @@ -0,0 +1,74 @@ +// 🎯 Dart imports: + +// 🐦 Flutter imports: + +// 📦 Package imports: +import 'dart:convert'; + +import 'package:akm/app/common/constant.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:http/http.dart' as http; + +// 🌎 Project imports: +import 'package:akm/app/models/debitur_model/insight_debitur.model.dart'; + +class MediaProvider { + final httpClient = http.Client(); + + Future> fetchMedia(int id) async { + try { + final response = await httpClient.get( + Uri.parse('${baseUrl}debiturs/$id/uploads/'), + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }, + ); + debugPrint(response.body); + + if (response.statusCode == 200) { + var data = jsonDecode(response.body); + debugPrint(data.toString()); + return (data as List).map((e) => Upload.fromJson(e)).toList(); + } else { + throw Exception('Failed to load data'); + } + } catch (e) { + return Future.error(e); + } + } + + Future saveMedia(int id, body) async { + try { + final response = http.MultipartRequest( + 'POST', + Uri.parse('${baseUrl}debiturs/$id/uploads/'), + ) + ..headers.addAll( + { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + ) + ..files.add(await http.MultipartFile.fromPath('file', body['file'])); + + response.fields.addAll( + Map.from(body), + ); + + var res = await response.send(); + + final resBody = await res.stream.bytesToString(); + + debugPrint(resBody); + + if (res.statusCode == 201) { + return Upload.fromJson(jsonDecode(resBody)); + } else { + throw Exception('Failed to load data'); + } + } catch (e) { + return Future.error(e); + } + } +} diff --git a/lib/app/models/debitur_model/insight_debitur.model.dart b/lib/app/models/debitur_model/insight_debitur.model.dart index e218973c..3d4ecaeb 100644 --- a/lib/app/models/debitur_model/insight_debitur.model.dart +++ b/lib/app/models/debitur_model/insight_debitur.model.dart @@ -58,6 +58,7 @@ class DebiturInsight { this.syaratLain, this.asuransi, this.analisaAgunan, + this.upload, }); int? id; @@ -109,6 +110,7 @@ class DebiturInsight { List? agunan; List? syaratLain; AnalisaAgunan? analisaAgunan; + List? upload; factory DebiturInsight.fromJson(Map json) => DebiturInsight( id: json["id"], @@ -188,6 +190,9 @@ class DebiturInsight { analisaAgunan: json["analisaAgunan"] == null ? null : AnalisaAgunan.fromJson(json["analisaAgunan"]), + upload: json["upload"] == null + ? null + : List.from(json["upload"].map((x) => Upload.fromJson(x))), ); Map toJson() => { @@ -249,6 +254,51 @@ class DebiturInsight { ? null : List.from(syaratLain!.map((x) => x.toJson())), "analisaAgunan": analisaAgunan == null ? null : analisaAgunan?.toJson(), + "upload": upload == null + ? null + : List.from(upload!.map((x) => x.toJson())), + }; +} + +class Upload { + Upload({ + this.id, + this.keterangan, + this.file, + this.createdDate, + this.updatedDate, + this.debiturId, + }); + + int? id; + String? keterangan; + String? file; + DateTime? createdDate; + DateTime? updatedDate; + int? debiturId; + + factory Upload.fromJson(Map json) => Upload( + id: json["id"] ?? null, + keterangan: json["keterangan"] ?? null, + file: json["file"] ?? null, + createdDate: json["createdDate"] == null + ? null + : DateTime.parse(json["createdDate"]), + updatedDate: json["updatedDate"] == null + ? null + : DateTime.parse(json["updatedDate"]), + debiturId: json["debiturId"] ?? null, + ); + + Map toJson() => { + "id": id ?? null, + "keterangan": keterangan ?? null, + "file": file ?? null, + "createdDate": + createdDate == null ? null : createdDate?.toIso8601String(), + "updatedDate": + updatedDate == null ? null : updatedDate?.toIso8601String(), + "debiturId": debiturId ?? null, }; } diff --git a/lib/app/modules/asuransi/views/asuransi_view.dart b/lib/app/modules/asuransi/views/asuransi_view.dart index 1e5c482a..5647ee90 100644 --- a/lib/app/modules/asuransi/views/asuransi_view.dart +++ b/lib/app/modules/asuransi/views/asuransi_view.dart @@ -155,7 +155,6 @@ class AsuransiView extends GetView { keyboardType: TextInputType.number, validator: FormBuilderValidators.compose([ FormBuilderValidators.required(), - FormBuilderValidators.numeric(), ]), autovalidateMode: AutovalidateMode.onUserInteraction, decoration: const InputDecoration( diff --git a/lib/app/modules/gallery_image/bindings/gallery_image_binding.dart b/lib/app/modules/gallery_image/bindings/gallery_image_binding.dart new file mode 100644 index 00000000..32849bc2 --- /dev/null +++ b/lib/app/modules/gallery_image/bindings/gallery_image_binding.dart @@ -0,0 +1,12 @@ +import 'package:get/get.dart'; + +import '../controllers/gallery_image_controller.dart'; + +class GalleryImageBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut( + () => GalleryImageController(), + ); + } +} diff --git a/lib/app/modules/gallery_image/controllers/gallery_image_controller.dart b/lib/app/modules/gallery_image/controllers/gallery_image_controller.dart new file mode 100644 index 00000000..39f9642d --- /dev/null +++ b/lib/app/modules/gallery_image/controllers/gallery_image_controller.dart @@ -0,0 +1,78 @@ +import 'dart:io'; + +import 'package:akm/app/data/provider/media/save_mediaprovider.dart'; +import 'package:akm/app/models/debitur_model/insight_debitur.model.dart'; +import 'package:dio/dio.dart'; +import 'package:flutter/material.dart'; +import 'package:gallery_saver/gallery_saver.dart'; +import 'package:get/get.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:share_plus/share_plus.dart'; + +class GalleryImageController extends GetxController { + @override + void onInit() { + getImages(debiturId.id); + super.onInit(); + } + + var imageList = List.empty(growable: true).obs; + + final isImageLoading = false.obs; + + final isImageListView = false.obs; + + final debiturId = Get.arguments; + + void getImages(int id) { + try { + isImageLoading(true); + MediaProvider().fetchMedia(id).then((resp) { + isImageLoading(false); + imageList.addAll(resp); + }, onError: (e) { + isImageLoading(false); + Get.snackbar('Error', e.toString()); + }); + } catch (e) { + isImageLoading(false); + Get.snackbar('Error', e.toString()); + } + } + + void shareNetworkImage(String url, String filename) async { + Directory tempDir = await getTemporaryDirectory(); + + final path = tempDir.path; + + await Dio().download(url, '$path/$filename.jpg'); + + Share.shareFiles(['$path/$filename.jpg']); + } + + void downloadNetworkImage( + String url, String filename, String albumname) async { + Directory tempDir = await getTemporaryDirectory(); + + final path = tempDir.path; + + await Dio().download( + url, + '$path/$filename.jpg', + ); + + GallerySaver.saveImage('$path/$filename.jpg', albumName: albumname); + + Get.snackbar( + 'Success', + 'Image saved', + snackPosition: SnackPosition.BOTTOM, + colorText: Colors.white, + backgroundColor: Colors.green, + icon: const Icon( + Icons.check_circle, + color: Colors.white, + ), + ); + } +} diff --git a/lib/app/modules/gallery_image/views/gallery_image_view.dart b/lib/app/modules/gallery_image/views/gallery_image_view.dart new file mode 100644 index 00000000..ac0b45cd --- /dev/null +++ b/lib/app/modules/gallery_image/views/gallery_image_view.dart @@ -0,0 +1,273 @@ +import 'package:akm/app/routes/app_pages.dart'; +import 'package:fancy_shimmer_image/fancy_shimmer_image.dart'; +import 'package:flutter/material.dart'; + +import 'package:get/get.dart'; +import 'package:getwidget/getwidget.dart'; +import 'package:intl/intl.dart'; +import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; +import 'package:photo_view/photo_view.dart'; +import 'package:photo_view/photo_view_gallery.dart'; +import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; + +import '../controllers/gallery_image_controller.dart'; + +class GalleryImageView extends GetView { + GalleryImageView({Key? key}) : super(key: key); + + final data = Get.arguments; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Gallery: ${data.peminjam1}'), + centerTitle: true, + actions: [ + Obx(() => PopupMenuButton( + icon: controller.isImageListView.value + ? const Icon( + // gridview icon + Icons.list, + ) + : const Icon( + // listview icon + Icons.grid_view, + ), + itemBuilder: (_) { + return [ + PopupMenuItem( + child: TextButton( + onPressed: () { + Get.back(); + controller.isImageListView.toggle(); + // Get.toNamed(Routes.GALLERY_IMAGE, arguments: data); + }, + child: controller.isImageListView.value + ? const Text('Grid view') + : const Text('List view'), + ), + ), + ]; + }, + )) + ], + ), + body: Obx(() { + if (controller.isImageLoading.value) { + return const Center( + child: CircularProgressIndicator(), + ); + } else { + return controller.isImageListView.value + ? ListView.builder( + itemCount: controller.imageList.length, + itemBuilder: (context, index) { + return GestureDetector( + onTap: () { + // showMaterialModalBottomSheet( + // context: context, + // builder: (context) => PhotoView( + // imageProvider: NetworkImage( + // controller.imageList[index].file!, + // ), + // ), + // ); + }, + child: GFListTile( + avatar: GFAvatar( + backgroundImage: NetworkImage( + controller.imageList[index].file!, + ), + shape: GFAvatarShape.square, + backgroundColor: Colors.transparent, + ), + titleText: controller.imageList[index].keterangan, + subTitleText: DateFormat('dd MMMM yyyy') + .format(controller.imageList[index].createdDate!), + icon: Row( + children: [ + GFButton( + onPressed: () { + controller.shareNetworkImage( + controller.imageList[index].file!, + controller.imageList[index].keterangan!, + ); + }, + text: 'Share', + color: GFColors.INFO, + type: GFButtonType.solid, + size: GFSize.LARGE, + shape: GFButtonShape.pills, + ), + const SizedBox( + width: 5, + ), + GFButton( + onPressed: () async { + try { + controller.downloadNetworkImage( + controller.imageList[index].file!, + controller.imageList[index].keterangan!, + 'AKM-${data.peminjam1}', + ); + } on Exception catch (error) { + Get.snackbar('Error', error.toString()); + } + }, + text: 'Download', + color: GFColors.SUCCESS, + type: GFButtonType.solid, + size: GFSize.LARGE, + shape: GFButtonShape.pills, + ), + ], + ), + ), + ); + }, + ) + : GridView.custom( + gridDelegate: SliverQuiltedGridDelegate( + crossAxisCount: 4, + mainAxisSpacing: 4, + crossAxisSpacing: 4, + repeatPattern: QuiltedGridRepeatPattern.inverted, + pattern: [ + const QuiltedGridTile(2, 2), + const QuiltedGridTile(1, 1), + const QuiltedGridTile(1, 1), + const QuiltedGridTile(1, 2), + ], + ), + childrenDelegate: SliverChildBuilderDelegate( + (context, index) { + return GestureDetector( + onTap: () { + showMaterialModalBottomSheet( + backgroundColor: Colors.transparent, + context: context, + builder: (context) => PhotoViewGallery.builder( + backgroundDecoration: const BoxDecoration( + color: Colors.black, + ), + allowImplicitScrolling: true, + enableRotation: true, + loadingBuilder: (context, event) => const Center( + child: CircularProgressIndicator( + color: Colors.red, + ), + ), + pageController: PageController( + initialPage: index, + ), + scrollPhysics: const BouncingScrollPhysics(), + itemCount: controller.imageList.length, + onPageChanged: (index) { + controller.imageList[index].id; + }, + builder: (context, index) { + return PhotoViewGalleryPageOptions( + imageProvider: NetworkImage( + controller.imageList[index].file!), + heroAttributes: PhotoViewHeroAttributes( + tag: controller.imageList[index].id + .toString(), + ), + ); + }, + // loadingBuilder: (context, event) => Container( + // color: Colors.grey[200], + // child: Center( + // child: SizedBox( + // width: 20.0, + // height: 20.0, + // child: CircularProgressIndicator( + // value: event == null + // ? 0 + // : event.cumulativeBytesLoaded / + // event.expectedTotalBytes!, + // ), + // ), + // ), + // ), + ), + ); + }, + child: FancyShimmerImage( + boxFit: BoxFit.cover, + imageUrl: controller.imageList[index].file!, + shimmerBaseColor: Colors.grey[300]!, + shimmerHighlightColor: Colors.grey[100]!, + ), + ); + }, + childCount: controller.imageList.length, + ), + ); + } + }), + floatingActionButton: FloatingActionButton( + onPressed: () { + Get.toNamed(Routes.MEDIA, arguments: data); + }, + child: const Icon(Icons.add), + ), + ); + } +} + +// GridView.builder( +// itemCount: controller.imageList.length, +// gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( +// crossAxisCount: 2, +// ), +// itemBuilder: (context, index) { +// return GestureDetector( +// onTap: () { +// showMaterialModalBottomSheet( +// context: context, +// builder: (context) => PhotoViewGallery.builder( +// pageController: PageController( +// initialPage: index, +// ), +// scrollPhysics: const BouncingScrollPhysics(), +// itemCount: controller.imageList.length, +// onPageChanged: (index) { +// controller.imageList[index].id; +// }, +// builder: (context, index) { +// return PhotoViewGalleryPageOptions( +// imageProvider: NetworkImage( +// controller.imageList[index].file!), +// heroAttributes: PhotoViewHeroAttributes( +// tag: +// controller.imageList[index].id.toString(), +// ), +// ); +// }, +// loadingBuilder: (context, event) => Center( +// child: SizedBox( +// width: 20.0, +// height: 20.0, +// child: CircularProgressIndicator( +// value: event == null +// ? 0 +// : event.cumulativeBytesLoaded / +// event.expectedTotalBytes!, +// ), +// ), +// ), +// ), +// ); +// }, +// child: Container( +// margin: const EdgeInsets.all(5), +// child: FancyShimmerImage( +// boxFit: BoxFit.cover, +// imageUrl: controller.imageList[index].file!, +// ), +// ), +// ); +// }, +// ); \ No newline at end of file diff --git a/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart b/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart index ec093ab8..4fdef77b 100644 --- a/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart +++ b/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart @@ -75,18 +75,19 @@ class IjinLegitimasiView extends GetView { // inherits the delay & duration from move, ), FormBuilderTextField( - name: 'jenisIjinLegitimasi', - validator: FormBuilderValidators.required(), - autovalidateMode: AutovalidateMode.onUserInteraction, - decoration: const InputDecoration( - prefixIcon: Icon( - FontAwesomeIcons.solidFileLines, - ), - labelText: 'Jenis Ijin', - border: OutlineInputBorder(), - hintText: 'Surat Keterangan Usaha', + name: 'jenisIjinLegitimasi', + validator: FormBuilderValidators.required(), + autovalidateMode: AutovalidateMode.onUserInteraction, + decoration: const InputDecoration( + prefixIcon: Icon( + FontAwesomeIcons.solidFileLines, ), - controller: controller.jenisIjinLegitimasi), + labelText: 'Jenis Ijin', + border: OutlineInputBorder(), + hintText: 'Surat Keterangan Usaha', + ), + controller: controller.jenisIjinLegitimasi, + ), const SizedBox( height: 20.0, ), diff --git a/lib/app/modules/insight_debitur/views/insight_debitur_view.dart b/lib/app/modules/insight_debitur/views/insight_debitur_view.dart index 4363b474..3da46ca7 100644 --- a/lib/app/modules/insight_debitur/views/insight_debitur_view.dart +++ b/lib/app/modules/insight_debitur/views/insight_debitur_view.dart @@ -59,7 +59,9 @@ class InsightDebiturView extends GetView { body: CustomScrollView( slivers: [ SliverAppBar( - iconTheme: const IconThemeData(color: primaryColor), + iconTheme: const IconThemeData( + color: primaryColor, + ), backgroundColor: Colors.transparent, bottom: PreferredSize( preferredSize: const Size.fromHeight(0), @@ -206,6 +208,17 @@ class InsightDebiturView extends GetView { }, icon: const Icon(FontAwesomeIcons.pencil), ), + IconButton( + onPressed: () { + Get.toNamed(Routes.GALLERY_IMAGE, + arguments: controller.insightDebitur.value); + }, + icon: const Icon( + FontAwesomeIcons.photoFilm, + ), + enableFeedback: true, + color: primaryColor, + ), IconButton( color: primaryColor, enableFeedback: true, diff --git a/lib/app/modules/media/bindings/media_binding.dart b/lib/app/modules/media/bindings/media_binding.dart new file mode 100644 index 00000000..46df7bf7 --- /dev/null +++ b/lib/app/modules/media/bindings/media_binding.dart @@ -0,0 +1,12 @@ +import 'package:get/get.dart'; + +import '../controllers/media_controller.dart'; + +class MediaBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut( + () => MediaController(), + ); + } +} diff --git a/lib/app/modules/media/controllers/media_controller.dart b/lib/app/modules/media/controllers/media_controller.dart new file mode 100644 index 00000000..23f9edf7 --- /dev/null +++ b/lib/app/modules/media/controllers/media_controller.dart @@ -0,0 +1,73 @@ +import 'package:akm/app/data/provider/media/save_mediaprovider.dart'; +import 'package:akm/app/modules/gallery_image/controllers/gallery_image_controller.dart'; +import 'package:akm/app/modules/insight_debitur/controllers/insight_debitur_controller.dart'; +import 'package:akm/app/widget/upload_screen.dart'; +import 'package:awesome_dialog/awesome_dialog.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:get/get.dart'; + +class MediaController extends GetxController { + var keterangan = TextEditingController(); + + final debiturController = Get.put(InsightDebiturController()); + final galleryController = Get.put(GalleryImageController()); + + final formKey = GlobalKey(); + + final isMediaProcessing = false.obs; + + void saveMedia(id) { + final body = { + 'keterangan': keterangan.text, + 'file': formKey.currentState?.fields['file']?.value[0].path, + }; + + try { + isMediaProcessing(true); + Get.dialog( + const UploadScreen(), + barrierDismissible: false, + ); + MediaProvider().saveMedia(id, body).then((resp) { + isMediaProcessing(false); + clearForm(); + galleryController.imageList.clear(); + galleryController.getImages(id); + Get.back(); + debiturController.fetchOneDebitur(id); + Get.snackbar( + 'Success', + 'File berhasil disimpan', + backgroundColor: Colors.green, + colorText: Colors.white, + ); + }, onError: (e) { + isMediaProcessing(false); + AwesomeDialog( + context: Get.context!, + dialogType: DialogType.error, + animType: AnimType.bottomSlide, + title: 'Error', + desc: e.toString(), + btnOkOnPress: () {}, + ).show(); + }); + } catch (e) { + isMediaProcessing(false); + AwesomeDialog( + context: Get.context!, + dialogType: DialogType.error, + animType: AnimType.bottomSlide, + title: 'Error', + desc: e.toString(), + btnOkOnPress: () {}, + ).show(); + } + } + + void clearForm() { + formKey.currentState?.fields['file']?.reset(); + keterangan.clear(); + } +} diff --git a/lib/app/modules/media/views/media_view.dart b/lib/app/modules/media/views/media_view.dart new file mode 100644 index 00000000..2359437c --- /dev/null +++ b/lib/app/modules/media/views/media_view.dart @@ -0,0 +1,167 @@ +import 'package:akm/app/common/style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_animate/flutter_animate.dart'; +import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:form_builder_image_picker/form_builder_image_picker.dart'; +import 'package:form_builder_validators/form_builder_validators.dart'; + +import 'package:get/get.dart'; +import 'package:getwidget/getwidget.dart'; +import 'package:lottie/lottie.dart'; + +import '../controllers/media_controller.dart'; + +class MediaView extends GetView { + MediaView({Key? key}) : super(key: key); + + final data = Get.arguments; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Upload Gambar'), + centerTitle: true, + ), + body: FormBuilder( + key: controller.formKey, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Animate( + child: const GFCard( + boxFit: BoxFit.cover, + titlePosition: GFPosition.start, + showOverlayImage: true, + imageOverlay: AssetImage( + 'assets/images/home/bi_fast.png', + ), + title: GFListTile( + title: Text( + '', + style: TextStyle( + color: Colors.white, + fontSize: 47, + fontWeight: FontWeight.bold, + ), + ), + ), + content: Text( + '', + style: TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold), + ), + ) + .animate() + .fadeIn() // uses `Animate.defaultDuration` + .scale() // inherits duration from fadeIn + .move( + delay: 300.ms, + duration: + 600.ms) // runs after the above w/new duration + // inherits the delay & duration from move, + ), + FormBuilderTextField( + name: 'keterangan', + validator: FormBuilderValidators.required(), + decoration: const InputDecoration( + prefixIcon: Icon( + FontAwesomeIcons.solidFileLines, + ), + labelText: 'Keterangan', + border: OutlineInputBorder(), + hintText: 'Gambar / Dokumen', + ), + controller: controller.keterangan, + ), + const SizedBox( + height: 20, + ), + FormBuilderImagePicker( + name: 'file', + bottomSheetPadding: const EdgeInsets.all(16), + fit: BoxFit.cover, + cameraLabel: const Text('Ambil Foto'), + previewAutoSizeWidth: true, + galleryLabel: const Text('Pilih dari Galeri'), + loadingWidget: ((context) => const Center( + child: CircularProgressIndicator(), + )), + placeholderWidget: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Center( + child: Lottie.asset( + 'assets/images/home/upload-files.zip', + frameRate: FrameRate.max, + height: 112, + repeat: true, + errorBuilder: (context, error, stackTrace) { + return const Text( + 'Gagal memuat animasi', + style: TextStyle( + color: Colors.red, + ), + ); + }, + ), + ), + const Center( + child: Text( + 'Klik untuk memilih gambar / dokumen ', + style: TextStyle( + color: Colors.grey, + ), + ), + ), + ], + ), + ), + imageQuality: 50, + showDecoration: true, + maxImages: 1, + validator: FormBuilderValidators.required(), + autovalidateMode: AutovalidateMode.onUserInteraction, + decoration: const InputDecoration( + border: OutlineInputBorder(), + hintText: 'Gambar / Dokumen', + ), + ) + ], + ), + Obx( + () => GFButton( + color: primaryColor, + size: GFSize.LARGE, + fullWidthButton: true, + onPressed: () { + if (controller.formKey.currentState?.saveAndValidate() ?? + false) { + controller.saveMedia(data.id); + } else { + debugPrint( + controller.formKey.currentState?.value.toString()); + debugPrint('validation failed'); + } + }, + text: + controller.isMediaProcessing.value ? 'Loading' : 'Upload', + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/app/routes/app_pages.dart b/lib/app/routes/app_pages.dart index cf38eb24..9d7e5524 100644 --- a/lib/app/routes/app_pages.dart +++ b/lib/app/routes/app_pages.dart @@ -1,9 +1,5 @@ -// 📦 Package imports: import 'package:get/get.dart'; -// 🌎 Project imports: -import 'package:akm/app/modules/asuransi/views/edit_asuransi_view.dart'; -import 'package:akm/app/modules/asuransi/views/lihat_asuransi_view.dart'; import '../modules/agunan_analisis/bindings/agunan_analisis_binding.dart'; import '../modules/agunan_analisis/views/agunan_analisis_view.dart'; import '../modules/agunan_analisis/views/lihat_agunan_analisis_view_view.dart'; @@ -15,6 +11,8 @@ import '../modules/agunan_pilih/bindings/agunan_pilih_binding.dart'; import '../modules/agunan_pilih/views/agunan_pilih_view.dart'; import '../modules/asuransi/bindings/asuransi_binding.dart'; import '../modules/asuransi/views/asuransi_view.dart'; +import '../modules/asuransi/views/edit_asuransi_view.dart'; +import '../modules/asuransi/views/lihat_asuransi_view.dart'; import '../modules/bisnis_analisis/bindings/bisnis_analisis_binding.dart'; import '../modules/bisnis_analisis/views/bisnis_analisis_view.dart'; import '../modules/bisnis_analisis/views/edit_bisnis_analisis_view.dart'; @@ -24,6 +22,8 @@ import '../modules/debitur_deploy/views/debitur_deploy_view.dart'; import '../modules/debitur_real/bindings/debitur_real_binding.dart'; import '../modules/debitur_real/views/debitur_edit_view.dart'; import '../modules/debitur_real/views/debitur_onboarding_view.dart'; +import '../modules/gallery_image/bindings/gallery_image_binding.dart'; +import '../modules/gallery_image/views/gallery_image_view.dart'; import '../modules/home/bindings/home_binding.dart'; import '../modules/home/views/home_view.dart'; import '../modules/ijin_legitimasi/bindings/ijin_legitimasi_binding.dart'; @@ -78,6 +78,8 @@ import '../modules/list_debitur/bindings/list_debitur_binding.dart'; import '../modules/list_debitur/views/list_debitur_view.dart'; import '../modules/list_syarat_lainnya/bindings/list_syarat_lainnya_binding.dart'; import '../modules/list_syarat_lainnya/views/list_syarat_lainnya_view.dart'; +import '../modules/media/bindings/media_binding.dart'; +import '../modules/media/views/media_view.dart'; import '../modules/porsekot_table/bindings/porsekot_table_binding.dart'; import '../modules/porsekot_table/views/porsekot_table_view.dart'; import '../modules/rugi_laba/bindings/rugi_laba_binding.dart'; @@ -95,6 +97,10 @@ import '../modules/usaha_analisis/views/edit_usaha_analisis_view.dart'; import '../modules/usaha_analisis/views/lihat_usaha_analisis_view.dart'; import '../modules/usaha_analisis/views/usaha_analisis_view.dart'; +// 📦 Package imports: + +// 🌎 Project imports: + // ignore_for_file: constant_identifier_names part 'app_routes.dart'; @@ -442,5 +448,15 @@ class AppPages { page: () => EditAsuransiView(), binding: AsuransiBinding(), ), + GetPage( + name: _Paths.MEDIA, + page: () => MediaView(), + binding: MediaBinding(), + ), + GetPage( + name: _Paths.GALLERY_IMAGE, + page: () => GalleryImageView(), + binding: GalleryImageBinding(), + ), ]; } diff --git a/lib/app/routes/app_routes.dart b/lib/app/routes/app_routes.dart index 954cdf59..75bd50da 100644 --- a/lib/app/routes/app_routes.dart +++ b/lib/app/routes/app_routes.dart @@ -77,6 +77,8 @@ abstract class Routes { static const ASURANSI = _Paths.ASURANSI; static const LIHAT_ASURANSI = _Paths.LIHAT_ASURANSI; static const EDIT_ASURANSI = _Paths.EDIT_ASURANSI; + static const MEDIA = _Paths.MEDIA; + static const GALLERY_IMAGE = _Paths.GALLERY_IMAGE; } abstract class _Paths { @@ -152,4 +154,6 @@ abstract class _Paths { static const ASURANSI = '/asuransi'; static const LIHAT_ASURANSI = '/lihat-asurans'; static const EDIT_ASURANSI = '/edit-asuransi'; + static const MEDIA = '/media'; + static const GALLERY_IMAGE = '/gallery-image'; } diff --git a/lib/app/widget/upload_screen.dart b/lib/app/widget/upload_screen.dart new file mode 100644 index 00000000..fb3f5875 --- /dev/null +++ b/lib/app/widget/upload_screen.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:lottie/lottie.dart'; +import 'package:scaffold_gradient_background/scaffold_gradient_background.dart'; + +class UploadScreen extends StatelessWidget { + const UploadScreen({super.key}); + + @override + Widget build(BuildContext context) { + return ScaffoldGradientBackground( + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Colors.blue, + Colors.blue.shade900, + ], + ), + body: Align( + alignment: Alignment.center, + child: Container( + padding: const EdgeInsets.all(32), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Center( + child: Text( + 'Sedang Mengupload', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 35, + fontWeight: FontWeight.bold, + ), + ), + ), + Center( + child: Lottie.asset( + 'assets/images/home/process-upload.zip', + frameRate: FrameRate.max, + fit: BoxFit.cover, + repeat: true, + errorBuilder: (context, error, stackTrace) { + return const Text( + 'Gagal memuat animasi', + style: TextStyle( + color: Colors.red, + ), + ); + }, + ), + ), + const Center( + child: CircularProgressIndicator( + color: Colors.white, + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 320ab1cf..b40527f5 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -9,6 +9,8 @@ import device_info_plus import geolocator_apple import path_provider_macos import printing +import share_plus +import sqflite import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { @@ -16,5 +18,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin")) + SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) + SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index cd79784d..f3495053 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -85,6 +85,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" + cached_network_image: + dependency: transitive + description: + name: cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.3" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" change_app_package_name: dependency: "direct dev" description: @@ -134,6 +155,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.16.0" + community_material_icon: + dependency: transitive + description: + name: community_material_icon + url: "https://pub.dartlang.org" + source: hosted + version: "5.9.55" convert: dependency: transitive description: @@ -147,7 +175,7 @@ packages: name: cross_file url: "https://pub.dartlang.org" source: hosted - version: "0.3.3+1" + version: "0.3.3+2" crypto: dependency: transitive description: @@ -227,6 +255,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "7.0.0" + dio: + dependency: "direct main" + description: + name: dio + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.6" double_back_to_close_app: dependency: "direct main" description: @@ -262,6 +297,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.11" + fancy_shimmer_image: + dependency: "direct main" + description: + name: fancy_shimmer_image + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" ffi: dependency: transitive description: @@ -276,6 +318,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "6.1.2" + file_picker: + dependency: transitive + description: + name: file_picker + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.2" finance: dependency: "direct main" description: @@ -297,6 +346,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.1" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.0" flutter_chips_input: dependency: transitive description: @@ -325,6 +388,15 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + flutter_easyloading: + dependency: "direct main" + description: + path: "." + ref: develop + resolved-ref: "0d811bf4f2a8359e9988033339c2ef48883e4df9" + url: "https://github.com/fleetimee/flutter_easyloading" + source: git + version: "3.0.4" flutter_echarts: dependency: "direct main" description: @@ -428,6 +500,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.0" + flutter_staggered_grid_view: + dependency: "direct main" + description: + name: flutter_staggered_grid_view + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.2" flutter_styled_toast: dependency: "direct main" description: @@ -503,6 +589,15 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "8.3.0" + form_builder_file_picker: + dependency: "direct main" + description: + path: "." + ref: main + resolved-ref: e3144ef0732d430a75ec75873c285619089c211f + url: "https://github.com/flutter-form-builder-ecosystem/form_builder_file_picker" + source: git + version: "2.3.0" form_builder_image_picker: dependency: "direct main" description: @@ -517,6 +612,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "8.4.0" + gallery_saver: + dependency: "direct main" + description: + name: gallery_saver + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.2" geocoding: dependency: "direct main" description: @@ -636,6 +738,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.2.2" + image_downloader: + dependency: "direct main" + description: + name: image_downloader + url: "https://pub.dartlang.org" + source: hosted + version: "0.31.0" image_picker: dependency: "direct main" description: @@ -783,6 +892,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" modal_bottom_sheet: dependency: "direct main" description: @@ -818,6 +934,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" open_filex: dependency: "direct main" description: @@ -861,7 +984,7 @@ packages: source: hosted version: "1.0.1" path_provider: - dependency: transitive + dependency: "direct main" description: name: path_provider url: "https://pub.dartlang.org" @@ -916,6 +1039,48 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.8.4" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.11.1" + permission_handler: + dependency: transitive + description: + name: permission_handler + url: "https://pub.dartlang.org" + source: hosted + version: "10.2.0" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + url: "https://pub.dartlang.org" + source: hosted + version: "10.2.0" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.7" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.9.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" petitparser: dependency: transitive description: @@ -923,6 +1088,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "5.0.0" + photo_view: + dependency: "direct main" + description: + name: photo_view + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0" platform: dependency: transitive description: @@ -1030,6 +1202,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.9.1" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.27.7" scaffold_gradient_background: dependency: "direct main" description: @@ -1037,6 +1216,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.3+1" + share_plus: + dependency: "direct main" + description: + name: share_plus + url: "https://pub.dartlang.org" + source: hosted + version: "6.3.0" + share_plus_platform_interface: + dependency: transitive + description: + name: share_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" shimmer: dependency: "direct main" description: @@ -1070,6 +1263,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.2" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0+3" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0+2" stack_trace: dependency: transitive description: @@ -1084,6 +1291,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0+3" terbilang_id: dependency: "direct main" description: @@ -1174,7 +1388,7 @@ packages: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" url_launcher_web: dependency: transitive description: @@ -1189,6 +1403,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.0.1" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.7" vector_math: dependency: "direct main" description: @@ -1244,7 +1465,7 @@ packages: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.7.0" + version: "3.1.2" wkt_parser: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b8811019..6431a0e4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: akm -version: 1.0.6+14 +version: 1.0.7+15 publish_to: none description: Mobile app untuk Analisis Kredit Mikro built with Flutter and NodeJS. environment: @@ -16,10 +16,12 @@ dependencies: ref: master data_table_2: ^2.3.8 device_info_plus: ^8.0.0 + dio: ^4.0.6 double_back_to_close_app: ^2.1.0 empty_widget: ^0.0.5 extended_masked_text: ^2.3.1 faker_dart: ^0.1.11 + fancy_shimmer_image: ^2.0.2 finance: git: url: https://github.com/yuvaraja2303/finance/ @@ -28,6 +30,10 @@ dependencies: sdk: flutter flutter_animate: ^2.0.1 flutter_custom_clippers: ^2.0.0 + flutter_easyloading: + git: + url: https://github.com/fleetimee/flutter_easyloading + ref: develop flutter_echarts: ^2.4.0 flutter_form_builder: ^7.7.0 flutter_localizations: @@ -37,19 +43,26 @@ dependencies: flutter_markdown: ^0.6.13 flutter_native_splash: ^2.2.15 flutter_slidable: ^2.0.0 + flutter_staggered_grid_view: ^0.6.2 flutter_styled_toast: ^2.1.3 flutter_svg: ^1.1.6 flutter_tex_js: ^1.2.17 font_awesome_flutter: ^10.2.1 form_builder_extra_fields: ^8.3.0 + form_builder_file_picker: + git: + url: https://github.com/flutter-form-builder-ecosystem/form_builder_file_picker + ref: main form_builder_image_picker: ^3.1.0 form_builder_validators: ^8.4.0 + gallery_saver: ^2.3.2 geocoding: ^2.0.5 geolocator: ^9.0.2 get: 4.6.5 getwidget: ^3.0.1 google_fonts: ^3.0.1 http: ^0.13.5 + image_downloader: 0.31.0 image_picker: ^0.8.6 intl: ^0.17.0 latlong2: ^0.8.1 @@ -61,13 +74,16 @@ dependencies: numerus: ^2.0.0 open_filex: ^4.3.1 open_street_map_search_and_pick: ^0.0.15 + path_provider: ^2.0.11 pdf: ^3.8.4 + photo_view: ^0.14.0 printing: ^5.9.3 responsive_framework: git: url: https://github.com/Codelessly/ResponsiveFramework ref: master scaffold_gradient_background: ^1.0.3+1 + share_plus: ^6.3.0 shimmer: ^2.0.0 terbilang_id: ^0.1.0 url_launcher: ^6.1.7 diff --git a/thunder-tests/thunderCollection.json b/thunder-tests/thunderCollection.json index 954ad8bc..23d56cdd 100644 --- a/thunder-tests/thunderCollection.json +++ b/thunder-tests/thunderCollection.json @@ -1,82 +1,4 @@ [ - { - "_id": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "colName": "Accesscode Talker", - "created": "2022-07-01T21:32:19.213Z", - "sortNum": 10000, - "folders": [ - { - "_id": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa", - "name": "Debitur", - "containerId": "", - "created": "2022-07-06T02:33:40.463Z", - "sortNum": 10000 - }, - { - "_id": "11269e40-da53-4a29-8635-bdae288ca8e5", - "name": "Penghasilan Tetap", - "containerId": "", - "created": "2022-07-06T02:33:58.928Z", - "sortNum": 20000 - }, - { - "_id": "2c98df92-734e-49b1-afdd-d4f583ee77a2", - "name": "Penghasilan Tidak Tetap", - "containerId": "", - "created": "2022-07-06T04:08:40.212Z", - "sortNum": 30000 - }, - { - "_id": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d", - "name": "Users", - "containerId": "", - "created": "2022-07-11T01:02:59.920Z", - "sortNum": 40000 - }, - { - "_id": "37cc2a2e-484a-42af-8e69-ce87ba83bffc", - "name": "Role", - "containerId": "", - "created": "2022-07-11T01:03:35.951Z", - "sortNum": 50000 - }, - { - "_id": "a37e001a-b116-4dda-8452-246da85dd8e2", - "name": "Pro Pengajuan", - "containerId": "", - "created": "2022-07-11T03:12:35.785Z", - "sortNum": 60000 - }, - { - "_id": "0e776d57-21a5-43fe-b762-89c20d81d1ef", - "name": "File Upload", - "containerId": "", - "created": "2022-07-13T02:39:09.533Z", - "sortNum": 70000 - }, - { - "_id": "4109a690-be92-431c-b24a-4d6748a6c18c", - "name": "Agunan", - "containerId": "", - "created": "2022-07-13T07:11:11.865Z", - "sortNum": 80000 - }, - { - "_id": "0c58901b-fee7-4c4e-8907-9415f57bd1dc", - "name": "Business Analytics", - "containerId": "", - "created": "2022-07-13T07:11:32.363Z", - "sortNum": 90000 - }, - { - "_id": "5b184829-c3d6-499a-b09a-774c34893892", - "name": "Character Analysis", - "containerId": "", - "created": "2022-07-13T15:02:02.707Z", - "sortNum": 100000 - } - ] - }, { "_id": "3e42347a-acbf-4266-ae30-f61da3c0cc82", "colName": "Neo Claudius", @@ -236,6 +158,13 @@ "containerId": "", "created": "2022-11-09T01:34:35.377Z", "sortNum": 200000 + }, + { + "_id": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11", + "name": "Upload Image", + "containerId": "", + "created": "2022-11-28T04:38:45.294Z", + "sortNum": 210000 } ] } diff --git a/thunder-tests/thunderEnvironment.json b/thunder-tests/thunderEnvironment.json index e5870389..502fa896 100644 --- a/thunder-tests/thunderEnvironment.json +++ b/thunder-tests/thunderEnvironment.json @@ -2,7 +2,7 @@ { "_id": "664f5f60-ada2-4f7b-9346-3664891144d4", "name": "neo-claudius", - "default": true, + "default": false, "sortNum": 10000, "created": "2022-07-05T23:42:20.152Z", "modified": "2022-11-13T21:48:56.624Z", @@ -16,7 +16,7 @@ { "_id": "484e6cb8-b6c0-48a9-b8f7-edaa58016485", "name": "A", - "default": false, + "default": true, "sortNum": 20000, "created": "2022-09-20T05:25:05.997Z", "modified": "2022-11-11T03:26:23.446Z", diff --git a/thunder-tests/thunderclient.json b/thunder-tests/thunderclient.json index 22757bc2..980517e8 100644 --- a/thunder-tests/thunderclient.json +++ b/thunder-tests/thunderclient.json @@ -1,600 +1,14 @@ [ - { - "_id": "6ad95a8e-22b2-4b66-b5e5-362286edfc40", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa", - "name": "Get all debitur", - "url": "http://localhost:3000/debiturs/", - "method": "GET", - "sortNum": 10000, - "created": "2022-07-01T21:33:08.123Z", - "modified": "2022-08-24T04:19:41.862Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "41791ff4-03bd-4dd1-8e3f-8e6911a8b1fc", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa", - "name": "Get debitur by id", - "url": "http://localhost:3000/debiturs/1", - "method": "GET", - "sortNum": 30000, - "created": "2022-07-02T12:33:20.525Z", - "modified": "2022-07-06T04:25:04.692Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "fc459d0e-98b4-4cbd-88c8-435449b29002", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa", - "name": "Delete debitur", - "url": "http://localhost:3000/debiturs/3", - "method": "DELETE", - "sortNum": 40000, - "created": "2022-07-02T12:40:04.374Z", - "modified": "2022-07-14T02:19:26.373Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "156119f0-d287-4494-aeec-27cc40bdca34", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5", - "name": "Get fixed income", - "url": "http://localhost:3000/fixeds", - "method": "GET", - "sortNum": 10000, - "created": "2022-07-05T02:08:52.999Z", - "modified": "2022-07-11T04:58:15.711Z", - "headers": [], - "params": [ - { - "name": "limit", - "value": "2", - "isDisabled": true, - "isPath": false - }, - { - "name": "fields", - "value": "jenis_pengajuan,jenis_penggunaan", - "isDisabled": true, - "isPath": false - } - ], - "tests": [] - }, - { - "_id": "1e99e827-8277-4bfa-8ecf-51ab01c0933d", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5", - "name": "Get fixed income by id", - "url": "http://localhost:3000/fixeds/2", - "method": "GET", - "sortNum": 40000, - "created": "2022-07-05T02:10:11.631Z", - "modified": "2022-07-06T02:34:04.451Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "ced545f2-4482-4da3-8289-1cbf8a8375dc", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5", - "name": "Delete fixed income", - "url": "http://localhost:3000/fixeds/27", - "method": "DELETE", - "sortNum": 50000, - "created": "2022-07-05T02:19:55.484Z", - "modified": "2022-07-14T02:18:21.656Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "f3e8f1e5-9ca8-4ea3-a078-30ffef116b0f", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5", - "name": "Update fixed income", - "url": "http://localhost:3000/fixeds", - "method": "POST", - "sortNum": 30000, - "created": "2022-07-05T06:52:25.886Z", - "modified": "2022-08-24T23:54:35.308Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"jenis_pengajuan\": \"BARU\",\n \"plafon_fasilitas\": \"1000000\",\n \"jenis_penggunaan\": \"INVESTASI\",\n \"tujuan_penggunaan\": \"Membeli hewan qurban\",\n \"jangka_waktu\": \"5 Bulan\",\n \"penghasilan_pemohon\": \"250000\",\n \"potongan_gaji\": \"10000\",\n \"sisa_penghasilan\": \"230000\",\n \"nama_pejabat_penanggung_jawab\": \"Evil La Twin\",\n \"jabatan_pejabat_penanggung_jawab\": \"Platinum\",\n \"nama_pejabat_pemotong_gaji\": \"Eldlich\",\n \"jabatan_pejabat_pemotong_gaji\": \"Gold\",\n \"no_rekening\": \"552454212\",\n \"tanggal_mulai_kredit\": \"2022-06-11\",\n \"jangka_waktu_kredit\": \"1 Tahun\",\n \"plafon_kredit\": \"10000000\",\n \"debitur\": \"76\",\n \"createdBy\": 3\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "63660606-5a7c-4052-8a15-889ded7f2dd7", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa", - "name": "Edit debitur", - "url": "http://localhost:3000/debiturs/", - "method": "POST", - "sortNum": 25000, - "created": "2022-07-06T04:25:16.463Z", - "modified": "2022-07-19T07:38:19.016Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"nik\": \"15421\",\n \"nama_debitur\": \"Novian Andika\",\n \"alamat\": \"Jln Affandi No 20\",\n \"tempat_lahir\": \"Yogyakarta\",\n \"tanggal_lahir\": \"1994-11-09\",\n \"pekerjaan\": \"Customer Service\",\n \"agama\": \"Islam\",\n \"gender\": \"Perempuan\",\n \"no_telp\": \"084545245454\",\n \"no_seluler\": \"0828783232\",\n \"instansi\": \"Swasta\",\n \"email\": \"soniaekap2@gmail.com\",\n \"nama_ibu\": \"Dunno\",\n \"relationship\": \"Menikah\",\n \"nama_pasangan\": \"Novian Andika\",\n \"pekerjaan_pasangan\": \"Software Developer\",\n \"tgl_lahir_pasangan\": \"1997-09-04\",\n \"tempat_lahir_pasangan\": \"Jakarta\",\n \"nik_pasangan\": 54545454,\n \"total_income\": \"9999999999\",\n \"bidang_usaha\": \"Jasa Pengiriman\",\n \"jumlah_tanggungan\": \"0\",\n \"provinsi\": \"Daerah Istimewa Yogyakarta\",\n \"kabupaten\": \"Sleman\",\n \"kecamatan\": \"Depok\",\n \"kelurahan\": \"Condongcatur\",\n \"rt\": \"01\",\n \"rw\": \"05\",\n \"kode_pos\": \"14045\",\n \"createdBy\": 3\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "d7d446fa-8354-48f0-9ab8-7d24188fda86", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa", - "name": "Filtering", - "url": "http://localhost:3000/debiturs/?s={\"no_ktp1\": \"12345678\"}", - "method": "GET", - "sortNum": 15000, - "created": "2022-07-06T04:26:15.140Z", - "modified": "2022-08-21T06:54:37.368Z", - "headers": [], - "params": [ - { - "name": "s", - "value": "{\"no_ktp1\": \"12345678\"}", - "isPath": false - }, - { - "name": "filter", - "value": "nik||$eq||500000", - "isDisabled": true, - "isPath": false - }, - { - "name": "limit", - "value": "1", - "isDisabled": true, - "isPath": false - }, - { - "name": "fields", - "value": "id,nama_debitur", - "isDisabled": true, - "isPath": false - } - ], - "tests": [] - }, - { - "_id": "01242775-ea13-4a12-b5a5-5bf34a6fabdb", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2", - "name": "Get non-fixed income", - "url": "http://localhost:3000/non-fixeds", - "method": "GET", - "sortNum": 60000, - "created": "2022-07-06T04:46:52.344Z", - "modified": "2022-07-06T13:40:27.085Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "11a9d56d-2e2c-49f1-ac91-46ff091e8f55", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2", - "name": "Create non-fixed income", - "url": "http://localhost:3000/non-fixeds", - "method": "POST", - "sortNum": 70000, - "created": "2022-07-06T04:47:20.033Z", - "modified": "2022-07-14T16:17:51.952Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"jenis_pengajuan\": \"ADENDUM\",\n \"plafon_fasilitas\": 2500,\n \"jenis_penggunaan\": \"KONSUMSI\",\n \"tujuan_penggunaan\": \"Bermain Slot\",\n \"jangka_waktu\": \"6 Bulan\",\n \"no_rekening\": 8545454545,\n \"plafon_kredit\": 2001000,\n \"tanggal_mulai_kredit\": \"2022-05-21\",\n \"jangka_waktu_kredit\": \"8 Bulan\",\n \"debitur\": 5,\n \"createdBy\": 3\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "960054fb-126a-43f8-a495-6ab23a01c2fe", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2", - "name": "Get non-fixed income by id", - "url": "http://localhost:3000/non-fixeds/2", - "method": "GET", - "sortNum": 77500, - "created": "2022-07-06T04:57:01.911Z", - "modified": "2022-07-06T05:09:57.682Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "60561953-9af4-4944-84f7-f7a0615318a7", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2", - "name": "Delete non-fixed income", - "url": "localhost:3000/non-fixeds/11", - "method": "DELETE", - "sortNum": 80000, - "created": "2022-07-06T04:58:17.074Z", - "modified": "2022-07-11T04:58:31.435Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "af892903-b7e2-481b-9f32-3392b15844e1", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2", - "name": "Edit non-fixed income", - "url": "http://localhost:3000/non-fixeds/17", - "method": "PUT", - "sortNum": 75000, - "created": "2022-07-06T05:09:32.030Z", - "modified": "2022-07-11T06:20:31.002Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"jenis_pengajuan\": \"ADENDUM\",\n \"plafon_fasilitas\": 2500,\n \"jenis_penggunaan\": \"KONSUMSI\",\n \"tujuan_penggunaan\": \"Bermain Slot\",\n \"jangka_waktu\": \"6 Bulan\",\n \"no_rekening\": 21313131313,\n \"plafon_kredit\": 2000000,\n \"tanggal_mulai_kredit\": \"2022-05-21\",\n \"jangka_waktu_kredit\": \"8 Bulan\",\n \"debitur\": 1,\n \"createdBy\": 1,\n \"submission\": [{\n \"id\": 1\n }]\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "548969f7-aff0-4e10-8e46-de44855ff4bc", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "37cc2a2e-484a-42af-8e69-ce87ba83bffc", - "name": "Create roles", - "url": "http://localhost:3000/roles/", - "method": "POST", - "sortNum": 10000, - "created": "2022-07-08T06:54:23.768Z", - "modified": "2022-09-06T15:08:06.971Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"name\": \"User\"\n \n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "bf3aaf6f-c6fa-47d4-aa87-6a02db4568c1", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d", - "name": "Get users", - "url": "{{baseUrl}}api/v1/users", - "method": "GET", - "sortNum": 110000, - "created": "2022-07-11T01:03:10.735Z", - "modified": "2022-09-29T02:49:04.509Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "654b5e70-7ea5-4fcd-816c-61cc80a21981", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d", - "name": "Create user", - "url": "http://localhost:3000/users", - "method": "POST", - "sortNum": 120000, - "created": "2022-07-11T01:28:32.372Z", - "modified": "2022-09-06T15:04:44.315Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"username\": \"asu\",\n \"password\": \"123\",\n \"roles\": [\n {\n \"name\": \"Admin\"\n }\n ]\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "9c9adf22-b62b-46fc-b17b-8fd54d2db4f1", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2", - "name": "Get ProPengajuan", - "url": "localhost:3000/submissions", - "method": "GET", - "sortNum": 130000, - "created": "2022-07-11T03:12:44.732Z", - "modified": "2022-07-13T15:37:58.497Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "84f0fcbb-6e7a-4e31-a36c-e8a9426241b4", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2", - "name": "Edit ProPengajuan", - "url": "localhost:3000/submissions/1", - "method": "PUT", - "sortNum": 132500, - "created": "2022-07-11T03:21:26.759Z", - "modified": "2022-07-13T13:15:57.680Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"createdBy\": 1,\n \"fixed\": [{\n \"id\": 27,\n \"is_approved\": false\n }]\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "47866816-d485-4edf-a5e3-c2b6ab94ab51", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2", - "name": "Delete ProPengajuan", - "url": "localhost:3000/submissions/1", - "method": "DELETE", - "sortNum": 150000, - "created": "2022-07-11T04:57:32.902Z", - "modified": "2022-07-14T02:17:49.253Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "db867624-c99f-4d60-add1-a3e851cd8945", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "0e776d57-21a5-43fe-b762-89c20d81d1ef", - "name": "Upload file", - "url": "localhost:3000/uploads/", - "method": "POST", - "sortNum": 10000, - "created": "2022-07-12T02:10:15.768Z", - "modified": "2022-09-11T10:37:29.235Z", - "headers": [], - "params": [], - "body": { - "type": "formdata", - "raw": "", - "form": [ - { - "name": "submission", - "value": "9", - "isDisabled": true - }, - { - "name": "createdBy", - "value": "1", - "isDisabled": true - }, - { - "name": "test", - "value": "1" - } - ], - "files": [ - { - "name": "files", - "value": "D:\\Download\\Pengumuman Jasa Lainnya Perorangan.pdf", - "isDisabled": true - } - ] - }, - "tests": [] - }, - { - "_id": "08a8c536-9e6b-4aac-a1a0-d9ccedf21df0", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "0e776d57-21a5-43fe-b762-89c20d81d1ef", - "name": "List of uploaded files", - "url": "localhost:3000/uploads/", - "method": "GET", - "sortNum": 5000, - "created": "2022-07-13T02:39:23.039Z", - "modified": "2022-07-13T02:39:36.459Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "056404e2-35b4-4da7-8f4d-7927292fbc24", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "0e776d57-21a5-43fe-b762-89c20d81d1ef", - "name": "Delete file", - "url": "localhost:3000/uploads/11", - "method": "DELETE", - "sortNum": 180000, - "created": "2022-07-13T02:40:03.818Z", - "modified": "2022-07-13T02:40:26.283Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "4663bd02-79c5-4afb-8d92-36c33036ef80", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "0c58901b-fee7-4c4e-8907-9415f57bd1dc", - "name": "Get business analysis", - "url": "localhost:3000/business_analysis/", - "method": "GET", - "sortNum": 190000, - "created": "2022-07-13T07:11:54.075Z", - "modified": "2022-07-13T14:23:10.900Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "d3647b4c-9208-4387-8b57-bddc40898c51", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2", - "name": "Create ProPengajuan", - "url": "localhost:3000/submissions/", - "method": "POST", - "sortNum": 131250, - "created": "2022-07-13T13:15:53.014Z", - "modified": "2022-08-24T23:55:23.590Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"createdBy\": 3,\n \"fixed\": [{\n \"id\": 36,\n \"is_approved\": true\n }]\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "5499835a-f4d6-41e8-9a5b-dabedba7f37d", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "4109a690-be92-431c-b24a-4d6748a6c18c", - "name": "Get Collateral", - "url": "localhost:3000/collaterals", - "method": "GET", - "sortNum": 200000, - "created": "2022-07-13T13:24:19.678Z", - "modified": "2022-07-13T13:24:32.967Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "b2d89564-0b69-4373-a887-22d67f0106ed", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "4109a690-be92-431c-b24a-4d6748a6c18c", - "name": "Create Collateral", - "url": "localhost:3000/collaterals", - "method": "POST", - "sortNum": 210000, - "created": "2022-07-13T13:24:45.272Z", - "modified": "2022-07-13T13:43:08.857Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"barang_agunan\": \"Mobil\",\n \"asuransi\": \"takimata iriure erat nulla est lobortis volutpat kasd\",\n \"nilai_agunan\": 100000,\n \"bukti_agunan\": \"Lorem ipsum\",\n \"ijin_milik\": \"magna hendrerit labore velit placerat\",\n \"deskripsi_agunan\": \"Consetetur ut sed ut feugait dolor labore eirmod est magna sadipscing elitr labore ipsum labore sanctus nonumy velit magna takimata invidunt magna hendrerit labore velit placerat no dolore dolores diam et sadipscing commodo voluptua consequat gubergren voluptua takimata elitr amet et amet no voluptua in stet doming nulla et sanctus\",\n \"createdBy\": 1,\n \"submission\": 1\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "54568c69-081c-4e0d-8cd5-1906350e2eb6", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "37cc2a2e-484a-42af-8e69-ce87ba83bffc", - "name": "Get role", - "url": "{{baseUrl}}api/v1/roles", - "method": "GET", - "sortNum": 5000, - "created": "2022-07-13T14:18:25.189Z", - "modified": "2022-09-29T02:50:48.439Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "54735a63-317a-4f32-9904-deb3bc7b6ac0", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "0c58901b-fee7-4c4e-8907-9415f57bd1dc", - "name": "Create business analysis", - "url": "localhost:3000/business_analysis/", - "method": "POST", - "sortNum": 230000, - "created": "2022-07-13T14:23:43.132Z", - "modified": "2022-07-13T14:28:59.118Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"omset_penjualan\": \"erat nulla est lobortis volutpat kasd\",\n \"harga_bersaing\": \"lorem lorem delenit ut dolore et\",\n \"persaingan\": \"sed at et elitr at sadipscing\",\n \"lokasi\": \"strategis\",\n \"kualitas\": \"bagus\",\n \"deskripsi_bisnis\": \"Kasd accusam sea accusam iriure enim est elitr et sed sadipscing veniam nonumy lorem nonumy illum gubergren quod vel sea aliquam consetetur imperdiet aliquip et tempor tempor ut diam ipsum rebum sadipscing et stet option iriure voluptua sed sed consetetur nonumy sit consetetur takimata rebum amet clita ex et consetetur\",\n \"createdBy\": 1,\n \"submission\": 1\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "b24f94a4-fc72-4d27-b72c-db84a0f7af53", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "5b184829-c3d6-499a-b09a-774c34893892", - "name": "Get character analysis", - "url": "localhost:3000/character_analysis", - "method": "GET", - "sortNum": 240000, - "created": "2022-07-13T15:02:17.299Z", - "modified": "2022-07-13T15:03:39.686Z", - "headers": [], - "params": [], - "tests": [] - }, - { - "_id": "e41dde0b-60c9-48e7-80e2-d1a58b88bdbd", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "5b184829-c3d6-499a-b09a-774c34893892", - "name": "Create character analysis", - "url": "localhost:3000/character_analysis", - "method": "POST", - "sortNum": 250000, - "created": "2022-07-13T15:03:51.708Z", - "modified": "2022-07-14T01:04:48.794Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"ulet_dalam_bisnis\": 75,\n \"flexible_kaku\": 80,\n \"kreatif_inovatif\": 87,\n \"jujur_dlm_bisnis\": 95,\n \"deskripsi_karakter\": \"Consequat erat rebum odio est sit dolor sea amet sed eirmod ipsum eu eirmod dolor no et ut invidunt nostrud est stet euismod clita voluptua tempor ipsum rebum et sit consetetur tempor tation kasd dolore erat diam labore sed eirmod feugiat et vero adipiscing diam consequat sanctus ut enim voluptua\",\n \"createdBy\": 1,\n \"submission\": 1\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "50f04b4e-a3d7-46f6-a4af-89a0e86ecbc0", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2", - "name": "Patch one or many items", - "url": "localhost:3000/submissions/10", - "method": "PATCH", - "sortNum": 260000, - "created": "2022-07-14T01:20:18.173Z", - "modified": "2022-07-15T01:28:59.558Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"character_analysis\": {\n \"ulet_dalam_bisnis\": 75,\n \"flexible_kaku\": 65,\n \"kreatif_inovatif\": 87,\n \"jujur_dlm_bisnis\": 95,\n \"deskripsi_karakter\": \"Consequat erat rebum odio est sit dolor sea amet sed eirmod ipsum eu eirmod dolor no et ut invidunt nostrud est stet euismod clita voluptua tempor ipsum rebum et sit consetetur tempor tation kasd dolore erat diam labore sed eirmod feugiat et vero adipiscing diam consequat sanctus ut enim voluptua\",\n \"createdById\": 3\n },\n \"collateral\": {\n \"barang_agunan\": \"Mobil\",\n \"asuransi\": \"takimata iriure erat nulla est lobortis volutpat kasd\",\n \"nilai_agunan\": 100000,\n \"bukti_agunan\": \"Lorem ipsum\",\n \"ijin_milik\": \"magna hendrerit labore velit placerat\",\n \"deskripsi_agunan\": \"Consetetur ut sed ut feugait dolor labore eirmod est magna sadipscing elitr labore ipsum labore sanctus nonumy velit magna takimata invidunt magna hendrerit labore velit placerat no dolore dolores diam et sadipscing commodo voluptua consequat gubergren voluptua takimata elitr amet et amet no voluptua in stet doming nulla et sanctus\",\n \"createdBy\": 3\n },\n \"business_analysis\": {\n \"omset_penjualan\": \"erat nulla est lobortis volutpat kasd\",\n \"harga_bersaing\": \"lorem lorem delenit ut dolore et\",\n \"persaingan\": \"sed at et elitr at sadipscing\",\n \"lokasi\": \"strategis\",\n \"kualitas\": \"bagus\",\n \"deskripsi_bisnis\": \"Kasd accusam sea accusam iriure enim est elitr et sed sadipscing veniam nonumy lorem nonumy illum gubergren quod vel sea aliquam consetetur imperdiet aliquip et tempor tempor ut diam ipsum rebum sadipscing et stet option iriure voluptua sed sed consetetur nonumy sit consetetur takimata rebum amet clita ex et consetetur\",\n \"createdBy\": 3\n }\n \n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "6b2b27f6-c917-4379-9336-405ba243c773", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "5b184829-c3d6-499a-b09a-774c34893892", - "name": "Delete character analysis", - "url": "localhost:3000/character_analysis/11", - "method": "DELETE", - "sortNum": 270000, - "created": "2022-07-14T02:16:46.794Z", - "modified": "2022-07-14T02:17:13.803Z", - "headers": [], - "params": [], - "tests": [] - }, { "_id": "5c653682-4cba-4d3a-ad5d-5ec209f6aa76", "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82", "containerId": "e9deb1b2-3088-4fc0-9c9f-4ae39119ec95", "name": "Get Debitur By Id", - "url": "{{baseUrl}}api/v1/debiturs/9?join=ijinLegitimasi&join=syaratLain&join=asuransi&join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=analisaAgunan", + "url": "{{baseUrl}}api/v1/debiturs/5?join=ijinLegitimasi&join=syaratLain&join=asuransi&join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=analisaAgunan&join=upload", "method": "GET", "sortNum": 280000, "created": "2022-08-20T00:12:21.220Z", - "modified": "2022-11-11T04:53:54.735Z", + "modified": "2022-11-28T14:51:32.701Z", "headers": [], "params": [ { @@ -694,8 +108,7 @@ }, { "name": "join", - "value": "ijinLegitimasi", - "isDisabled": true, + "value": "upload", "isPath": false } ], @@ -753,44 +166,6 @@ "params": [], "tests": [] }, - { - "_id": "d283dc2e-b7d9-4f5a-9a61-e9fd0d8a4a33", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d", - "name": "edit roles", - "url": "localhost:3000/users/3", - "method": "PATCH", - "sortNum": 330000, - "created": "2022-08-26T04:11:06.664Z", - "modified": "2022-08-26T04:15:32.617Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"roles\": [\n {\n \"id\": 13,\n \"name\": \"122\"\n }\n ]\n}", - "form": [] - }, - "tests": [] - }, - { - "_id": "0d6fa835-11f2-49af-8d80-5d7eabe06c0b", - "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8", - "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d", - "name": "edittt", - "url": "http://localhost:3000/users/18", - "method": "PUT", - "sortNum": 340000, - "created": "2022-08-26T04:20:14.040Z", - "modified": "2022-09-06T15:08:16.971Z", - "headers": [], - "params": [], - "body": { - "type": "json", - "raw": "{\n \"username\": \"fleetimeeeeee11\",\n \"password\": \"123\",\n \"roles\": [\n {\n \"id\": 18\n }\n ]\n}", - "form": [] - }, - "tests": [] - }, { "_id": "bbfc6e76-a84f-43a9-b5aa-219dc7cf9121", "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82", @@ -1804,5 +1179,63 @@ "headers": [], "params": [], "tests": [] + }, + { + "_id": "a84302fa-7db7-4277-af82-ac1092c99b64", + "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82", + "containerId": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11", + "name": "Get", + "url": "{{baseUrl}}api/v1/debiturs/2/uploads/", + "method": "GET", + "sortNum": 880000, + "created": "2022-11-28T04:38:57.552Z", + "modified": "2022-11-29T01:27:52.826Z", + "headers": [], + "params": [], + "tests": [] + }, + { + "_id": "39151a13-b8a9-4a34-8f20-a17c5546fb7e", + "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82", + "containerId": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11", + "name": "Post", + "url": "{{baseUrl}}api/v1/debiturs/5/uploads/", + "method": "POST", + "sortNum": 890000, + "created": "2022-11-28T04:42:22.215Z", + "modified": "2022-11-28T14:13:13.682Z", + "headers": [], + "params": [], + "body": { + "type": "formdata", + "raw": "", + "form": [ + { + "name": "keterangan", + "value": "adada" + } + ], + "files": [ + { + "name": "file", + "value": "c:\\Users\\Novian Andika\\Desktop\\278122273_5151241421581206_3504391876146381605_n.jpg" + } + ] + }, + "tests": [] + }, + { + "_id": "f6559a9b-4679-432c-8be5-5cf255a4fdd8", + "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82", + "containerId": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11", + "name": "Delete", + "url": "{{baseUrl}}api/v1/debiturs/2/uploads/18", + "method": "DELETE", + "sortNum": 900000, + "created": "2022-11-29T06:31:13.541Z", + "modified": "2022-11-29T06:31:23.074Z", + "headers": [], + "params": [], + "tests": [] } ] \ No newline at end of file diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 1c757696..fa212a0f 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,14 +7,20 @@ #include "generated_plugin_registrant.h" #include +#include #include +#include #include void RegisterPlugins(flutter::PluginRegistry* registry) { GeolocatorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("GeolocatorWindows")); + PermissionHandlerWindowsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); PrintingPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PrintingPlugin")); + SharePlusWindowsPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); UrlLauncherWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index de1c4c0f..a6e52f19 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,7 +4,9 @@ list(APPEND FLUTTER_PLUGIN_LIST geolocator_windows + permission_handler_windows printing + share_plus url_launcher_windows )