@@ -67,7 +67,7 @@ if (keystorePropertiesFile.exists()) { | |||||
} | } | ||||
android { | android { | ||||
compileSdkVersion 30 | |||||
compileSdkVersion 31 | |||||
sourceSets { | sourceSets { | ||||
main.java.srcDirs += 'src/main/kotlin' | main.java.srcDirs += 'src/main/kotlin' | ||||
@@ -11,7 +11,7 @@ | |||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | ||||
<application | <application | ||||
android:name="io.flutter.app.FlutterApplication" | |||||
android:name="${applicationName}" | |||||
android:label="unitstocks" | android:label="unitstocks" | ||||
android:icon="@mipmap/launcher_icon"> | android:icon="@mipmap/launcher_icon"> | ||||
<activity | <activity | ||||
@@ -19,8 +19,10 @@ class DBHelper { | |||||
if (_db == null) _db = await initDb(); | if (_db == null) _db = await initDb(); | ||||
return _db; | return _db; | ||||
} | } | ||||
backupDb() async{ | |||||
try{ | |||||
backupDb(context) async{ | |||||
var result = {"STATUS":0,"MSG":"Backup gagal!"}; | |||||
await util.permissionCheck(context,pHandler.Permission.storage,()async{ | |||||
try{ | |||||
// if(dbPath == null || dbPath == ''){ | // if(dbPath == null || dbPath == ''){ | ||||
final database = await db; | final database = await db; | ||||
var dbPath = database.path; | var dbPath = database.path; | ||||
@@ -29,8 +31,6 @@ class DBHelper { | |||||
await prefs.remove(keyClass.backup_stock_id); | await prefs.remove(keyClass.backup_stock_id); | ||||
var stock_id = prefs.getString(keyClass.stock_id)??''; | var stock_id = prefs.getString(keyClass.stock_id)??''; | ||||
if(stock_id != ''){ | if(stock_id != ''){ | ||||
var cabang = prefs.getString(keyClass.cabang_id)??''; | |||||
if(cabang !='' && cabang != null ) await prefs.setString(keyClass.backup_cabang_id,cabang); | |||||
if(stock_id !='' && stock_id != null ) await prefs.setString(keyClass.backup_stock_id,stock_id); | if(stock_id !='' && stock_id != null ) await prefs.setString(keyClass.backup_stock_id,stock_id); | ||||
//backupDatabase | //backupDatabase | ||||
String backupPath = join(dbPath.substring(0,dbPath.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_UnitStocking.db"); | String backupPath = join(dbPath.substring(0,dbPath.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_UnitStocking.db"); | ||||
@@ -40,21 +40,23 @@ class DBHelper { | |||||
// dbFile.copySync(backupPath); | // dbFile.copySync(backupPath); | ||||
Uint8List byte = dbFile.readAsBytesSync(); | Uint8List byte = dbFile.readAsBytesSync(); | ||||
backupFile.writeAsBytesSync(byte); | backupFile.writeAsBytesSync(byte); | ||||
return {"STATUS":1,"MSG":"Backup Berhasil!"}; | |||||
result = {"STATUS":1,"MSG":"Backup Berhasil!"}; | |||||
} | } | ||||
else{ | else{ | ||||
return {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"}; | |||||
result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"}; | |||||
print('file backup dont exist tho'); | print('file backup dont exist tho'); | ||||
} | } | ||||
} | } | ||||
else{ | else{ | ||||
return {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"}; | |||||
result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"}; | |||||
} | } | ||||
} | } | ||||
catch(e){ | catch(e){ | ||||
print(e); | print(e); | ||||
return {"STATUS":0,"MSG":"Backup gagal!"}; | |||||
result = {"STATUS":0,"MSG":"Backup gagal!"}; | |||||
} | } | ||||
},customMessage: " untuk menyimpan data backup"); | |||||
return result; | |||||
} | } | ||||
initDb() async { | initDb() async { | ||||
io.Directory documentsDirectory = await getExternalStorageDirectory(); | io.Directory documentsDirectory = await getExternalStorageDirectory(); | ||||
@@ -63,26 +65,23 @@ class DBHelper { | |||||
return theDb; | return theDb; | ||||
} | } | ||||
restoreDb()async{ | |||||
restoreDb(context)async{ | |||||
var result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | var result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | ||||
if(prefs.getString(keyClass.stock_id) == null || prefs.getString(keyClass.stock_id) == prefs.getString(keyClass.backup_cabang_id)){ | |||||
if(prefs.getString(keyClass.backup_stock_id)!=null && prefs.getString(keyClass.backup_cabang_id)!= null){ | |||||
await util.permissionCheck(context,pHandler.Permission.storage,()async{ | |||||
io.Directory documentsDirectory = await getExternalStorageDirectory(); | |||||
String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_UnitStocking.db"); | |||||
io.File backupdbFile = io.File(backupPath); | |||||
if(backupdbFile.existsSync()){ | |||||
io.File dbFile = new io.File(join(documentsDirectory.path, "UnitStocking.db")); | |||||
Uint8List byte = backupdbFile.readAsBytesSync(); | |||||
dbFile.writeAsBytesSync(byte); | |||||
result = {"STATUS":1,"MSG":"File Back up successfull"}; | |||||
await DBHelper.database.closeDb(); | |||||
} | |||||
else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | |||||
},customMessage: " untuk menyimpan data backup"); | |||||
} | |||||
if(prefs.getString(keyClass.backup_stock_id)!=null){ | |||||
await util.permissionCheck(context,pHandler.Permission.storage,()async{ | |||||
io.Directory documentsDirectory = await getExternalStorageDirectory(); | |||||
String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_UnitStocking.db"); | |||||
io.File backupdbFile = io.File(backupPath); | |||||
if(backupdbFile.existsSync()){ | |||||
io.File dbFile = new io.File(join(documentsDirectory.path, "UnitStocking.db")); | |||||
Uint8List byte = backupdbFile.readAsBytesSync(); | |||||
dbFile.writeAsBytesSync(byte); | |||||
result = {"STATUS":1,"MSG":"File Back up successfull"}; | |||||
await DBHelper.database.closeDb(); | |||||
} | |||||
else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | |||||
},customMessage: " untuk menyimpan data backup"); | |||||
} | } | ||||
else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | |||||
return result; | return result; | ||||
} | } | ||||
@@ -37,7 +37,7 @@ class _HomePageState extends State<HomePage> { | |||||
String state = ''; | String state = ''; | ||||
final hostAddress = new TextEditingController(); | final hostAddress = new TextEditingController(); | ||||
clearData(context,{backup=true})async{ | |||||
clearData(context)async{ | |||||
setState(() { | setState(() { | ||||
progressDL = null; | progressDL = null; | ||||
isLoading = false; | isLoading = false; | ||||
@@ -63,8 +63,6 @@ class _HomePageState extends State<HomePage> { | |||||
File db = File(path); | File db = File(path); | ||||
if(db.existsSync()){ | if(db.existsSync()){ | ||||
await DBHelper.database.closeDb(); | await DBHelper.database.closeDb(); | ||||
//auto backup | |||||
// if(backup)await DBHelper.database.backupDb(context); | |||||
db.deleteSync(); | db.deleteSync(); | ||||
await prefs.remove(keyClass.lastDownload); | await prefs.remove(keyClass.lastDownload); | ||||
await prefs.remove(keyClass.lastUpload); | await prefs.remove(keyClass.lastUpload); | ||||
@@ -281,6 +279,7 @@ class _HomePageState extends State<HomePage> { | |||||
await prefs.remove(keyClass.lastUpload); | await prefs.remove(keyClass.lastUpload); | ||||
await prefs.remove(keyClass.targetProccess); | await prefs.remove(keyClass.targetProccess); | ||||
await prefs.remove(keyClass.submitProccess); | await prefs.remove(keyClass.submitProccess); | ||||
await prefs.remove(keyClass.stock_id); | |||||
lastUpload = ''; | lastUpload = ''; | ||||
lastDownload = ''; | lastDownload = ''; | ||||
timeString = ''; | timeString = ''; | ||||
@@ -674,69 +673,92 @@ class _HomePageState extends State<HomePage> { | |||||
Navigator.pushNamed(context, '/login'); | Navigator.pushNamed(context, '/login'); | ||||
} | } | ||||
if(value == 'backup'){ | if(value == 'backup'){ | ||||
var result = await DBHelper.database.backupDb(); | |||||
var result = await DBHelper.database.backupDb(context); | |||||
util.showFlushbar(context, result['MSG'],color: result["STATUS"]==1?Colors.grey:Colors.red); | util.showFlushbar(context, result['MSG'],color: result["STATUS"]==1?Colors.grey:Colors.red); | ||||
} | } | ||||
if(value == 'restore'){ | if(value == 'restore'){ | ||||
bool isRestore = await showDialog(context: context,builder: (context)=>AlertDialog( | |||||
title: Text('Restore Data ?'), | |||||
content: Text('Restore data akan menghapus dan mengganti data unit dan cabang yang ada dengan data backup.'), | |||||
actions: <Widget>[ | |||||
TextButton( | |||||
child: Text('Proceed'), | |||||
onPressed: ()async{ | |||||
Navigator.pop(context,true); | |||||
}, | |||||
), | |||||
TextButton( | |||||
child: Text('Cancel'), | |||||
onPressed: ()=>Navigator.pop(context,false), | |||||
) | |||||
], | |||||
)); | |||||
if(isRestore??false){ | |||||
var response; | |||||
bool isclear; | |||||
Directory documentsDirectory = await getExternalStorageDirectory(); | |||||
String path = join(documentsDirectory.path, "UnitStocking.db"); | |||||
File db = File(path); | |||||
if(db.existsSync()){ | |||||
isclear = await clearData(context,backup: false); | |||||
} | |||||
else{ | |||||
isclear = true; | |||||
} | |||||
if(isclear??false){ | |||||
var result = await DBHelper.database.restoreDb(); | |||||
if(result["STATUS"]==1){ | |||||
await prefs.remove(keyClass.lastDownload); | |||||
await prefs.remove(keyClass.lastUpload); | |||||
await prefs.remove(keyClass.targetProccess); | |||||
await prefs.remove(keyClass.submitProccess); | |||||
setState(() { | |||||
lastUpload = ''; | |||||
lastDownload = ''; | |||||
timeString = ''; | |||||
}); | |||||
valueTab value = await DBHelper.database.getValue(keyClass.tgl_start); | |||||
if(value != null)await prefs.setString(keyClass.lastDownload, DateFormat('dd-MM-yyyy HH:mm:ss').parse(value.value).toIso8601String()); | |||||
else { | |||||
await prefs.setString(keyClass.lastDownload, DateTime.now().toIso8601String()); | |||||
if(prefs.getString(keyClass.stock_id) == null){ | |||||
util.showFlushbar(context, "Data Unit cabang tidak ditemukan. Silakan get data terlbih dahulu."); | |||||
} | |||||
else{ | |||||
if(prefs.getString(keyClass.stock_id) == prefs.getString(keyClass.backup_stock_id)){ | |||||
String company = prefs.getString(keyClass.company); | |||||
String stock_taking_id = prefs.getString(keyClass.stock_id); | |||||
String stockState = ''; | |||||
if(company!=null&&stock_taking_id!=null){ | |||||
var result = await util.JsonDataPostRaw({"company":company,"stockTakingId":stock_taking_id}, '${prefs.getString(keyClass.hostAddress)}/stock_taking/state/'); | |||||
if(result['STATUS']==1){ | |||||
stockState = result['DATA']; | |||||
} | } | ||||
value = await DBHelper.database.getValue(keyClass.stock_id); | |||||
if(value != null) await prefs.setString(keyClass.stock_id,value.value); | |||||
else { | |||||
await prefs.setString(keyClass.stock_id,prefs.getString(keyClass.backup_stock_id)); | |||||
} | |||||
if(['Open','Submitted'].contains(stockState)){ | |||||
bool isRestore = await showDialog(context: context,builder: (context)=>AlertDialog( | |||||
title: Text('Restore Data ?'), | |||||
content: Text('Restore data akan menghapus dan mengganti data unit dan cabang yang ada dengan data backup.'), | |||||
actions: <Widget>[ | |||||
TextButton( | |||||
child: Text('Proceed'), | |||||
onPressed: ()async{ | |||||
Navigator.pop(context,true); | |||||
}, | |||||
), | |||||
TextButton( | |||||
child: Text('Cancel'), | |||||
onPressed: ()=>Navigator.pop(context,false), | |||||
) | |||||
], | |||||
)); | |||||
if(isRestore??false){ | |||||
var response; | |||||
bool isclear; | |||||
Directory documentsDirectory = await getExternalStorageDirectory(); | |||||
String path = join(documentsDirectory.path, "UnitStocking.db"); | |||||
File db = File(path); | |||||
if(db.existsSync()){ | |||||
isclear = await clearData(context); | |||||
} | |||||
else{ | |||||
isclear = true; | |||||
} | |||||
if(isclear??false){ | |||||
var result = await DBHelper.database.restoreDb(context); | |||||
if(result["STATUS"]==1){ | |||||
await prefs.remove(keyClass.lastDownload); | |||||
await prefs.remove(keyClass.lastUpload); | |||||
await prefs.remove(keyClass.targetProccess); | |||||
await prefs.remove(keyClass.submitProccess); | |||||
setState(() { | |||||
lastUpload = ''; | |||||
lastDownload = ''; | |||||
timeString = ''; | |||||
}); | |||||
valueTab value = await DBHelper.database.getValue(keyClass.tgl_start); | |||||
if(value != null)await prefs.setString(keyClass.lastDownload, DateFormat('dd-MM-yyyy HH:mm:ss').parse(value.value).toIso8601String()); | |||||
else { | |||||
await prefs.setString(keyClass.lastDownload, DateTime.now().toIso8601String()); | |||||
} | |||||
value = await DBHelper.database.getValue(keyClass.stock_id); | |||||
if(value != null) await prefs.setString(keyClass.stock_id,value.value); | |||||
else { | |||||
await prefs.setString(keyClass.stock_id,prefs.getString(keyClass.backup_stock_id)); | |||||
} | |||||
loadState(); | |||||
setState(() { | |||||
lastDownload = prefs.getString(keyClass.lastDownload); | |||||
}); | |||||
} | |||||
response = result["MSG"]; | |||||
} | |||||
if(response != null)util.showFlushbar(context, response); | |||||
} | } | ||||
await prefs.setString(keyClass.cabang_id,prefs.getString(keyClass.backup_cabang_id)); | |||||
loadState(); | |||||
setState(() { | |||||
lastDownload = prefs.getString(keyClass.lastDownload); | |||||
}); | |||||
} | } | ||||
response = result["MSG"]; | |||||
else{ | |||||
util.showFlushbar(context, "Stocking Unit sudah selesai dan tidak perlu di restore"); | |||||
} | |||||
} | |||||
else { | |||||
util.showFlushbar(context, "File Backup tidak ditemukan atau sudah selesai"); | |||||
} | } | ||||
if(response != null)util.showFlushbar(context, response); | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
@@ -247,6 +247,13 @@ packages: | |||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "0.12.11" | version: "0.12.11" | ||||
material_color_utilities: | |||||
dependency: transitive | |||||
description: | |||||
name: material_color_utilities | |||||
url: "https://pub.dartlang.org" | |||||
source: hosted | |||||
version: "0.1.3" | |||||
meta: | meta: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -524,7 +531,7 @@ packages: | |||||
name: test_api | name: test_api | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "0.4.3" | |||||
version: "0.4.8" | |||||
typed_data: | typed_data: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -580,7 +587,7 @@ packages: | |||||
name: url_launcher_web | name: url_launcher_web | ||||
url: "https://pub.dartlang.org" | url: "https://pub.dartlang.org" | ||||
source: hosted | source: hosted | ||||
version: "2.0.6" | |||||
version: "2.0.8" | |||||
url_launcher_windows: | url_launcher_windows: | ||||
dependency: transitive | dependency: transitive | ||||
description: | description: | ||||
@@ -625,4 +632,4 @@ packages: | |||||
version: "3.1.0" | version: "3.1.0" | ||||
sdks: | sdks: | ||||
dart: ">=2.15.0 <3.0.0" | dart: ">=2.15.0 <3.0.0" | ||||
flutter: ">=2.8.0" | |||||
flutter: ">=2.10.0" |