flutter app untuk unitstock
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 

346 líneas
13 KiB

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