Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'package:MJW_Manajemen/helper/dbHelper.dart';
- import 'package:flutter/material.dart';
- import 'package:loading/loading.dart';
- import 'package:pull_to_refresh/pull_to_refresh.dart';
- import 'package:loading/indicator/ball_pulse_indicator.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- import 'package:http/http.dart' as http;
- import 'dart:async';
- import 'dart:convert';
- class PersetujuanPage extends StatefulWidget {
- @override
- _PersetujuanPageState createState() => _PersetujuanPageState();
- }
- class _PersetujuanPageState extends State<PersetujuanPage> with WidgetsBindingObserver {
- Map data;
- List persetujuandata, jenisDokumenList, statusDokumenList;
- bool loading = true;
- bool updateCounter = true;
- String baseUrl, serverCode, urlPerpanjangan;
- String groupId, _currentDocType1, _currentDocType2, _currentDocStat;
- String _currentCabang;
- int _persetujuanJktCount, _persetujuanSbyCount, _persetujuanTestingCount;
- TextEditingController updateVlHariController = new TextEditingController();
- RefreshController _refreshController = RefreshController(initialRefresh: false);
- final dbHelper = DbHelper.instance;
- @override
- void initState() {
- WidgetsBinding.instance.addObserver(this);
- super.initState();
- getCredential();
- getServerUrl();
- }
- @override
- void dispose() {
- WidgetsBinding.instance.addObserver(this);
- super.dispose();
- }
- @override
- void didChangeAppLifecycleState(AppLifecycleState state) {
- if(state == AppLifecycleState.resumed) {
- print('on resume persetujuan: ok');
- } else if(state == AppLifecycleState.paused) {
- print('on paused persetujuan: ok');
- } else if(state == AppLifecycleState.detached) {
- print('on detached persetujuan: ok');
- } else if(state == AppLifecycleState.inactive) {
- print('on inactive persetujuan: ok');
- }
- }
- @override
- Widget build(BuildContext context) {
- setState(() {
- _currentDocType1 = _currentDocType1;
- _currentDocType2 = _currentDocType2;
- });
- final body = Container(
- width: MediaQuery.of(context).size.width,
- padding: EdgeInsets.all(8.0),
- decoration: BoxDecoration(
- color: Colors.grey[300]
- ),
- child: (loading) ?
- Center(
- child: Column(
- children: <Widget>[
- Padding(
- padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2.2),
- ),
- Loading(
- indicator: BallPulseIndicator(), size: 50.0, color: Colors.lightBlue,
- ),
- Text("Memuat Data")
- ]
- )
- ) : /*(persetujuandata == null) ?
- Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- Text("Tidak ada data untuk disetujui.", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold))
- ]
- )
- ) :*/
- SmartRefresher(
- enablePullDown: true,
- enablePullUp: false,
- header: WaterDropHeader(waterDropColor: Colors.lightBlue),
- footer: CustomFooter(
- builder: (BuildContext context, LoadStatus mode){
- Widget body ;
- if(mode==LoadStatus.noMore){
- body = Text("No more Data");
- }
- else if(mode==LoadStatus.loading){
- body = Loading(
- indicator: BallPulseIndicator(), size: 50.0, color: Colors.lightBlue,
- );
- }
- else if(mode == LoadStatus.failed){
- body = Text("Load Failed!Click retry!");
- }
- else if(mode == LoadStatus.canLoading){
- body = Text("release to load more");
- }
- else{
- body = Text("pull up load");
- }
- return Container(
- height: 55.0,
- child: Center(child:body),
- );
- },
- ),
- controller: _refreshController,
- onRefresh: _onRefresh,
- onLoading: _onLoading,
- child: (persetujuandata == null) ?
- Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- Text("Tidak ada data untuk disetujui.", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold))
- ]
- )
- ) :
- ListView.builder(
- itemCount: (persetujuandata == null) ? 0 : persetujuandata.length,
- itemBuilder: (BuildContext context, int index) {
- return InkWell(
- onTap: () => goToNewScreen(context,
- persetujuandata[index]["dokumen_id"],
- persetujuandata[index]["tanggal"],
- persetujuandata[index]["dokumen_jenis"],
- persetujuandata[index]["dokumen_no"],
- persetujuandata[index]["dokumen_revised"],
- persetujuandata[index]["stat_dok"]
- ),
- onLongPress: () => {
- (persetujuandata[index]["dokumen_jenis"] == 'vonis_loyo') ?
- showDialog(
- context: context,
- builder: (BuildContext context) {
- return AlertDialog(
- title: Text('Perpanjangan Karantina untuk berapa hari ?'),
- content: TextFormField(
- controller: updateVlHariController,
- keyboardType: TextInputType.number,
- maxLines: 1,
- autofocus: false,
- // decoration: InputDecoration(
- // contentPadding: EdgeInsets.fromLTRB(10.0, 5.0, 5.0, 10.0),
- // border: OutlineInputBorder(borderRadius: BorderRadius.circular(8.0)),
- // filled: true,
- // fillColor: Colors.grey[300]
- // ),
- /*onChanged: (text) {
- ebmKetAdminControler.text = text;
- }*/
- ),
- actions: <Widget>[
- FlatButton(
- child: Text('OK'),
- onPressed: () {
- setState(() {
- perpanjanganVl(persetujuandata[index]["dokumen_id"], persetujuandata[index]["tanggal"], updateVlHariController.text.toString());
- print(persetujuandata[index]["dokumen_id"]);
- print(persetujuandata[index]["tanggal"]);
- });
- Navigator.of(context).pop();
- },
- ),
- ],
- );
- },
- ) :
- print("Long press"),
- },
- highlightColor: Colors.white.withAlpha(30),
- splashColor: Colors.white.withAlpha(20),
- child: Card(
- margin: EdgeInsets.all(3.0),
- elevation: 3,
- color: (persetujuandata[index]["dokumen_jenis"] == 'vonis_loyo') ?
- (int.parse(persetujuandata[index]["tanggal_asal"]) > 3) ? Colors.pink[100] : Colors.white : Colors.white,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(7.0)
- ),
- child: Padding(
- padding: EdgeInsets.all(5.0),
- child: ListTile(
- title: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Text("${persetujuandata[index]["title"]}",
- style: TextStyle(fontSize: 13, fontWeight: FontWeight.bold)
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Padding(
- padding: EdgeInsets.only(right: 5.0),
- child: Image.asset((persetujuandata[index]["stat_dok"] == "Tunggu") ? 'assets/images/hourglass.png' : (persetujuandata[index]["stat_dok"] == "Tertutup") ? 'assets/images/tick.png' : 'assets/images/cancel.png',
- height: 10, width: 10,
- color: (persetujuandata[index]["stat_dok"] == "Tunggu") ? Colors.orange : (persetujuandata[index]["stat_dok"] == "Tertutup") ? Colors.green : Colors.red)
- ),
- Text("${persetujuandata[index]["stat_dok"]}",
- style: TextStyle(fontSize: 10, color: (persetujuandata[index]["stat_dok"] == "Tunggu") ? Colors.orange : (persetujuandata[index]["stat_dok"] == "Tertutup") ? Colors.green : Colors.red))
- ]
- )
- ]
- ),
- subtitle: Column(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Text("${persetujuandata[index]["tanggal"]}", style: TextStyle(fontSize: 12)),
- Text("")
- ]
- ),
- SizedBox(height: 10.0),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Text("No Dokumen ${persetujuandata[index]["dokumen_no"]}", style: TextStyle(fontSize: 12)),
- Text((persetujuandata[index]["dokumen_jenis"] == 'izin_karyawan') ?
- "Karyawan" : "Supplier",
- style: TextStyle(fontSize: 12)
- )
- ]
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- Text((persetujuandata[index]["dokumen_jenis"] == 'izin_karyawan') ?
- "" : "Jenis ${persetujuandata[index]["jenis_nama"]}",
- style: TextStyle(fontSize: 12)
- ),
- Text("${persetujuandata[index]["supplier"]}", style: TextStyle(fontSize: 11, fontWeight: FontWeight.bold))
- ]
- )
- ],
- )
- )
- )
- )
- );
- }
- )
- )
- );
- return Scaffold(
- backgroundColor: Colors.grey[200],
- appBar: new AppBar(
- title: const Text('Persetujuan'),
- elevation: 3,
- ),
- body: body,
- floatingActionButton: FloatingActionButton(
- onPressed: () => _bottomSheetFilterSearch(context),
- child: Icon(Icons.tune, color: Colors.white),
- ),
- );
- }
- //All Function
- Future getServerUrl() async {
- SharedPreferences prefs = await SharedPreferences.getInstance();
- setState(() {
- if (prefs.getString("login_jaringan") == "Lokal"){
- baseUrl = "http://192.168.1.200/";
- } else {
- baseUrl = "http://koffiesoftmjw.ngrok.io/";
- }
- if (prefs.getString("login_cabang") == 'MJWJKT'){
- serverCode = "koffie_mjw/index.php?c=c_welcome_chart&m=get_action";
- urlPerpanjangan = "koffie_mjw/index.php?c=c_vonis_loyo&m=update_perpanjangan_karantina";
- } else if(prefs.getString("login_cabang") == 'MJWSBY'){
- serverCode = "koffie_mjw_sby/index.php?c=c_welcome_chart&m=get_action";
- urlPerpanjangan = "koffie_mjw_sby/index.php?c=c_vonis_loyo&m=update_perpanjangan_karantina";
- } else {
- serverCode = "koffie_mjw_testing/index.php?c=c_welcome_chart&m=get_action";
- urlPerpanjangan = "koffie_mjw_testing/index.php?c=c_vonis_loyo&m=update_perpanjangan_karantina";
- }
- getData("DOKUMENDAFTAR", "", "", "", "", "", "", "", "", "", "0", "100", groupId);
- });
- }
- void getCredential() async {
- SharedPreferences prefs = await SharedPreferences.getInstance();
- setState(() {
- _currentCabang = prefs.getString("login_cabang");
- groupId = prefs.getString("group_id");
- });
- if(groupId == "5"){ //ko ahong
- jenisDokumenList = [
- {'jenis':'terima_beli', 'keterangan':'Terima Beli'},
- {'jenis':'kirim_barang', 'keterangan':'Kirim Barang'},
- {'jenis':'izin_karyawan', 'keterangan':'Izin Karyawan'}
- ];
- } else if(groupId == "15"){ //kepala gudang
- jenisDokumenList = [
- {'jenis':'vonis_loyo', 'keterangan':'Vonis Loyo'},
- {'jenis':'mati_kolam', 'keterangan':'Mati Kolam'},
- {'jenis':'izin_karyawan', 'keterangan':'Izin Karyawan'}
- ];
- } else { //direksi atau administrator
- jenisDokumenList = [
- {'jenis':'harga_beli', 'keterangan':'Harga Beli'},
- {'jenis':'order_beli', 'keterangan':'Order Beli'},
- {'jenis':'nota_beli', 'keterangan':'Nota Beli'},
- {'jenis':'subsidi_beli', 'keterangan':'Subsidi Beli'},
- {'jenis':'personal', 'keterangan':'Supplier / Customer'},
- {'jenis':'register_pkk', 'keterangan':'Register PKK'},
- {'jenis':'mutasi_tabung_oksigen', 'keterangan':'Mutasi Tabung Oksigen'},
- {'jenis':'harga_packing', 'keterangan':'Harga Packing'},
- {'jenis':'sp_material', 'keterangan':'Surat Pesanan Material'},
- {'jenis':'laba_rugi_harian', 'keterangan':'Laba Rugi Harian'},
- {'jenis':'register_cargo_export', 'keterangan':'Ubahan Upi'},
- {'jenis':'izin_karyawan', 'keterangan':'Izin Karyawan'}
- ];
- }
- statusDokumenList = ["Tunggu", "Tertutup", "Batal"];
- }
- Future getData(String task, String dokumenJenis, String getDocType, String jenisId, String supplierId, String tglAwal, String tglAkhir, String bulan,
- String tahun, String statusDokumen, String start, String limit, String groupId) async {
- SharedPreferences prefs = await SharedPreferences.getInstance();
- http.Response response = await http.post("$baseUrl$serverCode", body: {
- "task" : task,
- "dokumen_jenis" : (dokumenJenis == null) ? "" : dokumenJenis,
- "get_doc_type" : getDocType,
- "jenis_id" : jenisId,
- "supplier_id" : supplierId,
- "tgl_awal" : tglAwal,
- "tgl_akhir" : tglAkhir,
- "bulan" : bulan,
- "tahun" : tahun,
- "status_dokumen" : (statusDokumen == null) ? "" : statusDokumen,
- "start" : start,
- "limit" : limit,
- "group_id" : groupId
- });
- if (response.statusCode == 200) {
- data = json.decode(response.body);
- print(data.toString());
- setState(() {
- persetujuandata = (data["total"] == "0") ? null : data["results"];
- if(updateCounter == true){
- if(_currentCabang == 'MJWJKT'){
- Map<String, dynamic> row = {
- DbHelper.columnMenusJktCount : (persetujuandata == null) ? 0 : persetujuandata.length
- };
- dbHelper.updateCount(row, 'Persetujuan');
- } else if(_currentCabang == 'MJWSBY'){
- Map<String, dynamic> row = {
- DbHelper.columnMenusSbyCount : (persetujuandata == null) ? 0 : persetujuandata.length
- };
- dbHelper.updateCount(row, 'Persetujuan');
- } else {
- Map<String, dynamic> row = {
- DbHelper.columnMenusTestCount : (persetujuandata == null) ? 0 : persetujuandata.length
- };
- dbHelper.updateCount(row, 'Persetujuan');
- }
- loading = false;
- } else {
- loading = false;
- updateCounter = true;
- }
- });
- /*if(updateCounter == true){
- setState(() {
- persetujuandata = (data["total"] == "0") ? null : data["results"];
- if (_currentCabang == 'MJWJKT'){
- _persetujuanJktCount = (persetujuandata == null) ? 0 : persetujuandata.length;
- prefs.setString('persetujuanJktCount', _persetujuanJktCount.toString());
- } else if(_currentCabang == 'MJWSBY'){
- _persetujuanSbyCount = (persetujuandata == null) ? 0 : persetujuandata.length;
- prefs.setString('persetujuanSbyCount', _persetujuanSbyCount.toString());
- } else {
- _persetujuanTestingCount = (persetujuandata == null) ? 0 : persetujuandata.length;
- prefs.setString('persetujuanTestingCount', _persetujuanTestingCount.toString());
- print('new counter: '+_persetujuanTestingCount.toString());
- }
- loading = false;
- });
- } else {
- setState(() {
- persetujuandata = (data["total"] == "0") ? null : data["results"];
- loading = false;
- updateCounter = true;
- });
- } */
- } else {
- return null;
- }
- }
- Future perpanjanganVl(String tbeliId, String tbeliTanggalAsal, String jmlHari) async {
- http.Response response = await http.post("$baseUrl${urlPerpanjangan}", body: {
- "tbeli_id" : tbeliId,
- "tbeli_tanggal_asal" : tbeliTanggalAsal,
- "jml_hari" : jmlHari
- });
- if (response.statusCode == 200) {
- print("Update Berhasil");
- print(response);
- setState(() {
- loading = false;
- getData("DOKUMENDAFTAR", "", "", "", "", "", "", "", "", "", "0", "100", groupId);
- });
- //Kembali Ke halaman daftar persetujuan
- /*Navigator.of(context).pushReplacementNamed('/EbmListPage',
- arguments: {'tanggal': (selectedDate == null) ? "$ebmTanggal" : "$selectedDate"});*/
- // Navigator.of(context).pushNamedAndRemoveUntil(
- // '/EbmListPage', ModalRoute.withName('/MainPage'),
- // arguments: {'tanggal': (selectedDate == null) ? "$ebmTanggal" : "$selectedDate"}
- // );
- } else {
- print("$baseUrl${urlPerpanjangan}");
- }
- }
- void _onRefresh() async{
- await Future.delayed(Duration(milliseconds: 1000));
- // if failed,use refreshFailed()
- _refreshController.refreshCompleted();
- getData("DOKUMENDAFTAR", "", "", "", "", "", "", "", "", "", "0", "100", groupId);
- }
- void _onLoading() async{
- // monitor network fetch
- await Future.delayed(Duration(milliseconds: 1000));
- // if failed,use loadFailed(),if no data return,use LoadNodata()
- setState(() {});
- _refreshController.loadComplete();
- }
- void goToNewScreen(BuildContext context, String docId, String docTanggal, String docType, String docNo, String docRevised, String docStatDok) async {
- SharedPreferences prefs = await SharedPreferences.getInstance();
- setState(() {
- prefs.setString('persetujuan_docId', docId);
- prefs.setString('persetujuan_docTanggal', docTanggal);
- prefs.setString('persetujuan_docType', docType);
- prefs.setString('persetujuan_docNo', docNo);
- prefs.setString('persetujuan_docRevised', docRevised);
- prefs.setString('persetujuan_docStatDok', docStatDok);
- Navigator.of(context).pushNamed('/PersetujuanDetailPage');
- });
- }
- void _bottomSheetFilterSearch(context){
- showModalBottomSheet(
- context: context,
- backgroundColor: Colors.transparent,
- builder: (BuildContext bc){
- return Container(
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: new BorderRadius.only(
- topLeft: const Radius.circular(20.0),
- topRight: const Radius.circular(20.0)
- )
- ),
- child: new Wrap(
- children: <Widget>[
- new Column(
- children: <Widget>[
- new Divider(height: 20),
- new InkWell(
- onTap: () => showDialogListData(context, "Jenis Dokumen"),
- child: Container(
- height: 40,
- width: double.infinity,
- margin: EdgeInsets.fromLTRB(10, 5, 10, 5),
- decoration: BoxDecoration(
- color: Colors.grey[100],
- borderRadius: new BorderRadius.all(const Radius.circular(20.0)),
- border: Border.all(color: Colors.grey)
- ),
- child: Padding(
- padding: EdgeInsets.all(10),
- child: Text((_currentDocType2 == null) ? "Pilih Jenis Dokumen" : _currentDocType2)
- )
- )
- ),
- new InkWell(
- onTap: () => showDialogListData(context, "Status Dokumen"),
- child: Container(
- height: 40,
- width: double.infinity,
- margin: EdgeInsets.fromLTRB(10, 5, 10, 5),
- decoration: BoxDecoration(
- color: Colors.grey[100],
- borderRadius: new BorderRadius.all(const Radius.circular(20.0)),
- border: Border.all(color: Colors.grey)
- ),
- child: Padding(
- padding: EdgeInsets.all(10),
- child: Text((_currentDocStat == null) ? "Pilih Status Dokumen" : _currentDocStat)
- )
- )
- ),
- Divider(height: 20),
- InkWell(
- onTap: () => {
- setState((){
- loading = true;
- updateCounter = false;
- }),
- Navigator.pop(context),
- getData("DOKUMENDAFTAR", _currentDocType1, "", "", "", "", "", "", "", _currentDocStat, "0", "100", groupId)
- },
- child: Container(
- margin: EdgeInsets.all(10.0),
- padding: EdgeInsets.all(10.0),
- decoration: BoxDecoration(
- color: Colors.lightBlue,
- borderRadius: new BorderRadius.all(const Radius.circular(20.0)),
- ),
- width: double.infinity,
- child: Text(
- "CARI",
- style: TextStyle(color: Colors.white),
- textAlign: TextAlign.center
- ),
- ),
- )
- ],
- ),
- ]
- )
- );
- }
- );
- }
- void showDialogListData(BuildContext context, String listData){
- AlertDialog dialog = new AlertDialog(
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(10.0),
- ),
- elevation: 0.0,
- backgroundColor: Colors.transparent,
- content: listDataContent(context, listData)
- );
- showDialog(context: context, child: dialog);
- }
- listDataContent(context, listData) {
- return Container(
- height: 350,
- width: 300,
- decoration: new BoxDecoration(
- color: Colors.blue,
- shape: BoxShape.rectangle,
- borderRadius: BorderRadius.circular(20.0),
- boxShadow: [
- BoxShadow(
- color: Colors.black26,
- blurRadius: 10.0,
- offset: const Offset(0.0, 10.0),
- ),
- ],
- ),
- child: Column(
- children: <Widget>[
- Container(
- padding: EdgeInsets.only(top: 10, bottom: 10),
- child: Text("$listData", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
- ),
- Container(
- decoration: new BoxDecoration(
- color: Colors.white,
- shape: BoxShape.rectangle,
- borderRadius: BorderRadius.only(
- bottomLeft: const Radius.circular(20.0),
- bottomRight: const Radius.circular(20.0)
- )
- ),
- height: 308,
- width: 300,
- padding: EdgeInsets.only(bottom: 10),
- child: ListView.builder(
- shrinkWrap: true,
- itemCount: (listData == 'Jenis Dokumen') ?
- (jenisDokumenList == null) ? 0 : jenisDokumenList.length :
- (statusDokumenList == null) ? 0 : statusDokumenList.length,
- itemBuilder: (BuildContext context, int index) {
- return InkWell(
- highlightColor: Colors.white.withAlpha(30),
- splashColor: Colors.white.withAlpha(20),
- child: Padding(
- padding: EdgeInsets.all(5),
- child: Text((listData == 'Jenis Dokumen') ? jenisDokumenList[index]["keterangan"] : statusDokumenList[index]),
- ),
- onTap: () =>
- {
- Navigator.pop(context),
- rebuildView(index, listData)
- },
- );
- }
- )
- )
- ],
- )
- );
- }
- void rebuildView(int index, String listData){
- (listData == 'Jenis Dokumen') ?
- setState((){
- _currentDocType1 = jenisDokumenList[index]["jenis"];
- _currentDocType2 = jenisDokumenList[index]["keterangan"];
- }) :
- setState((){
- _currentDocStat = statusDokumenList[index];
- });
- Navigator.pop(context);
- _bottomSheetFilterSearch(context);
- }
- // void showDialogPerpanjangVl(BuildContext context, dataList){
- // AlertDialog dialog = new AlertDialog(
- // shape: RoundedRectangleBorder(
- // borderRadius: BorderRadius.circular(10.0),
- // ),
- // elevation: 0.0,
- // backgroundColor: Colors.transparent,
- // content: dialogContent(context)
- // );
- // showDialog(context: context, child: dialog);
- // }
- // dialogContent(context, ) {
- // }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement