diff --git a/handlers/dev/md.natunit.handlers.go b/handlers/dev/md.natunit.handlers.go index 443e756..e6a245b 100644 --- a/handlers/dev/md.natunit.handlers.go +++ b/handlers/dev/md.natunit.handlers.go @@ -11,7 +11,6 @@ import ( "cpone/services" "cpone/utils" dev_mdnatunitview "cpone/views/dev/mdnatunit" - dev_mdusergroupview "cpone/views/dev/mdusergroup" "fmt" "strconv" "strings" @@ -25,6 +24,8 @@ type MdNatUnitServices interface { GetListMdNatUnit(search string, currentPage int, rowPerPage int) ([]models.NatUnit, int, error) GetMdNatUnitBreadCrumb(title string) (models.BreadCrumbV1, error) AddMdNatUnit(code string, name string) (models.NatUnit, error) + GetMdNatUnitByID(id string) (models.NatUnit, error) + EditMdNatUnit(id string, code string, name string) (models.NatUnit, error) } func NeWMdNatUnitHandler(nu MdNatUnitServices) *MdNatUnitHandler { @@ -45,6 +46,8 @@ func (nh *MdNatUnitHandler) HandleShowMdNatUnitScreen(c echo.Context) error { searchID := utils.GenerateRandomID("searchid") dialogAddID := utils.GenerateRandomID("dialogaddID") dialogAddBodyID := utils.GenerateRandomID("dialogaddbodyID") + dialogEditID := utils.GenerateRandomID("dialogEditID") + dialogEditBodyID := utils.GenerateRandomID("dialogEditbodyID") dataMenu, err := services.GetMenu() fmt.Println(dataMenu) fmt.Println(err) @@ -108,9 +111,13 @@ func (nh *MdNatUnitHandler) HandleShowMdNatUnitScreen(c echo.Context) error { tableComponent := dev_mdnatunitview.TableNatUnit(dataNatUnit, tableID, + "/dev/md/natunit/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID", ) - //filter user group component + //filter nat unit component natUnitFilterComponent := customtextfieldsearch.MainCustomTextFieldSearchV3(searchID, "search", "Cari Kode/Nama", @@ -183,6 +190,55 @@ func (nh *MdNatUnitHandler) HandleShowMdNatUnitScreen(c echo.Context) error { }, ) + // modal edit form + dialogEditBodyCmp := dev_mdnatunitview.BodyFormNatUnit( + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitcode", + Placeholder: "Kode Unit", + Type: "text", ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Nama Unit", + Name: "natunitname", + Placeholder: "Nama Unit", + Type: "text", ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitid", + Placeholder: "Kode Unit", + Type: "hidden", ID: "natunitinputid"}, + dialogEditBodyID, dev_mdnatunitview.JsHideModal(""), + ) + + modalActionEditCmp := dev_mdnatunitview.ActionFormNatUnit( + "/dev/md/natunit/closeeditform", + "#"+dialogEditBodyID, + "outerHTML", + "#"+dialogEditID, + ) + + btnCloseModalEdit := dev_mdnatunitview.BtnCloseFormNatUnit( + "/dev/md/natunit/closeeditform", + "#"+dialogEditBodyID, + "outerHTML", + "#"+dialogEditID, + ) + + modalEditFormComponent := dev_mdnatunitview.NatUnitForm( + models.NatUnitFormComponent{ + IDComponent: "formnatunit", + Link: "dev/md/natunit/edit", + HxTarget: "#" + dialogEditBodyID, + HxSwap: "outerHTML", + HxInclude: "#tableID, #paginationID, #searchID, #dialogEditBodyID, #dialogEditID, #" + searchID + ", #currpage" + paginationID, + ModalID: dialogEditID, + ModalTitle: "New - Unit", + DialogBody: dialogEditBodyCmp, + DialogAction: modalActionEditCmp, + ButtonCLose: btnCloseModalEdit, + }, + ) + // content, css, js content := dev_mdnatunitview.MdNatUnitScreen( tableID, @@ -190,11 +246,14 @@ func (nh *MdNatUnitHandler) HandleShowMdNatUnitScreen(c echo.Context) error { searchID, dialogAddID, dialogAddBodyID, + dialogEditID, + dialogEditBodyID, breadcrumbComponent, tableComponent, natUnitFilterComponent, natUnitPaginationComponent, modalAddFormComponent, + modalEditFormComponent, ) css := dev_mdnatunitview.CssMdNatUnit() js := dev_mdnatunitview.JsMdNatUnit() @@ -217,6 +276,7 @@ func (nh *MdNatUnitHandler) HandleFilterMdNatUnit(c echo.Context) error { searchID := c.QueryParam("searchID") tableID := c.QueryParam("tableID") paginationID := c.QueryParam("paginationID") + dialogEditBodyID := c.QueryParam("dialogEditBodyID") var retval []templ.Component logger, _ := zap.NewProduction() @@ -230,7 +290,11 @@ func (nh *MdNatUnitHandler) HandleFilterMdNatUnit(c echo.Context) error { return err } tableComponent := dev_mdnatunitview.TableNatUnit(dataNatUnit, - tableID) + tableID, + "/dev/md/natunit/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID") natUnitPaginationComponent := pagination.PaginationV3( totalpage, 1, @@ -253,6 +317,7 @@ func (nh *MdNatUnitHandler) HandlerChangePageMdNatUnit(c echo.Context) error { tableID := c.QueryParam("tableID") searchID := c.QueryParam("searchID") paginationID := c.QueryParam("paginationID") + dialogEditBodyID := c.QueryParam("dialogEditBodyID") var retval []templ.Component logger, _ := zap.NewProduction() @@ -276,7 +341,12 @@ func (nh *MdNatUnitHandler) HandlerChangePageMdNatUnit(c echo.Context) error { return err } tableComponent := dev_mdnatunitview.TableNatUnit(dataNatUnit, - tableID) + tableID, + "/dev/md/natunit/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID", + ) natUnitPaginationComponent := pagination.PaginationV3( totalpage, page, @@ -311,7 +381,7 @@ func (nh *MdNatUnitHandler) HandlerCloseFormAdd(c echo.Context) error { Name: "natunitid", Placeholder: "Kode Unit", Type: "hidden", ID: "natunitinputid"}, - dialogAddBodyID, dev_mdusergroupview.JsHideModal("")) + dialogAddBodyID, dev_mdnatunitview.JsHideModal("")) return utils.View(c, newForm) } @@ -329,6 +399,7 @@ func (nh *MdNatUnitHandler) HandlerAddNatUnit(c echo.Context) error { currPagePrm := c.FormValue("currpage" + paginationID) dialogAddBodyID := c.FormValue("dialogAddBodyID") dialogAddID := c.FormValue("dialogAddID") + dialogEditBodyID := c.FormValue("dialogEditBodyID") currPage, err := strconv.Atoi(currPagePrm) if err != nil { @@ -441,6 +512,10 @@ func (nh *MdNatUnitHandler) HandlerAddNatUnit(c echo.Context) error { tableComponent := dev_mdnatunitview.TableNatUnit( dataNatUnitList, tableID, + "/dev/md/natunit/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID", ) // pagination component @@ -484,3 +559,255 @@ func (nh *MdNatUnitHandler) HandlerAddNatUnit(c echo.Context) error { newForm, }) } + +func (nh *MdNatUnitHandler) HandlerOpenEditForm(c echo.Context) error { + id := c.QueryParam("id") + dialogEditID := c.QueryParam("dialogEditID") + dialogEditBodyID := c.QueryParam("dialogEditBodyID") + + dataNatUnit, err := nh.MdNatUnitServices.GetMdNatUnitByID(id) + if err != nil { + newForm := dev_mdnatunitview.BodyFormNatUnit( + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitcode", + Placeholder: "Kode Unit", + Type: "text", ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Nama Unit", + Name: "natunitname", + Placeholder: "Nama Unit", + Type: "text", ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitid", + Placeholder: "Kode Unit", + Type: "hidden", ID: "natunitinputid"}, + dialogEditBodyID, dev_mdnatunitview.JsHideModal("")) + return utils.ViewMulti(c, []templ.Component{customtoastv2.CustomToastV2Show("Error", "Get unit error", "danger"), newForm}) + } + newForm := dev_mdnatunitview.BodyFormNatUnit( + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitcode", + Placeholder: "Kode Unit", + Value: dataNatUnit.Nat_UnitCode, + Type: "text", + ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitname", + Placeholder: "Kode Unit", + Value: dataNatUnit.Nat_UnitName, + Type: "text", + ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitid", + Placeholder: "Kode Unit", + Value: strconv.Itoa(dataNatUnit.Nat_UnitID), + Type: "hidden", + ID: "natunitinputid"}, + + dialogEditBodyID, dev_mdnatunitview.JsShowModal("#"+dialogEditID)) + + return utils.View(c, newForm) +} + +func (nh *MdNatUnitHandler) HandlerCloseFormEdit(c echo.Context) error { + dialogEditBodyID := c.FormValue("dialogEditBodyID") + newForm := dev_mdnatunitview.BodyFormNatUnit( + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitcode", + Placeholder: "Kode Unit", + Type: "text", ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Nama Unit", + Name: "natunitname", + Placeholder: "Nama Unit", + Type: "text", ID: "natunitinputname"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitid", + Placeholder: "Kode Unit", + Type: "hidden", ID: "natunitinputid"}, + dialogEditBodyID, dev_mdnatunitview.JsHideModal("")) + return utils.View(c, newForm) +} + +func (nh *MdNatUnitHandler) HandlerEditNatUnit(c echo.Context) error { + logger, _ := zap.NewProduction() + defer logger.Sync() + + // prm form addnatunit + code := c.FormValue("natunitcode") + name := c.FormValue("natunitname") + id := c.FormValue("natunitid") + 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") + dialogEditID := c.FormValue("dialogEditID") + dialogEditBodyID := c.FormValue("dialogEditBodyID") + // dialogDeleteBodyID := c.FormValue("dialogDeleteBodyID") + + currPage, err := strconv.Atoi(currPagePrm) + if err != nil { + return err + } + logger.Info("ADD NAT UNIT PARAM", + zap.Any("code", code), + zap.Any("nama", name), + zap.Any("tableid", tableID), + zap.Any("search", search), + zap.Any("currpage", currPage), + ) + + formValidation := "" + codeValidation := "" + nameValidation := "" + if strings.TrimSpace(code) == "" { + formValidation = "Code unit tidak boleh kosong" + codeValidation = "Code unit tidak boleh kosong" + nameValidation = "" + } + if strings.TrimSpace(name) == "" { + formValidation = "Nama unit tidak boleh kosong" + codeValidation = "" + nameValidation = "Nama unit tidak boleh kosong" + } + if strings.TrimSpace(code) == "" && strings.TrimSpace(name) == "" { + formValidation = "Code dan nama unit tidak boleh kosong" + codeValidation = "Code unit tidak boleh kosong" + nameValidation = "Nama unit tidak boleh kosong" + + } + + if formValidation != "" || codeValidation != "" || nameValidation != "" { + newForm := dev_mdnatunitview.BodyFormNatUnit( + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitcode", + Placeholder: "Kode Unit", + ErrorMsg: codeValidation, + Value: code, + Type: "text"}, + models.CustomTextFieldv2Prm{ + Label: "Nama Unit", + Name: "natunitname", + Placeholder: "Nama Unit", + ErrorMsg: nameValidation, + Value: name, + Type: "text"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitid", + Placeholder: "Kode Unit", + Type: "hidden", ID: "natunitinputid"}, + dialogEditBodyID, dev_mdnatunitview.JsHideModal("")) + return utils.ViewMulti(c, []templ.Component{customtoastv2.CustomToastV2Show("Warning", formValidation, "warning"), newForm}) + } + + // edit nat unit service + dataNatUnit, err := nh.MdNatUnitServices.EditMdNatUnit(id, code, name) + if err != nil { + logger.Info("Error", + zap.Any("Error", err), + zap.Any("code", code), + zap.Any("name", name), + ) + newForm := dev_mdnatunitview.BodyFormNatUnit( + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitcode", + Placeholder: "Kode Unit", + ErrorMsg: codeValidation, + Value: code, + Type: "text"}, + models.CustomTextFieldv2Prm{ + Label: "Nama Unit", + Name: "natunitname", + Placeholder: "Nama Unit", + ErrorMsg: nameValidation, + Value: name, + Type: "text"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitid", + Placeholder: "Kode Unit", + Type: "hidden", ID: "natunitinputid"}, + dialogEditBodyID, dev_mdnatunitview.JsHideModal("")) + return utils.ViewMulti(c, []templ.Component{ + customtoastv2.CustomToastV2Show("Error", err.Error(), "danger"), newForm}) + } + + logger.Info("ADD NAT UNIT", + zap.Any("return", dataNatUnit), + zap.Any("code", code), + zap.Any("name", name), + ) + + // get list nat unit for table + dataNatUnitList, totalPage, err := nh.MdNatUnitServices.GetListMdNatUnit(search, currPage, 5) + if err != nil { + defer logger.Sync() + logger.Info("ERROR GET NAT UNIT", + zap.Any("error", err), + ) + fmt.Println(dataNatUnit) + return err + } + + // table component + tableComponent := dev_mdnatunitview.TableNatUnit( + dataNatUnitList, + tableID, + "/dev/md/natunit/openedit", + "#"+dialogEditBodyID, + "outerHTML", + "#dialogEditBodyID, #dialogEditID", + ) + + // pagination component + natUnitPaginationComponent := pagination.PaginationV3( + totalPage, + currPage, + "/dev/md/natunit/changepage", + paginationID, + "#tableID, #searchID, #"+searchID+", #paginationID, #dialogEditBodyID, #dialogEditID", + "#"+paginationID, + "outerHTML", "", "true", + dev_mdnatunitview.BeforeRequestContent(), + dev_mdnatunitview.AfterRequestContent(), + ) + + var retVal []templ.Component + newForm := dev_mdnatunitview.BodyFormNatUnit( + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitcode", + Placeholder: "Kode Unit", + ErrorMsg: codeValidation, + Type: "text"}, + models.CustomTextFieldv2Prm{ + Label: "Nama Unit", + Name: "natunitname", + Placeholder: "Nama Unit", + ErrorMsg: nameValidation, + Type: "text"}, + models.CustomTextFieldv2Prm{ + Label: "Kode Unit", + Name: "natunitid", + Placeholder: "Kode Unit", + Type: "hidden", ID: "natunitinputid"}, + dialogEditBodyID, dev_mdnatunitview.JsHideModal("#"+dialogEditID)) + toastSuccess := customtoastv2.CustomToastV2Show("Success", "Berhasil edit Unit "+name, "success") + retVal = append(retVal, toastSuccess) + retVal = append(retVal, tableComponent) + retVal = append(retVal, natUnitPaginationComponent) + retVal = append(retVal, newForm) + return utils.ViewMulti(c, retVal) +} diff --git a/handlers/routes.go b/handlers/routes.go index 4c2c317..d4929b0 100644 --- a/handlers/routes.go +++ b/handlers/routes.go @@ -255,4 +255,7 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) { dev.GET("/md/natunit/changepage", devMdNatUnitHandlers.HandlerChangePageMdNatUnit) dev.POST("/md/natunit/closeaddform", devMdNatUnitHandlers.HandlerCloseFormAdd) dev.POST("/md/natunit/add", devMdNatUnitHandlers.HandlerAddNatUnit) + dev.GET("/md/natunit/openedit", devMdNatUnitHandlers.HandlerOpenEditForm) + dev.POST("/md/natunit/closeeditform", devMdNatUnitHandlers.HandlerCloseFormEdit) + dev.POST("/md/natunit/edit", devMdNatUnitHandlers.HandlerEditNatUnit) } diff --git a/services/dev/md.natunit.services.go b/services/dev/md.natunit.services.go index cde45fb..2ccdb79 100644 --- a/services/dev/md.natunit.services.go +++ b/services/dev/md.natunit.services.go @@ -178,3 +178,57 @@ func (nu *MdNatUnitServices) AddMdNatUnit(code string, name string) (models.NatU } return data, nil } + +func (nu *MdNatUnitServices) EditMdNatUnit(id string, code string, name string) (models.NatUnit, error) { + logger, _ := zap.NewProduction() + var data models.NatUnit + var datacek []models.NatUnit + + qryCek := `SELECT Nat_UnitCode FROM nat_unit + WHERE Nat_UnitCode = ? AND Nat_UnitIsActive = 'Y' AND Nat_UnitID <> ?` + err := dbx.Handlex.Select(&datacek, qryCek, code, id) + + if err != nil { + defer logger.Sync() + logger.Error("Error cek data by code", + zap.String("code", code), + zap.Any("datacek", datacek), + ) + return data, fmt.Errorf("QUERY_FAILED") + } + + if len(datacek) > 0 { + defer logger.Sync() + logger.Error("Code already taken by another data", + zap.String("code", code), + ) + return data, fmt.Errorf("code sudah dipakai") + } + + qry := `UPDATE nat_unit + SET Nat_UnitCode = ?, + Nat_UnitName = ?, + Nat_UnitLastUpdated = NOW() + WHERE Nat_UnitID = ?` + rst := dbx.Handlex.MustExec(qry, code, name, id) + _, err = rst.RowsAffected() + if err != nil { + defer logger.Sync() + logger.Error("Error Update natunit", + zap.String("code", code), + zap.String("name", name), + ) + return data, fmt.Errorf("QUERY_FAILED") + } + + data, err = nu.GetMdNatUnitByID(id) + if err != nil { + defer logger.Sync() + logger.Error("Error get natunit by id", + zap.String("code", code), + zap.String("name", name), + ) + return data, fmt.Errorf("QUERY_FAILED") + } + return data, nil +} diff --git a/views/dev/mdnatunit/mdnatunit.templ b/views/dev/mdnatunit/mdnatunit.templ index 332d399..ea20950 100644 --- a/views/dev/mdnatunit/mdnatunit.templ +++ b/views/dev/mdnatunit/mdnatunit.templ @@ -12,11 +12,14 @@ templ MdNatUnitScreen( searchID string, dialogAddID string, dialogAddBodyID string, + dialogEditID string, + dialogEditBodyID string, breadcrumb templ.Component, tablecontent templ.Component, filterComponent templ.Component, paginationComponent templ.Component, - modalAddForm templ.Component) { + modalAddForm templ.Component, + modalEditForm templ.Component) {