flutter app untuk unitstock
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 

391 řádky
15 KiB

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