flutter app untuk unitstock
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

393 rivejä
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(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. // if(dbPath == null || dbPath == ''){
  26. final database = await db;
  27. var dbPath = database.path;
  28. await DBHelper.database.closeDb();
  29. // }
  30. await prefs.remove(keyClass.backup_stock_id);
  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. 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 getExternalStorageDirectory();
  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 getExternalStorageDirectory();
  69. String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_UnitStocking.db");
  70. io.File backupdbFile = io.File(backupPath);
  71. if(backupdbFile.existsSync()){
  72. io.File dbFile = new io.File(join(documentsDirectory.path, "UnitStocking.db"));
  73. Uint8List byte = backupdbFile.readAsBytesSync();
  74. dbFile.writeAsBytesSync(byte);
  75. result = {"STATUS":1,"MSG":"File Back up successfull"};
  76. await DBHelper.database.closeDb();
  77. }
  78. else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"};
  79. },customMessage: " untuk menyimpan data backup");
  80. }
  81. return result;
  82. }
  83. closeDb() async {
  84. try{
  85. Database database = await db;
  86. if(database.isOpen) await database.close();
  87. _db = null;
  88. }
  89. catch(e){
  90. _db = null;
  91. }
  92. }
  93. _onCreate(Database db, int version) async {
  94. io.Directory documentsDirectory = await getExternalStorageDirectory();
  95. String path = join(documentsDirectory.path, "UnitStocking.db");
  96. io.File file = io.File(path);
  97. print('Database created, ${file.lengthSync()}');
  98. var res = await db.query(tableName.values,where: "${columnName.name} = ?",whereArgs: [keyClass.stock_id]);
  99. valueTab value = valueTab.fromJson(res.first);
  100. await prefs.setString(keyClass.stock_id, value.value);
  101. }
  102. getCount(mesin) async {
  103. final database = await db;
  104. var res =
  105. await database.rawQuery("SELECT COUNT(*) as count FROM ${tableName.blob} where ${columnName.mesin} = '$mesin'");
  106. return res.isNotEmpty ? Count.fromJson(res.first).count : 0;
  107. }
  108. getUnitdetailMaster(id) async{
  109. try{
  110. final database = await db;
  111. var res = await database.rawQuery("SELECT * FROM '${tableName.master}' WHERE ${columnName.id} = $id");
  112. return res.isNotEmpty ? Unit.fromJson(res.first) : null;
  113. }
  114. catch(e){
  115. print(e);
  116. return null;
  117. }
  118. }
  119. // Future<List<Unit>> getAllUnits() async {
  120. // final database = await db;
  121. // var res = await database.query("${tableName.master}");
  122. //// var res = await database.rawQuery("SELECT ${columnName.tipe} from ${tableName.}");
  123. //// 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");
  124. // List<Unit> list =
  125. // res.isNotEmpty ? res.map((c) => Unit.fromJson(c)).toList() : [];
  126. // return list;
  127. // }
  128. Future<List<Unit>> getAllUnits({inserted=false}) async {
  129. final database = await db;
  130. 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");
  131. // 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");
  132. List<Unit> list =
  133. res.isNotEmpty ? res.map((c) => Unit.fromJson(c)).toList() : [];
  134. return list;
  135. }
  136. Future<List<Unit>> searchAllUnits(String query,{inserted:false}) async {
  137. // 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%'");
  138. final database = await db;
  139. try{
  140. 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");
  141. // var res = await database.rawQuery(
  142. // "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");
  143. List<Unit> list =
  144. res.isNotEmpty ? res.map((c) => Unit.fromJson(c)).toList() : [];
  145. return list;
  146. }
  147. catch(e){
  148. print(e);
  149. return [];
  150. }
  151. }
  152. // Future<List<insertUnit>> getAllInsertUnits() async {
  153. // final database = await db;
  154. //// var res = await database.query("${tableName.unit}");
  155. // 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}");
  156. // List<insertUnit> list =
  157. // res.isNotEmpty ? res.map((c) => insertUnit.fromJson(c)).toList() : [];
  158. // return list;
  159. // }
  160. // Future<List<blobImage>> getAllBlobImage(mesin) async {
  161. // final database = await db;
  162. //// var res = await database.query("${tableName.blob}");
  163. // var res = await database.query("${tableName.blob}",where: "${columnName.mesin} = ?",whereArgs: [mesin]);
  164. //// print([mesin_id,res]);
  165. //
  166. // List<blobImage> list =
  167. // res.isNotEmpty ? res.map((c) => blobImage.fromJson(c)).toList() : [];
  168. // return list;
  169. // }
  170. getBlobUnits(mesin) async{
  171. try{
  172. final database = await db;
  173. var res = await database.query("${tableName.blob}" ,where: "${columnName.mesin} = ?", whereArgs: [mesin]);
  174. List<blobImage> list =
  175. res.isNotEmpty ? res.map((c) => blobImage.fromJson(c)).toList() : [];
  176. return list;
  177. }
  178. catch(e){
  179. print(e);
  180. return null;
  181. }
  182. }
  183. insertUpdateBlob(blobImage blob) async{
  184. return (blob.blob_id==null)?newInsertBlob(blob):updateBlob(blob);
  185. }
  186. deleteBlob(blob_id) async {
  187. final database = await db;
  188. try{
  189. await database.delete("${tableName.blob}", where: "${columnName.blob_id} = ?", whereArgs: [blob_id]);
  190. return true;
  191. }
  192. catch(e){
  193. print(e);
  194. return null;
  195. }
  196. }
  197. updateUnit(Unit unitUpdate) async{
  198. try{
  199. final database = await db;
  200. var res = await database.update("${tableName.master}", unitUpdate.toJson(),
  201. where: "${columnName.id} = ?", whereArgs: [unitUpdate.id]);
  202. print('Row Updated');
  203. return res;
  204. }
  205. catch(e){
  206. print(e);
  207. return null;
  208. }
  209. }
  210. updateBlob(blobImage blobUpdate) async{
  211. try{
  212. final database = await db;
  213. var res = await database.update("${tableName.blob}", blobUpdate.toJson(),
  214. where: "${columnName.blob_id} = ?", whereArgs: [blobUpdate.blob_id]);
  215. print('Row Updated');
  216. return res;
  217. }
  218. catch(e){
  219. print(e);
  220. return null;
  221. }
  222. }
  223. newInsertBlob(blobImage newBlob) async {
  224. final database = await db;
  225. try{
  226. var res = await database.rawInsert("Insert into ${tableName.blob}(${columnName.blob_file},${columnName.mesin},${columnName.lat},${columnName.long},${columnName.jenis})VALUES(?,?,?,?,?)", [
  227. newBlob.blob_file,
  228. newBlob.mesin,
  229. newBlob.lat,
  230. newBlob.long,
  231. newBlob.jenis
  232. ]);
  233. print('Image Inserted');
  234. return res;
  235. }
  236. catch(e){
  237. print(e);
  238. return null;
  239. }
  240. }
  241. getBlobImage(mesin) async{
  242. final database = await db;
  243. var res = await database.query("${tableName.blob}",where: "${columnName.mesin} = ? AND ${columnName.no_urut} = ?",whereArgs: [mesin,'1']);
  244. return res.isNotEmpty ? blobImage.fromJson(res.first) : null;
  245. }
  246. // Future<List<insertUnit>> searchAllInsertUnits(String query) async {
  247. // final database = await db;
  248. // var res = await database.rawQuery(
  249. // "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%'");
  250. // List<insertUnit> list =
  251. // res.isNotEmpty ? res.map((c) => insertUnit.fromJson(c)).toList() : [];
  252. // return list;
  253. // }
  254. //
  255. // updateInsertUnit(insertUnit newPart) async {
  256. // try{
  257. // final database = await db;
  258. //// var res = await database.update("${tableName.unit}", newPart.toJson(),
  259. //// where: "${columnName.id} = ?", whereArgs: [newPart.id]);
  260. // var res = await database.rawQuery("Update ${tableName.unit} SET ${columnName.id} = ${newPart.id}, ${columnName.mesin} = '${newPart.mesin}' WHERE ${columnName.id} = ${newPart.id}");
  261. // print('Row Updated');
  262. // return res;
  263. // }
  264. // catch(e){
  265. // print(e);
  266. // return null;
  267. // }
  268. // }
  269. Future<List<jenisDrop>> getAllJenis() async {
  270. try{
  271. final database = await db;
  272. var res = await database.query("${tableName.jenis}");
  273. // 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");
  274. // print(res);
  275. List<jenisDrop> list =
  276. res.isNotEmpty ? res.map((c) => jenisDrop.fromJson(c)).toList() : [];
  277. return list;
  278. }
  279. catch(e){
  280. print(e);
  281. return null;
  282. }
  283. }
  284. getValue(value)async{
  285. try{
  286. final database = await db;
  287. var res = await database.query(tableName.values,where: "${columnName.name} = ?",whereArgs: [value]);
  288. var res2 = await database.query(tableName.values);
  289. return res.isEmpty?null:valueTab.fromJson(res.first);
  290. }
  291. catch(e){
  292. print(e);
  293. return null;
  294. }
  295. }
  296. insertUpdateValue(valueTab newValue)async{
  297. try{
  298. final database = await db;
  299. var res = await database.rawQuery("Select Count(*) as count from ${tableName.values} where ${columnName.name} = '${newValue.name}'");
  300. int count = res.isNotEmpty ? Count.fromJson(res.first).count : 0;
  301. return (count==0)?addNewValue(newValue):updateValue(newValue);
  302. }
  303. catch(e){
  304. print(e);
  305. return null;
  306. }
  307. }
  308. updateValue(valueTab newValue) async {
  309. try{
  310. final database = await db;
  311. var res = await database.update("${tableName.values}", newValue.toJson(),
  312. where: "${columnName.name} = ?", whereArgs: [newValue.name]);
  313. print('Row Updated');
  314. return res;
  315. }
  316. catch(e){
  317. print(e);
  318. return null;
  319. }
  320. }
  321. addNewValue(valueTab newValue) async {
  322. final database = await db;
  323. try{
  324. var res = await database.rawInsert("Insert into ${tableName.values}(${columnName.name},${columnName.value})VALUES(?,?)", [
  325. newValue.name,
  326. newValue.value
  327. ]);
  328. print("row inserted");
  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. }