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'; class DBHelper{ DBHelper._(); static final DBHelper database = DBHelper._(); Database _db; Future get db async { if (_db != null) return _db; _db = await initDb(); return _db; } 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()}'); } 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}'"); 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]); 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 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 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 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 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 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 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 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 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; } } }