485 lines
14 KiB
Go
485 lines
14 KiB
Go
package suratkontrol
|
|
|
|
import (
|
|
cfg "bridging-rssa/config"
|
|
suratkontrol "bridging-rssa/database/satu_data/surat_kontrol"
|
|
"bridging-rssa/docs/utils"
|
|
sk "bridging-rssa/models/bpjs/surat_kontrol"
|
|
"bridging-rssa/models/config"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func InsertSuratKontrol(c *gin.Context) {
|
|
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
|
|
endpoint := os.Getenv("SURAT_KONTROL_RS_DEV")
|
|
param := os.Getenv("INSERT_SURAT_KONTROL")
|
|
url := baseUrl + endpoint + param
|
|
|
|
timeNow := time.Now().Format("2006-01-02 15:04:05")
|
|
|
|
var req sk.RequestInsertRencanaKontrol
|
|
|
|
err := c.Bind(&req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
log.Println("Request: ", req)
|
|
|
|
conf := config.ConfigBpjs{}
|
|
|
|
header := cfg.SetHeaderDev(conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
"Content-Type": "Application/x-www-form-urlencoded",
|
|
}
|
|
log.Println("Headers : ", headers)
|
|
|
|
tipeSurKon := "1"
|
|
|
|
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
|
|
uuid := uuid.New().String()
|
|
if req.NoSEP == "" {
|
|
tipeSurKon = "0"
|
|
reqInsert := &sk.DataSuratKontrol{
|
|
ID: uuid,
|
|
DateCreated: timeNow,
|
|
TglCetakSurKon: timeNow,
|
|
TglRencanaKontrol: req.TglRencanaKontrol,
|
|
NomorSurKon: "", //TODO How to get Nomor SurKon
|
|
KunjunganPasien: kunjunganPasien.ID,
|
|
RuanganSurKon: kunjunganPasien.Ruangan,
|
|
DPJPSurKon: kunjunganPasien.DPJP,
|
|
StatusSurKon: 1, // First Insert status always set to 1
|
|
UserCreatedSurKon: req.User,
|
|
TipeSurKon: tipeSurKon,
|
|
}
|
|
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, nil)
|
|
return
|
|
}
|
|
|
|
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
|
|
Request: &sk.ReqInsertRencanaKontrol{
|
|
NoSEP: req.NoSEP,
|
|
KodeDokter: req.KodeHFIS,
|
|
PoliKontrol: req.KodePoli,
|
|
TglRencanaKontrol: req.TglRencanaKontrol,
|
|
User: req.User,
|
|
},
|
|
}
|
|
res, err := PostData(url, header, headers, reqSuratKontrol)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, res.MetaData)
|
|
return
|
|
}
|
|
|
|
reqInsert := &sk.DataSuratKontrol{
|
|
ID: uuid,
|
|
DateCreated: timeNow,
|
|
TglCetakSurKon: timeNow,
|
|
TglRencanaKontrol: res.Response.TglRencanaKontrol,
|
|
NomorSurKon: res.Response.NoSuratKontrol,
|
|
KunjunganPasien: kunjunganPasien.ID,
|
|
RuanganSurKon: kunjunganPasien.Ruangan,
|
|
DPJPSurKon: kunjunganPasien.DPJP,
|
|
StatusSurKon: 1, // First Insert status always set to 1
|
|
UserCreatedSurKon: req.User,
|
|
TipeSurKon: tipeSurKon,
|
|
}
|
|
|
|
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
err = suratkontrol.UpdateNoSEPKunjunganPasien(req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
response := &sk.ResponseInsertSuratKontrol{
|
|
MetaData: res.MetaData,
|
|
Response: sk.ResponseData{
|
|
NoSuratKontrol: res.Response.NoSuratKontrol,
|
|
TglRencanaKontrol: res.Response.TglRencanaKontrol,
|
|
NamaDokter: res.Response.NamaDokter,
|
|
NoKartu: res.Response.NoKartu,
|
|
Nama: res.Response.Nama,
|
|
Kelamin: res.Response.Kelamin,
|
|
TglLahir: res.Response.TglLahir,
|
|
NamaDiagnosa: res.Response.NamaDiagnosa,
|
|
SubSpesialis: req.Subspesialis,
|
|
},
|
|
}
|
|
|
|
log.Println("Response: ", response)
|
|
|
|
c.JSON(http.StatusOK, response)
|
|
}
|
|
|
|
func UpdateSuratKontrol(c *gin.Context) {
|
|
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
|
|
endpoint := os.Getenv("SURAT_KONTROL_RS_DEV")
|
|
param := os.Getenv("UPDATE_SURAT_KONTROL")
|
|
url := baseUrl + endpoint + param
|
|
|
|
var req sk.ReqUpdateRencanaKontrol
|
|
|
|
err := c.Bind(&req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
timeNow := time.Now().Format("2006-01-02 15:04:05")
|
|
|
|
kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
uuid := uuid.New().String()
|
|
tipeSurKon := "1"
|
|
|
|
if req.NoSEP == "" {
|
|
tipeSurKon = "0"
|
|
reqInsert := &sk.DataSuratKontrol{
|
|
ID: uuid,
|
|
DateCreated: timeNow,
|
|
TglCetakSurKon: timeNow,
|
|
TglRencanaKontrol: req.TglRencanaKontrol,
|
|
NomorSurKon: "", //TODO How to get Nomor SurKon
|
|
KunjunganPasien: kunjunganPasien.ID,
|
|
RuanganSurKon: kunjunganPasien.Ruangan,
|
|
DPJPSurKon: kunjunganPasien.DPJP,
|
|
StatusSurKon: 1, // First Insert status always set to 1
|
|
UserCreatedSurKon: req.User,
|
|
TipeSurKon: tipeSurKon,
|
|
}
|
|
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, nil)
|
|
return
|
|
}
|
|
conf := config.ConfigBpjs{}
|
|
|
|
header := cfg.SetHeaderDev(conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
"Content-Type": "Application/x-www-form-urlencoded",
|
|
}
|
|
log.Println("Headers : ", headers)
|
|
|
|
reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{
|
|
Request: &sk.ReqUpdateRencanaKontrol{
|
|
NoSuratKontrol: req.NoSuratKontrol,
|
|
NoSEP: req.NoSEP,
|
|
KodeDokter: req.KodeDokter,
|
|
PoliKontrol: req.PoliKontrol,
|
|
TglRencanaKontrol: req.TglRencanaKontrol,
|
|
User: req.User,
|
|
},
|
|
}
|
|
res, err := ResponseUpdateSuratKontrol(url, header, headers, reqSuratKontrol)
|
|
if err != nil {
|
|
log.Printf("Error making external API request: %v", err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
err = suratkontrol.UpdateDataSuratKontrol(req.IDSurKon)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
reqInsert := &sk.DataSuratKontrol{
|
|
ID: uuid,
|
|
DateCreated: timeNow,
|
|
TglCetakSurKon: timeNow,
|
|
TglRencanaKontrol: res.Response.TglRencanaKontrol,
|
|
NomorSurKon: res.Response.NoSuratKontrol,
|
|
KunjunganPasien: kunjunganPasien.ID,
|
|
RuanganSurKon: kunjunganPasien.Ruangan,
|
|
DPJPSurKon: kunjunganPasien.DPJP,
|
|
StatusSurKon: 1, // Insert status always set to 1
|
|
UserCreatedSurKon: req.User,
|
|
TipeSurKon: tipeSurKon,
|
|
}
|
|
|
|
err = suratkontrol.InsertDataSuratKontrol(reqInsert)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, res)
|
|
}
|
|
|
|
func DeleteSuratKontrol(c *gin.Context) {
|
|
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
|
|
endpoint := os.Getenv("SURAT_KONTROL_RS_DEV")
|
|
param := os.Getenv("DELETE_SURAT_KONTROL")
|
|
url := baseUrl + endpoint + param
|
|
|
|
var req sk.ReqDeleteRencanaKontrol
|
|
|
|
err := c.Bind(&req)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
conf := config.ConfigBpjs{}
|
|
|
|
header := cfg.SetHeaderDev(conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
"Content-Type": "Application/x-www-form-urlencoded",
|
|
}
|
|
log.Println("Headers : ", headers)
|
|
|
|
request := &sk.RequestHeaderRencanaKontrol{
|
|
Request: &sk.TSuratKontrol{
|
|
RequestDelete: sk.RequestDeleteRencanaKontrol{
|
|
NoSuratKontrol: req.NomorSurKon,
|
|
User: req.User,
|
|
},
|
|
},
|
|
}
|
|
|
|
res, err := ResponseDeleteSuratKontrol(url, header, headers, request)
|
|
if err != nil {
|
|
log.Printf("Error making external API request: %v", err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
err = suratkontrol.UpdateDataSuratKontrol(req.IDDataSurKon)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, res)
|
|
}
|
|
|
|
func GetNomorSuratKontrol(c *gin.Context) {
|
|
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
|
|
endpoint := os.Getenv("SURAT_KONTROL_RS_DEV")
|
|
param := os.Getenv("GET_NOMOR_SURAT_KONTROL")
|
|
noSurat := c.Param("noSuratKontrol")
|
|
url := baseUrl + endpoint + param + noSurat
|
|
|
|
conf := config.ConfigBpjs{}
|
|
|
|
header := cfg.SetHeaderDev(conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
"Content-Type": "Application/x-www-form-urlencoded",
|
|
}
|
|
log.Println("Headers : ", headers)
|
|
|
|
res, err := ResponseGetNomorSuratKontrol(url, header, headers)
|
|
if err != nil {
|
|
log.Printf("Error making external API request: %v", err)
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, res)
|
|
}
|
|
|
|
func GetSuratKontrolBySEP(c *gin.Context) {
|
|
baseUrl := os.Getenv("BASEURL_BPJS_DEV")
|
|
endpoint := os.Getenv("SURAT_KONTROL_RS_DEV")
|
|
param := os.Getenv("GET_SURAT_KONTROL_SEP")
|
|
noSEP := c.Param("noSEP")
|
|
url := baseUrl + endpoint + param + noSEP
|
|
|
|
conf := config.ConfigBpjs{}
|
|
|
|
header := cfg.SetHeaderDev(conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
"Content-Type": "Application/x-www-form-urlencoded",
|
|
}
|
|
log.Println("Headers : ", headers)
|
|
|
|
res, err := ResponseGetSuratKontrolBySEP(url, header, headers)
|
|
if err != nil {
|
|
log.Printf("Error making external API request: %v", err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, res)
|
|
}
|
|
|
|
func GetDataSurKon(c *gin.Context) {
|
|
data, err := suratkontrol.GetDataSuratKontrol()
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
var resSurKon []*sk.ResponseGetDataSuratKontrol
|
|
for _, v := range data {
|
|
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
|
|
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
|
|
namaLengkap := gelarDepan + " " + v.NamaLengkapDokter + " " + gelarBelakang
|
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
|
dateCetakSurkon, _ := time.Parse(time.RFC3339, v.TglCetakSurKon)
|
|
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
|
|
dateRencanaSurkon, _ := time.Parse(time.RFC3339, v.TglRencanaKontrol)
|
|
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
|
|
resSurKon = append(resSurKon, &sk.ResponseGetDataSuratKontrol{
|
|
IDDataSurKon: v.IDDataSurKon,
|
|
IDXDaftar: v.IDXDaftar,
|
|
TglCetakSurKon: dateCetakSurkonString,
|
|
TglRencanaKontrol: dateRencanaSurkonString,
|
|
NomorSurKon: v.NomorSurKon,
|
|
PoliAsal: v.PoliAsal,
|
|
PoliTujuan: v.PoliTujuan,
|
|
NomorSEP: v.NomorSEP,
|
|
NamaPasien: v.NamaPasien,
|
|
NamaDokter: namaLengkap,
|
|
NomorKartu: "",
|
|
Subspesialis: v.Subspesialis,
|
|
})
|
|
}
|
|
c.JSON(http.StatusOK, resSurKon)
|
|
}
|
|
|
|
func GetDataSurKonByID(c *gin.Context) {
|
|
id := c.Param("idxdaftar")
|
|
data, err := suratkontrol.GetDataSuratKontrolByID(id)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
gelarDepan := utils.ReplaceGelar(data.GelarDepan)
|
|
gelarBelakang := utils.ReplaceGelar(data.GelarBelakang)
|
|
namaLengkap := gelarDepan + " " + data.NamaLengkapDokter + " " + gelarBelakang
|
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
|
dateCetakSurkon, _ := time.Parse(time.RFC3339, data.TglCetakSurKon)
|
|
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
|
|
dateRencanaSurkon, _ := time.Parse(time.RFC3339, data.TglRencanaKontrol)
|
|
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
|
|
resSurKon := &sk.ResponseGetDataSuratKontrol{
|
|
IDDataSurKon: data.IDDataSurKon,
|
|
IDXDaftar: data.IDXDaftar,
|
|
TglCetakSurKon: dateCetakSurkonString,
|
|
TglRencanaKontrol: dateRencanaSurkonString,
|
|
NomorSurKon: data.NomorSurKon,
|
|
PoliAsal: data.PoliAsal,
|
|
PoliTujuan: data.PoliTujuan,
|
|
NomorSEP: data.NomorSEP,
|
|
NamaPasien: data.NamaPasien,
|
|
NamaDokter: namaLengkap,
|
|
NomorKartu: "",
|
|
Subspesialis: data.Subspesialis,
|
|
}
|
|
c.JSON(http.StatusOK, resSurKon)
|
|
}
|
|
|
|
func PrintSurKon(c *gin.Context) {
|
|
id := c.Param("idSurKon")
|
|
|
|
idxDaftar, err := suratkontrol.GetIDXDaftarBySurKon(id)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
data, err := suratkontrol.GetDataSuratKontrolByID(idxDaftar)
|
|
if err != nil {
|
|
log.Println(err)
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
gelarDepan := utils.ReplaceGelar(data.GelarDepan)
|
|
gelarBelakang := utils.ReplaceGelar(data.GelarBelakang)
|
|
namaLengkap := gelarDepan + " " + data.NamaLengkapDokter + " " + gelarBelakang
|
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
|
dateCetakSurkon, _ := time.Parse(time.RFC3339, data.TglCetakSurKon)
|
|
dateCetakSurkonString := dateCetakSurkon.Format("2006-01-02")
|
|
dateRencanaSurkon, _ := time.Parse(time.RFC3339, data.TglRencanaKontrol)
|
|
dateRencanaSurkonString := dateRencanaSurkon.Format("2006-01-02")
|
|
resSurKon := &sk.ResponseGetDataSuratKontrol{
|
|
IDDataSurKon: data.IDDataSurKon,
|
|
IDXDaftar: data.IDXDaftar,
|
|
TglCetakSurKon: dateCetakSurkonString,
|
|
TglRencanaKontrol: dateRencanaSurkonString,
|
|
NomorSurKon: data.NomorSurKon,
|
|
PoliAsal: data.PoliAsal,
|
|
PoliTujuan: data.PoliTujuan,
|
|
NomorSEP: data.NomorSEP,
|
|
NamaPasien: data.NamaPasien,
|
|
NamaDokter: namaLengkap,
|
|
NomorKartu: "",
|
|
Subspesialis: data.Subspesialis,
|
|
}
|
|
log.Println("Data surkon", resSurKon)
|
|
c.JSON(http.StatusOK, resSurKon)
|
|
}
|