From 0357531e7343916a7a7300773e3a376d5f634f35 Mon Sep 17 00:00:00 2001 From: giovanni Date: Thu, 7 May 2026 14:03:17 +0700 Subject: [PATCH] add sorting at marketing --- .../controllers/deliveryorder.controller.go | 8 ++++++++ .../services/deliveryorder.service.go | 20 ++++++++++++++++++- .../validations/deliveryorder.validation.go | 2 ++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/internal/modules/marketing/controllers/deliveryorder.controller.go b/internal/modules/marketing/controllers/deliveryorder.controller.go index bb285294..e9ccb285 100644 --- a/internal/modules/marketing/controllers/deliveryorder.controller.go +++ b/internal/modules/marketing/controllers/deliveryorder.controller.go @@ -56,6 +56,12 @@ func (u *DeliveryOrdersController) GetAll(c *fiber.Ctx) error { return fiber.NewError(fiber.StatusBadRequest, "Invalid product_ids") } + sortBy := strings.TrimSpace(c.Query("sort_by", "")) + sortOrder := strings.TrimSpace(c.Query("sort_order", "")) + if sortOrder == "" { + sortOrder = "asc" + } + query := &validation.DeliveryOrderQuery{ Page: c.QueryInt("page", 1), Limit: c.QueryInt("limit", 10), @@ -66,6 +72,8 @@ func (u *DeliveryOrdersController) GetAll(c *fiber.Ctx) error { MarketingId: uint(c.QueryInt("marketing_id", 0)), ProjectFlockID: uint(c.QueryInt("project_flock_id", 0)), ProjectFlockKandangID: uint(c.QueryInt("project_flock_kandang_id", 0)), + SortBy: sortBy, + SortOrder: sortOrder, } if isAllExcelExportRequest(c) { diff --git a/internal/modules/marketing/services/deliveryorder.service.go b/internal/modules/marketing/services/deliveryorder.service.go index c06ff3de..5bd3c258 100644 --- a/internal/modules/marketing/services/deliveryorder.service.go +++ b/internal/modules/marketing/services/deliveryorder.service.go @@ -292,7 +292,25 @@ func (s deliveryOrdersService) GetAll(c *fiber.Ctx, params *validation.DeliveryO if params.MarketingId != 0 { return db.Where("id = ?", params.MarketingId) } - return db.Order("created_at DESC").Order("updated_at DESC") + + orderDir := "DESC" + if params.SortOrder != "" { + orderDir = strings.ToUpper(params.SortOrder) + } + + switch strings.TrimSpace(params.SortBy) { + case "so_number": + return db.Order("marketings.so_number " + orderDir) + case "so_date": + return db.Order("marketings.so_date " + orderDir) + case "status": + statusSQL := "(SELECT step_name FROM approvals WHERE approvable_type = '" + utils.ApprovalWorkflowMarketing.String() + "' AND approvable_id = marketings.id ORDER BY action_at DESC, id DESC LIMIT 1) " + orderDir + return db.Order(statusSQL) + case "customer": + return db.Joins("LEFT JOIN customers ON customers.id = marketings.customer_id").Order("COALESCE(customers.name, '') " + orderDir) + default: + return db.Order("created_at DESC").Order("updated_at DESC") + } }) if err != nil { return nil, 0, err diff --git a/internal/modules/marketing/validations/deliveryorder.validation.go b/internal/modules/marketing/validations/deliveryorder.validation.go index 4af4f89a..8b964221 100644 --- a/internal/modules/marketing/validations/deliveryorder.validation.go +++ b/internal/modules/marketing/validations/deliveryorder.validation.go @@ -31,6 +31,8 @@ type DeliveryOrderQuery struct { MarketingId uint `query:"marketing_id" validate:"omitempty,gt=0"` ProjectFlockID uint `query:"project_flock_id" validate:"omitempty,gt=0"` ProjectFlockKandangID uint `query:"project_flock_kandang_id" validate:"omitempty,gt=0"` + SortBy string `query:"sort_by" validate:"omitempty,oneof=so_number so_date status customer"` + SortOrder string `query:"sort_order" validate:"omitempty,oneof=asc desc"` } type DeliveryOrderApprove struct {