add insert data nonlab template

This commit is contained in:
2024-06-05 15:14:59 +07:00
parent 897bdc176c
commit 709fcb316d
7 changed files with 956 additions and 42 deletions

View File

@@ -13,6 +13,7 @@ import (
dev_mdnonlabtemplateview "cpone/views/dev/mdnonlabtemplate"
"fmt"
"strconv"
"strings"
"github.com/a-h/templ"
"github.com/labstack/echo/v4"
@@ -24,6 +25,12 @@ type MDNonlabTemplateServices interface {
GetListNonlabTemplate(search string, currentPage int, rowPerPage int) ([]models.MDNonlabTemplate, int, error)
GetMDNonlabTemplateByID(id string) (models.MDNonlabTemplate, error)
DeleteDataNonlabTemplate(id string) (models.MDNonlabTemplate, error)
AddNonlabTemplate(nama string, fisik string) (models.MDNonlabTemplate, error)
UpdateNonlabTemplate(id string, nama string, fisik string) (models.MDNonlabTemplate, error)
GetIDNonlabTemplate(name string) (int, error)
GetDetailByIDNonlabTemplate(id string) (models.NonlabTemplateDetail, error)
ListDetailByIDNonlabTemplate(id string) ([]models.NonlabTemplateDetail, error)
AddDetailNonlabTemplate(idnonlab string, kode string, name string, flagActive string) (models.NonlabTemplateDetail, error)
}
type MDNonlabTemplateHandler struct {
@@ -128,16 +135,15 @@ func (nlt *MDNonlabTemplateHandler) HandleShowNonlabTemplateScreen(c echo.Contex
dialogAddBody := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
dialogAddBodyID,
models.CustomTextFieldv2Prm{
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Value: dialogAddBodyID,
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
},
models.CustomTextFieldv2Prm{
Label: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
@@ -145,12 +151,31 @@ func (nlt *MDNonlabTemplateHandler) HandleShowNonlabTemplateScreen(c echo.Contex
ID: "nonlabtemplateinputname",
Value: "N",
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSShowModal(""),
)
@@ -497,10 +522,10 @@ func (nlt *MDNonlabTemplateHandler) HandleCloseFormAdd(c echo.Context) error {
Type: "hidden",
},
models.CustomTextFieldv2Prm{
Label: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
@@ -508,12 +533,31 @@ func (nlt *MDNonlabTemplateHandler) HandleCloseFormAdd(c echo.Context) error {
ID: "nonlabtemplateinputname",
Value: "N",
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSHideModal("#"+dialogAddID),
)
@@ -526,26 +570,159 @@ func (nlt *MDNonlabTemplateHandler) HandleSimpanNama(c echo.Context) error {
dialogAddID := c.FormValue("dialogAddID")
searchID := c.FormValue("searchID")
paginationID := c.FormValue("paginationID")
logger.Info("Test Button")
fisik := c.FormValue("nonlabtemplatefisik")
name := c.FormValue("nonlabtemplatename")
id := c.FormValue("nonlabtemplateid")
logger.Info("Component ID", zap.Any("ID", id))
dialogAddBody := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
flagFisik := "N"
if fisik == "on" {
flagFisik = "Y"
}
formValidation := ""
namaValidation := ""
if strings.TrimSpace(name) == "" {
formValidation = "Nama tidak boleh kosong"
namaValidation = "Nama tidak boleh kosong"
}
if formValidation != "" || namaValidation != "" {
nf := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
dialogAddBodyID,
models.CustomTextFieldv2Prm{
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Value: id,
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Value: name,
ErrorMsg: namaValidation,
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
Name: "nonlabtemplatefisik",
ID: "nonlabtemplateinputname",
Value: fisik,
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSShowModal(""),
)
toast := customtoastv2.CustomToastV2Show("Warning", formValidation, "warning")
return utils.ViewMulti(c, []templ.Component{toast, nf})
}
var respAdd models.MDNonlabTemplate
var err error
if id != "" {
respAdd, err = nlt.MDNonlabTemplateServices.UpdateNonlabTemplate(id, name, flagFisik)
} else {
respAdd, err = nlt.MDNonlabTemplateServices.AddNonlabTemplate(name, flagFisik)
}
if err != nil {
defer logger.Sync()
logger.Info("Error", zap.Any("Error", err), zap.Any("nama", name), zap.Any("fisik", flagFisik))
nf := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
dialogAddBodyID,
models.CustomTextFieldv2Prm{
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Value: strconv.Itoa(int(respAdd.NonlabTemplateID)),
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Value: name,
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
Name: "nonlabtemplatefisik",
ID: "nonlabtemplateinputname",
Value: fisik,
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSShowModal(""),
)
toast := customtoastv2.CustomToastV2Show("Error", err.Error(), "danger")
return utils.ViewMulti(c, []templ.Component{toast, nf})
}
logger.Info("ADD Nonlab Template", zap.Any("response", respAdd))
returnBody := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
dialogAddBodyID,
models.CustomTextFieldv2Prm{
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Value: strconv.Itoa(int(respAdd.NonlabTemplateID)),
},
models.CustomTextFieldv2Prm{
Label: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Value: name,
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Value: name,
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
@@ -553,14 +730,256 @@ func (nlt *MDNonlabTemplateHandler) HandleSimpanNama(c echo.Context) error {
ID: "nonlabtemplateinputname",
Value: fisik,
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSShowModal(""),
)
return utils.View(c, dialogAddBody)
var msg string
if id != "" {
msg = "Success update data nonlab template "
} else {
msg = "Success insert data nonlab template "
}
toast := customtoastv2.CustomToastV2Show("Success", msg+name, "success")
return utils.ViewMulti(c, []templ.Component{toast, returnBody})
}
func (nlt *MDNonlabTemplateHandler) HandleAddDetail(c echo.Context) error {
logger, _ := zap.NewProduction()
dialogAddBodyID := c.FormValue("dialogAddBodyID")
dialogAddID := c.FormValue("dialogAddID")
searchID := c.FormValue("searchID")
paginationID := c.FormValue("paginationID")
id := c.FormValue("nonlabtemplateid")
template := c.FormValue("nonlabtemplatename")
fisik := c.FormValue("nonlabtemplatefisik")
kode := c.FormValue("nltdetailkode")
name := c.FormValue("nltdetailname")
if fisik == "Y" {
fisik = "on"
} else {
fisik = "off"
}
// default active
flagActive := "Y"
formValidation := ""
templateValidation := ""
kodeValidation := ""
namaValidation := ""
if strings.TrimSpace(id) == "" {
formValidation = "Simpan nama template dulu"
templateValidation = "Simpan nama template dulu"
}
if strings.TrimSpace(kode) == "" {
formValidation = "Kode tidak boleh kosong"
kodeValidation = "Kode tidak boleh kosong"
}
if strings.TrimSpace(name) == "" {
formValidation = "Nama tidak boleh kosong"
namaValidation = "Nama tidak boleh kosong"
}
if formValidation != "" || templateValidation != "" || kodeValidation != "" || namaValidation != "" {
nf := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
dialogAddBodyID,
models.CustomTextFieldv2Prm{
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Value: id,
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Value: template,
ErrorMsg: templateValidation,
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
Name: "nonlabtemplatefisik",
ID: "nonlabtemplateinputname",
Value: fisik,
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
Value: kode,
ErrorMsg: kodeValidation,
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
Value: name,
ErrorMsg: namaValidation,
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSShowModal(""),
)
toast := customtoastv2.CustomToastV2Show("Warning", formValidation, "warning")
return utils.ViewMulti(c, []templ.Component{toast, nf})
}
resp, err := nlt.MDNonlabTemplateServices.AddDetailNonlabTemplate(id, kode, name, flagActive)
if err != nil {
defer logger.Sync()
logger.Info("Error", zap.Any("Error", err), zap.Any("id", id), zap.Any("kode", kode), zap.Any("nama", name))
nf := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
dialogAddBodyID,
models.CustomTextFieldv2Prm{
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Value: id,
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Value: template,
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
Name: "nonlabtemplatefisik",
ID: "nonlabtemplateinputname",
Value: fisik,
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
Value: kode,
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
Value: name,
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSShowModal(""),
)
toast := customtoastv2.CustomToastV2Show("Error", err.Error(), "danger")
return utils.ViewMulti(c, []templ.Component{toast, nf})
}
logger.Info("ADD Nonlab Template Detail", zap.Any("response", resp))
returnBody := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate(
dialogAddBodyID,
models.CustomTextFieldv2Prm{
Name: "nonlabtemplateid",
ID: "nonlabtemplateinputid",
Type: "hidden",
Value: id,
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Template",
Name: "nonlabtemplatename",
ID: "nonlabtemplateinputname",
Type: "text",
Value: template,
},
models.CustomCheckboxv1Prm{
Text: "Template Fisik",
Name: "nonlabtemplatefisik",
ID: "nonlabtemplateinputname",
Value: fisik,
},
models.CustomTextFieldv2Prm{
Placeholder: "Kode",
Name: "nltdetailkode",
ID: "nltdetailinputkode",
Type: "text",
},
models.CustomTextFieldv2Prm{
Placeholder: "Nama Detail",
Name: "nltdetailname",
ID: "nltdetailinputkode",
Type: "text",
},
dev_mdnonlabtemplateview.BtnSimpanNama(
"/dev/md/nonlabtemplate/simpanama",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.BtnAddDetail(
"/dev/md/nonlabtemplate/adddetail",
"#"+dialogAddBodyID,
"outerHTML",
"#"+dialogAddID,
"#tableID, #paginationID, #searchID, #dialogAddBodyID, #dialogAddID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #"+searchID+", #currpage"+paginationID,
),
dev_mdnonlabtemplateview.JSShowModal(""),
)
toast := customtoastv2.CustomToastV2Show("Success", "success insert detail "+name, "success")
return utils.ViewMulti(c, []templ.Component{toast, returnBody})
}

View File

@@ -289,6 +289,7 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
dev.POST("/md/nonlabtemplate/delete", devMDNonlabTemplateHandlers.HandleDelete)
dev.POST("/md/nonlabtemplate/simpanama", devMDNonlabTemplateHandlers.HandleSimpanNama)
dev.POST("/md/nonlabtemplate/closeaddform", devMDNonlabTemplateHandlers.HandleCloseFormAdd)
dev.POST("/md/nonlabtemplate/adddetail", devMDNonlabTemplateHandlers.HandleAddDetail)
// masterdata nat unit
devMdNatUnitServices := dev_services.NewMdNatUnitServices(appStore)

View File

@@ -15,6 +15,17 @@ type MDNonlabTemplate struct {
NonlabTemplateDeleteUserID string `db:"NonlabTemplateDeleteUserID"`
}
type NonlabTemplateDetail struct {
NonlabTemplateDetailID int `db:"NonlabTemplateDetailID"`
NonlabTemplateDetailNonlabTemplateID int `db:"NonlabTemplateDetailNonlabTemplateID"`
NonlabTemplateDetailCode string `db:"NonlabTemplateDetailCode"`
NonlabTemplateDetailName string `db:"NonlabTemplateDetailName"`
NonlabTemplateDetaiNat_UnitID string `db:"NonlabTemplateDetaiNat_UnitID"`
NonlabTemplateDetailFlagActive string `db:"NonlabTemplateDetailFlagActive"`
NonlabTemplateDetaiM_LangID string `db:"NonlabTemplateDetaiM_LangID"`
NonlabTemplateDetailIsActive string `db:"NonlabTemplateDetailIsActive"`
}
type MDNonlabTemplateForm struct {
IDComponent string
Link string

View File

@@ -6,6 +6,7 @@ import (
dbx "cpone/package/database"
"fmt"
"math"
"strconv"
"strings"
"go.uber.org/zap"
@@ -133,3 +134,225 @@ func (nlt *MDNonlabTemplateServices) DeleteDataNonlabTemplate(id string) (models
return nlt.GetMDNonlabTemplateByID(id)
}
func (nlt *MDNonlabTemplateServices) AddNonlabTemplate(nama string, fisik string) (models.MDNonlabTemplate, error) {
logger, _ := zap.NewProduction()
var ret models.MDNonlabTemplate
var count int
var prmName = "%" + nama + "%"
q := `
SELECT COUNT(*)
FROM nonlab_template
WHERE NonlabTemplateName LIKE ?
AND NonlabTemplateIsActive = 'Y'
`
err := dbx.Handlex.Get(&count, q, prmName)
if err != nil {
defer logger.Sync()
logger.Error("cek duplicate", zap.Any("nama", prmName))
return ret, fmt.Errorf("query failed to cek duplicate: %v", err)
}
if count > 0 {
defer logger.Sync()
logger.Error("duplicate data", zap.Any("nama", nama))
return ret, fmt.Errorf("duplicate nama")
}
q = `
INSERT INTO nonlab_template (
NonlabTemplateName,
NonlabTemplateFlagFisik,
NonlabTemplateCreated,
NonlabTemplateCreatedUserID
) VALUES (?,?,NOW(),1);
`
rsp := dbx.Handlex.MustExec(q, nama, fisik)
insertedID, err := rsp.LastInsertId()
if err != nil {
defer logger.Sync()
logger.Error("error insert data", zap.Any("nama", nama))
return ret, fmt.Errorf("failed insert data: %v", err)
}
s := strconv.Itoa(int(insertedID))
return nlt.GetMDNonlabTemplateByID(s)
}
func (nlt *MDNonlabTemplateServices) UpdateNonlabTemplate(id string, nama string, fisik string) (models.MDNonlabTemplate, error) {
logger, _ := zap.NewProduction()
var ret models.MDNonlabTemplate
var count int
var prmNama = "%" + nama + "%"
q := `
SELECT COUNT(*)
FROM nonlab_template
WHERE NonlabTemplateName LIKE ?
AND NonlabTemplateIsActive = 'Y'
AND NonlabTemplateID <> ?
`
err := dbx.Handlex.Get(&count, q, prmNama, id)
if err != nil {
defer logger.Sync()
logger.Error("cek duplicate", zap.Any("nama", prmNama))
return ret, fmt.Errorf("query failed to cek duplicate: %v", err)
}
if count > 0 {
defer logger.Sync()
logger.Error("duplicate data", zap.Any("nama", nama))
return ret, fmt.Errorf("duplicate nama")
}
q = `
UPDATE nonlab_template SET
NonlabTemplateName = ?,
NonlabTemplateFlagFisik = ?,
NonlabTemplateLastUpdated = NOW(),
NonlabTemplateLastUpdatedUserID = 1
WHERE NonlabTemplateID = ?;
`
respUpdt := dbx.Handlex.MustExec(q, nama, fisik, id)
_, err = respUpdt.RowsAffected()
if err != nil {
defer logger.Sync()
logger.Error("error update data", zap.Any("name", nama))
return ret, fmt.Errorf("query failed to update data")
}
return nlt.GetMDNonlabTemplateByID(id)
}
func (nlt *MDNonlabTemplateServices) GetIDNonlabTemplate(name string) (int, error) {
logger, _ := zap.NewProduction()
var ret int
prmName := "%" + name + "%"
q := `
SELECT
NonlabTemplateID
FROM nonlab_template
WHERE NonlabTemplateName LIKE ?
AND NonlabTemplateIsActive = 'Y'
`
err := dbx.Handlex.Get(&ret, q, prmName)
if err != nil {
defer logger.Sync()
logger.Error("Error get data non lab template by id vs",
zap.String("name", prmName),
zap.Error(err),
)
return ret, fmt.Errorf("QUERY FAILED GET DATA BY NAME")
}
return ret, nil
}
func (nlt *MDNonlabTemplateServices) GetDetailByIDNonlabTemplate(id string) (models.NonlabTemplateDetail, error) {
logger, _ := zap.NewProduction()
var ret models.NonlabTemplateDetail
q := `
SELECT
NonlabTemplateDetailID,
NonlabTemplateDetailNonlabTemplateID,
NonlabTemplateDetailCode,
NonlabTemplateDetailName,
NonlabTemplateDetaiNat_UnitID,
NonlabTemplateDetailFlagActive,
NonlabTemplateDetaiM_LangID,
NonlabTemplateDetailIsActive
FROM nonlab_template_detail
WHERE NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
err := dbx.Handlex.Get(&ret, q, id)
if err != nil {
defer logger.Sync()
logger.Error("Error get data detail nonlab template", zap.Any("ID", id))
return ret, fmt.Errorf("query failed, error get data by id : %v", err)
}
return ret, nil
}
func (nlt *MDNonlabTemplateServices) ListDetailByIDNonlabTemplate(id string) ([]models.NonlabTemplateDetail, error) {
var ret []models.NonlabTemplateDetail
var totalData int
query := `
SELECT COUNT(*)
FROM nonlab_template_detail
WHERE NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
if err := dbx.Handlex.Get(&totalData, query, id); err != nil {
return ret, fmt.Errorf("error querying databases: %v", err)
}
query = `
SELECT
NonlabTemplateDetailID,
NonlabTemplateDetailNonlabTemplateID,
NonlabTemplateDetailCode,
NonlabTemplateDetailName,
NonlabTemplateDetaiNat_UnitID,
NonlabTemplateDetailFlagActive,
NonlabTemplateDetaiM_LangID,
NonlabTemplateDetailIsActive
FROM nonlab_template_detail
WHERE NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
if err := dbx.Handlex.Select(&ret, query, id); err != nil {
return ret, fmt.Errorf("error querying database: %v", err)
}
return ret, nil
}
func (nlt *MDNonlabTemplateServices) AddDetailNonlabTemplate(idnonlab string, kode string, name string, flagActive string) (models.NonlabTemplateDetail, error) {
logger, _ := zap.NewProduction()
var ret models.NonlabTemplateDetail
var count int
prmKode := "%" + kode + "%"
prmName := "%" + name + "%"
q := `
SELECT COUNT(*)
FROM nonlab_template_detail
WHERE (NonlabTemplateDetailCode LIKE ? OR NonlabTemplateDetailName LIKE ?)
AND NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
err := dbx.Handlex.Get(&count, q, prmKode, prmName, idnonlab)
if err != nil {
defer logger.Sync()
logger.Error("cek duplicate", zap.Any("kode", prmKode), zap.Any("nama", prmName))
return ret, fmt.Errorf("query failed to cek duplicate: %v", err)
}
if count > 0 {
defer logger.Sync()
logger.Error("data duplicate", zap.Any("kode", prmKode), zap.Any("nama", prmName))
return ret, fmt.Errorf("terdapat data duplikat")
}
q = `
INSERT INTO nonlab_template_detail (
NonlabTemplateDetailNonlabTemplateID,
NonlabTemplateDetailCode,
NonlabTemplateDetailName,
NonlabTemplateDetailFlagActive,
NonlabTemplateDetailCreated
) VALUES(?,?,?,?,NOW())
`
rsp := dbx.Handlex.MustExec(q, idnonlab, kode, name, flagActive)
insertedID, err := rsp.LastInsertId()
if err != nil {
defer logger.Sync()
logger.Error("error insert data", zap.Any("kode", prmKode), zap.Any("nama", prmName))
return ret, fmt.Errorf("query failed to insert data: %v", err)
}
s := strconv.Itoa(int(insertedID))
return nlt.GetDetailByIDNonlabTemplate(s)
}

View File

@@ -18,6 +18,14 @@ templ MDNonlabTmpltForm(data models.MDNonlabTemplateForm) {
hx-on::before-request={ HandleFormBeforeRequest() }
hx-on::after-request={ HandleFormAfterRequest() }
>
if data.ModalTitle == "Delete - Nonlab Template" {
@modalcomponent.Modal(data.ModalID,
data.ModalTitle,
data.DialogBody,
data.DialogAction,
data.ButtonClose,
)
}
@modalcomponent.ModalXL(data.ModalID,
data.ModalTitle,
data.DialogBody,
@@ -57,11 +65,16 @@ templ BodyFormMDNonlabTemplate(
inputID models.CustomTextFieldv2Prm,
inputName models.CustomTextFieldv2Prm,
inputFlag models.CustomCheckboxv1Prm,
detailKode models.CustomTextFieldv2Prm,
detailNama models.CustomTextFieldv2Prm,
btnSimpan templ.Component,
btnAddDetail templ.Component,
tableDetail templ.Component,
hxOnLoad templ.ComponentScript,
) {
<div id={ componentID } hx-on::load={ hxOnLoad }>
@customtextfield.CustomTextFieldv2(inputID)
<h6 class="font-weight-bold">Nama Template</h6>
<div class="row">
<div class="col-8">
@customtextfield.CustomTextFieldv2(inputName)
@@ -70,7 +83,22 @@ templ BodyFormMDNonlabTemplate(
@customcheckbox.MainCustomCheckboxInput(inputFlag)
</div>
</div>
@btnSimpan
<div class="col-12 d-flex justify-content-end">
@btnSimpan
</div>
<h6 class="font-weight-bold">Detail Hasil</h6>
<div class="row align-items-center">
<div class="col-2">
@customtextfield.CustomTextFieldv2(detailKode)
</div>
<div class="col-8">
@customtextfield.CustomTextFieldv2(detailNama)
</div>
<div class="col-2 d-flex justify-content-center">
@btnAddDetail
</div>
</div>
@tableDetail
</div>
<script>
document.addEventListener('htmx:afterSwap', function(event) {
@@ -148,4 +176,18 @@ templ BtnSimpanNama(Link string, target string, hxSwap string, modalID string, h
>
Simpan
</button>
}
templ BtnAddDetail(Link string, target string, hxSwap string, modalID string, hxInclude string) {
<button
hx-post={ Link }
hx-target={ target }
hx-swap={ hxSwap }
hx-include={ hxInclude }
type="button"
class="btn"
aria-label="Add Detail Hasil"
>
<i aria-hidden="true" class="ki ki-solid-plus icon-2x text-primary"></i>
</button>
}

View File

@@ -123,6 +123,17 @@ func MDNonlabTmpltForm(data models.MDNonlabTemplateForm) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
if data.ModalTitle == "Delete - Nonlab Template" {
templ_7745c5c3_Err = modalcomponent.Modal(data.ModalID,
data.ModalTitle,
data.DialogBody,
data.DialogAction,
data.ButtonClose,
).Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
templ_7745c5c3_Err = modalcomponent.ModalXL(data.ModalID,
data.ModalTitle,
data.DialogBody,
@@ -184,7 +195,10 @@ func BodyFormMDNonlabTemplate(
inputID models.CustomTextFieldv2Prm,
inputName models.CustomTextFieldv2Prm,
inputFlag models.CustomCheckboxv1Prm,
detailKode models.CustomTextFieldv2Prm,
detailNama models.CustomTextFieldv2Prm,
btnSimpan templ.Component,
btnAddDetail templ.Component,
hxOnLoad templ.ComponentScript,
) templ.Component {
return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
@@ -210,7 +224,7 @@ func BodyFormMDNonlabTemplate(
var templ_7745c5c3_Var10 string
templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(componentID)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 63, Col: 25}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 74, Col: 25}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
if templ_7745c5c3_Err != nil {
@@ -233,7 +247,7 @@ func BodyFormMDNonlabTemplate(
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"row\"><div class=\"col-8\">")
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<h6 class=\"font-weight-bold\">Nama Template</h6><div class=\"row\"><div class=\"col-8\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -249,7 +263,7 @@ func BodyFormMDNonlabTemplate(
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div>")
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div><div class=\"col-12 d-flex justify-content-end\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -257,7 +271,31 @@ func BodyFormMDNonlabTemplate(
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div><script>\r\n document.addEventListener('htmx:afterSwap', function(event) {\r\n $('.selectpicker').selectpicker('refresh');\r\n })\r\n </script>")
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div><h6 class=\"font-weight-bold\">Detail Hasil</h6><div class=\"row align-items-center\"><div class=\"col-2\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(detailKode).Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div><div class=\"col-8\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(detailNama).Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div><div class=\"col-2 d-flex justify-content-center\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = btnAddDetail.Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div></div><script>\r\n document.addEventListener('htmx:afterSwap', function(event) {\r\n $('.selectpicker').selectpicker('refresh');\r\n })\r\n </script>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -334,7 +372,7 @@ func ActionFormMDNonlabTmplt(LinkClose string, targetClose string, hxSwapClose s
var templ_7745c5c3_Var14 string
templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(LinkClose)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 103, Col: 31}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 129, Col: 31}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
if templ_7745c5c3_Err != nil {
@@ -347,7 +385,7 @@ func ActionFormMDNonlabTmplt(LinkClose string, targetClose string, hxSwapClose s
var templ_7745c5c3_Var15 string
templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(targetClose)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 104, Col: 35}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 130, Col: 35}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
if templ_7745c5c3_Err != nil {
@@ -360,7 +398,7 @@ func ActionFormMDNonlabTmplt(LinkClose string, targetClose string, hxSwapClose s
var templ_7745c5c3_Var16 string
templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(hxSwapClose)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 105, Col: 33}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 131, Col: 33}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
if templ_7745c5c3_Err != nil {
@@ -401,7 +439,7 @@ func BtnCloseFormMDNonlabTmplt(LinkClose string, targetClose string, hxSwapClose
var templ_7745c5c3_Var18 string
templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(LinkClose)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 126, Col: 27}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 152, Col: 27}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
if templ_7745c5c3_Err != nil {
@@ -414,7 +452,7 @@ func BtnCloseFormMDNonlabTmplt(LinkClose string, targetClose string, hxSwapClose
var templ_7745c5c3_Var19 string
templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(targetClose)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 127, Col: 31}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 153, Col: 31}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
if templ_7745c5c3_Err != nil {
@@ -427,7 +465,7 @@ func BtnCloseFormMDNonlabTmplt(LinkClose string, targetClose string, hxSwapClose
var templ_7745c5c3_Var20 string
templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(hxSwapClose)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 128, Col: 29}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 154, Col: 29}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
if templ_7745c5c3_Err != nil {
@@ -473,7 +511,7 @@ func BtnSimpanNama(Link string, target string, hxSwap string, modalID string, hx
var templ_7745c5c3_Var23 string
templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(Link)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 141, Col: 22}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 167, Col: 22}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
if templ_7745c5c3_Err != nil {
@@ -486,7 +524,7 @@ func BtnSimpanNama(Link string, target string, hxSwap string, modalID string, hx
var templ_7745c5c3_Var24 string
templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(target)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 142, Col: 26}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 168, Col: 26}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
if templ_7745c5c3_Err != nil {
@@ -499,7 +537,7 @@ func BtnSimpanNama(Link string, target string, hxSwap string, modalID string, hx
var templ_7745c5c3_Var25 string
templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(hxSwap)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 143, Col: 24}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 169, Col: 24}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
if templ_7745c5c3_Err != nil {
@@ -512,7 +550,7 @@ func BtnSimpanNama(Link string, target string, hxSwap string, modalID string, hx
var templ_7745c5c3_Var26 string
templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(hxInclude)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 144, Col: 30}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 170, Col: 30}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
if templ_7745c5c3_Err != nil {
@@ -528,3 +566,79 @@ func BtnSimpanNama(Link string, target string, hxSwap string, modalID string, hx
return templ_7745c5c3_Err
})
}
func BtnAddDetail(Link string, target string, hxSwap string, modalID string, hxInclude 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_Var27 := templ.GetChildren(ctx)
if templ_7745c5c3_Var27 == nil {
templ_7745c5c3_Var27 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<button hx-post=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var28 string
templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(Link)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 181, Col: 22}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-target=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var29 string
templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(target)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 182, Col: 26}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-swap=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var30 string
templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(hxSwap)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 183, Col: 24}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-include=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var31 string
templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(hxInclude)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtmptmodal.templ`, Line: 184, Col: 30}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" type=\"button\" class=\"btn\" aria-label=\"Add Detail Hasil\"><i aria-hidden=\"true\" class=\"ki ki-solid-plus icon-2x text-primary\"></i></button>")
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
})
}

View File

@@ -0,0 +1,104 @@
package dev_mdnonlabtemplateview
import "cpone/models"
import "strconv"
import "cpone/component/table"
templ TableDetail(data []models.NonlabTemplateDetail,
tableDetailID string,
hxGetEdit string,
hxTargetEdit string,
hxSwapEdit string,
hxIncludeEdit string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
hxIncludeDelete string,
) {
<div id={ tableDetailID } hx-swap-oob="true">
@tablecomponent.TableV3([]string{"KODE", "TEST", "AKSI"},
[]string{"20%","60%","20%"},
RowDetail(data,
hxGetEdit,
hxTargetEdit,
hxSwapEdit,
hxIncludeEdit,
hxGetDelete,
hxTargetDelete,
hxSwapDelete,
hxIncludeDelete,
))
</div>
}
templ RowDetail(
data []models.NonlabTemplateDetail,
hxGetEdit string,
hxTargetEdit string,
hxSwapEdit string,
hxIncludeEdit string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
hxIncludeDelete string,
) {
if len(data) == 0 {
<tr>
<td colspan="4" class="text-center">Data Tidak Ditemukan</td>
</tr>
}
for _, v := range data {
<tr>
<td>{ v.NonlabTemplateDetailCode }</td>
<td>{ v.NonlabTemplateDetailName }</td>
<td>
@ActionRow(v.NonlabTemplateDetailID,
hxGetEdit,
hxTargetEdit,
hxSwapEdit,
hxIncludeEdit,
hxGetDelete,
hxTargetDelete,
hxSwapDelete,
hxIncludeDelete,
)
</td>
</tr>
}
}
templ ActionRow(
id int,
hxGetEdit string,
hxTargetEdit string,
hxSwapEdit string,
hxIncludeEdit string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
hxIncludeDelete string,
) {
<div class="row px-5 d-flex justify-content-around">
<a
type="button"
class="btn mb-2 btn-sm col-12 col-sm-12 col-md-12 col-lg-5 col-xl-5 col-xxl-5"
hx-get={ hxGetDelete + "?id=" + strconv.Itoa(id) }
hx-target={ hxTargetDelete }
hx-swap={ hxSwapDelete }
hx-include={ hxIncludeDelete }
>
<i aria-hidden="true" class="flaticon2-trash icon-2x text-danger"></i>
</a>
<a
type="button"
class="btn btn-light-danger mb-2 btn-sm col-12 col-sm-12 col-md-12 col-lg-5 col-xl-5 col-xxl-5 btn-light-danger mb-2 btn-sm"
hx-get={ hxGetEdit + "?id=" + strconv.Itoa(id) }
hx-target={ hxTargetEdit }
hx-swap={ hxSwapEdit }
hx-include={ hxIncludeEdit }
>
Pilih
</a>
</div>
}