Perbarui tampilan CalendarViewWidget dengan menambahkan padding dan memperbaiki pengaturan gaya untuk meningkatkan pengalaman pengguna. Sederhanakan struktur tampilan di PenyaluranView dengan menghapus elemen yang tidak perlu dan langsung menampilkan CalendarViewWidget.
This commit is contained in:
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>ۈ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
|
|
||||||
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\additional_project_files.txt <08>ۈ<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\additional_project_files.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build.json <08>ۈ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build_mini.json <08>ۈ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2p
|
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build_mini.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2p
|
||||||
n
|
n
|
||||||
lD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja <08>ۈ<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
lD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
||||||
r
|
r
|
||||||
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja.txt <08>ۈ<EFBFBD><EFBFBD>2y
|
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2y
|
||||||
w
|
w
|
||||||
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build_file_index.txt <08>ۈ<EFBFBD><EFBFBD>2
|
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build_file_index.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2z
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2z
|
||||||
x
|
x
|
||||||
vD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json <08><><EFBFBD><EFBFBD><EFBFBD>2 ~
|
vD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json <08><><EFBFBD><EFBFBD><EFBFBD>2 ~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json.bin <08><><EFBFBD><EFBFBD><EFBFBD>2
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json.bin <08><><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\metadata_generation_command.txt <08><><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\metadata_generation_command.txt <08><><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
||||||
u
|
u
|
||||||
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>܈<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\additional_project_files.txt <08>܈<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\additional_project_files.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
~
|
~
|
||||||
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build.json <08>܈<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build_mini.json <08>܈<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2r
|
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build_mini.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2r
|
||||||
p
|
p
|
||||||
nD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja <08>܈<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
nD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
||||||
t
|
t
|
||||||
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja.txt <08>܈<EFBFBD><EFBFBD>2{
|
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2{
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build_file_index.txt <08>܈<EFBFBD><EFBFBD>2
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build_file_index.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
||||||
z
|
z
|
||||||
xD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json <08><><EFBFBD><EFBFBD><EFBFBD>2 <09>
|
xD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json <08><><EFBFBD><EFBFBD><EFBFBD>2 <09>
|
||||||
~
|
~
|
||||||
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json.bin <08><><EFBFBD><EFBFBD><EFBFBD>2
|
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json.bin <08><><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\metadata_generation_command.txt <08><><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\metadata_generation_command.txt <08><><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
||||||
w
|
w
|
||||||
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>݈<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\additional_project_files.txt <08>݈<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2x
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\additional_project_files.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2x
|
||||||
v
|
v
|
||||||
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build.json <08>݈<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2}
|
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2}
|
||||||
{
|
{
|
||||||
yD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build_mini.json <08>݈<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2j
|
yD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build_mini.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2j
|
||||||
h
|
h
|
||||||
fD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja <08>݈<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2n
|
fD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2n
|
||||||
l
|
l
|
||||||
jD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja.txt <08>݈<EFBFBD><EFBFBD>2s
|
jD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2s
|
||||||
q
|
q
|
||||||
oD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build_file_index.txt <08>݈<EFBFBD><EFBFBD>2
|
oD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build_file_index.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
||||||
r
|
r
|
||||||
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json ɀ<><C980><EFBFBD>2 x
|
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json ɀ<><C980><EFBFBD>2 x
|
||||||
v
|
v
|
||||||
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json.bin ɀ<><C980><EFBFBD>2
|
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json.bin ɀ<><C980><EFBFBD>2
|
||||||
~
|
~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\metadata_generation_command.txt ɀ<><C980><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\metadata_generation_command.txt ɀ<><C980><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
||||||
o
|
o
|
||||||
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\prefab_config.json ɀ<><C980><EFBFBD>2
|
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\prefab_config.json ɀ<><C980><EFBFBD>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>ވ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\additional_project_files.txt <08>ވ<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\additional_project_files.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build.json <08>ވ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
~
|
~
|
||||||
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build_mini.json <08>ވ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2m
|
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build_mini.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2m
|
||||||
k
|
k
|
||||||
iD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja <08>ވ<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
iD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
||||||
o
|
o
|
||||||
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja.txt <08>ވ<EFBFBD><EFBFBD>2v
|
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2v
|
||||||
t
|
t
|
||||||
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build_file_index.txt <08>ވ<EFBFBD><EFBFBD>2
|
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build_file_index.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
||||||
u
|
u
|
||||||
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json <08><><EFBFBD><EFBFBD><EFBFBD>2 {
|
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json <08><><EFBFBD><EFBFBD><EFBFBD>2 {
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json.bin <08><><EFBFBD><EFBFBD><EFBFBD>2
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json.bin <08><><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
|
|
||||||
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\metadata_generation_command.txt <08><><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\metadata_generation_command.txt <08><><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
||||||
r
|
r
|
||||||
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
@ -3,15 +3,12 @@ import 'package:get/get.dart';
|
|||||||
import 'package:penyaluran_app/app/data/models/penerima_penyaluran_model.dart';
|
import 'package:penyaluran_app/app/data/models/penerima_penyaluran_model.dart';
|
||||||
import 'package:penyaluran_app/app/modules/penyaluran/detail_penyaluran_controller.dart';
|
import 'package:penyaluran_app/app/modules/penyaluran/detail_penyaluran_controller.dart';
|
||||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
|
||||||
import 'package:penyaluran_app/app/modules/penyaluran/konfirmasi_penerima_page.dart';
|
import 'package:penyaluran_app/app/modules/penyaluran/konfirmasi_penerima_page.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
import 'package:penyaluran_app/app/data/models/penyaluran_bantuan_model.dart';
|
|
||||||
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
||||||
|
|
||||||
class DetailPenyaluranPage extends StatelessWidget {
|
class DetailPenyaluranPage extends StatelessWidget {
|
||||||
final controller = Get.put(DetailPenyaluranController());
|
final controller = Get.put(DetailPenyaluranController());
|
||||||
final ImagePicker _picker = ImagePicker();
|
|
||||||
final searchController = TextEditingController();
|
final searchController = TextEditingController();
|
||||||
final RxString searchQuery = ''.obs;
|
final RxString searchQuery = ''.obs;
|
||||||
final RxString statusFilter = 'SEMUA'.obs;
|
final RxString statusFilter = 'SEMUA'.obs;
|
||||||
@ -65,16 +62,14 @@ class DetailPenyaluranPage extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
_buildInfoCard(context),
|
_buildInfoCard(context),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
_buildPenerimaPenyaluranSection(context),
|
|
||||||
const SizedBox(height: 24),
|
|
||||||
// Menampilkan section alasan pembatalan jika status BATALTERLAKSANA
|
|
||||||
if (controller.penyaluran.value?.status?.toUpperCase() ==
|
if (controller.penyaluran.value?.status?.toUpperCase() ==
|
||||||
'BATALTERLAKSANA' &&
|
'BATALTERLAKSANA' &&
|
||||||
controller.penyaluran.value?.alasanPembatalan != null &&
|
controller.penyaluran.value?.alasanPembatalan != null &&
|
||||||
controller.penyaluran.value!.alasanPembatalan!.isNotEmpty)
|
controller.penyaluran.value!.alasanPembatalan!.isNotEmpty)
|
||||||
_buildPembatalanSection(context),
|
_buildPembatalanSection(context),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
_buildPenerimaPenyaluranSection(context),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
// Tombol aksi akan ditampilkan di bottomNavigationBar
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -161,7 +156,7 @@ class DetailPenyaluranPage extends StatelessWidget {
|
|||||||
_buildInfoRow(
|
_buildInfoRow(
|
||||||
'Tanggal',
|
'Tanggal',
|
||||||
penyaluran.tanggalPenyaluran != null
|
penyaluran.tanggalPenyaluran != null
|
||||||
? DateFormatter.formatDateTime(
|
? DateTimeHelper.formatDateTime(
|
||||||
penyaluran.tanggalPenyaluran!)
|
penyaluran.tanggalPenyaluran!)
|
||||||
: 'Belum dijadwalkan'),
|
: 'Belum dijadwalkan'),
|
||||||
// Tampilkan tanggal selesai jika status TERLAKSANA atau BATALTERLAKSANA
|
// Tampilkan tanggal selesai jika status TERLAKSANA atau BATALTERLAKSANA
|
||||||
@ -170,7 +165,8 @@ class DetailPenyaluranPage extends StatelessWidget {
|
|||||||
_buildInfoRow(
|
_buildInfoRow(
|
||||||
'Tanggal Selesai',
|
'Tanggal Selesai',
|
||||||
penyaluran.tanggalSelesai != null
|
penyaluran.tanggalSelesai != null
|
||||||
? DateFormatter.formatDateTime(penyaluran.tanggalSelesai!)
|
? DateTimeHelper.formatDateTime(
|
||||||
|
penyaluran.tanggalSelesai!)
|
||||||
: '-'),
|
: '-'),
|
||||||
_buildInfoRow(
|
_buildInfoRow(
|
||||||
'Jumlah Penerima', '${penyaluran.jumlahPenerima ?? 0} orang'),
|
'Jumlah Penerima', '${penyaluran.jumlahPenerima ?? 0} orang'),
|
||||||
@ -201,72 +197,6 @@ class DetailPenyaluranPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
||||||
// Alasan penolakan jika ada
|
|
||||||
if (penyaluran.alasanPembatalan != null &&
|
|
||||||
penyaluran.alasanPembatalan!.isNotEmpty) ...[
|
|
||||||
const Divider(height: 24),
|
|
||||||
if (penyaluran.status?.toUpperCase() == 'BATALTERLAKSANA') ...[
|
|
||||||
Container(
|
|
||||||
width: double.infinity,
|
|
||||||
padding: const EdgeInsets.all(12),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: AppTheme.errorColor.withOpacity(0.1),
|
|
||||||
borderRadius: BorderRadius.circular(8),
|
|
||||||
border: Border.all(
|
|
||||||
color: AppTheme.errorColor.withOpacity(0.5),
|
|
||||||
width: 1,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Icon(
|
|
||||||
Icons.cancel_outlined,
|
|
||||||
color: AppTheme.errorColor,
|
|
||||||
size: 20,
|
|
||||||
),
|
|
||||||
const SizedBox(width: 8),
|
|
||||||
Text(
|
|
||||||
'Alasan Pembatalan:',
|
|
||||||
style: TextStyle(
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
color: AppTheme.errorColor,
|
|
||||||
fontSize: 16,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
const SizedBox(height: 8),
|
|
||||||
Text(
|
|
||||||
penyaluran.alasanPembatalan!,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.red[700],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
] else ...[
|
|
||||||
Text(
|
|
||||||
'Alasan Pembatalan:',
|
|
||||||
style: TextStyle(
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
color: Colors.red[700],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 4),
|
|
||||||
Text(
|
|
||||||
penyaluran.alasanPembatalan!,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.red[700],
|
|
||||||
fontStyle: FontStyle.italic,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -1339,7 +1269,7 @@ class DetailPenyaluranPage extends StatelessWidget {
|
|||||||
if (penerima.tanggalPenerimaan != null)
|
if (penerima.tanggalPenerimaan != null)
|
||||||
_buildInfoRow(
|
_buildInfoRow(
|
||||||
'Tanggal Penerimaan',
|
'Tanggal Penerimaan',
|
||||||
DateFormatter.formatDate(
|
DateTimeHelper.formatDate(
|
||||||
penerima.tanggalPenerimaan!)),
|
penerima.tanggalPenerimaan!)),
|
||||||
if (penerima.jumlahBantuan != null)
|
if (penerima.jumlahBantuan != null)
|
||||||
_buildInfoRow('Jumlah Bantuan',
|
_buildInfoRow('Jumlah Bantuan',
|
||||||
@ -1458,8 +1388,7 @@ class DetailPenyaluranPage extends StatelessWidget {
|
|||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
)),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -1532,7 +1461,7 @@ class DetailPenyaluranPage extends StatelessWidget {
|
|||||||
_buildInfoRow('Status', 'Batal Terlaksana'),
|
_buildInfoRow('Status', 'Batal Terlaksana'),
|
||||||
if (penyaluran.tanggalSelesai != null)
|
if (penyaluran.tanggalSelesai != null)
|
||||||
_buildInfoRow('Tanggal Pembatalan',
|
_buildInfoRow('Tanggal Pembatalan',
|
||||||
DateFormatter.formatDateTime(penyaluran.tanggalSelesai!)),
|
DateTimeHelper.formatDateTime(penyaluran.tanggalSelesai!)),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
const Text(
|
const Text(
|
||||||
'Alasan Pembatalan:',
|
'Alasan Pembatalan:',
|
||||||
|
@ -9,7 +9,7 @@ import 'package:signature/signature.dart';
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'dart:ui' as ui;
|
import 'dart:ui' as ui;
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
|
|
||||||
class KonfirmasiPenerimaPage extends StatefulWidget {
|
class KonfirmasiPenerimaPage extends StatefulWidget {
|
||||||
final PenerimaPenyaluranModel penerima;
|
final PenerimaPenyaluranModel penerima;
|
||||||
@ -187,7 +187,7 @@ class _KonfirmasiPenerimaPageState extends State<KonfirmasiPenerimaPage> {
|
|||||||
'Tempat, Tanggal Lahir',
|
'Tempat, Tanggal Lahir',
|
||||||
warga?['tempat_lahir'] != null &&
|
warga?['tempat_lahir'] != null &&
|
||||||
warga?['tanggal_lahir'] != null
|
warga?['tanggal_lahir'] != null
|
||||||
? '${warga!['tempat_lahir']}, ${DateFormatter.formatDate(DateTime.parse(warga['tanggal_lahir']), format: 'd MMMM yyyy')}'
|
? '${warga!['tempat_lahir']}, ${DateTimeHelper.formatDate(DateTime.parse(warga['tanggal_lahir']), format: 'd MMMM yyyy')}'
|
||||||
: 'Bogor, 2 Juni 1990'),
|
: 'Bogor, 2 Juni 1990'),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
|
|
||||||
@ -223,9 +223,9 @@ class _KonfirmasiPenerimaPageState extends State<KonfirmasiPenerimaPage> {
|
|||||||
|
|
||||||
String tanggalWaktuPenyaluran = '';
|
String tanggalWaktuPenyaluran = '';
|
||||||
if (widget.tanggalPenyaluran != null) {
|
if (widget.tanggalPenyaluran != null) {
|
||||||
final tanggal = DateFormatter.formatDate(widget.tanggalPenyaluran!);
|
final tanggal = DateTimeHelper.formatDate(widget.tanggalPenyaluran!);
|
||||||
final waktuMulai = DateFormatter.formatTime(widget.tanggalPenyaluran!);
|
final waktuMulai = DateTimeHelper.formatTime(widget.tanggalPenyaluran!);
|
||||||
final waktuSelesai = DateFormatter.formatTime(
|
final waktuSelesai = DateTimeHelper.formatTime(
|
||||||
widget.tanggalPenyaluran!.add(const Duration(hours: 1)));
|
widget.tanggalPenyaluran!.add(const Duration(hours: 1)));
|
||||||
tanggalWaktuPenyaluran = '$tanggal $waktuMulai-$waktuSelesai';
|
tanggalWaktuPenyaluran = '$tanggal $waktuMulai-$waktuSelesai';
|
||||||
} else {
|
} else {
|
||||||
|
@ -42,7 +42,9 @@ class CalendarViewWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: SizedBox(
|
||||||
height: MediaQuery.of(context).size.height * 0.65,
|
height: MediaQuery.of(context).size.height * 0.65,
|
||||||
child: Obx(() {
|
child: Obx(() {
|
||||||
return SfCalendar(
|
return SfCalendar(
|
||||||
@ -50,7 +52,8 @@ class CalendarViewWidget extends StatelessWidget {
|
|||||||
dataSource: _getCalendarDataSource(),
|
dataSource: _getCalendarDataSource(),
|
||||||
timeZone: 'Asia/Jakarta',
|
timeZone: 'Asia/Jakarta',
|
||||||
monthViewSettings: MonthViewSettings(
|
monthViewSettings: MonthViewSettings(
|
||||||
appointmentDisplayMode: MonthAppointmentDisplayMode.indicator,
|
appointmentDisplayMode:
|
||||||
|
MonthAppointmentDisplayMode.indicator,
|
||||||
showAgenda: true,
|
showAgenda: true,
|
||||||
agendaViewHeight: MediaQuery.of(context).size.height * 0.3,
|
agendaViewHeight: MediaQuery.of(context).size.height * 0.3,
|
||||||
agendaItemHeight: 60,
|
agendaItemHeight: 60,
|
||||||
@ -123,6 +126,7 @@ class CalendarViewWidget extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
|
|
||||||
class PenerimaController extends GetxController {
|
class PenerimaController extends GetxController {
|
||||||
final RxList<Map<String, dynamic>> daftarPenerima =
|
final RxList<Map<String, dynamic>> daftarPenerima =
|
||||||
@ -190,7 +190,7 @@ class PenerimaController extends GetxController {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (picked != null) {
|
if (picked != null) {
|
||||||
tanggalPenyaluran.value = DateFormatter.formatDate(picked);
|
tanggalPenyaluran.value = DateTimeHelper.formatDate(picked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import 'package:penyaluran_app/app/theme/app_theme.dart';
|
|||||||
import 'package:penyaluran_app/app/data/models/donatur_model.dart';
|
import 'package:penyaluran_app/app/data/models/donatur_model.dart';
|
||||||
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
||||||
import 'package:penyaluran_app/app/widgets/detail_penitipan_dialog.dart';
|
import 'package:penyaluran_app/app/widgets/detail_penitipan_dialog.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
|
|
||||||
class DetailDonaturView extends GetView<DonaturController> {
|
class DetailDonaturView extends GetView<DonaturController> {
|
||||||
const DetailDonaturView({super.key});
|
const DetailDonaturView({super.key});
|
||||||
@ -207,7 +207,7 @@ class DetailDonaturView extends GetView<DonaturController> {
|
|||||||
Icons.calendar_today,
|
Icons.calendar_today,
|
||||||
'Terdaftar Sejak',
|
'Terdaftar Sejak',
|
||||||
donatur.createdAt != null
|
donatur.createdAt != null
|
||||||
? DateFormatter.formatDate(donatur.createdAt!)
|
? DateTimeHelper.formatDate(donatur.createdAt!)
|
||||||
: 'Tidak diketahui',
|
: 'Tidak diketahui',
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -433,7 +433,7 @@ class DetailDonaturView extends GetView<DonaturController> {
|
|||||||
Widget _buildDonasiItem(PenitipanBantuanModel penitipan) {
|
Widget _buildDonasiItem(PenitipanBantuanModel penitipan) {
|
||||||
final isUang = penitipan.isUang == true;
|
final isUang = penitipan.isUang == true;
|
||||||
final tanggal = penitipan.createdAt != null
|
final tanggal = penitipan.createdAt != null
|
||||||
? DateFormatter.formatDate(penitipan.createdAt!, format: 'dd MMM yyyy')
|
? DateTimeHelper.formatDate(penitipan.createdAt!, format: 'dd MMM yyyy')
|
||||||
: 'Tanggal tidak diketahui';
|
: 'Tanggal tidak diketahui';
|
||||||
|
|
||||||
String nilaiDonasi = '';
|
String nilaiDonasi = '';
|
||||||
|
@ -55,7 +55,7 @@ class DetailPenerimaView extends GetView<PenerimaController> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
bottomNavigationBar: _buildBottomButtons(penerima),
|
// bottomNavigationBar: _buildBottomButtons(penerima),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -345,84 +345,4 @@ class DetailPenerimaView extends GetView<PenerimaController> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildBottomButtons(Map<String, dynamic> penerima) {
|
|
||||||
// Jika status sudah selesai, tidak perlu menampilkan tombol
|
|
||||||
if (penerima['status'] == 'Selesai') {
|
|
||||||
return Container(
|
|
||||||
padding: const EdgeInsets.all(16),
|
|
||||||
child: ElevatedButton.icon(
|
|
||||||
onPressed: () {
|
|
||||||
// Implementasi lihat riwayat penyaluran
|
|
||||||
},
|
|
||||||
icon: const Icon(Icons.history),
|
|
||||||
label: const Text('Lihat Riwayat Penyaluran'),
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
backgroundColor: AppTheme.primaryColor,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 12),
|
|
||||||
shape: RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.circular(8),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Jika status belum disalurkan, tampilkan tombol jadwalkan
|
|
||||||
if (penerima['status'] == 'Belum disalurkan') {
|
|
||||||
return Container(
|
|
||||||
padding: const EdgeInsets.all(16),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: ElevatedButton.icon(
|
|
||||||
onPressed: () {
|
|
||||||
// Implementasi jadwalkan penyaluran
|
|
||||||
},
|
|
||||||
icon: const Icon(Icons.event),
|
|
||||||
label: const Text('Jadwalkan Penyaluran'),
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
backgroundColor: AppTheme.primaryColor,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 12),
|
|
||||||
shape: RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.circular(8),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Jika status terjadwal, tampilkan tombol konfirmasi penyaluran
|
|
||||||
return Container(
|
|
||||||
padding: const EdgeInsets.all(16),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: ElevatedButton.icon(
|
|
||||||
onPressed: () {
|
|
||||||
// Navigasi ke halaman konfirmasi penerima
|
|
||||||
Get.toNamed('/daftar-penerima/konfirmasi',
|
|
||||||
arguments: penerima['id']);
|
|
||||||
},
|
|
||||||
icon: const Icon(Icons.check_circle),
|
|
||||||
label: const Text('Konfirmasi Penyaluran'),
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
backgroundColor: AppTheme.successColor,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 12),
|
|
||||||
shape: RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.circular(8),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import 'package:penyaluran_app/app/data/models/donatur_model.dart';
|
|||||||
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/penitipan_bantuan_controller.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/penitipan_bantuan_controller.dart';
|
||||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
import 'package:penyaluran_app/app/widgets/detail_penitipan_dialog.dart';
|
import 'package:penyaluran_app/app/widgets/detail_penitipan_dialog.dart';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ class PenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
context,
|
context,
|
||||||
icon: Icons.pending_actions,
|
icon: Icons.pending_actions,
|
||||||
title: 'Menunggu',
|
title: 'Menunggu',
|
||||||
value: DateFormatter.formatNumber(
|
value: DateTimeHelper.formatNumber(
|
||||||
controller.jumlahMenunggu.value),
|
controller.jumlahMenunggu.value),
|
||||||
color: Colors.orange,
|
color: Colors.orange,
|
||||||
),
|
),
|
||||||
@ -88,7 +88,7 @@ class PenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
context,
|
context,
|
||||||
icon: Icons.check_circle,
|
icon: Icons.check_circle,
|
||||||
title: 'Terverifikasi',
|
title: 'Terverifikasi',
|
||||||
value: DateFormatter.formatNumber(
|
value: DateTimeHelper.formatNumber(
|
||||||
controller.jumlahTerverifikasi.value),
|
controller.jumlahTerverifikasi.value),
|
||||||
color: Colors.green,
|
color: Colors.green,
|
||||||
),
|
),
|
||||||
@ -98,7 +98,7 @@ class PenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
context,
|
context,
|
||||||
icon: Icons.cancel,
|
icon: Icons.cancel,
|
||||||
title: 'Ditolak',
|
title: 'Ditolak',
|
||||||
value: DateFormatter.formatNumber(
|
value: DateTimeHelper.formatNumber(
|
||||||
controller.jumlahDitolak.value),
|
controller.jumlahDitolak.value),
|
||||||
color: Colors.red,
|
color: Colors.red,
|
||||||
),
|
),
|
||||||
@ -225,7 +225,7 @@ class PenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'${DateFormatter.formatNumber(filteredList.length)} item',
|
'${DateTimeHelper.formatNumber(filteredList.length)} item',
|
||||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
color: Colors.grey,
|
color: Colors.grey,
|
||||||
),
|
),
|
||||||
@ -385,8 +385,8 @@ class PenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
isUang ? Icons.account_balance_wallet : Icons.inventory,
|
isUang ? Icons.account_balance_wallet : Icons.inventory,
|
||||||
label: 'Jumlah',
|
label: 'Jumlah',
|
||||||
value: isUang
|
value: isUang
|
||||||
? 'Rp ${DateFormatter.formatNumber(item.jumlah)}'
|
? 'Rp ${DateTimeHelper.formatNumber(item.jumlah)}'
|
||||||
: '${DateFormatter.formatNumber(item.jumlah)} $kategoriSatuan',
|
: '${DateTimeHelper.formatNumber(item.jumlah)} $kategoriSatuan',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -400,7 +400,7 @@ class PenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
context,
|
context,
|
||||||
icon: Icons.calendar_today,
|
icon: Icons.calendar_today,
|
||||||
label: 'Tanggal Dibuat',
|
label: 'Tanggal Dibuat',
|
||||||
value: DateFormatter.formatDateTime(item.createdAt,
|
value: DateTimeHelper.formatDateTime(item.createdAt,
|
||||||
defaultValue: 'Tidak ada tanggal'),
|
defaultValue: 'Tidak ada tanggal'),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -1523,7 +1523,7 @@ class PenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
Widget _buildLastUpdateInfo(BuildContext context) {
|
Widget _buildLastUpdateInfo(BuildContext context) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
final lastUpdate = controller.lastUpdateTime.value;
|
final lastUpdate = controller.lastUpdateTime.value;
|
||||||
final formattedDate = DateFormatter.formatDateTimeWithHour(lastUpdate);
|
final formattedDate = DateTimeHelper.formatDateTimeWithHour(lastUpdate);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(top: 8.0),
|
padding: const EdgeInsets.only(top: 8.0),
|
||||||
|
@ -3,7 +3,6 @@ import 'package:get/get.dart';
|
|||||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
||||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/components/jadwal_section_widget.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/components/jadwal_section_widget.dart';
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/components/permintaan_penjadwalan_summary_widget.dart';
|
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/components/calendar_view_widget.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/components/calendar_view_widget.dart';
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/views/tambah_penyaluran_view.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/views/tambah_penyaluran_view.dart';
|
||||||
|
|
||||||
@ -117,18 +116,7 @@ class PenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Column(
|
return CalendarViewWidget(controller: controller);
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
// Ringkasan jadwal
|
|
||||||
_buildJadwalSummary(Get.context!),
|
|
||||||
|
|
||||||
const SizedBox(height: 20),
|
|
||||||
|
|
||||||
// Kalender Penyaluran Bulan Ini
|
|
||||||
CalendarViewWidget(controller: controller),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/penitipan_bantuan_controller.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/penitipan_bantuan_controller.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||||
|
|
||||||
class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
||||||
@ -47,7 +47,7 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
final kategoriNama = item.kategoriBantuan?.nama?.toLowerCase() ?? '';
|
final kategoriNama = item.kategoriBantuan?.nama?.toLowerCase() ?? '';
|
||||||
final deskripsi = item.deskripsi?.toLowerCase() ?? '';
|
final deskripsi = item.deskripsi?.toLowerCase() ?? '';
|
||||||
final tanggal =
|
final tanggal =
|
||||||
DateFormatter.formatDateTime(item.tanggalPenitipan).toLowerCase();
|
DateTimeHelper.formatDateTime(item.tanggalPenitipan).toLowerCase();
|
||||||
|
|
||||||
return donaturNama.contains(searchText) ||
|
return donaturNama.contains(searchText) ||
|
||||||
kategoriNama.contains(searchText) ||
|
kategoriNama.contains(searchText) ||
|
||||||
@ -99,7 +99,7 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'${DateFormatter.formatNumber(filteredList.length)} item',
|
'${DateTimeHelper.formatNumber(filteredList.length)} item',
|
||||||
style:
|
style:
|
||||||
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
color: Colors.grey,
|
color: Colors.grey,
|
||||||
@ -113,7 +113,7 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'Total: ${DateFormatter.formatNumber(filteredList.length)} item',
|
'Total: ${DateTimeHelper.formatNumber(filteredList.length)} item',
|
||||||
style:
|
style:
|
||||||
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
color: Colors.grey,
|
color: Colors.grey,
|
||||||
@ -126,7 +126,7 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
size: 16, color: Colors.grey[600]),
|
size: 16, color: Colors.grey[600]),
|
||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
Text(
|
Text(
|
||||||
'Update: ${DateFormatter.formatDateTimeWithHour(controller.lastUpdateTime.value)}',
|
'Update: ${DateTimeHelper.formatDateTimeWithHour(controller.lastUpdateTime.value)}',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: Colors.grey[600],
|
color: Colors.grey[600],
|
||||||
@ -284,8 +284,8 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
isUang ? Icons.account_balance_wallet : Icons.inventory,
|
isUang ? Icons.account_balance_wallet : Icons.inventory,
|
||||||
label: 'Jumlah',
|
label: 'Jumlah',
|
||||||
value: isUang
|
value: isUang
|
||||||
? 'Rp ${DateFormatter.formatNumber(item.jumlah)}'
|
? 'Rp ${DateTimeHelper.formatNumber(item.jumlah)}'
|
||||||
: '${DateFormatter.formatNumber(item.jumlah)} $kategoriSatuan',
|
: '${DateTimeHelper.formatNumber(item.jumlah)} $kategoriSatuan',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -300,7 +300,7 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
label: item.status == 'TERVERIFIKASI'
|
label: item.status == 'TERVERIFIKASI'
|
||||||
? 'Tanggal Verifikasi'
|
? 'Tanggal Verifikasi'
|
||||||
: 'Tanggal Penolakan',
|
: 'Tanggal Penolakan',
|
||||||
value: DateFormatter.formatDateTime(
|
value: DateTimeHelper.formatDateTime(
|
||||||
item.status == 'TERVERIFIKASI'
|
item.status == 'TERVERIFIKASI'
|
||||||
? item.tanggalVerifikasi
|
? item.tanggalVerifikasi
|
||||||
: item.updatedAt,
|
: item.updatedAt,
|
||||||
@ -414,20 +414,20 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Jumlah',
|
'Jumlah',
|
||||||
isUang
|
isUang
|
||||||
? 'Rp ${DateFormatter.formatNumber(item.jumlah)}'
|
? 'Rp ${DateTimeHelper.formatNumber(item.jumlah)}'
|
||||||
: '${DateFormatter.formatNumber(item.jumlah)} $kategoriSatuan'),
|
: '${DateTimeHelper.formatNumber(item.jumlah)} $kategoriSatuan'),
|
||||||
if (isUang) _buildDetailItem('Jenis Bantuan', 'Uang (Rupiah)'),
|
if (isUang) _buildDetailItem('Jenis Bantuan', 'Uang (Rupiah)'),
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Deskripsi', item.deskripsi ?? 'Tidak ada deskripsi'),
|
'Deskripsi', item.deskripsi ?? 'Tidak ada deskripsi'),
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Tanggal Penitipan',
|
'Tanggal Penitipan',
|
||||||
DateFormatter.formatDateTime(item.tanggalPenitipan,
|
DateTimeHelper.formatDateTime(item.tanggalPenitipan,
|
||||||
defaultValue: 'Tidak ada tanggal'),
|
defaultValue: 'Tidak ada tanggal'),
|
||||||
),
|
),
|
||||||
if (item.tanggalVerifikasi != null)
|
if (item.tanggalVerifikasi != null)
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Tanggal Verifikasi',
|
'Tanggal Verifikasi',
|
||||||
DateFormatter.formatDateTime(item.tanggalVerifikasi),
|
DateTimeHelper.formatDateTime(item.tanggalVerifikasi),
|
||||||
),
|
),
|
||||||
if (item.status == 'TERVERIFIKASI' && item.petugasDesaId != null)
|
if (item.status == 'TERVERIFIKASI' && item.petugasDesaId != null)
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
@ -435,7 +435,7 @@ class RiwayatPenitipanView extends GetView<PenitipanBantuanController> {
|
|||||||
controller.getPetugasDesaNama(item.petugasDesaId),
|
controller.getPetugasDesaNama(item.petugasDesaId),
|
||||||
),
|
),
|
||||||
_buildDetailItem('Tanggal Dibuat',
|
_buildDetailItem('Tanggal Dibuat',
|
||||||
DateFormatter.formatDateTime(item.createdAt)),
|
DateTimeHelper.formatDateTime(item.createdAt)),
|
||||||
if (item.alasanPenolakan != null &&
|
if (item.alasanPenolakan != null &&
|
||||||
item.alasanPenolakan!.isNotEmpty)
|
item.alasanPenolakan!.isNotEmpty)
|
||||||
_buildDetailItem('Alasan Penolakan', item.alasanPenolakan!),
|
_buildDetailItem('Alasan Penolakan', item.alasanPenolakan!),
|
||||||
|
@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:penyaluran_app/app/data/models/penyaluran_bantuan_model.dart';
|
import 'package:penyaluran_app/app/data/models/penyaluran_bantuan_model.dart';
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||||
|
|
||||||
class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
||||||
@ -52,7 +52,7 @@ class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
.getKategoriBantuanName(item.kategoriBantuanId)
|
.getKategoriBantuanName(item.kategoriBantuanId)
|
||||||
.toLowerCase();
|
.toLowerCase();
|
||||||
final tanggal =
|
final tanggal =
|
||||||
DateFormatter.formatDateTime(item.tanggalPenyaluran).toLowerCase();
|
DateTimeHelper.formatDateTime(item.tanggalPenyaluran).toLowerCase();
|
||||||
|
|
||||||
return nama.contains(searchText) ||
|
return nama.contains(searchText) ||
|
||||||
deskripsi.contains(searchText) ||
|
deskripsi.contains(searchText) ||
|
||||||
@ -105,7 +105,7 @@ class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'${DateFormatter.formatNumber(filteredList.length)} item',
|
'${DateTimeHelper.formatNumber(filteredList.length)} item',
|
||||||
style:
|
style:
|
||||||
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
color: Colors.grey,
|
color: Colors.grey,
|
||||||
@ -119,7 +119,7 @@ class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'Total: ${DateFormatter.formatNumber(filteredList.length)} item',
|
'Total: ${DateTimeHelper.formatNumber(filteredList.length)} item',
|
||||||
style:
|
style:
|
||||||
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
color: Colors.grey,
|
color: Colors.grey,
|
||||||
@ -132,7 +132,7 @@ class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
size: 16, color: Colors.grey[600]),
|
size: 16, color: Colors.grey[600]),
|
||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
Text(
|
Text(
|
||||||
'Update: ${DateFormatter.formatDateTimeWithHour(DateTime.now())}',
|
'Update: ${DateTimeHelper.formatDateTimeWithHour(DateTime.now())}',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: Colors.grey[600],
|
color: Colors.grey[600],
|
||||||
@ -305,8 +305,8 @@ class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
child: _buildInfoItem(
|
child: _buildInfoItem(
|
||||||
Icons.event,
|
Icons.event,
|
||||||
'Tanggal',
|
'Tanggal',
|
||||||
DateFormatter.formatDateTime(item.tanggalPenyaluran,
|
DateTimeHelper.formatDateTime(item.tanggalPenyaluran,
|
||||||
defaultValue: 'Tidak ada tanggal'),
|
format: 'dd MMM yyyy HH:mm'),
|
||||||
Theme.of(context).textTheme,
|
Theme.of(context).textTheme,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -316,7 +316,7 @@ class RiwayatPenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
_buildInfoItem(
|
_buildInfoItem(
|
||||||
Icons.people_outline,
|
Icons.people_outline,
|
||||||
'Jumlah Penerima',
|
'Jumlah Penerima',
|
||||||
'${DateFormatter.formatNumber(item.jumlahPenerima ?? 0)} orang',
|
'${DateTimeHelper.formatNumber(item.jumlahPenerima ?? 0)} orang',
|
||||||
Theme.of(context).textTheme,
|
Theme.of(context).textTheme,
|
||||||
),
|
),
|
||||||
if (item.alasanPembatalan != null &&
|
if (item.alasanPembatalan != null &&
|
||||||
|
@ -3,7 +3,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:penyaluran_app/app/data/models/stok_bantuan_model.dart';
|
import 'package:penyaluran_app/app/data/models/stok_bantuan_model.dart';
|
||||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/stok_bantuan_controller.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/stok_bantuan_controller.dart';
|
||||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
|
|
||||||
class StokBantuanView extends GetView<StokBantuanController> {
|
class StokBantuanView extends GetView<StokBantuanController> {
|
||||||
const StokBantuanView({super.key});
|
const StokBantuanView({super.key});
|
||||||
@ -154,7 +154,7 @@ class StokBantuanView extends GetView<StokBantuanController> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'Rp ${DateFormatter.formatNumber(controller.totalDanaBantuan.value)}',
|
'Rp ${DateTimeHelper.formatNumber(controller.totalDanaBantuan.value)}',
|
||||||
style:
|
style:
|
||||||
Theme.of(context).textTheme.titleLarge?.copyWith(
|
Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@ -417,8 +417,8 @@ class StokBantuanView extends GetView<StokBantuanController> {
|
|||||||
: Icons.inventory,
|
: Icons.inventory,
|
||||||
label: item.isUang == true ? 'Total Dana' : 'Total Stok',
|
label: item.isUang == true ? 'Total Dana' : 'Total Stok',
|
||||||
value: item.isUang == true
|
value: item.isUang == true
|
||||||
? 'Rp ${DateFormatter.formatNumber(item.totalStok)}'
|
? 'Rp ${DateTimeHelper.formatNumber(item.totalStok)}'
|
||||||
: '${DateFormatter.formatNumber(item.totalStok)} ${item.satuan ?? ''}',
|
: '${DateTimeHelper.formatNumber(item.totalStok)} ${item.satuan ?? ''}',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
@ -426,7 +426,7 @@ class StokBantuanView extends GetView<StokBantuanController> {
|
|||||||
context,
|
context,
|
||||||
icon: Icons.access_time,
|
icon: Icons.access_time,
|
||||||
label: 'Terakhir Diperbarui',
|
label: 'Terakhir Diperbarui',
|
||||||
value: DateFormatter.formatDateTime(item.updatedAt),
|
value: DateTimeHelper.formatDateTime(item.updatedAt),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -873,8 +873,8 @@ class StokBantuanView extends GetView<StokBantuanController> {
|
|||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
Text(
|
Text(
|
||||||
isUang
|
isUang
|
||||||
? 'Rp ${DateFormatter.formatNumber(stok.totalStok)}'
|
? 'Rp ${DateTimeHelper.formatNumber(stok.totalStok)}'
|
||||||
: '${DateFormatter.formatNumber(stok.totalStok)} ${stok.satuan ?? ''}',
|
: '${DateTimeHelper.formatNumber(stok.totalStok)} ${stok.satuan ?? ''}',
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
style: TextStyle(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -1064,8 +1064,8 @@ class StokBantuanView extends GetView<StokBantuanController> {
|
|||||||
SizedBox(width: 4),
|
SizedBox(width: 4),
|
||||||
Text(
|
Text(
|
||||||
stok.isUang == true
|
stok.isUang == true
|
||||||
? 'Rp ${DateFormatter.formatNumber(stok.totalStok)}'
|
? 'Rp ${DateTimeHelper.formatNumber(stok.totalStok)}'
|
||||||
: '${DateFormatter.formatNumber(stok.totalStok)} ${stok.satuan ?? ''}',
|
: '${DateTimeHelper.formatNumber(stok.totalStok)} ${stok.satuan ?? ''}',
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
style: TextStyle(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -1129,7 +1129,7 @@ class StokBantuanView extends GetView<StokBantuanController> {
|
|||||||
Widget _buildLastUpdateInfo(BuildContext context) {
|
Widget _buildLastUpdateInfo(BuildContext context) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
final lastUpdate = controller.lastUpdateTime.value;
|
final lastUpdate = controller.lastUpdateTime.value;
|
||||||
final formattedDate = DateFormatter.formatDateTimeWithHour(lastUpdate);
|
final formattedDate = DateTimeHelper.formatDateTimeWithHour(lastUpdate);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(top: 8.0),
|
padding: const EdgeInsets.only(top: 8.0),
|
||||||
|
@ -3,7 +3,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
||||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||||
import 'package:penyaluran_app/app/data/models/skema_bantuan_model.dart';
|
import 'package:penyaluran_app/app/data/models/skema_bantuan_model.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
|
|
||||||
class TambahPenyaluranView extends GetView<JadwalPenyaluranController> {
|
class TambahPenyaluranView extends GetView<JadwalPenyaluranController> {
|
||||||
const TambahPenyaluranView({super.key});
|
const TambahPenyaluranView({super.key});
|
||||||
@ -327,7 +327,7 @@ class TambahPenyaluranView extends GetView<JadwalPenyaluranController> {
|
|||||||
if (pickedDate != null) {
|
if (pickedDate != null) {
|
||||||
selectedDate.value = pickedDate;
|
selectedDate.value = pickedDate;
|
||||||
tanggalPenyaluranController.text =
|
tanggalPenyaluranController.text =
|
||||||
DateFormatter.formatDate(pickedDate);
|
DateTimeHelper.formatDate(pickedDate);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
import 'package:intl/intl.dart';
|
|
||||||
|
|
||||||
class DateFormatter {
|
|
||||||
static String formatDate(DateTime? date,
|
|
||||||
{String format = 'dd MMMM yyyy',
|
|
||||||
String locale = 'id_ID',
|
|
||||||
String defaultValue = '-'}) {
|
|
||||||
if (date == null) return defaultValue;
|
|
||||||
try {
|
|
||||||
return DateFormat(format, locale).format(date);
|
|
||||||
} catch (e) {
|
|
||||||
print('Error formatting date: $e');
|
|
||||||
return date.toString().split(' ')[0]; // Fallback to basic format
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String formatTime(DateTime? time,
|
|
||||||
{String format = 'HH:mm',
|
|
||||||
String locale = 'id_ID',
|
|
||||||
String defaultValue = '-'}) {
|
|
||||||
if (time == null) return defaultValue;
|
|
||||||
try {
|
|
||||||
return DateFormat(format, locale).format(time);
|
|
||||||
} catch (e) {
|
|
||||||
print('Error formatting time: $e');
|
|
||||||
return time
|
|
||||||
.toString()
|
|
||||||
.split(' ')[1]
|
|
||||||
.substring(0, 5); // Fallback to basic format
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String formatDateTime(DateTime? dateTime,
|
|
||||||
{String format = 'dd MMMM yyyy HH:mm',
|
|
||||||
String locale = 'id_ID',
|
|
||||||
String defaultValue = '-'}) {
|
|
||||||
if (dateTime == null) return defaultValue;
|
|
||||||
try {
|
|
||||||
return DateFormat(format, locale).format(dateTime);
|
|
||||||
} catch (e) {
|
|
||||||
print('Error formatting date time: $e');
|
|
||||||
return dateTime.toString().split('.')[0]; // Fallback to basic format
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String formatNumber(num? number,
|
|
||||||
{String locale = 'id_ID', String defaultValue = '0'}) {
|
|
||||||
if (number == null) return defaultValue;
|
|
||||||
try {
|
|
||||||
return NumberFormat("#,##0.##", locale).format(number);
|
|
||||||
} catch (e) {
|
|
||||||
print('Error formatting number: $e');
|
|
||||||
return number.toString(); // Fallback to basic format
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String formatDateTimeWithHour(DateTime dateTime) {
|
|
||||||
return DateFormat('dd MMMM yyyy HH:mm', 'id_ID').format(dateTime);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +1,4 @@
|
|||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
|
||||||
|
|
||||||
class DateTimeHelper {
|
class DateTimeHelper {
|
||||||
/// Mengkonversi DateTime dari UTC ke timezone lokal
|
/// Mengkonversi DateTime dari UTC ke timezone lokal
|
||||||
@ -8,31 +7,57 @@ class DateTimeHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Format tanggal ke format Indonesia (dd MMM yyyy)
|
/// Format tanggal ke format Indonesia (dd MMM yyyy)
|
||||||
static String formatDate(DateTime? dateTime) {
|
static String formatDate(DateTime? dateTime,
|
||||||
if (dateTime == null) return 'Belum ditentukan';
|
{String format = 'dd MMM yyyy',
|
||||||
|
String locale = 'id_ID',
|
||||||
|
String defaultValue = 'Belum ditentukan'}) {
|
||||||
|
if (dateTime == null) return defaultValue;
|
||||||
|
|
||||||
// Pastikan tanggal dalam timezone lokal
|
// Pastikan tanggal dalam timezone lokal
|
||||||
final localDateTime = toLocalDateTime(dateTime);
|
final localDateTime = toLocalDateTime(dateTime);
|
||||||
return DateFormatter.formatDate(localDateTime, format: 'dd MMM yyyy');
|
try {
|
||||||
|
return DateFormat(format, locale).format(localDateTime);
|
||||||
|
} catch (e) {
|
||||||
|
print('Error formatting date: $e');
|
||||||
|
return localDateTime.toString().split(' ')[0]; // Fallback to basic format
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Format waktu ke format 24 jam (HH:mm)
|
/// Format waktu ke format 24 jam (HH:mm)
|
||||||
static String formatTime(DateTime? dateTime) {
|
static String formatTime(DateTime? dateTime,
|
||||||
if (dateTime == null) return 'Belum ditentukan';
|
{String format = 'HH:mm',
|
||||||
|
String locale = 'id_ID',
|
||||||
|
String defaultValue = 'Belum ditentukan'}) {
|
||||||
|
if (dateTime == null) return defaultValue;
|
||||||
|
|
||||||
// Pastikan waktu dalam timezone lokal
|
// Pastikan waktu dalam timezone lokal
|
||||||
final localDateTime = toLocalDateTime(dateTime);
|
final localDateTime = toLocalDateTime(dateTime);
|
||||||
return DateFormatter.formatTime(localDateTime);
|
try {
|
||||||
|
return DateFormat(format, locale).format(localDateTime);
|
||||||
|
} catch (e) {
|
||||||
|
print('Error formatting time: $e');
|
||||||
|
return localDateTime
|
||||||
|
.toString()
|
||||||
|
.split(' ')[1]
|
||||||
|
.substring(0, 5); // Fallback to basic format
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Format tanggal dan waktu (dd MMM yyyy HH:mm)
|
/// Format tanggal dan waktu (dd MMM yyyy HH:mm)
|
||||||
static String formatDateTime(DateTime? dateTime) {
|
static String formatDateTime(DateTime? dateTime,
|
||||||
if (dateTime == null) return 'Belum ditentukan';
|
{String format = 'dd MMM yyyy HH:mm',
|
||||||
|
String locale = 'id_ID',
|
||||||
|
String defaultValue = 'Belum ditentukan'}) {
|
||||||
|
if (dateTime == null) return defaultValue;
|
||||||
|
|
||||||
// Pastikan tanggal dan waktu dalam timezone lokal
|
// Pastikan tanggal dan waktu dalam timezone lokal
|
||||||
final localDateTime = toLocalDateTime(dateTime);
|
final localDateTime = toLocalDateTime(dateTime);
|
||||||
return DateFormatter.formatDateTime(localDateTime,
|
try {
|
||||||
format: 'dd MMM yyyy HH:mm');
|
return DateFormat(format, locale).format(localDateTime);
|
||||||
|
} catch (e) {
|
||||||
|
print('Error formatting date time: $e');
|
||||||
|
return localDateTime.toString().split('.')[0]; // Fallback to basic format
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Format tanggal lengkap dalam bahasa Indonesia (Senin, 01 Januari 2023)
|
/// Format tanggal lengkap dalam bahasa Indonesia (Senin, 01 Januari 2023)
|
||||||
@ -74,4 +99,23 @@ class DateTimeHelper {
|
|||||||
|
|
||||||
return '$hari, $tanggal $bulan $tahun';
|
return '$hari, $tanggal $bulan $tahun';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Format angka dengan pemisah ribuan
|
||||||
|
static String formatNumber(num? number,
|
||||||
|
{String locale = 'id_ID', String defaultValue = '0'}) {
|
||||||
|
if (number == null) return defaultValue;
|
||||||
|
try {
|
||||||
|
return NumberFormat("#,##0.##", locale).format(number);
|
||||||
|
} catch (e) {
|
||||||
|
print('Error formatting number: $e');
|
||||||
|
return number.toString(); // Fallback to basic format
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Format tanggal dan waktu dengan jam (dd MMMM yyyy HH:mm)
|
||||||
|
static String formatDateTimeWithHour(DateTime? dateTime) {
|
||||||
|
if (dateTime == null) return 'Belum ditentukan';
|
||||||
|
final localDateTime = toLocalDateTime(dateTime);
|
||||||
|
return DateFormat('dd MMMM yyyy HH:mm', 'id_ID').format(localDateTime);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
import 'package:penyaluran_app/app/data/models/penitipan_bantuan_model.dart';
|
||||||
import 'package:penyaluran_app/app/utils/date_formatter.dart';
|
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||||
|
|
||||||
/// Dialog untuk menampilkan detail penitipan bantuan
|
/// Dialog untuk menampilkan detail penitipan bantuan
|
||||||
///
|
///
|
||||||
@ -54,20 +54,20 @@ class DetailPenitipanDialog {
|
|||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Jumlah',
|
'Jumlah',
|
||||||
isUang
|
isUang
|
||||||
? 'Rp ${DateFormatter.formatNumber(item.jumlah)}'
|
? 'Rp ${DateTimeHelper.formatNumber(item.jumlah)}'
|
||||||
: '${DateFormatter.formatNumber(item.jumlah)} $kategoriSatuan'),
|
: '${DateTimeHelper.formatNumber(item.jumlah)} $kategoriSatuan'),
|
||||||
if (isUang) _buildDetailItem('Jenis Bantuan', 'Uang (Rupiah)'),
|
if (isUang) _buildDetailItem('Jenis Bantuan', 'Uang (Rupiah)'),
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Deskripsi', item.deskripsi ?? 'Tidak ada deskripsi'),
|
'Deskripsi', item.deskripsi ?? 'Tidak ada deskripsi'),
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Tanggal Penitipan',
|
'Tanggal Penitipan',
|
||||||
DateFormatter.formatDateTime(item.tanggalPenitipan,
|
DateTimeHelper.formatDateTime(item.tanggalPenitipan,
|
||||||
defaultValue: 'Tidak ada tanggal'),
|
defaultValue: 'Tidak ada tanggal'),
|
||||||
),
|
),
|
||||||
if (item.tanggalVerifikasi != null)
|
if (item.tanggalVerifikasi != null)
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
'Tanggal Verifikasi',
|
'Tanggal Verifikasi',
|
||||||
DateFormatter.formatDateTime(item.tanggalVerifikasi),
|
DateTimeHelper.formatDateTime(item.tanggalVerifikasi),
|
||||||
),
|
),
|
||||||
if (item.status == 'TERVERIFIKASI' && item.petugasDesaId != null)
|
if (item.status == 'TERVERIFIKASI' && item.petugasDesaId != null)
|
||||||
_buildDetailItem(
|
_buildDetailItem(
|
||||||
@ -75,7 +75,7 @@ class DetailPenitipanDialog {
|
|||||||
getPetugasDesaNama(item.petugasDesaId),
|
getPetugasDesaNama(item.petugasDesaId),
|
||||||
),
|
),
|
||||||
_buildDetailItem('Tanggal Dibuat',
|
_buildDetailItem('Tanggal Dibuat',
|
||||||
DateFormatter.formatDateTime(item.createdAt)),
|
DateTimeHelper.formatDateTime(item.createdAt)),
|
||||||
if (item.alasanPenolakan != null &&
|
if (item.alasanPenolakan != null &&
|
||||||
item.alasanPenolakan!.isNotEmpty)
|
item.alasanPenolakan!.isNotEmpty)
|
||||||
_buildDetailItem('Alasan Penolakan', item.alasanPenolakan!),
|
_buildDetailItem('Alasan Penolakan', item.alasanPenolakan!),
|
||||||
|
Reference in New Issue
Block a user