Flutter app for Asset Management
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

374 rader
14 KiB

  1. import 'dart:typed_data';
  2. import 'package:assetstock/util/Models.dart';
  3. import 'package:sqflite/sqflite.dart';
  4. import 'package:path_provider/path_provider.dart';
  5. import 'prefsKey.dart';
  6. import 'dart:io';
  7. import 'dart:async';
  8. import 'package:path/path.dart';
  9. import 'package:intl/intl.dart';
  10. import 'package:assetstock/main.dart';
  11. import 'package:permission_handler/permission_handler.dart' as pHandler;
  12. class DBHelper{
  13. DBHelper._();
  14. static final DBHelper database = DBHelper._();
  15. Database _db;
  16. Future<Database> get db async {
  17. if (_db != null) return _db;
  18. _db = await initDb();
  19. return _db;
  20. }
  21. backupDb(context) async{
  22. var result = {"STATUS":0,"MSG":"Backup gagal!"};
  23. var stock_id = prefs.getString(keyClass.dbName)??'';
  24. if(stock_id != ''){
  25. await util.permissionCheck(context,pHandler.Permission.storage,()async{
  26. try{
  27. // if(dbPath == null || dbPath == ''){
  28. final database = await db;
  29. var dbPath = database.path;
  30. await DBHelper.database.closeDb();
  31. // }
  32. await prefs.remove(keyClass.backup_stock_id);
  33. if(stock_id !='' && stock_id != null ) await prefs.setString(keyClass.backup_stock_id,stock_id);
  34. //backupDatabase
  35. print(["aaaaaa",dbPath]);
  36. String backupPath = join(dbPath.substring(0,dbPath.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_assets.db");
  37. print("bbbbbb");
  38. File backupFile = new File(backupPath);
  39. File dbFile = File(dbPath);
  40. if(dbFile.existsSync()){
  41. // dbFile.copySync(backupPath);
  42. Uint8List byte = dbFile.readAsBytesSync();
  43. backupFile.writeAsBytesSync(byte);
  44. result = {"STATUS":1,"MSG":"Backup Berhasil!"};
  45. }
  46. else{
  47. result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"};
  48. print('file backup dont exist tho');
  49. }
  50. }
  51. catch(e){
  52. print("backup gagal $e");
  53. result = {"STATUS":0,"MSG":"Backup gagal!"};
  54. }
  55. },customMessage: " untuk menyimpan data backup");
  56. }
  57. else{
  58. result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"};
  59. }
  60. return result;
  61. }
  62. restoreDb(context)async{
  63. var result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"};
  64. if(prefs.getString(keyClass.backup_stock_id)!=null){
  65. await util.permissionCheck(context,pHandler.Permission.storage,()async{
  66. Directory documentsDirectory = await getExternalStorageDirectory();
  67. String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_assets.db");
  68. File backupdbFile = File(backupPath);
  69. if(backupdbFile.existsSync()){
  70. File dbFile = new File(join(documentsDirectory.path, "assets.db"));
  71. Uint8List byte = backupdbFile.readAsBytesSync();
  72. dbFile.writeAsBytesSync(byte);
  73. result = {"STATUS":1,"MSG":"File Back up successfull"};
  74. await DBHelper.database.closeDb();
  75. }
  76. else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"};
  77. },customMessage: " untuk menyimpan data backup");
  78. }
  79. return result;
  80. }
  81. initDb() async {
  82. Directory documentsDirectory = await getExternalStorageDirectory();
  83. String path = join(documentsDirectory.path, "assets.db");
  84. var theDb = await openDatabase(path, version: 1,onCreate: _onCreate);
  85. return theDb;
  86. }
  87. closeDb() async {
  88. if(_db!=null){
  89. final database = await db;
  90. await database.close();
  91. _db = null;
  92. }
  93. }
  94. void _onCreate(Database db, int version) async {
  95. Directory documentsDirectory = await getExternalStorageDirectory();
  96. String path = join(documentsDirectory.path, "assets.db");
  97. File file = File(path);
  98. print('Database created, ${file.lengthSync()}');
  99. }
  100. insertAsset(Asset newAsset) async{
  101. try{
  102. final database = await db;
  103. await database.rawInsert("Insert into ${tableName.insert} (${columnName.tag_number},${columnName.blob},${columnName.keterangan}) VALUES(?,?,?)", [newAsset.tag_number,newAsset.blob,newAsset.keterangan]);
  104. await database.rawQuery("UPDATE ${tableName.ref} SET ${columnName.flag} = 'TRUE' WHERE ${columnName.tag_number} = '${newAsset.tag_number}'");
  105. return true;
  106. }
  107. catch(e){
  108. print(e);
  109. return null;
  110. }
  111. }
  112. updateAsset(Asset newAsset) async{
  113. try{
  114. final database = await db;
  115. 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]);
  116. return true;
  117. }
  118. catch(e){
  119. print(e);
  120. return null;
  121. }
  122. }
  123. getBlobbyTag(tag) async{
  124. try{
  125. final database = await db;
  126. var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tag]);
  127. // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
  128. // print(a);
  129. return res.isNotEmpty ? Asset.fromJson(res.first): null;
  130. }
  131. catch(e){
  132. print(e);
  133. return null;
  134. }
  135. }
  136. getBlobbyNo(no) async{
  137. try{
  138. final database = await db;
  139. var res = await database.query(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  140. // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
  141. // print(a);
  142. return res.isNotEmpty ? Asset.fromJson(res.first): null;
  143. }
  144. catch(e){
  145. print(e);
  146. return null;
  147. }
  148. }
  149. // getRefBlob(tagNumber)async{
  150. // try{
  151. // final database = await db;
  152. // var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  153. // // var a = await database.rawQuery("select count(*) from ${tableName.insert}");
  154. // // print(a);
  155. // return res.isNotEmpty ? Asset.fromJson(res.first): null;
  156. // }
  157. // catch(e){
  158. // print(e);
  159. // return null;
  160. // }
  161. // }
  162. searchbyTagNumber(tagNumber) async{
  163. try{
  164. final database = await db;
  165. var exist = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  166. var res = await database.query(tableName.ref,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  167. if(res.isEmpty&&exist.isNotEmpty){
  168. var appendAsset = new Asset();
  169. appendAsset.tag_number=tagNumber;
  170. return {"EXIST":exist.isNotEmpty?true:false,"DATA":appendAsset};
  171. }
  172. else return {"EXIST":exist.isNotEmpty?true:false,"DATA":res.isNotEmpty ? Asset.fromJson(res.first): null};
  173. }
  174. catch(e){
  175. print(e);
  176. return null;
  177. }
  178. }
  179. getAllKategori() async{
  180. try{
  181. final database = await db;
  182. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.kategori}) ${columnName.kategori} from ${tableName.ref} ORDER BY UPPER(${columnName.kategori})");
  183. List<Asset> list =
  184. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  185. return list;
  186. }
  187. catch(e){
  188. print(e);
  189. return null;
  190. }
  191. }
  192. getAllLocation() async{
  193. try{
  194. final database = await db;
  195. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.lantai}) ${columnName.lantai} from ${tableName.ref} ORDER BY UPPER(${columnName.lantai})");
  196. List<Asset> list =
  197. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  198. return list;
  199. }
  200. catch(e){
  201. print(e);
  202. return null;
  203. }
  204. }
  205. getAllRuangan() async{
  206. try{
  207. final database = await db;
  208. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} ORDER BY UPPER(${columnName.ruang})");
  209. List<Asset> list =
  210. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  211. return list;
  212. }
  213. catch(e){
  214. print(e);
  215. return null;
  216. }
  217. }
  218. getLantaiRuangan(lantai) async{
  219. try{
  220. final database = await db;
  221. 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})");
  222. List<Asset> list =
  223. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  224. return list;
  225. }
  226. catch(e){
  227. print(e);
  228. return null;
  229. }
  230. }
  231. getAllAsset() async {
  232. try{
  233. final database = await db;
  234. 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}");
  235. List<Asset> list =
  236. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  237. return list;
  238. }
  239. catch(e){
  240. print(e);
  241. return null;
  242. }
  243. }
  244. filterAllAsset(search) async {
  245. try{
  246. final database = await db;
  247. 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}");
  248. List<Asset> list =
  249. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  250. return list;
  251. }
  252. catch(e){
  253. print(e);
  254. return null;
  255. }
  256. }
  257. getAllInsertAsset() async {
  258. try{
  259. final database = await db;
  260. // 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}");
  261. 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}");
  262. List<Asset> list =
  263. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  264. return list;
  265. }
  266. catch(e){
  267. print(e);
  268. return null;
  269. }
  270. }
  271. deleteInsertAsset(no) async{
  272. try{
  273. final database = await db;
  274. // 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]);
  275. await database.delete(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  276. return true;
  277. }
  278. catch(e){
  279. print(e);
  280. return null;
  281. }
  282. }
  283. filterAllInsertAsset(search) async {
  284. try{
  285. final database = await db;
  286. // 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%'");
  287. 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%'");
  288. List<Asset> list =
  289. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  290. return list;
  291. }
  292. catch(e){
  293. print(e);
  294. return null;
  295. }
  296. }
  297. countRows(tableName)async{
  298. try{
  299. final database = await db;
  300. var res = await database.rawQuery("SELECT Count(*) Count FROM $tableName");
  301. return res.isEmpty?0:Count.fromJson(res.first).count;
  302. }
  303. catch(e){
  304. print(e);
  305. return null;
  306. }
  307. }
  308. getDbName()async{
  309. try{
  310. final database = await db;
  311. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'DB_MASTER_NAME'");
  312. return res.isEmpty?null:res.first[columnName.value];
  313. }
  314. catch(e){
  315. print(e);
  316. return null;
  317. }
  318. }
  319. getBUnit()async{
  320. try{
  321. final database = await db;
  322. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'BUSINESS_UNIT'");
  323. return res.isEmpty?null:res.first[columnName.value];
  324. }
  325. catch(e){
  326. print(e);
  327. return null;
  328. }
  329. }
  330. setOpenState()async{
  331. try{
  332. final database = await db;
  333. var check_KEY = await database.rawQuery("SELECT 1 FROM ${tableName.key} where ${columnName.key} = 'STATE'");
  334. if (check_KEY.length<=0){
  335. await database.insert(tableName.key, {columnName.key:"STATE",columnName.value:"OPEN"});
  336. }
  337. else{
  338. await database.update(tableName.key, {columnName.value:"OPEN"},where: "${columnName.key} = ?",whereArgs: ['STATE']);
  339. }
  340. await database.update(tableName.key, {columnName.value:DateFormat("YYYY-MM-DD HH:mm:ss").format(DateTime.now())},where: "${columnName.key} = ?",whereArgs: ['START_DATE']);
  341. }
  342. catch(e){
  343. print(e);
  344. return null;
  345. }
  346. }
  347. }