diff --git a/component/chart/chart.templ b/component/chart/chart.templ index 5777191..7b789c0 100644 --- a/component/chart/chart.templ +++ b/component/chart/chart.templ @@ -21,6 +21,35 @@ script GenerateChart(idDiv string, udata string) { // var myChart_001 = echarts.init(document.getElementById(idDiv)); myChart[idDiv] = echarts.init(element); + // var option_001 = JSON.parse(udata); + option[idDiv] = JSON.parse(udata); + console.log("option ", option) + // myChart_001.setOption(option_001); + myChart[idDiv].setOption(option[idDiv]); + }); +} + +templ ShowChartFixed(idDiv string, udata string, width string, height string) { +
+ @GenerateChartFixed(idDiv, udata, width, height) +} + +script GenerateChartFixed(idDiv string, udata string, width string, height string) { + htmx.onLoad(function(elt) { + console.log("elt ",elt) + var element = document.getElementById(idDiv); + console.log("element ",element) + if (element) { + element.style.height = height; + element.style.width = width; + } + + var myChart = {}; + var option = {}; + + // var myChart_001 = echarts.init(document.getElementById(idDiv)); + myChart[idDiv] = echarts.init(element); + // var option_001 = JSON.parse(udata); option[idDiv] = JSON.parse(udata); console.log("option ", option) diff --git a/component/chart/chart_templ.go b/component/chart/chart_templ.go index 759bbdd..c96ed62 100644 --- a/component/chart/chart_templ.go +++ b/component/chart/chart_templ.go @@ -80,3 +80,74 @@ func GenerateChart(idDiv string, udata string) templ.ComponentScript { CallInline: templ.SafeScriptInline(`__templ_GenerateChart_906c`, idDiv, udata), } } + +func ShowChartFixed(idDiv string, udata string, width string, height string) templ.Component { + return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) + if !templ_7745c5c3_IsBuffer { + templ_7745c5c3_Buffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var3 := templ.GetChildren(ctx) + if templ_7745c5c3_Var3 == nil { + templ_7745c5c3_Var3 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = GenerateChartFixed(idDiv, udata, width, height).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if !templ_7745c5c3_IsBuffer { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) + } + return templ_7745c5c3_Err + }) +} + +func GenerateChartFixed(idDiv string, udata string, width string, height string) templ.ComponentScript { + return templ.ComponentScript{ + Name: `__templ_GenerateChartFixed_a276`, + Function: `function __templ_GenerateChartFixed_a276(idDiv, udata, width, height){htmx.onLoad(function(elt) { + console.log("elt ",elt) + var element = document.getElementById(idDiv); + console.log("element ",element) + if (element) { + element.style.height = height; + element.style.width = width; + } + + var myChart = {}; + var option = {}; + + // var myChart_001 = echarts.init(document.getElementById(idDiv)); + myChart[idDiv] = echarts.init(element); + + // var option_001 = JSON.parse(udata); + option[idDiv] = JSON.parse(udata); + console.log("option ", option) + // myChart_001.setOption(option_001); + myChart[idDiv].setOption(option[idDiv]); + }); +}`, + Call: templ.SafeScript(`__templ_GenerateChartFixed_a276`, idDiv, udata, width, height), + CallInline: templ.SafeScriptInline(`__templ_GenerateChartFixed_a276`, idDiv, udata, width, height), + } +} diff --git a/handlers/corporate/mcudetail/tabkelainanfisik.hanlders.go b/handlers/corporate/mcudetail/tabkelainanfisik.hanlders.go new file mode 100644 index 0000000..dbf7e3a --- /dev/null +++ b/handlers/corporate/mcudetail/tabkelainanfisik.hanlders.go @@ -0,0 +1,66 @@ +package mcu_corporate_handlers + +import ( + "cpone/component/chart" + "cpone/models" + "cpone/utils" + corporate_mcudetail "cpone/views/corporate/mcu/mcutab" + "encoding/json" + + "github.com/labstack/echo/v4" + "go.uber.org/zap" +) + +type TabKelainanFisikServices interface { + GetKelainanFisikBMI(mcuID string) (models.Piechart, error) + GetKelainanFisikHipertensi(mcuID string) (models.Piechart, error) +} + +type TabKelainanFisikHandler struct { + TabKelainanFisikServices TabKelainanFisikServices +} + +func NewTabKelainanFisikHandler(tkf TabKelainanFisikServices) *TabKelainanFisikHandler { + return &TabKelainanFisikHandler{ + TabKelainanFisikServices: tkf, + } +} + +func (tkf *TabKelainanFisikHandler) HandleShowTabKelainanFisik(c echo.Context) error { + logger, _ := zap.NewProduction() + logger.Info("Tab Kelainan Fisik") + + id := c.Param("id") + logger.Info("Params", zap.Any("id", id)) + + bmi, err := tkf.TabKelainanFisikServices.GetKelainanFisikBMI(id) + if err != nil { + return err + } + + hiper, err := tkf.TabKelainanFisikServices.GetKelainanFisikHipertensi(id) + if err != nil { + return err + } + + bmijson, err := json.MarshalIndent(bmi, "", " ") + if err != nil { + return err + } + + hiperjson, err := json.MarshalIndent(hiper, "", " ") + if err != nil { + return err + } + + content := corporate_mcudetail.Tabkelainanfisik( + chart.ShowChartFixed("bmixs", string(bmijson), "400px", "450px"), + chart.ShowChartFixed("bmimd", string(bmijson), "500px", "450px"), + chart.ShowChartFixed("bmilg", string(bmijson), "600px", "450px"), + chart.ShowChartFixed("hprxs", string(hiperjson), "400px", "450px"), + chart.ShowChartFixed("hprmd", string(hiperjson), "500px", "450px"), + chart.ShowChartFixed("hprlg", string(hiperjson), "600px", "450px"), + ) + + return utils.View(c, content) +} diff --git a/handlers/corporate/mcudetail/tabkelainanglobal.handlers.go b/handlers/corporate/mcudetail/tabkelainanglobal.handlers.go new file mode 100644 index 0000000..5122cb1 --- /dev/null +++ b/handlers/corporate/mcudetail/tabkelainanglobal.handlers.go @@ -0,0 +1,67 @@ +package mcu_corporate_handlers + +import ( + "cpone/component/chart" + "cpone/models" + "cpone/utils" + corporate_mcudetail "cpone/views/corporate/mcu/mcutab" + "encoding/json" + + "github.com/labstack/echo/v4" + "go.uber.org/zap" +) + +type TabKelainanGlobalServices interface { + GetBarChartConf(title string, data models.BarDataset) (models.Barchart, error) +} + +type TabKelainanGlobalHandler struct { + TabKelainanGlobalServices TabKelainanGlobalServices +} + +func NewTabKelainanGlobalHandler(tkg TabKelainanGlobalServices) *TabKelainanGlobalHandler { + return &TabKelainanGlobalHandler{ + TabKelainanGlobalServices: tkg, + } +} + +func (tkg *TabKelainanGlobalHandler) HandleShowTabKelainanGlobal(c echo.Context) error { + logger, _ := zap.NewProduction() + id := c.Param("id") + + logger.Info("params", zap.Any("id", id)) + + test := models.BarDataset{ + Source: [][]interface{}{ + {"score", "amount", "product", "percentage"}, + {200, 447, "Body Mass Index"}, + {150, 314, "Pemeriksaan Mata"}, + {125, 314, "Fungsi Lemak"}, + {100, 254, "Autospirometri"}, + {90, 200, "Hematologi"}, + {80, 180, "ECG"}, + {75, 160, "Hiperuricemia"}, + {70, 125, "Tekanan Darah"}, + {60, 118, "Urine Lengkap"}, + {50, 87, "Fungsi Hati"}, + }, + } + + title := "Kelainan MCU" + option, err := tkg.TabKelainanGlobalServices.GetBarChartConf(title, test) + if err != nil { + return err + } + + klmcujson, err := json.MarshalIndent(option, "", " ") + if err != nil { + return err + } + + content := corporate_mcudetail.TabKelainanGlobal( + chart.ShowChartFixed("a", string(klmcujson), "1000px", "450px"), + chart.ShowChartFixed("b", string(klmcujson), "1000px", "450px"), + ) + + return utils.View(c, content) +} diff --git a/handlers/corporate/mcudetail/tabkepesertaan.handlers.go b/handlers/corporate/mcudetail/tabkepesertaan.handlers.go index a9a94b4..d8bb790 100644 --- a/handlers/corporate/mcudetail/tabkepesertaan.handlers.go +++ b/handlers/corporate/mcudetail/tabkepesertaan.handlers.go @@ -31,10 +31,6 @@ func (tkh *TabKepersertaanHandler) HandleShowTabKepesertaan(c echo.Context) erro logger, _ := zap.NewProduction() logger.Info("Tab Kepesertaan") - chTotalPesertaID := utils.GenerateRandomID("totalPesertaID") - chGenderPesertaID := utils.GenerateRandomID("genderPesertaID") - chUmurPesertaID := utils.GenerateRandomID("umurPesertaID") - id := c.Param("id") logger.Info("Params", zap.Any("id", id)) @@ -69,9 +65,15 @@ func (tkh *TabKepersertaanHandler) HandleShowTabKepesertaan(c echo.Context) erro } content := corporate_mcudetail.TabKepesertaan( - chart.ShowChart(chTotalPesertaID, string(totaljson)), - chart.ShowChart(chGenderPesertaID, string(genderjson)), - chart.ShowChart(chUmurPesertaID, string(umurjson)), + chart.ShowChart("charttotal", string(totaljson)), + chart.ShowChart("chartgender", string(genderjson)), + chart.ShowChart("chartumur", string(umurjson)), + chart.ShowChart("charttotalxs", string(totaljson)), + chart.ShowChart("chartgenderxs", string(genderjson)), + chart.ShowChart("chartumurxs", string(umurjson)), + chart.ShowChart("charttotalmd", string(totaljson)), + chart.ShowChart("chartgendermd", string(genderjson)), + chart.ShowChart("chartumurmd", string(umurjson)), ) return utils.View(c, content) diff --git a/handlers/routes.go b/handlers/routes.go index 282de8c..bb5d43a 100644 --- a/handlers/routes.go +++ b/handlers/routes.go @@ -121,20 +121,34 @@ func SetupRoutesCorporate(app *echo.Echo, appStore db.AppStore) { mcudHandr := corporate_handlers.NewMcuDetailHandler(mcudServ) corp.GET("/dashboard_pic/detail/:id", mcudHandr.HandlerShowMcuDetailScreen) + // tab kepesertaan kepesertaanSrvs := mcu_corporate_services.NewTabKepersertaanService(appStore) kepesertaanHdlr := mcu_corporate_handlers.NewTabKepersertaanHandler(kepesertaanSrvs) corp.GET("/dashboard_pic/detail/:id/tabkepesertaan", kepesertaanHdlr.HandleShowTabKepesertaan) + // tab kelainan global + kelainanglobalSrvs := mcu_corporate_services.NewTabKelainanGlobalServices(appStore) + kelainanglobalHdlr := mcu_corporate_handlers.NewTabKelainanGlobalHandler(kelainanglobalSrvs) + corp.GET("/dashboard_pic/detail/:id/tabkelainanglobal", kelainanglobalHdlr.HandleShowTabKelainanGlobal) + + // tab kelainan fisik + kelainanfisikSrvs := mcu_corporate_services.NewTabKelainanFisikServices(appStore) + kelainanfisikHdlr := mcu_corporate_handlers.NewTabKelainanFisikHandler(kelainanfisikSrvs) + corp.GET("/dashboard_pic/detail/:id/tabkelainanfisik", kelainanfisikHdlr.HandleShowTabKelainanFisik) + + // tab kesimpulan kesimpulanSrv := mcu_corporate_services.NewTabKesimpulanServices(appStore) kesimpulanHdr := mcu_corporate_handlers.NewTabKesimpulanHandler(kesimpulanSrv) corp.GET("/dashboard_pic/detail/:id/tabkesimpulan", kesimpulanHdr.HandleShowTabKesimpulanScreen) + // tab daftar peserta daftarpesertaServ := mcu_corporate_services.NewTabDaftarPesertaServices(appStore) daftarpesertaHandl := mcu_corporate_handlers.NewTabDaftarPesertaHandlers(daftarpesertaServ) corp.GET("/dashboard_pic/detail/:id/tabdaftarpeserta", daftarpesertaHandl.HandleShowTabDaftarPeserta) corp.GET("/dashboard_pic/detail/:id/tabdaftarpeserta/changepage", daftarpesertaHandl.HandlePagination) corp.GET("/dashboard_pic/detail/:id/tabdaftarpeserta/openreport", daftarpesertaHandl.HandleOpenReportDialog) + // tab keuangan keuanganService := mcu_corporate_services.NewTabKeuanganServices(appStore) keuanganHandler := mcu_corporate_handlers.NewTabKeuanganHandler(keuanganService) corp.GET("/dashboard_pic/detail/:id/tabkeuangan", keuanganHandler.HandleShowTabKeuangan) diff --git a/models/chart.models.go b/models/chart.models.go index 4917550..d272453 100644 --- a/models/chart.models.go +++ b/models/chart.models.go @@ -41,6 +41,7 @@ type Piechart struct { Top string `json:"top"` Left string `json:"left"` Orient string `json:"orient"` + Height int `json:"height"` } `json:"legend"` Series []Series `json:"series"` } @@ -85,3 +86,7 @@ type Barchart struct { } `json:"encode"` } `json:"series"` } + +type BarDataset struct { + Source [][]interface{} `json:"source"` +} diff --git a/models/tabkelainanfisik.models.go b/models/tabkelainanfisik.models.go new file mode 100644 index 0000000..005998e --- /dev/null +++ b/models/tabkelainanfisik.models.go @@ -0,0 +1,7 @@ +package models + +type KelainanFisikDataModel struct { + Test string `db:"test"` + Total int `db:"total"` + Mcu_KelainanClasification string `db:"Mcu_KelainanClasification"` +} diff --git a/models/tabkelainanglobal.models.go b/models/tabkelainanglobal.models.go new file mode 100644 index 0000000..992b822 --- /dev/null +++ b/models/tabkelainanglobal.models.go @@ -0,0 +1,11 @@ +package models + +type KelainanGlobalMCUModel struct { + Test string `db:"Test"` + Total int `db:"total"` +} + +type KelainanGlobalFisikModel struct { + Mcu_KelainanName string `db:"Mcu_KelainanName"` + Total int `db:"total"` +} diff --git a/services/corporate/mcudetail/tabkelainanfisik.services.go b/services/corporate/mcudetail/tabkelainanfisik.services.go new file mode 100644 index 0000000..2516619 --- /dev/null +++ b/services/corporate/mcudetail/tabkelainanfisik.services.go @@ -0,0 +1,207 @@ +package mcu_corporate_services + +import ( + "cpone/db" + "cpone/models" + dbx "cpone/package/database" + "fmt" + "strconv" + + "go.uber.org/zap" +) + +type TabKelainanFisikServices struct { + TabKelainanFisikStore db.AppStore +} + +func NewTabKelainanFisikServices(store db.AppStore) *TabKelainanFisikServices { + return &TabKelainanFisikServices{ + TabKelainanFisikStore: store, + } +} + +func (tkf *TabKelainanFisikServices) GetPieChartConf(title string, subtext string, data []models.SeriesData) (models.Piechart, error) { + option := models.Piechart{ + Title: struct { + Text string `json:"text"` + SubText string `json:"subtext"` + Left string `json:"left"` + }{ + Text: title, + SubText: subtext, + Left: "center", + }, + Tooltip: struct { + Trigger string `json:"trigger"` + }{ + Trigger: "item", + }, + Legend: struct { + Top string `json:"top"` + Left string `json:"left"` + Orient string `json:"orient"` + Height int `json:"height"` + }{ + Top: "bottom", + Left: "center", + Orient: "vertical", + Height: 75, + }, + Series: []models.Series{ + { + Label: struct { + Position string `json:"position"` + Formatter string `json:"formatter"` + }{ + Position: "inner", + Formatter: "{d}%", + }, + Name: "Access From", + Type: "pie", + Radius: []string{"20%", "50%"}, + ItemStyle: struct { + BorderRadius int `json:"borderRadius"` + BorderColor string `json:"borderColor"` + BorderWidth int `json:"borderWidth"` + }{ + BorderRadius: 10, + BorderColor: "#fff", + BorderWidth: 2, + }, + Data: data, + Emphasis: struct { + ItemStyle struct { + ShadowBlur int `json:"shadowBlur"` + ShadowOffsetX int `json:"shadowOffsetX"` + ShadowColor string `json:"shadowColor"` + } `json:"itemStyle"` + }{ + ItemStyle: struct { + ShadowBlur int `json:"shadowBlur"` + ShadowOffsetX int `json:"shadowOffsetX"` + ShadowColor string `json:"shadowColor"` + }{ + ShadowBlur: 10, + ShadowOffsetX: 0, + ShadowColor: "rgba(0, 0, 0, 0.5)", + }, + }, + }, + }, + } + + return option, nil +} + +func (tkf *TabKelainanFisikServices) GetKelainanFisikBMI(mcuID string) (models.Piechart, error) { + logger, _ := zap.NewProduction() + var option models.Piechart + var data []models.KelainanFisikDataModel + + q := ` + SELECT + CASE + WHEN Mgm_HeaderIsNormal = "Y" THEN "Normal" + WHEN Mgm_HeaderIsNormal = "N" THEN Mcu_KelainanName + ELSE "Tidak diperiksa" END AS test, + COUNT(Mgm_HeaderT_OrderHeaderID) AS total, + IFNULL(Mcu_KelainanClasification, "") AS Mcu_KelainanClasification + FROM mgm_header + LEFT JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID AND Mgm_DetailIsActive = 'Y' + LEFT JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID + LEFT JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID + LEFT JOIN nat_test ON Nat_TestCode = Mgm_HeaderNat_TestCode + WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ? + AND Mgm_HeaderNat_TestCode = 'STATUS GIZI' + GROUP BY + CASE + WHEN Mgm_HeaderIsNormal = "Y" THEN "Normal" + WHEN Mgm_HeaderIsNormal = "N" THEN Mcu_KelainanName ELSE + "Tidak diperiksa" END + ORDER BY COUNT(Mgm_HeaderT_OrderHeaderID) DESC + ` + + if err := dbx.Handlex.Select(&data, q, mcuID); err != nil { + return option, fmt.Errorf("error get data kel fisik bmi %v", err) + } + defer logger.Sync() + logger.Info("resp data", zap.Any("data", data)) + + title := "Status Index Masa Tubuh (BMI)" + subtext := "" + chartData := []models.SeriesData{} + + if data != nil { + for _, d := range data { + chartData = append(chartData, models.SeriesData{ + Value: d.Total, + Name: d.Test + ": " + strconv.Itoa(d.Total) + " Peserta", + }) + } + } else { + chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"}) + } + + option, err := tkf.GetPieChartConf(title, subtext, chartData) + if err != nil { + return option, fmt.Errorf("error get & insert data into chart: %v", err) + } + + return option, nil +} + +func (tkf *TabKelainanFisikServices) GetKelainanFisikHipertensi(mcuID string) (models.Piechart, error) { + logger, _ := zap.NewProduction() + var option models.Piechart + var data []models.KelainanFisikDataModel + + q := ` + SELECT + CASE + WHEN Mgm_HeaderIsNormal = "Y" THEN "Normal" + WHEN Mgm_HeaderIsNormal = "N" THEN Mcu_KelainanName + ELSE "Tidak diperiksa" END AS test, + COUNT(Mgm_HeaderT_OrderHeaderID) AS total, + IFNULL(Mcu_KelainanClasification, "") AS Mcu_KelainanClasification + FROM mgm_header + LEFT JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID AND Mgm_DetailIsActive = 'Y' + LEFT JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID + LEFT JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID + LEFT JOIN nat_test ON Nat_TestCode = Mgm_HeaderNat_TestCode + WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ? + AND Mgm_HeaderNat_TestCode = 'TANDA VITAL' + GROUP BY + CASE + WHEN Mgm_HeaderIsNormal = "Y" THEN "Normal" + WHEN Mgm_HeaderIsNormal = "N" THEN Mcu_KelainanName + ELSE "Tidak diperiksa" END + ORDER BY count(Mgm_HeaderT_OrderHeaderID) DESC + ` + if err := dbx.Handlex.Select(&data, q, mcuID); err != nil { + return option, fmt.Errorf("error get data kel fisik hipertensi: %v", err) + } + defer logger.Sync() + logger.Info("resp data", zap.Any("data", data)) + + title := "Kriteria Hipertensi" + subtext := "" + chartData := []models.SeriesData{} + + if data != nil { + for _, d := range data { + chartData = append(chartData, models.SeriesData{ + Value: d.Total, + Name: d.Test + ": " + strconv.Itoa(d.Total) + " Peserta", + }) + } + } else { + chartData = append(chartData, models.SeriesData{Value: 0, Name: "No Data"}) + } + + option, err := tkf.GetPieChartConf(title, subtext, chartData) + if err != nil { + return option, fmt.Errorf("error get and insert data into piechart : %v", err) + } + + return option, nil +} diff --git a/services/corporate/mcudetail/tabkelainanglobal.services.go b/services/corporate/mcudetail/tabkelainanglobal.services.go new file mode 100644 index 0000000..5f1c053 --- /dev/null +++ b/services/corporate/mcudetail/tabkelainanglobal.services.go @@ -0,0 +1,138 @@ +package mcu_corporate_services + +import ( + "cpone/db" + "cpone/models" + dbx "cpone/package/database" + "fmt" + + "go.uber.org/zap" +) + +type TabKelainanGlobalServices struct { + TabKelainanGlobalServicesStore db.AppStore +} + +func NewTabKelainanGlobalServices(store db.AppStore) *TabKelainanGlobalServices { + return &TabKelainanGlobalServices{ + TabKelainanGlobalServicesStore: store, + } +} + +func (tkg *TabKelainanGlobalServices) GetBarChartConf(title string, data models.BarDataset) (models.Barchart, error) { + option := models.Barchart{} + + option.Title = struct { + Text string "json:\"text\"" + }{title} + option.Dataset = data + option.Grid.ContainLabel = true + option.XAxis.Name = "amount" + option.YAxis.Type = "category" + option.VisualMap.Orient = "horizontal" + option.VisualMap.Left = "center" + option.VisualMap.Min = 10 + option.VisualMap.Max = 100 + option.VisualMap.Show = false + option.VisualMap.Dimension = 0 + option.VisualMap.InRange.Color = []string{"#42aaf5", "#00eaf2", "#035bff"} + option.Series = []struct { + Label struct { + Position string "json:\"position\"" + Show bool "json:\"show\"" + Formatter string "json:\"formatter\"" + } "json:\"label\"" + Type string "json:\"type\"" + Encode struct { + X string "json:\"x\"" + Y string "json:\"y\"" + } "json:\"encode\"" + }{ + { + Label: struct { + Position string "json:\"position\"" + Show bool "json:\"show\"" + Formatter string "json:\"formatter\"" + }{ + Position: "right", + Show: true, + Formatter: "{@[3]} %", + }, + Type: "bar", + Encode: struct { + X string "json:\"x\"" + Y string "json:\"y\"" + }{ + X: "amount", + Y: "product", + }, + }, + } + + return option, nil +} + +func (tkg *TabKelainanGlobalServices) GetKelainanGlobalMCU(mcuID string) (models.Barchart, error) { + logger, _ := zap.NewProduction() + var option models.Barchart + var data []models.KelainanGlobalMCUModel + + // title := "Kelainan MCU" + // chartData := models.BarDataset{} + + q := ` + SELECT + IFNULL(Nat_TestName ,Mcu_KelainanGroupName) AS Test, + COUNT(Mgm_HeaderT_OrderHeaderID) AS total + FROM mgm_header + JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID AND Mgm_DetailIsActive = 'Y' + JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID + JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID + LEFT JOIN nat_test ON Nat_TestCode = Mgm_HeaderNat_TestCode + WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ? + AND Mgm_HeaderIsNormal = 'N' + GROUP BY Mcu_KelainanGroupID ORDER BY COUNT(Mgm_HeaderT_OrderHeaderID) DESC + ` + if err := dbx.Handlex.Select(&data, q, mcuID); err != nil { + return option, fmt.Errorf("error get data kelainan global mcu %v", err) + } + defer logger.Sync() + logger.Info("resp data", zap.Any("data", data)) + + // if data != nil { + + // } else { + + // } + + return option, nil +} + +func (tkg *TabKelainanGlobalServices) GetKelainanFisik(mcuID string) (models.Barchart, error) { + logger, _ := zap.NewProduction() + var option models.Barchart + var data []models.KelainanGlobalFisikModel + + q := ` + SELECT + Mcu_KelainanName, + COUNT(Mgm_HeaderT_OrderHeaderID) AS total + FROM mgm_header + JOIN mgm_detail ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID + AND Mgm_DetailIsActive = 'Y' + JOIN mcu_kelainan ON Mgm_DetailMcu_KelainanID = Mcu_KelainanID + JOIN mcu_kelainangroup ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID + WHERE Mgm_HeaderIsActive = 'Y' AND Mgm_HeaderMgm_McuID = ? + AND Mgm_HeaderType = 'F' + AND Mgm_HeaderIsNormal = 'N' + GROUP BY Mcu_KelainanID + ORDER BY total DESC + ` + if err := dbx.Handlex.Select(&data, q, mcuID); err != nil { + return option, fmt.Errorf("error get data kelainan global fisik %v", err) + } + defer logger.Sync() + logger.Info("resp data", zap.Any("data", data)) + + return option, nil +} diff --git a/services/corporate/mcudetail/tabkepesertaan.services.go b/services/corporate/mcudetail/tabkepesertaan.services.go index 0ec84a5..ea6ba51 100644 --- a/services/corporate/mcudetail/tabkepesertaan.services.go +++ b/services/corporate/mcudetail/tabkepesertaan.services.go @@ -41,10 +41,12 @@ func (tkp *TabKepersertaanServices) GetPieChartConf(title string, subtext string Top string `json:"top"` Left string `json:"left"` Orient string `json:"orient"` + Height int `json:"height"` }{ Top: "bottom", Left: "center", Orient: "vertical", + Height: 75, }, Series: []models.Series{ { diff --git a/views/corporate/mcu/mcutab/tabkelainanfisik.templ b/views/corporate/mcu/mcutab/tabkelainanfisik.templ new file mode 100644 index 0000000..5093149 --- /dev/null +++ b/views/corporate/mcu/mcutab/tabkelainanfisik.templ @@ -0,0 +1,44 @@ +package corporate_mcudetail + +templ Tabkelainanfisik( + chartbmixs templ.Component, + chartbmimd templ.Component, + chartbmilg templ.Component, + charthprxs templ.Component, + charthprmd templ.Component, + charthprlg templ.Component, +) { +
+
+

Data Presentase Kelainan Fisik

+
+ + // xs +
+
+ @chartbmixs +
+
+ @charthprxs +
+
+ + // md +
+
+ @chartbmimd +
+
+ @charthprmd +
+
+ + // lg +
+
+ @chartbmilg + @charthprlg +
+
+
+} \ No newline at end of file diff --git a/views/corporate/mcu/mcutab/tabkelainanfisik_templ.go b/views/corporate/mcu/mcutab/tabkelainanfisik_templ.go new file mode 100644 index 0000000..905ae10 --- /dev/null +++ b/views/corporate/mcu/mcutab/tabkelainanfisik_templ.go @@ -0,0 +1,86 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.663 +package corporate_mcudetail + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import "context" +import "io" +import "bytes" + +func Tabkelainanfisik( + chartbmixs templ.Component, + chartbmimd templ.Component, + chartbmilg templ.Component, + charthprxs templ.Component, + charthprmd templ.Component, + charthprlg templ.Component, +) templ.Component { + return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) + if !templ_7745c5c3_IsBuffer { + templ_7745c5c3_Buffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

Data Presentase Kelainan Fisik

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartbmixs.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = charthprxs.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartbmimd.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = charthprmd.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartbmilg.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = charthprlg.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if !templ_7745c5c3_IsBuffer { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) + } + return templ_7745c5c3_Err + }) +} diff --git a/views/corporate/mcu/mcutab/tabkelainanglobal.templ b/views/corporate/mcu/mcutab/tabkelainanglobal.templ new file mode 100644 index 0000000..be40236 --- /dev/null +++ b/views/corporate/mcu/mcutab/tabkelainanglobal.templ @@ -0,0 +1,32 @@ +package corporate_mcudetail + +templ TabKelainanGlobal( + chartmcu templ.Component, + chartfisik templ.Component, +) { +
+
+

Data Kelainan Global

+
+ + // xs +
+ Small +
+ + // md +
+ Medium +
+ + // lg +
+
+ @chartmcu +
+
+ @chartfisik +
+
+
+} \ No newline at end of file diff --git a/views/corporate/mcu/mcutab/tabkelainanglobal_templ.go b/views/corporate/mcu/mcutab/tabkelainanglobal_templ.go new file mode 100644 index 0000000..b82f901 --- /dev/null +++ b/views/corporate/mcu/mcutab/tabkelainanglobal_templ.go @@ -0,0 +1,54 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.663 +package corporate_mcudetail + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import "context" +import "io" +import "bytes" + +func TabKelainanGlobal( + chartmcu templ.Component, + chartfisik templ.Component, +) templ.Component { + return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) + if !templ_7745c5c3_IsBuffer { + templ_7745c5c3_Buffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

Data Kelainan Global

Small\r
Medium\r
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartmcu.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartfisik.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if !templ_7745c5c3_IsBuffer { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) + } + return templ_7745c5c3_Err + }) +} diff --git a/views/corporate/mcu/mcutab/tabkepesertaan.templ b/views/corporate/mcu/mcutab/tabkepesertaan.templ index d09f227..a64c536 100644 --- a/views/corporate/mcu/mcutab/tabkepesertaan.templ +++ b/views/corporate/mcu/mcutab/tabkepesertaan.templ @@ -4,24 +4,70 @@ templ TabKepesertaan( chartalpha templ.Component, chartbeta templ.Component, chartdelta templ.Component, + chartalphaxs templ.Component, + chartbetaxs templ.Component, + chartdeltaxs templ.Component, + chartalphamd templ.Component, + chartbetamd templ.Component, + chartdeltamd templ.Component, ) {

Data Kepesertaan MCU

-
-
- @chartalpha + + // xs +
+
+
+ @chartalphaxs +
+
+
+
+ @chartbetaxs +
+
+
+
+ @chartdeltaxs +
-
-
- @chartbeta + + // md +
+
+
+ @chartalphamd +
+
+
+
+ @chartbetamd +
+
+
+
+ @chartdeltamd +
-
-
- @chartdelta + + // lg +
+
+
+ @chartalpha +
+
+ @chartbeta +
+
+
+
+ @chartdelta +
diff --git a/views/corporate/mcu/mcutab/tabkepesertaan_templ.go b/views/corporate/mcu/mcutab/tabkepesertaan_templ.go index bcce67a..3506cf6 100644 --- a/views/corporate/mcu/mcutab/tabkepesertaan_templ.go +++ b/views/corporate/mcu/mcutab/tabkepesertaan_templ.go @@ -14,6 +14,12 @@ func TabKepesertaan( chartalpha templ.Component, chartbeta templ.Component, chartdelta templ.Component, + chartalphaxs templ.Component, + chartbetaxs templ.Component, + chartdeltaxs templ.Component, + chartalphamd templ.Component, + chartbetamd templ.Component, + chartdeltamd templ.Component, ) templ.Component { return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) @@ -27,7 +33,55 @@ func TabKepesertaan( templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

Data Kepesertaan MCU

") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

Data Kepesertaan MCU

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartalphaxs.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartbetaxs.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartdeltaxs.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartalphamd.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartbetamd.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = chartdeltamd.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -35,7 +89,7 @@ func TabKepesertaan( if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -51,7 +105,7 @@ func TabKepesertaan( if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/views/corporate/mcu/mcutabview.templ b/views/corporate/mcu/mcutabview.templ index bf44f3c..1a2ae74 100644 --- a/views/corporate/mcu/mcutabview.templ +++ b/views/corporate/mcu/mcutabview.templ @@ -9,7 +9,7 @@ templ TabViewMcuDetail( Peserta
-
+
//
- + // +
@@ -49,7 +50,8 @@ templ TabViewMcuDetail(
- + // +
diff --git a/views/corporate/mcu/mcutabview_templ.go b/views/corporate/mcu/mcutabview_templ.go index 0dc136d..a1a0b19 100644 --- a/views/corporate/mcu/mcutabview_templ.go +++ b/views/corporate/mcu/mcutabview_templ.go @@ -38,16 +38,42 @@ func TabViewMcuDetail( if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-target=\"#tabkepesertaan\" hx-trigger=\"load\">Peserta
  • Kelainan global
  • Kelainan Lab
  • kelainan Non Lab
  • kelainan Fisik
  • Peserta
  • Kelainan global
  • Kelainan Lab
  • kelainan Non Lab
  • kelainan Fisik
  • Keuangan
  • Keuangan