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