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;
}
}