Flutter app for Asset Management
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.
 
 
 
 

292 righe
11 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. getBlobbyTag(tag) async{
  61. try{
  62. final database = await db;
  63. var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tag]);
  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. getBlobbyNo(no) async{
  74. try{
  75. final database = await db;
  76. var res = await database.query(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  77. // var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no");
  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. // getRefBlob(tagNumber)async{
  87. // try{
  88. // final database = await db;
  89. // var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  90. // // var a = await database.rawQuery("select count(*) from ${tableName.insert}");
  91. // // print(a);
  92. // return res.isNotEmpty ? Asset.fromJson(res.first): null;
  93. // }
  94. // catch(e){
  95. // print(e);
  96. // return null;
  97. // }
  98. // }
  99. searchbyTagNumber(tagNumber) async{
  100. try{
  101. final database = await db;
  102. var exist = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  103. var res = await database.query(tableName.ref,where: "${columnName.tag_number} = ?",whereArgs: [tagNumber]);
  104. if(res.isEmpty&&exist.isNotEmpty){
  105. var appendAsset = new Asset();
  106. appendAsset.tag_number=tagNumber;
  107. return {"EXIST":exist.isNotEmpty?true:false,"DATA":appendAsset};
  108. }
  109. else return {"EXIST":exist.isNotEmpty?true:false,"DATA":res.isNotEmpty ? Asset.fromJson(res.first): null};
  110. }
  111. catch(e){
  112. print(e);
  113. return null;
  114. }
  115. }
  116. getAllLocation() async{
  117. try{
  118. final database = await db;
  119. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.lantai}) ${columnName.lantai} from ${tableName.ref} ORDER BY UPPER(${columnName.lantai})");
  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. getAllRuangan() async{
  130. try{
  131. final database = await db;
  132. var res = await database.rawQuery("SELECT Distinct UPPER(${columnName.ruang}) ${columnName.ruang} from ${tableName.ref} 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. getLantaiRuangan(lantai) async{
  143. try{
  144. final database = await db;
  145. 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})");
  146. List<Asset> list =
  147. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList().reversed.toList() : [];
  148. return list;
  149. }
  150. catch(e){
  151. print(e);
  152. return null;
  153. }
  154. }
  155. getAllAsset() async {
  156. try{
  157. final database = await db;
  158. 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}");
  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. filterAllAsset(search) async {
  169. try{
  170. final database = await db;
  171. 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}");
  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. getAllInsertAsset() async {
  182. try{
  183. final database = await db;
  184. // 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}");
  185. 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}");
  186. List<Asset> list =
  187. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  188. return list;
  189. }
  190. catch(e){
  191. print(e);
  192. return null;
  193. }
  194. }
  195. deleteInsertAsset(no) async{
  196. try{
  197. final database = await db;
  198. // 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]);
  199. await database.delete(tableName.insert,where: "${columnName.no} = ?",whereArgs: [no]);
  200. return true;
  201. }
  202. catch(e){
  203. print(e);
  204. return null;
  205. }
  206. }
  207. filterAllInsertAsset(search) async {
  208. try{
  209. final database = await db;
  210. // 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%'");
  211. 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%'");
  212. List<Asset> list =
  213. res.isNotEmpty ? res.map((c) => Asset.fromJson(c)).toList() : [];
  214. return list;
  215. }
  216. catch(e){
  217. print(e);
  218. return null;
  219. }
  220. }
  221. countRows(tableName)async{
  222. try{
  223. final database = await db;
  224. var res = await database.rawQuery("SELECT Count(*) Count FROM $tableName");
  225. return res.isEmpty?0:Count.fromJson(res.first).count;
  226. }
  227. catch(e){
  228. print(e);
  229. return null;
  230. }
  231. }
  232. getDbName()async{
  233. try{
  234. final database = await db;
  235. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'DB_MASTER_NAME'");
  236. return res.isEmpty?null:res.first[columnName.value];
  237. }
  238. catch(e){
  239. print(e);
  240. return null;
  241. }
  242. }
  243. getBUnit()async{
  244. try{
  245. final database = await db;
  246. var res = await database.rawQuery("SELECT ${columnName.value} FROM ${tableName.key} where ${columnName.key} = 'BUSINESS_UNIT'");
  247. return res.isEmpty?null:res.first[columnName.value];
  248. }
  249. catch(e){
  250. print(e);
  251. return null;
  252. }
  253. }
  254. setOpenState()async{
  255. try{
  256. final database = await db;
  257. var check_KEY = await database.rawQuery("SELECT 1 FROM ${tableName.key} where ${columnName.key} = 'STATE'");
  258. if (check_KEY.length<=0){
  259. await database.insert(tableName.key, {columnName.key:"STATE",columnName.value:"OPEN"});
  260. }
  261. else{
  262. await database.update(tableName.key, {columnName.value:"OPEN"},where: "${columnName.key} = ?",whereArgs: ['STATE']);
  263. }
  264. await database.update(tableName.key, {columnName.value:DateFormat("YYYY-MM-DD HH:mm:ss").format(DateTime.now())},where: "${columnName.key} = ?",whereArgs: ['START_DATE']);
  265. }
  266. catch(e){
  267. print(e);
  268. return null;
  269. }
  270. }
  271. }