From 246dd34542a03daa493d03844c79d0f42a8b927d Mon Sep 17 00:00:00 2001 From: adibwp Date: Wed, 12 Jun 2024 14:47:07 +0700 Subject: [PATCH] add store to localStorage --- handlers/public/dashboardpic.handlers.go | 180 +++++++++++++++++++++++ handlers/public/login.handlers.go | 38 ++++- handlers/routes.go | 7 + services/public/dashboardpic.services.go | 128 ++++++++++++++++ utils/view.utils.go | 6 - 5 files changed, 348 insertions(+), 11 deletions(-) create mode 100644 handlers/public/dashboardpic.handlers.go create mode 100644 services/public/dashboardpic.services.go diff --git a/handlers/public/dashboardpic.handlers.go b/handlers/public/dashboardpic.handlers.go new file mode 100644 index 0000000..9505bdf --- /dev/null +++ b/handlers/public/dashboardpic.handlers.go @@ -0,0 +1,180 @@ +package public_handlers + +import ( + breadcrumadmin "cpone/component/breadcrumbadmin" + navbarmenu "cpone/component/navbar" + "cpone/component/pagination" + sidebaruserprofile "cpone/component/sidebar_user_profile" + "cpone/models" + "cpone/services" + "cpone/utils" + dev_employeeanalytic "cpone/views/dev/employeeanalytic" + "strconv" + + "github.com/a-h/templ" + "github.com/labstack/echo/v4" + "go.uber.org/zap" +) + +type DashboardPicServices interface { + GetEmployeeAnalyticBreadcrumb(title string) (models.BreadCrumbV1, error) + DummyDataTest() ([]models.EmployeeAnalytic, error) + ListingEmployeeAnalytic(search string, startdate string, enddate string, currentpage int, rowperpage int) ([]models.EmployeeAnalytic, int, error) +} + +type DashboardPicHandler struct { + DashboardPicServices DashboardPicServices +} + +func NewDashboardPicHandler(ea DashboardPicServices) *DashboardPicHandler { + return &DashboardPicHandler{ + DashboardPicServices: ea, + } +} + +func (ea *DashboardPicHandler) HandleShowEmployeeAnalyticScreen(c echo.Context) error { + logger, _ := zap.NewProduction() + title := "PT. Sadhana Abiyasa Sampoerna" + + listID := utils.GenerateRandomID("listid") + paginationID := utils.GenerateRandomID("paginationid") + + user, err := services.GetUserLogin() + if err != nil { + defer logger.Sync() + logger.Info("Error get user dev", zap.Any("error", err)) + return err + } + + dataBreadcrumb, err := ea.DashboardPicServices.GetEmployeeAnalyticBreadcrumb(title) + if err != nil { + defer logger.Sync() + logger.Info("Error breadcrumb dev", zap.Any("error", err)) + return err + } + defer logger.Sync() + + navbaruser := navbarmenu.NavbarWithLogo(user) + sidbaruser := sidebaruserprofile.Navbaruserprofile(user) + breadcrumb := breadcrumadmin.MainBreadcrumbAdminV1(dataBreadcrumb) + + listingData, totalPage, err := ea.DashboardPicServices.ListingEmployeeAnalytic("", "", "", 1, 5) + if err != nil { + defer logger.Sync() + logger.Info("Error get listing data", zap.Any("error", err), zap.Any("total", totalPage)) + return err + } + listingcomponent := dev_employeeanalytic.ListingData(listingData, listID) + + paginationcomponent := pagination.PaginationV3( + totalPage, + 1, + "/dev/dashboard_pic/changepage", + paginationID, + "#listID, #paginationID, #searchID, #startdateID, #enddateID", + "#"+paginationID, + "outerHTML", "", "", + dev_employeeanalytic.BeforeRequestContent(), + dev_employeeanalytic.AfterRequestContent(), + ) + + filtercomponent := dev_employeeanalytic.FilterListing( + "/dev/dashboard_pic/filter", + "input changed delay:500ms", + "#searchID, #startdateID, #enddateID, #listID, #paginationID", + "outerHTML", + "#"+paginationID, + dev_employeeanalytic.BeforeRequestContent(), + dev_employeeanalytic.AfterRequestContent(), + ) + + content := dev_employeeanalytic.EmployeeAnalyticScreen( + listID, + paginationID, + breadcrumb, + filtercomponent, + listingcomponent, + paginationcomponent, + ) + css := dev_employeeanalytic.CSSEmployeeAnalytic() + js := dev_employeeanalytic.JSEmployeeAnalytic() + + view := dev_employeeanalytic.ShowEmployeeAnalytic(title, content, css, js, navbaruser, sidbaruser) + return utils.View(c, view) +} + +func (ea *DashboardPicHandler) HandlePagination(c echo.Context) error { + + pageparam := c.QueryParam("page") + listID := c.QueryParam("listID") + paginationID := c.QueryParam("paginationID") + search := c.QueryParam("search") + startdate := c.QueryParam("startdate") + enddate := c.QueryParam("enddate") + + var retVal []templ.Component + logger, _ := zap.NewProduction() + page, err := strconv.Atoi(pageparam) + if err != nil { + defer logger.Sync() + logger.Info("Error convert page param") + return err + } + + listdata, totalPage, err := ea.DashboardPicServices.ListingEmployeeAnalytic(search, startdate, enddate, page, 5) + if err != nil { + defer logger.Sync() + logger.Info("Error convert page param") + return err + } + listcomponent := dev_employeeanalytic.ListingData(listdata, listID) + + paginationcomponent := pagination.PaginationV3( + totalPage, + page, + "/dev/dashboard_pic/changepage", + paginationID, + "#listID, #paginationID, #searchID, #startdateID, #enddateID", + "#"+paginationID, + "outerHTML", "", "", + dev_employeeanalytic.BeforeRequestContent(), + dev_employeeanalytic.AfterRequestContent(), + ) + + retVal = append(retVal, listcomponent) + retVal = append(retVal, paginationcomponent) + return utils.ViewMulti(c, retVal) +} + +func (ea *DashboardPicHandler) HandleFilter(c echo.Context) error { + logger, _ := zap.NewProduction() + + search := c.QueryParam("search") + startdate := c.QueryParam("startdate") + enddate := c.QueryParam("enddate") + listID := c.QueryParam("listID") + paginationID := c.QueryParam("paginationID") + + dataList, totalPage, err := ea.DashboardPicServices.ListingEmployeeAnalytic(search, startdate, enddate, 1, 5) + if err != nil { + defer logger.Sync() + logger.Info("Error Get Listing Data", zap.Any("error", err)) + return err + } + + listcomponent := dev_employeeanalytic.ListingData(dataList, listID) + paginationcomponent := pagination.PaginationV3( + totalPage, 1, + "/dev/dashboard_pic/changepage", + paginationID, + "#listID, #paginationID, #searchID, #startdateID, #enddateID", + "#"+paginationID, "outerHTML", "", "", + dev_employeeanalytic.BeforeRequestContent(), + dev_employeeanalytic.AfterRequestContent(), + ) + + var retval []templ.Component + retval = append(retval, listcomponent) + retval = append(retval, paginationcomponent) + return utils.ViewMulti(c, retval) +} diff --git a/handlers/public/login.handlers.go b/handlers/public/login.handlers.go index 27f9e40..388909d 100644 --- a/handlers/public/login.handlers.go +++ b/handlers/public/login.handlers.go @@ -4,6 +4,8 @@ import ( "cpone/models" "cpone/utils" public_login "cpone/views/public/login" + "encoding/json" + "net/http" "github.com/labstack/echo/v4" "go.uber.org/zap" @@ -48,14 +50,40 @@ func (lh *LoginHandler) HandlerSignIn(c echo.Context) error { return utils.View(c, si) } defer logger.Sync() - logger.Info("resp", zap.Any("token", resp.Data.Token)) - - // url := "/one-ui" - url := "/home" + url := "/one-ui" + // url := "/home" if resp.Data.Type == "pic" { url = "/dashboard_pic" } - return utils.Redirect(c, url) + user, err := json.Marshal(resp.Data.User) + if err != nil { + defer logger.Sync() + logger.Info("Error", zap.Error(err)) + + si := public_login.ShowLogin("Login ", public_login.MainLogin(""), public_login.CssLogin(), public_login.JsLogin()) + return utils.View(c, si) + } + + userString := string(user) + + storeLocal := ` + + ` + + c.Response().Header().Set("HX-Trigger", "script") + // c.Response().Header().Set("HX-Redirect", url) + + return c.String(http.StatusOK, storeLocal) } diff --git a/handlers/routes.go b/handlers/routes.go index 3789201..55ab2a7 100644 --- a/handlers/routes.go +++ b/handlers/routes.go @@ -75,6 +75,13 @@ func SetupRoutesPublic(app *echo.Echo, appStore db.AppStore) { public.GET("login", loginHadlr.HandlerShowLogin) public.POST("login/signin", loginHadlr.HandlerSignIn) + // dashboard_pic + dashbrdPicServ := public_services.NewDashboardPicServices(appStore) + dashbrdPicHandl := public_handlers.NewDashboardPicHandler(dashbrdPicServ) + public.GET("dashboard_pic", dashbrdPicHandl.HandleShowEmployeeAnalyticScreen) + public.GET("dashboard_pic/changepage", dashbrdPicHandl.HandlePagination) + public.GET("dashboard_pic/filter", dashbrdPicHandl.HandleFilter) + // kartu kontrol publicKartuKontrolServices := public_services.NewServicesKartuKontrol(appStore) publicKartuKontrolhandlers := public_handlers.NewKartuKontrolHandler(publicKartuKontrolServices) diff --git a/services/public/dashboardpic.services.go b/services/public/dashboardpic.services.go new file mode 100644 index 0000000..8033ac5 --- /dev/null +++ b/services/public/dashboardpic.services.go @@ -0,0 +1,128 @@ +package public_services + +import ( + "cpone/db" + "cpone/models" + dbx "cpone/package/database" + "fmt" + "math" + + "go.uber.org/zap" +) + +type DashboardPicServices struct { + DashboardPicStore db.AppStore +} + +func NewDashboardPicServices(uStore db.AppStore) *DashboardPicServices { + return &DashboardPicServices{ + DashboardPicStore: uStore, + } +} + +func (ea *DashboardPicServices) GetEmployeeAnalyticBreadcrumb(title string) (models.BreadCrumbV1, error) { + breadcrumb := models.BreadCrumbV1{ + Title: title, + Item: []models.ItemBreadCrumbV1{ + { + Item: "Dashboard", + Url: "/dev/dashboard", + }, + { + Item: "Employee Health Medical Analytic", + Url: "", + }, + }, + } + + return breadcrumb, nil +} + +func (ea *DashboardPicServices) DummyDataTest() ([]models.EmployeeAnalytic, error) { + employees := []models.EmployeeAnalytic{ + { + Mgm_McuID: 1, + Mgm_McuLabel: "Employee 1", + Mgm_McuFlagRelasiBayarSendiri: "Yes", + Mgm_McuBisaTambahPemeriksaan: "No", + Mgm_McuCorporateID: 101, + Mgm_McuNumber: "EMP001", + Mgm_McuNumberNational: "NAT001", + Mgm_McuNote: "Lorem ipsum dolor sit amet.", + Mgm_McuStartDate: "2024-01-01", + Mgm_McuEndDate: "2024-12-31", + Mgm_McuIsActive: "Y", + }, + { + Mgm_McuID: 2, + Mgm_McuLabel: "Employee 2", + Mgm_McuFlagRelasiBayarSendiri: "No", + Mgm_McuBisaTambahPemeriksaan: "Yes", + Mgm_McuCorporateID: 102, + Mgm_McuNumber: "EMP002", + Mgm_McuNumberNational: "NAT002", + Mgm_McuNote: "Lorem ipsum dolor sit amet consectetur.", + Mgm_McuStartDate: "2024-02-15", + Mgm_McuEndDate: "2024-11-30", + Mgm_McuIsActive: "Y", + }, + } + + return employees, nil +} + +func (ea *DashboardPicServices) ListingEmployeeAnalytic(search string, startdate string, enddate string, currentpage int, rowperpage int) ([]models.EmployeeAnalytic, int, error) { + logger, _ := zap.NewProduction() + var ret []models.EmployeeAnalytic + var totalData int + + if len(startdate) == 0 { + startdate = "1900-01-01" + } + if len(enddate) == 0 { + enddate = "9999-12-12" + } + + prmLabel := "%" + search + "%" + offset := (currentpage - 1) * rowperpage + q := ` + SELECT COUNT(*) + FROM mgm_mcu + WHERE Mgm_McuIsActive = 'Y' + AND Mgm_McuLabel LIKE ? + AND Mgm_McuStartDate >= ? + AND Mgm_McuEndDate <= ? + ` + if err := dbx.Handlex.Get(&totalData, q, prmLabel, startdate, enddate); err != nil { + return nil, 0, fmt.Errorf("error query get total data: %v", err) + } + + q = ` + SELECT + Mgm_McuID, + Mgm_McuLabel, + Mgm_McuFlagRelasiBayarSendiri, + Mgm_McuBisaTambahPemeriksaan, + Mgm_McuCorporateID, + Mgm_McuNumber, + Mgm_McuNumberNational, + Mgm_McuNote, + DATE_FORMAT(Mgm_McuStartDate, '%d-%m-%Y') AS Mgm_McuStartDate, + DATE_FORMAT(Mgm_McuEndDate, '%d-%m-%Y') AS Mgm_McuEndDate, + Mgm_McuIsActive + FROM mgm_mcu + WHERE Mgm_McuIsActive = 'Y' + AND Mgm_McuLabel LIKE ? + AND Mgm_McuStartDate >= ? + AND Mgm_McuEndDate <= ? + ORDER BY Mgm_McuID ASC + LIMIT ? OFFSET ? + ` + if err := dbx.Handlex.Select(&ret, q, prmLabel, startdate, enddate, rowperpage, offset); err != nil { + return nil, 0, fmt.Errorf("error query get data: %v", err) + } + logger.Info("Resp", zap.Any("Respsone", ret)) + + totalPage := int(math.Ceil(float64(totalData) / float64(rowperpage))) + return ret, totalPage, nil +} diff --git a/utils/view.utils.go b/utils/view.utils.go index 4b65a81..d9213cf 100644 --- a/utils/view.utils.go +++ b/utils/view.utils.go @@ -32,9 +32,3 @@ func View(c echo.Context, cmp templ.Component) error { return cmp.Render(c.Request().Context(), c.Response().Writer) } - -func Redirect(c echo.Context, url string) error { - c.Response().Header().Set("HX-Redirect", url) - - return c.String(http.StatusOK, url) -}