Skip to main content

Generate Number Ketika Persetujuan Pimpinan

Untuk probis yang memiliki persetujuan pimpinan, memiliki perilaku yang berbeda ketimbang probis yang hanya persetujuannya berakhir dari direktur atau deputi.

Kenapa demikian ?

Karena persetujuan pimpinan adalah berupa Multi Instance. Yang artinya setiap id dari task definition key pada proses yang sedang berjalan akan sama yaitu <kode modul>_persetujuan_pimpinan dan dengan ketentuan tambahan jika task tersebut di approve setidaknya 3 pimpinan maka task tersebut ke proses selanjutnya.

Oleh karena itu perlu tau bahwa task yang sedang di approve adalah task yang terakhir (task yang telah di approve oleh 2 pimpinan sebelumnya).

Solusi

Pada trait HasBpmnUtils memiliki sebuah fungsi untuk pengecekan task yang membutuhkan persetujuan pimpinan adalah task yang terakhir, nama fungsi nya adalah isLastApprovalPimpinan.

public function isLastApprovalPimpinan(string $businessKey, string $taskDefinitionKey): bool
{
$count = AkActivityLog::query()
->where('business_key', $businessKey)
->where('status_before', $taskDefinitionKey)
->get()
->count();

return $count === 2;
}

Implementasi

Untuk implmentasi, sama seperti After Submit Data. Yang membedakan adalah kondisi pada if dengna memanggil fungsi isLastApprovalPimpinan.

if ($task->taskDefinitionKey === 'kpm171_persetujuan_pimpinan' && $this->isLastApprovalPimpinan($businessKey, 'kpm171_persetujuan_pimpinan')) {
if ($decision === 'approve') {
$model->kpt171a_date = Carbon::now();
$model->status = ApprovalPimpinanStatus::APPROVED->value;

// generate nommor surat when approved
$model->seq_number = GeneratorNumberService::generateSeqNumber('kpt171a');
$model->kpt171a_number = GeneratorNumberService::generateWithSeqNumber('Sprin.Lidik-%s/Lid.01.00/01/%s', $model->seq_number);
} else {
$model->status = ApprovalPimpinanStatus::REJECTED->value;
}
}