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.
 
 
 
 
 

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