Flutter app for Asset Management
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

374 lignes
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. }