Business Login Flutter Apps
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

372 rindas
13 KiB

  1. import 'dart:async';
  2. import 'dart:io' as io;
  3. import '../Model/unit.dart';
  4. import 'package:path/path.dart';
  5. import 'package:path_provider/path_provider.dart';
  6. import 'package:sqflite/sqflite.dart';
  7. import 'keys.dart';
  8. import '../main.dart';
  9. import 'package:permission_handler/permission_handler.dart' as pHandler;
  10. import 'dart:typed_data';
  11. class DBHelper {
  12. DBHelper._();
  13. static final DBHelper database = DBHelper._();
  14. static Database? _db;
  15. Future<Database> get db async {
  16. _db ??= await initDb();
  17. Database database = _db!;
  18. return database;
  19. }
  20. backupDb({context}) async{
  21. var result = {"STATUS":0,"MSG":"Backup gagal!"};
  22. var stock_id = prefs.getString(Keys.stockId)??'';
  23. if(stock_id != ''){
  24. if(context!= null){
  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(Keys.backupStockId);
  33. if(stock_id !='' && stock_id != null ) await prefs.setString(Keys.backupStockId,stock_id);
  34. //backupDatabase
  35. String backupPath = join(dbPath.substring(0,dbPath.indexOf("/Android"))+"/Download", "${prefs.getString(Keys.backupStockId)}_UnitStocking.db");
  36. io.File backupFile = new io.File(backupPath);
  37. io.File dbFile = io.File(dbPath);
  38. if(dbFile.existsSync()){
  39. // dbFile.copySync(backupPath);
  40. Uint8List byte = dbFile.readAsBytesSync();
  41. backupFile.writeAsBytesSync(byte);
  42. result = {"STATUS":1,"MSG":"Backup Berhasil!"};
  43. }
  44. else{
  45. result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"};
  46. print('file backup dont exist tho');
  47. }
  48. }
  49. catch(e){
  50. print(e);
  51. result = {"STATUS":0,"MSG":"Backup gagal!"};
  52. }
  53. },customMessage: " untuk menyimpan data backup");
  54. }
  55. else{
  56. try{
  57. // if(dbPath == null || dbPath == ''){
  58. final database = await db;
  59. var dbPath = database.path;
  60. await DBHelper.database.closeDb();
  61. // }
  62. await prefs.remove(Keys.backupStockId);
  63. if(stock_id !='' && stock_id != null ) await prefs.setString(Keys.backupStockId,stock_id);
  64. //backupDatabase
  65. String backupPath = join(dbPath.substring(0,dbPath.indexOf("/Android"))+"/Download", "${prefs.getString(Keys.backupStockId)}_UnitStocking.db");
  66. io.File backupFile = new io.File(backupPath);
  67. io.File dbFile = io.File(dbPath);
  68. if(dbFile.existsSync()){
  69. // dbFile.copySync(backupPath);
  70. Uint8List byte = dbFile.readAsBytesSync();
  71. backupFile.writeAsBytesSync(byte);
  72. result = {"STATUS":1,"MSG":"Backup Berhasil!"};
  73. }
  74. else{
  75. result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"};
  76. print('file backup dont exist tho');
  77. }
  78. }
  79. catch(e){
  80. print(e);
  81. result = {"STATUS":0,"MSG":"Backup gagal!"};
  82. }
  83. }
  84. }
  85. else{
  86. result = {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"};
  87. }
  88. return result;
  89. }
  90. restoreDb(context)async{
  91. var result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"};
  92. if(prefs.getString(Keys.backupStockId)!=null){
  93. await util.permissionCheck(context,pHandler.Permission.storage,()async{
  94. io.Directory? documentsDirectory = await getExternalStorageDirectory();
  95. String backupPath = join(documentsDirectory!.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download", "${prefs.getString(Keys.backupStockId)}_UnitStocking.db");
  96. io.File backupdbFile = io.File(backupPath);
  97. if(backupdbFile.existsSync()){
  98. io.File dbFile = new io.File(join(documentsDirectory.path, "UnitStocking.db"));
  99. Uint8List byte = backupdbFile.readAsBytesSync();
  100. dbFile.writeAsBytesSync(byte);
  101. result = {"STATUS":1,"MSG":"Restore data successfull"};
  102. await DBHelper.database.closeDb();
  103. }
  104. else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"};
  105. },customMessage: " untuk menyimpan data backup");
  106. }
  107. return result;
  108. }
  109. initDb() async {
  110. io.Directory? documentsDirectory = await getExternalStorageDirectory();
  111. String path = join(documentsDirectory!.path, "UnitStocking.db");
  112. var theDb = await openDatabase(path, version: 1,onCreate: _onCreate);
  113. return theDb;
  114. }
  115. // restoreDb()async{
  116. // await closeDb();
  117. // io.Directory documentsDirectory = await getExternalStorageDirectory();
  118. // String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download/UnitDBBackup/", "${prefs.getString(Keys.stockId)}_UnitStocking.db");
  119. // io.File backupdbFile = io.File(backupPath);
  120. // if(backupdbFile.existsSync()){
  121. // String path = join(documentsDirectory.path, "UnitStocking.db");
  122. // backupdbFile.copySync(path);
  123. // return {"STATUS":1,"MSG":"File Back up successfull"};
  124. // }
  125. // return {"STATUS":0,"MSG":"File Backup tidak ditemukan!"};
  126. // }
  127. closeDb() async {
  128. final database = await db;
  129. if(database.isOpen){
  130. await database.close();
  131. _db = null;
  132. }
  133. }
  134. _onCreate(Database db, int version) async {
  135. io.Directory? documentsDirectory = await getExternalStorageDirectory();
  136. String path = join(documentsDirectory!.path, "UnitStocking.db");
  137. io.File file = io.File(path);
  138. print('Database created, ${file.lengthSync()}');
  139. var res = await db.query(Tables.values,where: "${Columns.name} = ?",whereArgs: [Keys.stockId]);
  140. Value value = Value.fromJson(res.first);
  141. await prefs.setString(Keys.stockId, value.value);
  142. }
  143. getCount(mesin) async {
  144. final database = await db;
  145. var res =
  146. await database.rawQuery("SELECT COUNT(*) as count FROM ${Tables.blob} where ${Columns.mesin} = '$mesin'");
  147. return res.isNotEmpty ? Count.fromJson(res.first).count : 0;
  148. }
  149. getUnitdetailMaster(id) async{
  150. try{
  151. final database = await db;
  152. var res = await database.rawQuery("SELECT * FROM '${Tables.master}' WHERE ${Columns.id} = $id");
  153. return res.isNotEmpty ? Unit.fromJson(res.first) : null;
  154. }
  155. catch(e){
  156. print(e);
  157. return null;
  158. }
  159. }
  160. Future<List<Unit>> getAllUnits({inserted=false}) async {
  161. final database = await db;
  162. var res = await database.query("${Tables.master}",where: (inserted)?"${Columns.flag} = 'TRUE'":null,orderBy: "CASE WHEN ${Columns.flag} = 'FALSE' THEN 0 ELSE 1 END, ${Columns.state} desc");
  163. // var res = await database.rawQuery("SELECT ${Columns.id}, ${Columns.mesin}, ${Columns.tipe}, ${Columns.state}, ${Columns.warna}, ${Columns.rangka},${Columns.kode},${Columns.flag}, ${Columns.timestamp} from ${Tables.master} ORDER BY CASE WHEN ${Columns.flag} = 'FALSE' THEN 0 ELSE 1 END, ${Columns.state} desc");
  164. List<Unit> list =
  165. res.isNotEmpty ? res.map((c) => Unit.fromJson(c)).toList() : [];
  166. return list;
  167. }
  168. Future<List<Unit>> searchAllUnits(String query,{inserted:false}) async {
  169. // print("${(inserted)?"${Columns.flag} = 'TRUE' AND ":''} REPLACE(${Columns.mesin},'-','') like '%$query%' or ${Columns.rangka} like '%$query%' or ${Columns.mesin} like '%$query%' or ${Columns.timestamp} like '%$query%' or ${Columns.tipe} like '%$query%' or ${Columns.warna} like '%$query%' or UPPER(${Columns.state}) like '%$query%'");
  170. final database = await db;
  171. try{
  172. var res = await database.query(Tables.master,where: "${(inserted)?"${Columns.flag} = 'TRUE' AND ":''} (REPLACE(${Columns.mesin},'-','') like '%$query%' or ${Columns.rangka} like '%$query%' or ${Columns.mesin} like '%$query%' or ${Columns.timestamp} like '%$query%' or ${Columns.tipe} like '%$query%' or ${Columns.warna} like '%$query%' or UPPER(${Columns.state}) like '%$query%')",orderBy: "CASE WHEN ${Columns.flag} = 'FALSE' THEN 0 ELSE 1 END, ${Columns.state} desc");
  173. // var res = await database.rawQuery(
  174. // "select * from (SELECT ${Columns.id}, ${Columns.state}, ${Columns.rangka}, ${Columns.mesin}, ${Columns.tipe}, ${Columns.warna}, ${Columns.timestamp}, ${Columns.mesin} from ${Tables.master} ) where REPLACE(${Columns.mesin},'-','') like '%$query%' or ${Columns.rangka} like '%$query%' or ${Columns.mesin} like '%$query%' or ${Columns.timestamp} like '%$query%' or ${Columns.tipe} like '%$query%' or ${Columns.warna} like '%$query%' or UPPER(${Columns.state}) like '%$query%' ORDER BY CASE WHEN ${Columns.flag} = 'FALSE' THEN 0 ELSE 1 END, ${Columns.state} desc");
  175. List<Unit> list =
  176. res.isNotEmpty ? res.map((c) => Unit.fromJson(c)).toList() : [];
  177. return list;
  178. }
  179. catch(e){
  180. print(e);
  181. return [];
  182. }
  183. }
  184. getBlobUnits(mesin) async{
  185. try{
  186. final database = await db;
  187. var res = await database.query("${Tables.blob}" ,where: "${Columns.mesin} = ?", whereArgs: [mesin]);
  188. List<Blob> list =
  189. res!=null ? res.map((c) => Blob.fromJson(c)).toList() : [];
  190. return list;
  191. }
  192. catch(e){
  193. // print(e);
  194. return null;
  195. }
  196. }
  197. insertUpdateBlob(Blob blob) async{
  198. return (blob.id==null)?newInsertBlob(blob):updateBlob(blob);
  199. }
  200. deleteBlob(id) async {
  201. final database = await db;
  202. try{
  203. await database.delete("${Tables.blob}", where: "${Columns.id} = ?", whereArgs: [id]);
  204. return true;
  205. }
  206. catch(e){
  207. print(e);
  208. return null;
  209. }
  210. }
  211. updateUnit(Unit unitUpdate) async{
  212. try{
  213. final database = await db;
  214. var res = await database.update("${Tables.master}", unitUpdate.toJson(),
  215. where: "${Columns.id} = ?", whereArgs: [unitUpdate.id]);
  216. var checkCount = await database.query(Tables.master,where: "${Columns.flag} = ?", whereArgs: ['TRUE']);
  217. if(checkCount.isNotEmpty&& checkCount.length%10==0){
  218. backupDb();
  219. }
  220. return res;
  221. }
  222. catch(e){
  223. print(e);
  224. return null;
  225. }
  226. }
  227. updateBlob(Blob blobUpdate) async{
  228. try{
  229. final database = await db;
  230. var res = await database.update("${Tables.blob}", blobUpdate.toJson(),
  231. where: "${Columns.blobId} = ?", whereArgs: [blobUpdate.id]);
  232. return res;
  233. }
  234. catch(e){
  235. print(e);
  236. return null;
  237. }
  238. }
  239. newInsertBlob(Blob newBlob) async {
  240. final database = await db;
  241. try{
  242. var res = await database.rawInsert("Insert into ${Tables.blob}(${Columns.bytes},${Columns.mesin},${Columns.lat},${Columns.long},${Columns.jenis})VALUES(?,?,?,?,?)", [
  243. newBlob.bytes,
  244. newBlob.mesin,
  245. newBlob.lat,
  246. newBlob.long,
  247. newBlob.jenis
  248. ]);
  249. print('Image Inserted');
  250. return res;
  251. }
  252. catch(e){
  253. print(e);
  254. return null;
  255. }
  256. }
  257. getThumbnail(mesin) async{
  258. final database = await db;
  259. var res = await database.query("${Tables.blob}",where: "${Columns.mesin} = ? AND ${Columns.noUrut} = ?",whereArgs: [mesin,'1']);
  260. return res.isNotEmpty ? Blob.fromJson(res.first) : null;
  261. }
  262. Future<List<ImageType>?> getAllJenis() async {
  263. try{
  264. final database = await db;
  265. var res = await database.query("${Tables.jenis}");
  266. List<ImageType> list =
  267. res.isNotEmpty ? res.map((c) => ImageType.fromJson(c)).toList() : [];
  268. return list;
  269. }
  270. catch(e){
  271. print(e);
  272. return null;
  273. }
  274. }
  275. getValue(value)async{
  276. try{
  277. final database = await db;
  278. var res = await database.query(Tables.values,where: "${Columns.name} = ?",whereArgs: [value]);
  279. return res.isEmpty?null:Value.fromJson(res.first);
  280. }
  281. catch(e){
  282. return null;
  283. }
  284. }
  285. insertUpdateValue(Value newValue)async{
  286. try{
  287. final database = await db;
  288. var res = await database.rawQuery("Select Count(*) as count from ${Tables.values} where ${Columns.name} = '${newValue.name}'");
  289. int count = res.isNotEmpty ? Count.fromJson(res.first).count : 0;
  290. return (count==0)?addNewValue(newValue):updateValue(newValue);
  291. }
  292. catch(e){
  293. print(e);
  294. return null;
  295. }
  296. }
  297. updateValue(Value newValue) async {
  298. try{
  299. final database = await db;
  300. var res = await database.update("${Tables.values}", newValue.toJson(),
  301. where: "${Columns.name} = ?", whereArgs: [newValue.name]);
  302. print('Row Updated');
  303. return res;
  304. }
  305. catch(e){
  306. print(e);
  307. return null;
  308. }
  309. }
  310. addNewValue(Value newValue) async {
  311. final database = await db;
  312. try{
  313. var res = await database.rawInsert("Insert into ${Tables.values}(${Columns.name},${Columns.value})VALUES(?,?)", [
  314. newValue.name,
  315. newValue.value
  316. ]);
  317. print('Row Inserted');
  318. return res;
  319. }
  320. catch(e){
  321. print(e);
  322. return null;
  323. }
  324. }
  325. deleteAll() async {
  326. final database = await db;
  327. try{
  328. await database.rawQuery("DROP TABLE IF EXISTS ${Tables.blob}");
  329. await database.rawQuery("DROP TABLE IF EXISTS ${Tables.master}");
  330. return true;
  331. }
  332. catch(e){
  333. print(e);
  334. return null;
  335. }
  336. }
  337. }