diff --git a/handlers/dev/md.nonlabtemplate.handlers.go b/handlers/dev/md.nonlabtemplate.handlers.go index 1b88a8d..2ee0a8b 100644 --- a/handlers/dev/md.nonlabtemplate.handlers.go +++ b/handlers/dev/md.nonlabtemplate.handlers.go @@ -6,6 +6,7 @@ import ( navbarmenu "cpone/component/navbar" "cpone/component/pagination" sidebaruserprofile "cpone/component/sidebar_user_profile" + customtoastv2 "cpone/component/toastbootstrap" "cpone/models" "cpone/services" "cpone/utils" @@ -21,6 +22,8 @@ import ( type MDNonLabTemplateServices interface { GetMDNonLabTemplateBreadcrumb() (models.BreadCrumbV1, error) GetMDNonLabTemplateData(search string, currentPage int, rowPerPage int) ([]models.MDNonLabTemplate, int, error) + DeleteDataMDNLT(id string) (models.MDNonLabTemplate, error) + GetMDNonLabTemplateByID(id string) (models.MDNonLabTemplate, error) } type MDNonLabTemplateHandler struct { @@ -120,6 +123,61 @@ func (mdnlt *MDNonLabTemplateHandler) HandleShowMDNonLabTemplateScreen(c echo.Co dev_mdnonlabtemplateview.AfterRequestContent(), ) + // modal delete form + dialogDeleteComp := dev_mdnonlabtemplateview.BodyFormMDNonlabTemplate( + dialogDeleteBodyID, + models.CustomTextFieldv2Prm{ + Label: "Non Lab Template Name", + Name: "nonlabtemplateid", + Placeholder: "Non Lab Template Name", + Type: "hidden", + ID: "nonlabtemplateid", + }, + models.CustomTextFieldv2Prm{ + Label: "Non Lab Template Name", + Name: "nonlabtemplatename", + Placeholder: "Non Lab Template Name", + Type: "text", + ID: "nonlabtemplatename", + }, + models.CustomCheckboxv1Prm{ + Label: "Non Lab Template Flag Fisik", + Name: "nonlabtemplateflag", + ID: "nonlabtemplateflag", + Value: "N", + }, + dev_mdnonlabtemplateview.JSHideModal(""), + ) + + modalActionDeleteComp := dev_mdnonlabtemplateview.ActionFormMDNLTDelete( + "/dev/md/nonlabtemplate/closedeleteform", + "#"+dialogDeleteBodyID, + "outerHTML", + "#"+dialogDeleteID, + ) + + btnCloseModalDelete := dev_mdnonlabtemplateview.BtnCloseFormMDNLT( + "/dev/md/nonlabtemplate/closedeleteform", + "#"+dialogDeleteBodyID, + "outerHTML", + "#"+dialogDeleteID, + ) + + modalDeleteFormComponent := dev_mdnonlabtemplateview.NonLabTemplateModalForm( + models.MDNonLabTemplateForm{ + IDComponent: "formnonlabtemplate", + Link: "/dev/md/nonlabtemplate/delete", + HxTarget: "#" + dialogDeleteBodyID, + HxSwap: "outerHTML", + HxInclude: "#tableID, #paginationID, #searchID, #dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #" + searchID + ", #currpage" + paginationID, + ModalID: dialogDeleteID, + ModalTitle: "Delete - Non Lab Template", + DialogBody: dialogDeleteComp, + DialogAction: modalActionDeleteComp, + ButtonCLose: btnCloseModalDelete, + }, + ) + content := dev_mdnonlabtemplateview.MDNonLabTemplateScreen( tableID, paginationID, @@ -134,6 +192,7 @@ func (mdnlt *MDNonLabTemplateHandler) HandleShowMDNonLabTemplateScreen(c echo.Co tableFilter, tableComp, tablePagination, + modalDeleteFormComponent, ) css := dev_mdnonlabtemplateview.CSSMDNonLabTemplate() js := dev_mdnonlabtemplateview.JSSMDNonLabTemplate() @@ -250,3 +309,132 @@ func (mdnlt *MDNonLabTemplateHandler) HandleChangePageMDNonLabTemplate(c echo.Co retval = append(retval, tablePagination) return utils.ViewMulti(c, retval) } + +// handle delete +func (mdnlt *MDNonLabTemplateHandler) HandleOpenFormDelete(c echo.Context) error { + id := c.QueryParam("id") + dialogDeleteID := c.QueryParam("dialogDeleteID") + dialogDeleteBodyID := c.QueryParam("dialogDeleteBodyID") + + dataMDNLT, err := mdnlt.MDNonLabTemplateServices.GetMDNonLabTemplateByID(id) + if err != nil { + newForm := dev_mdnonlabtemplateview.DeleteConfirmBody( + models.CustomTextFieldv2Prm{Name: "nonlabtemplateid", Type: "hidden", Value: "0"}, + dialogDeleteBodyID, + "Apakah anda yakin menghapus non lab template berikut ?", + []string{"NAME"}, + []string{""}, + dev_mdnonlabtemplateview.JSHideModal(""), + ) + return utils.ViewMulti(c, []templ.Component{customtoastv2.CustomToastV2Show("Error", err.Error(), "danger"), newForm}) + } + + newForm := dev_mdnonlabtemplateview.DeleteConfirmBody( + models.CustomTextFieldv2Prm{Name: "nonlabtemplateid", Type: "hidden", Value: strconv.Itoa(dataMDNLT.NonLabTemplateID)}, + dialogDeleteBodyID, + "Apakah anda yakin menghapus non lab template berikut ?", + []string{"NAME"}, + []string{dataMDNLT.NonLabTemplateName}, + dev_mdnonlabtemplateview.JSShowModal("#"+dialogDeleteID), + ) + return utils.View(c, newForm) +} + +func (mdnlt *MDNonLabTemplateHandler) HandleCloseFormDelete(c echo.Context) error { + dialogDeleteBodyID := c.FormValue("dialogDeleteBodyID") + newForm := dev_mdnonlabtemplateview.DeleteConfirmBody( + models.CustomTextFieldv2Prm{Type: "hidden", Value: "0", Name: "nonlabtemplateid"}, + dialogDeleteBodyID, + "Apakah anda yakin menghapus non lab template berikut ?", + []string{"NAME"}, + []string{""}, + dev_mdnonlabtemplateview.JSHideModal(""), + ) + return utils.View(c, newForm) +} + +func (mdnlt *MDNonLabTemplateHandler) HandleDeleteMDNLT(c echo.Context) error { + logger, _ := zap.NewProduction() + defer logger.Sync() + + id := c.FormValue("nonlabtemplateid") + tableID := c.FormValue("tableID") + paginationID := c.FormValue("paginationID") + searchID := c.FormValue("searchID") + search := c.FormValue("search") + currPagePrm := c.FormValue("currpage" + paginationID) + // dialogAddBodyID := c.FormValue("dialogAddBodyID") + dialogDeleteID := c.FormValue("dialogDeleteID") + dialogEditBodyID := c.FormValue("dialogEditBodyID") + dialogDeleteBodyID := c.FormValue("dialogDeleteBodyID") + + currPage, err := strconv.Atoi(currPagePrm) + if err != nil { + return err + } + logger.Info("ADD NON LAB TEMPLATE PARAM", zap.Any("tableid", tableID), zap.Any("search", search), zap.Any("currPage", currPage)) + + // delete data from db + respDel, err := mdnlt.MDNonLabTemplateServices.DeleteDataMDNLT(id) + if err != nil { + logger.Info("Error", zap.Any("error", err)) + newForm := dev_mdnonlabtemplateview.DeleteConfirmBody( + models.CustomTextFieldv2Prm{Name: "nonlabtemplateid", Type: "hidden", Value: ""}, + dialogDeleteBodyID, + "Apakah anda yakin menghapus non lab template berikut ?", + []string{"NAME"}, + []string{""}, + dev_mdnonlabtemplateview.JSHideModal(""), + ) + return utils.ViewMulti(c, []templ.Component{customtoastv2.CustomToastV2Show("Error", err.Error(), "danger"), newForm}) + } + logger.Info("Response Delete", zap.Any("Resp", respDel)) + + dataNLTList, totalPage, err := mdnlt.MDNonLabTemplateServices.GetMDNonLabTemplateData(search, currPage, 5) + if err != nil { + defer logger.Sync() + logger.Info("Error get list data non lab template", zap.Any("error", err)) + return err + } + + tableComp := dev_mdnonlabtemplateview.TableNonLabTemplate(dataNLTList, + tableID, + "/dev/md/nonlabtemplate/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "/dev/md/nonlabtemplate/opendelete", + "#"+dialogDeleteBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + ) + + paginationTable := pagination.PaginationV3( + totalPage, + currPage, + "/dev/md/nonlabtemplate/changepage", + paginationID, + "#tableID, #searchID, #"+searchID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID", + "#"+paginationID, + "outerHTML", "", "true", + dev_mdnonlabtemplateview.BeforeRequestContent(), + dev_mdnonlabtemplateview.AfterRequestContent(), + ) + + var retVal []templ.Component + newForm := dev_mdnonlabtemplateview.DeleteConfirmBody( + models.CustomTextFieldv2Prm{Name: "nonlabtemplateid", Type: "hidden", Value: ""}, + dialogDeleteBodyID, + "Apakah anda yakin menghapus non lab template berikut ?", + []string{"NAME"}, + []string{""}, + dev_mdnonlabtemplateview.JSHideModal("#"+dialogDeleteID), + ) + toastSuccess := customtoastv2.CustomToastV2Show("Success", "Berhasil delete non lab template ", "success") + retVal = append(retVal, toastSuccess) + retVal = append(retVal, tableComp) + retVal = append(retVal, paginationTable) + retVal = append(retVal, newForm) + + return utils.ViewMulti(c, retVal) +} diff --git a/handlers/routes.go b/handlers/routes.go index 879d118..e91cb46 100644 --- a/handlers/routes.go +++ b/handlers/routes.go @@ -284,6 +284,9 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) { dev.GET("/md/nonlabtemplate", devMDMRNonLabTemplateHandler.HandleShowMDNonLabTemplateScreen) dev.GET("/md/nonlabtemplate/filter", devMDMRNonLabTemplateHandler.HandleFilterMDNonLabTemplate) dev.GET("/md/nonlabtemplate/changepage", devMDMRNonLabTemplateHandler.HandleChangePageMDNonLabTemplate) + dev.GET("/md/nonlabtemplate/opendelete", devMDMRNonLabTemplateHandler.HandleOpenFormDelete) + dev.POST("/md/nonlabtemplate/closedeleteform", devMDMRNonLabTemplateHandler.HandleCloseFormDelete) + dev.POST("/md/nonlabtemplate/delete", devMDMRNonLabTemplateHandler.HandleDeleteMDNLT) // masterdata nat unit devMdNatUnitServices := dev_services.NewMdNatUnitServices(appStore) diff --git a/models/mdnonlabtemplate.models.go b/models/mdnonlabtemplate.models.go index 85d6aac..09df2ad 100644 --- a/models/mdnonlabtemplate.models.go +++ b/models/mdnonlabtemplate.models.go @@ -26,8 +26,7 @@ type MDNonLabTemplateForm struct { InputID CustomTextFieldv2Prm InputNama CustomTextFieldv2Prm CheckboxFlagFisik CustomCheckboxv1Prm - - DialogBody templ.Component - DialogAction templ.Component - ButtonCLose templ.Component + DialogBody templ.Component + DialogAction templ.Component + ButtonCLose templ.Component } diff --git a/services/dev/md.nonlabtemplate.services.go b/services/dev/md.nonlabtemplate.services.go index e04509d..282a03e 100644 --- a/services/dev/md.nonlabtemplate.services.go +++ b/services/dev/md.nonlabtemplate.services.go @@ -7,6 +7,8 @@ import ( "fmt" "math" "strings" + + "go.uber.org/zap" ) type MDNonLabTemplateServices struct { @@ -82,3 +84,52 @@ func (mdnlt *MDNonLabTemplateServices) GetMDNonLabTemplateData(search string, cu return ret, totalPage, nil } + +func (mdnlt *MDNonLabTemplateServices) GetMDNonLabTemplateByID(id string) (models.MDNonLabTemplate, error) { + logger, _ := zap.NewProduction() + var ret models.MDNonLabTemplate + + q := ` + SELECT + NonlabTemplateID, + NonlabTemplateName, + NonlabTemplateFlagFisik, + NonlabTemplateIsActive, + NonlabTemplateCreated, + NonlabTemplateLastUpdated + FROM nonlab_template + WHERE NonlabTemplateID = ? + ` + err := dbx.Handlex.Get(&ret, q, id) + if err != nil { + defer logger.Sync() + logger.Error("Error get data non lab template by id vs", + zap.String("ID", id), + zap.Error(err), + ) + return ret, fmt.Errorf("QUERY FAILED GET DATA BY ID") + } + return ret, nil +} + +func (mdnlt *MDNonLabTemplateServices) DeleteDataMDNLT(id string) (models.MDNonLabTemplate, error) { + logger, _ := zap.NewProduction() + var ret models.MDNonLabTemplate + + q := ` + UPDATE nonlab_template + SET + NonlabTemplateIsActive = 'N', + NonlabTemplateLastUpdated = NOW() + WHERE NonlabTemplateID = ? + ` + dlt := dbx.Handlex.MustExec(q, id) + _, err := dlt.RowsAffected() + if err != nil { + defer logger.Sync() + logger.Error("Error delete sample station", zap.String("id", id)) + return ret, fmt.Errorf("query failed delete non lab template") + } + + return mdnlt.GetMDNonLabTemplateByID(id) +} diff --git a/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ b/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ index dba7988..f56f6c9 100644 --- a/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ +++ b/views/dev/mdnonlabtemplate/mdnonlabtemplate.templ @@ -18,6 +18,7 @@ templ MDNonLabTemplateScreen( filterComponent templ.Component, tableComponent templ.Component, paginationComponent templ.Component, + modalDeleteForm templ.Component, ) {
{ message }
+") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var25 string + templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(message) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\mdnonlabtemplate\mdnonlabtemplatemodal.templ`, Line: 148, Col: 20} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("