Flutter app for Asset Management
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

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