Flutter app for Asset Management
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

261 行
9.4 KiB

  1. import 'package:assetstock/util/Models.dart';
  2. import 'package:sqflite/sqflite.dart';
  3. import 'package:path_provider/path_provider.dart';
  4. import 'prefsKey.dart';
  5. import 'dart:io';
  6. import 'dart:async';
  7. import 'package:path/path.dart';
  8. class DBHelper{
  9. DBHelper._();
  10. static final DBHelper database = DBHelper._();
  11. Database _db;
  12. Future<Database> get db async {
  13. if (_db != null) return _db;
  14. _db = await initDb();
  15. return _db;
  16. }
  17. initDb() async {
  18. Directory documentsDirectory = await getApplicationDocumentsDirectory();
  19. String path = join(documentsDirectory.path, "assets.db");
  20. var theDb = await openDatabase(path, version: 1,onCreate: _onCreate);
  21. return theDb;
  22. }
  23. closeDb() async {
  24. if(_db!=null){
  25. final database = await db;
  26. await database.close();
  27. _db = null;
  28. }
  29. }
  30. void _onCreate(Database db, int version) async {
  31. Directory documentsDirectory = await getApplicationDocumentsDirectory();
  32. String path = join(documentsDirectory.path, "assets.db");
  33. File file = File(path);
  34. print('Database created, ${file.lengthSync()}');
  35. }
  36. insertAsset(Asset newAsset) async{
  37. try{
  38. final database = await db;
  39. await database.rawInsert("Insert into ${tableName.insert} (${columnName.tag_number},${columnName.blob},${columnName.keterangan}) VALUES(?,?,?)", [newAsset.tag_number,newAsset.blob,newAsset.keterangan]);
  40. await database.rawQuery("UPDATE ${tableName.ref} SET ${columnName.flag} = 'TRUE' WHERE ${columnName.tag_number} = '${newAsset.tag_number}'");
  41. return true;
  42. }
  43. catch(e){
  44. print(e);
  45. return null;
  46. }
  47. }
  48. updateAsset(Asset newAsset) async{
  49. try{
  50. final database = await db;
  51. await database.rawUpdate("Update ${tableName.insert} SET ${columnName.blob} = ?, ${columnName.tag_number} = ?, ${columnName.keterangan} = ? WHERE ${columnName.no} = ?", [newAsset.blob,newAsset.tag_number,newAsset.keterangan,newAsset.no]);
  52. return true;
  53. }
  54. catch(e){
  55. print(e);
  56. return null;
  57. }
  58. }
  59. getBlobbyNo(no) async{
  60. try{
  61. final database = await db;
  62. var res = await database.query(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  63. // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
  64. // print(a);
  65. return res.isNotEmpty ? Asset.fromJson(res.first): null;
  66. }
  67. catch(e){
  68. print(e);
  69. return null;
  70. }
  71. }
  72. getRefBlob(tagNumber)async{
  73. try{
  74. final database = await db;
  75. var res = await database.query(tableName.ref,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  76. // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
  77. // print(a);
  78. return res.isNotEmpty ? Asset.fromJson(res.first): null;
  79. }
  80. catch(e){
  81. print(e);
  82. return null;
  83. }
  84. }
  85. searchbyTagNumber(tagNumber) async{
  86. try{
  87. final database = await db;
  88. var exist = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  89. var res = await database.query(tableName.ref,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  90. if(res.isEmpty&&exist.isNotEmpty){
  91. var appendAsset = new Asset();
  92. appendAsset.tag_number=tagNumber;
  93. return {"EXIST":exist.isNotEmpty?true:false,"DATA":appendAsset};
  94. }
  95. else return {"EXIST":exist.isNotEmpty?true:false,"DATA":res.isNotEmpty ? Asset.fromJson(res.first): null};
  96. }
  97. catch(e){
  98. print(e);
  99. return null;
  100. }
  101. }
  102. getAllLocation() async{
  103. try{
  104. final database = await db;
  105. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.lantai}) ${columnName.lantai} from ${tableName.ref} ORDER BY UPPER(${columnName.lantai})");
  106. List<Asset> list =
  107. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  108. return list;
  109. }
  110. catch(e){
  111. print(e);
  112. return null;
  113. }
  114. }
  115. getAllRuangan() async{
  116. try{
  117. final database = await db;
  118. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} ORDER BY UPPER(${columnName.ruang})");
  119. List<Asset> list =
  120. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  121. return list;
  122. }
  123. catch(e){
  124. print(e);
  125. return null;
  126. }
  127. }
  128. getLantaiRuangan(lantai) async{
  129. try{
  130. final database = await db;
  131. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} WHERE UPPER(${columnName.lantai}) = UPPER('$lantai') ORDER BY UPPER(${columnName.ruang})");
  132. List<Asset> list =
  133. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  134. return list;
  135. }
  136. catch(e){
  137. print(e);
  138. return null;
  139. }
  140. }
  141. getAllAsset() async {
  142. try{
  143. final database = await db;
  144. var res = await database.rawQuery("SELECT a.${columnName.tag_number}, a.${columnName.asset_desc}, a.${columnName.ruang}, a.${columnName.lantai}, a.${columnName.gedung}, a.${columnName.flag}, b.${columnName.blob} from ${tableName.ref} a LEFT JOIN ${tableName.insert} b on a.${columnName.tag_number} = b.${columnName.tag_number} ORDER BY a.${columnName.flag},a.${columnName.ruang}");
  145. List<Asset> list =
  146. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  147. return list;
  148. }
  149. catch(e){
  150. print(e);
  151. return null;
  152. }
  153. }
  154. filterAllAsset(search) async {
  155. try{
  156. final database = await db;
  157. var res = await database.rawQuery("SELECT * FROM (SELECT a.${columnName.tag_number}, a.${columnName.asset_desc}, a.${columnName.ruang}, a.${columnName.lantai}, a.${columnName.gedung}, a.${columnName.flag}, b.${columnName.blob} from ${tableName.ref} a LEFT JOIN ${tableName.insert} b on a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%' ORDER BY ${columnName.flag},${columnName.ruang}");
  158. List<Asset> list =
  159. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  160. return list;
  161. }
  162. catch(e){
  163. print(e);
  164. return null;
  165. }
  166. }
  167. getAllInsertAsset() async {
  168. try{
  169. final database = await db;
  170. // var res = await database.rawQuery("SELECT a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} FROM ${tableName.insert} a, ${tableName.ref} b WHERE a.${columnName.tag_number} = b.${columnName.tag_number}");
  171. var res = await database.rawQuery("select a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} from ${tableName.insert} a LEFT JOIN ${tableName.ref} b ON a.${columnName.tag_number} = b.${columnName.tag_number}");
  172. List<Asset> list =
  173. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  174. return list;
  175. }
  176. catch(e){
  177. print(e);
  178. return null;
  179. }
  180. }
  181. deleteInsertAsset(no) async{
  182. try{
  183. final database = await db;
  184. // await database.rawUpdate("Update ${tableName.insert} SET ${columnName.blob} = ?, ${columnName.tag_number} = ?, ${columnName.keterangan} = ? WHERE ${columnName.no} = ?", [newAsset.blob,newAsset.tag_number,newAsset.keterangan,newAsset.no]);
  185. await database.delete(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  186. return true;
  187. }
  188. catch(e){
  189. print(e);
  190. return null;
  191. }
  192. }
  193. filterAllInsertAsset(search) async {
  194. try{
  195. final database = await db;
  196. // var res = await database.rawQuery("SELECT * FROM (SELECT a.${columnName.no},a.${columnName.keterangan},a.${columnName.tag_number},a.${columnName.blob}, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} FROM ${tableName.insert} a, ${tableName.ref} b WHERE a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%'");
  197. var res = await database.rawQuery("SELECT * FROM (select a.*, b.${columnName.asset_desc}, b.${columnName.gedung}, b.${columnName.lantai}, b.${columnName.ruang} from ${tableName.insert} a LEFT JOIN ${tableName.ref} b ON a.${columnName.tag_number} = b.${columnName.tag_number}) WHERE UPPER(${columnName.tag_number}) Like '%$search%'");
  198. List<Asset> list =
  199. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  200. return list;
  201. }
  202. catch(e){
  203. print(e);
  204. return null;
  205. }
  206. }
  207. countRows(tableName)async{
  208. try{
  209. final database = await db;
  210. var res = await database.rawQuery("SELECT Count(*) Count FROM $tableName");
  211. return res.isEmpty?0:Count.fromJson(res.first).count;
  212. }
  213. catch(e){
  214. print(e);
  215. return null;
  216. }
  217. }
  218. getDbName()async{
  219. try{
  220. final database = await db;
  221. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'DB_MASTER_NAME'");
  222. return res.isEmpty?null:res.first[columnName.value];
  223. }
  224. catch(e){
  225. print(e);
  226. return null;
  227. }
  228. }
  229. getBUnit()async{
  230. try{
  231. final database = await db;
  232. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'BUSINESS_UNIT'");
  233. return res.isEmpty?null:res.first[columnName.value];
  234. }
  235. catch(e){
  236. print(e);
  237. return null;
  238. }
  239. }
  240. }