diff --git a/database/satu_data/lokasi_ruang/daftar_lokasi_ruang.go b/database/satu_data/lokasi_ruang/daftar_lokasi_ruang.go new file mode 100644 index 0000000..02682fb --- /dev/null +++ b/database/satu_data/lokasi_ruang/daftar_lokasi_ruang.go @@ -0,0 +1,24 @@ +package lokasiruang + +import ( + "bridging-rssa/config" + "errors" + "log" + + "gorm.io/gorm" +) + +func GetDaftarLokasiRuang(idSimgos string) (int, error) { + var idRuangan int + query := `select dlr."id" from "daftar_lokasi_ruang" dlr where dlr."Id_location_simgos" = ?` + err := config.SatuDataDB.Debug().Raw(query, idSimgos).First(&idRuangan).Error + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + log.Println(err) + return 128, nil + } + log.Println(err) + return 0, err + } + return idRuangan, nil +} diff --git a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go index b62f759..0e7174e 100644 --- a/handlers/bpjs/jadwal_dokter/jadwal_dokter.go +++ b/handlers/bpjs/jadwal_dokter/jadwal_dokter.go @@ -323,6 +323,7 @@ func GetDokterBySubspesialis(c *gin.Context) { Subspesialis: idSubspesialis, HFISCode: v.HFISCode, KodePoli: listSubspesialis.Kode, + DPJPCode: v.DPJPCode, }) } log.Println("Response :", resDokter) diff --git a/handlers/bpjs/surat_kontrol/response.go b/handlers/bpjs/surat_kontrol/response.go index fe9314a..bd150f9 100644 --- a/handlers/bpjs/surat_kontrol/response.go +++ b/handlers/bpjs/surat_kontrol/response.go @@ -12,7 +12,6 @@ import ( "log" "net/http" "strings" - "time" ) func PostData(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) { @@ -36,21 +35,15 @@ func PostData(url string, header *config.Header, headers map[string]string, requ } log.Println("REQ", req.Header) - client := http.Client{ - Timeout: 10 * time.Second, - } + client := http.Client{} responses := &suratkontrol.Response{} response, err := client.Do(req) if err != nil { - if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { - errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") - log.Printf("error : %v", errMsg) - responses.MetaData.Message = errMsg.Error() - log.Println("responses: ", responses) - return responses, err - } + responses.MetaData.Code = "203" + responses.MetaData.Message = err.Error() log.Printf("Error making external API request: %v", err) + log.Println("responses: ", responses) return responses, err } log.Println("RESPONSE: ", response) @@ -61,7 +54,7 @@ func PostData(url string, header *config.Header, headers map[string]string, requ responses.MetaData.Code = "504" responses.MetaData.Message = errMsg.Error() log.Println("responses: ", responses) - return responses, err + return responses, errMsg } key := header.ConsID + header.SecretKey + header.TimeStamp @@ -87,7 +80,7 @@ func PostData(url string, header *config.Header, headers map[string]string, requ message := "Gagal simpan! Nomor SEP pernah diterbitkan Surat Kontrol!." resSuratKontrolRaw.MetaData.Message = message log.Println("masuk sini kan") - } else if strings.Contains(strings.ToLower(resSuratKontrolRaw.MetaData.Message), "gagal simpan") { + } else if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Poli Tujuan Kontrol tidak sama dengan Poli Asal Rujukan Awal." { message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal" resSuratKontrolRaw.MetaData.Message = message } @@ -145,19 +138,13 @@ func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[s } log.Println("REQ", req.Header) - client := http.Client{ - Timeout: 10 * time.Second, - } + client := http.Client{} responses := &suratkontrol.Response{} response, err := client.Do(req) if err != nil { - if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") { - errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi") - log.Printf("error : %v", errMsg) - responses.MetaData.Message = errMsg.Error() - log.Println("responses: ", responses) - return responses, err - } + responses.MetaData.Code = "504" + responses.MetaData.Message = err.Error() + log.Println("responses: ", responses) log.Printf("Error making external API request: %v", err) return responses, err } diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go index 4ae4c8b..8a05aa5 100644 --- a/handlers/bpjs/surat_kontrol/surat_kontrol.go +++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go @@ -3,6 +3,7 @@ package suratkontrol import ( cfg "bridging-rssa/config" log_api "bridging-rssa/database/satu_data/log_api" + lokasiruang "bridging-rssa/database/satu_data/lokasi_ruang" suratkontrol "bridging-rssa/database/satu_data/surat_kontrol" "bridging-rssa/docs/utils" sk "bridging-rssa/models/bpjs/surat_kontrol" @@ -33,9 +34,11 @@ func InsertSuratKontrol(c *gin.Context) { err := c.Bind(&req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -43,9 +46,11 @@ func InsertSuratKontrol(c *gin.Context) { reqJson, err := json.Marshal(req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -74,21 +79,42 @@ func InsertSuratKontrol(c *gin.Context) { kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } + var idRuangan int + if kunjunganPasien.Ruangan != 0 { + idRuangan = kunjunganPasien.Ruangan + } else { + idRuangan, err = lokasiruang.GetDaftarLokasiRuang(req.Ruangan) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, + }) + return + } + } + uuid := uuid.New().String() if req.TipeSurKon != "1" { dataSurkon, err := suratkontrol.GetNomorSurKon(kunjunganPasien.ID) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -98,9 +124,11 @@ func InsertSuratKontrol(c *gin.Context) { noUrut, err = utils.GetNoUrut(dataSurkon) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -114,7 +142,7 @@ func InsertSuratKontrol(c *gin.Context) { TglRencanaKontrol: req.TglRencanaKontrol, NomorSurKon: noSurKon, KunjunganPasien: kunjunganPasien.ID, - RuanganSurKon: kunjunganPasien.Ruangan, + RuanganSurKon: idRuangan, DPJPSurKon: req.IDDokter, StatusSurKon: 1, // First Insert status always set to 1 UserCreatedSurKon: req.User, @@ -123,9 +151,11 @@ func InsertSuratKontrol(c *gin.Context) { err = suratkontrol.InsertDataSuratKontrol(reqInsert) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -133,15 +163,19 @@ func InsertSuratKontrol(c *gin.Context) { err = suratkontrol.UpdateKunjunganPasien(req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } - c.JSON(http.StatusOK, &sk.MetadataString{ - Code: "200", - Message: "Berhasil Insert Surat Kontrol", + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "200", + Message: "Berhasil Insert Surat Kontrol", + }, }) return } @@ -161,9 +195,11 @@ func InsertSuratKontrol(c *gin.Context) { responJson, err := json.Marshal(res) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -188,23 +224,29 @@ func InsertSuratKontrol(c *gin.Context) { err = log_api.InsertLogAPI(reqInsertLog) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } log.Println(err) - c.JSON(http.StatusInternalServerError, res.MetaData) + c.JSON(http.StatusOK, &sk.ResponseInsertSuratKontrol{ + MetaData: res.MetaData, + }) return } responJson, err := json.Marshal(res) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -216,7 +258,7 @@ func InsertSuratKontrol(c *gin.Context) { TglRencanaKontrol: res.Response.TglRencanaKontrol, NomorSurKon: res.Response.NoSuratKontrol, KunjunganPasien: kunjunganPasien.ID, - RuanganSurKon: kunjunganPasien.Ruangan, + RuanganSurKon: idRuangan, DPJPSurKon: req.IDDokter, StatusSurKon: 1, // First Insert status always set to 1 UserCreatedSurKon: req.User, @@ -226,9 +268,11 @@ func InsertSuratKontrol(c *gin.Context) { err = suratkontrol.InsertDataSuratKontrol(reqInsert) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -242,9 +286,11 @@ func InsertSuratKontrol(c *gin.Context) { err = suratkontrol.UpdateKunjunganPasien(req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -269,9 +315,11 @@ func InsertSuratKontrol(c *gin.Context) { err = log_api.InsertLogAPI(reqInsertLog) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, &sk.MetadataString{ - Code: "", - Message: err.Error(), + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, }) return } @@ -292,7 +340,6 @@ func InsertSuratKontrol(c *gin.Context) { } log.Println("Response: ", response) - c.JSON(http.StatusOK, response) } @@ -577,6 +624,15 @@ func DeleteSuratKontrol(c *gin.Context) { }) return } + reqJson, err := json.Marshal(req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } log.Println("REQUEST: ", req) @@ -620,6 +676,12 @@ func DeleteSuratKontrol(c *gin.Context) { } log.Println("Headers : ", headers) + var headerStringBuilder strings.Builder + for key, value := range headers { + headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value)) + } + + headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ") request := &sk.RequestHeaderRencanaKontrol{ Request: &sk.TSuratKontrol{ RequestDelete: sk.RequestDeleteRencanaKontrol{ @@ -629,12 +691,91 @@ func DeleteSuratKontrol(c *gin.Context) { }, } + logTimeStart := time.Now().Format("2006-01-02 15:04:05") res, err := ResponseDeleteSuratKontrol(url, header, headers, request) if err != nil { + responJson, err := json.Marshal(res) + if err != nil { + log.Println(err) + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, + }) + return + } + logTimeEnd := time.Now().Format("2006-01-02 15:04:05") + uuid := uuid.New().String() + reqInsertLog := &logapi.DataLogAPI{ + ID: uuid, + DateCreated: logTimeEnd, + UserAgent: req.User, + IP: c.ClientIP(), + Parameter: "BPJS-VClaim-RencanaKontrol", + Header: headerString, + Method: "DELETE", + Url: url, + Request: reqJson, + Respon: responJson, + ResponCode: res.MetaData.Code, + ResponTimeStart: logTimeStart, + ResponTimeEnd: logTimeEnd, + Comment: res.MetaData.Message, + } + + err = log_api.InsertLogAPI(reqInsertLog) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } log.Printf("Error making external API request: %v", err) c.JSON(http.StatusInternalServerError, err) return } + responJson, err := json.Marshal(res) + if err != nil { + log.Println(err) + c.JSON(http.StatusPreconditionFailed, &sk.ResponseInsertSuratKontrol{ + MetaData: sk.MetadataString{ + Code: "203", + Message: err.Error(), + }, + }) + return + } + logTimeEnd := time.Now().Format("2006-01-02 15:04:05") + uuid := uuid.New().String() + reqInsertLog := &logapi.DataLogAPI{ + ID: uuid, + DateCreated: logTimeEnd, + UserAgent: req.User, + IP: c.ClientIP(), + Parameter: "BPJS-VClaim-RencanaKontrol", + Header: headerString, + Method: "DELETE", + Url: url, + Request: reqJson, + Respon: responJson, + ResponCode: res.MetaData.Code, + ResponTimeStart: logTimeStart, + ResponTimeEnd: logTimeEnd, + Comment: res.MetaData.Message, + } + + err = log_api.InsertLogAPI(reqInsertLog) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } reqUpdate := &sk.DataSuratKontrol{ DateUpdated: timeNow, diff --git a/models/bpjs/surat_kontrol/surat_kontrol.go b/models/bpjs/surat_kontrol/surat_kontrol.go index 7bca893..4587ba9 100644 --- a/models/bpjs/surat_kontrol/surat_kontrol.go +++ b/models/bpjs/surat_kontrol/surat_kontrol.go @@ -34,6 +34,7 @@ type RequestInsertRencanaKontrol struct { NamaDiagnosa string `json:"Nama_diagnosa"` TipeSurKon string `json:"tipe_surkon"` TipeRawat string `json:"tipe_rawat"` + Ruangan string `json:"ruangan"` } type ReqDeleteRencanaKontrol struct {