added cetak laporan
This commit is contained in:
@ -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();
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user