flutter app untuk unitstock
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 

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