diff --git a/handlers/dev/md.nonlabtemplate.handlers.go b/handlers/dev/md.nonlabtemplate.handlers.go new file mode 100644 index 0000000..1b88a8d --- /dev/null +++ b/handlers/dev/md.nonlabtemplate.handlers.go @@ -0,0 +1,252 @@ +package dev_handlers + +import ( + breadcrumadmin "cpone/component/breadcrumbadmin" + "cpone/component/customtextfieldsearch" + navbarmenu "cpone/component/navbar" + "cpone/component/pagination" + sidebaruserprofile "cpone/component/sidebar_user_profile" + "cpone/models" + "cpone/services" + "cpone/utils" + dev_mdnonlabtemplateview "cpone/views/dev/mdnonlabtemplate" + "fmt" + "strconv" + + "github.com/a-h/templ" + "github.com/labstack/echo/v4" + "go.uber.org/zap" +) + +type MDNonLabTemplateServices interface { + GetMDNonLabTemplateBreadcrumb() (models.BreadCrumbV1, error) + GetMDNonLabTemplateData(search string, currentPage int, rowPerPage int) ([]models.MDNonLabTemplate, int, error) +} + +type MDNonLabTemplateHandler struct { + MDNonLabTemplateServices MDNonLabTemplateServices +} + +func NewMDNonLabTemplateHandler(nlt MDNonLabTemplateServices) *MDNonLabTemplateHandler { + return &MDNonLabTemplateHandler{ + MDNonLabTemplateServices: nlt, + } +} + +func (mdnlt *MDNonLabTemplateHandler) HandleShowMDNonLabTemplateScreen(c echo.Context) error { + logger, _ := zap.NewProduction() + + tableID := utils.GenerateRandomID("tableid") + paginationID := utils.GenerateRandomID("paginationid") + searchID := utils.GenerateRandomID("searchid") + dialogAddID := utils.GenerateRandomID("dialogaddid") + dialogAddBodyID := utils.GenerateRandomID("dialogaddbodyid") + dialogEditID := utils.GenerateRandomID("dialogeditid") + dialogEditBodyID := utils.GenerateRandomID("dialogeditbodyid") + dialogDeleteID := utils.GenerateRandomID("dialogdeleteid") + dialogDeleteBodyID := utils.GenerateRandomID("dialogdeletebodyid") + + dataMenu, err := services.GetMenu() + if err != nil { + fmt.Println(dataMenu) + return err + } + + dataUser, err := services.GetUserLogin() + if err != nil { + fmt.Println(dataUser) + return err + } + defer logger.Sync() + logger.Info("LOAD USER DEV", zap.Any("data", dataUser)) + + title := "Master Non-lab Template" + + dataBreadCrumb, err := mdnlt.MDNonLabTemplateServices.GetMDNonLabTemplateBreadcrumb() + if err != nil { + defer logger.Sync() + logger.Info("ERROR BREADCRUMB DEV", zap.Any("error", err)) + return err + } + defer logger.Sync() + logger.Info("LOAD BREADCRUMB DEV", zap.Any("data", dataBreadCrumb)) + + breadcrumbComp := breadcrumadmin.MainBreadcrumbAdminV1(dataBreadCrumb) + navbarmenuComp := navbarmenu.NavbarMenu(dataMenu) + navbaruserComp := navbarmenu.Navbar(dataUser) + sidebarusrComp := sidebaruserprofile.Navbaruserprofile(dataUser) + + dataList, totalPage, err := mdnlt.MDNonLabTemplateServices.GetMDNonLabTemplateData("", 1, 5) + if err != nil { + defer logger.Sync() + logger.Info("ERROR GET DATA DEV", zap.Any("error", err)) + return err + } + + tableComp := dev_mdnonlabtemplateview.TableNonLabTemplate(dataList, + tableID, + "/dev/md/nonlabtemplate/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "/dev/md/nonlabtemplate/opendelete", + "#"+dialogDeleteBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + ) + + tableFilter := customtextfieldsearch.MainCustomTextFieldSearchV3(searchID, + "search", + "Cari Nama Template", + "text", + "/dev/md/nonlabtemplate/filter", + "input changed delay:500ms, search", + "#"+paginationID, + "#loadingcontent", "", + "outerHTML", + "#tableID, #paginationID, #searchID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + dev_mdnonlabtemplateview.BeforeRequestContent(), + dev_mdnonlabtemplateview.AfterRequestContent(), + ) + + tablePagination := pagination.PaginationV3(totalPage, + 1, + "/dev/md/nonlabtemplate/changepage", + paginationID, + "#tableID, #searchID, #"+searchID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "#"+paginationID, + "outerHTML", "", "", + dev_mdnonlabtemplateview.BeforeRequestContent(), + dev_mdnonlabtemplateview.AfterRequestContent(), + ) + + content := dev_mdnonlabtemplateview.MDNonLabTemplateScreen( + tableID, + paginationID, + searchID, + dialogAddID, + dialogAddBodyID, + dialogEditID, + dialogEditBodyID, + dialogDeleteID, + dialogDeleteBodyID, + breadcrumbComp, + tableFilter, + tableComp, + tablePagination, + ) + css := dev_mdnonlabtemplateview.CSSMDNonLabTemplate() + js := dev_mdnonlabtemplateview.JSSMDNonLabTemplate() + + view := dev_mdnonlabtemplateview.ShowMDNonLabTemplate( + title, + content, + css, + js, + navbarmenuComp, + navbaruserComp, + sidebarusrComp, + ) + + return utils.View(c, view) +} + +func (mdnlt *MDNonLabTemplateHandler) HandleFilterMDNonLabTemplate(c echo.Context) error { + search := c.QueryParam("search") + searchID := c.QueryParam("searchID") + tableID := c.QueryParam("tableID") + paginationID := c.QueryParam("paginationID") + dialogEditBodyID := c.QueryParam("dialogEditBodyID") + dialogDeleteBodyID := c.QueryParam("dialogDeleteBodyID") + var retval []templ.Component + logger, _ := zap.NewProduction() + + dataList, totalPage, err := mdnlt.MDNonLabTemplateServices.GetMDNonLabTemplateData(search, 1, 5) + if err != nil { + defer logger.Sync() + logger.Info("ERROR GET DATA", zap.Any("error", err)) + return err + } + + tableComp := dev_mdnonlabtemplateview.TableNonLabTemplate(dataList, + tableID, + "/dev/md/nonlabtemplate/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "/dev/md/nonlabtemplate/opendelete", + "#"+dialogDeleteBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + ) + + tablePagination := pagination.PaginationV3( + totalPage, + 1, + "/dev/md/nonlabtemplate/changepage", + paginationID, + "#tableID, #searchID, #"+searchID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "#"+paginationID, + "outerHTML", "", "", + dev_mdnonlabtemplateview.BeforeRequestContent(), + dev_mdnonlabtemplateview.AfterRequestContent(), + ) + + retval = append(retval, tableComp) + retval = append(retval, tablePagination) + return utils.ViewMulti(c, retval) +} + +func (mdnlt *MDNonLabTemplateHandler) HandleChangePageMDNonLabTemplate(c echo.Context) error { + search := c.QueryParam("search") + pageparam := c.QueryParam("page") + tableID := c.QueryParam("tableID") + searchID := c.QueryParam("searchID") + paginationID := c.QueryParam("paginationID") + dialogEditBodyID := c.QueryParam("dialogEditBodyID") + dialogDeleteBodyID := c.QueryParam("dialogDeleteBodyID") + var retval []templ.Component + logger, _ := zap.NewProduction() + + page, err := strconv.Atoi(pageparam) + if err != nil { + defer logger.Sync() + logger.Info("ERROR CONVERT PAGE PARAM", zap.Any("page", page), zap.Any("error", err)) + return err + } + + dataList, totalPage, err := mdnlt.MDNonLabTemplateServices.GetMDNonLabTemplateData(search, page, 5) + if err != nil { + defer logger.Sync() + logger.Info("ERROR CONVERT PAGE PARAM", zap.Any("error", err)) + return err + } + + tableComp := dev_mdnonlabtemplateview.TableNonLabTemplate(dataList, + tableID, + "/dev/md/nonlabtemplate/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "/dev/md/nonlabtemplate/opendelete", + "#"+dialogDeleteBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + ) + + tablePagination := pagination.PaginationV3( + totalPage, + page, + "/dev/md/nonlabtemplate/changepage", + paginationID, + "#tableID, #searchID, #"+searchID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "#"+paginationID, + "outerHTML", "", "", + dev_mdnonlabtemplateview.BeforeRequestContent(), + dev_mdnonlabtemplateview.AfterRequestContent(), + ) + + retval = append(retval, tableComp) + retval = append(retval, tablePagination) + return utils.ViewMulti(c, retval) +} diff --git a/services/dev/md.nonlabtemplate.services.go b/services/dev/md.nonlabtemplate.services.go new file mode 100644 index 0000000..e04509d --- /dev/null +++ b/services/dev/md.nonlabtemplate.services.go @@ -0,0 +1,84 @@ +package dev_services + +import ( + "cpone/db" + "cpone/models" + dbx "cpone/package/database" + "fmt" + "math" + "strings" +) + +type MDNonLabTemplateServices struct { + MDNonLabTemplateStore db.AppStore +} + +func NewMDNonLabTemplateServices(uStore db.AppStore) *MDNonLabTemplateServices { + return &MDNonLabTemplateServices{ + MDNonLabTemplateStore: uStore, + } +} + +func (mdnlt *MDNonLabTemplateServices) GetMDNonLabTemplateBreadcrumb() (models.BreadCrumbV1, error) { + var ret models.BreadCrumbV1 + + breadcrumb := models.BreadCrumbV1{ + Title: "Master Non-lab Template", + Item: []models.ItemBreadCrumbV1{ + { + Item: "Dashboard", + Url: "/dev/dashboard", + }, + { + Item: "Master", + Url: "/dev/master", + }, + { + Item: "Non-lab Template", + Url: "", + }, + }, + } + + ret = breadcrumb + return ret, nil +} + +func (mdnlt *MDNonLabTemplateServices) GetMDNonLabTemplateData(search string, currentPage int, rowPerPage int) ([]models.MDNonLabTemplate, int, error) { + var ret []models.MDNonLabTemplate + var totalData int + + offset := (currentPage - 1) * rowPerPage + prm := "%" + strings.TrimSpace(search) + "%" + query := ` + SELECT COUNT(*) + FROM nonlab_template + WHERE NonlabTemplateIsActive = 'Y' + AND (NonlabTemplateName LIKE ?) + ` + if err := dbx.Handlex.Get(&totalData, query, prm); err != nil { + return nil, 0, fmt.Errorf("error querying databases: %v", err) + } + + query = ` + SELECT + NonlabTemplateID, + NonlabTemplateName, + NonlabTemplateFlagFisik, + NonlabTemplateIsActive, + NonlabTemplateCreated, + NonlabTemplateLastUpdated + FROM nonlab_template + WHERE NonlabTemplateIsActive = 'Y' + AND (NonlabTemplateName LIKE ?) + ORDER BY NonlabTemplateID ASC + LIMIT ? OFFSET ? + ` + if err := dbx.Handlex.Select(&ret, query, prm, rowPerPage, offset); err != nil { + return nil, 0, fmt.Errorf("error querying database: %v", err) + } + + totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage))) + + return ret, totalPage, nil +} diff --git a/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ b/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ index 44a7b4f..a2d5a0c 100644 --- a/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ +++ b/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ @@ -2,7 +2,6 @@ package dev_mdnonlabtemplateview import "cpone/component/customtextfield" import "cpone/models" -import "cpone/component/table" import "cpone/layout" templ MDNonLabTemplateScreen( @@ -82,11 +81,11 @@ templ MDNonLabTemplateScreen( @filterComponent
- @tablecomponent + @tableComponent @paginationComponent
- Loading + Loading...
@@ -128,7 +127,43 @@ templ CSSMDNonLabTemplate() { } templ JSSMDNonLabTemplate() { + +} + +script BeforeRequestContent() { + const loadingParent = document.getElementById("loading-parent"); + const loadingChild = document.getElementById("loading-child"); + const loadingSpinner = document.getElementById("loading-spinner"); + + loadingParent.classList.add("overlay"); + loadingParent.classList.add("overlay-block"); + loadingChild.classList.add("overlay-layer"); + loadingSpinner.classList.remove("d-none"); +} + +script AfterRequestContent() { + const loadingParent = document.getElementById("loading-parent"); + const loadingChild = document.getElementById("loading-child"); + const loadingSpinner = document.getElementById("loading-spinner"); + + loadingParent.classList.remove("overlay"); + loadingParent.classList.remove("overlay-block"); + loadingChild.classList.remove("overlay-layer"); + loadingSpinner.classList.add("d-none"); } templ ShowMDNonLabTemplate( diff --git a/views/dev/mdnonlabtemplate/mdnonlabtemplate_templ.go b/views/dev/mdnonlabtemplate/mdnonlabtemplate_templ.go index fbe4a4b..b83ef51 100644 --- a/views/dev/mdnonlabtemplate/mdnonlabtemplate_templ.go +++ b/views/dev/mdnonlabtemplate/mdnonlabtemplate_templ.go @@ -12,7 +12,6 @@ import "bytes" import "cpone/component/customtextfield" import "cpone/models" -import "cpone/component/table" import "cpone/layout" func MDNonLabTemplateScreen( @@ -124,7 +123,7 @@ func MDNonLabTemplateScreen( var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs("#" + dialogAddID) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplate.templ`, Line: 70, Col: 55} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplate.templ`, Line: 69, Col: 55} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -137,7 +136,7 @@ func MDNonLabTemplateScreen( var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs("#" + dialogAddID) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplate.templ`, Line: 79, Col: 51} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplate.templ`, Line: 78, Col: 51} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -155,7 +154,7 @@ func MDNonLabTemplateScreen( if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = tablecomponent.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = tableComponent.Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -163,7 +162,7 @@ func MDNonLabTemplateScreen( if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
Loading
") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
Loading...
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -211,6 +210,10 @@ func JSSMDNonLabTemplate() templ.Component { templ_7745c5c3_Var5 = templ.NopComponent } ctx = templ.ClearChildren(ctx) + _, 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) } @@ -218,6 +221,40 @@ func JSSMDNonLabTemplate() templ.Component { }) } +func BeforeRequestContent() templ.ComponentScript { + return templ.ComponentScript{ + Name: `__templ_BeforeRequestContent_5717`, + Function: `function __templ_BeforeRequestContent_5717(){const loadingParent = document.getElementById("loading-parent"); + const loadingChild = document.getElementById("loading-child"); + const loadingSpinner = document.getElementById("loading-spinner"); + + loadingParent.classList.add("overlay"); + loadingParent.classList.add("overlay-block"); + loadingChild.classList.add("overlay-layer"); + loadingSpinner.classList.remove("d-none"); +}`, + Call: templ.SafeScript(`__templ_BeforeRequestContent_5717`), + CallInline: templ.SafeScriptInline(`__templ_BeforeRequestContent_5717`), + } +} + +func AfterRequestContent() templ.ComponentScript { + return templ.ComponentScript{ + Name: `__templ_AfterRequestContent_077f`, + Function: `function __templ_AfterRequestContent_077f(){const loadingParent = document.getElementById("loading-parent"); + const loadingChild = document.getElementById("loading-child"); + const loadingSpinner = document.getElementById("loading-spinner"); + + loadingParent.classList.remove("overlay"); + loadingParent.classList.remove("overlay-block"); + loadingChild.classList.remove("overlay-layer"); + loadingSpinner.classList.add("d-none"); +}`, + Call: templ.SafeScript(`__templ_AfterRequestContent_077f`), + CallInline: templ.SafeScriptInline(`__templ_AfterRequestContent_077f`), + } +} + func ShowMDNonLabTemplate( title string, cmp templ.Component, diff --git a/views/dev/mdnonlabtemplate/mdnonlabtemplatetable.templ b/views/dev/mdnonlabtemplate/mdnonlabtemplatetable.templ index 63c71e0..19671e0 100644 --- a/views/dev/mdnonlabtemplate/mdnonlabtemplatetable.templ +++ b/views/dev/mdnonlabtemplate/mdnonlabtemplatetable.templ @@ -17,8 +17,8 @@ templ TableNonLabTemplate( hxIncludeDelete string, ) {
- @tablecomponent.TableV3([]string{"ID", "NAMA TEMPLATE", "AKSI"}, - []string{"20%", "60%", "20%"}, + @tablecomponent.TableV3([]string{"NAMA TEMPLATE", "FLAG FISIK", "AKSI"}, + []string{"50%", "30%", "20%"}, ItemRow(data, hxGetEdit, hxTargetEdit, @@ -50,8 +50,8 @@ templ ItemRow( } for _, i := range data { - { i.NonLabTemplateID } { i.NonLabTemplateName } + { i.NonLabTemplateFlagFisik } @TableAction(i.NonLabTemplateID, hxGetEdit, diff --git a/views/dev/mdnonlabtemplate/mdnonlabtemplatetable_templ.go b/views/dev/mdnonlabtemplate/mdnonlabtemplatetable_templ.go index 367a029..389770c 100644 --- a/views/dev/mdnonlabtemplate/mdnonlabtemplatetable_templ.go +++ b/views/dev/mdnonlabtemplate/mdnonlabtemplatetable_templ.go @@ -55,8 +55,8 @@ func TableNonLabTemplate( if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = tablecomponent.TableV3([]string{"ID", "NAMA TEMPLATE", "AKSI"}, - []string{"20%", "60%", "20%"}, + templ_7745c5c3_Err = tablecomponent.TableV3([]string{"NAMA TEMPLATE", "FLAG FISIK", "AKSI"}, + []string{"50%", "30%", "20%"}, ItemRow(data, hxGetEdit, hxTargetEdit, @@ -116,9 +116,9 @@ func ItemRow( return templ_7745c5c3_Err } var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(i.NonLabTemplateID) + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(i.NonLabTemplateName) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplatetable.templ`, Line: 53, Col: 36} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplatetable.templ`, Line: 53, Col: 38} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { @@ -129,9 +129,9 @@ func ItemRow( return templ_7745c5c3_Err } var templ_7745c5c3_Var5 string - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(i.NonLabTemplateName) + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(i.NonLabTemplateFlagFisik) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplatetable.templ`, Line: 54, Col: 38} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplatetable.templ`, Line: 54, Col: 43} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil {