diff --git a/handlers/dev/masterkelainan.handlers.go b/handlers/dev/masterkelainan.handlers.go
index cbf7ac9..ee42588 100644
--- a/handlers/dev/masterkelainan.handlers.go
+++ b/handlers/dev/masterkelainan.handlers.go
@@ -26,6 +26,7 @@ type MasterKelainanService interface {
GetKelainanByID(id string) (models.Kelainan, error)
AddKelainan(name string) (models.Kelainan, error)
DeleteKelainan(id string) (models.Kelainan, error)
+ UpdateFlagStatusKelainan(id string, status 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)
GetKelainanDetailByID(id string) (models.KelainanDetail, error)
@@ -187,6 +188,8 @@ func (lh *MasterKelainanHandler) HandlerShowMasterKelainan(c echo.Context) error
// component table listing kelainan
contentKelainanComponent := masterkelainan.TableKelainan(
dataKelainan, tableID,
+ "/dev/kelainan/flagaktif",
+ "outerHTML",
"/dev/kelainan/opendelete",
"#"+dialogDeleteBodyID,
"outerHTML",
@@ -444,6 +447,8 @@ func (lh *MasterKelainanHandler) HandlerShowMasterKelainanSearch(c echo.Context)
contentKelainanComponent := masterkelainan.TableKelainan(
dataKelainan, tableID,
+ "/dev/kelainan/flagaktif",
+ "outerHTML",
"/dev/kelainan/opendelete",
"#"+dialogDeleteBodyID,
"outerHTML",
@@ -496,6 +501,8 @@ func (lh *MasterKelainanHandler) HandlerShowMasterKelainanPagination(c echo.Cont
contentKelainanComponent := masterkelainan.TableKelainan(
dataKelainan, tableID,
+ "/dev/kelainan/flagaktif",
+ "outerHTML",
"/dev/kelainan/opendelete",
"#"+dialogDeleteBodyID,
"outerHTML",
@@ -632,6 +639,8 @@ func (lh *MasterKelainanHandler) AddKelainan(c echo.Context) error {
// New table listing
contentKelainanComponent := masterkelainan.TableKelainan(
dataKelainanList, tableID,
+ "/dev/kelainan/flagaktif",
+ "outerHTML",
"/dev/kelainan/opendelete",
"#"+dialogDeleteBodyID,
"outerHTML",
@@ -783,6 +792,8 @@ func (lh *MasterKelainanHandler) HandleDeleteKelainan(c echo.Context) error {
//table component
tableComponent := masterkelainan.TableKelainan(dataKelainanList,
tableID,
+ "/dev/kelainan/flagaktif",
+ "outerHTML",
"/dev/kelainan/opendelete",
"#"+dialogDeleteBodyID,
"outerHTML",
@@ -816,6 +827,61 @@ func (lh *MasterKelainanHandler) HandleDeleteKelainan(c echo.Context) error {
return utils.ViewMulti(c, retVal)
}
+func (lh *MasterKelainanHandler) HandlerUpdateStatusKelainanAktif(c echo.Context) error {
+ logger, _ := zap.NewProduction()
+ defer logger.Sync()
+
+ id := c.QueryParam("id")
+ selectedStatus := c.QueryParam("selectedStatus")
+
+ logger.Info("CEK kelainan id",
+ zap.Any("kelainan id", id),
+ zap.Any("selectedStatus", selectedStatus))
+
+ dataKelainan, err := lh.MasterKelainanService.UpdateFlagStatusKelainan(id, selectedStatus)
+ if err != nil {
+ defer logger.Sync()
+ logger.Info("ERROR UPDATE STATUS KELAINAN",
+ zap.Any("error", err),
+ )
+ fmt.Println(dataKelainan)
+ return utils.ViewMulti(c, []templ.Component{
+ customtoastv2.CustomToastV2Show("Error", err.Error(), "danger")})
+ }
+
+ if selectedStatus == "Y" {
+ buttonCmp := masterkelainan.CustomButtonTidak(
+ models.ButtonPrm{
+ ID: "non" + id,
+ HxGet: "/dev/kelainan/flagaktif",
+ HxTarget: "this",
+ HxSwap: "outerHTML",
+ Label: "Tidak",
+ Class: "col-12 col-sm-12 col-md-12 col-lg-5 col-xl-5 col-xxl-5 btn btn-light-danger mb-2",
+ },
+ )
+
+ toastSuccess := customtoastv2.CustomToastV2Show("Success", "Berhasil update status Grup Kelainan", "success")
+
+ return utils.ViewMulti(c, []templ.Component{toastSuccess, buttonCmp})
+ } else {
+ buttonCmp := masterkelainan.CustomButtonTidak(
+ models.ButtonPrm{
+ ID: "active" + id,
+ HxGet: "/dev/kelainan/flagaktif",
+ HxTarget: "this",
+ HxSwap: "outerHTML",
+ Label: "Aktif",
+ Class: "col-12 col-sm-12 col-md-12 col-lg-5 col-xl-5 col-xxl-5 btn btn-light-tosca mb-2",
+ },
+ )
+
+ toastSuccess := customtoastv2.CustomToastV2Show("Success", "Berhasil update status Grup Kelainan", "success")
+
+ return utils.ViewMulti(c, []templ.Component{toastSuccess, buttonCmp})
+ }
+}
+
// master kelainan detail
func (lh *MasterKelainanHandler) HandlerShowMasterKelainanDetail(c echo.Context) error {
logger, _ := zap.NewProduction()
diff --git a/handlers/routes.go b/handlers/routes.go
index 83fe85a..502e898 100644
--- a/handlers/routes.go
+++ b/handlers/routes.go
@@ -223,6 +223,7 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
dev.GET("/kelainan/opendelete", devKLhandlers.HandleOpenDeleteForm)
dev.POST("/kelainan/closedeleteform", devKLhandlers.HandleCloseFormDelete)
dev.POST("/kelainan/delete", devKLhandlers.HandleDeleteKelainan)
+ dev.GET("/kelainan/flagaktif", devKLhandlers.HandlerUpdateStatusKelainanAktif)
dev.GET("/kelainan/selected", devKLhandlers.HandlerShowMasterKelainanDetail)
dev.GET("/searchkelainandetail", devKLhandlers.HandlerShowMdKelainanDetailSearch)
dev.GET("/kelainandetailpagination", devKLhandlers.HandlerShowMdKelainanDetailPagination)
diff --git a/models/kelainan.models.go b/models/kelainan.models.go
index 408f72d..70d104e 100644
--- a/models/kelainan.models.go
+++ b/models/kelainan.models.go
@@ -83,3 +83,15 @@ type SwitchclassPrm struct {
Name string `default:"name"`
ID string
}
+
+type ButtonPrm struct {
+ ID string
+ Label string `default:"default"`
+ Type string `default:"type"`
+ Class string `default:"class"`
+ Color string `default:"color"`
+ HxGet string
+ HxTarget string
+ HxSwap string
+ HxInclude string
+}
diff --git a/services/dev/masterkelainan.services.go b/services/dev/masterkelainan.services.go
index 2fbc201..8249a29 100644
--- a/services/dev/masterkelainan.services.go
+++ b/services/dev/masterkelainan.services.go
@@ -221,6 +221,49 @@ func (su *ServicesMasterKelainan) DeleteKelainan(id string) (models.Kelainan, er
return data, nil
}
+func (su *ServicesMasterKelainan) UpdateFlagStatusKelainan(id string, status string) (models.Kelainan, error) {
+ logger, _ := zap.NewProduction()
+ var data models.Kelainan
+
+ if status == "N" {
+ qry := `UPDATE mcu_kelainangroup
+ SET Mcu_KelainanGroupFlagActive = 'Y',
+ Mcu_KelainanGroupLastUpdated = NOW()
+ WHERE Mcu_KelainanGroupID = ?`
+
+ rst := dbx.Handlex.MustExec(qry, id)
+ _, err := rst.RowsAffected()
+
+ if err != nil {
+ defer logger.Sync()
+ logger.Error("Error update status",
+ zap.String("id", id),
+ zap.String("status", status),
+ )
+ return data, fmt.Errorf("QUERY_FAILED")
+ }
+ } else {
+ qry := `UPDATE mcu_kelainangroup
+ SET Mcu_KelainanGroupFlagActive = 'N',
+ Mcu_KelainanGroupLastUpdated = NOW()
+ WHERE Mcu_KelainanGroupID = ?`
+
+ rst := dbx.Handlex.MustExec(qry, id)
+ _, err := rst.RowsAffected()
+
+ if err != nil {
+ defer logger.Sync()
+ logger.Error("Error update status",
+ zap.String("id", id),
+ zap.String("status", status),
+ )
+ return data, fmt.Errorf("QUERY_FAILED")
+ }
+ }
+
+ return data, nil
+}
+
// end master group kelainan
// master kelainan detail
diff --git a/views/dev/masterkelainan/mdkelainantable.templ b/views/dev/masterkelainan/mdkelainantable.templ
index 684fb33..97949a4 100644
--- a/views/dev/masterkelainan/mdkelainantable.templ
+++ b/views/dev/masterkelainan/mdkelainantable.templ
@@ -8,6 +8,8 @@ import (
templ TableKelainan(data []models.Kelainan,
tableID string,
+ hxGetActive string,
+ hxSwapActive string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
@@ -19,6 +21,8 @@ templ TableKelainan(data []models.Kelainan,
@tablecomponent.TableV3([]string{"NO", "GRUP KELAINAN", "AKSI"},
[]string{"10%", "60%", "30%"},
TableRow(data,
+ hxGetActive,
+ hxSwapActive,
hxGetDelete,
hxTargetDelete,
hxSwapDelete,
@@ -43,6 +47,8 @@ script HandleAfterRequesX(idx string) {
}
templ TableRow(data []models.Kelainan,
+ hxGetActive string,
+ hxSwapActive string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
@@ -60,7 +66,7 @@ templ TableRow(data []models.Kelainan,
id={ "sas" + strconv.Itoa(v.Mcu_KelainanGroupID) }
hx-get={ hxGetSelected + "?id=" + strconv.Itoa(v.Mcu_KelainanGroupID) }
hx-trigger="click"
- hx-include={ "#selectedID, #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, #tableID, #tableDetailID, #paginationDetailID, #searchDetailID, #dialogDetailDeleteBodyID, #dialogDetailDeleteID, #sas" + strconv.Itoa(v.Mcu_KelainanGroupID) }
+ hx-include={ "#selectedID, #paginationID, #dialogDeleteBodyID, #dialogDeleteID, #tableID, #tableDetailID, #paginationDetailID, #searchDetailID, #dialogDetailDeleteBodyID, #dialogDetailDeleteID, #sas" + strconv.Itoa(v.Mcu_KelainanGroupID) }
onclick={ clickHandler(strconv.Itoa(v.Mcu_KelainanGroupID)) }
hx-target={ hxTargetSelected }
hx-on::after-request={ HandleAfterRequesX(strconv.Itoa(v.Mcu_KelainanGroupID)) }
@@ -69,7 +75,11 @@ templ TableRow(data []models.Kelainan,
{ v.Nomor } |
{ v.Mcu_KelainanGroupName } |
- @TableAction(v.Mcu_KelainanGroupID,
+ @TableAction("#active"+strconv.Itoa(v.Mcu_KelainanGroupID),
+ v.Mcu_KelainanGroupID,
+ v.Mcu_KelainanGroupFlagActive,
+ hxGetActive,
+ hxSwapActive,
hxGetDelete,
hxTargetDelete,
hxSwapDelete,
@@ -81,13 +91,40 @@ templ TableRow(data []models.Kelainan,
}
templ TableAction(
+ idrowactive string,
id int,
+ flag string,
+ hxGetActive string,
+ hxSwapActive string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
hxIncludeDelete string,
) {
+ switch flag {
+ case "Y":
+
+ Aktif
+
+ case "N":
+
+ Tidak
+
+ default:
+ { "Unknown Flag" }
+ }
}
+
+templ CustomButtonTidak(inp models.ButtonPrm) {
+
+ { inp.Label }
+
+}
diff --git a/views/dev/masterkelainan/mdkelainantable_templ.go b/views/dev/masterkelainan/mdkelainantable_templ.go
index bf1d21f..a923e2b 100644
--- a/views/dev/masterkelainan/mdkelainantable_templ.go
+++ b/views/dev/masterkelainan/mdkelainantable_templ.go
@@ -18,6 +18,8 @@ import (
func TableKelainan(data []models.Kelainan,
tableID string,
+ hxGetActive string,
+ hxSwapActive string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
@@ -44,7 +46,7 @@ func TableKelainan(data []models.Kelainan,
var templ_7745c5c3_Var2 string
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(tableID)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 18, Col: 18}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 20, Col: 18}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
if templ_7745c5c3_Err != nil {
@@ -57,6 +59,8 @@ func TableKelainan(data []models.Kelainan,
templ_7745c5c3_Err = tablecomponent.TableV3([]string{"NO", "GRUP KELAINAN", "AKSI"},
[]string{"10%", "60%", "30%"},
TableRow(data,
+ hxGetActive,
+ hxSwapActive,
hxGetDelete,
hxTargetDelete,
hxSwapDelete,
@@ -104,6 +108,8 @@ func HandleAfterRequesX(idx string) templ.ComponentScript {
}
func TableRow(data []models.Kelainan,
+ hxGetActive string,
+ hxSwapActive string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
@@ -141,7 +147,7 @@ func TableRow(data []models.Kelainan,
var templ_7745c5c3_Var4 string
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs("sas" + strconv.Itoa(v.Mcu_KelainanGroupID))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 60, Col: 51}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 66, Col: 51}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
if templ_7745c5c3_Err != nil {
@@ -154,7 +160,7 @@ func TableRow(data []models.Kelainan,
var templ_7745c5c3_Var5 string
templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(hxGetSelected + "?id=" + strconv.Itoa(v.Mcu_KelainanGroupID))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 61, Col: 72}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 67, Col: 72}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
if templ_7745c5c3_Err != nil {
@@ -165,9 +171,9 @@ func TableRow(data []models.Kelainan,
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var6 string
- templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs("#selectedID, #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, #tableID, #tableDetailID, #paginationDetailID, #searchDetailID, #dialogDetailDeleteBodyID, #dialogDetailDeleteID, #sas" + strconv.Itoa(v.Mcu_KelainanGroupID))
+ templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs("#selectedID, #paginationID, #dialogDeleteBodyID, #dialogDeleteID, #tableID, #tableDetailID, #paginationDetailID, #searchDetailID, #dialogDetailDeleteBodyID, #dialogDetailDeleteID, #sas" + strconv.Itoa(v.Mcu_KelainanGroupID))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 63, Col: 274}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 69, Col: 240}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
if templ_7745c5c3_Err != nil {
@@ -189,7 +195,7 @@ func TableRow(data []models.Kelainan,
var templ_7745c5c3_Var8 string
templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(hxTargetSelected)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 65, Col: 31}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 71, Col: 31}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
if templ_7745c5c3_Err != nil {
@@ -211,7 +217,7 @@ func TableRow(data []models.Kelainan,
var templ_7745c5c3_Var10 string
templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(v.Nomor)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 69, Col: 16}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 75, Col: 16}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
if templ_7745c5c3_Err != nil {
@@ -224,7 +230,7 @@ func TableRow(data []models.Kelainan,
var templ_7745c5c3_Var11 string
templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(v.Mcu_KelainanGroupName)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 70, Col: 32}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 76, Col: 32}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
if templ_7745c5c3_Err != nil {
@@ -234,7 +240,11 @@ func TableRow(data []models.Kelainan,
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = TableAction(v.Mcu_KelainanGroupID,
+ templ_7745c5c3_Err = TableAction("#active"+strconv.Itoa(v.Mcu_KelainanGroupID),
+ v.Mcu_KelainanGroupID,
+ v.Mcu_KelainanGroupFlagActive,
+ hxGetActive,
+ hxSwapActive,
hxGetDelete,
hxTargetDelete,
hxSwapDelete,
@@ -256,7 +266,11 @@ func TableRow(data []models.Kelainan,
}
func TableAction(
+ idrowactive string,
id int,
+ flag string,
+ hxGetActive string,
+ hxSwapActive string,
hxGetDelete string,
hxTargetDelete string,
hxSwapDelete string,
@@ -274,16 +288,115 @@ func TableAction(
templ_7745c5c3_Var12 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var13 string
- templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(hxGetDelete + "?id=" + strconv.Itoa(id))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 95, Col: 51}
+ switch flag {
+ case "Y":
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("Aktif\r ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ case "N":
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" Tidak\r ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ default:
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var18 string
+ templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs("Unknown Flag")
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 126, Col: 26}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var31 string
+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(inp.Label)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `views\dev\masterkelainan\mdkelainantable.templ`, Line: 152, Col: 13}
+ }
+ _, 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("")
+ 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
+ })
+}
|