|
- import 'dart:typed_data';
-
- import 'package:assetstock/util/Models.dart';
- import 'package:sqflite/sqflite.dart';
- import 'package:path_provider/path_provider.dart';
- import 'prefsKey.dart';
- import 'dart:io';
- import 'dart:async';
- import 'package:path/path.dart';
- import 'package:intl/intl.dart';
- import 'package:assetstock/main.dart';
- import 'package:permission_handler/permission_handler.dart' as pHandler;
-
-
-
- class DBHelper{
- DBHelper._();
-
- static final DBHelper database = DBHelper._();
- Database _db;
-
- Future<Database> get db async {
- if (_db != null) return _db;
- _db = await initDb();
- return _db;
- }
-
- backupDb({context}) async{
- var result = {"STATUS":0,"MSG":"Backup gagal!"};
- var stock_id = prefs.getString(keyClass.dbName)??'';
- if(stock_id != ''){
- await util.permissionCheck(context,pHandler.Permission.storage,()async{
- try{
- // if(dbPath == null || dbPath == ''){
- final database = await db;
- var dbPath = database.path;
- await DBHelper.database.closeDb();
- // }
- await prefs.remove(keyClass.backup_stock_id);
- if(stock_id !='' && stock_id != null ) await prefs.setString(keyClass.backup_stock_id,stock_id);
- //backupDatabase
- // String backupPath = join(dbPath.substring(0,dbPath.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_assets.db");
- Directory documentsDirectory = await getApplicationDocumentsDirectory();
- String backupPath = join(documentsDirectory.path, "${prefs.getString(keyClass.backup_stock_id)}_assets.db");
- File backupFile = new File(backupPath);
- File dbFile = File(dbPath);
- if(dbFile.existsSync()){
- // dbFile.copySync(backupPath);
- Uint8List byte = dbFile.readAsBytesSync();
- backupFile.writeAsBytesSync(byte);
- result = {"STATUS":1,"MSG":"Backup Berhasil!"};
- }
- else{
- result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"};
- print('file backup dont exist tho');
- }
- }
- catch(e){
- print("backup gagal $e");
- result = {"STATUS":0,"MSG":"Backup gagal!"};
- }
- },customMessage: " untuk menyimpan data backup");
- }
- else{
- result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"};
- }
-
- return result;
- }
- restoreDb(context)async{
- var result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"};
- if(prefs.getString(keyClass.backup_stock_id)!=null){
- await util.permissionCheck(context,pHandler.Permission.storage,()async{
- Directory documentsDirectory = await getApplicationDocumentsDirectory();
- // String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_assets.db");
- String backupPath = join(documentsDirectory.path, "${prefs.getString(keyClass.backup_stock_id)}_assets.db");
- File backupdbFile = File(backupPath);
- if(backupdbFile.existsSync()){
- File dbFile = new File(join(documentsDirectory.path, "assets.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");
- }
- return result;
- }
-
- initDb() async {
- Directory documentsDirectory = await getApplicationDocumentsDirectory();
- String path = join(documentsDirectory.path, "assets.db");
- var theDb = await openDatabase(path, version: 1,onCreate: _onCreate);
- return theDb;
- }
- closeDb() async {
- if(_db!=null){
- final database = await db;
- await database.close();
- _db = null;
- }
- }
-
- void _onCreate(Database db, int version) async {
- Directory documentsDirectory = await getApplicationDocumentsDirectory();
- String path = join(documentsDirectory.path, "assets.db");
- File file = File(path);
- print('Database created, ${file.lengthSync()}');
- }
-
- autoBackup(database)async{
- var checkCount = await database.query(tableName.insert,where: "${columnName.blob} is not null");
- return checkCount.isNotEmpty&& checkCount.length%5==0;
- }
-
- insertAsset(Asset newAsset) async{
- try{
- final database = await db;
- await database.rawInsert("Insert into ${tableName.insert} (${columnName.tag_number},${columnName.blob},${columnName.keterangan}) VALUES(?,?,?)", [newAsset.tag_number,newAsset.blob,newAsset.keterangan]);
- await database.rawQuery("UPDATE ${tableName.ref} SET ${columnName.flag} = 'TRUE' WHERE ${columnName.tag_number} = '${newAsset.tag_number}'");
-
- if(await autoBackup(database)){
- backupDb();
- }
-
- return true;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- updateAsset(Asset newAsset) async{
- try{
- final database = await db;
- await database.rawUpdate("Update ${tableName.insert} SET ${columnName.blob} = ?, ${columnName.tag_number} = ?, ${columnName.keterangan} = ? WHERE ${columnName.no} = ?", [newAsset.blob,newAsset.tag_number,newAsset.keterangan,newAsset.no]);
-
- if(await autoBackup(database)){
- backupDb();
- }
-
- return true;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- getBlobbyTag(tag) async{
- try{
- final database = await db;
- var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tag]);
- // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
- // print(a);
- return res.isNotEmpty ? Asset.fromJson(res.first): null;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- getBlobbyNo(no) async{
- try{
- final database = await db;
- var res = await database.query(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
- // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
- // print(a);
- return res.isNotEmpty ? Asset.fromJson(res.first): null;
- }
- catch(e){
- print(e);
- return null;
- }
- }
- // getRefBlob(tagNumber)async{
- // try{
- // final database = await db;
- // var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
- // // var a = await database.rawQuery("select count(*) from ${tableName.insert}");
- // // print(a);
- // return res.isNotEmpty ? Asset.fromJson(res.first): null;
- // }
- // catch(e){
- // print(e);
- // return null;
- // }
- // }
- searchbyTagNumber(tagNumber) async{
- try{
- final database = await db;
- var exist = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
- var res = await database.query(tableName.ref,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
- if(res.isEmpty&&exist.isNotEmpty){
- var appendAsset = new Asset();
- appendAsset.tag_number=tagNumber;
- return {"EXIST":exist.isNotEmpty?true:false,"DATA":appendAsset};
- }
- else return {"EXIST":exist.isNotEmpty?true:false,"DATA":res.isNotEmpty ? Asset.fromJson(res.first): null};
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- getAllKategori() async{
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.kategori}) ${columnName.kategori} from ${tableName.ref} ORDER BY UPPER(${columnName.kategori})");
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- getAllLocation() async{
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.lantai}) ${columnName.lantai} from ${tableName.ref} ORDER BY UPPER(${columnName.lantai})");
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
- getAllRuangan() async{
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} ORDER BY UPPER(${columnName.ruang})");
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- getLantaiRuangan(lantai) async{
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} WHERE UPPER(${columnName.lantai}) = UPPER('$lantai') ORDER BY UPPER(${columnName.ruang})");
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
-
- getAllAsset() async {
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT a.${columnName.tag_number}, a.${columnName.asset_desc},a.${columnName.kategori}, a.${columnName.ruang}, a.${columnName.lantai}, a.${columnName.gedung}, a.${columnName.flag}, b.${columnName.blob} from ${tableName.ref} a LEFT JOIN ${tableName.insert} b on a.${columnName.tag_number} = b.${columnName.tag_number} ORDER BY a.${columnName.flag},a.${columnName.ruang}");
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- filterAllAsset(search) async {
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT * FROM (SELECT a.${columnName.tag_number}, a.${columnName.asset_desc},a.${columnName.kategori}, a.${columnName.ruang}, a.${columnName.lantai}, a.${columnName.gedung}, a.${columnName.flag}, b.${columnName.blob} from ${tableName.ref} a LEFT JOIN ${tableName.insert} b on a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%' ORDER BY ${columnName.flag},${columnName.ruang}");
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- getAllInsertAsset() async {
- try{
- final database = await db;
- // var res = await database.rawQuery("SELECT a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} FROM ${tableName.insert} a, ${tableName.ref} b WHERE a.${columnName.tag_number} = b.${columnName.tag_number}");
- var res = await database.rawQuery("select a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} from ${tableName.insert} a LEFT JOIN ${tableName.ref} b ON a.${columnName.tag_number} = b.${columnName.tag_number}");
-
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- deleteInsertAsset(no) async{
- try{
- final database = await db;
- // await database.rawUpdate("Update ${tableName.insert} SET ${columnName.blob} = ?, ${columnName.tag_number} = ?, ${columnName.keterangan} = ? WHERE ${columnName.no} = ?", [newAsset.blob,newAsset.tag_number,newAsset.keterangan,newAsset.no]);
- await database.delete(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
- return true;
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- filterAllInsertAsset(search) async {
- try{
- final database = await db;
- // var res = await database.rawQuery("SELECT * FROM (SELECT a.${columnName.no},a.${columnName.keterangan},a.${columnName.tag_number},a.${columnName.blob}, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} FROM ${tableName.insert} a, ${tableName.ref} b WHERE a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%'");
- var res = await database.rawQuery("SELECT * FROM (select a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} from ${tableName.insert} a LEFT JOIN ${tableName.ref} b ON a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%'");
-
- List<Asset> list =
- res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
- return list;
- }
- catch(e){
- print(e);
- return null;
- }
- }
- countRows(tableName)async{
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT Count(*) Count FROM $tableName");
- return res.isEmpty?0:Count.fromJson(res.first).count;
- }
- catch(e){
- print(e);
- return null;
- }
- }
- getDbName()async{
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'DB_MASTER_NAME'");
- return res.isEmpty?null:res.first[columnName.value];
- }
- catch(e){
- print(e);
- return null;
- }
- }
- getBUnit()async{
- try{
- final database = await db;
- var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'BUSINESS_UNIT'");
- return res.isEmpty?null:res.first[columnName.value];
- }
- catch(e){
- print(e);
- return null;
- }
- }
- setOpenState()async{
- try{
- final database = await db;
- var check_KEY = await database.rawQuery("SELECT 1 FROM ${tableName.key} where ${columnName.key} = 'STATE'");
- if (check_KEY.length<=0){
- await database.insert(tableName.key, {columnName.key:"STATE",columnName.value:"OPEN"});
- }
- else{
- await database.update(tableName.key, {columnName.value:"OPEN"},where: "${columnName.key} = ?",whereArgs: ['STATE']);
- }
- await database.update(tableName.key, {columnName.value:DateFormat("YYYY-MM-DD HH:mm:ss").format(DateTime.now())},where: "${columnName.key} = ?",whereArgs: ['START_DATE']);
- }
- catch(e){
- print(e);
- return null;
- }
- }
-
- }
|