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,19 @@ import '../../widgets/my_textformfield.dart';
import './tambah_dana_sosial_view_model.dart';
class TambahDanaSosialView extends StatelessWidget {
const TambahDanaSosialView({super.key});
final bool isKhusus;
const TambahDanaSosialView({
Key? key,
this.isKhusus = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ViewModelBuilder<TambahDanaSosialViewModel>.reactive(
viewModelBuilder: () => TambahDanaSosialViewModel(),
onViewModelReady: (TambahDanaSosialViewModel model) async {
await model.init();
await model.init(isKhusus);
},
builder: (
BuildContext context,
@ -66,6 +71,7 @@ class TambahDanaSosialView extends StatelessWidget {
// model.setSelectedbentukDonasi(newValue!);
model.log.i(newValue);
model.bentukDonasi = newValue!;
model.notifyListeners();
},
items: model.bentukDonasiList.map((String value) {
@ -91,7 +97,8 @@ class TambahDanaSosialView extends StatelessWidget {
),
),
Visibility(
visible: model.bentukDonasi == 'Pemasukan',
visible: model.bentukDonasi == 'Pemasukan' &&
isKhusus == false,
child: MyTextFormField(
hintText: "Nama Donatur",
controller: model.namaController,
@ -100,6 +107,51 @@ class TambahDanaSosialView extends StatelessWidget {
// 'Nama Donatur tidak boleh kosong'),
),
),
Visibility(
visible: model.bentukDonasi == 'Pemasukan' &&
isKhusus == true,
child: Container(
width: double.infinity,
height: 60,
padding: const EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
border: Border.all(
color: mainColor,
),
),
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: model.donaturSelected,
onChanged: (String? newValue) {
// model.setSelectedjenisDonasi(newValue!);
model.log.i(newValue);
model.donaturSelected = newValue!;
// check where is the index and get the ['id_donatur']
var index = model.listDonatur.indexWhere(
(element) => element == newValue,
);
model.donaturSelectedIndex = int.parse(
model.listDonaturMap[index]['id_donatur'],
);
model.log.i(model.donaturSelectedIndex);
},
items: model.listDonatur.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(
value,
style: regularTextStyle.copyWith(
fontSize: 16,
),
),
);
}).toList(),
),
),
),
),
Visibility(
visible: model.bentukDonasi == 'Pemasukan',
child: const SizedBox(height: 20),
@ -141,6 +193,130 @@ class TambahDanaSosialView extends StatelessWidget {
),
),
),
// ini jika barang
if (model.jenisDonasi == 'Barang')
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 20),
Text(
"Jenis Barang",
style:
regularTextStyle.copyWith(color: mainColor),
),
Container(
width: double.infinity,
height: 60,
padding:
const EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
border: Border.all(
color: mainColor,
),
),
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: model.jenisBarangSelected,
onChanged: (String? newValue) {
// model.setSelectedjenisDonasi(newValue!);
model.log.i(newValue);
model.jenisBarangSelected = newValue!;
model.changeSatuan(newValue);
model.notifyListeners();
},
items:
model.jenisBarangList.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(
value,
style: regularTextStyle.copyWith(
fontSize: 16,
),
),
);
}).toList(),
),
),
),
],
),
// ini jika barang dan jenis barang beras dll
if (model.jenisDonasi == 'Barang' &&
(model.jenisBarangSelected == 'Beras' ||
model.jenisBarangSelected == 'Mi Instan' ||
model.jenisBarangSelected == 'Telur' ||
model.jenisBarangSelected == 'Gula'))
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 20),
Text(
"Pilih Satuan ${model.jenisBarangSelected}",
style:
regularTextStyle.copyWith(color: mainColor),
),
Container(
width: double.infinity,
height: 60,
padding:
const EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
border: Border.all(
color: mainColor,
),
),
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: model.satuanSelected,
onChanged: (String? newValue) {
// model.setSelectedjenisDonasi(newValue!);
model.log.i(newValue);
model.satuanSelected = newValue!;
model.notifyListeners();
},
items: model.satuanList.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(
value,
style: regularTextStyle.copyWith(
fontSize: 16,
),
),
);
}).toList(),
),
),
),
],
),
// ini jika barang dan jenis barang dll
if (model.jenisDonasi == 'Barang')
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 20),
Text(
"Jumlah ${model.satuanSelected}",
style:
regularTextStyle.copyWith(color: mainColor),
),
MyTextFormField(
hintText: "Jumlah ${model.satuanSelected}",
controller: model.jumlahBarangController,
maxLines: 1,
keyboardType: TextInputType.number,
maxLength: 3,
// validator: Validatorless.required(
// 'Nama Donatur tidak boleh kosong'),
),
],
),
Visibility(
visible: model.jenisDonasi == 'Uang',
child: const SizedBox(height: 20),
@ -212,6 +388,15 @@ class TambahDanaSosialView extends StatelessWidget {
MyButton(
text: "Simpan Data",
onPressed: () {
if (isKhusus &&
model.donaturSelected == '-Tiada Donatur-') {
model.snackbarService.showSnackbar(
message: 'Donatur harus diisi terlebih dahulu',
title: 'Gagal',
duration: const Duration(seconds: 2),
);
return;
}
if (model.formKey.currentState!.validate()) {
model.log.i('Form Valid');
model.addData();

View File

@ -23,10 +23,77 @@ class TambahDanaSosialViewModel extends CustomBaseViewModel {
TextEditingController namaController = TextEditingController();
TextEditingController jumlahController = TextEditingController();
TextEditingController jumlahBarangController = TextEditingController();
TextEditingController tanggalController = TextEditingController();
TextEditingController keteranganController = TextEditingController();
Future<void> init() async {}
// my revision syntax
List<String> jenisBarangList = [
'Beras',
'Minyak',
'Mi Instan',
'Telur',
'Gula',
'Susu',
'Pakaian'
];
String jenisBarangSelected = 'Beras';
String satuanSelected = 'Kg';
// TextEditingController jumlahBarangController = TextEditingController();
bool isJenisBarangSelected = true;
List<String> satuanLiterKg = ['Liter', 'Kg'];
List<String> satuanBungkusDos = ['Bungkus', 'Dos'];
List<String> satuanButirRak = ['Butir', 'Rak'];
List<String> satuanList = ['Liter', 'Kg'];
// end of my revision syntax
// the new revision syntax
bool isKhusus = false;
List<String> listDonatur = ['-Tiada Donatur-'];
List<Map<String, dynamic>> listDonaturMap = [];
String donaturSelected = '-Tiada Donatur-';
int donaturSelectedIndex = 0;
// end of the new revision syntax
Future<void> init(bool isKhusus) async {
this.isKhusus = isKhusus;
if (isKhusus) {
bentukDonasiList = ['Pemasukan'];
getDonatur();
}
}
getDonatur() async {
setBusy(true);
easyLoading.customLoading('Mengambil data...');
try {
var response = await _httpService.get('donatur');
Map<String, dynamic> data = response.data;
// log.i(data);
int jumlah = data['jumlah'];
if (jumlah > 0) {
listDonatur.clear();
for (var i = 0; i < data['data'].length; i++) {
listDonatur.add(data['data'][i]['nama_donatur']);
listDonaturMap.add(data['data'][i]);
}
// get the [id_donatur] of the first [donatur
donaturSelected = listDonatur[0];
donaturSelectedIndex = int.parse(listDonaturMap[0]['id_donatur']);
log.i(donaturSelectedIndex);
}
} catch (e) {
log.e(e);
} finally {
setBusy(false);
easyLoading.dismissLoading();
}
}
void changeDate(BuildContext context) async {
// get today's date
@ -46,6 +113,7 @@ class TambahDanaSosialViewModel extends CustomBaseViewModel {
void addData() async {
easyLoading.customLoading('Menambahkan data...');
log.i(donaturSelectedIndex);
try {
var formData = FormData.fromMap({
'bentuk': bentukDonasi,
@ -54,9 +122,17 @@ class TambahDanaSosialViewModel extends CustomBaseViewModel {
'tanggal': tanggalController.text,
'ket': keteranganController.text,
'jenis': jenisDonasi,
'jenis_barang': jenisDonasi == 'Barang' ? jenisBarangSelected : null,
'satuan': jenisDonasi == 'Barang' ? satuanSelected : null,
'jumlah_barang':
jenisDonasi == 'Barang' ? jumlahBarangController.text : null,
'donatur': isKhusus ? donaturSelectedIndex : null,
});
var response =
await _httpService.postWithFormData('dana_sosial', formData);
// await _httpService.postWithFormData('dana_sosial', formData);
await _httpService.postWithFormData(
!isKhusus ? 'dana_sosial' : 'dana_sosial_khusus', formData);
log.i(response.data);
easyLoading.showSuccess(" Data berhasil ditambahkan");
navigationService.navigateTo(Routes.adminIndexTrackingView);
@ -71,4 +147,49 @@ class TambahDanaSosialViewModel extends CustomBaseViewModel {
easyLoading.dismissLoading();
}
}
// my revision syntax
changeSatuan(String value) {
jenisBarangSelected = value;
switch (value) {
case 'Beras':
isJenisBarangSelected = true;
satuanSelected = 'Kg';
satuanList = satuanLiterKg;
break;
case 'Minyak':
isJenisBarangSelected = false;
satuanSelected = 'Liter';
break;
case 'Mi Instan':
isJenisBarangSelected = true;
satuanSelected = 'Bungkus';
satuanList = satuanBungkusDos;
break;
case 'Telur':
isJenisBarangSelected = true;
satuanSelected = 'Butir';
satuanList = satuanButirRak;
break;
case 'Gula':
isJenisBarangSelected = true;
satuanSelected = 'Kg';
satuanList = satuanLiterKg;
break;
case 'Susu':
isJenisBarangSelected = false;
satuanSelected = 'Liter';
break;
case 'Pakaian':
isJenisBarangSelected = false;
satuanSelected = 'Helai';
// satuanList = satuanButirRak;
break;
default:
satuanSelected = '';
}
// notifyListeners();
}
}