diff --git a/internal/use-case/main-use-case/encounter/case.go b/internal/use-case/main-use-case/encounter/case.go index d387fcc2..9381e639 100644 --- a/internal/use-case/main-use-case/encounter/case.go +++ b/internal/use-case/main-use-case/encounter/case.go @@ -3,6 +3,7 @@ package encounter import ( "errors" "fmt" + us "simrs-vx/internal/use-case/main-use-case/soapi" "strconv" "time" @@ -489,6 +490,32 @@ func UpdateStatusCode(input e.UpdateStatusDto) (*d.Data, error) { return pl.SetLogError(&event, input) } + if input.StatusCode == erc.DSCCancel { + // TODO: Prevent cancellation if the billing has been verified + + // TODO: Only "supervisi pendaftaran" could cancel encounter + + // Prevent cancellation if soapi exist + encounterId := uint(input.Id) + dataSoapi, _, err := us.ReadListData(es.ReadListDto{ + FilterDto: es.FilterDto{ + Encounter_Id: &encounterId, + }}, &event, tx) + if err != nil { + return err + } + + if len(dataSoapi) > 0 { + event.Status = "failed" + event.ErrInfo = pl.ErrorInfo{ + Code: "cancel-not-allowed", + Detail: "encounter can't be cancelled because SOAPI already exists", + Raw: errors.New("encounter has SOAPI records"), + } + return pl.SetLogError(&event, input) + } + } + mwRunner := newMiddlewareRunner(&event, tx) mwRunner.setMwType(pu.MWTPre) // Run pre-middleware