@@ -12,7 +12,8 @@ class AssetDetails extends StatefulWidget { | |||
// AssetDetails({Key key}) : super(key: key); | |||
int no; | |||
List<String>lokasi; | |||
AssetDetails({this.no,this.lokasi}); | |||
String initTag; | |||
AssetDetails({this.no,this.lokasi,this.initTag}); | |||
@override | |||
_AssetDetailsState createState() => _AssetDetailsState(); | |||
} | |||
@@ -51,6 +52,30 @@ class _AssetDetailsState extends State<AssetDetails> with TickerProviderStateMix | |||
util.showToast('Alert', 'Asset data not found'); | |||
} | |||
} | |||
redirectNonAudit()async { | |||
var blob = await DBHelper.database.getBlobbyTag(widget.initTag); | |||
print("checkExist $blob"); | |||
if(blob!=null){ | |||
widget.no = blob.no; | |||
await loadAsset(); | |||
// var blob = await DBHelper.database.getBlobbyTag(widget.initTag); | |||
// var result = await DBHelper.database.searchbyTagNumber(blob.tag_number.toUpperCase()); | |||
// if(result['DATA']!=null) { | |||
// result['DATA'].blob = blob.blob; | |||
// result['DATA'].no = blob.no; | |||
// result['DATA'].keterangan = blob.keterangan; | |||
// } | |||
// _asset = result['DATA']; | |||
// ket.text = blob.keterangan; | |||
} | |||
else{ | |||
setState(() { | |||
prefixCode.text = widget.initTag.substring(0,6); | |||
barCode.text = widget.initTag.substring(6); | |||
}); | |||
await findAsset(prefixCode.text+barCode.text); | |||
} | |||
} | |||
@override | |||
void initState() { | |||
@@ -66,6 +91,9 @@ class _AssetDetailsState extends State<AssetDetails> with TickerProviderStateMix | |||
if(widget.no!=null){ | |||
loadAsset(); | |||
} | |||
if(widget.initTag!=null){ | |||
redirectNonAudit(); | |||
} | |||
} | |||
findAsset(query,{silent=false})async{ | |||
var result = await DBHelper.database.searchbyTagNumber(query.toUpperCase()); | |||
@@ -540,6 +568,7 @@ class _AssetDetailsState extends State<AssetDetails> with TickerProviderStateMix | |||
if(insert!=null){ | |||
util.showToast("SUCCESS", 'Asset Inserted'); | |||
await DBHelper.database.closeDb(); | |||
if(widget.initTag!=null)Navigator.pop(context); | |||
setState(() { | |||
barCode.text = ''; | |||
ket.text = ''; | |||
@@ -549,12 +578,12 @@ class _AssetDetailsState extends State<AssetDetails> with TickerProviderStateMix | |||
} | |||
} | |||
else{ | |||
var update = await DBHelper.database.updateAsset(_asset); | |||
if(update!=null){ | |||
util.showToast("SUCCESS", 'Asset Updated'); | |||
await DBHelper.database.closeDb(); | |||
Navigator.pop(context); | |||
} | |||
var update = await DBHelper.database.updateAsset(_asset); | |||
if(update!=null){ | |||
util.showToast("SUCCESS", 'Asset Updated'); | |||
await DBHelper.database.closeDb(); | |||
Navigator.pop(context); | |||
} | |||
} | |||
} | |||
} | |||
@@ -1,6 +1,7 @@ | |||
import 'package:assetstock/util/dbHandler.dart'; | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'asset_details.dart'; | |||
import 'util/prefsKey.dart'; | |||
import 'main.dart'; | |||
import 'util/Models.dart'; | |||
@@ -43,6 +44,45 @@ class _AssetLogsState extends State<AssetLogs> { | |||
} | |||
} | |||
tableRow(idxAsset,index){ | |||
return InkWell( | |||
onTap: ()async{ | |||
var redirect = await showDialog( | |||
context: context, | |||
builder: (context)=>AlertDialog( | |||
title: Text('Pick nonAuditAsset'), | |||
content: Text("Select Asset ${idxAsset.tag_number}"), | |||
actions: [ | |||
FlatButton( | |||
onPressed: (){ | |||
Navigator.pop(context,true); | |||
}, | |||
child: Text("Add Asset"), | |||
) | |||
], | |||
) | |||
); | |||
if(redirect??false){ | |||
await Navigator.push(context, MaterialPageRoute(builder: (context) => new AssetDetails(initTag:idxAsset.tag_number))); | |||
// await fetchData(); | |||
// scaleCon.text = scale.toStringAsFixed(2); | |||
} | |||
}, | |||
child: Row( | |||
children: [ | |||
Container(padding: EdgeInsets.only(left: 5.0),width: widthtb*0.035,child: Text('${index+1}')), | |||
Container(width: widthtb*0.09,child: Text(idxAsset.tag_number)), | |||
Container(width: widthtb*0.24,child: Text(idxAsset.asset_desc)), | |||
Container(width: widthtb*0.24,child: Text(idxAsset.pic)), | |||
Container(width: widthtb*0.13,child: Text(idxAsset.gedung)), | |||
Container(width: widthtb*0.125,child: Text(idxAsset.lantai)), | |||
Container(width: widthtb*0.13,child: Text(idxAsset.ruangan)), | |||
], | |||
), | |||
); | |||
} | |||
@override | |||
void initState() { | |||
fetchData(); | |||
@@ -204,17 +244,7 @@ class _AssetLogsState extends State<AssetLogs> { | |||
decoration: BoxDecoration( | |||
border: Border(bottom: BorderSide(width: 0.8)) | |||
), | |||
child: Row( | |||
children: [ | |||
Container(padding: EdgeInsets.only(left: 5.0),width: widthtb*0.035,child: Text('${index+1}')), | |||
Container(width: widthtb*0.09,child: Text(idxAsset.tag_number)), | |||
Container(width: widthtb*0.24,child: Text(idxAsset.asset_desc)), | |||
Container(width: widthtb*0.24,child: Text(idxAsset.pic)), | |||
Container(width: widthtb*0.13,child: Text(idxAsset.gedung)), | |||
Container(width: widthtb*0.125,child: Text(idxAsset.lantai)), | |||
Container(width: widthtb*0.13,child: Text(idxAsset.ruangan)), | |||
], | |||
), | |||
child: tableRow(idxAsset,index), | |||
); | |||
else return Container(); | |||
} | |||
@@ -223,17 +253,7 @@ class _AssetLogsState extends State<AssetLogs> { | |||
decoration: BoxDecoration( | |||
border: Border(bottom: BorderSide(width: 0.8)) | |||
), | |||
child: Row( | |||
children: [ | |||
Container(padding: EdgeInsets.only(left: 5.0),width: widthtb*0.035,child: Text('${index+1}')), | |||
Container(width: widthtb*0.09,child: Text(idxAsset.tag_number)), | |||
Container(width: widthtb*0.24,child: Text(idxAsset.asset_desc)), | |||
Container(width: widthtb*0.24,child: Text(idxAsset.pic)), | |||
Container(width: widthtb*0.13,child: Text(idxAsset.gedung)), | |||
Container(width: widthtb*0.125,child: Text(idxAsset.lantai)), | |||
Container(width: widthtb*0.13,child: Text(idxAsset.ruangan)), | |||
], | |||
), | |||
child: tableRow(idxAsset,index), | |||
); | |||
} | |||
}), | |||
@@ -250,13 +270,13 @@ class _AssetLogsState extends State<AssetLogs> { | |||
], | |||
), | |||
), | |||
floatingActionButton: FloatingActionButton.extended( | |||
onPressed: (){ | |||
}, | |||
icon: Icon(Icons.sync), | |||
label: Text("Sync Approval"), | |||
), | |||
// floatingActionButton: FloatingActionButton.extended( | |||
// onPressed: (){ | |||
// | |||
// }, | |||
// icon: Icon(Icons.sync), | |||
// label: Text("Sync Approval"), | |||
// ), | |||
); | |||
} | |||
} |
@@ -323,7 +323,6 @@ class _HomeState extends State<Home> { | |||
// var allUnits = await DBHelper.database.getAllAsset(); | |||
// print('${allUnits.length} Units'); | |||
util.showToast('ALERT','Data Downloaded'); | |||
await DBHelper.database.setOpenState(); | |||
} | |||
if(value==-1.0){ | |||
util.showToast('ALERT','Data Error ${trans.error}'); | |||
@@ -383,7 +382,7 @@ class _HomeState extends State<Home> { | |||
Directory documentsDirectory = await getApplicationDocumentsDirectory(); | |||
String path = join(documentsDirectory.path, "assets.db"); | |||
File db = File(path); | |||
if(db.existsSync())Navigator.pushNamed(context, '/stocking'); | |||
if(db.existsSync()) Navigator.pushNamed(context, '/stocking'); | |||
else{ | |||
util.showToast('Alert', 'Please download data master first'); | |||
} | |||
@@ -38,6 +38,7 @@ class DBHelper{ | |||
String path = join(documentsDirectory.path, "assets.db"); | |||
File file = File(path); | |||
print('Database created, ${file.lengthSync()}'); | |||
setOpenState(); | |||
} | |||
insertAsset(Asset newAsset) async{ | |||
@@ -65,6 +66,19 @@ class DBHelper{ | |||
} | |||
} | |||
getBlobbyTag(tag) async{ | |||
try{ | |||
final database = await db; | |||
var res = await database.query(tableName.insert,where: "${columnName.tag_number} = ?",whereArgs: [tag]); | |||
// var a = await database.rawQuery("select length(${columnName.blob}) / 1024 from ${tableName.insert} where ${columnName.no} = $no"); | |||
// print(a); | |||
return res.isNotEmpty ? Asset.fromJson(res.first): null; | |||
} | |||
catch(e){ | |||
print(e); | |||
return null; | |||
} | |||
} | |||
getBlobbyNo(no) async{ | |||
try{ | |||