flutter app untuk unitstock
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

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