123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- import 'dart:convert';
- import 'package:camera/camera.dart';
- import 'package:easy_localization/easy_localization.dart';
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/foundation.dart';
- import 'package:image_picker/image_picker.dart';
- import 'package:page_transition/page_transition.dart';
- import 'package:provider/provider.dart';
- import 'package:telnow_mobile_new/src/api/api_auth_provider.dart';
- import 'package:telnow_mobile_new/src/injector/injector.dart';
- import 'package:telnow_mobile_new/src/layouts/components/camera.dart';
- import 'package:telnow_mobile_new/src/layouts/mobile/request_success.dart';
- import 'package:telnow_mobile_new/src/layouts/components/template.dart';
- import 'package:telnow_mobile_new/src/layouts/web/request_success.dart';
- import 'package:telnow_mobile_new/src/storage/sharedpreferences/shared_preferences_manager.dart';
- import 'package:telnow_mobile_new/src/utils/U.dart';
- import 'package:telnow_mobile_new/src/utils/cache_manager.dart';
- import 'package:telnow_mobile_new/src/utils/provider.dart';
- import 'package:image/image.dart' as img;
- import 'package:uuid/uuid.dart';
- class RequestFunction{
- final ApiAuthProvider apiAuthProvider = ApiAuthProvider();
- final SharedPreferencesManager sharedPreferencesManager = locator<SharedPreferencesManager>();
- getData(BuildContext context, String? _keyword, widget) async {
- bool _inGroup = widget.groupCode != null ? true : false;
- bool _isEmpty = true;
- if(!Provider.of<RequestModule>(context, listen: false).isLoad()){
- Provider.of<RequestModule>(context, listen: false).setIsLoad(true);
- Provider.of<RequestModule>(context, listen: false).setKeyword(_keyword != null ? _keyword : "");
- try{
- String tenant = '';
- String filter = '';
- String search = '';
- String group = '';
- String url = '';
- if(_keyword != null){
- String subject = U.langColumn(context, 'subject');
- search = ',{"f":["$subject","LIKE","%$_keyword%"]}';
- }
- if(U.newServerVersion(1709864293)){
- if(widget.groupCode != null){
- url = '/api/requests/search/custom';
- group = ',{"f":["${U.servantDisplay()?'servantGroupCode':'requestGroup.code'}","EQ","${widget.groupCode}"]}';
- filter = '{"and":[{"or":[{"f":["scope","EQ","ALL"]},{"f":["scope","EQ","${widget.scope}"]}]}$search$group]}';
- }
- else{
- url = '/api/requests/search/menu';
- filter = '{"and":[{"or":[{"f":["scope","EQ","ALL"]},{"f":["scope","EQ","${widget.scope}"]}]}$search]}';
- }
- }
- else{
- if(widget.groupCode != null){
- group = ',{"f":["${U.servantDisplay()?'servantGroupCode':'requestGroup.code'}","EQ","${widget.groupCode}"]}';
- }
- filter = '{"and":[{"or":[{"f":["scope","EQ","ALL"]},{"f":["scope","EQ","${widget.scope}"]}]}$search$group$tenant]}';
- url = '/api/requests/search/custom';
- }
- String key = '$url-$filter';
- if (_inGroup && _keyword == null) {
- try {
- await CacheMan.readData(key).then((val){
- if (val != null) {
- Provider.of<RequestModule>(context, listen: false).setData(val['data']);
- _isEmpty = false;
- }
- });
- } catch(e){}
- }
- List tempData = [];
- var res = await apiAuthProvider.getData(url, {'filter': filter, 'nopage': 'true'}, context);
- if (res != null && res.toString() != "[]") {
- if (res.containsKey('_embedded')) {
- for (int i = 0; i < res['_embedded']['requests'].length; i++) {
- tempData.add(res['_embedded']['requests'][i]);
- }
- if(tempData.length > 0) _isEmpty = false;
- }
- }
- Provider.of<RequestModule>(context, listen: false).setEmpty(_isEmpty);
- if (U.getInternetStatus()) {
- Provider.of<RequestModule>(context, listen: false).setData(tempData);
- if (_inGroup && _keyword == null) CacheMan.writeData(key, tempData);
- }
- Provider.of<RequestModule>(context, listen: false).setIsLoad(false);
- } catch(e){
- print(e);
- Provider.of<RequestModule>(context, listen: false).setIsLoad(false);
- }
- }
- }
- Future getSuggestionLocation(BuildContext context) async{
- var res = await apiAuthProvider.getData('/api/requestHistories/search/location/suggestion', null, context);
- if(res != null){
- Provider.of<CreateSerModule>(context, listen: false).setSuggestion(res);
- }
- }
- Future getImageNew(BuildContext context, media) async {
- try {
- Provider.of<CreateSerModule>(context, listen: false).setSetLoadingEffect(true);
- XFile? pickedFile;
- if(media == ImageSource.camera){
- await availableCameras().then((camera) => Navigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: OpenCamera(cameras: camera))).then((value) async{
- if(value!=null){
- pickedFile = value;
- }
- }));
- }
- else{
- pickedFile = await ImagePicker().pickImage(source: media);
- }
- if (pickedFile != null) {
- var image = img.decodeImage(await pickedFile!.readAsBytes());
- var imgPercent = (1000 / (image!.width / 100)).toDouble();
- if (image.width > 1000) {
- image = img.copyResize(image, width: ((image.width / 100) * imgPercent).toInt(), height: ((image.height / 100) * imgPercent).toInt());
- }
- var compressed = img.encodeJpg(image, quality: 60);
- Provider.of<CreateSerModule>(context, listen: false).setSetLoadingEffect(false);
- return compressed;
- }
- else{
- Provider.of<CreateSerModule>(context, listen: false).setSetLoadingEffect(false);
- return null;
- }
- } catch (e) {
- Provider.of<CreateSerModule>(context, listen: false).setSetLoadingEffect(false);
- return null;
- }
- }
- sendRequest(BuildContext context, widget, controllerNote, controllerLocation, controllerDateString, currentSliderValue) async{
- showLoading(context, lottie: kIsWeb && !isCanvasKit ? null : 'Paperplane.json', text: 'sendingRequest'.tr());
- var data;
- data = {
- 'note': controllerNote.text.trim() == '' ? '' : controllerNote.text.trim(),
- 'location': Provider.of<CreateSerModule>(context, listen: false).locationType() == 2 ? controllerLocation.text.trim() : Provider.of<CreateSerModule>(context, listen: false).defaultLocation(),
- 'sendLater': Provider.of<CreateSerModule>(context, listen: false).sendLater(),
- 'datetimeScheduled': controllerDateString.text.trim(),
- 'requestPriority': getPrioValue(currentSliderValue)
- };
- if(!kIsWeb && U.newServerVersion(1709864293) && !U.getInternetStatus()){
- closeLoading(context);
- sendRequestNoInternet(context, widget, controllerLocation, controllerNote, data: data, others: false);
- }
- else{
- List imageEncode = Provider.of<CreateSerModule>(context, listen: false).images();
- imageEncode.forEach((element) {
- element = base64Encode(element);
- });
- data['images'] = imageEncode;
- var res = await apiAuthProvider.postData('/api/requestHistories/search/request/' + widget.request['type'] + '/' + widget.request['id'].toString() + '/' + widget.request['noteFormat'] + '/submit', null, data, context);
- if (res != null) {
- Future.delayed(Duration(seconds: 3), (){
- closeLoading(context);
- navigateTo(context, U.webView(context)?WebReqSuccessPage(user: widget.user, ticketNo: res['ticketNo'], fromSearch: widget.fromSearch):MobReqSuccessPage(user: widget.user, ticketNo: res['ticketNo'], fromSearch: widget.fromSearch)).then((res){
- while (Navigator.canPop(context)){
- Navigator.pop(context);
- }
- });
- });
- }
- else{
- closeLoading(context);
- }
- }
- }
- getPrioValue(currentSliderValue){
- switch(currentSliderValue){
- case 0: return 'RENDAH';
- case 50: return 'NORMAL';
- case 100: return 'TINGGI';
- default: return 'NORMAL';
- }
- }
- sendRequestToOthers(BuildContext context, widget, controllerUserId, controllerNote, controllerLocation, controllerDateString, currentSliderValue) async{
- showLoading(context, lottie: kIsWeb && !isCanvasKit ? null : 'Paperplane.json', text: 'sendingRequest'.tr());
- var data;
- data = {
- 'user_id': controllerUserId.text.trim(),
- 'req': [{
- 'request_code': widget.request['code'],
- 'qty': 1,
- 'note': controllerNote.text.trim() == '' ? '' : controllerNote.text.trim(),
- 'tenantCode': widget.request['tenantCode'],
- 'location': Provider.of<CreateSerModule>(context, listen: false).locationType() == 2 ? controllerLocation.text.trim() : Provider.of<CreateSerModule>(context, listen: false).defaultLocation(),
- 'datetimeScheduled': controllerDateString.text.trim(),
- 'requestPriority': getPrioValue(currentSliderValue)
- }]
- };
- if(!kIsWeb && U.newServerVersion(1709864293) && !U.getInternetStatus()){
- closeLoading(context);
- sendRequestNoInternet(context, widget, controllerLocation, controllerNote, data: data, others: true);
- }
- else{
- List imageEncode = Provider.of<CreateSerModule>(context, listen: false).images();
- imageEncode.forEach((element) {
- element = base64Encode(element);
- });
- data['req'][0]['images'] = imageEncode;
- try{
- var res = await apiAuthProvider.postData('/api/receptionists/send/request', null, data, context);
- print("res ##> $res");
- if (res != null) {
- Future.delayed(Duration(seconds: 3), (){
- closeLoading(context);
- navigateTo(context, U.webView(context)?WebReqSuccessPage(user: widget.user, ticketNo: res['ticketNo'], fromSearch: widget.fromSearch):MobReqSuccessPage(user: widget.user, ticketNo: res['ticketNo'], fromSearch: widget.fromSearch)).then((res){
- while (Navigator.canPop(context)){
- Navigator.pop(context);
- }
- });
- });
- }
- }catch(e){
- print("error: $e");
- closeLoading(context);
- }
- }
- }
- sendRequestNoInternet(BuildContext context, widget, controllerLocation, controllerNote, {data, others})async{
- List list = sharedPreferencesManager.isKeyExists(SharedPreferencesManager.keyPendingData)!?jsonDecode(sharedPreferencesManager.getString(SharedPreferencesManager.keyPendingData)!):[];
- List imageEncode = [];
- Provider.of<CreateSerModule>(context, listen: false).images().forEach((element) {
- imageEncode.add(base64Encode(element));
- });
- var params = {
- 'uniqueId': Uuid().v1(),
- 'others': others,
- 'title': widget.request['subject'],
- 'image': widget.request['_mobileImage'],
- 'sub': widget.request['_requestGroupDescription'],
- 'subEn': widget.request['_requestGroupDescriptionEn'],
- 'subJa': widget.request['_requestGroupDescriptionJa'],
- 'subKo': widget.request['_requestGroupDescriptionKo'],
- 'subZh': widget.request['_requestGroupDescriptionZh'],
- 'desc': widget.request['subjectDescription'],
- 'descEn': widget.request['subjectDescriptionEn'],
- 'descJa': widget.request['subjectDescriptionJa'],
- 'descKo': widget.request['subjectDescriptionKo'],
- 'descZh': widget.request['subjectDescriptionZh'],
- 'type': widget.request['type'],
- 'id': widget.request['id'],
- 'noteFormat': widget.request['noteFormat'],
- 'location': Provider.of<CreateSerModule>(context, listen: false).locationType() == 2 ? controllerLocation.text.trim() : Provider.of<CreateSerModule>(context, listen: false).defaultLocation(),
- 'note': controllerNote.text.trim() == '' ? '' : controllerNote.text.trim(),
- 'data': data,
- 'imageList': imageEncode,
- 'datetimeRequest': DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now())
- };
- list.add(params);
- await sharedPreferencesManager.putString(SharedPreferencesManager.keyPendingData, jsonEncode(list));
- navigateTo(context, U.webView(context)?WebReqSuccessPendingPage(data: params, fromSearch: widget.fromSearch):MobReqSuccessPendingPage(data: params, fromSearch: widget.fromSearch)).then((res){
- while (Navigator.canPop(context)){
- Navigator.pop(context);
- }
- });
- }
- }
|