fix filter purchase ?approval_status=approved,rejected and ?product_category_id=1,2,3

This commit is contained in:
ragilap
2026-04-01 16:06:57 +07:00
committed by giovanni
parent 2a3154042c
commit aa9863646e
@@ -175,7 +175,6 @@ func (s *purchaseService) GetAll(c *fiber.Ctx, params *validation.Query) ([]enti
for i := range approvalStatuses { for i := range approvalStatuses {
approvalStatuses[i] = normalizeApprovalStatusFilter(approvalStatuses[i]) approvalStatuses[i] = normalizeApprovalStatusFilter(approvalStatuses[i])
} }
approvalStatus := normalizeApprovalStatusFilter(params.ApprovalStatus)
purchases, total, err := s.PurchaseRepo.GetAll(c.Context(), offset, params.Limit, func(db *gorm.DB) *gorm.DB { purchases, total, err := s.PurchaseRepo.GetAll(c.Context(), offset, params.Limit, func(db *gorm.DB) *gorm.DB {
db = s.withRelations(db) db = s.withRelations(db)
@@ -326,34 +325,41 @@ func (s *purchaseService) GetAll(c *fiber.Ctx, params *validation.Query) ([]enti
) )
} }
if approvalStatus != "" { if len(approvalStatuses) > 0 {
approvalLike := "%" + approvalStatus + "%" approvalConditions := make([]string, 0, len(approvalStatuses))
db = db.Where( approvalArgs := make([]any, 0, 2+(len(approvalStatuses)*3))
`EXISTS ( approvalArgs = append(approvalArgs, utils.ApprovalWorkflowPurchase.String(), utils.ApprovalWorkflowPurchase.String())
SELECT 1 for _, status := range approvalStatuses {
FROM approvals a if status == "" {
WHERE a.approvable_type = ? continue
AND a.approvable_id = purchases.id }
AND a.id = ( like := "%" + status + "%"
SELECT a2.id approvalConditions = append(approvalConditions, `(LOWER(COALESCE(a.step_name, '')) LIKE ? OR LOWER(COALESCE(CAST(a.action AS TEXT), '')) LIKE ? OR CAST(a.step_number AS TEXT) = ?)`)
FROM approvals a2 approvalArgs = append(approvalArgs, like, like, status)
WHERE a2.approvable_type = ? }
AND a2.approvable_id = purchases.id
ORDER BY a2.action_at DESC, a2.id DESC if len(approvalConditions) > 0 {
LIMIT 1 approvalClause := strings.Join(approvalConditions, " OR ")
) approvalQuery := fmt.Sprintf(
AND ( `EXISTS (
LOWER(COALESCE(a.step_name, '')) LIKE ? SELECT 1
OR LOWER(COALESCE(CAST(a.action AS TEXT), '')) LIKE ? FROM approvals a
OR CAST(a.step_number AS TEXT) = ? WHERE a.approvable_type = ?
) AND a.approvable_id = purchases.id
)`, AND a.id = (
utils.ApprovalWorkflowPurchase.String(), SELECT a2.id
utils.ApprovalWorkflowPurchase.String(), FROM approvals a2
approvalLike, WHERE a2.approvable_type = ?
approvalLike, AND a2.approvable_id = purchases.id
approvalStatus, ORDER BY a2.action_at DESC, a2.id DESC
) LIMIT 1
)
AND (%s)
)`,
approvalClause,
)
db = db.Where(approvalQuery, approvalArgs...)
}
} }
if search != "" { if search != "" {