Files
api-bpjs-surkon/handlers/bpjs/surat_kontrol/surat_kontrol.go
2024-10-14 08:58:49 +07:00

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