feature tambah data kelainan detail

This commit is contained in:
Hanan Askarim
2024-06-03 08:29:57 +07:00
parent 42192049ce
commit ae7c836987
8 changed files with 1124 additions and 15 deletions

View File

@@ -28,6 +28,7 @@ type MasterKelainanService interface {
EditKelainan(id string, name string) (models.Kelainan, error)
DeleteKelainan(id string) (models.Kelainan, error)
GetListMasterKelainanDetail(id string, searchdetail string, currentPage int, rowPerPage int) ([]models.KelainanDetail, int, error)
AddKelainanDetail(name string, nameclassification string, selectedid string) (models.KelainanDetail, error)
}
func NewMasterKelainanHandler(us MasterKelainanService) *MasterKelainanHandler {
@@ -54,6 +55,8 @@ func (lh *MasterKelainanHandler) HandlerShowMasterKelainan(c echo.Context) error
tableDetailID := utils.GenerateRandomID("tablebodydetail")
paginationDetailID := utils.GenerateRandomID("paginationdetailid")
searchDetailID := utils.GenerateRandomID("searchdetailid")
dialogDetailAddID := utils.GenerateRandomID("dialogdetailaddid")
dialogDetailAddBodyID := utils.GenerateRandomID("dialogdetailaddbodyid")
// println("cek id param", id)
@@ -316,6 +319,54 @@ func (lh *MasterKelainanHandler) HandlerShowMasterKelainan(c echo.Context) error
"outerHTML", "", "",
)
// component modal add kelainan detail
dialogDetailAddBodyCmp := masterkelainan.BodyFormKelainanDetail(
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailid",
Placeholder: "Nama Kelainan",
Type: "hidden", ID: "kelainandetailid"},
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailname",
Placeholder: "Nama Kelainan",
Type: "text", ID: "kelainandetailinputname"},
models.SwitchclassPrm{
Label: "Dengan Klasifikasi",
Type: "checkbox",
Checked: "true ",
Name: "select",
ID: "switchname"},
models.CustomTextFieldv2Prm{
Label: "Nama Klasifikasi",
Name: "classificationname",
Placeholder: "Nama Klasifikasi",
Type: "text", ID: "classificationinputname"},
dialogDetailAddBodyID, masterkelainan.JsHideModalDetail(""))
dialogDetailAddActionCmp := masterkelainan.ActionFormKelainanDetail(
"/dev/kelainandetail/closeaddform",
"#"+dialogDetailAddBodyID,
"outerHTML",
"#"+dialogDetailAddID)
dialogDetailAddCloseCmp := masterkelainan.BtnCloseFormKelainanDetail(
"/dev/kelainandetail/closeaddform",
"#"+dialogDetailAddBodyID,
"outerHTML",
"#"+dialogDetailAddID)
modaldetailaddcomponent := masterkelainan.KelainanDetailForm(models.KelainanDetailFormComponent{
IDComponent: "formkelainandetail",
Link: "/dev/kelainandetail/add",
HxTarget: "#" + dialogDetailAddBodyID,
HxSwap: "outerHTML",
HxInclude: "#selectedID, #tableDetailID, #paginationDetailID, #searchDetailID, #dialogDetailAddBodyID, #dialogDetailAddID, #selectedID #" + searchDetailID + ", #currpage" + paginationDetailID,
ModalID: dialogDetailAddID,
ModalTitle: "New - Kelainan",
DialogBody: dialogDetailAddBodyCmp,
DialogAction: dialogDetailAddActionCmp,
ButtonCLose: dialogDetailAddCloseCmp,
})
// content, css, js
content := masterkelainan.ContentMasterKelainan(
tableID, paginationID, searchID, dialogAddID, dialogAddBodyID,
@@ -326,6 +377,8 @@ func (lh *MasterKelainanHandler) HandlerShowMasterKelainan(c echo.Context) error
tableDetailID,
paginationDetailID,
searchDetailID,
dialogDetailAddID,
dialogDetailAddBodyID,
breadcrumbComponent,
contentKelainanComponent,
kelainanFilterComponent,
@@ -335,7 +388,8 @@ func (lh *MasterKelainanHandler) HandlerShowMasterKelainan(c echo.Context) error
modalDeleteFormComponent,
contentKelainanDetailCmp,
kelainanDetailFilterCmp,
kelainanDetailPaginationCmp)
kelainanDetailPaginationCmp,
modaldetailaddcomponent)
css := masterkelainan.CssKelainan()
js := masterkelainan.JsMdKelainan()
@@ -1111,3 +1165,222 @@ func (lh *MasterKelainanHandler) HandlerShowMdKelainanDetailPagination(c echo.Co
return utils.ViewMulti(c, retval)
}
func (lh *MasterKelainanHandler) HandlerAddKelainanDetail(c echo.Context) error {
logger, _ := zap.NewProduction()
defer logger.Sync()
selectedID := c.FormValue("selectedID")
nameKelainanDetail := c.FormValue("kelainandetailname")
nameClassification := c.FormValue("classificationname")
// tableID := c.FormValue("tableID")
tableDetailID := c.FormValue("tableDetailID")
paginationDetailID := c.FormValue("paginationDetailID")
searchDetailID := c.FormValue("searchDetailID")
searchdetail := c.FormValue("searchdetail")
currPagePrmDetail := c.FormValue("currpage" + paginationDetailID)
dialogDetailAddBodyID := c.FormValue("dialogDetailAddBodyID")
dialogDetailAddID := c.FormValue("dialogDetailAddID")
currPage, err := strconv.Atoi(currPagePrmDetail)
if err != nil {
return err
}
logger.Info("ADD KELAINAN DETAIL",
zap.Any("nama", nameKelainanDetail),
zap.Any("nama klasifikasi", nameClassification),
zap.Any("tabelid", tableDetailID),
zap.Any("search", searchdetail),
zap.Any("currpage", currPage),
)
kelainanGrupID, _ := strconv.Atoi(selectedID)
// form validation
formValidation := ""
nameValidation := ""
kelainanGrupValidation := ""
if strings.TrimSpace(nameKelainanDetail) == "" {
formValidation = "Nama kelainan tidak boleh kosong"
nameValidation = "Nama kelainan tidak boleh kosong"
kelainanGrupValidation = ""
}
if strings.TrimSpace(selectedID) == "" || kelainanGrupID == 0 {
formValidation = "Pilih kelainan grup dulu"
nameValidation = ""
kelainanGrupValidation = "Pilih kelainan grup dulu"
}
if strings.TrimSpace(nameKelainanDetail) == "" && (strings.TrimSpace(selectedID) == "" || kelainanGrupID == 0) {
formValidation = "Nama kelainan dan Kelainan Grup tidak boleh kosong"
nameValidation = "Nama kelainan tidak boleh kosong"
kelainanGrupValidation = "Pilih kelainan grup dulu"
}
if formValidation != "" || nameValidation != "" || kelainanGrupValidation != "" {
newForm := masterkelainan.BodyFormKelainanDetail(
models.CustomTextFieldv2Prm{Label: "Nama Kelainan",
Name: "kelainandetailid",
Placeholder: "Nama Kelainan",
Type: "hidden",
ID: "kelainandetailid"},
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailname",
Placeholder: "Nama Kelainan",
Type: "text",
Value: nameKelainanDetail,
ID: "kelainandetailinputname",
ErrorMsg: nameValidation},
models.SwitchclassPrm{
Label: "Dengan Klasifikasi",
Type: "checkbox",
Checked: "true ",
Name: "select",
ID: "switchname"},
models.CustomTextFieldv2Prm{
Label: "Nama Klasifikasi",
Name: "classificationname",
Placeholder: "Nama Klasifikasi",
Type: "text",
Value: nameClassification, ID: "classificationinputname"},
dialogDetailAddBodyID, masterkelainan.JsHideModalDetail(""))
return utils.ViewMulti(c, []templ.Component{
customtoastv2.CustomToastV2Show("Warning", formValidation, "warning"), newForm})
}
// add kelainan detail service
dataKelainanDetail, err := lh.MasterKelainanService.AddKelainanDetail(nameKelainanDetail, nameClassification, selectedID)
if err != nil {
logger.Info("Error",
zap.Any("Error", err),
zap.Any("nama", nameKelainanDetail),
zap.Any("nama klasifikasi", nameClassification),
zap.Any("selectedid", selectedID),
)
newForm := masterkelainan.BodyFormKelainanDetail(
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailid",
Placeholder: "Nama Kelainan",
Type: "hidden", ID: "kelainandetailid"},
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailname",
Placeholder: "Nama Kelainan",
Type: "text", ID: "kelainandetailinputname"},
models.SwitchclassPrm{
Label: "Dengan Klasifikasi",
Type: "checkbox",
Checked: "true ",
Name: "select",
ID: "switchname"},
models.CustomTextFieldv2Prm{
Label: "Nama Klasifikasi",
Name: "classificationname",
Placeholder: "Nama Klasifikasi",
Type: "text", ID: "classificationinputname"},
dialogDetailAddBodyID, masterkelainan.JsHideModalDetail(""))
return utils.ViewMulti(c, []templ.Component{
customtoastv2.CustomToastV2Show("Error", err.Error(), "danger"), newForm})
}
logger.Info("ADD KELAINAN DETAIL",
zap.Any("return", dataKelainanDetail),
zap.Any("name", nameKelainanDetail),
zap.Any("name klasifikasi", nameClassification),
zap.Any("selectedid", selectedID),
)
// get data table current page
dataKelainanDetailList, totalpage, err := lh.MasterKelainanService.GetListMasterKelainanDetail(selectedID, searchdetail, currPage, 5)
if err != nil {
defer logger.Sync()
logger.Info("ERROR GET KELAINAN DETAIL",
zap.Any("error", err),
)
}
// new add form
newForm := masterkelainan.BodyFormKelainanDetail(
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailid",
Placeholder: "Nama Kelainan",
Type: "hidden", ID: "kelainandetailid"},
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailname",
Placeholder: "Nama Kelainan",
Type: "text",
Value: "",
ID: "kelainandetailinputname"},
models.SwitchclassPrm{
Label: "Dengan Klasifikasi",
Type: "checkbox",
Checked: "true ",
Name: "select",
ID: "switchname"},
models.CustomTextFieldv2Prm{
Label: "Nama Klasifikasi",
Name: "classificationname",
Placeholder: "Nama Klasifikasi",
Type: "text",
Value: "",
ID: "classificationinputname"},
dialogDetailAddBodyID, masterkelainan.JsHideModalDetail("#"+dialogDetailAddID))
// new table listing
contentKelainanDetailComponent := masterkelainan.TableKelainanDetail(
dataKelainanDetailList, tableDetailID,
)
// new pagination
kelainanDetailPaginationCmp := pagination.PaginationV2(totalpage,
currPage,
"/dev/kelainandetailpagination",
paginationDetailID,
"#tableDetailID, #searchDetailID, #"+searchDetailID+", #paginationDetailID",
"#"+paginationDetailID, "outerHTML", "", "true")
toastSuccess := customtoastv2.CustomToastV2Show("Success", "Success add kelainan "+nameKelainanDetail, "success")
retVal := []templ.Component{toastSuccess, contentKelainanDetailComponent, kelainanDetailPaginationCmp, newForm}
return utils.ViewMulti(c, retVal)
}
func (lh *MasterKelainanHandler) HandlerCloseFormAddDetail(c echo.Context) error {
dialogDetailAddBodyID := c.FormValue("dialogDetailAddBodyID")
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("CEK dialogDetailAddBodyID CLOSE",
zap.Any("dialogDetailAddBodyID", dialogDetailAddBodyID),
)
newForm := masterkelainan.BodyFormKelainanDetail(
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailid",
Placeholder: "Nama Kelainan",
Type: "hidden", ID: "kelainandetailid"},
models.CustomTextFieldv2Prm{
Label: "Nama Kelainan",
Name: "kelainandetailname",
Placeholder: "Nama Kelainan",
Type: "text", ID: "kelainandetailinputname"},
models.SwitchclassPrm{
Label: "Dengan Klasifikasi",
Type: "checkbox",
Checked: "true ",
Name: "select",
ID: "switchname"},
models.CustomTextFieldv2Prm{
Label: "Nama Klasifikasi",
Name: "classificationname",
Placeholder: "Nama Klasifikasi",
Type: "text", ID: "classificationinputname"},
dialogDetailAddBodyID, masterkelainan.JsHideModalDetail(""))
return utils.View(c, newForm)
}

View File

@@ -229,4 +229,6 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
dev.GET("/kelainan/selected", devKLhandlers.HandlerShowMasterKelainanDetail)
dev.GET("/searchkelainandetail", devKLhandlers.HandlerShowMdKelainanDetailSearch)
dev.GET("/kelainandetailpagination", devKLhandlers.HandlerShowMdKelainanDetailPagination)
dev.POST("/kelainandetail/closeaddform", devKLhandlers.HandlerCloseFormAddDetail)
dev.POST("/kelainandetail/add", devKLhandlers.HandlerAddKelainanDetail)
}