add insert data nonlab template
This commit is contained in:
@@ -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})
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
104
views/dev/mdnonlabtemplate/tabledetail.templ
Normal file
104
views/dev/mdnonlabtemplate/tabledetail.templ
Normal 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>
|
||||
}
|
||||
Reference in New Issue
Block a user