diff --git a/handlers/dev/md.samplestation.handlers.go b/handlers/dev/md.samplestation.handlers.go
new file mode 100644
index 0000000..69fdb9c
--- /dev/null
+++ b/handlers/dev/md.samplestation.handlers.go
@@ -0,0 +1,68 @@
+package dev_handlers
+
+import (
+ breadcrumbadmin "cpone/component/breadcrumbadmin"
+ navbarmenu "cpone/component/navbar"
+ sidebaruserprofile "cpone/component/sidebar_user_profile"
+ "cpone/models"
+ "cpone/services"
+ "cpone/utils"
+ dev_mdsamplestationview "cpone/views/dev/mdsamplestation"
+
+ "github.com/labstack/echo/v4"
+ "go.uber.org/zap"
+)
+
+type MDSampleStationServices interface {
+ GetMDSampleStationBreadcrumb() (models.BreadCrumbV1, error)
+}
+
+func NewMDSampleStationHandler(ss MDSampleStationServices) *MDSampleStationHandler {
+ return &MDSampleStationHandler{
+ MDSampleStationServices: ss,
+ }
+}
+
+type MDSampleStationHandler struct {
+ MDSampleStationServices MDSampleStationServices
+}
+
+func (mdss *MDSampleStationHandler) HandleShowMDSampleStationScreen(c echo.Context) error {
+ logger, _ := zap.NewProduction()
+ title := "Master Sample Station"
+
+ dialogAddID := utils.GenerateRandomID("dialogaddID")
+
+ dataMenu, err := services.GetMenu()
+ if err != nil {
+ return err
+ }
+
+ dataUser, err := services.GetUserLogin()
+ if err != nil {
+ return err
+ }
+ defer logger.Sync()
+ logger.Info("ERROR LOAD DEV", zap.Any("data", dataUser))
+
+ dataBreadcrumb, err := mdss.MDSampleStationServices.GetMDSampleStationBreadcrumb()
+ if err != nil {
+ defer logger.Sync()
+ logger.Info("ERROR BREADCRUMB DEV", zap.Any("error", err))
+ return err
+ }
+ navbarmenuComp := navbarmenu.NavbarMenu(dataMenu)
+ navbaruserComp := navbarmenu.Navbar(dataUser)
+ breadcrumbComp := breadcrumbadmin.MainBreadcrumbAdminV1(dataBreadcrumb)
+ sidebaruserprofilceComp := sidebaruserprofile.Navbaruserprofile(dataUser)
+
+ content := dev_mdsamplestationview.ContentMDSampleStation(
+ dialogAddID,
+ breadcrumbComp,
+ )
+ css := dev_mdsamplestationview.CSSMDSampleStation()
+ js := dev_mdsamplestationview.JSMDSampleStation()
+
+ view := dev_mdsamplestationview.ShowMDSampleStation(title, content, css, js, navbarmenuComp, navbaruserComp, sidebaruserprofilceComp)
+ return utils.View(c, view)
+}
diff --git a/handlers/routes.go b/handlers/routes.go
index ed82786..cba820b 100644
--- a/handlers/routes.go
+++ b/handlers/routes.go
@@ -262,6 +262,10 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
dev.POST("/groupresult/add", devGRhandlers.AddGroupResult)
dev.POST("/groupresult/edit", devGRhandlers.EditGroupResult)
dev.POST("/groupresult/delete", devGRhandlers.DeleteGroupResult)
+ // md sample station
+ devMDSampleStationServices := dev_services.NewMDSampleStationServices(appStore)
+ devMDSampleStationHandlers := dev_handlers.NewMDSampleStationHandler(devMDSampleStationServices)
+ dev.GET("/samplestation", devMDSampleStationHandlers.HandleShowMDSampleStationScreen)
// masterdata nat unit
devMdNatUnitServices := dev_services.NewMdNatUnitServices(appStore)
devMdNatUnitHandlers := dev_handlers.NeWMdNatUnitHandler(devMdNatUnitServices)
diff --git a/models/samplestation.models.go b/models/samplestation.models.go
new file mode 100644
index 0000000..9b4238f
--- /dev/null
+++ b/models/samplestation.models.go
@@ -0,0 +1,10 @@
+package models
+
+type MDSampleStation struct {
+ T_SampleStationID int `db:"T_SampleStationID"`
+ T_SampleStationCode string `db:"T_SampleStationCode"`
+ T_SampleStationName string `db:"T_SampleStationName"`
+ T_SampleStationNat_GroupID string `db:"T_SampleStationNat_GroupID"`
+ T_SampleStationIsNonLab string `db:"T_SampleStationIsNonLab"`
+ T_SampleStationIsActive string `db:"T_SampleStationIsActive"`
+}
diff --git a/services/dev/md.samplestation.services.go b/services/dev/md.samplestation.services.go
new file mode 100644
index 0000000..6dcd8c5
--- /dev/null
+++ b/services/dev/md.samplestation.services.go
@@ -0,0 +1,41 @@
+package dev_services
+
+import (
+ "cpone/db"
+ "cpone/models"
+)
+
+func NewMDSampleStationServices(uStore db.AppStore) *MDSampleStationServices {
+ return &MDSampleStationServices{
+ MDSampleStationStore: uStore,
+ }
+}
+
+type MDSampleStationServices struct {
+ MDSampleStationStore db.AppStore
+}
+
+func (ss *MDSampleStationServices) GetMDSampleStationBreadcrumb() (models.BreadCrumbV1, error) {
+ var ret models.BreadCrumbV1
+
+ Breadcrumb := models.BreadCrumbV1{
+ Title: "Master Sample Station",
+ Item: []models.ItemBreadCrumbV1{
+ {
+ Item: "Dashboard",
+ Url: "/dev/dashboard",
+ },
+ {
+ Item: "Master",
+ Url: "/dev/master",
+ },
+ {
+ Item: "Sample Stasion",
+ Url: "",
+ },
+ },
+ }
+
+ ret = Breadcrumb
+ return ret, nil
+}
diff --git a/views/dev/mdsamplestation/mdsamplestation.templ b/views/dev/mdsamplestation/mdsamplestation.templ
new file mode 100644
index 0000000..d1f4e35
--- /dev/null
+++ b/views/dev/mdsamplestation/mdsamplestation.templ
@@ -0,0 +1,94 @@
+package dev_mdsamplestationview
+
+import (
+ "cpone/layout"
+ "cpone/component/customtextfield"
+ "cpone/models"
+)
+
+templ ContentMDSampleStation(
+ tableID string,
+ dialogAddID string,
+ breadcrumb templ.Component,
+ tablecontent templ.Component,
+) {
+
+ @customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "tableID",
+ Name: "tableID",
+ Type: "hidden",
+ Value: tableID})
+ @customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "dialogAddID",
+ Name: "dialogAddID",
+ Type: "hidden",
+ Value: dialogAddID})
+
+
+ @breadcrumb
+
+
+
+
+
+
+ @tablecontent
+
+}
+
+templ CSSMDSampleStation() {
+
+
+
+
+}
+
+templ JSMDSampleStation() {
+
+}
+
+templ ShowMDSampleStation(
+ title string,
+ cmp templ.Component,
+ css templ.Component,
+ js templ.Component,
+ navbarmenu templ.Component,
+ navbaruser templ.Component,
+ userprofile templ.Component) {
+ @layout.CorporateLayout(title, css, js, navbarmenu, navbaruser, userprofile) {
+ @cmp
+ }
+}
\ No newline at end of file
diff --git a/views/dev/mdsamplestation/mdsamplestation_templ.go b/views/dev/mdsamplestation/mdsamplestation_templ.go
new file mode 100644
index 0000000..e407779
--- /dev/null
+++ b/views/dev/mdsamplestation/mdsamplestation_templ.go
@@ -0,0 +1,196 @@
+// Code generated by templ - DO NOT EDIT.
+
+// templ: version: v0.2.663
+package dev_mdsamplestationview
+
+//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"
+
+import (
+ "cpone/component/customtextfield"
+ "cpone/layout"
+ "cpone/models"
+)
+
+func ContentMDSampleStation(
+ tableID string,
+ dialogAddID string,
+ breadcrumb templ.Component,
+ tablecontent 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("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "tableID",
+ Name: "tableID",
+ Type: "hidden",
+ Value: tableID}).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "dialogAddID",
+ Name: "dialogAddID",
+ Type: "hidden",
+ Value: dialogAddID}).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 = breadcrumb.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 = tablecontent.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
+ })
+}
+
+func CSSMDSampleStation() 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_Var4 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var4 == nil {
+ templ_7745c5c3_Var4 = 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)
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func JSMDSampleStation() 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_Var5 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var5 == nil {
+ templ_7745c5c3_Var5 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ if !templ_7745c5c3_IsBuffer {
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func ShowMDSampleStation(
+ title string,
+ cmp templ.Component,
+ css templ.Component,
+ js templ.Component,
+ navbarmenu templ.Component,
+ navbaruser templ.Component,
+ userprofile 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_Var6 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var6 == nil {
+ templ_7745c5c3_Var6 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var7 := 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)
+ }
+ templ_7745c5c3_Err = cmp.Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !templ_7745c5c3_IsBuffer {
+ _, templ_7745c5c3_Err = io.Copy(templ_7745c5c3_W, templ_7745c5c3_Buffer)
+ }
+ return templ_7745c5c3_Err
+ })
+ templ_7745c5c3_Err = layout.CorporateLayout(title, css, js, navbarmenu, navbaruser, userprofile).Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), 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
+ })
+}
diff --git a/views/dev/mdsamplestation/mdsamplestationtable.templ b/views/dev/mdsamplestation/mdsamplestationtable.templ
new file mode 100644
index 0000000..192623b
--- /dev/null
+++ b/views/dev/mdsamplestation/mdsamplestationtable.templ
@@ -0,0 +1,27 @@
+package dev_mdsamplestationview
+
+import "cpone/models"
+import "cpone/component/table"
+
+templ TableSampleStation(data []models.MDSampleStation, tableID string) {
+
+ @tablecomponent.TableV3([]string{"KODE", "NAMA STATION", "GROUP", "AKSI"},
+ []string{"20%", "30%", "30%", "20%"},
+ ItemRow(data))
+
+}
+
+templ ItemRow(data []models.MDSampleStation) {
+ if len(data) == 0 {
+
+ | Data Tidak Ditemukan |
+
+ }
+ for _, v := range data {
+
+ | { v.T_SampleStationCode } |
+ { v.T_SampleStationName } |
+ { v.T_SampleStationNat_GroupID } |
+
+ }
+}
\ No newline at end of file
diff --git a/views/dev/mdsamplestation/mdsamplestationtable_templ.go b/views/dev/mdsamplestation/mdsamplestationtable_templ.go
new file mode 100644
index 0000000..f819c96
--- /dev/null
+++ b/views/dev/mdsamplestation/mdsamplestationtable_templ.go
@@ -0,0 +1,93 @@
+// Code generated by templ - DO NOT EDIT.
+
+// templ: version: v0.2.663
+package dev_mdsamplestationview
+
+//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"
+
+import "cpone/models"
+import "cpone/component/table"
+
+func TableSampleStation(data []models.MDSampleStation, tableID 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_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("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = tablecomponent.TableV3([]string{"KODE", "NAMA STATION", "GROUP", "AKSI"},
+ []string{"20%", "30%", "30%", "20%"},
+ ItemRow(data)).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
+ })
+}
+
+func ItemRow(data []models.MDSampleStation) 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)
+ if len(data) == 0 {
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("| Data Tidak Ditemukan |
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ for _, v := range data {
+ _, 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/dev/mdusergroup/mdusergroup_templ.go b/views/dev/mdusergroup/mdusergroup_templ.go
index 4cb6e37..c28b6b4 100644
--- a/views/dev/mdusergroup/mdusergroup_templ.go
+++ b/views/dev/mdusergroup/mdusergroup_templ.go
@@ -127,7 +127,11 @@ func MdUserGroupScreen(
var templ_7745c5c3_Var2 string
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs("#" + dialogAddID)
if templ_7745c5c3_Err != nil {
+<<<<<<< HEAD
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdusergroup\mdusergroup.templ`, Line: 74, Col: 37}
+=======
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdusergroup\mdusergroup.templ`, Line: 52, Col: 37}
+>>>>>>> 3afd212 (add sample station handler, services, model)
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
if templ_7745c5c3_Err != nil {
@@ -140,7 +144,11 @@ func MdUserGroupScreen(
var templ_7745c5c3_Var3 string
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs("#" + dialogAddID)
if templ_7745c5c3_Err != nil {
+<<<<<<< HEAD
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdusergroup\mdusergroup.templ`, Line: 83, Col: 36}
+=======
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdusergroup\mdusergroup.templ`, Line: 61, Col: 36}
+>>>>>>> 3afd212 (add sample station handler, services, model)
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
if templ_7745c5c3_Err != nil {
diff --git a/views/dev/samplestation/samplestation.templ b/views/dev/samplestation/samplestation.templ
deleted file mode 100644
index 05ac1fc..0000000
--- a/views/dev/samplestation/samplestation.templ
+++ /dev/null
@@ -1,54 +0,0 @@
-package samplestation
-
-import "cpone/layout"
-
-templ ContentMDSampleStation() {
-
-}
-
-templ CSSMDSampleStation() {
-
-
-
-
-}
-
-templ JSMDSampleStation() {
-
-}
-
-templ ShowMDSampleStation(
- title string,
- cmp templ.Component,
- css templ.Component,
- js templ.Component,
- navbarmenu templ.Component,
- navbaruser templ.Component,
- userprofile templ.Component) {
- @layout.CorporateLayout(title, css, js, navbarmenu, navbaruser, userprofile) {
- @cmp
- }
-}
\ No newline at end of file