update nomr patient

This commit is contained in:
vanilia
2025-11-20 09:10:58 +07:00
parent 2cd5583e38
commit 9a056701c6
8 changed files with 58 additions and 11 deletions
@@ -61,3 +61,8 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
res, err := u.Delete(dto)
rw.DataResponse(w, res, err)
}
func (obj myBase) GenerateNomr(w http.ResponseWriter, r *http.Request) {
res, err := u.GenerateNomr()
rw.DataResponse(w, res, err)
}
@@ -1,6 +1,7 @@
package simgossynchandler
import (
"fmt"
"net/http"
hc "simrs-vx/pkg/handler-crud-helper"
@@ -45,6 +46,7 @@ func SetRoutes() http.Handler {
hc.SyncCrud(r, prefix+"/v1/specialist", specialist.O)
hc.SyncCrud(r, prefix+"/v1/subspecialist", subspecialist.O)
hc.SyncCrud(r, prefix+"/v1/patient", patient.O)
r.HandleFunc(fmt.Sprintf("GET %s/v1/patient-nomr-generator", prefix), patient.O.GenerateNomr)
return cmw.SetCors(handlerlogger.SetLog(r))
}
@@ -24,12 +24,15 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Patient) error {
inputSrc = &inputTemp.CreateDto
}
if data.Number == nil {
switch {
case inputSrc.Number == nil && data.Number == nil:
medRecNum, err := GenerateNextMedicalRecordNumber()
if err != nil {
return err
}
data.Number = &medRecNum
case inputSrc.Number != nil:
data.Number = inputSrc.Number
}
data.Person_Id = inputSrc.Person_Id
@@ -29,6 +29,8 @@ func init() {
deletePreMw = append(deletePreMw,
deleteMw{Name: "sync-delete-patient", Func: plugin.Delete})
generatePatientNumber = generateNumberMw{Name: "generate-nomr-patient", Func: plugin.GenerateNomrPatient}
}
func checkVclaimMember(input *e.CreateDto, data *e.Patient, tx *gorm.DB) error {
@@ -162,6 +162,46 @@ func Delete(input *e.DeleteDto) error {
return nil
}
func GenerateNomrPatient() (*string, error) {
prefixEndpoint := getPrefixEndpoint()
endpoint := fmt.Sprintf("%s-nomr-generator", prefixEndpoint)
req, err := http.NewRequest("GET", endpoint, nil)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
bodyBytes, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
errors := d.FieldError{}
_ = json.Unmarshal(bodyBytes, &errors)
return nil, fmt.Errorf(errors.Message)
}
var result map[string]any
if err = json.Unmarshal(bodyBytes, &result); err != nil {
return nil, err
}
dataMap := result["data"].(map[string]any)
nomr := dataMap["nomr"].(string)
return &nomr, nil
}
func getPrefixEndpoint() string {
return fmt.Sprintf("%s%s/v1/patient", sync.O.Host, sync.O.Prefix)
}
@@ -202,7 +202,7 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
}
func Generate() (*d.Data, error) {
func GenerateNomr() (*d.Data, error) {
event := pl.Event{
Feature: "Generate Nomr",
Source: source,
@@ -224,8 +224,8 @@ func Generate() (*d.Data, error) {
"structure": "single-data",
"status": "created",
},
Data:d.II{
}
Data: d.IS{
"nomr": norm,
},
}, nil
}
@@ -43,6 +43,7 @@ func setDataSimgos(input *e.Patient) (data esimgos.MPasien) {
data.Nip = input.RegisteredBy_User_Name
data.Tgldaftar = input.RegisteredAt
data.Nomr = *input.Number
return
}
@@ -21,11 +21,6 @@ func CreateSimgosData(input e.Patient, event *pl.Event, dbx ...*gorm.DB) (*esimg
pl.SetLogInfo(event, nil, "started", "DBCreate")
data := setDataSimgos(&input)
nomr, err := generateNomrPatient()
if err != nil {
return nil, plh.HandleCreateError(input, event, err)
}
data.Nomr = nomr
var tx *gorm.DB
if len(dbx) > 0 {
@@ -65,7 +60,6 @@ func UpdateSimgosData(input e.Patient, patientData *esimgos.MPasien, event *pl.E
data := setDataSimgos(&input)
data.Id = patientData.Id
data.Nomr = patientData.Nomr
data.CreatedAt = patientData.CreatedAt
var tx *gorm.DB