added cetak laporan

This commit is contained in:
kicap
2024-06-05 17:09:58 +08:00
parent 41ecbc0065
commit 0ad81dd67d
41 changed files with 3065 additions and 342 deletions

View File

@ -9,14 +9,18 @@ import './detail_dana_sosial_view_model.dart';
class DetailDanaSosialView extends StatelessWidget {
final int id;
const DetailDanaSosialView({Key? key, required this.id}) : super(key: key);
final bool isKhusus;
const DetailDanaSosialView(
{Key? key, required this.id, this.isKhusus = false})
: super(key: key);
@override
Widget build(BuildContext context) {
return ViewModelBuilder<DetailDanaSosialViewModel>.reactive(
viewModelBuilder: () => DetailDanaSosialViewModel(),
onViewModelReady: (DetailDanaSosialViewModel model) async {
await model.init(id);
await model.init(id, isKhusus);
},
builder: (
BuildContext context,
@ -37,7 +41,7 @@ class DetailDanaSosialView extends StatelessWidget {
child: CircularProgressIndicator(),
)
: (model.danaSosialModel!.bentuk == 'Pemasukan'
? const PemasukanWidget()
? const SafeArea(child: PemasukanWidget())
: const PengeluaranWidget()),
),
);
@ -205,147 +209,183 @@ class PemasukanWidget extends ViewModelWidget<DetailDanaSosialViewModel> {
@override
Widget build(BuildContext context, DetailDanaSosialViewModel viewModel) {
return Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: Alignment.centerLeft,
child: Text(
"Nama Donator",
style: regularTextStyle.copyWith(color: mainColor),
),
),
MyTextFormField(
controller: viewModel.namaController,
maxLines: 1,
readOnly: true,
),
const SizedBox(
height: 15,
),
Align(
alignment: Alignment.centerLeft,
child: Text(
"Tanggal",
style: regularTextStyle.copyWith(color: mainColor),
),
),
MyTextFormField(
controller: viewModel.tanggalController,
maxLines: 1,
readOnly: true,
),
const SizedBox(
height: 15,
),
Align(
alignment: Alignment.centerLeft,
child: Text(
"Jenis",
style: regularTextStyle.copyWith(color: mainColor),
),
),
MyTextFormField(
controller: viewModel.jenisController,
maxLines: 1,
readOnly: true,
),
Visibility(
visible: viewModel.jenisBool,
child: const SizedBox(
height: 15,
),
),
Visibility(
visible: viewModel.jenisBool,
child: Align(
alignment: Alignment.centerLeft,
child: Text(
"Jumlah",
style: regularTextStyle.copyWith(color: mainColor),
return SingleChildScrollView(
child: SizedBox(
height: MediaQuery.of(context).size.height,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: Alignment.centerLeft,
child: Text(
"Nama Donator",
style: regularTextStyle.copyWith(color: mainColor),
),
),
),
),
Visibility(
visible: viewModel.jenisBool,
child: MyTextFormField(
controller: viewModel.jumlahController,
maxLines: 1,
readOnly: true,
),
),
Visibility(
visible: !viewModel.jenisBool,
child: const SizedBox(
height: 15,
),
),
Visibility(
visible: !viewModel.jenisBool,
child: Align(
alignment: Alignment.centerLeft,
child: Text(
"Keterangan",
style: regularTextStyle.copyWith(color: mainColor),
MyTextFormField(
controller: viewModel.namaController,
maxLines: 1,
readOnly: true,
),
),
),
Visibility(
visible: !viewModel.jenisBool,
child: MyTextFormField(
controller: viewModel.keteranganController,
maxLines: 2,
readOnly: true,
),
),
const SizedBox(
height: 15,
),
Expanded(
child: Align(
alignment: Alignment.centerRight,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"Tanda Tangan",
const SizedBox(
height: 15,
),
Align(
alignment: Alignment.centerLeft,
child: Text(
"Tanggal",
style: regularTextStyle.copyWith(color: mainColor),
),
),
MyTextFormField(
controller: viewModel.tanggalController,
maxLines: 1,
readOnly: true,
),
const SizedBox(
height: 15,
),
Align(
alignment: Alignment.centerLeft,
child: Text(
"Jenis",
style: regularTextStyle.copyWith(color: mainColor),
),
),
MyTextFormField(
controller: viewModel.jenisController,
maxLines: 1,
readOnly: true,
),
Visibility(
visible: viewModel.jenisBool,
child: const SizedBox(
height: 15,
),
),
Visibility(
visible: viewModel.jenisBool,
child: Align(
alignment: Alignment.centerLeft,
child: Text(
"Jumlah",
style: regularTextStyle.copyWith(color: mainColor),
),
SizedBox(
height: 150,
width: 150,
child: viewModel.danaSosialModel == null
? Container(
decoration: BoxDecoration(
border: Border.all(color: mainColor),
),
)
: (viewModel.danaSosialModel!.status! ==
'Belum Dikonfirmasi'
? const TtdWidget()
: Image.asset(
'assets/qrcode.png',
fit: BoxFit.cover,
)),
),
const SizedBox(
height: 10,
),
Text(
"Dr. Andi Fitriani D, S.Ag, M.Pd",
style: regularTextStyle.copyWith(
color: mainColor,
fontWeight: FontWeight.bold,
),
),
// create a horizontal line
],
),
),
),
Visibility(
visible: viewModel.jenisBool,
child: MyTextFormField(
controller: viewModel.jumlahController,
maxLines: 1,
readOnly: true,
),
),
Visibility(
visible: !viewModel.jenisBool,
child: const SizedBox(
height: 15,
),
),
if (!viewModel.jenisBool)
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Jenis Barang",
style: regularTextStyle.copyWith(color: mainColor),
),
MyTextFormField(
controller: viewModel.jenisBarangController,
maxLines: 1,
readOnly: true,
),
const SizedBox(
height: 15,
),
Text(
"Jumlah Barang",
style: regularTextStyle.copyWith(color: mainColor),
),
MyTextFormField(
controller: viewModel.jumlahBarangController,
maxLines: 1,
readOnly: true,
),
const SizedBox(
height: 15,
),
],
),
Visibility(
visible: !viewModel.jenisBool,
child: Align(
alignment: Alignment.centerLeft,
child: Text(
"Keterangan",
style: regularTextStyle.copyWith(color: mainColor),
),
),
),
Visibility(
visible: !viewModel.jenisBool,
child: MyTextFormField(
controller: viewModel.keteranganController,
maxLines: 2,
readOnly: true,
),
),
const SizedBox(
height: 15,
),
Expanded(
child: Align(
alignment: Alignment.centerRight,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"Tanda Tangan",
style: regularTextStyle.copyWith(color: mainColor),
),
SizedBox(
height: 150,
width: 150,
child: viewModel.danaSosialModel == null
? Container(
decoration: BoxDecoration(
border: Border.all(color: mainColor),
),
)
: (viewModel.danaSosialModel!.status! ==
'Belum Dikonfirmasi'
? const TtdWidget()
: Image.asset(
'assets/qrcode.png',
fit: BoxFit.cover,
)),
),
const SizedBox(
height: 10,
),
Text(
"DRA. HJ. CIA",
style: regularTextStyle.copyWith(
color: mainColor,
fontWeight: FontWeight.bold,
),
),
// create a horizontal line
],
),
),
),
],
),
],
),
);
}
}
@ -361,7 +401,7 @@ class TtdWidget extends ViewModelWidget<DetailDanaSosialViewModel> {
decoration: BoxDecoration(
border: Border.all(color: mainColor),
),
child: viewModel.role == 'pimpinan'
child: viewModel.role == 'pimpinan' || viewModel.role == 'admin'
? InkWell(
onTap: () {
viewModel.handleTtd();

View File

@ -15,6 +15,8 @@ class DetailDanaSosialViewModel extends CustomBaseViewModel {
final _httpService = locator<MyHttpServices>();
final easyLoading = locator<MyEasyLoading>();
bool isKhusus = false;
int? idDanaSosial;
DanaSosialModel? danaSosialModel;
bool jenisBool = true;
@ -29,8 +31,14 @@ class DetailDanaSosialViewModel extends CustomBaseViewModel {
TextEditingController bentukController = TextEditingController();
Future<void> init(int id) async {
// my revision syntax
TextEditingController jenisBarangController = TextEditingController();
TextEditingController jumlahBarangController = TextEditingController();
// TextEditingController satuanController = TextEditingController();
Future<void> init(int id, bool isKhusus) async {
log.i('init and id: $id');
this.isKhusus = isKhusus;
getData(id);
idDanaSosial = id;
prefs.then((SharedPreferences prefs) {
@ -42,7 +50,10 @@ class DetailDanaSosialViewModel extends CustomBaseViewModel {
setBusy(true);
easyLoading.showLoading();
try {
var response = await _httpService.get('dana_sosial_detail?id=$id');
String url = isKhusus
? 'dana_sosial_khusus_detail?id=$id'
: 'dana_sosial_detail?id=$id';
var response = await _httpService.get(url);
log.i(response.data['data']);
danaSosialModel = DanaSosialModel.fromJson(response.data['data']);
namaController.text = danaSosialModel!.nama!;
@ -54,6 +65,12 @@ class DetailDanaSosialViewModel extends CustomBaseViewModel {
bentukController.text = danaSosialModel!.bentuk!;
// my revision syntax
jenisBarangController.text = danaSosialModel!.jenisBarang!;
jumlahBarangController.text =
'${danaSosialModel!.jumlahBarang!} ${danaSosialModel!.satuan!}';
// satuanController.text = danaSosialModel!.satuan! ;
if (danaSosialModel!.jenisDonasi == 'Uang') {
jenisBool = true;
} else {
@ -86,8 +103,9 @@ class DetailDanaSosialViewModel extends CustomBaseViewModel {
FormData formData = FormData.fromMap({
'id': idDanaSosial,
});
var response =
await _httpService.postWithFormData('dana_sosial_ttd', formData);
String url = isKhusus ? 'dana_sosial_khusus_ttd' : 'dana_sosial_ttd';
var response = await _httpService.postWithFormData(url, formData);
log.i(response.data);
getData(idDanaSosial!);