332 lines
9.4 KiB
Go
332 lines
9.4 KiB
Go
package jadwal_dokter
|
|
|
|
import (
|
|
cfg "bridging-rssa/config"
|
|
"bridging-rssa/database/satu_data/dokter"
|
|
"bridging-rssa/docs/utils"
|
|
"bridging-rssa/models/bpjs/jadwal_dokter"
|
|
"bridging-rssa/models/config"
|
|
dktr "bridging-rssa/models/dokter"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func GetJadwalDokter() bool {
|
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
|
endpoint := os.Getenv("ANTREAN_RS")
|
|
url := baseUrl + "/" + endpoint
|
|
log.Println("URL :", url)
|
|
conf := config.ConfigBpjs{}
|
|
|
|
header := cfg.SetHeader(false, conf)
|
|
|
|
headers := map[string]string{
|
|
"X-cons-id": header.ConsID,
|
|
"X-timestamp": header.TimeStamp,
|
|
"X-signature": header.XSignature,
|
|
"user_key": header.UserKey,
|
|
}
|
|
log.Println("Headers : ", headers)
|
|
|
|
errTruncate := dokter.DeleteJadwalDokter()
|
|
if errTruncate != nil {
|
|
log.Println(errTruncate)
|
|
return false
|
|
}
|
|
|
|
errTruncateTemp := dokter.DeleteJadwalDokterTemp()
|
|
if errTruncateTemp != nil {
|
|
log.Println(errTruncateTemp)
|
|
return false
|
|
}
|
|
|
|
// Select from daftar spesialis
|
|
spesialis, err := dokter.GetSpesialis()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
var listIdSpesialis = make(map[string]int)
|
|
for _, kodeDokter := range spesialis {
|
|
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
|
|
}
|
|
|
|
subspesialis, err := dokter.GetSubspesialis()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
var listIdSubspesialis = make(map[string]int)
|
|
for _, kodeDokter := range subspesialis {
|
|
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
|
|
}
|
|
|
|
listDokter, err := dokter.GetDokter()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
var listIddokter = make(map[int]string)
|
|
for _, kodeDokter := range listDokter {
|
|
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
|
|
}
|
|
|
|
var reqInsert *jadwal_dokter.JadwalDokterSatuData
|
|
var res *[]jadwal_dokter.ListDokter
|
|
|
|
for _, value := range spesialis {
|
|
tanggal := time.Now().Format("2006-01-02")
|
|
for i := 0; i < 7; i++ {
|
|
kdPoly := value.Kode
|
|
res, err = JadwalDokterGetResponse(url, header, kdPoly, tanggal, headers)
|
|
if err != nil {
|
|
log.Println("Error making external API request: %v", err)
|
|
return false
|
|
}
|
|
date, errParse := time.Parse("2006-01-02", tanggal)
|
|
if errParse != nil {
|
|
return false
|
|
}
|
|
tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
|
|
log.Println("Tanggal :", tanggal)
|
|
if res == nil {
|
|
log.Println("Skip Proses")
|
|
continue
|
|
}
|
|
for _, v := range *res {
|
|
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
|
|
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
|
|
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
|
|
reqInsert = &jadwal_dokter.JadwalDokterSatuData{
|
|
Hari: v.Hari,
|
|
NamaHari: v.NamaHari,
|
|
Waktu: v.Jadwal,
|
|
Dokter: idDokter,
|
|
Spesialis: idSpesialis,
|
|
SubSpesialis: idSubspesialis,
|
|
Status: 1, // When available always set to 1
|
|
}
|
|
if reqInsert.Dokter != "" {
|
|
errInsert := dokter.InsertJadwalDokter(reqInsert)
|
|
if errInsert != nil {
|
|
log.Println(errInsert)
|
|
return false
|
|
}
|
|
} else {
|
|
reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
|
|
errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
|
|
if errInsertTemp != nil {
|
|
log.Println(errInsertTemp)
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func GetDokterByDPJP(c *gin.Context) {
|
|
dpjp := c.Param("dpjp")
|
|
idDokter, err := dokter.GetJadwalDokterByDPJP(dpjp)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
listHari, err := dokter.GetJadwalHariDokterBySpesialis(idDokter)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
log.Println("listHari: ", listHari)
|
|
|
|
var IDDokter []string
|
|
var idSubspesialis int
|
|
for _, v := range listHari {
|
|
IDDokter = append(IDDokter, v.Dokter)
|
|
idSubspesialis = v.SubSpesialis
|
|
break
|
|
}
|
|
|
|
namaDokter, err := dokter.GetNamaLengkapDokter(IDDokter)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
return
|
|
}
|
|
|
|
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
|
|
var res *jadwal_dokter.ResponseListHari
|
|
|
|
for _, k := range namaDokter {
|
|
var jadwalDokter []jadwal_dokter.ListJadwalDokter
|
|
for _, key := range listHari {
|
|
jadwalDokter = append(jadwalDokter, jadwal_dokter.ListJadwalDokter{
|
|
NamaHari: key.NamaHari,
|
|
KodeHari: key.Hari,
|
|
Waktu: key.Waktu,
|
|
})
|
|
}
|
|
gelarDepan := utils.ReplaceGelar(k.GelarDepan)
|
|
gelarBelakang := utils.ReplaceGelar(k.GelarBelakang)
|
|
namaLengkap := gelarDepan + " " + k.NamaLengkap + " " + gelarBelakang
|
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
|
hfisCode := strings.TrimSpace(k.HFISCode)
|
|
res = &jadwal_dokter.ResponseListHari{
|
|
IDSpesialis: listSubspesialis.IDSpesialis,
|
|
Kode: listSubspesialis.Kode,
|
|
Spesialis: listSubspesialis.Spesialis,
|
|
Subspesialis: listSubspesialis.Subspesialis,
|
|
IDSubspesialis: listSubspesialis.ID,
|
|
NamaLengkap: namaLengkap,
|
|
HFISCode: hfisCode,
|
|
KodeDPJP: dpjp,
|
|
JadwalDokter: jadwalDokter,
|
|
IDDokter: k.ID,
|
|
}
|
|
}
|
|
log.Println("Response :", res)
|
|
c.JSON(http.StatusOK, res)
|
|
}
|
|
|
|
func GetSpesialisByDate(c *gin.Context) {
|
|
tanggal := c.Param("tanggal")
|
|
date, err := time.Parse("2006-01-02", tanggal)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
hari := date.Local().Weekday().String()
|
|
hari = utils.ConvertDay(hari)
|
|
idSpesialis, err := dokter.GetJadwalDokterByDate(hari)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
listSpesialis, err := dokter.GetSpesialisByID(idSpesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
c.JSON(http.StatusOK, listSpesialis)
|
|
}
|
|
|
|
func GetJadwalSubspesialisByDate(c *gin.Context) {
|
|
tanggal := c.Param("tanggal")
|
|
date, err := time.Parse("2006-01-02", tanggal)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
|
|
log.Println("tanggal: ", tanggal)
|
|
hari := date.Local().Weekday().String()
|
|
hari = utils.ConvertDay(hari)
|
|
idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
c.JSON(http.StatusOK, listSpesialis)
|
|
}
|
|
|
|
func GetDokterBySpesialis(c *gin.Context) {
|
|
spesialis := c.Param("spesialis")
|
|
tanggal := c.Param("tanggal")
|
|
date, err := time.Parse("2006-01-02", tanggal)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
hari := date.Local().Weekday().String()
|
|
hari = utils.ConvertDay(hari)
|
|
idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
var resDokter []dktr.ResponseDokter
|
|
idSpesialis, err := strconv.Atoi(spesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
for _, v := range namaDokter {
|
|
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
|
|
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
|
|
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
|
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
|
resDokter = append(resDokter, dktr.ResponseDokter{
|
|
ID: v.ID,
|
|
NamaLengkap: namaLengkap,
|
|
Spesialis: idSpesialis,
|
|
HFISCode: v.HFISCode,
|
|
})
|
|
}
|
|
log.Println("Response :", resDokter)
|
|
c.JSON(http.StatusOK, resDokter)
|
|
}
|
|
|
|
func GetDokterBySubspesialis(c *gin.Context) {
|
|
subspesialis := c.Param("subspesialis")
|
|
tanggal := c.Param("tanggal")
|
|
date, err := time.Parse("2006-01-02", tanggal)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
|
|
log.Println("subspesialis: ", subspesialis)
|
|
log.Println("tanggal: ", tanggal)
|
|
|
|
hari := date.Local().Weekday().String()
|
|
hari = utils.ConvertDay(hari)
|
|
idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
var resDokter []dktr.ResponseDokterNew
|
|
idSubspesialis, err := strconv.Atoi(subspesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
|
|
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, err)
|
|
}
|
|
|
|
for _, v := range namaDokter {
|
|
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
|
|
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
|
|
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
|
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
|
resDokter = append(resDokter, dktr.ResponseDokterNew{
|
|
ID: v.ID,
|
|
NamaLengkap: namaLengkap,
|
|
Subspesialis: idSubspesialis,
|
|
HFISCode: v.HFISCode,
|
|
KodePoli: listSubspesialis.Kode,
|
|
DPJPCode: v.DPJPCode,
|
|
})
|
|
}
|
|
log.Println("Response :", resDokter)
|
|
c.JSON(http.StatusOK, resDokter)
|
|
}
|