Skip to content

Commit 3d8c917

Browse files
Add Pulsa functionality with validation and formatting improvements
1 parent 6d5ff63 commit 3d8c917

File tree

6 files changed

+159
-7
lines changed

6 files changed

+159
-7
lines changed

app/Helpers/Cetak.php

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use App\Models\DaftarPemeliharaan;
1010
use App\Models\DaftarPenilaianReward;
1111
use App\Models\DaftarPesertaPerjalanan;
12+
use App\Models\DaftarPulsaMitra;
1213
use App\Models\Dipa;
1314
use App\Models\HonorKegiatan;
1415
use App\Models\KerangkaAcuan;
@@ -19,6 +20,7 @@
1920
use App\Models\PembelianPersediaan;
2021
use App\Models\PerjalananDinas;
2122
use App\Models\PermintaanPersediaan;
23+
use App\Models\PulsaKegiatan;
2224
use App\Models\RapatInternal;
2325
use App\Models\RewardPegawai;
2426
use App\Models\SpesifikasiKerangkaAcuan;
@@ -174,7 +176,37 @@ public static function getTemplate(string $jenis, $id, $template_id, $tanggal, $
174176
unset($data['daftar_honor_mitra']);
175177
HonorKegiatan::where('id', $id)->update(['status' => 'dicetak']);
176178
}
179+
if ($jenis === 'pulsa') {
180+
$templateProcessor->cloneRowAndSetValues('spj_no', $data['daftar_pulsa_mitra']);
181+
$detailAnggarans = ['kegiatan', 'kro', 'ro', 'komponen', 'sub', 'akun', 'detail'];
182+
foreach ($detailAnggarans as $detailAnggaran) {
183+
if (Str::of($data[$detailAnggaran])->contains('edit manual karena belum ada di POK')) {
184+
$detail = new TextRun;
185+
$detail->addText(Str::of($data[$detailAnggaran])->before('edit manual karena belum ada di POK'));
186+
$detail->addText('edit manual karena belum ada di POK', ['color' => 'red']);
187+
$templateProcessor->setComplexValue($detailAnggaran, $detail);
188+
unset($data[$detailAnggaran]);
189+
}
190+
}
191+
$dummies = $data['daftar_pulsa_mitra'];
192+
unset($data['daftar_pulsa_mitra']);
193+
PulsaKegiatan::where('id', $id)->update(['status' => 'selesai']);
194+
}
177195
$templateProcessor->setValues($data);
196+
if ($jenis === 'pulsa') {
197+
foreach ($dummies as $dummy) {
198+
$templateProcessor->setImageValue(
199+
$dummy['nik'],
200+
[
201+
'path' => Storage::disk('pulsa')->path($dummy['bukti']),
202+
'width' => '',
203+
'height' => '5.7cm',
204+
'ratio' => true,
205+
]
206+
);
207+
}
208+
unset($dummies);
209+
}
178210

179211
return $templateProcessor;
180212
}
@@ -503,6 +535,44 @@ public static function spj($id)
503535
];
504536
}
505537

538+
public static function pulsa($id)
539+
{
540+
$data = PulsaKegiatan::find($id);
541+
$mataanggaran = Helper::getMataAnggaranById($data->mata_anggaran_id);
542+
$mak = optional($mataanggaran)->mak;
543+
$koordinator = Helper::getPegawaiByUserId($data->koordinator_user_id);
544+
$ppk = Helper::getPegawaiByUserId($data->ppk_user_id);
545+
$harga = DaftarPulsaMitra::where('pulsa_kegiatan_id', $id)->sum('harga');
546+
547+
return [
548+
'kabupaten' => config('satker.kabupaten'),
549+
'u_kabupaten' => strtoupper(config('satker.kabupaten')),
550+
'alamat_satker' => config('satker.alamat'),
551+
'telepon_satker' => config('satker.telepon'),
552+
'website' => config('satker.website'),
553+
'email' => config('satker.email'),
554+
'tanggal_spj' => Helper::terbilangTanggal($data->tanggal),
555+
'ibukota' => config('satker.ibukota'),
556+
'nama_kegiatan' => $data->kegiatan,
557+
'detail' => optional($mataanggaran)->uraian,
558+
'bulan' => Helper::terbilangBulan($data->bulan),
559+
'mak' => $mak,
560+
'kegiatan' => Helper::getDetailAnggaran($mak, 'kegiatan'),
561+
'kro' => Helper::getDetailAnggaran($mak, 'kro'),
562+
'ro' => Helper::getDetailAnggaran($mak, 'ro'),
563+
'komponen' => Helper::getDetailAnggaran($mak, 'komponen'),
564+
'sub' => Helper::getDetailAnggaran($mak, 'sub'),
565+
'akun' => Helper::getDetailAnggaran($mak, 'akun'),
566+
'daftar_pulsa_mitra' => Helper::makeSpjPulsaMitra($id),
567+
'ketua' => optional($koordinator)->name,
568+
'nipketua' => optional($koordinator)->nip,
569+
'ppk' => optional($ppk)->name,
570+
'nipppk' => optional($ppk)->nip,
571+
'total_harga' => Helper::formatUang($harga),
572+
'terbilang_total' => Helper::terbilang($harga, 'uw', ' rupiah'),
573+
];
574+
}
575+
506576
/**
507577
* Format the values for the assignment letter.
508578
*
@@ -938,6 +1008,21 @@ public static function validate($jenis, $model_id)
9381008
return 'Masih ada rekening yang kosong pada daftar SPJ ini.';
9391009
}
9401010
}
1011+
if ($jenis === 'pulsa') {
1012+
$honor = PulsaKegiatan::where('id', $model_id)->first();
1013+
$notConfirmed = DaftarPulsaMitra::where('pulsa_kegiatan_id', $honor->id)
1014+
->where('confirmed', false)
1015+
->count();
1016+
$notUploaded = DaftarPulsaMitra::where('pulsa_kegiatan_id', $honor->id)
1017+
->whereNull('file')
1018+
->count();
1019+
if ($notConfirmed > 0) {
1020+
return 'Masih ada data nomor handphone yang belum dikonfirmasi pada daftar ini.';
1021+
}
1022+
if ($notUploaded > 0) {
1023+
return 'Masih ada bukti pulsa masuk yang belum diunggah pada daftar ini.';
1024+
}
1025+
}
9411026
if ($jenis === 'st') {
9421027
$honor = HonorKegiatan::where('id', $model_id)->first();
9431028
if (Helper::makeBaseListMitraAndPegawai($honor->id, $honor->tanggal_spj)->count() == 0) {

app/Helpers/Helper.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Models\DaftarHonorMitra;
66
use App\Models\DaftarHonorPegawai;
77
use App\Models\DaftarKegiatan;
8+
use App\Models\DaftarPulsaMitra;
89
use App\Models\DataPegawai;
910
use App\Models\DerajatNaskah;
1011
use App\Models\Dipa;
@@ -1438,6 +1439,30 @@ public static function formatMitra($mitra)
14381439
return $mitra;
14391440
}
14401441

1442+
public static function formatPulsaMitra($mitra)
1443+
{
1444+
$mitra->transform(function ($item, $index) {
1445+
$mitra = self::getMitraById($item['mitra_id']);
1446+
$item['nama'] = optional($mitra)->nama;
1447+
$item['nik'] = optional($mitra)->nik;
1448+
$item['nik_tag'] = '${'.optional($mitra)->nik.'}';
1449+
$item['no_hp'] = optional($mitra)->no_pulsa;
1450+
$item['bukti'] = $item['file'];
1451+
unset($item['mitra_id']);
1452+
unset($item['id']);
1453+
unset($item['created_at']);
1454+
unset($item['updated_at']);
1455+
unset($item['pulsa_kegiatan_id']);
1456+
unset($item['volume']);
1457+
unset($item['file']);
1458+
unset($item['confirmed']);
1459+
1460+
return $item;
1461+
});
1462+
1463+
return $mitra;
1464+
}
1465+
14411466
/**
14421467
* Create a query for the model based on the quarter.
14431468
*
@@ -1573,6 +1598,22 @@ public static function makeSpjMitraAndPegawai($honor_kegiatan_id, $tanggal)
15731598
->toArray();
15741599
}
15751600

1601+
public static function makeSpjPulsaMitra($pulsa_kegiatan_id)
1602+
{
1603+
$mitra = DaftarPulsaMitra::where('pulsa_kegiatan_id', $pulsa_kegiatan_id)->get();
1604+
$formattedMitra = self::formatPulsaMitra($mitra);
1605+
1606+
return $formattedMitra
1607+
->transform(function ($item, $index) {
1608+
$item['spj_no'] = $index + 1;
1609+
$item['nominal'] = self::formatUang($item['nominal']);
1610+
$item['harga'] = self::formatUang($item['harga']);
1611+
1612+
return $item;
1613+
})
1614+
->toArray();
1615+
}
1616+
15761617
/**
15771618
* Check for empty bank account numbers in the SPJ list.
15781619
*

app/Nova/DaftarPulsaMitra.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,6 @@ public function fieldforAdd(NovaRequest $request)
139139
->rules('required', 'gt:0', 'lte:16777215'),
140140
Numeric::make('Harga Pulsa', 'harga')
141141
->rules('required', 'gt:0', 'lte:16777215'),
142-
Text::make('Handphone', 'handphone')
143-
->rules('nullable', 'max:20')
144-
->help('Isikan nomor handphone mitra'),
145142
];
146143
}
147144

app/Nova/HonorKegiatan.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,10 +350,10 @@ public function cards(NovaRequest $request)
350350
return [
351351
HelperHonorKegiatan::make()
352352
->width('full'),
353-
MetricValue::make($model, 'total-kak')
353+
MetricValue::make($model, 'total-honor')
354354
->width('1/2')
355355
->refreshWhenActionsRun(),
356-
MetricPartition::make($model, 'status', 'status-kak')
356+
MetricPartition::make($model, 'status', 'status-honor')
357357
->refreshWhenActionsRun()
358358
->width('1/2')
359359
->failedWhen(['outdated'])

app/Nova/PulsaKegiatan.php

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44

55
use App\Helpers\Helper;
66
use App\Helpers\Policy;
7+
use App\Models\PulsaKegiatan as ModelsPulsaKegiatan;
8+
use App\Nova\Actions\Download;
79
use App\Nova\Actions\ExportDaftarPulsa;
810
use App\Nova\Actions\SetStatus;
11+
use App\Nova\Filters\StatusFilter;
12+
use App\Nova\Metrics\MetricPartition;
13+
use App\Nova\Metrics\MetricValue;
914
use Illuminate\Database\Eloquent\Model;
1015
use Laravel\Nova\Fields\BelongsTo;
1116
use Laravel\Nova\Fields\Date;
@@ -152,7 +157,23 @@ public function fields(NovaRequest $request)
152157
*/
153158
public function cards(NovaRequest $request)
154159
{
155-
return [];
160+
$model = ModelsPulsaKegiatan::where('tahun', session('year'));
161+
if (Policy::make()->allowedFor('ppk,arsiparis,bendahara,kpa,ppspm')->get()) {
162+
$model = $model;
163+
} elseif (Policy::make()->allowedFor('koordinator,anggota')->get()) {
164+
$model = $model->where('unit_kerja_id', Helper::getDataPegawaiByUserId($request->user()->id, now())->unit_kerja_id);
165+
}
166+
167+
return [
168+
MetricValue::make($model, 'total-pulsa')
169+
->width('1/2')
170+
->refreshWhenActionsRun(),
171+
MetricPartition::make($model, 'status', 'status-pulsa')
172+
->refreshWhenActionsRun()
173+
->width('1/2')
174+
->failedWhen(['open'])
175+
->successWhen(['selesai']),
176+
];
156177
}
157178

158179
/**
@@ -162,7 +183,9 @@ public function cards(NovaRequest $request)
162183
*/
163184
public function filters(NovaRequest $request)
164185
{
165-
return [];
186+
return [
187+
StatusFilter::make('pulsa_kegiatans'),
188+
];
166189
}
167190

168191
/**
@@ -183,6 +206,12 @@ public function lenses(NovaRequest $request)
183206
public function actions(NovaRequest $request)
184207
{
185208
$actions = [];
209+
$actions[] =
210+
Download::make('pulsa', 'Unduh Tanda Terima Pulsa')
211+
->showInline()
212+
->showOnDetail()
213+
->exceptOnIndex()
214+
->confirmButtonText('Unduh');
186215
$actions[] = SetStatus::make()
187216
->confirmButtonText('Ubah Status')
188217
->confirmText('Pastikan form dibuka jika hanya ada perbaikan isian. Yakin akan melanjutkan?')
Binary file not shown.

0 commit comments

Comments
 (0)