@@ -4,6 +4,7 @@ class keyClass{ | |||||
static String duration = 'DURATION'; | static String duration = 'DURATION'; | ||||
static String loginId = 'LOGIN_ID'; | static String loginId = 'LOGIN_ID'; | ||||
static String hostAddress = 'HOST'; | static String hostAddress = 'HOST'; | ||||
static String restTokenAddress = 'REST'; | |||||
static String company = 'COMPANY'; | static String company = 'COMPANY'; | ||||
static String user_id = 'USER'; | static String user_id = 'USER'; | ||||
static String cabang_id = 'CABANG_ID'; | static String cabang_id = 'CABANG_ID'; | ||||
@@ -11,6 +12,8 @@ class keyClass{ | |||||
static String targetProccess = 'dbPath'; | static String targetProccess = 'dbPath'; | ||||
static String submitProccess = 'SUBMIT'; | static String submitProccess = 'SUBMIT'; | ||||
static String stock_id = 'STOCK_TAKING_UNIT_ID'; | static String stock_id = 'STOCK_TAKING_UNIT_ID'; | ||||
static String client_credential = 'CLIENT_CREDENTIAL'; | |||||
static String rest_data = 'REST_DATA'; | |||||
} | } | ||||
class columnName{ | class columnName{ | ||||
static String id = 'ID'; | static String id = 'ID'; | ||||
@@ -2,31 +2,135 @@ import 'dart:async'; | |||||
import 'dart:convert'; | import 'dart:convert'; | ||||
import 'dart:io'; | import 'dart:io'; | ||||
import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||
import 'package:http/http.dart'; | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:flushbar/flushbar.dart'; | import 'package:flushbar/flushbar.dart'; | ||||
import 'package:http/io_client.dart'; | import 'package:http/io_client.dart'; | ||||
import '../main.dart'; | import '../main.dart'; | ||||
import 'package:location/location.dart'; | import 'package:location/location.dart'; | ||||
import 'package:permission_handler/permission_handler.dart' as pHandler; | import 'package:permission_handler/permission_handler.dart' as pHandler; | ||||
// import 'package:app_settings/app_settings.dart'; | |||||
import 'Prefs.dart'; | |||||
import 'package:oauth2/oauth2.dart' as oauth2; | |||||
class Util{ | class Util{ | ||||
bool tokenValidity = true; | |||||
bool useLocal = false; | bool useLocal = false; | ||||
JsonDataPostRaw(Map jsonData, String url,{timeout:false}) async{ | |||||
getOauth2Client() async { | |||||
bool resetClient = false; | |||||
oauth2.Credentials restData = (prefs.getString(keyClass.rest_data)!=null&&prefs.getString(keyClass.rest_data).contains("accessToken"))?oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)):null; | |||||
if(restData == null)resetClient = true; | |||||
else{ | |||||
if(DateTime.now().isAfter(restData.expiration))resetClient = true; | |||||
} | |||||
oauth2.Client client; | |||||
if(resetClient||!tokenValidity){ | |||||
final tokenEndpoint = Uri.parse(prefs.getString(keyClass.restTokenAddress)); | |||||
if(prefs.getString(keyClass.client_credential)==null){ | |||||
client = await initRest(); | |||||
} | |||||
else{ | |||||
var clients = JsonDecoder().convert(prefs.getString(keyClass.client_credential)); | |||||
client = await oauth2.clientCredentialsGrant(tokenEndpoint, clients["id"], clients["secret"],httpClient: http); | |||||
prefs.setString(keyClass.rest_data, client.credentials.toJson()); | |||||
} | |||||
} | |||||
else { | |||||
if (prefs.getString(keyClass.client_credential) == null) { | |||||
client = await initRest(); | |||||
} | |||||
else { | |||||
var clients = JsonDecoder().convert(prefs.getString(keyClass.client_credential)); | |||||
client = new oauth2.Client(restData, identifier: clients["id"], | |||||
secret: clients["secret"], | |||||
httpClient: http); | |||||
} | |||||
} | |||||
return client; | |||||
} | |||||
JsonDataPostRaw(Map jsonData, String url,{secure:true,timeout:false}) async{ | |||||
var httpClient; | |||||
const JsonDecoder decoder = const JsonDecoder(); | const JsonDecoder decoder = const JsonDecoder(); | ||||
var headers = {'Content-type': 'application/json'}; | |||||
try { | try { | ||||
var response; | var response; | ||||
if(secure) { | |||||
httpClient = await getOauth2Client(); | |||||
oauth2.Credentials tokenRestData = oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)); | |||||
headers["Authorization"] = | |||||
"bearer ${tokenRestData.accessToken}"; | |||||
} | |||||
else { | |||||
httpClient = http; | |||||
} | |||||
if (timeout) | if (timeout) | ||||
response = await http.post( | |||||
response = await httpClient.post( | |||||
Uri.parse(url), headers: headers, | |||||
body: json.encode(jsonData)).timeout( | |||||
const Duration(seconds: 10)); | |||||
else | |||||
response = await httpClient.post( | |||||
Uri.parse(url), headers: {'Content-type': 'application/json'}, | Uri.parse(url), headers: {'Content-type': 'application/json'}, | ||||
body: json.encode(jsonData)); | |||||
if(response.statusCode == 403) tokenValidity = false; | |||||
if(htmlErrorTitle(response.body.toString())!=""){ | |||||
return {"STATUS":(response.statusCode != 200)?0:1,"DATA":htmlErrorTitle(response.body.toString())}; | |||||
} | |||||
final Map data = decoder.convert(response.body); | |||||
try{data["DATA"] = decoder.convert(data["DATA"]);}catch(e){} | |||||
return data; | |||||
} on TimeoutException catch(e){ | |||||
return {"STATUS":0,"DATA":"Request Timeout"}; | |||||
} | |||||
on HandshakeException catch(e){ | |||||
if(useLocal){ | |||||
return {"STATUS":0,"DATA":"Not Connected to Server. $e"}; | |||||
} | |||||
else{ | |||||
useLocal = true; | |||||
http = IOClient(HttpClient(context: clientContext)); | |||||
return await JsonDataPostRaw(jsonData, url,timeout:timeout,secure: secure); | |||||
} | |||||
} | |||||
on Exception catch(exception){ | |||||
print(url); | |||||
// Toast("Not Connected to Server", Colors.red); | |||||
return {"STATUS":0,"DATA":"Not Connected to Server. $exception"}; | |||||
} | |||||
} | |||||
JsonDataPutRaw(Map jsonData, String url,{secure:true,timeout:false}) async{ | |||||
var httpClient; | |||||
const JsonDecoder decoder = const JsonDecoder(); | |||||
var headers = {'Content-type': 'application/json'}; | |||||
try { | |||||
var response; | |||||
if(secure) { | |||||
httpClient = await getOauth2Client(); | |||||
oauth2.Credentials tokenRestData = oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)); | |||||
headers["Authorization"] = | |||||
"bearer ${tokenRestData.accessToken}"; | |||||
} | |||||
else { | |||||
httpClient = http; | |||||
} | |||||
if (timeout) | |||||
response = await httpClient.put( | |||||
Uri.parse(url), headers: headers, | |||||
body: json.encode(jsonData)).timeout( | body: json.encode(jsonData)).timeout( | ||||
const Duration(seconds: 10)); | const Duration(seconds: 10)); | ||||
else | else | ||||
response = await http.post( | |||||
response = await httpClient.put( | |||||
Uri.parse(url), headers: {'Content-type': 'application/json'}, | Uri.parse(url), headers: {'Content-type': 'application/json'}, | ||||
body: json.encode(jsonData)); | body: json.encode(jsonData)); | ||||
if(response.statusCode == 403) tokenValidity = false; | |||||
if(htmlErrorTitle(response.body.toString())!=""){ | |||||
return {"STATUS":(response.statusCode != 200)?0:1,"DATA":htmlErrorTitle(response.body.toString())}; | |||||
} | |||||
final Map data = decoder.convert(response.body); | final Map data = decoder.convert(response.body); | ||||
try{data["DATA"] = decoder.convert(data["DATA"]);}catch(e){} | |||||
return data; | return data; | ||||
} on TimeoutException catch(e){ | } on TimeoutException catch(e){ | ||||
return {"STATUS":0,"DATA":"Request Timeout"}; | return {"STATUS":0,"DATA":"Request Timeout"}; | ||||
@@ -38,7 +142,7 @@ class Util{ | |||||
else{ | else{ | ||||
useLocal = true; | useLocal = true; | ||||
http = IOClient(HttpClient(context: clientContext)); | http = IOClient(HttpClient(context: clientContext)); | ||||
return await JsonDataPostRaw(jsonData, url,timeout:timeout); | |||||
return await JsonDataPostRaw(jsonData, url,timeout:timeout,secure: secure); | |||||
} | } | ||||
} | } | ||||
@@ -49,6 +153,33 @@ class Util{ | |||||
} | } | ||||
} | } | ||||
htmlErrorTitle(String html){ | |||||
try{ | |||||
if(html.contains('<title>')) { | |||||
String titleElement = html.substring(html.indexOf("<title>")+7,html.indexOf("<\/title>")); | |||||
return titleElement; | |||||
} | |||||
else return ''; | |||||
} | |||||
catch(e){ | |||||
return ''; | |||||
} | |||||
} | |||||
initRest()async{ | |||||
try{ | |||||
if(prefs.getString(keyClass.client_credential)==null){ | |||||
prefs.setString(keyClass.client_credential, json.encode({ | |||||
"id": "IZ4W8u8YZmLtUV0p1zd-_A..", | |||||
"secret" : "AQ16v4bzGWm9AsWHvUcu2Q.." | |||||
}).toString()); | |||||
} | |||||
return await getOauth2Client(); | |||||
} | |||||
catch(e){ | |||||
print(e); | |||||
print("error fetching Rest token"); | |||||
} | |||||
} | |||||
showLoading(context,{dissmissable=false,onwillpop}){ | showLoading(context,{dissmissable=false,onwillpop}){ | ||||
showDialog( | showDialog( | ||||
context: context, | context: context, | ||||
@@ -5,7 +5,10 @@ import 'dart:typed_data'; | |||||
import 'package:http/io_client.dart'; | import 'package:http/io_client.dart'; | ||||
import 'package:path_provider/path_provider.dart'; | import 'package:path_provider/path_provider.dart'; | ||||
import 'package:http/http.dart'; | import 'package:http/http.dart'; | ||||
import 'package:unitstocks/Util/Prefs.dart'; | |||||
import '../main.dart'; | import '../main.dart'; | ||||
import 'package:oauth2/oauth2.dart' as oauth2; | |||||
class file_Trans_Handler { | class file_Trans_Handler { | ||||
// double _progress = 0; | // double _progress = 0; | ||||
@@ -17,32 +20,54 @@ class file_Trans_Handler { | |||||
StreamController _progress = new StreamController<double>(); | StreamController _progress = new StreamController<double>(); | ||||
Stream<double> get progress =>_progress.stream; | Stream<double> get progress =>_progress.stream; | ||||
bool useLocal = false; | bool useLocal = false; | ||||
var httpClient; | |||||
downloadFile(String fileName,String link) async { | downloadFile(String fileName,String link) async { | ||||
StreamedResponse _response; | StreamedResponse _response; | ||||
List<int> _bytes = []; | List<int> _bytes = []; | ||||
int _total = 0; | int _total = 0; | ||||
httpClient = await util.getOauth2Client(); | |||||
print('Start Download'); | print('Start Download'); | ||||
_progress.add(null); | _progress.add(null); | ||||
try { | try { | ||||
Request req = new Request('GET', Uri.parse(link)); | Request req = new Request('GET', Uri.parse(link)); | ||||
// req.headers = ''; | // req.headers = ''; | ||||
_response = await http.send(req).timeout( | |||||
_response = await httpClient.send(req).timeout( | |||||
Duration(seconds: 20)); | Duration(seconds: 20)); | ||||
// _response = await client.get('$link',headers: 'application/json') | // _response = await client.get('$link',headers: 'application/json') | ||||
_total = _response.contentLength; | |||||
print('${_total / 1024} KB'); | |||||
if(_response.statusCode==200){ | |||||
_total = _response.contentLength?? int.parse(_response.headers['file-size']); | |||||
} | |||||
// print('${_total / 1024} KB'); | |||||
_error = ''; | |||||
dlulStream = _response.stream.listen((value) { | dlulStream = _response.stream.listen((value) { | ||||
_bytes.addAll(value); | |||||
_progress.add(((_bytes.length / _total))); | |||||
if(_response.statusCode==200){ | |||||
_bytes.addAll(value); | |||||
_progress.add(((_bytes.length / _total))); | |||||
} | |||||
else{ | |||||
String resString = utf8.decode(value); | |||||
if(util.htmlErrorTitle(resString)!=""){ | |||||
_error = util.htmlErrorTitle(resString); | |||||
} | |||||
_error = resString; | |||||
} | |||||
}) | }) | ||||
..onDone(() async { | ..onDone(() async { | ||||
_progress.add(0.0); | |||||
print('Finish Download'); | |||||
final file = File( | |||||
"${(await getApplicationDocumentsDirectory()).path}/$fileName"); | |||||
await file.writeAsBytes(_bytes); | |||||
_path = file.path; | |||||
if(_error==''){ | |||||
_progress.add(0.0); | |||||
print('Finish Download'); | |||||
final file = File( | |||||
"${(await getApplicationDocumentsDirectory()).path}/$fileName"); | |||||
await file.writeAsBytes(_bytes); | |||||
_path = file.path; | |||||
} | |||||
else{ | |||||
print('Error Download, $_error'); | |||||
_progress.add(-1.0); | |||||
} | |||||
}) | }) | ||||
..onError((e) async { | ..onError((e) async { | ||||
print('Error Download, $e'); | print('Error Download, $e'); | ||||
@@ -70,18 +95,27 @@ class file_Trans_Handler { | |||||
} | } | ||||
uploadFile(String fileName,String link,String company,String cabang_id) async{ | uploadFile(String fileName,String link,String company,String cabang_id) async{ | ||||
httpClient = await util.getOauth2Client(); | |||||
oauth2.Credentials tokenRestData = oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)); | |||||
final file = File( | final file = File( | ||||
"${(await getApplicationDocumentsDirectory()).path}/$fileName"); | "${(await getApplicationDocumentsDirectory()).path}/$fileName"); | ||||
String mimeType = 'application/vnd.sqlite3'; | |||||
if(file.existsSync()){ | if(file.existsSync()){ | ||||
Uint8List byte = file.readAsBytesSync(); | Uint8List byte = file.readAsBytesSync(); | ||||
// print("file size ${file.lengthSync()/1024}"); | // print("file size ${file.lengthSync()/1024}"); | ||||
try{ | try{ | ||||
var _reponse = await http.post( | |||||
Uri.parse(link), headers: {'Content-type': 'application/json'}, | |||||
body: json.encode({"byte":byte,"cabangId":cabang_id,"company":company})); | |||||
var _response = await httpClient.put( | |||||
Uri.parse(link), headers: {"cabangId":cabang_id,"company":company,'Content-type': mimeType,'Authorization':'Bearer ${tokenRestData.accessToken}'}, | |||||
body: byte); | |||||
print('File send ${file.lengthSync()/1024} KB'); | print('File send ${file.lengthSync()/1024} KB'); | ||||
final Map data = JsonDecoder().convert(_reponse.body); | |||||
// print(_reponse.body); | |||||
if(_response.statusCode!=200){ | |||||
if(util.htmlErrorTitle(_response.body.toString())!=""){ | |||||
return {"STATUS":0,"DATA":util.htmlErrorTitle(_response.body.toString())}; | |||||
} | |||||
throw _response.body.toString(); | |||||
} | |||||
final Map data = JsonDecoder().convert(_response.body); | |||||
// print(_response.body); | |||||
// if(data['STATUS']==1){ | // if(data['STATUS']==1){ | ||||
// return {"STATUS":1,"DATA":'File send ${file.lengthSync()/1024} KB'}; | // return {"STATUS":1,"DATA":'File send ${file.lengthSync()/1024} KB'}; | ||||
// } | // } | ||||
@@ -110,11 +144,12 @@ class file_Trans_Handler { | |||||
} | } | ||||
unPackDb(String link,String company,String cabang_id,String dbPath) async{ | unPackDb(String link,String company,String cabang_id,String dbPath) async{ | ||||
try{ | try{ | ||||
var _reponse = await http.post( | |||||
var _response = await http.post( | |||||
Uri.parse(link), headers: {'Content-type': 'application/json'}, | Uri.parse(link), headers: {'Content-type': 'application/json'}, | ||||
body: json.encode({"cabangId":cabang_id,"company":company,"dbPath":dbPath})); | body: json.encode({"cabangId":cabang_id,"company":company,"dbPath":dbPath})); | ||||
final Map data = JsonDecoder().convert(_reponse.body); | |||||
final Map data = JsonDecoder().convert(_response.body); | |||||
return data; | return data; | ||||
} | } | ||||
on HandshakeException catch(e){ | on HandshakeException catch(e){ | ||||
@@ -135,10 +170,10 @@ class file_Trans_Handler { | |||||
submitDb(String link,String company,String stock_id) async{ | submitDb(String link,String company,String stock_id) async{ | ||||
try{ | try{ | ||||
var _reponse = await http.post( | |||||
var _response = await http.post( | |||||
Uri.parse(link), headers: {'Content-type': 'application/json'}, | Uri.parse(link), headers: {'Content-type': 'application/json'}, | ||||
body: json.encode({"stockTakingId":stock_id,"company":company})); | body: json.encode({"stockTakingId":stock_id,"company":company})); | ||||
final Map data = JsonDecoder().convert(_reponse.body); | |||||
final Map data = JsonDecoder().convert(_response.body); | |||||
return data; | return data; | ||||
} | } | ||||
on HandshakeException catch(e){ | on HandshakeException catch(e){ | ||||
@@ -156,20 +191,21 @@ class file_Trans_Handler { | |||||
return {"STATUS":0,"DATA":'Request timeout. Make sure server is up and running'}; | return {"STATUS":0,"DATA":'Request timeout. Make sure server is up and running'}; | ||||
} | } | ||||
} | } | ||||
// apex rest blm support multipart | |||||
uploadMultipart(String fileName,String link)async{ | uploadMultipart(String fileName,String link)async{ | ||||
httpClient = await util.getOauth2Client(); | |||||
StreamedResponse _response; | StreamedResponse _response; | ||||
List<int> _bytes = []; | List<int> _bytes = []; | ||||
int _total = 0; | int _total = 0; | ||||
try{ | try{ | ||||
var request = MultipartRequest('POST', Uri.parse(link)); | |||||
var request = MultipartRequest('PUT', Uri.parse(link)); | |||||
request.files.add( | request.files.add( | ||||
await MultipartFile.fromPath( | await MultipartFile.fromPath( | ||||
'picture', | 'picture', | ||||
"${(await getApplicationDocumentsDirectory()).path}/$fileName" | "${(await getApplicationDocumentsDirectory()).path}/$fileName" | ||||
) | ) | ||||
); | ); | ||||
_response = await http.send(request); | |||||
_response = await httpClient.send(request); | |||||
_total = File("${(await getApplicationDocumentsDirectory()).path}/$fileName").lengthSync(); | _total = File("${(await getApplicationDocumentsDirectory()).path}/$fileName").lengthSync(); | ||||
dlulStream = _response.stream.listen((value) { | dlulStream = _response.stream.listen((value) { | ||||
_bytes.addAll(value); | _bytes.addAll(value); | ||||
@@ -105,14 +105,17 @@ class _HomePageState extends State<HomePage> { | |||||
loadState()async{ | loadState()async{ | ||||
String company = prefs.getString(keyClass.company); | String company = prefs.getString(keyClass.company); | ||||
if(prefs.getString(keyClass.stock_id) == null) | |||||
{ | |||||
valueTab value = await DBHelper.database.getValue(keyClass.stock_id); | |||||
await prefs.setString(keyClass.stock_id, value.value); | |||||
} | |||||
String stock_taking_id = prefs.getString(keyClass.stock_id); | String stock_taking_id = prefs.getString(keyClass.stock_id); | ||||
if(company!=null&&stock_taking_id!=null){ | if(company!=null&&stock_taking_id!=null){ | ||||
var result = await util.JsonDataPostRaw({"company":company,"stockTakingId":stock_taking_id}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getStateStockUnit'); | |||||
print(result); | |||||
var result = await util.JsonDataPostRaw({"company":company,"stockTakingId":stock_taking_id}, '${prefs.getString(keyClass.hostAddress)}/stock_taking/state/'); | |||||
if(result['STATUS']==1){ | if(result['STATUS']==1){ | ||||
setState(() { | setState(() { | ||||
state = result['DATA']['STATE']; | |||||
state = result['DATA']; | |||||
}); | }); | ||||
} | } | ||||
} | } | ||||
@@ -129,7 +132,7 @@ class _HomePageState extends State<HomePage> { | |||||
changeCabang(context)async{ | changeCabang(context)async{ | ||||
util.showLoading(context); | util.showLoading(context); | ||||
var result = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.user_id)}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getCabangByUser'); | |||||
var result = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.loginId)}, '${prefs.getString(keyClass.hostAddress)}/user/cabangs/'); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
if(result['STATUS']==1){ | if(result['STATUS']==1){ | ||||
var selected = prefs.getString(keyClass.cabang_id)??result['DATA'][0]["RETURN_VALUE"]; | var selected = prefs.getString(keyClass.cabang_id)??result['DATA'][0]["RETURN_VALUE"]; | ||||
@@ -472,7 +475,7 @@ class _HomePageState extends State<HomePage> { | |||||
}, | }, | ||||
onSelected: (value)async{ | onSelected: (value)async{ | ||||
if(value == 'hostChange'){ | if(value == 'hostChange'){ | ||||
hostAddress.text = prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'; | |||||
hostAddress.text = prefs.getString(keyClass.hostAddress); | |||||
await showDialog(context: context,builder: (context)=> | await showDialog(context: context,builder: (context)=> | ||||
Material( | Material( | ||||
color: Colors.white.withOpacity(0.9), | color: Colors.white.withOpacity(0.9), | ||||
@@ -533,7 +536,7 @@ class _HomePageState extends State<HomePage> { | |||||
contentPadding: EdgeInsets.all(8), | contentPadding: EdgeInsets.all(8), | ||||
), | ), | ||||
onSubmitted: (value){ | onSubmitted: (value){ | ||||
prefs.setString(keyClass.hostAddress,(value=='')?'https://unitstocksbackend.thamringroup.web.id':value); | |||||
prefs.setString(keyClass.hostAddress,(value=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':value); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
}, | }, | ||||
), | ), | ||||
@@ -549,7 +552,7 @@ class _HomePageState extends State<HomePage> { | |||||
TextButton( | TextButton( | ||||
child: Text('OK',style: TextStyle(color: Colors.indigo),), | child: Text('OK',style: TextStyle(color: Colors.indigo),), | ||||
onPressed: (){ | onPressed: (){ | ||||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://unitstocksbackend.thamringroup.web.id':hostAddress.text); | |||||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':hostAddress.text); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
}, | }, | ||||
) | ) | ||||
@@ -593,7 +596,7 @@ class _HomePageState extends State<HomePage> { | |||||
if(value == 'logout'){ | if(value == 'logout'){ | ||||
prefs.remove(keyClass.cabang_id); | prefs.remove(keyClass.cabang_id); | ||||
prefs.remove(keyClass.company); | prefs.remove(keyClass.company); | ||||
prefs.remove(keyClass.user_id); | |||||
prefs.remove(keyClass.loginId); | |||||
prefs.setBool(keyClass.logged_in, false); | prefs.setBool(keyClass.logged_in, false); | ||||
Navigator.pushNamed(context, '/login'); | Navigator.pushNamed(context, '/login'); | ||||
} | } | ||||
@@ -678,7 +681,8 @@ class _HomePageState extends State<HomePage> { | |||||
print('fetching'); | print('fetching'); | ||||
util.showLoading(context); | util.showLoading(context); | ||||
file_Trans_Handler trans = new file_Trans_Handler(); | file_Trans_Handler trans = new file_Trans_Handler(); | ||||
trans.downloadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getSqliteDb/${prefs.getString(keyClass.company)}/${prefs.getString(keyClass.cabang_id)}"); | |||||
// trans.downloadFile('UnitStocking.db',"http://172.16.1.8:14002/getSqliteDbtest/TBS/02"); | |||||
trans.downloadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)}/stock_taking/get_units/${prefs.getString(keyClass.company)}/${prefs.getString(keyClass.cabang_id)}"); | |||||
progressDLStream = trans.progress.listen((value)async { | progressDLStream = trans.progress.listen((value)async { | ||||
if(progressDL==null) { | if(progressDL==null) { | ||||
// print(['test',value]); | // print(['test',value]); | ||||
@@ -810,7 +814,7 @@ class _HomePageState extends State<HomePage> { | |||||
popped = true; | popped = true; | ||||
return true; | return true; | ||||
}); | }); | ||||
var upload = await trans.uploadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/uploadSqlitedb",prefs.getString(keyClass.company),prefs.getString(keyClass.cabang_id)); | |||||
var upload = await trans.uploadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)}/stock_taking/upload/",prefs.getString(keyClass.company),prefs.getString(keyClass.cabang_id)); | |||||
if(!popped){ | if(!popped){ | ||||
Navigator.pop(context); | Navigator.pop(context); | ||||
util.showFlushbar(context, upload['DATA'],color:(upload['STATUS']!=1)?Colors.red:Colors.grey); | util.showFlushbar(context, upload['DATA'],color:(upload['STATUS']!=1)?Colors.red:Colors.grey); | ||||
@@ -845,7 +849,7 @@ class _HomePageState extends State<HomePage> { | |||||
children: <Widget>[ | children: <Widget>[ | ||||
Container( | Container( | ||||
alignment: (progressUL!=null)?Alignment.bottomCenter:Alignment.bottomLeft, | alignment: (progressUL!=null)?Alignment.bottomCenter:Alignment.bottomLeft, | ||||
padding: EdgeInsets.only(left: 10,right: 10,top: 10,bottom: 15), | |||||
padding: EdgeInsets.only(left: 10,right: 10,top: 10,bottom: 0), | |||||
child: (progressUL!=null)?Column( | child: (progressUL!=null)?Column( | ||||
mainAxisSize: MainAxisSize.min, | mainAxisSize: MainAxisSize.min, | ||||
children: <Widget>[ | children: <Widget>[ | ||||
@@ -926,11 +930,10 @@ class _HomePageState extends State<HomePage> { | |||||
)); | )); | ||||
if(result){ | if(result){ | ||||
util.showLoading(context); | util.showLoading(context); | ||||
file_Trans_Handler trans = new file_Trans_Handler(); | |||||
var upload = await trans.unPackDb("${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/unpackDb",prefs.getString(keyClass.company),prefs.getString(keyClass.cabang_id),prefs.getString(keyClass.targetProccess)); | |||||
var unpack = await util.JsonDataPutRaw({"cabangId":prefs.getString(keyClass.cabang_id),"company":prefs.getString(keyClass.company),"dbPath":prefs.getString(keyClass.targetProccess)}, '${prefs.getString(keyClass.hostAddress)}/stock_taking/add_collection/'); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
util.showFlushbar(context, upload['DATA'],color:(upload['STATUS']!=1)?Colors.red:Colors.grey); | |||||
if(upload['STATUS']==1){ | |||||
util.showFlushbar(context, unpack['DATA'],color:(unpack['STATUS']!=1)?Colors.red:Colors.grey); | |||||
if(unpack['STATUS']==1){ | |||||
prefs.remove(keyClass.targetProccess); | prefs.remove(keyClass.targetProccess); | ||||
prefs.setBool(keyClass.submitProccess,true); | prefs.setBool(keyClass.submitProccess,true); | ||||
} | } | ||||
@@ -989,11 +992,15 @@ class _HomePageState extends State<HomePage> { | |||||
)); | )); | ||||
if(result){ | if(result){ | ||||
util.showLoading(context); | util.showLoading(context); | ||||
file_Trans_Handler trans = new file_Trans_Handler(); | |||||
var upload = await trans.submitDb("${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/submitStock",prefs.getString(keyClass.company),prefs.getString(keyClass.stock_id)); | |||||
if(prefs.getString(keyClass.stock_id) == null) | |||||
{ | |||||
valueTab value = await DBHelper.database.getValue(keyClass.stock_id); | |||||
await prefs.setString(keyClass.stock_id, value.value); | |||||
} | |||||
var submits = await util.JsonDataPostRaw({"stockTakingId":prefs.getString(keyClass.stock_id),"company":prefs.getString(keyClass.company),"user_id":prefs.getString(keyClass.loginId)}, '${prefs.getString(keyClass.hostAddress)}/stock_taking/submit/'); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
util.showFlushbar(context, upload['DATA'],color:(upload['STATUS']!=1)?Colors.red:Colors.grey); | |||||
if(upload['STATUS']==1){ | |||||
util.showFlushbar(context, submits['DATA'],color:(submits['STATUS']!=1)?Colors.red:Colors.grey); | |||||
if(submits['STATUS']==1){ | |||||
loadState(); | loadState(); | ||||
prefs.remove(keyClass.submitProccess); | prefs.remove(keyClass.submitProccess); | ||||
} | } | ||||
@@ -1,5 +1,4 @@ | |||||
import 'dart:io'; | import 'dart:io'; | ||||
import 'package:flutter/cupertino.dart'; | import 'package:flutter/cupertino.dart'; | ||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'main.dart'; | import 'main.dart'; | ||||
@@ -23,12 +22,12 @@ class _LoginPageState extends State<LoginPage> { | |||||
Login()async{ | Login()async{ | ||||
util.showLoading(context); | util.showLoading(context); | ||||
var result = await util.JsonDataPostRaw({"User":userCon.text,"Pass":passCon.text}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/login'); | |||||
var result = await util.JsonDataPostRaw({"User":userCon.text,"Pass":passCon.text}, '${prefs.getString(keyClass.hostAddress)}/user//login/'); | |||||
if(result['STATUS']==1){ | if(result['STATUS']==1){ | ||||
prefs.setString(keyClass.user_id, result['DATA'][keyClass.user_id]); | |||||
prefs.setString(keyClass.company, result['DATA'][keyClass.company]); | |||||
prefs.setString(keyClass.loginId, result['DATA'][keyClass.loginId.toLowerCase()]); | |||||
prefs.setString(keyClass.company, result['DATA'][keyClass.company.toLowerCase()]); | |||||
prefs.setBool(keyClass.logged_in, true); | prefs.setBool(keyClass.logged_in, true); | ||||
var cabangList = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.user_id)}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getCabangByUser'); | |||||
var cabangList = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.loginId)}, '${prefs.getString(keyClass.hostAddress)}/user/cabangs/'); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
if(cabangList['STATUS']==1){ | if(cabangList['STATUS']==1){ | ||||
cabangDrop = cabangList['DATA']; | cabangDrop = cabangList['DATA']; | ||||
@@ -82,7 +81,7 @@ class _LoginPageState extends State<LoginPage> { | |||||
prefs.setBool(keyClass.logged_in, false); | prefs.setBool(keyClass.logged_in, false); | ||||
prefs.remove(keyClass.cabang_id); | prefs.remove(keyClass.cabang_id); | ||||
prefs.remove(keyClass.company); | prefs.remove(keyClass.company); | ||||
prefs.remove(keyClass.user_id); | |||||
prefs.remove(keyClass.loginId); | |||||
}); | }); | ||||
} | } | ||||
return false; | return false; | ||||
@@ -104,13 +103,13 @@ class _LoginPageState extends State<LoginPage> { | |||||
flex: 3, | flex: 3, | ||||
child: InkWell( | child: InkWell( | ||||
onLongPress: ()async{ | onLongPress: ()async{ | ||||
hostAddress.text = prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'; | |||||
hostAddress.text = prefs.getString(keyClass.hostAddress); | |||||
await showDialog(context: context,builder: (context)=>AlertDialog( | await showDialog(context: context,builder: (context)=>AlertDialog( | ||||
title: Text('Set IP Address'), | title: Text('Set IP Address'), | ||||
content: TextField( | content: TextField( | ||||
controller: hostAddress, | controller: hostAddress, | ||||
onSubmitted: (value){ | onSubmitted: (value){ | ||||
prefs.setString(keyClass.hostAddress,(value=='')?'https://unitstocksbackend.thamringroup.web.id':value); | |||||
prefs.setString(keyClass.hostAddress,(value=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':value); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
}, | }, | ||||
), | ), | ||||
@@ -118,7 +117,7 @@ class _LoginPageState extends State<LoginPage> { | |||||
TextButton( | TextButton( | ||||
child: Text('OK'), | child: Text('OK'), | ||||
onPressed: (){ | onPressed: (){ | ||||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://unitstocksbackend.thamringroup.web.id':hostAddress.text); | |||||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':hostAddress.text); | |||||
Navigator.pop(context); | Navigator.pop(context); | ||||
}, | }, | ||||
) | ) | ||||
@@ -306,7 +305,7 @@ class _LoginPageState extends State<LoginPage> { | |||||
prefs.setBool(keyClass.logged_in, false); | prefs.setBool(keyClass.logged_in, false); | ||||
prefs.remove(keyClass.cabang_id); | prefs.remove(keyClass.cabang_id); | ||||
prefs.remove(keyClass.company); | prefs.remove(keyClass.company); | ||||
prefs.remove(keyClass.user_id); | |||||
prefs.remove(keyClass.loginId); | |||||
}); | }); | ||||
}, | }, | ||||
child: Text('Cancel',style: TextStyle(color: Colors.indigo)), | child: Text('Cancel',style: TextStyle(color: Colors.indigo)), | ||||
@@ -334,7 +333,7 @@ class _LoginPageState extends State<LoginPage> { | |||||
// prefs.setBool(keyClass.logged_in, false); | // prefs.setBool(keyClass.logged_in, false); | ||||
// prefs.remove(keyClass.cabang_id); | // prefs.remove(keyClass.cabang_id); | ||||
// prefs.remove(keyClass.company); | // prefs.remove(keyClass.company); | ||||
// prefs.remove(keyClass.user_id); | |||||
// prefs.remove(keyClass.loginId); | |||||
// }); | // }); | ||||
// return false; | // return false; | ||||
// }, | // }, | ||||
@@ -424,7 +423,7 @@ class _LoginPageState extends State<LoginPage> { | |||||
// prefs.setBool(keyClass.logged_in, false); | // prefs.setBool(keyClass.logged_in, false); | ||||
// prefs.remove(keyClass.cabang_id); | // prefs.remove(keyClass.cabang_id); | ||||
// prefs.remove(keyClass.company); | // prefs.remove(keyClass.company); | ||||
// prefs.remove(keyClass.user_id); | |||||
// prefs.remove(keyClass.loginId); | |||||
// }); | // }); | ||||
// }, | // }, | ||||
// child: Text('Cancel',style: TextStyle(color: Colors.indigo)), | // child: Text('Cancel',style: TextStyle(color: Colors.indigo)), | ||||
@@ -31,6 +31,8 @@ void main() async{ | |||||
WidgetsFlutterBinding.ensureInitialized(); | WidgetsFlutterBinding.ensureInitialized(); | ||||
prefs = await SharedPreferences.getInstance(); | prefs = await SharedPreferences.getInstance(); | ||||
await registerCert(); | await registerCert(); | ||||
if( prefs.getString(keyClass.hostAddress) ==null)await prefs.setString(keyClass.hostAddress, "https://tbg.thamringroup.web.id/ords/tbs/unit/v1"); | |||||
await prefs.setString(keyClass.restTokenAddress, "https://tbg.thamringroup.web.id/ords/tbs/oauth/token"); | |||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) | SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) | ||||
.then((_) { | .then((_) { | ||||
runApp(new MyApp()); | runApp(new MyApp()); | ||||
@@ -7,14 +7,14 @@ packages: | |||||
name: archive | name: archive | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "2.0.13" | |||||
version: "3.1.5" | |||||
args: | args: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
name: args | name: args | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "1.6.0" | |||||
version: "2.3.0" | |||||
async: | async: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -64,13 +64,6 @@ packages: | |||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "1.15.0" | version: "1.15.0" | ||||
convert: | |||||
dependency: transitive | |||||
description: | |||||
name: convert | |||||
url: "https://pub.dartlang.org" | |||||
source: hosted | |||||
version: "2.1.1" | |||||
cross_file: | cross_file: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -84,7 +77,7 @@ packages: | |||||
name: crypto | name: crypto | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "2.1.4" | |||||
version: "3.0.1" | |||||
cupertino_icons: | cupertino_icons: | ||||
dependency: "direct main" | dependency: "direct main" | ||||
description: | description: | ||||
@@ -138,7 +131,7 @@ packages: | |||||
name: flutter_launcher_icons | name: flutter_launcher_icons | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "0.7.5" | |||||
version: "0.9.2" | |||||
flutter_plugin_android_lifecycle: | flutter_plugin_android_lifecycle: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -176,7 +169,7 @@ packages: | |||||
name: image | name: image | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "2.1.12" | |||||
version: "3.0.8" | |||||
image_picker: | image_picker: | ||||
dependency: "direct main" | dependency: "direct main" | ||||
description: | description: | ||||
@@ -247,6 +240,13 @@ packages: | |||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "1.7.0" | version: "1.7.0" | ||||
oauth2: | |||||
dependency: "direct main" | |||||
description: | |||||
name: oauth2 | |||||
url: "https://pub.dartlang.org" | |||||
source: hosted | |||||
version: "2.0.0" | |||||
path: | path: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -309,7 +309,7 @@ packages: | |||||
name: petitparser | name: petitparser | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "2.4.0" | |||||
version: "4.3.0" | |||||
photo_view: | photo_view: | ||||
dependency: "direct main" | dependency: "direct main" | ||||
description: | description: | ||||
@@ -489,14 +489,14 @@ packages: | |||||
name: xml | name: xml | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "3.6.1" | |||||
version: "5.3.0" | |||||
yaml: | yaml: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
name: yaml | name: yaml | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "2.2.1" | |||||
version: "3.1.0" | |||||
sdks: | sdks: | ||||
dart: ">=2.14.0 <3.0.0" | dart: ">=2.14.0 <3.0.0" | ||||
flutter: ">=2.5.0" | flutter: ">=2.5.0" |
@@ -1,7 +1,7 @@ | |||||
name: unitstocks | name: unitstocks | ||||
description: App to stock Thamrin Brothers Units | description: App to stock Thamrin Brothers Units | ||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||
version: 1.0.3+6 | |||||
version: 1.0.4+7 | |||||
environment: | environment: | ||||
sdk: ">=2.1.0 <3.0.0" | sdk: ">=2.1.0 <3.0.0" | ||||
@@ -27,6 +27,7 @@ dependencies: | |||||
# app_settings: | # app_settings: | ||||
# autocomplete_textfield: | # autocomplete_textfield: | ||||
barcode_scan: ^3.0.1 | barcode_scan: ^3.0.1 | ||||
oauth2: ^2.0.0 | |||||
dev_dependencies: | dev_dependencies: | ||||