unknown
1 year ago
12 changed files with 418 additions and 419 deletions
After Width: | Height: | Size: 1005 KiB |
Before Width: | Height: | Size: 20 KiB |
@ -0,0 +1,206 @@ |
|||||||
|
import 'dart:convert'; |
||||||
|
|
||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:http/http.dart' as http; |
||||||
|
import 'package:intl/intl.dart'; |
||||||
|
import 'package:siopas/connection/connection.dart'; |
||||||
|
|
||||||
|
class DetailPengembalianBarangPage extends StatefulWidget { |
||||||
|
final int pengembalianId; |
||||||
|
const DetailPengembalianBarangPage({Key? key, required this.pengembalianId}) |
||||||
|
: super(key: key); |
||||||
|
|
||||||
|
@override |
||||||
|
_DetailPengembalianBarangPageState createState() => |
||||||
|
_DetailPengembalianBarangPageState(); |
||||||
|
} |
||||||
|
|
||||||
|
class _DetailPengembalianBarangPageState |
||||||
|
extends State<DetailPengembalianBarangPage> { |
||||||
|
Map<String, dynamic>? assetStatusData; |
||||||
|
|
||||||
|
String _formatDate(String date) { |
||||||
|
try { |
||||||
|
DateTime parsedDate = DateTime.parse(date); |
||||||
|
String formattedDate = |
||||||
|
DateFormat('EEEE, dd MMMM yyyy', 'id_ID').format(parsedDate); |
||||||
|
return formattedDate; |
||||||
|
} catch (e) { |
||||||
|
// Handle the case where the date string is not valid |
||||||
|
return 'Invalid date format'; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
void initState() { |
||||||
|
super.initState(); |
||||||
|
_fetchAssetStatusDataPengembalian(); |
||||||
|
} |
||||||
|
|
||||||
|
Future<void> _fetchAssetStatusDataPengembalian() async { |
||||||
|
try { |
||||||
|
final response = await http.get( |
||||||
|
Uri.parse( |
||||||
|
'$baseUrl/asset-status/pengembalian/show/${widget.pengembalianId}'), |
||||||
|
headers: { |
||||||
|
'Content-Type': 'application/json', |
||||||
|
}, |
||||||
|
); |
||||||
|
|
||||||
|
if (response.statusCode == 200) { |
||||||
|
setState(() { |
||||||
|
assetStatusData = json.decode(response.body)['data']['asset_status']; |
||||||
|
}); |
||||||
|
} else { |
||||||
|
throw Exception('Failed to load data'); |
||||||
|
} |
||||||
|
} catch (e) { |
||||||
|
print('Error fetching data: $e'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
Widget build(BuildContext context) { |
||||||
|
return Scaffold( |
||||||
|
backgroundColor: Colors.grey[200], |
||||||
|
appBar: AppBar( |
||||||
|
backgroundColor: Colors.indigo[700], |
||||||
|
elevation: 0, |
||||||
|
title: Text('Detail Pengembalian Barang', |
||||||
|
style: TextStyle( |
||||||
|
color: Colors.white, |
||||||
|
fontSize: 16, |
||||||
|
)), |
||||||
|
leading: IconButton( |
||||||
|
icon: Icon(Icons.arrow_back, color: Colors.white), |
||||||
|
onPressed: () { |
||||||
|
Navigator.pushNamed(context, '/pengembalian-barang'); |
||||||
|
}, |
||||||
|
), |
||||||
|
), |
||||||
|
body: Padding( |
||||||
|
padding: EdgeInsets.all(16.0), |
||||||
|
child: Card( |
||||||
|
shape: RoundedRectangleBorder( |
||||||
|
borderRadius: BorderRadius.circular(15.0), |
||||||
|
), |
||||||
|
elevation: 5, |
||||||
|
child: Column( |
||||||
|
children: [ |
||||||
|
Card( |
||||||
|
shape: RoundedRectangleBorder( |
||||||
|
borderRadius: |
||||||
|
BorderRadius.vertical(top: Radius.circular(15.0)), |
||||||
|
), |
||||||
|
elevation: 0, |
||||||
|
margin: EdgeInsets.all(0), |
||||||
|
color: Colors.indigo[700], |
||||||
|
child: Padding( |
||||||
|
padding: const EdgeInsets.all(16.0), |
||||||
|
child: Row( |
||||||
|
children: [ |
||||||
|
Icon(Icons.article, |
||||||
|
size: 40, |
||||||
|
color: Colors.white), // Ganti ikon sesuai kebutuhan |
||||||
|
SizedBox(width: 10), |
||||||
|
Text( |
||||||
|
'ID: ${widget.pengembalianId}', |
||||||
|
style: TextStyle( |
||||||
|
fontSize: 20, |
||||||
|
fontWeight: FontWeight.bold, |
||||||
|
color: Colors.white, |
||||||
|
), |
||||||
|
), |
||||||
|
], |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
SizedBox(height: 10), |
||||||
|
if (assetStatusData != null) ...[ |
||||||
|
_buildDetailItem( |
||||||
|
'Kode Peti', |
||||||
|
assetStatusData!['peti']['customer']['code_customer'] + |
||||||
|
' - ' + |
||||||
|
assetStatusData!['peti']['tipe_peti']['type'], |
||||||
|
), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'Nama Customer', |
||||||
|
assetStatusData!['peti']['customer']['name'] != null |
||||||
|
? assetStatusData!['peti']['customer']['name'] |
||||||
|
.toString() |
||||||
|
: '-'), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'Tgl Peminjaman', |
||||||
|
_formatDate(assetStatusData!['exit_at'] != null |
||||||
|
? assetStatusData!['exit_at'] |
||||||
|
: '-')), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'PJ Peminjaman', |
||||||
|
assetStatusData!['exit_pic'] != null |
||||||
|
? assetStatusData!['exit_pic'].toString() |
||||||
|
: '-'), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'Asal WH Peminjaman', |
||||||
|
assetStatusData!['warehouse']['name'] != null |
||||||
|
? assetStatusData!['warehouse']['name'].toString() |
||||||
|
: '-'), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'Tgl Pengembalian', |
||||||
|
assetStatusData!['enter_at'] != null && |
||||||
|
assetStatusData!['enter_at'] != '0000-00-00 00:00:00' |
||||||
|
? _formatDate(assetStatusData!['enter_at']) |
||||||
|
: '-', |
||||||
|
), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'PJ Pengembalian', |
||||||
|
assetStatusData!['enter_pic'] != null |
||||||
|
? assetStatusData!['enter_pic'].toString() |
||||||
|
: '-'), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'Tujuan WH Pengembalian', |
||||||
|
assetStatusData!['warehouse_enter'] != null |
||||||
|
? assetStatusData!['warehouse_enter']['name'].toString() |
||||||
|
: '-'), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'Kondisi Peti', |
||||||
|
assetStatusData!['kondisi_peti'] != null |
||||||
|
? assetStatusData!['kondisi_peti'].toString() |
||||||
|
: '-'), |
||||||
|
Divider(thickness: 1), |
||||||
|
_buildDetailItem( |
||||||
|
'Status', |
||||||
|
assetStatusData!['warehouse_enter'] != null |
||||||
|
? assetStatusData!['warehouse_enter']['name'].toString() |
||||||
|
: '-'), |
||||||
|
], |
||||||
|
], |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
Widget _buildDetailItem(String label, String value) { |
||||||
|
return Padding( |
||||||
|
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), |
||||||
|
child: Row( |
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
||||||
|
children: [ |
||||||
|
Text( |
||||||
|
label, |
||||||
|
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold), |
||||||
|
), |
||||||
|
Text(value), |
||||||
|
], |
||||||
|
), |
||||||
|
); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue